Ваш комментарий к вопросу звучит так, будто ваша цель состоит в том, чтобы поддерживать совместимость версий пакетов в различных условиях в рамках одного проекта, но также часто бывает так, что вы хотите поддерживать его согласованность между проектами в решении или репозитории.
Я собираюсь предложить другое решение.Создайте Directory.Build.props
в своем корне репо, который будет выглядеть примерно так:
<Project>
<PropertyGroup>
<NewtonsoftJsonVersion>12.0.1</NewtonsoftJsonVersion>
<xunitVersion>2.4.1</xunitVersion>
</PropertyGroup>
</Project>
Теперь в ваших проектах, где требуется Newtonsoft.json, вы меняете PackageReference
на <PackageReference Include="Newtonsoft.Json" Version="$(NewtonsoftJsonVersion)" />
.
Если вы поместите свой производственный код в src\
и тестовый код в test\
, то вы можете создать test\Directory.Build.props
с содержанием:
<Project>
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" />
<PropertyGroup>
<PackageReference Include="xunit" Version="$(xunitVersion)" />
</PropertyGroup>
</Project>
Теперь все вашипроекты под test\
автоматически получат xunit, и гарантированно будет та же версия.
Если вы хотите обновить версию пакета, вы можете использовать интерфейс диспетчера пакетов для проверки версий, но, к сожалению, не дляобновить версию.Для этого вам нужно вручную отредактировать корень репо Directory.Build.props
(поэтому добавьте его в свое решение для быстрого доступа), но вы можете быть уверены, что при каждой ссылке на этот пакет будет использоваться одна и та же версия.Он ограничен проектами, использующими PackageReference
, в настоящее время нет решения для packages.config
, но условия MSBuild применимы только для PackageReference
.
Этот шаблон часто можно увидеть в репозиториях Microsoft.Конечно, NuGet (моя команда, да!) И различные репозитории .NET, такие как cli и sdk, делают это, хотя в импортируемых вручную файлах реквизитов, а не Directory.Build.props
, хотя концепция та же.