CI与MSBuild-每个人如何管理Assemblyinfo.cs

时间:2018-07-24 14:34:18

标签: c# jenkins msbuild

大量阅读后,我对如何管理Assemblyinfo.cs中保存的版本的最佳实践感到困惑。似乎有各种方法,有些似乎已经过时了。我想要的是能够设置以下内容:

  

1.0。$ BUILD_VERSION.0

之后,内部版本会转换为类似的内容:

  

1.0.142.0。

其他人怎么做?我正在使用Jenkins for CI,特别是存储在我的Git存储库中的Jenkinsfile方法。我接近使用.BAT文件的内容,但由于无法从Windows bat文件中提取环境变量以供Jenkins使用,因此碰到了墙。

2 个答案:

答案 0 :(得分:1)

如果适合,您可以在View

中使用自动版本编号

注意:您必须删除assemblyinfo.cs属性:

AssemblyFileVersion

它会自动为您创建与构建时间有关的构建号。

有关此主题的更多信息:AssemblyInfo version information asterisks

答案 1 :(得分:1)

我个人会避免使用特定于Jenkins的工具,而是依靠更通用的东西(例如环境变量),如果您切换了CI,并且可以轻松地在命令行上进行本地测试,而根本没有任何CI,它将继续工作

与其他CI一样,Jenkins当然可以设置一个包含内部版本号的环境变量。因此,您要做的就是将其输入到AssemblyInfo.cs中。如果您以编程方式搜索“ update AssemblyInfo.c更新”,则会发现无数answers

我们使用仅msbuild的解决方案,只是指示CI在实际构建之前运行特定的msbuild文件,并使用FileUpdate任务,因为这非常简单。但是例如PowerShell脚本也可以做到这一点。它看起来类似于:

<ItemGroup>
  <AsmInfoFiles Include="$(ProjectRoot)\**\AssemblyInfo.cs"/>
<ItemGroup>

<PropertyGroup>
  <NewVersion>$(VersionMaj).$(VersionMin).$(VersionBuild).0</NewVersion>
<PropertyGroup>

<Target Name="UpdateVersion">
  <FileUpdate Files="@(AsminfoFiles)" Encoding="utf-8"
     Regex="\[assembly:\s*AssemblyVersion\(.*\)\]"
     ReplacementText="[assembly: AssemblyVersion(&quot;$(NewVersion)&quot;)]"/>
</Target>

版本号由CI发布为环境变量。