为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
呼啦一阵风 2021-10-24 19:57:10
在大量阅读之后,我对管理 assemblyinfo.cs 中的版本的最佳实践感到有些困惑。似乎有不同的方法,有些似乎已经过时了。我想要的只是能够设置这样的东西:1.0.$BUILD_VERSION.0之后构建转换为:1.0.142.0。其他人是怎么做的?我将 Jenkins 用于 CI,特别是存储在我的 Git 存储库中的 Jenkinsfile 方法。我使用 .BAT 文件接近某些东西,但后来遇到了砖墙,因为我无法从 Windows bat 文件中提取环境变量以在 Jenkins 中使用。
查看完整描述

2 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

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


查看完整回答
反对 回复 2021-10-24
?
冉冉说

TA贡献1877条经验 获得超1个赞

就我个人而言,我会避开 Jenkins 特定的工具,而是依赖于更通用的东西,比如环境变量,如果你曾经切换 CI,它会继续工作,加上很容易在命令行上进行本地测试,根本没有任何 CI。


当然 Jenkins 和其他 CI 一样,设置了一个包含内部版本号的环境变量。所以你所要做的就是把它放到你的 AssemblyInfo.cs 中。如果您四处搜索“以编程方式更新 AssemblyInfo.c”,您会找到无数的答案。


我们通过仅指示 CI 在实际构建之前运行特定的 msbuild 文件并使用 FileUpdate 任务来使用仅 msbuild 解决方案,因为这相当简单。但是例如 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 作为环境变量发布。


查看完整回答
反对 回复 2021-10-24
  • 2 回答
  • 0 关注
  • 225 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信