私は本当に答えを知らない/持っていない、c#を使用してアセンブリ内のresx
ファイルからキーを使用してリソース値を見つける知識(または私は無知かもしれません)。
最速のコードは何ですか?アセンブリでリソースとして埋め込みであるリソースファイルからキーを使用してstring values
またはvalues
を取得する方法リソースファイルに例外のわかりやすいメッセージを保存していますが、必要に応じてそれらを使用したいと思います。
この目的で静的クラスが存在しますか?
これに使用できるオープンソースの成熟したプロジェクトはありますか?
Assembly assembly = this.GetType().Assembly;
ResourceManager resourceManager = new ResourceManager("Resources.Strings", Assembly);
string myString = resourceManager.GetString("value");
リソースがコードと同じアセンブリにある場合、次のようになります。
String resourceValue = MyAssemblyNameSpace.Properties.Resources.ResourceName
string val = Resources.ResourceManager.GetString("resource_name");
与えられた"resource_name"
リソース値を取得できます。
resourceMangerを使用して、アセンブリから文字列値を取得できます。
ResourceManager ResManager= new ResourceManager("yourResource",
Assembly.GetExecutingAssembly());
String strResourveValue = ResManager.GetString("YourStringKey");
UnitTestsと呼ばれるタイプC#クラスライブラリのユニットテスト用に新しいプロジェクトを作成したとき、右クリックして新しいリソースを追加しました。 UnitTestsResourcesという名前を付けました。そのリソースに2つの文字列を追加しました。その後、このように便利にアクセスできました
UnitTestsResources.NoDeviceRequireMsg
私はそれがどのように機能するのか興味があったので、リソースファイルの背後にあるコードを取得しました。 Visual Studioは、静的アクセサを使用して内部クラスを作成しました。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class UnitTestsResources {
//Some auto generated code
/// <summary>
/// Looks up a localized string similar to OPOS Device is required for test.
/// </summary>
internal static string DeviceRequireMsg {
get {
return ResourceManager.GetString("DeviceRequireMsg", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to OPOS Device must not be installed for test.
/// </summary>
internal static string NoDeviceRequireMsg {
get {
return ResourceManager.GetString("NoDeviceRequireMsg", resourceCulture);
}
}
}
それは私の単体テストのためだけなので、私はこれに満足しています。それが他の誰かを助けることを願っています。
Herzbubeの答えを改善するために、これをどのように実装したかを示します。
リソースファイルのプロジェクトまたはフォルダーを作成するのではなく、プロジェクトを右クリックして[追加]-> [新しいアイテム]を選択し、リソースファイルを選択します。文字列にあるリソースファイルスティックを開き、便利な名前で保存し、それらを使用するC#に移動すると、次のようになります。
文字列resourceValue = MyProjectName.MyResourceFileName.MyResourceRowItem;
それが機能しない場合、resxファイル内のアクセス修飾子のドロップダウンに注意してください。
var thread = System.Threading.Thread.CurrentThread.CurrentUICulture.Name;
var culture = new CultureInfo(thread);
var resourceManager = new ResourceManager(typeof(Resources.Resource));
string value = resourceManager.GetString(name, culture);