3 つのプロジェクトのフォルダー構造は次のとおりです。
MyClassLibrary1
Class1.cs
Resources\
en-GB\
Strings.en-GB.txt
Strings.resx
Strings.designer.cs (auto-generated)
MyClassLibrary2 (references MyClassLibrary1)
Class1.cs
MyAppExe (references MyClassLibrary1 and MyClassLibrary2)
Program.cs
MyClassLibrary1 プロジェクトの下:
In Strings.resx, I've string resources defined, let's say:
<data name="SchoolString"><value>Preschool</value></data>
In Strings.en-GB.txt, I have:
SchoolString=Playgroup
MyClassLibrary1 のプロジェクト プロパティ -> ビルド前、次のようにしました。
CD $(ProjectDir)Resources
FOR /D %%1 IN (*) DO (
CD "%%1"
resgen.exe "Strings.%%1.txt"
if %errorlevel% 0 al.exe /t:lib /culture:"%%1" /embed:"Strings.%%1.resources" /out:MyClassLibrary1.resources.dll
if not exist "$(TargetDir)%%1" md "$(TargetDir)%%1"
move /Y "MyClassLibrary1.resources.dll" "$(TargetDir)%%1"
CD ..
)
MyAppExe プロジェクトの下の Program.cs:
static void Main() {
Strings.Culture = new CultureInfo("en-GB");
Trace.WriteLine(Strings.SchoolString);
}
問題は、ResourceManager が何らかの理由でデフォルトのリソース ファイル (MyAppExe に埋め込まれている) にフォールバックし続けることです。ここで私が間違っていることを理解するのを手伝ってください。
何を試しても得られる出力は、「Playgroup」ではなく「Preschool」です。衛星アセンブリがまったく解決されていないようです。