ang*_*son 20 svn msbuild teamcity continuous-integration version
我想调整我的类库的TeamCity构建配置的输出,以便生成的dll文件具有以下版本号:3.5.0.x,其中x是TeamCity拾取的subversion版本号.
我发现我可以使用BUILD_NUMBER环境变量来获取x,但不幸的是我不明白我还需要做什么.
我发现所有的"教程"都说"你只是将它添加到脚本中",但他们没有说出哪个脚本,而"this"通常是指MSBuild社区扩展中的AssemblyInfo任务.
我是否需要以某种方式构建自定义MSBuild脚本才能使用它?"脚本"是否与解决方案文件或C#项目文件相同?
我根本不了解MSBuild进程,除了我可以直接将解决方案文件传递给MSBuild,但我需要添加到"脚本"的是XML,解决方案文件看起来不像XML.
那么,有人能指出我如何使这项工作的分步指南?
这就是我最终得到的结果:
编辑我的核心类库的.csproj文件,并更改底部,使其显示为:
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
<Target Name="BeforeBuild">
<AssemblyInfo Condition=" '$(BUILD_NUMBER)' != '' "
CodeLanguage="CS"
OutputFile="$(MSBuildProjectDirectory)\..\GlobalInfo.cs"
AssemblyVersion="3.5.0.0"
AssemblyFileVersion="$(BUILD_NUMBER)" />
</Target>
<Target Name="AfterBuild">
Run Code Online (Sandbox Code Playgroud)
更改我的所有AssemblyInfo.cs文件,以便它们不指定AssemblyVersion或AssemblyFileVersion(回想起来,我将考虑将AssemblyVersion放回去)
现在,只有在设置环境变量BUILD_NUMBER时才会更新GlobalInfo.cs,这是我通过TeamCity构建的时候.
我选择保持AssemblyVersion不变,以便引用仍然有效,并且只更新AssemblyFileVersion,以便我可以看到dll来自哪个构建.
Wim*_*dse 18
CSPROJ文件实际上是一个MSBuild文件.
在VS.NET中卸载相关的类项目,编辑它并取消注释BeforeBuild目标.FileUpdate从MSBuild社区扩展添加MSBuild任务.
在MSBuild文件中,您可以使用环境变量从TeamCity检索BUILD_NUMBER $(build_vcs_number_1).请注意,您可能希望为"生产"创建一个额外的配置,其中包含您要检查的条件,因为当您在本地构建时,这显然不起作用.
只需将其用作FileUpdate任务ReplacementText属性的输入.
请注意,如果您的修订版数字高于65535标记(UInt16),则无法在AssemblyVersion属性中使用它.
相反,我建议你使用的是AssemblyInformationalVersion,这只是一个没有这个限制的字符串.当然,除非你确信你不会达到这个修订版的上限,但这似乎是一种狡猾的方式.
或者,您可以设计一种方法(abcd是您的版本号),使用修订版div 1000代表c和修订版mod 1000代表d.
Fri*_*ben 12
在TeamCity 6.5中,使用AssemblyInfo修补程序实现这一点非常容易.
%system.build.number%| 归档时间: |
|
| 查看次数: |
6595 次 |
| 最近记录: |