@Got_Oxidus
Учусь

Как получить .net ресурсы в сборке?

Как получить ресурсы(resx) .net программы?
Разрабатываю библиотеку, которая должна получить ресурсы вызывающей ее сборки. Как это сделать?
  • Вопрос задан
  • 205 просмотров
Решения вопроса 2
DmitryITWorksMakarov
@DmitryITWorksMakarov
С этого можно начать:

IEnumerable<object> GetResources(System.Reflection.Assembly inAssembly, System.Globalization.CultureInfo inCultureInfo) =>
            ((System.Resources.ResourceManager)inAssembly
                .GetTypes()
                .FirstOrDefault(type => type.Name == "Resources")
                .GetProperty("ResourceManager", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static)
                .GetValue(null, null))
                    .GetResourceSet(inCultureInfo, true, true)
                    .OfType<System.Collections.DictionaryEntry>()
                    .Select(item => item.Value);


var resources = GetResources(System.Reflection.Assembly.GetCallingAssembly(), System.Globalization.CultureInfo.InvariantCulture);
Ответ написан
@Got_Oxidus Автор вопроса
Учусь
Небольшой отрывок кода, из коготого все понятно.
Сборка - Target.
В ней два ресурса:
  • Alasah.resx
  • Alasah.ru-ru.resx

String[] resNames = typeof(Program).Assembly.GetManifestResourceNames(); // names of resources
foreach (var name in resNames)
{
    // Alasah.ru-ru doesn't include
    Console.WriteLine("\t" + name); // ends with .resource
}

var resource = new ResourceManager("Target.Alasah", typeof(Program).Assembly);

// ru-ru
Console.WriteLine(resource.GetString("hello"));
Console.WriteLine(resource.GetString("hello", null));
Console.WriteLine(resource.GetString("hello", CultureInfo.CurrentCulture));

// without culture
Console.WriteLine(resource.GetString("hello", CultureInfo.InvariantCulture));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы