UWP パッケージを作成する (C#)

Universal Windows Platform (UWP) は、Windows 10を実行するすべてのデバイスに共通のアプリ プラットフォームを提供します。 このモデルでは、UWP アプリは、すべてのデバイスに共通する WinRT API と、アプリが実行されているデバイス ファミリに固有の API (Win32 と.NETを含む) の両方を呼び出すことができます。

このチュートリアルでは、マネージド プロジェクトとネイティブ プロジェクトの両方で使用できる C# UWP コンポーネント (XAML コントロールを含む) を含む NuGet パッケージを作成します。

前提条件

  1. Visual Studio 2019。 visualstudio.com から無料で 2019 Community エディションをインストールします。 Professional エディションと Enterprise エディションを使用することもできます。

  2. NuGet CLI。 nuget.org/downloads から最新バージョンのnuget.exeダウンロードし、任意の場所にツールを保存します。 (ダウンロードは直接 .exe ファイルです)。ツール ファイルの場所がまだない場合は、PATH 環境変数に追加します。 詳細については、「 nuget.exeのインストール」を 参照してください。

UWP Windows Runtime コンポーネントを作成する

  1. Visual Studioで、File > New > Project を選択し、"uwp c#" を検索します。 Windows Runtime コンポーネント (ユニバーサル Windows) テンプレートを選択し、Next を選択します。 名前を ImageEnhancer に変更し、[ 作成] を選択します。 メッセージが表示されたら、[ターゲット バージョン] と [最小バージョン] の既定値をそのまま使用します。

    新しい UWP Windows Runtime コンポーネント プロジェクトの作成

  2. Solution Explorerでプロジェクトを右クリックし、[新しい項目 <の追加1>] を選択し、[Templated Control を選択し、名前を AwesomeImageControl.cs に変更して、Add を選択します。

    新しい XAML テンプレート コントロール項目をプロジェクトに追加する

  3. Solution Explorerでプロジェクトを右クリックし、Properties. プロパティ] ページで [Build] タブを選択し、XML ドキュメント ファイル:

    XML ドキュメント ファイルの生成を [はい] に設定する

  4. ソリューションを右クリックし、[バッチ ビルド] を選択します。 次の図に示すように、5 つのビルド ボックスを選択します。 これにより、ビルドを実行すると、Windowsがサポートする各ターゲット システムの成果物の完全なセットが生成されます。

    バッチ ビルド

  5. [バッチ ビルド] ダイアログで、[ ビルド ] を選択してプロジェクトを確認し、NuGet パッケージに必要な出力ファイルを作成します。

このチュートリアルでは、パッケージのデバッグ 成果物を使用します。 非デバッグ パッケージの場合は、代わりに Batch ビルド ダイアログでリリース オプションを確認し、次の手順で結果のリリース フォルダーを参照してください。

.nuspec ファイルを作成して更新する

初期 .nuspec ファイルを作成するには、次の手順を実行します。 以降のセクションでは、他の必要な更新プログラムについて説明します。

  1. コマンド プロンプトを開き、 ImageEnhancer.csproj ファイルを含むフォルダー (ソリューション ファイルを含むフォルダーのサブフォルダー) を参照します。

  2. NuGet spec コマンドを実行して、ImageEnhancer.nuspec ファイルを生成します。 ファイルの名前は、 .csroj ファイルの名前から取得されます。

    nuget spec
    
  3. エディターで ImageEnhancer.nuspec を開き、次に一致するように更新し、YOUR_NAMEを適切な値に置き換えます。 $propertyName$ 値は一切残さないでください。 <id>値は、具体的には、nuget.org 全体で一意である必要があります (パッケージの作成で説明されている名前付け規則参照してください)。 また、作成者タグと説明タグも更新する必要があります。また、パッキング手順中にエラーが発生します。

    <?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 Runtime コンポーネントには、一般公開されているすべての型を記述するメタデータが必要です。これにより、他のアプリやライブラリがコンポーネントを使用できるようになります。 このメタデータは .winmd ファイルに含まれています。これはプロジェクトのコンパイル時に作成され、NuGet パッケージに含める必要があります。 IntelliSense データを含む XML ファイルも同時にビルドされ、同様に含める必要があります。

<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 型のコア ロジックはネイティブ コードにあり、ターゲット ランタイム (ARM、ARM64、x86、x64) ごとに生成されるさまざまな ImageEnhancer.winmd アセンブリに含まれています。 これらをパッケージに含めるには、関連する .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 パッケージ エクスプローラーなどのツールでこのファイルを開き、すべてのノードを展開すると、次の内容が表示されます。

ImageEnhancer パッケージを示す NuGet パッケージ エクスプローラー

ヒント

.nupkgファイルは、別の拡張子を持つZIPファイルにすぎません。 .nupkg.zipに変更することで、パッケージの内容を調べることもできますが、パッケージを nuget.org にアップロードする前に拡張機能を復元することを忘れないでください。

他の開発者がパッケージを使用できるようにするには、「 パッケージを発行する」の手順に従います。