質問編集履歴

1

情報の追加\(EXEとは別のフォルダに配置したDLL内でのThread\.CurrentThread\.CurrentUICulture\)

2016/09/08 11:02

投稿

silverthyme
silverthyme

スコア10

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Visual C#のWindows Formsでアプリケショーンを作成しています。
4
4
 
5
- 次のサイトを参考にしながら、EXEファイルとは別のフォルダに配置したDLLを参照するアプリケーションを作成しています(DLLをプラグインとして後から追加可能とするため。)
5
+ 次のサイトを参考にしながら、EXEファイルとは別のフォルダ(サブフォルダではい)に配置したDLLを参照するアプリケーションを作成しています(DLLをプラグインとして後から追加可能とするため。)
6
6
 
7
7
  - [exeと別フォルダのDLLを参照する方法 : 3流プログラマのメモ書き](http://jehupc.exblog.jp/7662361/)
8
8
 
@@ -16,7 +16,7 @@
16
16
 
17
17
  次にこのアプリケーションを多国語に対応させるために、EXE内に定義したフォームと、EXEとは別のフォルダに配置したDLL内に定義したフォーム各々のLanguageプロパティにおいて「日本語」等のローカライズ言語を指定してその言語のUIを作成し、Language=(既定値)のフォームには英語のUIを作成しましたが、次節のような問題が発生しており多言語対応がうまくいきません。
18
18
 
19
- そこで標題の件ですが、EXEファイルとは別のフォルダに配置したDLLに於いてLanguage=(既定値)以外の言語に対応させるにはどうしたらよいのでしょうか?
19
+ そこで標題の件ですが、EXEファイルとは別のサブフォルダではないフォルダに配置したDLLに於いてLanguage=(既定値)以外の言語に対応させるにはどうしたらよいのでしょうか?
20
20
 
21
21
 
22
22
 
@@ -136,7 +136,7 @@
136
136
 
137
137
  ```
138
138
 
139
- - EXEとは別フォルダ(C:\Bar\Plugins\)に配置するDLL(Fuga.dll)のプロジェクト内のコード
139
+ - EXEとは別フォルダ(C:\Bar\Plugins)に配置するDLL(Fuga.dll)のプロジェクト内のコード
140
140
 
141
141
  (DLLFormのGUIはデザイナ上で「Language=(既定値)」と「Language=日本語」の2種類を作成。(既定値)のときは英語とする)
142
142
 
@@ -278,9 +278,55 @@
278
278
 
279
279
 
280
280
 
281
+ ---
282
+
283
+ **2016年9月8日 追加**
284
+
285
+ EXEファイルとは別のフォルダに配置したDLLで Thread.CurrentThread.CurrentUICulture の値を調べてみました。同DLLのフォーム(DLLForm)にTextBoxを二つ貼り付けて、次のコードで検証
286
+
287
+ ```C#
288
+
289
+ textBox1.Text = Thread.CurrentThread.CurrentUICulture.TextInfo.CultureName;
290
+
291
+ textBox2.Text = Thread.CurrentThread.CurrentUICulture.ToString();
292
+
293
+ ```
294
+
295
+ [結果]
296
+
297
+ EXE側で、Fuga.DLLForm frm = new Fuga.DLLForm();する前に
298
+
299
+ Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("ja");
300
+
301
+ Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("ja");
302
+
303
+ としたとき
304
+
305
+ ```
306
+
307
+ textBox1: ja-JP
308
+
309
+ textBox2: ja
310
+
311
+ ```
312
+
313
+ 同じく(中略)CultureInfo.GetCultureInfo("ja-JP");としたとき
314
+
315
+ ```
316
+
317
+ textBox1: ja-JP
318
+
319
+ textBox2: ja-JP
320
+
321
+ ```
322
+
323
+ 試しにDLLFormのLanguageプロパティを「日本語 (日本)」にした版も用意してみましたが、相変わらず(既定値)のUIが表示されてしまう状況です。
324
+
325
+
326
+
281
327
  ###補足情報(言語/FW/ツール等のバージョンなど)
282
328
 
283
- 開発環境は以下の通りです。
329
+ - 開発環境は以下の通りです。
284
330
 
285
331
  Visual Studio Professional 2013
286
332
 
@@ -289,3 +335,13 @@
289
335
  Windows Form
290
336
 
291
337
  DLLのプラグイン化にはMEF(Managed Extensibility Framework)を使用していますが、MEFを用いていなくても同問題が発生します。
338
+
339
+ - 残念ながら…
340
+
341
+ 今回は時間切れと言うことで、EXEファイルと同じ階層にプラグイン用のサブフォルダを作ってそこにDLLを配置して、probingで参照する仕様に変更となりました。
342
+
343
+ [ランタイムがアセンブリを検索する方法 - msdn](https://msdn.microsoft.com/ja-jp/library/yx7xezcf.aspx)
344
+
345
+
346
+
347
+ (この方法であれば期待通りの言語で表示されるのですが「前提・実現したいこと」の解決とは少し異なります)