好的,所以我很容易承认,在持续集成方面,我是新手。
话虽这么说,我正在尝试建立一个CC.NET环境来教育自己,但是我无法找到设置自动构建部分所需的信息。
据我了解,在C#中,VS 2005生成的.csproj文件和转发是一个有效的MSBuild文件。也就是说,我已经能够使用.csproj文件将MSBuild任务集成到CC.NET中,但我有一些问题:
$(MSBuildToolsPath)\Microsoft.CSharp.targets
AfterBuild
部分,这对我来说似乎有点像黑客。因此,对于CC.NET人员,MSBuild人员和MbUnit人员提出了几个问题。
Target Name="AfterBuild"
真的是添加该信息的部分吗?不应该有Target Name="Test"
部分吗?使用VS生成的.csproj文件似乎阻止了第二个选项。我知道那里有很多东西,但我在网上找到的大部分内容都假定我对这些主题有一定程度的熟悉程度 - 除非我弄错了,学习曲线为这个东西根本不是曲线,它是一个阶梯函数。 :)
编辑1:我更新了文本,使其更简洁,并解决了我对答案的一些挥之不去的问题。
答案 0 :(得分:13)
我建议使用生成的.csproj文件 - 实际上用于生产,我认为使用生成的.sln文件是一个好主意。我发现使用与开发人员相同的解决方案文件可以获得收益。
请注意.sln文件实际上并不是有效的msbuild项目文件 - 当它们用作输入时,它们会被msbuild本身转换为msbuild项目。棘手!
出于学习目的,您可能希望记录.csproj的构建并逐步了解以了解正在发生的事情。虽然MSBuild比nant更有说服力,所以请花点时间和实验。
最后,我将.sln或.csproj文件包装在带有msbuild任务的连续构建脚本项目中,以构建项目并一起运行单元测试。这样开发人员不必每次构建时都运行单元测试 - 但每次集成代码时,单元测试都会运行。是的,确保他们跑得快!任何需要超过一秒的东西应该在预定的(每晚?)构建期间运行。可能它们的单元测试较少,并且如果它们花费的时间超过一秒,则会使用单元测试框架编写更多的集成测试。
编辑:我发现有些附加信息我发现有用 - 使用MSBuild 3.5将允许您从.sln文件获取目标输出,而MSBuild 2.0中不返回此信息(虽然我认为它应该适用于两个版本中的.csproj文件)。您可以使用输出(构建的文件)作为单元测试框架的输入。
答案 1 :(得分:4)
单独保留csproj文件(如你所说,你不明白)。
创建自己的msbuild proj文件,并通过msbuild任务从主构建文件中调用csproj(或sln)。告诉您的CI服务器构建您的构建文件。
这种分离使您可以更轻松地添加自己的前期和后期任务(单元测试,冒烟测试SQL脚本,fxcop /其他静态分析等),您不会破坏您的工作环境。这也意味着你可以随心所欲地完成你的自定义目标(msbuild / ant等)。在codeplex上看看MSBuildContrib,以获得额外的好处。
你的构建服务器上不需要visual stuido(unles你有部署项目,除非我上次查看时也改变了)
答案 2 :(得分:3)
创建您自己的项目文件(以* proj结尾的任何内容都被MSBuild视为项目文件)并从那里调用您的构建。像这样:
<MSBuild Projects="MySolution.sln" Targets="Clean; Rebuild" Properties="Configuration=$(BuildMode);">
请注意,msbuild还可以构建.sln(解决方案文件)而无需任何更改,这通常比拥有一堆csproj文件更容易......
答案 3 :(得分:2)
我同时使用NAnt和MSBuild。 NAnt已升级为NAntContrib,因此我获得了msbuild次。我可能是临时设置,但到目前为止我没有遇到重大问题。也就是说我也没有创建一个新的csproj文件,因为我使用的是与我在VS2008中使用的相同的csproj / sln。 使用msbuild构建项目大大简化了传统的NAnt脚本(我们使用了csc任务)。
注意:
答案 4 :(得分:1)
我个人认为可以使用.csproj文件。那里没有那么多,你不必在添加自己的MSBuild项目时添加自己。
但是,无论您决定采用哪种方式,我仍然建议您不要将MbUnit添加为构建步骤的一部分,而是将其作为CC.Net中的单独步骤添加。运行单元测试应该是每日CI周期的一部分;但是,它不应该是每个构建的一部分。
答案 5 :(得分:0)
可以使用.csproj作为msbuild的输入。您可以手动将任务添加到csproj中,在从VS进行压缩时将忽略该任务。但是如果你要做一些非常重要的事情,最好创建单独的msbuild脚本。它们可以从csproj文件中引用。 您是否看过作为TFS一部分的MS Build Server? 它与TFS的SourceControl集成,可用于CI。它的项目文件是msbuild脚本。
如果我确实使用过nAnt,是否必须在服务器上安装VS? 你的意思是'MSBuild'吗?不,不一定要安装VS以使用带有csproj文件的msbuild。
答案 6 :(得分:0)
好的,很少有事情需要注意。 csproj格式已从VS2005更改为VS2008。此外,如果您使用MSBuild,请记住您将无法构建.vdproj(安装)文件;因为你需要devenv(VS可执行文件)。这就是说你总是可以创建一个调用devenv的MSBuild任务并为你构建它。
关于你是建立自己的csproj文件还是使用VS2005创建的文件的问题,我建议你选择一条中间道路:create your own project template,它可以满足你的需求,让VS负责其余的事情。< / p>