65.9K
CodeProject 正在变化。 阅读更多。
Home

.NET Core 版本控制详解

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.85/5 (13投票s)

2018年2月24日

CPOL

2分钟阅读

viewsIcon

29578

一次性版本化所有 .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 文件,因为这似乎对我来说是最简单的选择。

关注点

其他有趣的工具

历史

  • 2020年3月19日:V 1.0
© . All rights reserved.