我的解决方案中有多个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。 UserInterface(WPF项目):
我看到TeamCity已根据UserInterface.exe's Version
和build counter
更改了build vcs number
,但是为什么DLL's version
没有更改?我是否缺少任何步骤?还是其他?
我想念的任何信息都请告知。
EXE的属性似乎正常。主要问题在于DLL:它的属性没有更改。
答案 0 :(得分:2)
如前所述,它是一个.Net Core
项目,因此在定义Assembly属性的地方可能没有AssemblyInfo.cs
。
因此,请转到TeamCity中的“构建功能”,然后添加一个构建功能。
<Version>\S*<\/Version>
或使用模板正则表达式:(<(Version)\s*>).*(<\/\s*\2\s*>)
我使用了替换为:<Version>%MAJOR%.%MINOR%.%build.counter%.%build.vcs.number%</Version>
,这样就不会像我的正则表达式那样删除<version>
和</version>
标签。这完全取决于您的正则表达式,您需要替换什么。
优点: 构建项目后,我可以在属性中看到预期的结果。
缺点:
搜索并替换文件多次而不是一次(Build功能的数量,将被执行的相同时间以及将被还原的相同时间!)答案 1 :(得分:1)
根据TeamCity AssemblyInfo patcher docs:
...配置此构建功能后,它将在第一步构建之前运行。 TeamCity将首先在构建签出目录中找到的文件中执行替换,然后运行您的构建。
但是,在DLL项目设置的“软件包”选项卡上的值(您的第一个屏幕截图)将在生成过程本身(即MSBuild处理您的项目)时应用。我怀疑TeamCity Assembly修补程序设置的值在这里已替换为默认值。