繁体   English   中英

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

[英]Making TeamCity integrate the Subversion build number into the assembly 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"> 

  3. 更改所有我的AssemblyInfo.cs文件,以使其不指定AssemblyVersion或AssemblyFileVersion(回想起来,我将考虑将AssemblyVersion放回原处)

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

现在,仅当设置了环境变量BUILD_NUMBER时(这是通过TeamCity构建时),这才更新GlobalInfo.cs。

我选择保持AssemblyVersion不变,以便引用仍然有效,并且仅更新AssemblyFileVersion,以便可以看到dll来自哪个版本。

CSPROJ文件实际上是MSBuild文件。

在VS.NET中卸载相关的类项目,对其进行编辑并取消对BeforeBuild目标的注释。 从MSBuild社区扩展中添加FileUpdate MSBuild任务。

在您的MSBuild文件中,可以使用环境变量$(build_vcs_number_1)从TeamCity检索BUILD_NUMBER。 请注意,您可能要为要检查的“生产”条件创建其他配置,因为在本地构建时,这显然不起作用。

只需将其用作FileUpdate任务的ReplacementText属性的输入。

请注意,如果修订版本号超过65535标记( UInt16 ),则不能在AssemblyVersion属性中使用它。

但是我建议您使用的是AssemblyInformationalVersion ,它只是一个没有此限制的字符串。 当然,除非您确信不会达到此修订版本的上限,但这似乎是一种狡猾的解决方法。

另外,您可以设计一种方法(使用abcd作为您的版本号)对c使用修订div 1000,对d使用修订mod 1000。

在TeamCity 6.5中,使用AssemblyInfo修补程序 非常容易实现。

  • 转到构建配置步骤3“构建步骤”;
  • 点击“添加构建功能”;
  • 选择特征类型“ AssemblyInfo修补程序”;
  • 指明您想要的版本。 我使用: %system.build.number%

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM