Я пытаюсь создать пакет NuGet из моего проекта библиотеки классов C#. Он использует автоматическое управление версиями, установленное в AssemblyInfo.cs
:
[assembly: AssemblyVersion("0.5.*")]
Но информация о пакете берется из свойства Version
файла .csproj
.
Из-за этого мне приходится либо дважды обновить версию в обоих файлах, либо удалить версию из AssemblyInfo.cs
и прекратить использование автоматического управления версиями (похоже, оно не поддерживается в .csproj
).
Есть ли способ установить версию пакета (в моем примере 0.5
) и сохранить автоматическое управление версиями файла, обновляя версию только в одном файле?
Этот ответ показывает, что возможно автоматическое AssemblyVersion
приращение только с помощью .csproj
подхода. Для меня было достаточно просто включить один из них.
<Deterministic>false</Deterministic>
Чтобы избежать необходимости корректировать фиксированную часть номера версии (здесь: 0.5
) несколько раз, вы можете настроить переменную и ссылаться на нее из других тегов версии.
Ниже фрагмент файла .csproj
показывает переменную _versionNumber
,
используется в AssemblyVersion
, который добавляет сегмент подстановочного знака .*
, а также используется как есть в Version
и некоторых других.
<Project>
<PropertyGroup>
<Deterministic>false</Deterministic>
<_versionNumber>0.5</_versionNumber>
<AssemblyVersion>$(_versionNumber).*</AssemblyVersion>
<Version>$(_versionNumber)</Version>
<!-- Any other version attributes of interest -->
<FileVersion>$(_versionNumber)</FileVersion>
<InformationalVersion>$(_versionNumber)</InformationalVersion>
<!-- More tags -->
</PropertyGroup>
</Project>
Это работает, но мне тоже пришлось добавить <GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
В зависимости от настройки, которую вам необходимо развернуть для этого пакета nuget, я бы рекомендовал использовать автоматическую задачу CI/CD вместо настройки csproj. Здесь вы можете использовать такие инструменты, как gitversion, чтобы перейти к семантической версии и автоматическому развертыванию.