【问题标题】:How to change File/Product version of DLLs in TeamCity using AssemblyInfo Patcher produced from a .net solution?如何使用从 .net 解决方案生成的 AssemblyInfo Patcher 更改 TeamCity 中 DLL 的文件/产品版本?
【发布时间】:2018-07-05 19:49:31
【问题描述】:

我的解决方案中有多个 c# 类库(DotNet Core 2.1)项目和用户界面(WPF 项目)。

假设一个类库项目属性的程序集版本为 2019.1.15341.0:

另外,相同的程序集版本分配给用户界面(WPF 应用程序):

[assembly: AssemblyVersion("2019.1.15341.0")]
[assembly: AssemblyFileVersion("2019.1.15341.0")]

在 TeamCity 中,我已经配置了 AssemblyInfo Patcher:

我使用 TeamCity 构建了完整的解决方案,并且构建成功:

现在让我们看看构建完整解决方案后生成的工件的属性:

1.项目 1(类库、DLL 属性):

2。用户界面(WPF 项目):

我看到 UserInterface.exe's Version 已被 TeamCity 根据 build counterbuild vcs number 更改,但为什么 DLL's version 没有更改?我错过了任何步骤吗?还是别的什么?

任何我遗漏的信息请告知。

EXE 的属性似乎和预期的一样好。主要关注的是 DLL:它的属性没有改变。

【问题讨论】:

  • Project1.dll 的预期结果是:Product Version: 2019.1.25801
  • 注意:类库项目在.net core 2.1

标签: .net visual-studio continuous-integration teamcity .net-core-2.1


【解决方案1】:

如前所述,它是一个 .Net Core 项目,因此它可能没有定义程序集属性的 AssemblyInfo.cs

所以转到 TeamCity 中的构建功能,然后添加一个构建功能。

  1. 选择:文件内容替换器
  2. (可选)单击加载模板并在 .Net Core 下搜索或输入版本

  1. 您可以使用自己的正则表达式,例如:<Version>\S*<\/Version> 或使用模板正则表达式:(<(Version)\s*>).*(<\/\s*\2\s*>)

我使用了替换为:<Version>%MAJOR%.%MINOR%.%build.counter%.%build.vcs.number%</Version>,这样<version></version> 标记就不会按照我的正则表达式被删除。这完全取决于您需要替换的正则表达式。

同样,我添加了其他必需的参数:

优点: 构建项目后,我可以在属性中看到预期的结果。

缺点: 多次搜索和替换文件,而不是一次(构建功能的数量,相同的执行次数,相同的还原次数!)

【讨论】:

  • 刚刚尝试:一次替换所有版本:正则表达式Version>\d*.\d*.\d*.\d*< 并替换为版本>%MAJOR%.%MINOR%.%build.counter%.%build.vcs.number%
  • 上面的注释代码有bug,所以使用:正则表达式20\d*[.]\d\d*[.]\d*[.]*\d*和%MAJOR%.%MINOR%.%build.counter%.%build.vcs.number%
  • 值得注意的是,如果 VCS 编号大于 65535,则使用 VCS 编号作为“修订”数字的解决方案将失败。我建议遵循 Microsoft 保持“修订”的约定在发布修补程序之前为零。 blogs.msdn.microsoft.com/jjameson/2009/04/03/…
【解决方案2】:

根据TeamCity AssemblyInfo patcher docs

...配置此构建功能后,它将在第一个构建步骤之前运行。 TeamCity 将首先在构建检出目录中找到的文件中执行替换,然后运行您的构建。

但是,您在 DLL 项目设置的“包”选项卡上的值(您的第一个屏幕截图)会在构建过程本身(即 MSBuild 处理您的项目时)应用。我怀疑 TeamCity Assembly 修补程序设置的值在这里被替换回默认值。

【讨论】:

  • 你可能是。但是 WPF 项目也设置了相同的值。我手动尝试查找:我看到 TeamCity 搜索 AssemblyInfo.cs 并在那里修改了内部版本号,如果类库项目 AssemblyInfo.cs 不存在,则程序集信息存储在 csproj 中。
  • @GourGopal,对,如果没有 AssemblyInfo 文件,补丁程序将无法工作。
  • 好的,有什么办法可以在构建之前修改TeamCity中的.csproj文件吗?
  • File Content Replacer,其实是推荐用于一些比较复杂的场景。似乎this section 描述了您的情况。
  • 我会试试的。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
  • 2021-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多