パッケージ ID の追加の動機と、Visual Studio での ID パッケージのビルドと手動でのビルドの違いについては、「 概要」を参照してください。
このトピックでは、Visual Studio を使用して ID パッケージをビルドして登録する方法について説明します。 ID パッケージを手動でビルドする方法については、「 外部の場所を手動でパッケージ化してパッケージ ID を付与する」を参照してください。
Visual Studio を使用して ID パッケージをビルドおよび登録する手順 (このトピックでは詳しく説明します) を次に示します。
- Visual Studio コンポーネントをインストールする
- パッケージ プロジェクトをソリューションに追加する
- 署名用にパッケージ 化プロジェクトを構成する
- リリース モードでパッケージ プロジェクトをビルドしてテストする
- インストーラーに ID パッケージを登録する
- 省略可能な手順
Visual Studio コンポーネントをインストールする
Visual Studio で ID パッケージを作成するには、 Windows アプリケーション パッケージ プロジェクト と 外部の場所を含むパッケージ 拡張機能が必要です。
必要な Visual Studio のバージョンとワークロードの説明に従って、Windows アプリケーション パッケージ プロジェクト コンポーネントをインストールします。
Visual Studio で、[ 拡張機能>管理拡張機能 ] メニュー項目を使用して、 外部の場所の拡張機能を含むパッケージを インストールします。
パッケージ プロジェクトをソリューションに追加する
アプリケーション プロジェクトへのプロジェクト参照を使用してパッケージ プロジェクトをソリューションに追加するには、「 ソリューションで Windows アプリケーション パッケージ プロジェクトを設定する」を参照してください。
ソリューション エクスプローラーで [パッケージ プロジェクト] を右クリックし、[外部の場所を含むパッケージ] 拡張機能によって提供される [ 外部の場所 ] タブに移動し、[ 外部の場所 を含むパッケージ] オプションを有効にして、変更を保存することで、 外部の場所でパッケージ 化を有効にします。
パッケージ 化プロジェクトのをダブルクリックしてビジュアル マニフェスト エディターを開き、[パッケージ] タブに移動し、[パッケージ名] フィールドと [発行元のPackage.appxmanifest
] フィールドを目的の値に設定して、ID パッケージの [パッケージ名] フィールドと [発行元] 表示名フィールドを設定します。 ローカライズとイメージが必要になる可能性があるシナリオについては、「 ローカリゼーションとビジュアルアセット 」を参照してください。
アプリケーション プロジェクトにカスタム アプリケーション マニフェストがある場合、 Package.appxmanifest
の値と値の同期の詳細については、「 デスクトップ アプリケーション マニフェストへの ID メタデータの追加」を参照してください。
外部の場所を持つパッケージ拡張機能では、applicationId にアプリを使用します。
カスタム アプリケーション マニフェストがない場合、Visual Studio はビルド プロセス中に適切な成果物を生成します。 .NET プロジェクトは、既定でマニフェストを埋め込みます。これは、生成されたマニフェスト成果物と競合します。 これを解決するには、プロジェクトを右クリックし、[ プロパティ] を開き、[ マニフェスト ] セクションの [アプリケーション] タブで、[ マニフェスト を 埋め込む] を既定の設定で [ マニフェストなしでアプリケーションを作成する] に変更します。
署名用にパッケージ 化プロジェクトを構成する
パッケージ化ウィザードを使用してアプリパッケージを作成する方法に示されている>およびアプリパッケージの作成ウィザードを使用して、署名用の証明書を生成します。
最初の画面で、[ サイドローディング ] が選択されていることを確認し、[ 自動更新を有効にする] がオフになっていることを確認します。 2 番目の画面で、必要に応じて自己署名証明書を作成し、[ 信頼 ] ボタンをクリックして、ローカル コンピューターの信頼されたユーザー証明書ストアで信頼します。 最後の画面で、[ アプリ バンドルの生成 ] を [なし] に設定し、[ 作成 ] をクリックして署名の構成を完了します。
リリース モードでパッケージ プロジェクトをビルドしてテストする
デバッグ モードの依存関係による複雑さを回避するには、ビルド構成をリリース モードに設定し、パッケージ 化プロジェクトをビルドします。
パッケージ プロジェクトをビルドすると、ビルド出力に PackageWithExternalLocation フォルダーが生成されます。
このフォルダーには、ID パッケージを表す MSIX
ファイルと、生成された ID パッケージをテスト用にローカルに登録および登録解除するための Install
および Remove
PowerShell スクリプトが含まれています。
Install
PowerShell スクリプトは、生成された ID パッケージをローカルに登録し、テスト目的でExternalLocation
兄弟フォルダーに接続します。 ID を使用してアプリケーションをテストするには、 ExternalLocation
フォルダーからアプリケーション実行可能ファイルを実行します。
運用環境のアプリケーションに ID を関連付けるには、生成された ID パッケージをアプリケーションに送付し、インストーラーに登録する必要があります。
インストーラーに ID パッケージを登録する
ID をアプリケーションに関連付ける最後の手順は、インストーラーに ID パッケージを登録し、それをアプリケーションのインストール ディレクトリに関連付けます。
PowerShell
適切なパラメーターを使用して powershell.exe を実行することは、パッケージを登録する最も簡単な方法です。 このガイダンスは、ユーザーごとのインストールとマシン全体のインストールで異なります。
ユーザーごと (PowerShell)
ユーザーごとのインストール中に ID パッケージを登録するには:
powershell.exe -NoLogo -NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -Command "Add-AppxPackage -Path <PackagePath> -ExternalLocation <ExternalLocation>"
<PackagePath>
を前の手順で生成された署名付き ID パッケージの絶対パス(ファイル名付き)に設定します。<ExternalLocation>
アプリケーションのインストール ディレクトリの絶対パスに設定します (実行可能ファイル名は指定しません)。
ユーザーごとのアンインストール中に ID パッケージの登録を解除するには:
powershell.exe -NoLogo -NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -Command "Get-AppxPackage <PackageName> | Remove-AppxPackage"
<PackageName>
を、ID パッケージ マニフェストで定義したパッケージ名 (Identity 要素の Name 属性) に設定します。
マシンごと (PowerShell)
マシン全体のインストール中に ID パッケージを登録するには:
powershell.exe -NoLogo -NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -Command "Add-AppxPackage -Stage <PackagePath> -ExternalLocation <ExternalLocation>; Add-AppxProvisionedPackage -Online -PackagePath <PackagePath>"
<PackagePath>
を、前の手順で生成した署名付き ID パッケージの絶対パス (ファイル名) に設定します。<ExternalLocation>
アプリケーションのインストール ディレクトリの絶対パスに設定します (実行可能ファイル名は指定しません)。
マシン全体のアンインストール中に ID パッケージの登録を解除するには:
powershell.exe -NoLogo -NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -Command "$packages = Get-AppxPackage <PackageName>; foreach ($package in $packages) { Remove-AppxProvisionedPackage -PackageName $package.PackageFullName -Online }; foreach ($package in $packages) { Remove-AppxPackage -Package $package.PackageFullName -AllUsers }
<PackageName>
を、ID パッケージ マニフェストで定義したパッケージ名 (Identity 要素の Name 属性) に設定します。
PackageManager API
OS API を呼び出して ID パッケージを登録および登録解除する場合、PackageManager API は PowerShell と同等の機能を提供します。 このガイダンスは、ユーザーごとのインストールとマシン全体のインストールで異なります。
API を示すスニペットを次に示します。 C# と C++ の運用対応コードについては、 サンプル アプリに関するページを参照してください。
ユーザーごと (PackageManager)
次のコードリストは、 AddPackageByUriAsync メソッドを使用して ID パッケージを登録し、 RemovePackageAsync メソッドを使用して ID パッケージの登録を解除する方法を示しています。
using Windows.Management.Deployment;
...
// Register the identity package during install
var externalUri = new Uri(externalLocation);
var packageUri = new Uri(packagePath);
var packageManager = new PackageManager();
var options = new AddPackageOptions();
options.ExternalLocationUri = externalUri;
await packageManager.AddPackageByUriAsync(packageUri, options);
...
// Unregister the identity package during uninstall
var packageManager = new PackageManager();
var packages = packageManager.FindPackagesForUserWithPackageTypes("", "<IdentityPackageFamilyName>", PackageType.Main);
foreach (var package in packages)
{
await packageManager.RemovePackageAsync(package.Id.FamilyName);
}
このコードに関する以下の重要な詳細に注意してください。
externalLocation
アプリケーションのインストール ディレクトリの絶対パスに設定します (実行可能ファイル名は指定しません)。packagePath
を、前の手順で生成した署名付き ID パッケージの絶対パス (ファイル名) に設定します<IdentityPackageFamilyName>
は、Visual Studio のビジュアル マニフェスト エディターの [パッケージ化>パッケージ ファミリ名] にあります。
マシンごと (PackageManager)
次のコードリストは、 StagePackageByUriAsync メソッドと ProvisionPackageForAllUsersAsync メソッドを使用して ID パッケージを登録し、 RemovePackageAsync メソッドを使用して ID パッケージの登録を解除する方法を示しています。
// Register the identity package during install
var externalUri = new Uri(externalLocation);
var packageUri = new Uri(packagePath);
var packageManager = new PackageManager();
var options = new StagePackageOptions();
options.ExternalLocationUri = externalUri;
await packageManager.StagePackageByUriAsync(packageUri, options);
await packageManager.ProvisionPackageForAllUsersAsync(packageFamilyName);
...
// Unregister the identity package during uninstall
var packageManager = new PackageManager();
var packages = packageManager.FindPackagesForUserWithPackageTypes("", "<IdentityPackageFamilyName>", PackageType.Main);
foreach (var package in packages)
{
await packageManager.DeprovisionPackageForAllUsersAsync(package.Id.FamilyName);
await packageManager.RemovePackageAsync(package.Id.FamilyName, RemovalOptions.RemoveForAllUsers);
}
このコードに関する以下の重要な詳細に注意してください。
externalLocation
アプリケーションのインストール ディレクトリの絶対パスに設定します (実行可能ファイル名は指定しません)。packagePath
を、前の手順で生成した署名付き ID パッケージの絶対パス (ファイル名) に設定します<IdentityPackageFamilyName>
は、Visual Studio のビジュアル マニフェスト エディターの [パッケージ化>パッケージ ファミリ名] にあります。
サンプル アプリ
ID パッケージを登録する方法を示す完全に機能する C# および C++ アプリについては、 PackageWithExternalLocation のサンプルを参照してください。
省略可能な手順
ローカライズとビジュアルアセット
パッケージ ID を理解する一部の機能では、ID パッケージ マニフェストの文字列とイメージが Windows OS に表示される可能性があります。 例えば次が挙げられます。
- カメラ、マイク、または場所の API を使用するアプリケーションでは、Windows プライバシー設定で専用の制御トグルと、ユーザーがこれらの機密性の高いリソースへのアクセスを許可または拒否するために使用できる仲介型の同意プロンプトが表示されます。
- 共有ターゲットを登録するアプリケーションが共有ダイアログに表示されます。
ID パッケージ マニフェスト内の文字列をローカライズするには、「マニフェストを ローカライズする」を参照してください。
ID パッケージ マニフェストの VisualElements
属性でイメージへのパスを指定する場合、指定されたパスは、.png、.jpg、または.jpegイメージに解決されるアプリケーションのインストール ディレクトリ内の相対パスである必要があります。 属性名は、イメージの予想される寸法 (150 x 150 および 40 x 40) を示します。
Windows developer