Windows 用 .NET MAUI アプリを発行する

Windows 用の .NET マルチプラットフォーム アプリ UI (.NET MAUI) アプリを配布するときに、アプリとその依存関係を別のシステムに展開するためのフォルダーに発行できます。 アプリを MSIX パッケージにパッケージ化することもできます。MSIX パッケージには、アプリをインストールするユーザーにとって多くの利点があります。 MSIX の利点の詳細については、「MSIX とは」を参照してください。

.NET MAUI では現在、MSIX パッケージの発行のみが許可されています。 配布用の Windows 実行可能ファイルをまだ発行できません。

署名証明書を作成する

アプリの発行に使用するには、署名証明書を使用する必要があります。 この証明書は、MSIX パッケージに署名するために使用されます。 次の手順では、PowerShell を使用して自己署名証明書を作成してインストールする方法を示します。

注意

自己署名証明書を作成して使用する場合、証明書をインストールして信頼するユーザーのみがアプリを実行できます。 これはテスト用に簡単に実装できますが、追加のユーザーがアプリをインストールできなくなる可能性があります。 アプリを発行する準備ができたら、信頼できるソースによって発行された証明書を使用することをお勧めします。 この一元化された信頼システムは、アプリ エコシステムに悪意のあるアクターからユーザーを保護するための検証レベルがあることを確認するのに役立ちます。

  1. PowerShell ターミナルを開き、プロジェクトを含むディレクトリに移動します。

  2. コマンドを New-SelfSignedCertificate 使用して自己署名証明書を生成します。

    この値は <PublisherName> 、ユーザーがアプリをインストールするときに表示され、独自の値を指定し、文字を < > 省略します。 パラメーターは FriendlyName 、任意の文字列のテキストに設定できます。

    New-SelfSignedCertificate -Type Custom `
                              -Subject "CN=<PublisherName>" `
                              -KeyUsage DigitalSignature `
                              -FriendlyName "My temp dev cert" `
                              -CertStoreLocation "Cert:\CurrentUser\My" `
                              -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}")
    
  3. 次の PowerShell コマンドを使用して、作成された証明書の証明書ストアに対してクエリを実行します。

    Get-ChildItem "Cert:\CurrentUser\My" | Format-Table Subject, FriendlyName, Thumbprint
    

    次の出力のような結果が表示されます。

    Thumbprint                               Subject                                  FriendlyName
    ----------                               -------                                  ------------
    DE8B962E7BF797CB48CCF66C8BCACE65C6585E2F CN=1f23fa36-2a2f-475e-a69e-3a14fe56ed4
    A6CA34FD0BA6B439787391F51C87B1AD0C9E7FAE CN=someone@microsoft.com
    94D93DBC97D4F7E4364A215F15C6ACFEFC71E569 CN=localhost                             ASP.NET Core HTTPS development certificate
    F14211566DACE867DA0BF9C2F9C47C01E3CF1D9B CN=john
    568027317BE8EE5E6AACDE5079D2DE76EC46EB88 CN=e1f823e2-4674-03d2-aaad-21ab23ad84ae
    DC602EE83C95FEDF280835980E22306067EFCA96 CN=John Smith, OU=MSE, OU=Users, DC=com
    07AD38F3B646F5AAC16F2F2570CAE40F4842BBE0 CN=Contoso                               My temp dev cert
    
  4. 証明書の 拇印 は後で使用され、クリップボードにコピーされます。 これは、エントリが証明書の SubjectFriendlyName と一致する拇印値です。

詳細については、「 パッケージ署名用の証明書を作成する」を参照してください。

プロジェクトのビルド設定を構成する

プロジェクト ファイルは、Windows 固有のビルド設定を配置するのに適した場所です。 パスワードなど、プロジェクト ファイルに設定を入れたくない場合があります。 このセクションで説明する設定は、形式を使用してコマンド ラインで /p:name=value 渡すことができます。 設定がプロジェクト ファイルで既に定義されている場合は、コマンド ラインで渡された設定によってプロジェクト設定がオーバーライドされます。

プロジェクト ファイルに次 <PropertyGroup> のノードを追加します。 このプロパティ グループは、ターゲット フレームワークが Windows であり、構成が に Release設定されている場合にのみ処理されます。 この構成セクションは、ビルドまたは発行がモードのときに常に Release 実行されます。

<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows' and '$(Configuration)' == 'Release'">
    <AppxPackageSigningEnabled>true</AppxPackageSigningEnabled>
    <PackageCertificateThumbprint>A10612AF095FD8F8255F4C6691D88F79EF2B135E</PackageCertificateThumbprint>
</PropertyGroup>
<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows' and '$(RuntimeIdentifierOverride)' != ''">
    <RuntimeIdentifier>$(RuntimeIdentifierOverride)</RuntimeIdentifier>
</PropertyGroup>

プロパティ値を <PackageCertificateThumbprint> 、前に生成した証明書の拇印に置き換えます。 または、プロジェクト ファイルからこの設定を削除し、コマンド ラインで指定することもできます。 (例: /p:PackageCertificateThumbprint=A10612AF095FD8F8255F4C6691D88F79EF2B135E)。

この例の 2 つ目 <PropertyGroup> は、Windows SDK のバグを回避するために必要です。 バグの詳細については、「 WindowsAppSDK の問題 #2940」を参照してください。

公開

アプリを発行するには、 VS 2022 ターミナルの開発者コマンド プロンプト を開き、.NET MAUI アプリ プロジェクトのフォルダーに移動します。 次のパラメーターを dotnet publish 指定して、コマンドを実行します。

パラメーター
-f net6.0-windows{version} ターゲット フレームワーク。これは、次のような net6.0-windows10.0.19041.0Windows TFM です。 この値が .csproj ファイル内のノード内の<TargetFrameworks>値と同じであることを確認します。
-c Release ビルド構成 Releaseを設定します。
/p:RuntimeIdentifierOverride=win10-x64
- または -
/p:RuntimeIdentifierOverride=win10-x86
WindowsAppSDK の問題 #2940 で詳しく説明されているバグを回避します。 ターゲット プラットフォームに -x64 基づいてパラメーターのバージョンを -x86 選択します。

警告

.NET MAUI ソリューションを発行しようとすると、 dotnet publish コマンドによってソリューション内の各プロジェクトが個別に発行され、ソリューションに他のプロジェクトの種類を追加したときに問題が発生する可能性があります。 そのため、コマンドの dotnet publish スコープは .NET MAUI アプリ プロジェクトに設定する必要があります。

次に例を示します。

dotnet publish -f net6.0-windows10.0.19041.0 -c Release /p:RuntimeIdentifierOverride=win10-x64

アプリをビルドしてパッケージ化し、署名済みパッケージを bin\Release\net6.0-windows10.0.19041.0\win10-x64\AppPackages\<appname>\ フォルダーにコピーします。 <appname> は、プロジェクトとバージョンの両方にちなんだフォルダーです。 このフォルダーには msix ファイルがあり、それがアプリ パッケージです。

コマンドの dotnet publish 詳細については、「 dotnet publish」を参照してください。

アプリのインストール

アプリをインストールするには、既に信頼している証明書で署名する必要があります。 そうでない場合、Windows ではアプリをインストールできません。 次のようなダイアログが表示され、[インストール] ボタンが無効になります。

信頼されていないアプリのインストール。

前の画像では、パブリッシャーが "不明" であることに注意してください。

アプリ パッケージの証明書を信頼するには、次の手順に従います。

  1. .msix ファイルを右クリックし、[プロパティ] を選択します

  2. [ デジタル署名 ] タブを選択します。

  3. 証明書を選択し、[ 詳細] を押します。

    [デジタル署名] タブが選択されている MSIX ファイルの [プロパティ] ウィンドウ。

  4. [ 証明書の表示] を選択します

  5. [ 証明書のインストール]を選択します...

  6. [ ローカル コンピューター ] を選択し、[ 次へ] を選択します。

    [ユーザー アカウント制御] で[ このアプリがデバイスに変更を加えることを許可しますか?] というメッセージが表示されたら、[ はい] を選択します。

  7. [証明書のインポート ウィザード] ウィンドウで、[すべての証明書を次のストアに配置する] を選択します。

  8. [参照... ] を選択し、[信頼されたPeople ストア] を選択します。 [OK] を選択してダイアログを閉じます。

    [信頼されたPeople ストア] を選択すると、証明書のインポート ウィザード ウィンドウが表示されます。

  9. [次へ] を選択し、[完了] を選択します。 次のダイアログが表示されます。 インポートは成功しました

    正常なインポート メッセージが表示された証明書のインポート ウィザード ウィンドウ。

  10. このプロセスの一環として開かれた任意のウィンドウで [OK] を 選択して、すべてを閉じます。

次に、パッケージ ファイルをもう一度開き、アプリをインストールします。 次のようなダイアログが表示され、パブリッシャーが正しく表示されます。

信頼できるアプリのインストール。

アプリを インストール する場合は、[インストール] ボタンを選択します。

現在の制限

次の一覧では、発行とパッケージ化に関する現在の制限事項について説明します。

  1. 発行フォルダーから実行可能ファイルで直接実行しようとすると、発行されたアプリは機能しません。
  2. アプリを実行する方法は、最初にパッケージ化された MSIX ファイルを使用してアプリをインストールすることです。

関連項目