.NET Core Assemby自动版本化可在AssemblyInfo.cs中使用,但不能在项目文件中使用

时间:2019-02-15 21:10:35

标签: asp.net-core assemblyinfo auto-versioning

我已经阅读了几篇有关.NET Core中版本集程序集的文章。我有使用自动版本控制的.NET Framework程序集,其中在AssemblyInfo.cs中设置了[assembly:AssemblyVersion(“ 2.1。*”)]属性。生成部件时,我可以检查其属性,文件和产品版本均反映2.1.6985.26662之类的版本,其中6985和26662是自动填充的内部版本号和修订号。

我了解在.NET Core中我可以在项目文件中设置程序集信息,因此我从我的项目文件中开始以下内容:

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
    <DockerDefaultTargetOS>Windows</DockerDefaultTargetOS>
    <UserSecretsId>7c702802-48ca-46ea-8a7a-1fa89100baef</UserSecretsId>
    <Deterministic>false</Deterministic>
    <AssemblyVersion>2.1.*</AssemblyVersion>
  </PropertyGroup>

为使版本包含通配符,必须使用Deterministic = false。在代码的其他地方,我访问并公开了该版本,并使用

进行了访问
            Version serviceVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
            DateTime buildDate = new DateTime(2000, 1, 1).AddDays(serviceVersion.Build).AddSeconds(serviceVersion.Revision * 2);
            string reportVersion = "{serviceVersion} ({buildDate})";

当我运行该代码时,内部版本号和修订版始终为0。.NETCore接受版本中的通配符,但似乎不会自动填充内部版本号和修订版号。

如果我从项目文件中删除程序集版本,而是将其放到assemblyInfo.cs文件中,则它似乎可以按我的预期工作。因此,最终在我的项目文件中:

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
    <DockerDefaultTargetOS>Windows</DockerDefaultTargetOS>
    <UserSecretsId>7c702802-48ca-46ea-8a7a-1fa89100baef</UserSecretsId>
    <Deterministic>false</Deterministic>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  </PropertyGroup>

GenerateAssemblyInfo = false是必需的,这样自动生成的程序集属性就不会与我显式设置的属性冲突。我已经在我的assemblyInfo.cs文件中找到了它:

[assembly: AssemblyVersion("2.1.*")]

我用来读取和访问版本的反射代码是相同的,但是现在它具有预期的内部版本号和修订号。

有人在项目文件中使用通配符设置了程序集版本时,是否知道自动设置的内部版本号和修订号是否可以正常工作?还是我做错了什么导致无法正常工作?

0 个答案:

没有答案