Очень запутался в создании файла nuspec с конкретными целями

У меня есть файл nuspec со следующей структурой

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
  <metadata>
    <id>XLabs.Forms</id>
    <version>2.2.0-pre05</version>
    <title>XLabs - Forms</title>
    <authors>XLabs Team</authors>
    <owners>XLabs Team</owners>
    <licenseUrl>https://github.com/XLabs/Xamarin-Forms-Labs/blob/master/LICENSE</licenseUrl>
    <projectUrl>https://github.com/XLabs/Xamarin-Forms-Labs</projectUrl>
    <iconUrl>https://raw.githubusercontent.com/XLabs/Xamarin-Forms-Labs/master/Design/Icons/nuget/icon_nuget.png</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>This package contains the cross-platform XLabs Forms framework and controls.</description>
    <summary>XLabs is a open source project that aims to provide a powerfull and cross platform set of controls tailored to work with Xamarin Forms.</summary>
    <releaseNotes>Updated for Xamarin Forms 2.2</releaseNotes>
    <copyright>Copyright © 2016 XLabs Team</copyright>
    <tags>Xamarin XLabs Forms Controls GridView ListView</tags>
    <dependencies>
      <group>
        <dependency id="XLabs.Platform" version="[2.2.0-pre05]" />
        <dependency id="Xamarin.Forms" version="2.2.0.31" />
      </group>
    </dependencies>
  </metadata>
  <files>
    <!-- Assemblies: Android -->
    <file src="..\..\source\Forms\XLabs.Forms\bin\$configuration$\XLabs.Forms.dll" target="lib\monoandroid" />
    <file src="..\..\source\Forms\XLabs.Forms\bin\$configuration$\XLabs.Forms.pdb" target="lib\monoandroid" />
    <file src="..\..\source\Forms\XLabs.Forms.Droid\bin\$configuration$\XLabs.Forms.Droid.dll" target="lib\monoandroid" />
    <file src="..\..\source\Forms\XLabs.Forms.Droid\bin\$configuration$\XLabs.Forms.Droid.pdb" target="lib\monoandroid" />
    <!-- Assemblies: iOS -->
    <file src="..\..\source\Forms\XLabs.Forms\bin\$configuration$\XLabs.Forms.dll" target="lib\Xamarin.iOS10" />
    <file src="..\..\source\Forms\XLabs.Forms\bin\$configuration$\XLabs.Forms.pdb" target="lib\Xamarin.iOS10" />
    <file src="..\..\source\Forms\XLabs.Forms.iOS\bin\$configuration$\XLabs.Forms.iOS.pdb" target="lib\Xamarin.iOS10" />
    <file src="..\..\source\Forms\XLabs.Forms.iOS\bin\$configuration$\XLabs.Forms.iOS.dll" target="lib\Xamarin.iOS10" />
  </files>
</package>

и это сводит меня с ума :) Файл nupkg, созданный с помощью этого nuspec, должен устанавливаться ТОЛЬКО в проекте Xamarin iOS или базовом проекте Xamarin Android, верно? Неправда, он устанавливается в любой тип проекта (PCL, Windows 10, Windows 8 и т. д.). Я нахожусь в том месте, где я не уверен, что еще сделать, чтобы ограничить пакет, чтобы его можно было установить только в тех целях, которые мне нужны.

Может ли кто-нибудь увидеть, что я могу делать неправильно?

