Подтвердить что ты не робот

Как упаковать библиотеку .NET, ориентированную на универсальную платформу Windows?

Как мне упаковать библиотеку универсальной платформы Windows в современном общедоступном способе публикации через NuGet? Предположим, что у меня есть одна сборка AnyCPU, написанная на С#, которая экспортирует некоторые элементы управления с помощью кода и XAML.

Это серия вопросов и ответов, которые документируют мои выводы по теме современного дизайна пакетов NuGet, особенно с учетом изменений, внесенных в NuGet 3. Вам также могут быть интересны некоторые связанные вопросы:

4b9b3361

Ответ 1

Этот ответ основывается на принципах используемых для упаковки библиотек, ориентированных на .NET Framework. Сначала прочитайте связанный ответ, чтобы лучше понять следующее.

Сначала вы должны установить флажок "Создать библиотеку" в настройках сборки проекта. Без этого невозможно будет использовать элементы управления XAML, экспортируемые вашей библиотекой. Не забудьте применить этот параметр для всех конфигураций сборки и архитектур.

В дополнение к основным 3 активам (см. ответ, приведенный выше), вам также потребуется упаковать следующие дополнительные ресурсы из вашего выходного каталога сборки:

  • MyUwpLibrary.pri
  • Подкаталог MyUwpLibrary

Эти дополнительные ресурсы необходимы для использования пользовательских элементов управления XAML, экспортируемых вашей сборкой. Всегда включайте эти активы, даже если вы еще не экспортируете XAML из своей библиотеки - вы можете сделать это в один прекрасный день, и это будет сложно запомнить позже!

Чтобы опубликовать библиотеку UWP, вам необходимо создать пакет NuGet со следующей структурой:

\---lib
    \---uap10.0
        |   MyUwpLibrary.dll
        |   MyUwpLibrary.pdb
        |   MyUwpLibrary.pri
        |   MyUwpLibrary.xml
        |
        \---MyUwpLibrary
                HelloWorld.xaml
                MyUwpLibrary.xr.xml

Если вы знакомы с публикацией библиотеки .NET Framework, это должно выглядеть довольно знакомым и понятным. Вы можете использовать следующий шаблон для вашего файла nuspec:

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata minClientVersion="3.2">
        <id>Example.MyUwpLibrary</id>
        <version>1.0.0</version>
        <authors>Firstname Lastname</authors>
        <description>Example of a UWP library that exports a user control.</description>
        <dependencies>
            <dependency id="Newtonsoft.Json" version="8.0.1" />
        </dependencies>
    </metadata>
    <files>
        <!-- The double wildcard will also grab all the resource files and the resource subdirectory. -->
        <file src="..\bin\Release\MyUwpLibrary**" target="lib\uap10.0" />
    </files>
</package>

Это, действительно! Не забудьте создать свое решение с помощью конфигурации Release перед созданием пакета NuGet. Для получения дополнительной информации см. Ответ о упаковке библиотеки .NET Framework, связанной выше.

Библиотека примеров и соответствующие упаковочные файлы доступна на GitHub. Решением, соответствующим этому ответу, является SimpleUwpLibrary.