Nuget не устанавливает зависимости, когда не указан атрибут targetFramework
Согласно справочной главе nuspec "Указание зависимостей в версии 2.0 и выше", можно объявить dependency
в group
элемент без дополнительного targetFramework
атрибут, который подразумевает, что эта зависимость действительна для всех платформ. Итак, я пошел вперед, указав следующее в.nuspec для одного из моих пакетов:
<dependencies>
<group>
<dependency id="DEPENDENCY" version="1.0.0" />
</group>
<group targetFramework="net40-client">
</group>
<group targetFramework="net45">
</group>
</dependencies>
После установки пакета в одном из моих проектов зависимость вообще отсутствует. Ни в ссылках проекта, ни в packages
папка в корне моего проекта. Однако при этом:
<dependencies>
<group targetFramework="net40-client">
<dependency id="DEPENDENCY" version="1.0.0" />
</group>
<group targetFramework="net45">
<dependency id="DEPENDENCY" version="1.0.0" />
</group>
</dependencies>
... это работает безупречно.
Это ошибка? ~~ Возможно ли переопределить "глобальную" конфигурацию зависимостей пустыми локальными объявлениями? ~~ Или я что-то здесь неправильно понял?
РЕДАКТИРОВАТЬ
Можно объявить пустые элементы зависимости и при этом иметь "глобальный": https://github.com/dsplaisted/PCLStorage/blob/master/common/PCLStorage.nuspec
1 ответ
Из документации по выпуску Nuget:
Нет наследства между группами. Если целевая структура проекта соответствует атрибуту targetFramework группы, будут установлены только зависимости внутри этой группы.
Это означает, что если проект использует net45
, net40-client
или позже - никакие зависимости не будут установлены.
group
элемент без targetFramework
Атрибут используется для установки зависимостей для ранней версии этих платформ (например, net20
).
Хороший пример из документации по выпуску Nuget:
<dependencies>
<group>
<dependency id="RouteMagic" version="1.1.0" />
</group>
<group targetFramework="net40">
<dependency id="jQuery" />
<dependency id="WebActivator" />
</group>
<group targetFramework="sl30">
</group>
</dependencies>
Обратите внимание, что группа может содержать ноль зависимостей. В приведенном выше примере, если пакет установлен в проект, предназначенный для Silverlight 3.0 или более поздней версии, зависимости не будут установлены. Если пакет установлен в проект, предназначенный для.NET 4.0 или более поздней версии, будут установлены две зависимости, jQuery и WebActivator. Если пакет установлен в проект, нацеленный на более раннюю версию этих двух платформ или любую другую платформу, будет установлен RouteMagic 1.1.0.