Целевые конкретные зависимости NuGet - PullRequest
0 голосов
/ 29 августа 2018

В моем файле .nuspec есть следующие зависимости:

<dependencies>
        <group>
          <dependency id="Dep1" version="2.4.11" />
          <dependency id="Dep2" version="1.0.4" />
          <dependency id="Dep3" version="1.0.4" />
          <dependency id="Dep4" version="1.0.0" />
          <dependency id="Dep5" version="1.0.4" />
          <dependency id="Dep6" version="1.0.4" />
        </group>
    </dependencies>

Я создал локальный сервер Nuget и устанавливаю этот пакет NuGet в решении Xamarin Forms.

Дело в том, что в части решения для Android оно будет установлено, но в части .netstandard будет жаловаться, что Dep 4, 5, 6 предназначены только для MonoAndroid (что правильно). Мне не нужны Dep 4,5 и 6 в моем решении .netstandard.

NU1202: Dep4 1.0.0 не совместим с netstandard2.0 (.NETStandard, Version = 2.0). Пакет Dep4 1.0.0 поддерживает: monoandroid10 (MonoAndroid, версия = v1.0) NU1202: пакет Dep5 1.0.4 является несовместим с netstandard2.0 (.NETStandard, версия = v2.0). Пакет Dep5 1.0.4 поддерживает: monoandroid44 (MonoAndroid, версия = v4.4)

Как я могу разделить зависимости для targetFramework? Я пробовал несколько вариантов групп внутри категории зависимостей, но ничто не решит эту проблему.

1 Ответ

0 голосов
/ 29 августа 2018

После прочтения

https://docs.microsoft.com/en-us/nuget/reference/nuspec#dependencies-element

https://docs.microsoft.com/en-us/nuget/reference/target-frameworks

https://docs.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/nuget-manual

это может быть суммировано до:

Версия 2.0 +

В качестве альтернативы одиночному плоскому списку можно указать зависимости в соответствии с профилем структуры целевого проекта с использованием элементы внутри.

Каждая группа имеет атрибут с именем targetFramework и содержит ноль или больше элементов. Эти зависимости устанавливаются вместе когда целевой фреймворк совместим с фреймворком проекта профиль.

Элемент без атрибута targetFramework используется как стандартный или резервный список зависимостей. См. Целевые рамки для точные идентификаторы структуры.

Поэтому в моем случае это будет:

    <dependencies>
       <group targetFramework="MonoAndroid10">
          <dependency id="Dep1" version="2.4.11" />
          <dependency id="Dep2" version="1.0.4" />
          <dependency id="Dep3" version="1.0.4" />
          <dependency id="Dep4" version="1.0.0" />
          <dependency id="Dep5" version="1.0.4" />
          <dependency id="Dep6" version="1.0.4" />
       </group>
       <group>
          <dependency id="Dep1" version="2.4.11" />
          <dependency id="Dep2" version="1.0.4" />
          <dependency id="Dep3" version="1.0.4" />
        </group>
    </dependencies>

Таким образом, когда я устанавливаю пакет в проект .netstandard, он проверит targetFramework и увидит, что это не MonoAndroid, и откатится к элементу без targetFramework и будет использовать только Dep1, Dep2 и Dep3. Для проекта MonoAndroid10 он будет делать то же самое и использовать их все.

...