Как восстановить сборки из пакета NuGet только для конкретной целевой платформы - PullRequest
3 голосов
/ 30 сентября 2019

Я ищу способ восстановить сборки для пакета 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 библиотек в пакете для конкретной целирамки?

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Я не думаю, что вы можете.

Fiddler

Nuget (zip) содержит все рамки.

Все, что Nuget.exe делает, это загружает файл и распаковывает его. Вы могли бы потом удалить те, которые вам не нужны?

Кроме того, почему бы просто не использовать .\nuget.exe restore -Force -NoCache -Packagesdirectory .\Nuget вместо файла конфигурации nuget?

Вы можете запутать людей, создав собственный пакет, которыйпросто содержит ваши рамки!

0 голосов
/ 03 октября 2019

Попробуйте изменить значение targetFramework с

targetFramework="net45"

на

targetFramework="4.5"
...