使TeamCity将Subversion内部版本号集成到程序集版本中

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.

那么,有人能指出我如何使这项工作的分步指南?


这就是我最终得到的结果:

  1. 安装MSBuild社区任务
  2. 编辑我的核心类库的.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)

  3. 更改我的所有AssemblyInfo.cs文件,以便它们不指定AssemblyVersion或AssemblyFileVersion(回想起来,我将考虑将AssemblyVersion放回去)

  4. 添加了一个指向位于所有项目外部的全局GlobalInfo.cs的链接
  5. 确保此文件构建一次,以便我在源代码管理中有一个默认文件

现在,只有在设置环境变量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修补程序实现这一点非常容易.

  • 转到构建配置步骤3"构建步骤";
  • 点击"添加构建功能";
  • 选择要素类型"AssemblyInfo patcher";
  • 指出您想要的版本.我用:%system.build.number%