ASP.NET Core 3.1 および Blazor WebAssembly 3.2 の静的 Web 資産の競合検証に問題がありました。 問題:
- ホストのアセットと、Razor クラスライブラリ (RCL) および Blazor WebAssembly アプリからのアセット間の適切な競合検出が阻止されました。
- ほとんどの場合、Blazor WebAssembly アプリに影響を与えます。既定では、RCL の静的 Web アセットは
_content/$(PackageId)プレフィックスの下で提供されるためです。
導入されたバージョン
5.0
以前の動作
開発中、RCL の静的 Web アセットは、同じホスト パス上のホスト プロジェクト アセットで自動的にオーバーライドされる可能性があります。 /folder/file.txtで提供される静的 Web アセットを定義した RCL について考えてみます。 ホストが wwwroot/folder/file.txtにファイルを配置した場合、サーバー上のファイルは、RCL または Blazor WebAssembly アプリ上のファイルを自動的にオーバーロードします。
新しい動作
ASP.NET Core は、この問題がいつ発生するかを正しく検出します。 ユーザーに競合を通知して、適切なアクションを実行できるようにします。
変更の理由
静的な Web アセットは、プロジェクトの wwwroot ホスト上のファイルによってオーバーライド可能なものではありません。 これらのファイルのオーバーライドを許可すると、診断が困難なエラーが発生する可能性があります。 その結果、発行されたアプリでの未定義の動作の変更が発生する可能性があります。
推奨されるアクション
既定では、RCL ファイルがホスト上のファイルと競合する理由はありません。 RCL ファイルの先頭には _content/${PackageId}が付いています。 Blazor WebAssembly ファイルはホスト URL 空間のルートに配置されるため、競合が簡単になります。 たとえば、Blazor WebAssembly アプリには、ホストが wwwroot フォルダーに含める可能性があるfavicon.ico ファイルが含まれています。
競合のソースが RCL ファイルの場合、多くの場合、コードはライブラリからプロジェクトの wwwroot フォルダーにアセットをコピーすることを意味します。 ファイルをコピーするコードを記述すると、静的 Web 資産の主な目標は達成できません。 この目標は、コンテンツが更新されたときに新しいコンパイルをトリガーすることなく、ブラウザーで更新プログラムを取得するための基本的な目標です。
この動作を保持し、ホスト上のファイルを維持することを選択できます。 これを行うには、カスタム MSBuild ターゲットを持つ静的 Web アセットの一覧からファイルを削除します。
ホスト プロジェクトのファイルではなく、RCL のファイルまたは Blazor WebAssembly アプリのファイルを使用するには、ホスト プロジェクトからファイルを削除します。
影響を受ける API
無し
.NET