resource read c# performance resources assemblies resx

read resource file c#



C#: la forma más rápida de obtener una cadena de recursos del ensamblaje (7)

Realmente no sé / tengo la respuesta, el conocimiento para encontrar un valor de recurso usando una clave de un archivo resx en un ensamblaje usando c # (o puede ser que soy ignorante).

¿Cuál sería el código más rápido? ¿Cómo puedo recuperar string values o values utilizando una clave de un archivo de recursos que se incrusta como recurso en un ensamblaje? Estoy almacenando mensajes amigables para excepciones en el archivo de recursos y me gustaría usarlos cuando sea necesario.

¿Existe una clase estática para este propósito?

¿Hay proyectos maduros de código abierto que pueda usar para esto?


Cuando hice un nuevo proyecto para mis pruebas unitarias de la biblioteca de clases de tipo C # llamada UnitTests, hice clic derecho y agregué un nuevo recurso. Nombré ese UnitTestsResources. Agregué 2 cadenas a ese recurso. Entonces pude acceder cómodamente a ellos de esta manera

UnitTestsResources.NoDeviceRequireMsg

Tenía curiosidad por cómo funcionaba, así que busqué el código detrás del archivo de recursos y tiene sentido. Visual Studio hizo una clase interna con accesores estáticos ... Parece esto para mí

[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); } } }

Ya que es solo para mis pruebas unitarias estoy contento con esto. Espero que ayude a alguien más.


Para mejorar la respuesta de herzbube, mostraré cómo implementé esto.

En lugar de crear proyectos o carpetas para el archivo de recursos, simplemente haga clic derecho en su proyecto y agregue -> nuevo elemento, luego elija el archivo de recursos. Abra la barra de archivos de recursos en sus cadenas, guárdela como un nombre útil y navegue hasta C # donde desee usarlos, entonces es simplemente

String resourceValue = MyProjectName.MyResourceFileName.MyResourceRowItem;

Si eso no funciona, preste atención al desplegable del modificador de acceso dentro de su archivo resx.


Si el recurso está en el mismo ensamblaje que el código, lo siguiente será:

String resourceValue = MyAssemblyNameSpace.Properties.Resources.ResourceName

Tomado de esta respuesta SO .


puede usar ResourceManger para obtener el valor de cadena de Assembly

Obtener recursos de la Asamblea

ResourceManager ResManager= new ResourceManager("yourResource", Assembly.GetExecutingAssembly()); String strResourveValue = ResManager.GetString("YourStringKey");


string val = Resources.ResourceManager.GetString("resource_name");

Dado "resource_name" puede recuperar el valor del recurso.


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


Assembly assembly = this.GetType().Assembly; ResourceManager resourceManager = new ResourceManager("Resources.Strings", assembly); string myString = resourceManager.GetString("value");