ResourceManager пытается загрузить .resources, а не .resx файл - PullRequest
11 голосов
/ 22 сентября 2009

Я пытаюсь загрузить файл resx на свой веб-сайт .net, используя:

ResourceManager rm = new ResourceManager( "Project.Resource", Assembly.GetExecutingAssembly() );

Файл Resource.resx находится в папке App_LocalResources и настроен для встраивания в сборку при сборке.

Когда я пытаюсь получить доступ к файлу resx, используя:

rm.GetString( "key" ); или rm.GetString( "key", culture );

Я получаю сообщение об ошибке:

Не удалось найти ресурсы подходит для указанной культуры или нейтральная культура. Удостовериться "Project.Resource.resources" был правильно встроен или связан с сборка "Проект" во время компиляции, или что все спутниковые сборки Требуются загружаемые и полностью подписан.

Обратите внимание на .resources ... есть идеи о том, что здесь происходит?

Ответы [ 5 ]

14 голосов
/ 23 октября 2012

Для загрузки .resx в ResourceManager вам необходимо указать пространство имен

var rm = new ResourceManager("Namespace.ResxName", Assembly.GetAssembly());

или вы можете получить ResourceManager бесплатно, если для модификатора доступа в редакторе управляемых ресурсов установлено значение «Внутренний» или «Открытый», после этого VS создаст ResxName.Designer.cs

var rm = ResxName.ResourceManager;
4 голосов
/ 22 апреля 2015

Есть удивительно простой способ чтения ресурса по строке:

ResourceNamespace.ResxFileName.ResourceManager.GetString("ResourceKey")

Это чистое и элегантное решение для чтения ресурсов по ключам, где «точечная запись» не может использоваться (например, когда ключ ресурса сохраняется в базе данных).

3 голосов
/ 22 сентября 2009

Я думаю, что вы используете ResourceManager неправильно. Смотрите это сообщение .

Также обратите внимание, что когда вы открываете командную строку Visual Studio и запускаете resgen.exe, он говорит, что он используется для преобразования файлов ресурсов из одного формата в другой (то есть, resx в ресурсы). Я думаю, вам нужно будет преобразовать ваш файл в ресурсы из resx, а затем загрузить его с помощью resourceManager.

3 голосов
/ 12 октября 2009

Я не уверен, какую версию .NET Framework вы используете.

Попробуйте изменить способ оживления ResourceManager.

ResourceManager rm = 
     new ResourceManager("Project.Resource", 
                         System.Reflection.Assembly.Load("App_LocalResources"));

Это должно работать.

Это также отображается как статическое свойство автоматически сгенерированного класса .designer.cs конкретного менеджера ресурсов.

0 голосов
/ 22 сентября 2009

Добавьте расширение .resx явно.

Вы также можете использовать автоматически сгенерированный класс и использовать его свойства, если это подходит для вашего проекта.

...