2010-01-08 95 views
20

我想调整我的类库的TeamCity构建配置的输出,以便生成的dll文件具有以下版本号:3.5.0.x,其中x是TeamCity选择的Subversion修订号。让TeamCity将Subversion版本号集成到程序集版本

我发现我可以使用BUILD_NUMBER环境变量来获得x,但不幸的是我不明白我还需要做什么。

我发现所有的“教程”都说“你只需将其添加到脚本中”,但他们不会说脚本,而“this”通常指的是MSBuild社区扩展的AssemblyInfo任务。

我需要建立一个自定义的MSBuild脚本以某种方式使用它吗? “脚本”与解决方案文件还是C#项目文件相同?

我对MSBuild过程根本不了解,只是我可以直接将解决方案文件传递给MSBuild,但我需要添加到“脚本”中的是XML,解决方案文件决定不会看起来像XML。

那么,任何人都可以点我一步一步指导如何使这项工作?


这是我结束了:

  1. 安装MSBuild Community Tasks
  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. 确保该文件是建立一次,所以,我在源代码控制

现在,这将更新GlobalInfo.cs一个默认的文件只有在环境变量BUILD_NUMBER设置,它是当我通过TeamCity构建时。

我选择保​​持AssemblyVersion常量,以便引用仍然有效,并且只更新AssemblyFileVersion,以便我可以看到哪个构建dll来自。

回答

18

CSPROJ文件实际上是一个MSBuild文件。

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

在您的MSBuild文件中,您可以使用环境变量$(build_vcs_number_1)从TeamCity检索BUILD_NUMBER。请注意,您可能需要为'生产'创建一个额外的配置,'您必须检查',因为在本地生成时显然不适用。

只需使用它作为FileUpdate任务的ReplacementText属性的输入。

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

我建议你使用,而不是,但是,AssemblyInformationalVersion,这只是一个没有这种限制的字符串。除非你确信自己不会碰到这个修订版的上限,但这似乎是一个不切实际的方法。

或者,您可以设计一种方法(a.b.c.d是您的版本号),使用修订版div 1000 for c和修订版mod 1000 for d。

12

在TeamCity 6.5中这是很容易使用AssemblyInfo patcher来实现。

  • 转到构建配置步骤3“构建步骤”;
  • 点击“添加构建功能”;
  • 选择特征类型“AssemblyInfo patcher”;
  • 指示你想要的版本。我使用:%system.build.number%
+1

不幸的是,他们的补丁并不[当前](http://confluence.jetbrains.net/display/TCD65/AssemblyInfo+Patcher)允许一个指定不同的'AssemblyVersion'和'AssemblyFileVersion'值。 – ladenedge 2011-12-13 17:14:17

+1

您的建议在主要关注的是能够跟踪内部版本号的情况下非常有用:谢谢! – faester 2012-01-18 13:42:38

+1

男人我正在做很多Scheiss样板代码只是为了让我的代码。你救了我2或3天的工作! – 2014-06-05 12:44:49

相关问题