[英]C# - Fastest way to get resource string from assembly
我真的不知道/不知道答案,知道使用 c# 的程序集中的resx
文件中的鍵來查找資源值。(或者可能是我無知)。
什么是最快的代碼,我可以使用資源文件中的鍵檢索string values
或values
的方式,該資源文件作為資源嵌入到程序集中。 我在資源文件中存儲異常的友好消息,並希望在需要時使用它們。
是否存在用於此目的的靜態類?
是否有我可以使用的開源成熟項目?
如果資源與代碼在同一個程序集中,則執行以下操作:
String resourceValue = MyAssemblyNameSpace.Properties.Resources.ResourceName
取自this SO answer 。
Assembly assembly = this.GetType().Assembly;
ResourceManager resourceManager = new ResourceManager("Resources.Strings", assembly);
string myString = resourceManager.GetString("value");
string val = Resources.ResourceManager.GetString("resource_name");
給定"resource_name"
您可以檢索資源值。
您可以使用 ResourceManger 從 Assembly 中獲取字符串值
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);
}
}
}
由於它僅用於我的單元測試,因此我對此感到滿意。 希望它可以幫助別人。
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);
為了改進 Herzbube 的回答,我將展示我是如何實現的......
無需為資源文件創建項目或文件夾,只需右鍵單擊您的項目並添加 -> 新項目,然后選擇資源文件。 打開你的字符串中的資源文件,保存為一個有用的名稱,然后導航到你想要使用它們的 C#,然后它只是:
String resourceValue = MyProjectName.MyResourceFileName.MyResourceRowItem;
如果這不起作用,請注意在resx文件中的訪問修飾符下拉列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.