質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

2102閲覧

【c#】ResourceManagerの挙動がVisualStudioのバージョンで変わってしまう

tententen

総合スコア9

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2021/05/07 00:39

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でも正しく動作するようにできますでしょうか。
またほかに実装方法はありますでしょうか。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/05/07 02:28 編集

コンソールアプリですか? > まったく同じソリューションをVS2010とVS2019で開いて実行すると挙動が変わります。 その「実行」というのは具体的にどのようにしているのでしょう? VS2010 でプロジェクトを作って「デバッグ開始」および「デバッグなしで開始」で実行したときは期待通り(Test になる)、同じプロジェクトを VS2019 で開いて「デバッグ開始」および「デバッグなしで開始」で実行すると結果が異なる(テストになる)ということですか?
dodox86

2021/05/07 03:06

VS2010のソリューションをVS2019で開くのではなく、VS2019で新たにソリューションとプロジェクトを作り、最低限の同じようなコードにして所望の動きになるか確認してみてはいかがですか。で、それでOKなら、VS2010とVS2019のプロジェクトの中身を比べてみるとか。
tententen

2021/05/07 08:01 編集

コンソールアプリです。VS上でデバッグ開始(F5)で実行しています。また、ビルドしてexeを実行してもデバッグ実行と同じ結果になります。Debug,Releaseともに同じです。まったく同じソリューションをVS2010とVS2019で開いて実行すると結果が変わります。両バージョンインストールされているPCでの動作です。
tententen

2021/05/07 07:29

VS2019で新規作成してプログラムを移植しても同じく挙動が変わります。 en-usの文字が出力されません。 VS2019で新規作成したプロジェクトをVS2010で開いて実行すると正しく動きます。
Hey_CH

2021/05/07 08:41

こちらの環境(VisualStudio2019コミュニティ)で試してみましたが、Testと表示されました。 DebugやReleaseフォルダ内に「en-us\exe名.resource.dll」は存在しますか?(これが無いとTestと表示されない) 再インストールすると治ったりしませんかね?
tententen

2021/05/07 13:46

Hey_CHさん、検証ありがとうございます。en-usフォルダにresource.dllがあるのも確認しました。存在しますが、正常に動作しません。当方の環境に問題がありそうです。再インストールなど試してみます。ありがとうございました。
guest

回答1

0

ベストアンサー

質問に書いてあったコードの、

var rm = System.Resources.ResourceManager(typeof(SampleRes));

は間違っている(new がない)ので、そこのみを直して .NET Framework 3.5 で VS2010 v10.0.40219.1 SP1Rel および VS2019 v16.9.4 で試してみましたが、VS2019 で「テスト」になるという問題は再現しません。どちらも Test になります。

質問に書いてないところに問題があるのではないですか?

VS2010

イメージ説明

VS2019

イメージ説明

投稿2021/05/07 08:26

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tententen

2021/05/07 13:42

検証いただきありがとうございます。newは打ち忘れでした。 VS2019でも正しく動作するのでしたら、VSのバージョンというより当方のVS含む環境に問題がありそうですね。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問