ResourceManager пытается загрузить .resources не .resx файл

Я пытаюсь загрузить файл 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... любые идеи о том, что здесь происходит?

Ответ 1

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

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

Ответ 2

Чтобы загрузить .resx в ResourceManager, вам нужно указать пространство имен

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

или вы можете бесплатно получить ResourceManager, если установить модификатор доступа внутри редактора управляемых ресурсов в Internal или Public, после чего VS будет генерировать ResxName.Designer.cs

var rm = ResxName.ResourceManager;

Ответ 3

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

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

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

Ответ 4

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

Попробуйте указать способ возвращения ресурса ResourceManager.

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

Он должен работать.

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

Ответ 5

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

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