最佳的.NET生成工具
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之类的自定义记录器
- 解析错误日志的能力
- 能够将构建的程序集部署到用户指定的位置
- 能够与源代码控制系统同步源代码
- 版本管理能力