Консоль диспетчера пакетов: пакет обновления перезаписывает диапазон версий в ссылке на пакет
Предположим, я занимаюсь разработкой библиотеки классов с использованием нового формата проекта MSBuild 15.0, и моя библиотека имеет зависимость, которая должна находиться в определенном диапазоне версий. Для примера давайте предположим, что ему нужна версия 8 Newtonsoft.Json, но по какой-то причине версии 9 и 10 ему не подходят, что-то вроде этого:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="[8.0,9.0)" />
</ItemGroup>
</Project>
Теперь, когда я выполню dotnet pack
для этого проекта я получаю именно то, что я ожидаю в nuspec:
<dependencies>
<group targetFramework=".NETStandard2.0">
<dependency id="Newtonsoft.Json" version="[8.0.0, 9.0.0)" exclude="Build,Analyzers" />
</group>
</dependencies>
Поэтому, когда проект использует мою библиотеку, у них может быть версия Newtonsoft, которая соответствует их потребностям (какими бы они ни были), если они остаются в версии 8. Пока все хорошо.
Проблема возникает, когда я извиняюсь update-package
Команда для моей библиотеки. Помимо того факта, что он игнорирует указанный диапазон версий (который уже описан здесь), он также перезаписывает диапазон версий точным номером версии, теряя диапазон, т. Е. Вместо Version=[8.0, 9.0)
это становится Version="11.0.1"
(или стал бы Version="8.0.3"
если он работал правильно и не игнорировал верхний предел, тем самым делая версии 8.0.1 и 8.0.2 непригодными для использования).
Есть ли способ решить эту проблему, кроме очевидного "не использовать пакет обновления"? Я имею в виду, можно ли сказать менеджеру пакетов загрузить последнюю доступную версию библиотек (например, чтобы проверить, работает ли она с последней доступной версией в пределах диапазона), но сохранить диапазон версий так, как мне нужно в сгенерированном дескриптор nuspec? Я знаю, что можно указать файл nuspec вместо того, чтобы его сгенерировать, но мне понравилась сама идея удаления дополнительных файлов и ограничения изменений в одном месте.