ОБНОВЛЕНИЕ: вот последняя версия файла nuspec, которую я пробовал, но она все еще НЕ работает. Далее будет создан пакет, который устанавливается в проекте Windows 8, Windows Mobile и PCL, даже если он содержит только базовые сборки Android.

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
  <metadata>
    <id>XLabs.Forms</id>
    <version>2.2.0-pre05</version>
    <title>XLabs - Forms</title>
    <authors>XLabs Team</authors>
    <owners>XLabs Team</owners>
    <licenseUrl>https://github.com/XLabs/Xamarin-Forms-Labs/blob/master/LICENSE</licenseUrl>
    <projectUrl>https://github.com/XLabs/Xamarin-Forms-Labs</projectUrl>
    <iconUrl>https://raw.githubusercontent.com/XLabs/Xamarin-Forms-Labs/master/Design/Icons/nuget/icon_nuget.png</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>This package contains the cross-platform XLabs Forms framework and controls.</description>
    <summary>XLabs is a open source project that aims to provide a powerfull and cross platform set of controls tailored to work with Xamarin Forms.</summary>
    <releaseNotes>Updated for Xamarin Forms 2.2</releaseNotes>
    <copyright>Copyright © 2016 XLabs Team</copyright>
    <tags>Xamarin XLabs Forms Controls GridView ListView</tags>
    <dependencies>
      <group targetFramework="monoandroid">
        <dependency id="XLabs.Core" version="[2.2.0-pre05]" />
        <dependency id="XLabs.IoC" version="[2.2.0-pre05]" />
        <dependency id="XLabs.Platform" version="[2.2.0-pre05]" />
        <dependency id="XLabs.Serialization" version="[2.2.0-pre05]" />
        <dependency id="Xamarin.Forms" version="2.2.0.31" />
      </group>
    </dependencies>
  </metadata>
  <files>
    <!-- Content Files -->
    <file src="..\..\docs\XLabs.Forms.Readme.md" target="content\XLabs.Forms.Readme.md" />
    <!-- Assemblies: Android -->
    <file src="..\..\source\Forms\XLabs.Forms\bin\$configuration$\XLabs.Forms.dll" target="lib\monoandroid" />
    <file src="..\..\source\Forms\XLabs.Forms\bin\$configuration$\XLabs.Forms.pdb" target="lib\monoandroid" />
    <file src="..\..\source\Forms\XLabs.Forms.Droid\bin\$configuration$\XLabs.Forms.Droid.dll" target="lib\monoandroid" />
    <file src="..\..\source\Forms\XLabs.Forms.Droid\bin\$configuration$\XLabs.Forms.Droid.pdb" target="lib\monoandroid" />
  </files>
</package>

person Shawn    schedule 04.06.2016    source источник
comment
Возможно, я нашел проблему, и это также может быть ошибка. Похоже, что файл, предназначенный для содержимого файла readme.md, если его удалить, все начнет работать, как и ожидалось.   -  person Shawn    schedule 14.06.2016


Ответы (2)


Я считаю, что это потому, что у вас есть групповая зависимость, которая не имеет целевой структуры. Групповая зависимость заставит NuGet установить пакеты NuGet Xamarin.Forms и XLabs.Platform, в то время как сборки в ваших каталогах lib не будут использоваться, если вы не устанавливаете их в проект iOS или Android.

Я бы попробовал добавить целевую структуру для iOS и Android.

<group targetFramework="Xamarin.iOS10">
   <dependency id="XLabs.Platform" version="[2.2.0-pre05]" />
   <dependency id="Xamarin.Forms" version="2.2.0.31" />
</group>

<group targetFramework="MonoAndroid">
   <dependency id="XLabs.Platform" version="[2.2.0-pre05]" />
   <dependency id="Xamarin.Forms" version="2.2.0.31" />
</group>
person Matt Ward    schedule 04.06.2016
comment
Спасибо - я подумал об этом примерно через 30 минут после публикации и попробовал, но все равно не повезло. Интересно, что файл nuspec, который был помещен ВНУТРИ. Файл nupkg, похоже, удалил атрибут target в элементе group — все еще пытаюсь понять, почему :-/ - person Shawn; 05.06.2016
comment
Вы используете последнюю версию NuGet? Элемент целевой платформы не поддерживался в старых версиях NuGet. - person Matt Ward; 05.06.2016
comment
Я использую последнюю версию (3.4.3.855) и пробовал последнюю сборку (3.5). Я в полной растерянности - что бы я ни делал, пакет устанавливается в любом проекте. - person Shawn; 14.06.2016
comment
Как выглядит .nuspec внутри .nupkg? - person Matt Ward; 14.06.2016

Оказывается, проблема была с этой строкой

<!-- Content Files -->
<file src="..\..\docs\XLabs.Forms.Readme.md" target="content\XLabs.Forms.Readme.md" />

Поскольку в нем нет целевого прозвища, он действителен для ВСЕХ целевых платформ. Как только я это удалил, все заработало. Я думаю, что формат файла nuspec нуждается в НАМНОГО больше подробностей в документации :)

person Shawn    schedule 07.09.2016