2009-07-08 9 views
9

のリソースファイル(resx)に格納された文字列を読み込むC#アプリケーションでは、すべての顧客に合わせてカスタマイズされた.resxファイルを作成する必要があります。動的ファイル名が

私がしたいことは、顧客にアプリケーションを提供する必要があるたびにプロジェクト全体を再コンパイルしないようにするためです。この文字列に動的にアクセスする必要があります。 実行時間だけファイル名を確認すると、(アプリケーション実行中に)resxファイルにアクセスするにはどうすればいいですか?

今、私は似た何かを書くので:リソースは、私のResource.resxファイルをある

Properties.Resources.MyString1 

。 しかし、私はこのようなものが必要です:

GetStringFromDynamicResourceFile("MyFile.resx", "MyString1"); 

それは可能ですか?もちろん

おかげ マーク

+0

[OK]をプラシャンスそれwors! 唯一のことは、 "Func"メソッドは "静的"にすることはできません。そうでなければ、コンパイラは例外をスローします。 ありがとうございます... –

答えて

12

あなたのケースでは、このようなことが役立ちますか?

Dictionary<string, string> resourceMap = new Dictionary<string, string>(); 

public static void Func(string fileName) 
{ 
    ResXResourceReader rsxr = new ResXResourceReader(fileName);   
    foreach (DictionaryEntry d in rsxr) 
    { 
     resourceMap.Add(d.Key.ToString(),d.Value.ToString());   
    }   
    rsxr.Close(); 
} 

public string GetResource(string resourceId) 
{ 
    return resourceMap[resourceId]; 
} 
+4

明示的にリーダーを閉じるのではなく**ステートメントを使用して** ResXResourceReaderを**に包む方がよい。 – arbiter

+0

非常に良いコード。 –

+0

私はここでコードを練習したと思います(チュートリアル2):http://www.c-sharpcorner.com/UploadFile/yougerthen/105262008135822PM/1.aspx –

1

ことが可能です。 msdnで約ResouceSetクラスを読む必要があります。 .resxファイルを直接ロードする場合は、ResxResourceSetを使用できます。

2

その後、リフレクションを使用して動的にリソースを抽出し、個別のDLL(顧客ごとに1)に必要なリソースを置くことができます:

Assembly ass = Assembly.LoadFromFile("customer1.dll"); 
string s = ass.GetManifestResource("string1"); 

私は、構文が間違っを有することができる - それは早いです。ここでの1つの潜在的な注意点:Reflectionを通じてDLLにアクセスすると、DLLファイルが長時間ロックされるため、クライアントのマシン上でDLLを更新または置き換えられなくなる可能性があります。

+5

+1その変数名。 –

0

プロジェクトでSystem.Windows.Forms.ResXResourceReaderクラスを参照する代わりにLINQ to SQLを使用してください。

public string GetStringFromDynamicResourceFile(string resxFileName, string resource) 
{ 
    return XDocument 
       .Load(resxFileName) 
       .Descendants() 
       .FirstOrDefault(_ => _.Attributes().Any(a => a.Value == resource))? 
       .Value; 
} 

そして、それを使用します。

GetStringFromDynamicResourceFile("MyFile.resx", "MyString1"); 
関連する問題