0

WinForms アプリケーションでのローカリゼーションにサテライト アセンブリを使用しようとしています。ディレクトリ構造は次のとおりです。

  • 置き場
    • プログラム.exe
      • Program.resources.dll

Program.exe では、このコードは次のMainメソッドで実行されます。

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

Thread.CurrentThread.CurrentUICulture = new CultureInfo("de");

Application.Run(new Form());

FUSLOGVW.exe の出力を確認しました。

*** アセンブリ バインダー ログ エントリ (2012 年 5 月 30 日 @ 5:19:37 PM) ***

操作に失敗しました。
バインド結果: hr = 0x80070002。システムは、指定されたファイルを見つけることができません。

アセンブリ マネージャーの読み込み元: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
実行可能ファイル D:\tmp\bin\Program.exe の下で実行
--- 詳細なエラー ログが続きます。

=== プレバインド状態情報 ===
ログ: ユーザー = paulius_l
ログ: DisplayName = Program.resources、バージョン = 1.0.0.0、カルチャ = de、PublicKeyToken = ...
 (完全指定)
ログ: Appbase = file:///D:/tmp/bin/
ログ: 初期 PrivatePath = NULL
ログ: 動的ベース = NULL
ログ: キャッシュ ベース = NULL
ログ: AppName = Program.exe
アセンブリの呼び出し: Program、Version=1.0.0.0、Culture=neutral、PublicKeyToken=....
===
LOG: ネイティブ イメージ Program.resources、Version=1.0.0.0、Culture=de、PublicKeyToken=.... のバインドを開始します。
WRN: 一致するネイティブ イメージが見つかりません。
ログ: D:\tmp\bin\de\Program.resources.dll から読み込まれた IL アセンブリ。

これは問題ないように見えますが、文字列はローカライズされません。Program.exe のデフォルトの文字列が引き続き使用されます。

文字列を取得するには、.NET から Visual Studio で生成されResたクラスを使用しRes.resxます。

ここで何が欠けていますか?

編集:私よりもよく理解している人のために、FUSLOGVWの完全な出力を追加しました。

4

2 に答える 2

0

これは、サテライト アセンブリを外部で生成する自動ビルド スクリプトを作成したときに犯した大きな間違いです。問題は、サテライト アセンブリでクラスを生成しているときに、クラスを見逃していたことResです。うまくいかなかったのも不思議ではありません。

長い時間を費やした後、今朝問題を発見しました。

于 2012-05-31T07:22:54.763 に答える
-1

私はあなたの文化識別子がこの行で間違っていると信じています:

Thread.CurrentThread.CurrentUICulture = new CultureInfo("de");

CultureInfoのカルチャ識別子は、「languagecode-countrycode」の形式を取ります。たとえば、米国英語の場合は「en-US」、英国/英国英語の場合は「en-GB」です。

「de-DE」をお試しください。

http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.name%28v=vs.95%29.aspxおよびhttp://msdn.microsoft.com/で、さらに詳しい資料を入手できます。カルチャ識別子のリストについては、 en-us / goglobal/bb896001.aspxを参照してください。

于 2012-05-30T14:45:16.253 に答える