Спутниковая сборка не воспринимается приложением ASP.NET - PullRequest
1 голос
/ 01 февраля 2011

У меня есть веб-проект под названием «TestResourceApp» с Labels.resx в папке App_GlobalResources. Я хочу добавить другой язык, создав спутниковую сборку.

Вот шаги, которые я предпринял для создания спутниковой сборки. Текст по умолчанию всегда отображается. Что я сделал не так?

1) Создайте Labels.fr.resx в другой папке.

2) Создать файл ресурсов:

Resgen Labels.fr.resx TestResourceApp.App_GlobalResources.Labels.fr.resources

3) Создать спутниковую сборку:

AL / t: lib /embed:TestResourceApp.App_GlobalResources.Labels.fr.resources /out:french.dll / c: fr

4) Скопируйте french.dll в TestResourceApp / bin / fr

В web.config для uiculture установлено значение auto, и я изменил язык в браузере.

Ответы [ 3 ]

3 голосов
/ 12 декабря 2012

Я смог использовать эту страницу, чтобы решить некоторые проблемы со сборкой спутника, которые у меня были.Я добавлю еще несколько вещей для проверки.

Полезно декомпилировать «нейтральную» сборку и посмотреть, как она собрана.Инструмент, подобный ILDASM.exe, полезен для этой цели.Как только вы получите декомпилированный файл, просмотрите текстовый вывод «.mresource», и вы должны увидеть его с вашим именем.Например, если вы добавляете ресурс в проект Visual Studio, он называется MyAssemblyName + ".Properties.Resources" + язык (если есть) + ".resources". Примеры:

MyAssembly.Properties.Resources.resources (нейтральный язык) MyAssembly.Properties.Resources.en-US.resources (английский (США))

В моем случае файл был назван правильно, а всоответствующая папка (например, Bin \ en-US).Я смог проверить это с помощью ProcMon.exe (от парней из SysInternals) и увидел, как рабочий процесс находит и читает в моем файле DLL (вместо того, чтобы просто сказать «ПУТЬ НЕ НАЙДЕН»).Однако он не находил ресурс по названию, которого ожидал.Именно тогда некоторая разборка помогла разобраться с проблемой имен.

Итак, используйте ProcMon.exe, чтобы сузить тип проблемы, которая может у вас возникнуть.Надеюсь, это кому-нибудь пригодится.

1 голос
/ 28 марта 2011

Это сложно, но вот несколько советов для тех, кто столкнулся с этой проблемой:

  • Попробуйте включить resx в веб-проект, и пусть VS сделает всю работу за вас.
  • Отражатель - твой друг.Сравните сателлитные сборки, созданные вами и VS.
  • Если ваше веб-приложение ориентировано на ASP.NET 2.0, вам следует использовать Resgex и AL, поставляемые с .net 2.0.Откройте сборки в Reflector и проверьте «ссылки».Он должен ссылаться на mscorlib версии 2.0.
  • Если вы развертываете свое веб-приложение с помощью проекта веб-развертывания, убедитесь, что пространство имен ресурсов в ваших сателлитных сборках является правильным.Опять же, сравните с тем, что создает VS.В моем случае я использовал не тот инструмент для создания файла designer.cs, потому что хотел, чтобы они были доступны из другой сборки.Убедитесь, что вы используете GlobalResourceProxyGenerator.В противном случае пространства имен не будут совпадать, и код развертывания не сможет найти ваш ресурс.Пространство имен в файле designer.cs должно быть просто «Ресурсы», а не «XXXX.App_GlobalResources»
0 голосов
/ 01 февраля 2011

Вы установили enableClientBasedCulture в true в глобализации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...