C#-从程序集中获取资源字符串的最快方法

本文关键字:字符串 方法 资源 获取 程序 程序集 集中 C#- | 更新日期: 2023-09-27 18:21:25

我真的不知道/不知道如何使用c#从程序集中的resx文件中的键找到资源值。(也可能是我无知)。

什么是最快的代码,我可以使用资源文件中的键来检索string valuesvalues,该文件被嵌入为程序集中的资源。我将异常的友好消息存储在资源文件中,并希望在需要时使用它们。

是否存在用于此目的的静态类?

有没有成熟的开源项目可以用于此?

C#-从程序集中获取资源字符串的最快方法

如果资源与代码在同一个程序集中,则执行以下操作:

String resourceValue = MyAssemblyNameSpace.Properties.Resources.ResourceName

取自SO的回答。

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");
 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);

当我为C#类库类型的单元测试创建一个名为UnitTests的新项目时,我右键单击并添加了一个新的Resource。我把它命名为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);
        }
    }
}

由于这只是我的单元测试,我对此感到满意。希望它能帮助其他人。

为了改进Herzube的答案,我将展示我是如何实现的。。。

与其为资源文件创建项目或文件夹,只需右键单击项目并添加->新项目,然后选择资源文件。打开字符串中的资源文件,保存为一个有用的名称,并导航到您想要使用它们的C#,然后它就是:

String resourceValue = MyProjectName.MyResourceFileName.MyResourceRowItem;

如果不起作用,请注意resx文件中的访问修饰符下拉列表。