我真的不知道/有答案,知道如何使用c#中的程序集中的resx
文件找到资源值(或者我可能是无知的)。C# - 从汇编中获取资源字符串的最快方法
什么是最快的代码,这样我可以利用这嵌入作为一个集资源的资源文件一键检索string values
或values
。我正在为资源文件中的异常存储友好的消息,并希望在需要时使用它们。
是否存在用于此目的的静态类?
是否有我可以使用的开源成熟项目?
我真的不知道/有答案,知道如何使用c#中的程序集中的resx
文件找到资源值(或者我可能是无知的)。C# - 从汇编中获取资源字符串的最快方法
什么是最快的代码,这样我可以利用这嵌入作为一个集资源的资源文件一键检索string values
或values
。我正在为资源文件中的异常存储友好的消息,并希望在需要时使用它们。
是否存在用于此目的的静态类?
是否有我可以使用的开源成熟项目?
Assembly assembly = this.GetType().Assembly;
ResourceManager resourceManager = new ResourceManager("Resources.Strings", assembly);
string myString = resourceManager.GetString("value");
可以使用ResourceManger从大会
ResourceManager ResManager= new ResourceManager("yourResource",
Assembly.GetExecutingAssembly());
String strResourveValue = ResManager.GetString("YourStringKey");
得到的字符串值,如果资源是在同一个组件的代码,那么下面会做什么:
String resourceValue = MyAssemblyNameSpace.Properties.Resources.ResourceName
只是一个更简单的方法,通过这个resourceManager的东西。谢谢。 – C4u
当我为名为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#,然后它只是:
String resourceValue = MyProjectName.MyResourceFileName.MyResourceRowItem;
如果这没有工作,请注意访问修饰符下拉时,在您的resx文件中。
string val = Resources.ResourceManager.GetString("resource_name");
鉴于"resource_name"
您可以检索资源值。
完美..... !!! –
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);
这就是我正在寻找的那个!我总是尽量避免像其他ResourceManager构造函数使用的字符串。 – madannes
嗨,感谢您的代码。 Lin1不应用反射?性能如何。 – Deeptechtons
@deeptechtons,是的 - 有点儿。我其实不认为GetType()。大会非常缓慢,但即使是这样,大概你会在你的项目早期做一次。这个想法是,你应该将'resourceManager'存储在应用程序的主对象或某处,并在需要获取字符串时使用它。 – sblom
程序集是否在生命周期的早期阶段提供事件,以便在发生异常时我只需检索字符串而不是每次都实例化。 – Deeptechtons