Проблема с глобальными ресурсами ASP.NET

У меня возникла проблема, на решение которой мне уже пришлось потратить несколько вечеров. Я перенес веб-проект ASP.NET в веб-приложение.

Моя основная проблема - файлы .resx ниже App_GlobalResources. Скажем, у меня есть MyStrings.resx (= культура по умолчанию) и MyStrings.en.resx (да, английский не используется по умолчанию).

Если я создаю файлы в решении в обозревателе решений с помощью «Добавить ...», я получаю следующие настройки: * Действие при сборке: Содержимое * Пользовательский инструмент: GlobalResourceProxyGenerator

Я предполагаю, что настройка по умолчанию подходит для большинства случаев, но у меня уже есть две проблемы с этим: а) Если я оставлю действие сборки как «Содержимое», я получу исключение MissingManifestResourceException при использовании ResourceManager.GetString в коде. Решение: измените его на «EmbeddedResource». б) На моем компьютере отсутствует GlobalResourceProxyGenerator. Если я выберу «Запустить настраиваемый инструмент» в .resx, я получаю сообщение об ошибке «Не удается найти настраиваемый инструмент '...' в этой системе. Отлично. Решение: измените его на« PublicResXFileCodeGenerator ». Это работает.

Теперь, если я оставлю настройку PublicResXFileCodeGenerator, все будет компилироваться, но когда я запускаю решение (IIS и VS Express 2013 для Интернета), я получаю дружеское сообщение, что у меня есть «Resources.MyStrings» как в MyWebSite.dll, так и в App_GlobalResources.dll .

Хорошо, я меняю Custom Tool на ResXFileCodeGenerator. Теперь все работает нормально. Сейчас я развертываю решение на веб-сервере. Там я получаю CS0122: Resources.MyStrings недоступен из-за уровня защиты. Вероятно, это из-за его «внутреннего» объявления.

К настоящему времени я полностью потерялся. Любая помощь в наведении порядка?

Среда: IIS локально и онлайн VS Express 2013 для Интернета на двух языках. Для обоих параметров: Действие сборки: Копирование встроенного ресурса в выходной каталог: Не копировать Пользовательский инструмент: ResXfileCodeGenerator Пользовательское пространство имен инструмента: Ресурсы

Для сгенерированных файлов конструктора (только язык по умолчанию) настройки следующие: Действие при сборке: компилировать, копировать в выходной каталог: не копировать

Любая помощь приветствуется


person Sparhawk    schedule 19.01.2015    source источник
comment
В чем проблема сделать сгенерированный файл ресурсов общедоступным? Откройте .resx. файл с дизайнером и сделать его общедоступным.   -  person Dimitar Tsonev    schedule 20.01.2015
comment
Если я это сделаю, пользовательский инструмент будет изменен на PublicResXFileCodeGenerator. Если я это сделаю, то проблема в том, что код определен в двух местах.   -  person Sparhawk    schedule 20.01.2015
comment
Мне было бы интересно узнать, почему кто-то оценил эту тему на -1. Это непонятно? Отсутствует исследование?   -  person Sparhawk    schedule 20.01.2015


Ответы (1)


Я действительно не нашел источник своих проблем, но нашел хорошее решение. Основная проблема, вероятно, заключалась в том, что класс Resources.MyStrings присутствовал как в MyWebsite.dll, так и в App_GlobalResoures.dll. Я не выяснил, каковы предполагаемые настройки, чтобы убедиться, что вы получите их только один раз.

Мое решение: я создал папку «Ресурсы», скопировал все мои файлы .resx и удалил App_GlobalResources. Отлично работает также с разными языками.

Почему вообще существует папка "App_Globalresources"?

person Sparhawk    schedule 24.01.2015