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

Gou*_*pal 4 .net teamcity continuous-integration visual-studio .net-core-2.1

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

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

项目 1 的程序集版本为 2019.1.15341.0

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

[assembly: AssemblyVersion("2019.1.15341.0")]
[assembly: AssemblyFileVersion("2019.1.15341.0")]
Run Code Online (Sandbox Code Playgroud)

在 TeamCity 中,我配置了 AssemblyInfo Patcher:

TeamCity AssemblyInfo 修补程序

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

在 TeamCity 中建立成功

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

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

项目1.dll

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

用户界面exe

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

我缺少的任何信息请告知。

EXE 的属性似乎符合预期。主要关注的是 DLL:它的属性没有改变。

Gou*_*pal 8

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

因此,转到 TeamCity 中的构建功能,并添加一个构建功能。

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

添加文件内容替换器作为构建功能

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

用。。。来代替:

我使用了 Replace With:<Version>%MAJOR%.%MINOR%.%build.counter%.%build.vcs.number%</Version>以便根据我的正则表达式不会删除<version></version>标记。这完全取决于您需要替换的正则表达式。

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

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

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