最佳的.NET生成工具

时间:2020-03-05 18:40:48  来源:igfitidea点击:
Possible Duplicate:

  NAnt or MSBuild, which one to choose and when?

什么是.NET的最佳构建工具?

我目前使用NAnt,但仅是因为我有使用Ant的经验。 MSBuild是首选吗?

解决方案

回答

总体而言,我给人的印象是,与MSBuild相比,NAnt提供了更多的灵活性,而(由于我的相对简单的需求)到目前为止,我对后者感到满意。

回答

我们使用MSBuild,因为我们从VisualStudio2005(现在为VisualStudio2008)开始,并且MSBuild已"内置"到SDK中,因此构建服务器上的维护较少。这是一个NAnt克隆,实际上这两个工具都具有无限的灵活性,因为它们可以让我们在代码中创建自定义构建任务,并且两个工具都已经创建了一组不错的社区构建任务。

  • MSBuild社区任务
  • NAntContrib

回答

实际上,我们将NAnt和MSBuild与CruiseControl结合使用。 NAnt用于脚本流控制,并调用MSBuild来编译项目。触发物理构建后,将使用NAnt将单个项目的构建输出发布到共享位置。

我不确定这是最好的过程。我认为我们许多人仍在寻找出色的构建工具。我最近在.NET Rocks上第362集上听到的有希望的一件事是James Kovac的PSake,他是一个完全基于PowerShell的构建系统。听起来确实很有希望,因为从理论上讲,我们可以使用PowerShell进行的操作是无限的。

回答

我既使用过又喜欢NAnt。我很难说一个比另一个更好。

回答

我同时使用了MSBuild和NAnt,并且我更喜欢MSBuild,主要是因为默认情况下它需要的配置要少得多。尽管我们可能会使事情变得过于复杂,并使用大量配置垃圾来加载MSBuild,但最简单的是,我们可以将其指向解决方案/项目文件,然后将其移至大多数情况下足够的。

回答

它还取决于我们要构建的内容。 MSBuild SDC任务库具有几个特殊任务。例如对于AD,BizTalk等。

There are over 300 tasks included in
  this library including tasks for:
  creating websites, creating
  application pools, creating
  ActiveDirectory users, running FxCop,
  configuring virtual servers, creating
  zip files, configuring COM+, creating
  folder shares, installing into the
  GAC, configuring SQL Server,
  configuring BizTalk 2004 and BizTalk
  2006, etc.

回答

我只想将FinalBuilder加入其中。它不是免费的,但是如果我们厌倦了编辑XML文件并希望在一个更好的(IMO)环境中工作,那么我会考虑的。

我已经与所有这些人一起工作,并且总是回到FinalBuilder。

回答

我完全使用MSBuild进行构建。这是我的通用MSBuild脚本,该脚本在树中搜索.csproj文件并进行构建:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
  <UsingTask AssemblyFile="$(MSBuildProjectDirectory)\bin\xUnit\xunitext.runner.msbuild.dll" TaskName="XunitExt.Runner.MSBuild.xunit"/>
  <PropertyGroup>
    <Configuration Condition="'$(Configuration)'==''">Debug</Configuration>
    <DeployDir>$(MSBuildProjectDirectory)\Build$(Configuration)</DeployDir>
    <ProjectMask>$(MSBuildProjectDirectory)\**\*.csproj</ProjectMask>
    <ProjectExcludeMask></ProjectExcludeMask>
    <TestAssembliesIncludeMask>$(DeployDir)\*.Test.dll</TestAssembliesIncludeMask>
  </PropertyGroup>

  <ItemGroup>
    <ProjectFiles Include="$(ProjectMask)" Exclude="$(ProjectExcludeMask)"/>
  </ItemGroup>

  <Target Name="Build" DependsOnTargets="__Compile;__Deploy;__Test"/>

  <Target Name="Clean">
    <MSBuild Projects="@(ProjectFiles)" Targets="Clean"/>
    <RemoveDir Directories="$(DeployDir)"/>
  </Target>

  <Target Name="Rebuild" DependsOnTargets="Clean;Build"/>

  <!--
  ===== Targets that are meant for use only by MSBuild =====
  -->
  <Target Name="__Compile">
    <MSBuild Projects="@(ProjectFiles)" Targets="Build">
      <Output TaskParameter="TargetOutputs" ItemName="AssembliesBuilt"/>
    </MSBuild>
    <CreateItem Include="@(AssembliesBuilt -> '%(RootDir)%(Directory)*')">
      <Output TaskParameter="Include" ItemName="DeployFiles"/>
    </CreateItem>
  </Target>

  <Target Name="__Deploy">
    <MakeDir Directories="$(DeployDir)"/>
    <Copy SourceFiles="@(DeployFiles)" DestinationFolder="$(DeployDir)"/>
    <CreateItem Include="$(TestAssembliesIncludeMask)">
      <Output TaskParameter="Include" ItemName="TestAssemblies"/>
    </CreateItem>
  </Target>

  <Target Name="__Test">
    <xunit Assembly="@(TestAssemblies)"/>
  </Target>
