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" ( т.е. строка языка по умолчанию). Именно так в основном работает модель хаба и спицы.