ResourceManagerで多言語対応をしているのですが、
VisualStudio2010(VS2010)とVisualStudio2019(VS2019)で挙動が変わってしまいます。
職場のVSのバージョンがあがり、挙動が変わってしまって困っています。
ソリューション構成
- SampelRes.en-us.resx
- SampelRes.resx
- Program.cs
SampleRes.resxは"Test:テスト"
SampleRes.en-us.resxは"Test:Test"
コード
下記コードを実行すると
VS2010では"Test"とen-usのリソースファイルの文字が出力されますが、
VS2019では"テスト"とen-usのリソースファイルの文字が出力されません。
C#
1var rm = System.Resources.ResourceManager(typeof(SampleRes)); 2var culture = new System.Globalization.CultureInfo("en-us"); 3var txt = rm.GetString("Test", culture); 4Console.WriteLine(txt);
試したこと
CurrentThread.CurrentCultureやCurrentThread.CurrentUICultureも変更しましたが、ダメでした。
.netframeworkは3.5、4.7それぞれ試しました。
まったく同じソリューションをVS2010とVS2019で開いて実行すると挙動が変わります。
VS2019でも正しく動作するようにできますでしょうか。
またほかに実装方法はありますでしょうか。
よろしくお願いします。
コンソールアプリですか?
> まったく同じソリューションをVS2010とVS2019で開いて実行すると挙動が変わります。
その「実行」というのは具体的にどのようにしているのでしょう? VS2010 でプロジェクトを作って「デバッグ開始」および「デバッグなしで開始」で実行したときは期待通り(Test になる)、同じプロジェクトを VS2019 で開いて「デバッグ開始」および「デバッグなしで開始」で実行すると結果が異なる(テストになる)ということですか?
VS2010のソリューションをVS2019で開くのではなく、VS2019で新たにソリューションとプロジェクトを作り、最低限の同じようなコードにして所望の動きになるか確認してみてはいかがですか。で、それでOKなら、VS2010とVS2019のプロジェクトの中身を比べてみるとか。
コンソールアプリです。VS上でデバッグ開始(F5)で実行しています。また、ビルドしてexeを実行してもデバッグ実行と同じ結果になります。Debug,Releaseともに同じです。まったく同じソリューションをVS2010とVS2019で開いて実行すると結果が変わります。両バージョンインストールされているPCでの動作です。
VS2019で新規作成してプログラムを移植しても同じく挙動が変わります。
en-usの文字が出力されません。
VS2019で新規作成したプロジェクトをVS2010で開いて実行すると正しく動きます。
こちらの環境(VisualStudio2019コミュニティ)で試してみましたが、Testと表示されました。
DebugやReleaseフォルダ内に「en-us\exe名.resource.dll」は存在しますか?(これが無いとTestと表示されない)
再インストールすると治ったりしませんかね?
Hey_CHさん、検証ありがとうございます。en-usフォルダにresource.dllがあるのも確認しました。存在しますが、正常に動作しません。当方の環境に問題がありそうです。再インストールなど試してみます。ありがとうございました。
回答1件
あなたの回答
tips
プレビュー