Как указать условные зависимости на основе целевой структуры в NuGet?

Я создаю пакет NuGet, который ссылается на сборку Microsoft CommonServiceLocator.

Существуют две версии Microsoft CommonServiceLocator:

Мой проект является переносимой библиотекой классов, но, поскольку он иногда используется с корпоративной библиотекой, мне нужно сортировать "условно" ссылку на переносимую версию, чтобы не было конфликта.

  • Если целевая структура заполнена .NET 4.0/4.5, используйте исходный пакет CommonServiceLocator, чтобы люди могли также использовать биты Enterprise Library (которые также ссылаются на пакет CommonServiceLocator).
  • Если целевая структура переносима (или что-то еще), используйте пакет Portable.CommonServiceLocator.

Я вижу новую функцию "group" в документах NuGet, показывающую, как указать зависимости в вашем файле .nuspec, и я думаю, что это будет делать то, что я хочу, но я не уверен, как его протестировать.

Вот что я думаю, что мне нужно сделать, и я надеюсь, что кто-то сможет подтвердить мой подход или указать мне в правильном направлении:

<dependencies>
  <group>
    <!-- Always include regardless of target framework -->
    <dependency id="Autofac" />
  </group>
  <group targetFramework="net40">
    <!-- Also include the full CSL if it full framework -->
    <dependency id="CommonServiceLocator" />
  </group>
  <group targetFramework="portable-win+sl50+wp8">
    <!-- Otherwise include the Portable CSL -->
    <dependency id="Portable.CommonServiceLocator" />
  </group>
</dependencies>

В частности...

  • Является ли синтаксис targetFramework правильным? Я не могу найти никаких примеров, поэтому я не знаю, является ли механизм с разделителями + правильным, или если он должен быть разделен запятой.
  • Будет ли работать группа по умолчанию? Эта группа с неопределенной целевой структурой - всегда будет включена или мне нужно скопировать/вставить ее в каждую группу?

Ответ 1

Да, это очень правильно. Подробности о именах переносимых фреймов можно найти здесь http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#Framework_Names

Еще одна вещь, которую я нашел, поскольку win + sl50 + wp8 по умолчанию включает net45, вы можете включить его, чтобы эта группа зависимостей была установлена.