[C#] ローカライズ用の言語フォルダを出力しないように設定する

2023-04-12 (水)

C# のプロジェクトを自己完結型で発行した場合や、NuGet のライブラリを使用した際に、サテライトアセンブリの言語フォルダが出力されます。
必要な言語フォルダのみ出力するように設定する方法です。

環境

  • .NET 7.0.202
  • C# 11.0
  • Visual Studio 2022 Version 17.5.3
  • Windows 10 Pro 64bit 22H2 19045.2728

説明

自己完結型で発行すると、以下のような言語フォルダが出力されます。

.csprojDirectory.Build.props に、以下のように <SatelliteResourceLanguages> を設定すると、出力する言語フォルダを指定できます。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <SatelliteResourceLanguages>en-US</SatelliteResourceLanguages>
  </PropertyGroup>

</Project>

設定例

英語のみ、言語フォルダを出力しない

<SatelliteResourceLanguages>en-US</SatelliteResourceLanguages>

en で記述されている場合もあるようです。

ちなみに、存在しない言語を指定してしまえば、言語フォルダは出力されなくなります。

<SatelliteResourceLanguages>null</SatelliteResourceLanguages>

日本語の言語フォルダを出力する

<SatelliteResourceLanguages>ja</SatelliteResourceLanguages>

ja フォルダのみ出力が増えます。
英語は本体の dll に含まれているはずなので、ja フォルダ以外の dll は同じものが出力されます。

複数の言語フォルダを出力する

日本語と韓国語の言語フォルダを出力する設定例です。
; 区切りで複数言語を指定します。

<SatelliteResourceLanguages>ja;ko</SatelliteResourceLanguages>

注意点

<SatelliteResourceLanguages> に空文字を設定すると、全ての言語フォルダが出力されてしまいます。

<SatelliteResourceLanguages></SatelliteResourceLanguages>

感謝

2023-04-12 (水)