Подтвердить что ты не робот

Изменение пространства имен файлов (resx) и модификатора доступа

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

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

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

Спасибо за вашу помощь.

4b9b3361

Ответ 1

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

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

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

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

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

Update:

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

Ответ 2

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

Ответ 3

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

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

Source

Ответ 4

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

Ответ 5

Модификаторы доступа к файлам ресурсов находятся в .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>