Меня смущает, как разрешаются зависимости при использовании группы - на основе спецификации зависимостей в NuGet.
У меня есть проект Visual Studio, ориентированный на .NET Framework 4.6.1, с зависимостью NuGet от пакета NuGet (внутреннего для моей компании):
Это в файле packages.config
моего проекта:
<package id="Name.Of.My.Package" version="2.0.65" targetFramework="net461" />
А это в файле .csproj
:
<Reference Include="Name.Of.My.Package, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Name.Of.My.Package.2.0.65\lib\net45\Name.Of.My.Package.dll</HintPath>
</Reference>
Этот пакет представляет собой многоцелевой пакет со спецификацией зависимостей на основе групп, которая выглядит так, когда я получаю ее прямо из файла .nuspec
, полученного путем открытия файла packages\Name.Of.My.Package.nupkg
в виде архива:
<dependencies>
<group>
<dependency id="Newtonsoft.Json" version="11.0.2" />
</group>
<group targetFramework=".NETFramework4.0">
<dependency id="Microsoft.Bcl.Async" version="1.0.168" />
</group>
</dependencies>
А папка packages\Name.Of.My.Package\lib
содержит:
- нетто40
- нетто45
- нестандарт2.0
Итак, я понимаю, что, поскольку мой проект находится в net461, ссылка должна быть добавлена в версию моего пакета для net45 (как это кажется в случае, если я смотрю файл .csproj), но что более важно, что единственная неявная зависимость должен быть в Newtonsoft.
Но это происходит, когда я пытаюсь удалить пакет Microsoft.Bcl.Async
в консоли диспетчера пакетов:
Uninstall-Package Microsoft.Bcl.Async
Attempting to gather dependency information for package 'Microsoft.Bcl.Async.1.0.168' with respect to project 'Name.Of.My.Project', targeting '.NETFramework,Version=v4.6.1'
Resolving actions to uninstall package 'Microsoft.Bcl.Async.1.0.168'
Uninstall-Package : Unable to uninstall 'Microsoft.Bcl.Async.1.0.168' because 'Name.Of.My.Package.2.0.65' depends on it.
Это происходит в последней версии Visual Studio 2017 (15.8.6).