次の方法で共有


CLI を使用して Windows 用のパッケージ化された .NET MAUI アプリを発行する

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

署名証明書の作成

アプリの発行に使用できる署名証明書を使用する必要があります。 この証明書は、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 Thumbprint, Subject, FriendlyName
    

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

    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 の問題 #3337」をご覧ください。

公開

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

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

警告

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

次に例を示します。

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

.NET 8 では、dotnet publish コマンドの既定値は Release 構成になります。 そのため、コマンド ラインからビルド構成を省略できます。

公開すると、アプリがビルドおよびパッケージ化され、署名されたパッケージが bin\Release\net8.0-windows10.0.19041.0\win10-x64\AppPackages\<appname>\ フォルダーにコピーされます。 <appname> は、プロジェクトとバージョンの両方にちなんで名付けられたフォルダーです。 このフォルダーには msix ファイルがあり、それがアプリ パッケージです。

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

アプリをインストールする

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

Installing an untrusted app.

前の画像では、発行元が「不明」となっていることにご注意ください。

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

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

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

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

    Properties pane of an MSIX file with the digital signatures tab selected.

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

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

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

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

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

  8. [参照][信頼されたユーザー] ストアの順に選択します。 [OK] を選択してダイアログを閉じます。

    Certificate import wizard window is shown while selecting the Trusted People store.

  9. [次へ] を選択し、[完了] を選択します。 「インポートが成功しました」と知らせるダイアログが表示されます。

    Certificate import wizard window with a successful import message.

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

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

Installing a trusted app.

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

現在の制限

次のリストは、発行とパッケージ化に関する現在の制限事項を示しています。

  • 発行フォルダーから実行可能ファイルを直接使用して、発行したアプリを実行しようとすると、そのアプリは機能しません。
  • アプリを実行するには、まずパッケージ化された MSIX ファイルを使用して、アプリをインストールします。