如何使用.net解决方案产生的AssemblyInfo Patcher更改TeamCity中DLL的文件/产品版本?

时间:2018-07-04 12:57:54

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

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

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

Project 1 has Assembly version 2019.1.15341.0

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

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

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

TeamCity AssemblyInfo Patcher

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

Build Successful in TeamCity

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

1。项目1(类库,DLL属性):

project1.dll

2。 UserInterface(WPF项目):

USER interface exe

我看到TeamCity已根据UserInterface.exe's Versionbuild counter更改了build vcs number,但是为什么DLL's version没有更改?我是否缺少任何步骤?还是其他?

  

我想念的任何信息都请告知。

EXE的属性似乎正常。主要问题在于DLL:它的属性没有更改。

2 个答案:

答案 0 :(得分:2)

如前所述,它是一个.Net Core项目,因此在定义Assembly属性的地方可能没有AssemblyInfo.cs

因此,请转到TeamCity中的“构建功能”,然后添加一个构建功能。

  1. 选择:文件内容替换器
  2. (可选)单击“加载模板”,然后在 .Net Core
  3. 下搜索或键入Version。

Adding File content replacer as Build Feature

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

Replace with:

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

类似地,我添加了其他必需的参数:other required parameters

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

缺点:

搜索并替换文件多次而不是一次(Build功能的数量,将被执行的相同时间以及将被还原的相同时间!)

答案 1 :(得分:1)

根据TeamCity AssemblyInfo patcher docs

  

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

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