.NET的最佳构建工具是什么?
答案 0 :(得分:28)
我们实际上使用NAnt和MSBuild与CruiseControl的组合。 NAnt用于脚本流控制并调用MSBuild来编译项目。触发物理构建后,NAnt用于将各个项目构建输出发布到共享位置。
我不确定这是最好的过程。我想我们中的许多人仍然在寻找一款出色的构建工具。我最近在.NET Rocks上发现的一个有希望的事情是episode 362,James Kovac's PSake,一个完全基于PowerShell的构建系统。这听起来很有希望,因为你可以用PowerShell做的事情在理论上是相当无限的。
答案 1 :(得分:18)
我只想把FinalBuilder扔进去。这不是免费的,但是如果你厌倦了编辑XML文件并想要一个更好的(IMO)环境来工作,我会试一试。
我和他们一起工作过并且总是回到FinalBuilder。
答案 2 :(得分:8)
还有另一个名为 NUBuild 的新构建工具(一个非常智能的包装器)。它重量轻,开源,非常易于安装,几乎不需要维护。我非常喜欢这个新工具,我们已经将它作为我们项目持续构建和集成的标准工具(我们在75个开发人员中拥有大约400个项目)。尝试一下。
答案 3 :(得分:7)
我完全使用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。 Clean目标在所有项目文件上调用MSBuild,以便清理它们的目录,然后删除全局部署目录。重建调用Clean然后Build。
答案 4 :(得分:4)
Rake和长鳍金枪鱼是一个很好的组合。 Ruby的力量,没有XML。
.NET Open Source 5 - .NET Automation with Rake and Albacore by Liam McLennan [Tekpub.com]
答案 5 :(得分:3)
我们正在使用Bounce,一个用于C#中的清洁构建脚本的框架。
答案 6 :(得分:2)
我们使用MSBuild,因为我们从Visual Studio 2005(现在是Visual Studio 2008)开始,并且MSBuild已经“内置”到SDK中 - 构建服务器上的维护更少。这是一个NAnt克隆,实际上 - 这两个工具都是无限灵活的,因为它们允许您在代码中创建自定义构建任务,并且两者都已经创建了一组体面的社区构建任务。
答案 7 :(得分:2)
我使用商业软件Automated Build Studio来构建目的。
答案 8 :(得分:1)
我使用过两者并且更喜欢NAnt。我真的很难说一个人比另一个人“更好”。
答案 9 :(得分:1)
它还取决于您正在构建的 。 MSBuild SDC Task library有几项特殊任务。例如,AD,BizTalk等
包含300多项任务 该库包括以下任务: 创建网站,创建 应用程序池,创建 运行FxCop的ActiveDirectory用户, 配置虚拟服务器,创建 zip文件,配置COM+,创建 文件夹共享,安装到 GAC,配置SQL Server, 配置BizTalk 2004和BizTalk 2006等等。
答案 10 :(得分:1)
使用Python,BOO,Ruby等动态脚本语言来创建和维护构建脚本可能是基于XML的NAnt的一个很好的替代方法。 (它们比XML更易于阅读。)
答案 11 :(得分:0)
一般来说,我觉得NAnt与MSBuild相比提供了更大的灵活性,而(根据我相对简单的需求)到目前为止我对后者一直很好。
答案 12 :(得分:0)
我已经使用了MSBuild和NAnt,我更喜欢MSBuild,主要是因为默认情况下它需要的配置要少得多。虽然你可以过度复杂化并加载MSBuild,但也有很多配置垃圾,最简单的是,你可以将它指向一个解决方案/项目文件并让它在大多数情况下大多数时候都是够了。
答案 13 :(得分:0)
UppercuT使用NAnt构建,它是一个非常容易使用的Build Framework。
自动构建与(1)解决方案名称,(2)源控制路径,(3)大多数项目的公司名称一样简单!
这里有一些很好的解释:UppercuT