簡體   English   中英

C# - 從程序集中獲取資源字符串的最快方法

[英]C# - Fastest way to get resource string from assembly

我真的不知道/不知道答案,知道使用 c# 的程序集中的resx文件中的鍵來查找資源值。(或者可能是我無知)。

什么是最快的代碼,我可以使用資源文件中的鍵檢索string valuesvalues的方式,該資源文件作為資源嵌入到程序集中。 我在資源文件中存儲異常的友好消息,並希望在需要時使用它們。

是否存在用於此目的的靜態類?

是否有我可以使用的開源成熟項目?

如果資源與代碼在同一個程序集中,則執行以下操作:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM