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

在大量阅读之后,我对管理 assemblyinfo.cs 中的版本的最佳实践感到有些困惑。似乎有不同的方法,有些似乎已经过时了。我想要的只是能够设置这样的东西:

1.0.$BUILD_VERSION.0

之后构建转换为:

1.0.142.0。

其他人是怎么做的?我将 Jenkins 用于 CI,特别是存储在我的 Git 存储库中的 Jenkinsfile 方法。我使用 .BAT 文件接近某些东西,但后来遇到了砖墙,因为我无法从 Windows bat 文件中提取环境变量以在 Jenkins 中使用。


呼啦一阵风
浏览 226回答 2
2回答

暮色呼如

如果它适合您,您可以在 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 version information asterisks

冉冉说

就我个人而言,我会避开 Jenkins 特定的工具,而是依赖于更通用的东西,比如环境变量,如果你曾经切换 CI,它会继续工作,加上很容易在命令行上进行本地测试,根本没有任何 CI。当然 Jenkins 和其他 CI 一样,设置了一个包含内部版本号的环境变量。所以你所要做的就是把它放到你的 AssemblyInfo.cs 中。如果您四处搜索“以编程方式更新 AssemblyInfo.c”,您会找到无数的答案。我们通过仅指示 CI 在实际构建之前运行特定的 msbuild 文件并使用 FileUpdate 任务来使用仅 msbuild 解决方案,因为这相当简单。但是例如 PowerShell 脚本也可以做到这一点。它看起来类似于:<ItemGroup>&nbsp; <AsmInfoFiles Include="$(ProjectRoot)\**\AssemblyInfo.cs"/><ItemGroup><PropertyGroup>&nbsp; <NewVersion>$(VersionMaj).$(VersionMin).$(VersionBuild).0</NewVersion><PropertyGroup><Target Name="UpdateVersion">&nbsp; <FileUpdate Files="@(AsminfoFiles)" Encoding="utf-8"&nbsp; &nbsp; &nbsp;Regex="\[assembly:\s*AssemblyVersion\(.*\)\]"&nbsp; &nbsp; &nbsp;ReplacementText="[assembly: AssemblyVersion(&quot;$(NewVersion)&quot;)]"/></Target>版本号由 CI 作为环境变量发布。
打开App,查看更多内容
随时随地看视频慕课网APP