С# - самый быстрый способ получить строку из ресурсов сборки
Я действительно не знаю / есть ответ, знание, чтобы найти значение ресурса, используя ключ от resx
файл в сборке с использованием c#.(или может быть я невежда).
какой был бы самый быстрый код, как я могу получить string values
или values
используя ключ из файла ресурсов, который составляет встроенный как ресурс в сборке. Я храню дружественные сообщения для исключений в файле ресурсов и хотел бы использовать их при необходимости.
делает статический класс существуют для этой цели?
есть ли зрелые проекты с открытым исходным кодом, которые я могу использовать для этого?
7 ответов
Assembly assembly = this.GetType().Assembly;
ResourceManager resourceManager = new ResourceManager("Resources.Strings", assembly);
string myString = resourceManager.GetString("value");
если ресурс находится в той же сборке, что и код, то будет сделано следующее:
String resourceValue = MyAssemblyNameSpace.Properties.Resources.ResourceName
принято от это так ответ.
string val = Resources.ResourceManager.GetString("resource_name");
дано "resource_name"
вы можете получить значение ресурса.
вы можете использовать ResourceManger для получения строкового значения из Assembly
ResourceManager ResManager= new ResourceManager("yourResource",
Assembly.GetExecutingAssembly());
String strResourveValue = ResManager.GetString("YourStringKey");
когда я сделал новый проект для моих модульных тестов библиотеки классов типа C# под названием UnitTests, я щелкнул правой кнопкой мыши и добавил новый ресурс. Я назвал это 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, я покажу, как я это реализовал..
вместо создания проектов и папки для файла ресурсов, просто щелкните правой кнопкой мыши проект и добавить->новый элемент, а затем выберите файл ресурсов. Откройте файл ресурсов stick в ваших строках, сохраните как полезное имя и перейдите к C#, где вы хотите их использовать, тогда это просто:
String resourceValue = MyProjectName.MyResourceFileName.MyResourceRowItem;
Если что не работает обратите внимание на выпадающий модификатор доступа, когда внутри вашего файла resx.
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);