Вопрос или проблема
У меня есть проект Blazor Server, и я использую файлы resx. Он работал хорошо, но внезапно перестал работать при добавлении новых определений в файлы. Я добавил новые определения как в Resource Explorer, так и в Legacy. И они сохраняются так, как и должны. Но когда я пытаюсь прочитать их с помощью моих страниц Razor, он находит только старые определения. Новосозданные не обнаруживаются. @Resource.mynewdefinition возвращает ошибку ‘Resource’ не содержит определения для ‘mynewdefinition’
Я очистил решение, запустил новую сборку, перезапустил приложение. Но ничего не помогает.
Буду признателен за любые предложения.
Решение. Если Resource.Designer.cs не обновляется с определениям, щелкните правой кнопкой мыши на вашем файле resx и выберите Запустить настраиваемый инструмент.
Ответ или решение
Проблема чтения новых определений из файлов resx в проекте Blazor Server
Введение
Работа с ресурсами в проектах на Blazor Server через файлы .resx
является стандартной практикой для локализации и управления строками. Однако иногда разработчики сталкиваются с проблемами, когда новые определения в ресурсах не отображаются в коде, даже после внешних изменений. Рассмотрим одну из таких проблем и ее решение.
Описание проблемы
В вашем проекте Blazor Server вы добавили новые определения в файлы ресурсов (.resx
), используя как Resource Explorer, так и Legacy подход. Сохранение изменений прошло успешно, однако при попытке доступа к новым определениям через Razor страницы с помощью кода типа @Resource.mynewdefinition
возникает ошибка: 'Resource' does not contain a definition for 'mynewdefinition'
. Это может быть заметным препятствием в процессе разработки, особенно если требуется обеспечить обновление локализованных строк во всем приложении.
Несмотря на выполнение стандартных операций, таких как очистка решения, пересборка и перезапуск приложения, новые определения по-прежнему не доступны. Это гостей в рутинной работе и может существенно замедлить процесс развёртывания обновлений.
Потенциальные причины
-
Несовпадение между файлами
.resx
и автогенерируемыми классами: Когда вы добавляете новые ключи в файлы ресурсов, необходимо обновить связанный с ними класс, который генерируется автоматически (например,Resource.Designer.cs
). -
Проблемы с кастомными инструментами: В некоторых случаях может произойти сбой в выполнении инструментов, ответственных за автоматическую генерацию классов ресурсов, что приводит к отсутствию новых определений.
Решение проблемы
Для того чтобы ваши новые определения стали доступны, выполните следующие шаги:
-
Обновление класса Resource.Designer.cs:
- Щелкните правой кнопкой мыши на ваш файл
.resx
в проводнике решений. - Выберите пункт Run Custom Tool (Запустить пользовательский инструмент). Это действие должно заставить Visual Studio сгенерировать соответствующий класс с актуальными определениями.
- Щелкните правой кнопкой мыши на ваш файл
-
Проверка проектных настроек:
- Убедитесь, что ваш проект правильно настроен для генерации файлов ресурса. В свойствах файла
.resx
должна быть установлена опция Custom Tool с значениемPublicResXFileCodeGenerator
или аналогичной.
- Убедитесь, что ваш проект правильно настроен для генерации файлов ресурса. В свойствах файла
-
Очистка и сборка проекта:
- После обновления файла ресурса, выполните очистку и полную сборку проекта, чтобы убедиться, что изменения применены и вся необходимая информация скомпилирована.
-
Проверка области видимости:
- Убедитесь, что новые ключи ресурсов находятся в правильном пространстве имен и доступны в вашем текущем контексте Razor страниц.
-
Перезапуск среды разработки:
- В некоторых случаях это может помочь. Попробуйте закрыть и снова открыть Visual Studio или соответствующую IDE, чтобы убедиться, что изменения были подхвачены.
Заключение
Проблема с отсутствием новых определений из файлов .resx
в вашем проекте Blazor Server часто связана с неприменением обновлений в классах ресурсов. Следуя вышеописанным рекомендациям, вы сможете устранить данную проблему и продолжить работу над проектом без лишних задержек. Если проблема все еще сохраняется, рекомендуется проверить наличие дополнительных ошибок в настройках проекта или конфликты в зависимости от версий используемых библиотек.