Visual Studio 2022 中 .Net Core 6 解决方案版本信息的中心位置

Central location for Version info for .Net Core 6 solution in Visual Studio 2022

对于 ASP.Net 和 Visual Studio 2019,我创建了一个共享 AssemblyInfo.cs 文件,然后在解决方案的每个项目中引用该文件。从而给我一个位置来设置版本信息,然后为每个项目设置该信息。

using System.Reflection;
using System.Runtime.InteropServices;
using JetBrains.Annotations;

[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Company Name")]
[assembly: AssemblyProduct("Product name")]
[assembly: AssemblyCopyright("Copyright © Company. All Rights Reserved.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Setting ComVisible to false makes the types in this assembly not visible 
// to COM components.  If you need to access a type in this assembly from 
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]

[assembly: AssemblyVersion("1.15.0")]
[assembly: AssemblyFileVersion("1.15.0.7156")]
[assembly: AssemblyInformationalVersion("1.15.0")]

每个项目都有一个简化的 AssemblyInfo.cs 文件:

using System.Reflection;
using System.Runtime.InteropServices;

// General Information about an assembly is controlled through the following 
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("ProjectName")]
[assembly: AssemblyDescription("")]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")]

并且共享的 AssemblyInfo.cs 文件作为 Link.

包含在每个项目中

我正在使用 Visual Studio 2022 和 .Net Core 6 开始一个新的解决方案。我看到我可以在每个项目的 csproj 中设置版本、AssemblyVersion 和 FileVersion ...但我不能了解如何像我在之前的解决方案中那样在一个中心位置设置值。

我看到我可以恢复到手动创建 AssemblyInfo.cs 文件,但是有没有办法在不禁用当前标准方法的情况下做我想做的事情(在 VS2022 / .Net 中核心 6)?

代码受源代码控制 (SVN),但我们(目前)不使用任何构建或 CI 工具。我只想能够将版本设置为特定值,并使解决方案中的所有项目都相同。我很感激我可以打开每个 csproj 文件并分别更新它们,但我宁愿有一个位置。

您可以使用 MSBuild 导入在每个 csproj 中包含一个通用文件。例如,创建一个包含所有共享属性的文件:

<Project>
  <PropertyGroup>
    <AssemblyVersion>1.15.0</AssemblyVersion>
    <AssemblyFileVersion>1.15.0.7156</AssemblyFileVersion>
    <!-- etc... -->
  </PropertyGroup>
</Project>

然后您可以在每个项目文件中<Import Project="CommonAssemblyProperties.props" />(或任何您命名的文件)。

如果你想自动导入,你可以把它放在解决方案根目录下的 Directory.Build.props 文件中,因为这个文件是自动导入的(你甚至可以在这里分配属性,而不是不得不 <Import> 一个额外的文件)。

这种方法还允许您在构建过程中根据需要覆盖 属性 值(例如,如果您希望 CI 构建与开发构建不同)使用 msbuild MySolution.sln /p:Property=Value,或者在单个项目中通过在 csproj 中设置 属性 值(例如,如果一个项目具有不同于其他项目的特殊版本)。