Я создаю пакет NuGet, который ссылается на сборку Microsoft CommonServiceLocator.
Существуют две версии Microsoft CommonServiceLocator:
- CommonServiceLocator - задает полную платформу .NET и ссылается на компоненты Microsoft EnterpriseLibrary.
- Portable.CommonServiceLocator - содержит как полную версию CommonServiceLocator, так и недавно выпущенная версия Portable Class Library.
Мой проект является переносимой библиотекой классов, но, поскольку он иногда используется с корпоративной библиотекой, мне нужно сортировать "условно" ссылку на переносимую версию, чтобы не было конфликта.
- Если целевая структура заполнена .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
правильным? Я не могу найти никаких примеров, поэтому я не знаю, является ли механизм с разделителями+
правильным, или если он должен быть разделен запятой. - Будет ли работать группа по умолчанию? Эта группа с неопределенной целевой структурой - всегда будет включена или мне нужно скопировать/вставить ее в каждую группу?