namedType.InvokeMember не работает.Как получить стоимость ресурса? - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь получить значение ressource.resx и не могу.

Я делаю:

foreach (string certif in ContactCertifications)
{
    Type calledType = Type.GetType("TestNamespace.Resources");            

    String s = (String)calledType.InvokeMember(certif,BindingFlags.InvokeMethod 

    | BindingFlags.Public |BindingFlags.Static,null,null,null);                                       }

certif = "PRG_CARTV"

namedType is: {Name = "Resources" FullName = "TestNamespace.Resources"}, и когда я нахожусь в строке "String s = (String) namedType", у меня появляется ошибка: "Метод 'TestNamespace.Resources.PRG_CARTV' не найден."

И когда у меня String s = TestNamespace.Resources.PRG_CARTV;, это работает, поэтому я не понимаю ...

Когда я делаю просто:

var myManager = new ResourceManager(typeof(Resources));
var myString = myManager.GetString("PRG_CARTV");

это не работает, япроизошла ошибка: «Не удается найти подходящие ресурсы для указанной культуры или нейтральной культуры. Убедитесь, что \« TestNamespace.Ressources.resources \ »правильно встроен или связан в сборке ...»

1 Ответ

0 голосов
/ 10 октября 2018

У вас есть 2 проблемы:

1) Получив значение ресурса с помощью отражения, я попробовал это и работал:

String s = (String) calledType.InvokeMember(certif, BindingFlags.GetProperty | BindingFlags.NonPublic | BindingFlags.Static, null, null, null);

Обратите внимание на флаги привязки, которые изменились: BindingFlags.GetProperty вместо BindingFlags.InvokeMethod и BindingFlags.NonPublic вместо BindingFlags.Public

2) Ошибка с ResourceManager.Я сам попытался бы воссоздать Resources.resx снова.Если вы хотите продолжить изучение, проверьте подобные проблемы здесь, в StackOverflow, например: Не удалось найти ресурсы, подходящие для указанной культуры или нейтральной культуры

...