Я ищу способ восстановить сборки для пакета NuGet, который нацелен на ровно один каркас, в данном случае net45 .
Это мойconfig пакеты:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="12.0.1" targetFramework="net45" />
</packages>
Это мой конфигурационный файл NuGet:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<config>
<add key="repositoryPath" value=".\Nuget" />
</config>
</configuration>
Версия: NuGet Version: 5.2.0.6090
Выполнение: nuget restore packages.config -ConfigFile nuget.config
восстанавливает сборки для всехtargetframework
версий, которые можно увидеть по:
E:\Tmp\NuGet\Nuget\Newtonsoft.Json.12.0.1>dir lib
Directory of E:\Tmp\NuGet\Nuget\Newtonsoft.Json.12.0.1\lib
2019-09-30 18:27 <DIR> .
2019-09-30 18:27 <DIR> ..
2019-09-30 18:27 <DIR> net20
2019-09-30 18:27 <DIR> net35
2019-09-30 18:27 <DIR> net40
2019-09-30 18:27 <DIR> net45
2019-09-30 18:27 <DIR> netstandard1.0
2019-09-30 18:27 <DIR> netstandard1.3
2019-09-30 18:27 <DIR> netstandard2.0
2019-09-30 18:27 <DIR> portable-net40+sl5+win8+wp8+wpa81
2019-09-30 18:27 <DIR> portable-net45+win8+wp8+wpa81
Согласно docs.microsoft.com
Когда NuGet устанавливает пакет с несколькими сборкамиверсий, он пытается сопоставить имя фреймворка сборки с целевой фреймворк проекта.
Если совпадение не найдено, NuGet копирует сборку для самой высокой версии, которая меньше или равнацелевая структура, если имеется. Если совместимая сборка не найдена, NuGet возвращает соответствующее сообщение об ошибке.
Например, рассмотрите следующую структуру папок в пакете:
\net45
\MyAssembly.dll
\net461
\MyAssembly.dll
При установке этого пакета в проекте, который нацелен на.NET Framework 4.6, NuGet устанавливает сборку в папку net45, поскольку это самая высокая доступная версия, которая меньше или равна 4,6.
Если проект нацелен на .NET Framework 4.6.1, с другой стороны,NuGet устанавливает сборку в папку net461.
Из приведенного выше абзаца я понимаю, что при установке целевой платформы я смогу восстановить только сборки для этой одной целевой платформы. В моем случае похоже, что NuGet полностью игнорирует атрибут targetFramework
и всегда устанавливает библиотеки для всех целевых структур. Изменение с net45 на net40 не имеет никакого эффекта.
Как я могу восстановить NuGet ONLY библиотек в пакете для конкретной целирамки?