CLI を使用して Windows 用のパッケージ化されていない .NET MAUI アプリを発行する方法
Windows 用の .NET マルチプラットフォーム アプリ UI (.NET MAUI) アプリを配信する場合は、アプリとその依存関係をフォルダに発行して、別のシステムにデプロイすることができます。
プロジェクトのビルド設定を構成する
次の <PropertyGroup>
ノードをプロジェクト ファイルに追加します。 このプロパティ グループは、ターゲット フレームワークが Windows で、構成が Release
に設定されている場合にのみ処理されます。 この構成セクションは、Release
モードのビルドまたは発行のたびに実行されます。
<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows' and '$(RuntimeIdentifierOverride)' != ''">
<RuntimeIdentifier>$(RuntimeIdentifierOverride)</RuntimeIdentifier>
</PropertyGroup>
この例の <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 バージョンを選択します。 |
-p:WindowsPackageType |
パッケージの種類 (パッケージ化されていないアプリの場合は None )。 |
-p:WindowsAppSDKSelfContained |
アプリのデプロイ モード (フレームワーク依存または自己完結型)。 自己完結型アプリの場合、この値は true です。 フレームワーク依存アプリと自己完結型アプリの詳細については、「Windows アプリ SDK 展開の概要」を参照してください。 |
警告
.NET MAUI ソリューションを公開しようとすると、dotnet publish
コマンドがソリューション内の各プロジェクトを個別に公開しようとするため、他のプロジェクト タイプをソリューションに追加した場合に問題が発生する可能性があります。 そのため、dotnet publish
コマンドのスコープは .NET MAUI アプリ プロジェクトに設定する必要があります。
次に例を示します。
dotnet publish -f net8.0-windows10.0.19041.0 -c Release -p:RuntimeIdentifierOverride=win10-x64 -p:WindowsPackageType=None
注
.NET 8 では、dotnet publish
コマンドの既定値は Release
構成になります。 そのため、コマンド ラインからビルド構成を省略できます。
発行の結果、アプリがビルドされ、実行可能ファイルが bin\Release\net8.0-windows10.0.19041.0\win10-x64\publish フォルダーにコピーされます。 このフォルダーには exe ファイルがあり、それがビルドされたアプリです。 このアプリを起動することも、フォルダー全体を別のコンピューターにコピーしてそこで起動することもできます。
パッケージ化されたアプリとの重要な違いは、フォルダーに .NET ランタイムが含まれない点です。 つまり、アプリを使用するには、最終的にアプリを実行するマシンに .NET ランタイムを最初にインストールする必要があります。 アプリにすべてのランタイム コンポーネントも確実に含まれるようにするには、発行時に -p:WindowsAppSDKSelfContained
引数を指定します。 次に例を示します。
dotnet publish -f net8.0-windows10.0.19041.0 -c Release -p:RuntimeIdentifierOverride=win10-x64 -p:WindowsPackageType=None -p:WindowsAppSDKSelfContained=true
dotnet publish
コマンドの詳細については、「dotnet publish」を参照してください。
.NET MAUI