Проблема с компиляцией файла ресурсов в библиотеку
-
21-08-2019 - |
Вопрос
У меня есть веб-приложение, встроенное в asp.net, которое использует файлы ресурсов для поддержки нескольких языков.Проблема в том, что я могу добавить новый языковой файл только в Visual Studio, и мне приходится пересобирать все приложение, чтобы включить новый язык.После поиска в сети я обнаружил, что компиляцию файлов ресурсов можно выполнить в компиляторе .net.Я использовал следующие команды:
resgen.exe /компилировать langfile.en.resx
al.exe /out:en app_globalresources.resources.dll /culture: en /embedresource: langfile .en.resources
Файл копируется в папку сайта, но не работает.Я имею в виду, что когда я выбираю новый язык на веб-странице, строки загружаются из файла ресурсов по умолчанию.Если я создаю файл ресурсов в VS, все работает нормально.Я проверил размеры двух файлов dll: сгенерированного VS и скомпилированного мной, и они имеют одинаковый размер, но скомпилированный не работает.Я могу только думать, что, возможно, мне придется использовать какие-то другие параметры в приведенных выше командах, но я действительно не знаю.
Любая помощь действительно ценится.
Решение
Вы можете добиться того, чего хотите, написав собственный построитель выражений вместо использования встроенной версии ресурсов и извлекая информацию из базы данных или файлов XML.По сути, вы пишете свой собственный класс, наследующий от System.Web.Compilation.ExpressionBuilder, а затем регистрируете его в Web.config следующим образом:
<compilation>
<expressionBuilders>
<add expressionPrefix="CustomResources" type="CustomResourcesExpressionBuilder"/>
</expressionBuilders>
</compilation>
и затем вы можете ссылаться на него как на обычные ресурсы:
<%$ CustomResources:Section, Key %>