带有MSBuild的CI-每个人如何管理assemblyinfo.cs



经过大量阅读,我有点困惑于管理assemblyinfo.cs中的版本的最佳实践是什么。似乎有各种不同的方法,有些似乎已经过时了。我只想能够设置这样的东西:

1.0.$BUILD_VERSION.0

之后,构建转换为类似的内容

1.0.142.0.

其他人做得怎么样?我使用Jenkins进行CI,特别是存储在我的Git存储库中的Jenkinsfile方法。我使用.BAT文件接近了一些东西,但后来遇到了麻烦,因为我无法从windows BAT文件中提取环境变量来在Jenkins中使用。

就我个人而言,我会远离Jenkins特定的工具,而是依赖于更通用的工具,如环境变量,如果您切换CI,这些工具将继续工作。此外,在没有任何CI的情况下,很容易在命令行上进行本地测试。

当然,Jenkins和其他CI一样,设置了一个包含内部版本号的环境变量。因此,你所要做的就是将其输入到AssemblyInfo.cs中。如果你以编程方式搜索"updateAssemblyInfo.c",你会找到无数的答案。

我们使用仅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作为环境变量发布。

如果适合您,您可以在assemblyinfo.cs中使用自动构建编号

注意:必须删除AssemblyFileVersion属性:

// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.3.*.*")]
//[assembly: AssemblyFileVersion("1.0.0.0")] not used

它会自动为您创建与生成时间相关的内部版本号。

以下是关于此主题的更多信息:AssemblyInfo版本信息星号

最新更新