MissingManifestResourceException при доступе к файлу resx - PullRequest
0 голосов
/ 08 сентября 2018

Хорошо, я получаю исключение MissingManifestResourceException при попытке доступа к файлу resx.

У меня есть один фрагмент кода, который работает нормально, и у меня есть другой, который не работает. Я не уверен, что здесь происходит.

Рабочий фрагмент

static void Main(string[] args)
{
    //Keep an Eye on the first parameter I have passed, it has ".Lang" in it 
    var rm = new ResourceManager("ConsoleApp1.App_GlobalResources.Lang", Assembly.GetExecutingAssembly());
    var ci = Thread.CurrentThread.CurrentCulture;
    var a = rm.GetString("Name", ci);
    Console.WriteLine("Hello World!");
}

Нерабочий фрагмент:

static void Main(string[] args)
{
    // Keep an eye on first parameter no ".Lang" here.
    var rm = new ResourceManager("ConsoleApp1.App_GlobalResources", Assembly.GetExecutingAssembly());
    var ci = Thread.CurrentThread.CurrentCulture;
    var a = rm.GetString("Name", ci);
    Console.WriteLine("Hello World!");
}

Структура моего решения:

enter image description here

Свойство файла Lang.en-US (отлично работает):

enter image description here

Свойство файла en-US (НЕ РАБОТАЕТ):

enter image description here

Вопрос 1: Почему Lang.en-US не создает никаких файлов .CS, даже тогда ЭТО РАБОТАЕТ

Вопрос 2: Почему базовый файл en-US.resx создает файл .CS и все еще не работает.

Ссылка, на которую я смотрел: ТАК ССЫЛКА

Рис. 1:

enter image description here

Рис. 2:

enter image description here

1 Ответ

0 голосов
/ 08 сентября 2018

Ваш рабочий пример работает следующим образом.

  1. ResourceManager загружает "Lang" в качестве своего префикса виртуального файла.
  2. GetString (Ключ, Культура) - пытается найти правильную культуру, если она не найдена, то она откроется без файла культуры. например, для «en-US» он попытается найти Lang.en-US.resx и по умолчанию будет Lang.resx

Ваш нерабочий пример не работает, потому что вы указываете не префикс виртуального файла, а путь к папке.

Решение: Одна из идеальных ситуаций - использование вашей работы со следующими несколькими языковыми файлами.

Языковая папка (т.е. App_GlobalResources [плохое имя])

  • Lang.resx: по умолчанию для несуществующих файлов культур
  • Lang.en-US.resx: культура en-US
  • Lang.he.resx: культура
  • Вы можете увидеть суть

Код:

var rm = new ResourceManager("ConsoleApp1.App_GlobalResources.Lang", Assembly.GetExecutingAssembly());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...