新聞速報

        

2026年1月20日 星期二

.NET10 方案 建置後,出現一堆語系資料夾

 在 .NET 10(或任何現代 .NET 版本)專案建置後,bin\Debug\netX.X\ 資料夾中出現一堆語系資料夾(例如 zh-Hantjafr 等),通常是因為你引用的 NuGet 套件(如 Microsoft.Extensions.、System. 或其他第三方套件)包含了多國語言的衛星組件(satellite assemblies),用於本地化(localization)支援。

如果你完全不需要多語系支援,可以透過以下方式禁止這些語系資料夾被複製到輸出目錄:  

在 專案.csproj 中設定 <SatelliteResourceLanguages>

在你的 .csproj 檔案中加入以下屬性(通常放在 <PropertyGroup> 區塊內):

<PropertyGroup>
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
</PropertyGroup>

這會告訴 MSBuild 只保留 en(英文)的資源,其他語系的衛星組件將不會被複製到輸出目錄。


正確做法:不要留空,而是明確指定只保留 en

雖然直覺上「留空」代表「不要任何語系」,但 MSBuild 的行為是:如果 <SatelliteResourceLanguages> 為空或未設定,會預設包含所有可用語系

因此,請務必設定為 en(即使你不使用英文資源,這只是讓系統「只保留中性語言 + 英文衛星組件」,而多數套件根本沒有 en 衛星檔,所以實際上會完全不產生語系資料夾 

-------------------------------------------------------------------------------------------------- 若是 我的方案 有 5 個專案,不想 5個專案 .csproj 都去修改 可以用 全域 MSBuild 設定,不用逐個修改專案的 .csproj。是透過 Directory.Build.propsDirectory.Build.targets,這是 MSBuild 提供的「全域專案層級設定檔」。

使用 Directory.Build.props

  1. 在你的解決方案根目錄(.sln 同層)建立一個檔案:

Directory.Build.props

  1. 加入以下內容:

<Project> <PropertyGroup> <!-- 全域指定只保留英文語系 Satellite DLL --> <SatelliteResourceLanguages>en</SatelliteResourceLanguages> </PropertyGroup> </Project>

  • 這個設定會自動套用到同目錄下所有專案(.csproj)

  • 所有 Build 都只會保留 en 資料夾,其他語系 DLL 不會出現

 

沒有留言:

張貼留言