Поделиться через


Создание пакетов универсальной платформы Windows (C#)

Универсальная платформа Windows (UWP) предоставляет единую платформу приложений для всех устройств с операционной системой Windows 10. В этой модели приложения UWP могут вызывать как интерфейсы API WinRT, общие для всех устройств, так и интерфейсы API (включая Win32 и .NET), относящиеся только к семейству устройств, на которых работает приложение.

В этом пошаговом руководстве вы создадите пакет NuGet с компонентом UWP на C# (включая элемент управления XAML), который можно использовать как в управляемых, так и в собственных проектах.

Необходимые компоненты

  1. Visual Studio 2019. Установите выпуск Community 2019 бесплатно из visualstudio.com. Вы также можете использовать выпуски Professional и Enterprise.

  2. Интерфейс командной строки NuGet. Скачайте последнюю версию nuget.exe из nuget.org/downloads и сохраните средство в выбранном расположении. (Скачивание — это файл напрямую .exe .) Добавьте расположение файла средства в переменную среды PATH, если это еще не так. Дополнительные сведения см. в разделе "Установка nuget.exe".

Создание компонента среды выполнения Windows для UWP

  1. В Visual Studio выберите файл > нового > проекта и выполните поиск по запросу uwp c#. Выберите шаблон компонента среда выполнения Windows (универсальная windows) и нажмите кнопку "Далее". Измените имя на ImageEnhancer и нажмите кнопку "Создать". При появлении запроса оставьте значения свойств "Конечная версия" и "Минимальная версия" по умолчанию.

    Creating a new UWP Windows Runtime Component project

  2. Щелкните проект правой кнопкой мыши в Обозреватель решений, выберите "Добавить > новый элемент", выберите "Шаблонированный элемент управления", измените имя на AwesomeImageControl.cs и нажмите кнопку "Добавить".

    Adding a new XAML Templated Control item to the project

  3. Щелкните проект правой кнопкой мыши в Обозреватель решений и выберите "Свойства". На странице "Свойства" выберите вкладку "Сборка" и включите XML-файл документации:

    Setting Generate XML Documentation Files to Yes

  4. Щелкните решение правой кнопкой мыши и выберите пакетную сборку. Выберите пять полей сборки, как показано на следующем рисунке. Благодаря этому при сборке создается полный набор артефактов для каждой из целевых систем, поддерживаемых Windows.

    Batch Build

  5. В диалоговом окне пакетной сборки выберите "Сборка ", чтобы проверить проект и создать выходные файлы, необходимые для пакета NuGet.

Примечание.

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

Создание и изменение файла NUSPEC

Чтобы создать исходный .nuspec файл, выполните следующие действия. В последующих разделах описаны другие необходимые обновления.

  1. Откройте командную строку и перейдите к папке, содержащей ImageEnhancer.csproj файл, который должен быть вложенной папкой папки, содержащей файл решения.

  2. NuGet spec Выполните команду, чтобы создать ImageEnhancer.nuspec файл. Имя файла берется из имени .csroj файла.

    nuget spec
    
  3. Откройте файл ImageEnhancer.nuspec в редакторе и измените его содержимое так, как показано ниже, заменив YOUR_NAME на соответствующее значение. Не оставляйте никаких значений $propertyName$ . Значение <id> должно быть уникальным в пределах nuget.org (см. соглашения об именовании, описанные в разделе Создание пакета). Кроме того, обратите внимание на то, что необходимо изменить теги author и description, иначе на этапе упаковки произойдет ошибка.

    <?xml version="1.0"?>
    <package >
        <metadata>
        <id>ImageEnhancer.YOUR_NAME</id>
        <version>1.0.0</version>
        <title>ImageEnhancer</title>
        <authors>YOUR_NAME</authors>
        <owners>YOUR_NAME</owners>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>Awesome Image Enhancer</description>
        <releaseNotes>First release</releaseNotes>
        <copyright>Copyright 2020</copyright>
        <tags>image enhancer imageenhancer</tags>
        </metadata>
    </package>
    

Примечание.

Если пакет будет общедоступным, обратите особое внимание на элемент <tags>, так как эти теги помогают найти ваш пакет и понять его назначение.

Добавление метаданных Windows в пакет

Компоненту среды выполнения Windows требуются метаданные, которые описывают все его общедоступные типы, что делает возможным использование компонента другими приложениями и библиотеками. Эти метаданные содержатся в файле WINMD, который создается при компиляции проекта и должен быть включен в пакет NuGet. В это же время создается XML-файл с данными IntelliSense, который также необходимо включить в пакет.

Добавьте следующий узел <files> в файл .nuspec:

<package>
    <metadata>
        ...
    </metadata>

    <files>
        <!-- WinMd and IntelliSense files -->
      <file src="bin\Debug\ImageEnhancer.winmd" target="lib\uap10.0"/>
      <file src="bin\Debug\ImageEnhancer.xml" target="lib\uap10.0"/>
    </files>
</package>

Добавление содержимого XAML

Чтобы добавить элемент управления XAML вместе с компонентом, необходимо включить XAML-файл с шаблоном по умолчанию для элемента управления (который создается шаблоном проекта). Он также указывается в разделе <files>:

<?xml version="1.0"?>
<package >
    <metadata>
        ...
    </metadata>
    <files>
        ...

        <!-- XAML controls -->
        <file src="Themes\Generic.xaml" target="lib\uap10.0\Themes"/>

    </files>
</package>

Добавление библиотек, реализованных в машинном коде

В компоненте основная логика типа ImageEnhancer реализована в машинном коде, который содержится в различных сборках ImageEnhancer.winmd, создаваемых для каждой целевой среды выполнения (ARM, ARM64, x86 и x64). Чтобы включить их в пакет, добавьте ссылки на них и на связанные с ними PRI-файлы ресурсов в раздел <files>:

<?xml version="1.0"?>
<package >
    <metadata>
        ...
    </metadata>
    <files>
        ...

        <!-- WINMDs and resources -->
      <file src="bin\ARM\Debug\ImageEnhancer.winmd" target="runtimes\win10-arm"/>
      <file src="bin\ARM\Debug\ImageEnhancer.pri" target="runtimes\win10-arm"/>

      <file src="bin\ARM64\Debug\ImageEnhancer.winmd" target="runtimes\win10-arm64"/>
      <file src="bin\ARM64\Debug\ImageEnhancer.pri" target="runtimes\win10-arm64"/>

      <file src="bin\x64\Debug\ImageEnhancer.winmd" target="runtimes\win10-x64"/>
      <file src="bin\x64\Debug\ImageEnhancer.pri" target="runtimes\win10-x64"/>

      <file src="bin\x86\Debug\ImageEnhancer.winmd" target="runtimes\win10-x86"/>
      <file src="bin\x86\Debug\ImageEnhancer.pri" target="runtimes\win10-x86"/>

    </files>
</package>

Итоговый файл NUSPEC

Итоговый файл .nuspec должен выглядеть следующим образом (YOUR_NAME, и в этом случае необходимо заменить на соответствующее значение):

<?xml version="1.0"?>
<package >
    <metadata>
    <id>ImageEnhancer.YOUR_NAME</id>
    <version>1.0.0</version>
    <title>ImageEnhancer</title>
    <authors>YOUR_NAME</authors>
    <owners>YOUR_NAME</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Awesome Image Enhancer</description>
    <releaseNotes>First Release</releaseNotes>
    <copyright>Copyright 2020</copyright>
    <tags>image enhancer imageenhancer</tags>
    </metadata>
    <files>
    <!-- WinMd and IntelliSense -->
      <file src="bin\Debug\ImageEnhancer.winmd" target="lib\uap10.0"/>
      <file src="bin\Debug\ImageEnhancer.xml" target="lib\uap10.0"/>

    <!-- XAML controls -->
    <file src="Themes\Generic.xaml" target="lib\uap10.0\Themes"/>

    <!-- WINMDs and resources -->
      <file src="bin\ARM\Debug\ImageEnhancer.winmd" target="runtimes\win10-arm"/>
      <file src="bin\ARM\Debug\ImageEnhancer.pri" target="runtimes\win10-arm"/>

      <file src="bin\ARM64\Debug\ImageEnhancer.winmd" target="runtimes\win10-arm64"/>
      <file src="bin\ARM64\Debug\ImageEnhancer.pri" target="runtimes\win10-arm64"/>

      <file src="bin\x64\Debug\ImageEnhancer.winmd" target="runtimes\win10-x64"/>
      <file src="bin\x64\Debug\ImageEnhancer.pri" target="runtimes\win10-x64"/>

      <file src="bin\x86\Debug\ImageEnhancer.winmd" target="runtimes\win10-x86"/>
      <file src="bin\x86\Debug\ImageEnhancer.pri" target="runtimes\win10-x86"/>

    </files>
</package>

Упаковка компонента

Когда будет готов файл .nuspec со ссылками на все файлы, которые необходимо включить в пакет, можно выполнить команду nuget pack:

nuget pack ImageEnhancer.nuspec

Будет создан ImageEnhancer.YOUR_NAME.1.0.0.nupkg. Если открыть файл в таком средстве, как обозреватель пакетов NuGet, и развернуть все узлы, отобразится следующее содержимое:

NuGet Package Explorer showing the ImageEnhancer package

Совет

Файл .nupkg — это просто ZIP-файл с другим расширением. Поэтому чтобы просмотреть содержимое пакета, можно просто изменить расширение .nupkg на .zip, но не забудьте восстановить расширение перед отправкой пакета на сайт nuget.org.

Чтобы предоставить доступ к пакету другим разработчикам, следуйте инструкциям в разделе Публикация пакета.