我已经阅读了几篇有关.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.*")]
我用来读取和访问版本的反射代码是相同的,但是现在它具有预期的内部版本号和修订号。
有人在项目文件中使用通配符设置了程序集版本时,是否知道自动设置的内部版本号和修订号是否可以正常工作?还是我做错了什么导致无法正常工作?