.NET Core 版本控制详解






4.85/5 (13投票s)
一次性版本化所有 .NET Core 项目,梦想成真!
背景
我们有一个 VS2017 解决方案,包含数百个项目,大部分使用 C#。
构建过程主要使用免费工具自动化。
- Gitea GIT 服务器
- 使用 TeamCity 运行的持续集成构建器
C# 项目使用“VersionInfo.cs”技巧进行版本控制,这意味着有一个中央版本文件,作为链接添加到 Visual Studio 解决方案资源管理器中的所有项目中。
这个技巧的描述可以在这里找到。
我们使用一个自定义的“AutoBuildVersion
”工具,它修改“VersionInfo.cs”文件(以及其他文件,如 Visual C .rc 文件)的内容。
遗憾的是,我无法公开此工具的源代码,但文章底部提到了一个不错的替代方案。
到目前为止一切都很好,直到最近 .NET Core 和 .NET Standard 项目开始出现,它们采用完全不同的方式存储版本信息。
对于 .NET Core 2.0 项目,不再使用传统的 AssemblyInfo.cs 文件,版本信息现在存储在 .csproj 文件中。
Using the Code
在互联网上搜索了几天后,我终于发现了这个技巧,一个 Directory.Build.props 文件,它将版本化其下方的所有 .NET Core 目录,例如:
<Project>
<PropertyGroup>
<Authors>Zeeland BV</Authors>
<Company>Zeeland BV</Company>
<Copyright>Zeeland BV</Copyright>
<AssemblyVersion>10.0.30000.0</AssemblyVersion>
<FileVersion>10.0.30000.0</FileVersion>
<Version>10.0.30000</Version>
</PropertyGroup>
</Project>
我还将我的问题发布到 dotnet/coreclr GitHub 站点,并得到了这个有趣的答案,关于一个 Common.props 文件
<Project>
<PropertyGroup>
<VersionPrefix>1.2.3</VersionPrefix>
<VersionSuffix>abc</VersionSuffix>
<!-- etc.... -->
</PropertyGroup>
</Project>
然后在你的 .csproj 中,在 <project>
元素打开后立即添加 <Import Project="..\..\Common.props" />
。
但我认为我将坚持使用第一个解决方案,即 Directory.Build.props 文件,因为这似乎对我来说是最简单的选择。
关注点
其他有趣的工具
- “一个 Visual Studio 插件和命令行实用程序,可自动执行 .NET 和 VC++ 项目的版本控制”。
版本控制构建 - Visual Studio Marketplace[^] - Gitea https://github.com/go-gitea/gitea
- Cake 构建工具 https://codeproject.org.cn/Articles/1231188/Cake-Build-Tool
历史
- 2020年3月19日:V 1.0