13

У меня есть веб-проект, запущенный в VS 2008. У нас есть некоторые глобальные файлы ресурсов (* .resx) в папке App_GlobalResources для интернационализации. Все это работает как очарование моей локальной установки IIS из VS.Глобальные ресурсы не могут быть разрешены после публикации Веб-сайта в VS2008

Но когда я публикую свой веб-проект в локальной файловой системе и/или на другом сервере, все ресурсы больше не могут быть найдены. Поэтому я думаю, что предварительная компиляция каким-то образом искажает материал. Когда я вызываю pre-compiled web, я получаю сообщение об ошибке, что объект ресурса с ключом xyz не может быть найден, хотя его можно было найти раньше.

Я проверил с помощью отражателя .NET, если материал ресурса внес его в *. DLL. Все эти идентификаторы есть (bin/Web.dll, bin/< культура > /Web.resources.dll). Идентификаторы загружаются следующим образом:

<asp:MenuItem NavigateUrl="~/OrderNew.aspx" Text="<%$ Resources:MyProject, MenuNewOrder %>" Value="NewOrder"> 

Файлы ресурсов называются MyProject.resx и MyProject. < культура > .resx где < культура > соответствует конкретной культуре (то есть MyProject.de-DE.resx).

Любые идеи, как это решить?

Я очень ценю любую помощь.

Благодаря

Edit:

Если скопировать папку App_GlobalResources вручную на выходе, ресурсы могут быть загружены в обычном режиме. Поэтому я действительно задаюсь вопросом, что такое предварительная компиляция.

Меня все еще интересует вопрос «правильный путь».

+0

Ваше решение, к которому я наконец пришел, - нам, похоже, нужно использовать «встроенный ресурс» для компиляции для доступа к ресурсам из кода, но сами файлы в/app_globalresources для доступа к ним с помощью <% $ Ресурсы: Класс, ResKey%>. Похоже, что должен быть лучший способ. – Ripside

ответ

12

У меня была такая же проблема, и мне пришлось внести два изменения в свойства файла resx.

  1. Установить «Build Action» для содержания
  2. Установите функцию «Копировать в выходной каталог» Копировать всегда
+2

Это решает проблему копирования материала вручную, хотя для меня достаточно Копировать, если для вас это достаточно. – Scoregraphic

2

(я не могу прокомментировать предыдущий ответ ... нет репутации еще ...?)

Это не решило мою проблему, я боюсь.

При попытке решения «Контент/копировать всегда» я получаю исключение, говоря, что ссылка во время компиляции не работала.

Почему asp.net нужен файл resx при компиляции ресурсов !?

+0

Даже если у вас нет репутации, вы всегда можете комментировать по своему вопросу –

1

У меня была эта ошибка при копировании файла ресурсов из другого проекта.

Я решил это, удалив глобальный ресурс, добавив новый ресурс и скопировав элементы data из старого в новый XML.

Это приводит следующие параметры для ресурса:

<ItemGroup> 
    <Content Include="App_GlobalResources\Global.resx"> 
     <Generator>GlobalResourceProxyGenerator</Generator> 
     <LastGenOutput>Global.Designer.cs</LastGenOutput> 
    </Content> 
    </ItemGroup> 
+0

Святое дерьмо, спасибо. Мне жаль, что я не смог бы это сделать. – EKW

0

Я была такая же проблема. Всякий раз, когда я публиковал свое приложение на Small Business Server (SBS2008), он застрял в контрольной строке, но на самом деле это мета-ресурс. Без вышеупомянутого решения помогите мне.

Я потратил 6 часов на то, чтобы понять это, наконец, я понял, что это произошло, когда я сделал некоторую папку cleenup на сервере. В начале все мои приложения были расположены на E: в папках, но потом я создал папки с именами, указывающими приложения ApplicationPools, и я перемещаю туда соответствующие приложения.

Я не знаю, как IIS7 на моем SBS ищет файлы ресурсов, но определенно это было проблемой. Когда я вернусь со своими приложениями к E: снова все стало работать как шарм.