Visual Studio 2010 не генерирует код разработчика (Resx), если файл локализован

Я только что встретил самое странное поведение в Visual Studio 2010, работая с файлами ресурсов Resx, и я просто не могу обернуть вокруг него голову.

Проблема заключается в следующем: Visual Studio не будет генерировать файл designer.cs для файла ресурсов с локализованным именем (например, resource.fr.resx), но он отлично работает для других файлов с простыми именами (например, resource.resx).

Вот моментальный снимок моей проектной настройки визуальной студии:

enter image description here

Как вы можете видеть, я просто сделал простой тест с тремя файлами ресурсов:

  • test.resx
  • test2.resx
  • test.fr.resx

Файлы designer.cs для test.resx и test2.resx генерируются просто отлично. Однако test.fr.designer.cs создается, но всегда пустым, независимо от того, что я делаю.

У меня проверено двойное и тройное: свойство настраиваемого инструмента правильно установлено для локализованного файла. Все свойства одинаковы для всех файлов (я использую PublicResxFileCodeGenerator, но я получаю такое же поведение, если я устанавливаю модификатор доступа для внутреннего и использую ResxFileCodeGenerator).

Примечание. Я заметил, что при создании файла ресурсов Visual Studio обычно по умолчанию модифицирует модификатор доступа на "Внутренний". Однако при создании локализованного файла ресурсов (resource.fr.resx) по умолчанию используется значение "Нет генерации кода". Просто обнаружил, что интересно отметить, поскольку это доказывает, что Visual Studio по какой-то причине обрабатывает локализованный файл по-разному.

- > Что-то мне здесь не хватает? Я был бы признателен, если кто-нибудь узнает об этом, это сводит меня с ума.

Ответ 1

Пока я не рассматривал эту конкретную проблему, у меня было множество других проблем с файлами .resx. Иногда Visual Studio иногда работает с ошибкой (обработка файлов ".resx" ), и я официально сообщил об этом некоторые из них в MSFT (поскольку это влияет на мою коммерческую программу локализации). В любом случае, вы обычно не должны именовать вещи таким образом. Это фактически нарушает правила локализации MSFT. По умолчанию языковые файлы обычно не имеют встроенного кода языка, и по этой причине он может захлебываться. Мне нужно исследовать, но что вы должны делать, это создать "Test.resx" , который имеет файл "Designer.cs", а затем "Test.fr.resx" , а это не так. Все языковые строки по умолчанию помещаются в "Test.resx" и соответствующие французские строки в "Test.fr.resx" . В коде вы получаете доступ к строго типизированному имени, найденному в "Test.Designer.cs", а строка, которую вы вернете, будет языковой линией по умолчанию, если вы не установите "System.Threading.Thread.CurrentThread.CurrentUICulture" в "fr", Затем вы вернете французскую версию строки из "Test.fr.resx" , если она там не найдена (там нет перевода), и в этом случае вы вернете резервную строку из "Test.resx" ( т.е. строка языка по умолчанию). Именно так в основном работает модель хаба и спицы.