</Project>

(很抱歉,如果它有点密集。Markdown似乎正在删除空白行。)

这很简单,但是一旦我们了解了概念,并且所有依赖项都会自动处理。我应该注意,我们使用Visual Studio项目文件,这些文件中内置了很多逻辑,但是该系统使人们可以在Visual Studio IDE或者命令行中几乎完全相同地进行构建,并且仍然可以灵活地添加内容到我们在上面的脚本中看到的xUnit测试之类的规范构建。

一个PropertyGroup是所有配置发生的地方,并且可以自定义事物,例如从构建中排除某些项目或者添加新的测试装配模板。

发生逻辑的ItemGroup是在树中找到所有.csproj文件的地方。

然后是目标,大多数熟悉make,nAnt或者MSBuild的人都应该遵循这些目标。如果调用Build目标,它将调用__Compile,__ Deploy和__Test。清理目标在所有项目文件上调用MSBuild来清理它们的目录,然后删除全局部署目录。重建调用"清理",然后重建。

回答

使用动态脚本语言(如Python,BOO,Ruby等)创建和维护构建脚本可能是替代基于XML的NAnt的好方法。 (它们往往比XML更干净。)

回答

我使用商业软件Automated Build Studio进行构建。

回答

UppercuT使用NAnt进行构建,并且它非常易于使用。

对于大多数项目,自动构建就像(1)解决方案名称,(2)源代码控制路径,(3)公司名称一样简单!

http://projectuppercut.org/

这里有一些很好的解释:UppercuT

回答

还有另一个称为NUBuild的新构建工具(非常智能的包装器)。它是轻量级的,开源的,并且非常易于设置,并且几乎没有接触维护。我真的很喜欢这个新工具,我们已经将其作为我们持续构建和集成项目的标准工具(我们有75个开发人员的大约400个项目)。试试看。

http://nubuild.codeplex.com/

  • 易于使用的命令行界面
  • 能够定位所有.NET Framework版本,即1.1、2.0、3.0和3.5
  • 支持基于XML的配置
  • 支持项目和文件引用
  • 自动为给定项目生成完整的有序构建列表,无需维护。
  • 能够检测和显示循环依赖
  • 执行并行构建-自动确定生成的构建列表中的哪些项目可以独立构建。
  • 处理代理程序集的能力
  • 提供有关构建过程的直观线索,例如,显示已完成百分比,当前状态等。
  • 生成XML和文本格式的详细执行日志
  • 轻松与CruiseControl.NET持续集成系统集成
  • 定位到2.0及更高版本时,可以使用XMLLogger之类的自定义记录器
  • 解析错误日志的能力
  • 能够将构建的程序集部署到用户指定的位置
  • 能够与源代码控制系统同步源代码
  • 版本管理能力