C#-从程序集中获取资源字符串的最快方法
本文关键字:字符串 方法 资源 获取 程序 程序集 集中 C#- | 更新日期: 2023-09-27 18:21:25
我真的不知道/不知道如何使用c#从程序集中的resx
文件中的键找到资源值。(也可能是我无知)。
什么是最快的代码,我可以使用资源文件中的键来检索string values
或values
,该文件被嵌入为程序集中的资源。我将异常的友好消息存储在资源文件中,并希望在需要时使用它们。
是否存在用于此目的的静态类?
有没有成熟的开源项目可以用于此?
如果资源与代码在同一个程序集中,则执行以下操作:
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文件中的访问修饰符下拉列表。