Я прочитал несколько постов о версиях сборок в .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. .NET Core принимает подстановочный знак в версии, но не 't автоматически заполняет номера сборки и ревизии.
Если я удаляю версию сборки из файла проекта и помещаю ее в файл 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.*")]
Код отражения, который я использую для чтения и доступа к версии, тот же, но теперь он имеет ожидаемые номера сборки и ревизии.
Кто-нибудь знает, будут ли автоматически установленные номера сборки и ревизии работать, когда версия сборки установлена с подстановочным знаком в файле проекта?Или я делаю что-то не так, что не работает?