Universal Windows Platform (UWP) は、Windows 10を実行するすべてのデバイスに共通のアプリ プラットフォームを提供します。 このモデルでは、UWP アプリは、すべてのデバイスに共通する WinRT API と、アプリが実行されているデバイス ファミリに固有の API (Win32 と.NETを含む) の両方を呼び出すことができます。
このチュートリアルでは、マネージド プロジェクトとネイティブ プロジェクトの両方で使用できる C# UWP コンポーネント (XAML コントロールを含む) を含む NuGet パッケージを作成します。
前提条件
Visual Studio 2019。 visualstudio.com から無料で 2019 Community エディションをインストールします。 Professional エディションと Enterprise エディションを使用することもできます。
NuGet CLI。 nuget.org/downloads から最新バージョンの
nuget.exeをダウンロードし、任意の場所にツールを保存します。 (ダウンロードは直接.exeファイルです)。ツール ファイルの場所がまだない場合は、PATH 環境変数に追加します。 詳細については、「 nuget.exeのインストール」を 参照してください。
UWP Windows Runtime コンポーネントを作成する
Visual Studioで、File > New > Project を選択し、"uwp c#" を検索します。 Windows Runtime コンポーネント (ユニバーサル Windows) テンプレートを選択し、Next を選択します。 名前を ImageEnhancer に変更し、[ 作成] を選択します。 メッセージが表示されたら、[ターゲット バージョン] と [最小バージョン] の既定値をそのまま使用します。
Solution Explorerでプロジェクトを右クリックし、
[新しい項目 <の追加1>] を選択し、[ Templated Control を選択し、名前を AwesomeImageControl.cs に変更して、Add を選択します。
Solution Explorerでプロジェクトを右クリックし、
Properties. プロパティ] ページで [Build ] タブを選択し、XML ドキュメント ファイル :
ソリューションを右クリックし、[バッチ ビルド] を選択します。 次の図に示すように、5 つのビルド ボックスを選択します。 これにより、ビルドを実行すると、Windowsがサポートする各ターゲット システムの成果物の完全なセットが生成されます。
[バッチ ビルド] ダイアログで、[ ビルド ] を選択してプロジェクトを確認し、NuGet パッケージに必要な出力ファイルを作成します。
注
このチュートリアルでは、パッケージのデバッグ 成果物を使用します。 非デバッグ パッケージの場合は、代わりに Batch ビルド ダイアログでリリース オプションを確認し、次の手順で結果のリリース フォルダーを参照してください。
.nuspec ファイルを作成して更新する
初期 .nuspec ファイルを作成するには、次の手順を実行します。 以降のセクションでは、他の必要な更新プログラムについて説明します。
コマンド プロンプトを開き、
ImageEnhancer.csprojファイルを含むフォルダー (ソリューション ファイルを含むフォルダーのサブフォルダー) を参照します。NuGet specコマンドを実行して、ImageEnhancer.nuspecファイルを生成します。 ファイルの名前は、.csrojファイルの名前から取得されます。nuget specエディターで
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 パッケージ エクスプローラーなどのツールでこのファイルを開き、すべてのノードを展開すると、次の内容が表示されます。
ヒント
.nupkgファイルは、別の拡張子を持つZIPファイルにすぎません。
.nupkgを.zipに変更することで、パッケージの内容を調べることもできますが、パッケージを nuget.org にアップロードする前に拡張機能を復元することを忘れないでください。
他の開発者がパッケージを使用できるようにするには、「 パッケージを発行する」の手順に従います。