注
これは、この記事の最新バージョンではありません。 現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
Warnung
このバージョンの ASP.NET Core はサポート対象から除外されました。 詳細については、 .NET および .NET Core サポート ポリシーを参照してください。 現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
Von Bedeutung
この情報はリリース前の製品に関する事項であり、正式版がリリースされるまでに大幅に変更される可能性があります。 Microsoft は、ここで提供される情報に関して明示的または黙示的な保証を行いません。
現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
この記事では、Blazor WebAssembly アプリをホストおよび展開する方法について説明します。
Blazor WebAssembly ホスティング モデルを使用する場合は以下のようになります。
- Blazor アプリ、その依存関係、.NET ランタイムが並行してブラウザーにダウンロードされます。
- アプリがブラウザー UI スレッド上で直接実行されます。
この記事は、Blazor アプリが静的ホスティング Web サーバーまたはサービスに配置されるデプロイ シナリオに関するものです。.NET は Blazor アプリの提供には使用されません。 この戦略については、IIS、Azure サービス、Apache、Nginx、GitHub Pages に関するこのノードの スタンドアロン デプロイ セクションとその他の記事で説明されています。
次の展開戦略がサポートされています。
- Blazor アプリは、ASP.NET Core アプリによって提供されます。 この戦略については、「ASP.NET Core でのホストされた展開」セクションで説明します。
- Blazor アプリは、Blazor アプリの提供に .NET が使用されていない静的ホスティング Web サーバーまたはサービス上に配置されます。 この戦略については、「スタンドアロン展開」セクションで示されます。これには、Blazor WebAssembly アプリを IIS サブアプリとしてホストする方法についての情報が含まれています。
- ASP.NET Core アプリは、複数の Blazor WebAssembly アプリをホストします。 詳細については、「複数のホストされた ASP.NET Core Blazor WebAssembly アプリ」を参照してください。
サブドメインと IIS サブアプリケーションのホスト
サブドメインのホストでは、アプリの特別な構成は必要ありません。 サブドメインでアプリをホストするために、アプリのベースパス( タグの )を構成する必要はありません。
IIS サブアプリケーションのホストでは、アプリのベース パスを設定する "必要があります"。 IIS サブアプリケーションのホストに関する詳細なガイダンスとクロスリンクについては、「ASP.NET Core Blazor のホストと展開」をご覧ください。
一部のモバイル デバイス ブラウザーの最大ヒープ サイズを小さくする
クライアント (Blazor またはスタンドアロン .Client
アプリの Blazor Web App プロジェクト) で実行され、モバイル デバイス ブラウザー (特に iOS 上の Safari) を対象とする Blazor WebAssembly アプリをビルドする際には、MSBuild プロパティ EmccMaximumHeapSize
を使用してアプリの最大メモリを減らすことが必要になる場合があります。 既定値は 2,147,483,648 バイトで、サイズが大きすぎる可能性があり、ブラウザーが許可できない状態でアプリがさらにメモリを割り当てようとすると、アプリがクラッシュする可能性があります。 次の例では、Program
ファイルで値を 268,435,456 バイトに設定します。
モバイル デバイス ブラウザー (特に iOS 上の Safari) を対象とする Blazor WebAssembly アプリをビルドする場合は、MSBuild プロパティ EmccMaximumHeapSize
を使用してアプリの最大メモリを減らす必要があります。 既定値は 2,147,483,648 バイトで、サイズが大きすぎる可能性があり、ブラウザーが許可できない状態でアプリがさらにメモリを割り当てようとすると、アプリがクラッシュする可能性があります。 次の例では、Program
ファイルで値を 268,435,456 バイトに設定します。
<EmccMaximumHeapSize>268435456</EmccMaximumHeapSize>
Mono/WebAssembly MSBuild プロパティとターゲットについて詳しくは、WasmApp.Common.targets
(dotnet/runtime
GitHub リポジトリ) をご覧ください。
.NET アセンブリの Webcil パッケージ形式
Webcil は、制限の厳しいネットワーク環境で Blazor WebAssembly を使用できるように設計された、.NET アセンブリの Web 対応パッケージ形式です。 Webcil ファイルでは標準の WebAssembly ラッパーが使われます。アセンブリは、標準の .wasm
ファイル拡張子を使用する WebAssembly ファイルとして配置されます。
Webcil は、Blazor WebAssembly アプリを公開するときの既定のパッケージ形式です。 Webcil の使用を無効にするには、アプリのプロジェクト ファイルで次の MSBuild プロパティを設定します。
<PropertyGroup>
<WasmEnableWebcil>false</WasmEnableWebcil>
</PropertyGroup>
ブート リソースの読み込み方法をカスタマイズする
loadBootResource
API を使用してブート リソースの読み込み方法をカスタマイズします。 詳しくは、「ASP.NET Core Blazor の起動」をご覧ください。
圧縮
Blazor WebAssembly アプリが公開されると、公開中に出力が静的に圧縮されてアプリのサイズが縮小され、実行時の圧縮に必要なオーバーヘッドがなくなります。 次の圧縮アルゴリズムが使用されます。
Blazor は、適切な圧縮ファイルにサービスを提供するため、ホストに依存します。 Blazor WebAssembly スタンドアロン アプリをホストするとき、静的に圧縮されたファイルにサービスが提供されるよう、追加の作業が必要になることがあります。
Blazor は、適切な圧縮ファイルにサービスを提供するため、ホストに依存します。 ASP.NET Core でホストされたBlazor WebAssembly プロジェクトを使うときは、ホスト プロジェクトで、コンテンツ ネゴシエーションを実行したり、静的に圧縮されたファイルにサービスを提供したりできます。 Blazor WebAssembly スタンドアロン アプリをホストするとき、静的に圧縮されたファイルにサービスが提供されるよう、追加の作業が必要になることがあります。
- IIS の
web.config
の圧縮構成については、IIS の「Brotli と Gzip の圧縮」セクションを参照してください。 - 静的に圧縮されたファイル コンテント ネゴシエーションをサポートしない静的ホスティング ソリューションでホストする場合は、Brotli 圧縮ファイルをフェッチしてデコードするようにアプリを構成することを検討してください。
google/brotli
GitHub リポジトリから、JavaScript Brotli デコーダーを入手します。 縮小されたデコーダー ファイルは、decode.min.js
という名前で、リポジトリの js
フォルダーにあります。
注
decode.js
スクリプトの縮小版 (decode.min.js
) が失敗した場合は、代わりに縮小されていないバージョン (decode.js
) を使用してください。
そのデコーダーを使用するようにアプリを更新します。
wwwroot/index.html
ファイルで、autostart
の false
タグで Blazor を <script>
に設定します。
<script src="_framework/blazor.webassembly.js" autostart="false"></script>
Blazor の <script>
タグの後、</body>
終了タグの前に、次の JavaScript コード <script>
ブロックを追加してください。 次の関数は、ブラウザーのキャッシュを最新の状態で維持するために、fetch
で cache: 'no-cache'
を呼び出します。
Blazor Web App:
<script type="module">
import { BrotliDecode } from './decode.min.js';
Blazor.start({
webAssembly: {
loadBootResource: function (type, name, defaultUri, integrity) {
if (type !== 'dotnetjs' && location.hostname !== 'localhost' && type !== 'configuration' && type !== 'manifest') {
return (async function () {
const response = await fetch(defaultUri + '.br', { cache: 'no-cache' });
if (!response.ok) {
throw new Error(response.statusText);
}
const originalResponseBuffer = await response.arrayBuffer();
const originalResponseArray = new Int8Array(originalResponseBuffer);
const decompressedResponseArray = BrotliDecode(originalResponseArray);
const contentType = type ===
'dotnetwasm' ? 'application/wasm' : 'application/octet-stream';
return new Response(decompressedResponseArray,
{ headers: { 'content-type': contentType } });
})();
}
}
}
});
</script>
スタンドアロン Blazor WebAssembly:
<script type="module">
import { BrotliDecode } from './decode.min.js';
Blazor.start({
loadBootResource: function (type, name, defaultUri, integrity) {
if (type !== 'dotnetjs' && location.hostname !== 'localhost' && type !== 'configuration') {
return (async function () {
const response = await fetch(defaultUri + '.br', { cache: 'no-cache' });
if (!response.ok) {
throw new Error(response.statusText);
}
const originalResponseBuffer = await response.arrayBuffer();
const originalResponseArray = new Int8Array(originalResponseBuffer);
const decompressedResponseArray = BrotliDecode(originalResponseArray);
const contentType = type ===
'dotnetwasm' ? 'application/wasm' : 'application/octet-stream';
return new Response(decompressedResponseArray,
{ headers: { 'content-type': contentType } });
})();
}
}
});
</script>
ブート リソースの読み込みについて詳しくは、「ASP.NET Core Blazor の起動」をご覧ください。
圧縮を無効にするには、アプリケーションのプロジェクト ファイルに CompressionEnabled
MSBuild プロパティを追加し、値を false
に設定します。
<PropertyGroup>
<CompressionEnabled>false</CompressionEnabled>
</PropertyGroup>
CompressionEnabled
プロパティは、コマンド シェルで次の構文を使用して dotnet publish
コマンドに渡すことができます。
dotnet publish -p:CompressionEnabled=false
圧縮を無効にするには、アプリケーションのプロジェクト ファイルに BlazorEnableCompression
MSBuild プロパティを追加し、値を false
に設定します。
<PropertyGroup>
<BlazorEnableCompression>false</BlazorEnableCompression>
</PropertyGroup>
BlazorEnableCompression
プロパティは、コマンド シェルで次の構文を使用して dotnet publish
コマンドに渡すことができます。
dotnet publish -p:BlazorEnableCompression=false
正しいルーティングのために URL を書き換える
Blazor WebAssembly アプリ内のページ コンポーネントに対するルーティング要求は、Blazor Server アプリでのルーティング要求のように単純なものではありません。 次の 2 つのコンポーネントがある Blazor WebAssembly アプリについて考えてみます。
-
Main.razor
:アプリのルートで読み込まれ、About
コンポーネントへのリンク (href="About"
) が含まれています。 -
About.razor
:About
コンポーネント。
アプリの既定のドキュメントがブラウザーのアドレス バー (例: https://www.contoso.com/
) を使用して要求された場合:
- ブラウザーにより要求が送信されます。
- 既定のページ (通常は
index.html
) が返されます。 -
index.html
によりアプリがブートストラップされます。 -
Router コンポーネントが読み込まれて、Razor
Main
コンポーネントがレンダリングされます。
Main ページでは、About
コンポーネントへのリンクの選択がクライアント上で動作します。Blazor のルーターにより、インターネット上で www.contoso.com
に About
を求めるブラウザーの要求が停止され、レンダリングされた About
コンポーネント自体が提供されるためです。 " Blazor WebAssembly アプリ内にある" 内部エンドポイントへの要求は、すべて同じように動作します。要求によって、サーバーにホストされているインターネット上のリソースに対するブラウザーベースの要求がトリガーされることはありません。 要求は、ルーターによって内部的に処理されます。
ブラウザーのアドレス バーを使用して www.contoso.com/About
の要求が行われた場合、その要求は失敗します。 アプリのインターネット ホスト上にそのようなリソースは存在しないため、"404 見つかりません" という応答が返されます。
ブラウザーではクライアント側ページの要求がインターネットベースのホストに対して行われるため、Web サーバーとホスティング サービスでは、サーバー上に物理的に存在しないリソースに対する index.html
ページへのすべての要求を、書き換える必要があります。
index.html
が返されると、アプリの Blazor ルーターがそれを受け取り、正しいリソースで応答します。
IIS サーバーに展開する場合は、アプリで発行される web.config
ファイルで URL Rewrite Module を使用できます。 詳細については、「IIS を使用 したコア Blazor WebAssembly ASP.NET ホストおよび展開する」を参照してください。
ASP.NET Core でのホストされた展開
"ホストされたデプロイ" により、Blazor WebAssembly アプリが、Web サーバー上で実行されている ASP.NET Core アプリからブラウザーに提供されます。
クライアント Blazor WebAssembly アプリは、サーバー アプリの他の静的な Web アセットと共に、サーバー アプリの /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot
フォルダーに発行されます。 2 つのアプリが一緒に展開されます。 ASP.NET Core アプリをホストできる Web サーバーが必要です。 ホストされている展開の場合、Visual Studio には Blazor WebAssembly アプリ プロジェクト テンプレートが含まれており (blazorwasm
コマンドを使用する場合は dotnet new
テンプレート)、 Hosted
オプションが選択されています (-ho|--hosted
コマンドを使用する場合は dotnet new
)。
詳細については、次の記事を参照してください。
- ASP.NET Core アプリのホストと展開: ASP.NET Core のホストと展開
- Azure App Service への展開: Visual Studio を使用して Azure に ASP.NET Core アプリを発行する
- Blazor プロジェクト テンプレート: ASP.NET Core Blazor プロジェクトの構造
特定のプラットフォーム用のフレームワークに依存する実行可能ファイルのホストされた展開
ホストされた Blazor WebAssembly アプリを (自己完結型ではなく) 特定のプラットフォームのフレームワーク依存実行可能ファイルとして展開するには、使用中のツールに基づいて次のガイダンスを使用します。
Visual Studio
自己完結型の展開は、生成された発行プロファイル (.pubxml
) に対して構成されます。
Server プロジェクトの発行プロファイルに <SelfContained>
に設定された false
MSBuild プロパティが含まれていることを確認します。
.pubxml
プロジェクトの Server フォルダー内の Properties
発行プロファイル ファイルで、次の手順を実行します。
<SelfContained>false</SelfContained>
発行 UI の [設定] 領域にある [ターゲット ランタイム] 設定を使用してランタイム識別子 (RID) を設定します。これにより、発行プロファイルに <RuntimeIdentifier>
MSBuild プロパティが生成されます。
<RuntimeIdentifier>{RID}</RuntimeIdentifier>
上記の構成では、{RID}
プレースホルダーはランタイム識別子 (RID) です。
Serverリリース構成で プロジェクトを発行します。
注
/p:PublishProfile={PROFILE}
を dotnet publish
コマンドに渡すことで、.NET CLI を使用して発行プロファイル設定でアプリを発行できます。ここで {PROFILE}
プレースホルダーはプロファイルです。 詳細については、「ASP.NET Core アプリを配置するための Visual Studio 発行プロファイル (.pubxml)」の記事の「プロファイルを発行する」と「フォルダー発行の例」のセクションを参照してください。 発行プロファイルではなく dotnet publish
コマンドで RID を渡す場合は、/p:RuntimeIdentifier
オプションではなく、コマンドで MSBuild プロパティ (-r|--runtime
) を使用します。
.NET コマンドライン インターフェイス (CLI)
プロジェクトのプロジェクト ファイル内の <SelfContained>
で <PropertyGroup>
MSBuild プロパティを Server に設定して、false
の展開を構成します。
<SelfContained>false</SelfContained>
Von Bedeutung
SelfContained
プロパティは、Server プロジェクトのプロジェクト ファイルに配置する必要があります。
次の "いずれか" の方法を使用してランタイム識別子 (RID) を設定します。
オプション 1:
<PropertyGroup>
プロジェクトのプロジェクト ファイルにある Server に RID を設定します。<RuntimeIdentifier>{RID}</RuntimeIdentifier>
上記の構成では、
{RID}
プレースホルダーはランタイム識別子 (RID) です。Server プロジェクトからリリース構成でアプリを発行します。
dotnet publish -c Release
オプション 2:
dotnet publish
コマンドで RID を MSBuild プロパティ (/p:RuntimeIdentifier
) として渡します。-r|--runtime
オプションは "使いません"。dotnet publish -c Release /p:RuntimeIdentifier={RID}
上記のコマンドでは、
{RID}
プレースホルダーはランタイム識別子 (RID) です。
詳細については、次の記事を参照してください。
スタンドアロン展開
"スタンドアロン デプロイ" により、Blazor WebAssembly アプリが、クライアントによって直接要求される静的ファイルのセットとして提供されます。 任意の静的ファイル サーバーで Blazor アプリを提供できます。
スタンドアロン展開資産は、 /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot
フォルダーまたは bin/Release/{TARGET FRAMEWORK}/browser-wasm/publish
フォルダーに発行されます。このフォルダーには、 {TARGET FRAMEWORK}
プレースホルダーがターゲット フレームワークです。
Azure App Service
Blazor WebAssembly アプリは、IIS でアプリをホストする Windows 上の Azure App Services にデプロイできます。
スタンドアロンの Blazor WebAssembly アプリを Azure App Service for Linux にデプロイすることは、現在サポートされていません。 スタンドアロンの Blazor WebAssembly アプリは、このシナリオをサポートしている Azure Static Web Apps を使ってホストすることをお勧めします。
Docker によるスタンドアロン
スタンドアロン Blazor WebAssembly アプリは、静的ファイル サーバーによってホストされる静的ファイルのセットとして公開されます。
Docker でアプリをホストするには、次のようにします。
- Nginx や Apache など、Web サーバーがサポートされている Docker コンテナーを選択します。
- 静的ファイルを提供するために、Web サーバーで定義されている場所フォルダーに
publish
フォルダー資産をコピーします。 - 必要に応じて追加の構成を適用して、Blazor WebAssembly アプリを提供します。
構成のガイダンスについては、次のリソースを参照してください。
- Nginx または Apache の記事
- Docker ドキュメント
ホストの構成値
Blazor WebAssembly アプリでは、開発環境での実行時に以下のホスト構成値をコマンドライン引数として受け入れることができます。
コンテンツ ルート
--contentroot
引数では、アプリのコンテンツ ファイルを含むディレクトリへの絶対パスが設定されます (コンテンツ ルート)。 次の例では、/content-root-path
はアプリのコンテンツ ルート パスです。
コマンド プロンプトでアプリをローカルに実行するときに、引数を渡します。 アプリのディレクトリから、次のコマンドを実行します。
dotnet watch --contentroot=/content-root-path
アプリケーションの
launchSettings.json
ファイルの IIS Express プロファイルにエントリを追加します。 この設定は、Visual Studio デバッガーを使用し、コマンド プロンプトからdotnet watch
(またはdotnet run
) でアプリが実行されるときに使用されます。"commandLineArgs": "--contentroot=/content-root-path"
Visual Studio の [プロパティ]>[デバッグ]>[アプリケーションの引数] で、引数を指定します。 Visual Studio のプロパティ ページで引数を設定すると、その引数が
launchSettings.json
ファイルに追加されます。--contentroot=/content-root-path
パス ベース
--pathbase
引数により、ルート以外の相対 URL パスでローカルで実行されているアプリに対して、アプリのベース パスを設定することができます (ステージングと運用環境の場合、<base>
タグ href
は /
以外のパスに設定されます)。 次の例では、/relative-URL-path
はアプリのパス ベースです。 詳細については、「ASP.NET コアBlazor アプリ ベース パス」を参照してください。
Von Bedeutung
href
タグの <base>
に指定するパスとは異なり、/
引数値を渡すときはスラッシュ (--pathbase
) を末尾に含めないでください。
<base>
タグでアプリのベース パスが <base href="/CoolApp/">
と指定されている場合 (末尾にスラッシュあり)、コマンドライン引数値としては --pathbase=/CoolApp
を渡してください (末尾にスラッシュなし)。
コマンド プロンプトでアプリをローカルに実行するときに、引数を渡します。 アプリのディレクトリから、次のコマンドを実行します。
dotnet watch --pathbase=/relative-URL-path
アプリケーションの
launchSettings.json
ファイルの IIS Express プロファイルにエントリを追加します。 この設定は、Visual Studio デバッガーを使用し、コマンド プロンプトからdotnet watch
(またはdotnet run
) でアプリを実行するときに使用されます。"commandLineArgs": "--pathbase=/relative-URL-path"
Visual Studio の [プロパティ]>[デバッグ]>[アプリケーションの引数] で、引数を指定します。 Visual Studio のプロパティ ページで引数を設定すると、その引数が
launchSettings.json
ファイルに追加されます。--pathbase=/relative-URL-path
詳細については、「ASP.NET コアBlazor アプリ ベース パス」を参照してください。
URL
--urls
引数は、要求のリッスン対象であるIPアドレスやホストアドレスをポートとプロトコルと共に設定します。
コマンド プロンプトでアプリをローカルに実行するときに、引数を渡します。 アプリのディレクトリから、次のコマンドを実行します。
dotnet watch --urls=http://127.0.0.1:0
アプリケーションの
launchSettings.json
ファイルの IIS Express プロファイルにエントリを追加します。 この設定は、Visual Studio デバッガーを使用し、コマンド プロンプトからdotnet watch
(またはdotnet run
) でアプリを実行するときに使用されます。"commandLineArgs": "--urls=http://127.0.0.1:0"
Visual Studio の [プロパティ]>[デバッグ]>[アプリケーションの引数] で、引数を指定します。 Visual Studio のプロパティ ページで引数を設定すると、その引数が
launchSettings.json
ファイルに追加されます。--urls=http://127.0.0.1:0
トリマーを構成する
Blazor では、出力アセンブリから不要な中間言語 (IL) を削除するために、IL トリミング設定が各リリース ビルド上で実行されます。 詳しくは、「ASP.NET Core Blazor 用のトリマーを構成する」をご覧ください。
リンカーを構成する
Blazor では、出力アセンブリから不要な中間言語 (IL) を削除するために、IL リンク設定が各リリース ビルド上で実行されます。 詳しくは、「ASP.NET Core Blazor 用のリンカーを構成する」をご覧ください。
DLL ファイルのファイル名拡張子を変更する
このセクションは、.NET 5 から .NET 7 に適用されます。 .NET 8 以降では、.NET アセンブリは Webcil ファイル形式を使用して WebAssembly ファイル (.wasm
) としてデプロイされます。
ファイアウォール、ウイルス対策プログラム、またはネットワーク セキュリティ アプライアンスによってアプリのダイナミック リンク ライブラリ (DLL) ファイル (.dll
) の伝送がブロックされる場合は、このセクションのガイダンスのようにして、アプリで発行される DLL ファイルのファイル名拡張子を変更できます。
多くのセキュリティ システムはファイル拡張子をチェックするだけでなく、アプリのファイルの内容をスキャンするため、アプリの DLL ファイルのファイル名拡張子を変更しても、問題が解決しない可能性があります。
DLL ファイルのダウンロードと実行をブロックする環境でのより堅牢なアプローチについては、次の "いずれか" のアプローチを採用してください。
- .NET 8 以降を使用します。.NET アセンブリは、
.wasm
ファイル形式を使用して WebAssembly ファイル () としてパッケージ化されます。 詳細については、この記事の .NET 8 以降のバージョンの .NET アセンブリの Webcil パッケージ形式 に関するセクションを参照してください。 - .NET 6 以降では、 カスタム配置レイアウトを使用します。
この問題に対処するためのサード パーティのアプローチが存在します。 詳しくは、「優れた Blazor」のリソースをご覧ください。
アプリを発行した後、シェル スクリプトまたは DevOps ビルド パイプラインを使用して、アプリの発行された出力のディレクトリ内で別のファイル拡張子を使用するように .dll
ファイルの名前を変更します。
次の例では:
- PowerShell (PS) は、ファイル拡張子を更新するために使用されます。
-
.dll
ファイルの名前は、コマンド ラインからファイル拡張子.bin
を使用するように変更されます。 - 発行された Blazor ブート マニフェストに
.dll
ファイル拡張子が付いたファイルは、.bin
ファイル拡張子に更新されます。 - サービス ワーカー資産も使用されている場合、PowerShell コマンドは
.dll
ファイルに一覧表示されているservice-worker-assets.js
ファイルをファイル拡張子.bin
に更新します。
.bin
とは異なるファイル拡張子を使用するには、次のコマンド内の .bin
を目的のファイル拡張子に置き換えます。
次のコマンドでは、{PATH}
プレースホルダーは、_framework
フォルダー内の発行済みのpublish
フォルダーへのパスです。
フォルダー内のファイル拡張子の名前を変更します。
dir {PATH} | rename-item -NewName { $_.name -replace ".dll\b",".bin" }
blazor.boot.json
ファイル内のファイル拡張子の名前を変更します。
((Get-Content {PATH}\blazor.boot.json -Raw) -replace '.dll"','.bin"') | Set-Content {PATH}\blazor.boot.json
アプリが プログレッシブ Web アプリ (PWA) であるためにサービス ワーカー資産も使用されている場合:
((Get-Content {PATH}\service-worker-assets.js -Raw) -replace '.dll"','.bin"') | Set-Content {PATH}\service-worker-assets.js
上記のコマンドでは、{PATH}
プレースホルダーは発行された service-worker-assets.js
ファイルへのパスです。
圧縮された blazor.boot.json
ファイルに対処するには、次のいずれかの方法を採用します。
- 更新された
blazor.boot.json
ファイルを再圧縮し、新しいblazor.boot.json.gz
ファイルとblazor.boot.json.br
ファイルを生成します。 (推奨) - 圧縮された
blazor.boot.json.gz
とblazor.boot.json.br
のファイルを削除します。 (この方法では圧縮は無効です)。
プログレッシブ Web アプリ (PWA) の圧縮service-worker-assets.js
ファイルの場合は、次のいずれかの方法を採用します。
- 更新された
service-worker-assets.js
ファイルを再圧縮し、新しいservice-worker-assets.js.br
ファイルとservice-worker-assets.js.gz
ファイルを生成します。 (推奨) - 圧縮された
service-worker-assets.js.gz
とservice-worker-assets.js.br
のファイルを削除します。 (この方法では圧縮は無効です)。
.NET 6/7 の Windows で拡張機能の変更を自動化するために、次の方法では、プロジェクトのルートに配置された PowerShell スクリプトを使用します。 圧縮を無効にする次のスクリプトは、blazor.boot.json
ファイルを再圧縮し、アプリがservice-worker-assets.js
場合はファイルを再圧縮する場合に、さらなる変更の基礎となります。
publish
フォルダーへのパスは、実行時にスクリプトに渡されます。
ChangeDLLExtensions.ps1:
:
param([string]$filepath)
dir $filepath\wwwroot\_framework | rename-item -NewName { $_.name -replace ".dll\b",".bin" }
((Get-Content $filepath\wwwroot\_framework\blazor.boot.json -Raw) -replace '.dll"','.bin"') | Set-Content $filepath\wwwroot\_framework\blazor.boot.json
Remove-Item $filepath\wwwroot\_framework\blazor.boot.json.gz
Remove-Item $filepath\wwwroot\_framework\blazor.boot.json.br
アプリが プログレッシブ Web アプリ (PWA) であるためにサービス ワーカー資産も使用されている場合は、次のコマンドを追加します。
((Get-Content $filepath\wwwroot\service-worker-assets.js -Raw) -replace '.dll"','.bin"') | Set-Content $filepath\wwwroot\service-worker-assets.js
Remove-Item $filepath\wwwroot\service-worker-assets.js.gz
Remove-Item $filepath\wwwroot\service-worker-assets.js.br
プロジェクト ファイルでは、Release
構成のアプリの発行後にスクリプトが実行されます。
<Target Name="ChangeDLLFileExtensions" AfterTargets="AfterPublish" Condition="'$(Configuration)'=='Release'">
<Exec Command="powershell.exe -command "& {.\ChangeDLLExtensions.ps1 '$(SolutionDir)'}"" />
</Target>
アプリを発行した後、 blazor.boot.json
を手動で再圧縮し、使用した場合は service-worker-assets.js
して、圧縮を再度有効にします。
注
同じアセンブリの名前変更と遅延読み込みについては、「ASP.NET Core Blazor WebAssembly でのアセンブリの遅延読み込み」のガイダンスをご覧ください。
通常、アプリのサーバーでは、更新された拡張子を持つファイルを提供するために静的資産構成が必要です。 IIS でホストされているアプリの場合は、カスタム <mimeMap>
ファイルの静的コンテンツ セクション (<staticContent>
) に、新しいファイル拡張子の MIME マップ エントリ (web.config
) を追加します。 次の例では、ファイル拡張子が .dll
から .bin
に変更されていることを前提としています。
<staticContent>
...
<mimeMap fileExtension=".bin" mimeType="application/octet-stream" />
...
</staticContent>
圧縮が使用されている場合は、圧縮済みファイルの更新プログラムを含めます。
<mimeMap fileExtension=".bin.br" mimeType="application/octet-stream" />
<mimeMap fileExtension=".bin.gz" mimeType="application/octet-stream" />
.dll
ファイル拡張子のエントリを削除します。
- <mimeMap fileExtension=".dll" mimeType="application/octet-stream" />
.dll
が使用されている場合は、圧縮済み ファイルのエントリを削除します。
- <mimeMap fileExtension=".dll.br" mimeType="application/octet-stream" />
- <mimeMap fileExtension=".dll.gz" mimeType="application/octet-stream" />
カスタム web.config
ファイルの詳細については、「カスタム web.config
の使用」セクションを参照してください。
以前の展開の破損
通常は展開時に、次のようになります。
- 変更されたファイルのみが置き換えられます。通常は、展開が高速になります。
- 新しい展開の一部ではない既存のファイルは、新しい展開で使用するために残されています。
まれなケースとして、以前の展開の残留ファイルによって新しい展開が破損することがあります。 既存の展開 (または、展開前にローカルで発行されたアプリ) を完全に削除すると、展開が破損している問題が解決される場合があります。 多くの場合、既存の展開を一度削除するだけで問題を解決できます。これには、DevOps のビルドと配置のパイプラインが含まれます。
DevOps のビルドと配置のパイプラインが使用されているときに、以前の展開をクリアする必要があると判断した場合は、ビルド パイプラインにステップを一時的に追加して、破損の正確な原因をトラブルシューティングするまで、新しく展開するごとに前の展開を削除することができます。
ASP.NET Core