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.

Другие вопросы по тегам