Как установить номер версии, специфичный для сборки, для projectReference, чтобы в зависимости от пакета NuGet была указана правильная версия
Используя новый формат CSProj в Visual Studio 2017, я написал файл целей для обработки новой конфигурации под названием CreateLocalPackages
, который имеет сборку, создающую пакет NuGet в определенной локальной папке, и он автоматически увеличивает свой номер версии на единицу больше, чем наивысшее число в любом из пакетов решения в этой папке.
У моего решения есть несколько проектов, каждый из которых создает пакет NuGet, причем некоторые из них зависят от других проектов в решении.
Например, с этими файлами в локальном каталоге пакета:
BaseLibrary.2.1.0.1-betalocal.nupkg
BaseLibrary.2.1.0.1-betalocal.symbols.nupkg
BaseLibrary.Specialized.2.1.0.1-betalocal.nupkg
BaseLibrary.Specialized.2.1.0.1-betalocal.symbols.nupkg
Он решил бы создать эти пакеты в следующий раз, когда CreateLocalPackages
Конфигурация была построена чистой:
BaseLibrary.2.1.0.2-betalocal.nupkg
BaseLibrary.2.1.0.2-betalocal.symbols.nupkg
BaseLibrary.Specialized.2.1.0.2-betalocal.nupkg
BaseLibrary.Specialized.2.1.0.2-betalocal.symbols.nupkg
Я получил это работает отлично, за исключением того факта, что Visual Studio, кажется, создает BaseLibrary\BaseLibrary.Specialized\obj\project.assets.json
файл, прежде чем я могу подключиться к цели MSBuild и изменить $(версия) на 2.1.0.2
, вызывая BaseLibrary.Specialized.2.1.0.2-betalocal.nupkg
вместо этого просто ссылаться на эту зависимость: BaseLibrary.2.1.0-betalocal
, Visual Studio создается для создания project.assets.json
на этапе восстановления NuGet, который выполняется перед вызовом MSBuild для сборки проектов.
Я попытался запустить мою логику номера версии BeforeTargets="CollectPackageReferences;_ComputeTargetFrameworkItems"
для того, чтобы позвонить в начале Restore
целевая цепочка, но это не похоже на вызовы Visual Studio MSBuild /t:Restore
для того, чтобы восстановить ссылки пакета NuGet (и генерировать project.assets.json
). Я не знаю, есть ли у него своя логика или он вызывает другой инструмент.
Я хотел бы иметь возможность просто сказать VS перестроить и заставить его выяснить новую версию, собрать и упаковать все, а также перечислить правильные версии зависимостей.
1 ответ
Как установить номер версии, специфичный для сборки, для projectReference, чтобы в зависимости от пакета NuGet была указана правильная версия
Если я правильно вас понял, вы хотите назвать номер версии логической целью CreateLocalPackages
до VS/MSBuild Restore
цель.
Вы можете добавить MSBuild Target, которая запускается перед целевым Restore или _GenerateRestoreProjectSpec
с помощью следующего фрагмента кода в файле MSBuild. * csproj:
<Target Name="VersionNumberLogicBeforeRestore"
BeforeTargets="Restore">
<Message Text="Version Number Logic Before Restore!" Importance="high" />
</Target>
Или же
<Target Name="VersionNumberLogicBeforeRestore"
BeforeTargets="_GenerateRestoreProjectSpec">
<Message Text="Version Number Logic Before Restore!" Importance="high" />
</Target>
Однако это работает только для dotnet cli, а не для Visual Studio.
dotnet restore "xx.csproj"
Кроме того, изменения восстановления NuGet будут частью 15.4, если они все еще вносятся. В противном случае 15.5.
См. Добавление поддержки для предварительного восстановления цели MSBuild, которая запускается Visual Studio, для получения подробной информации.
Итак, в данный момент мы должны использовать dotnet cli для вызова цели логики номера версии перед Restore
цель, и вы также можете использовать Dotnet Cli построить проект.