Share via


Blazor:已更新靜態 Web 資產的驗證邏輯

ASP.NET Core 3.1 和 Blazor WebAssembly 3.2 中的靜態 Web 資產發生驗證衝突的問題。 內容如下:

  • 主機資產和 Razor 類別庫 (RCL) 以及 Blazor WebAssembly 應用程式中的資產無法有效進行衝突偵測。
  • 受影響的多為 Blazor WebAssembly 應用程式,因為根據預設,RCL 中的靜態 web 資產會加上 _content/$(PackageId) 前置詞。

導入的版本

5.0

舊的行為

在開發期間,相同主機路徑上的主機專案資產可能以無訊息方式覆寫 RCL 的靜態 web 資產。 假設有 RCL 已定義靜態 web 資產在 /folder/file.txt 上受到服務, 此時若主機在 wwwroot/folder/file.txt 放置檔案,則伺服器上的檔案會以無訊息方式覆寫 RCL 或 Blazor WebAssembly 應用程式上的檔案。

新的行為

ASP.NET Core 會在發生此問題時,正確地進行偵測。 系統會將衝突告知您 (使用者),供您採取適當的動作。

變更原因

靜態 web 資產不應受專案主機 wwwroot 上的檔案覆寫。 允許覆寫這些檔案,容易導致難以診斷的錯誤, 結果在已發佈的應用程式中產生未定義的行為變更。

根據預設,RCL 檔案不應與主機上的檔案發生衝突。 RCL 檔案具備前置詞 _content/${PackageId}。 Blazor WebAssembly 檔案位於主機 URL 空間根目錄,因此容易發生衝突。 例如,Blazor WebAssembly 應用程式包含 favicon.ico 檔案,主機有可能同時將之納入 wwwroot 資料夾。

如果衝突來源為 RCL 檔案,則往往表示程式碼將資產從程式庫複製到專案的 wwwroot 資料夾。 撰寫程式碼來複製檔案,與靜態 web 資產的主要目標相悖。 其原初的目標是在內容更新時取得瀏覽器更新,而無須觸發新的編譯程序。

您可選擇保留此行為,並在主機上保存檔案。 為此,請用自訂 MSBuild 目標從靜態 web 資產清單中移除檔案。

若要使用 RCL 檔案或 Blazor WebAssembly 應用程式的檔案而非主機專案檔,請自主機專案中移除檔案。

受影響的 API