Изменение пространства имен файлов ресурсов (resx) и модификатора доступа - PullRequest
49 голосов
/ 26 августа 2009

В моем веб-проекте я использую 4 файла ресурсов в моей папке App_GlobalResources. Один из них (lang.resx) был создан до моего прихода на проект. Он имеет правильное пространство имен (WebApplication.App_GlobalResources) и модификатор доступа: public.

С другой стороны, три других файла ресурсов, которые я только что создал, имеют другое пространство имен (Resources) и модификатор доступа internal, и я не могу изменить его в форме файла ресурсов из Visual Studio, поскольку отключен. Если я попытаюсь изменить его непосредственно в файле designer.cs, изменения будут отменены при следующем сохранении файла.

Это не критичная ошибка, но другие разработчики могут ввести в заблуждение поиск других пространств имен и модификаторов доступа для файлов ресурсов, которые они будут использовать.

Ответы [ 5 ]

63 голосов
/ 14 сентября 2012

Быстрый ответ: просто откройте Свойства файла ресурса и измените Custom Tool Namespace на нужное вам пространство имен.
Все просто.

44 голосов
/ 24 сентября 2009

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

Когда я пытался следовать этой статье , я также наткнулся на эту проблему. После загрузки исходных файлов, как предложил автор, я заметил, что файл ресурса, который уже присутствовал, имел следующий класс в свойстве «Custom Tool»: «PublicResXFileCodeGenerator». Кроме того, свойство «Build Action» было установлено на «Embedded Resource», но я не уверен, является ли это частью проблемы.

Любой новый файл ресурса, который я создал, использовал пользовательский инструмент «GlobalResourceProxyGenerator». После перезаписи этого вышеупомянутым «PublicResXFileCodeGenerator», казалось, решил проблему, какой бы ни была реальная проблема.

Я также заметил, что текущий файл ресурсов был в формате "2.0", тогда как новые файлы были в формате "1.3". Это можно увидеть, открыв файл resx с помощью редактора XML (или используя «open with» из самой Visual Studio).

Я надеюсь, что вы можете заставить это работать так, хотя это не идеально. Вероятно, это проблема установки Visual Studio 2008 и SP1 или что-то в этом роде.

Обновление:

Эта запись в блоге также может помочь.

11 голосов
/ 02 июля 2012

Или вы можете изменить атрибут CustomTool (протестировано в VS2010).

Вам просто нужно открыть свойства файла файла ресурсов и измените «Пользовательский инструмент» с «GlobalResourceProxyGenerator» на «PublicResXFileCodeGenerator», который является инструментом по умолчанию для локального файлы ресурсов. Затем вы должны изменить «Build Action» на «Встроенный ресурс». Вы также можете назначить правильный инструмент Пространство имен типа «Ресурсы» для правильного доступа к файлу, но в этом нет необходимости ...

Источник

6 голосов
/ 26 августа 2009

Resx выбирает пространство имен в зависимости от пространства имен, указанного в конфигурации проекта Visual Studio. Обновите ваш проект, чтобы иметь правильное пространство имен, и resx должен его унаследовать (новые наверняка, не уверены, будут ли исправлены существующие - они должны).

4 голосов
/ 21 марта 2012

Модификаторы доступа к файлам ресурсов находятся в .csproj;

Прямое изменение файла .csproj должно обойти эту проблему.

Найдите элемент <Generator> и установите его значение в соответствии с примерами ниже:

Файл ресурсов с модификатором internal выглядит следующим образом:

<ItemGroup>
 <EmbeddedResource Update="resources.resx">
  <Generator>ResXFileCodeGenerator</Generator>
  <LastGenOutput>resources.Designer.cs</LastGenOutput>
 </EmbeddedResource>
</ItemGroup>

где файл ресурса с модификатором public выглядит следующим образом.

<ItemGroup>
 <EmbeddedResource Update="resources.resx">
  <Generator>PublicResXFileCodeGenerator</Generator>
  <LastGenOutput>resources.Designer.cs</LastGenOutput>
 </EmbeddedResource>
</ItemGroup>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...