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

标签 svn msbuild continuous-integration version teamcity

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

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

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

我是否需要以某种方式构建自定义MSBuild脚本才能使用它? “脚本”与解决方案文件还是C#项目文件相同?

除了可以将解决方案文件直接传递给MSBuild之外,我对MSBuild的过程一无所知,但是我需要添加到“脚本”中的是XML,而解决方案文件肯定看起来不像XML。

因此,谁能指出我有关如何进行此工作的分步指南?

我最终得到的是:

  • 安装MSBuild Community Tasks
  • 编辑我的核心类库的.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">
    

  • 更改所有我的AssemblyInfo.cs文件,以便它们不指定AssemblyVersion或AssemblyFileVersion(回想起来,我将考虑将AssemblyVersion放回去)
  • 添加了指向现在全局GlobalInfo.cs的链接,该链接位于所有
  • 项目之外
  • 确保此文件生成一次,以便在源代码管理
  • 中有一个默认文件

    现在,仅当设置了环境变量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,它只是一个没有此限制的字符串。当然,除非您确信不会达到此修订版本的上限,但这似乎是一种狡猾的解决方法。

    或者,您可以设计一种方法(将版本div作为a.b.c.d)用于c,将修订版mod 1000用于d。

    关于svn - 使TeamCity将Subversion内部版本号集成到程序集版本中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2027857/

    相关文章:

    cocoa - 使 Cocoa NSDocument 包与 svn 兼容的秘诀?

    svn - 使用 svn2git 转移的分支

    java - 在 Eclipse 中构建、版本控制、测试、归档 Java 项目的最佳实践?

    msbuild - vstest.console.exe 未生成 trx 文件,TestResults 为空

    deployment - Travis CI - 每个部署提供商的条件 'before_deploy' 脚本

    linux - svn:此平台不支持符号链接(symbolic link) - Windows 8.1

    UWP 与桌面桥包构建自动化与 MSbuild

    build - TeamCity 工件;排除单个文件

    azure - 仅构建在解决方案中更改的项目 -Azure CI 管道 - YAML

    MsBuild 将目录中的每个文件压缩为单独的 Zip 文件