Visual Studio создает недопустимые файлы Resx

у меня есть довольно простая форма, которую я хочу локализовать (у меня на самом деле довольно много в этом проекте, у всех есть одна и та же проблема). Когда я устанавливаю свойство формы Localizable для true Visual Studio генерирует .resx файл с именем формы (как и следовало ожидать). Проблема, однако, в том, что он добавляет всевозможные вещи .файл resx, что ничто другое не может открыть (например, программа winres, ResEx, простой редактор resx файл, редактор resx и т. д.).

ошибка, которую я получаю:

система типов файлов ResX.Рисунок.балльная система.Чертеж, версия=4.0.0.0, культура=нейтральная, PublicKeyToken=b03f5f7f11d50a3a данные в строке 125, позиция 4 не могут быть расположены. Линия 127, позиция 5. не может быть разобран.

строка 124 до 127-это:

<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="lblUsername.Location" type="System.Drawing.Point, System.Drawing">
  <value>26, 24</value>
</data>

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

единственные расширения, которые я установил (согласно менеджеру расширений):

  • выделите все вхождения выбранного слова
  • Лента Microsoft для WPF (которую я не использую в этом проекте)

менеджер надстроек не показывает надстройки.

Edit:

после копания и ручного редактирования проблема на самом деле с линией 124 <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> конкретно Version=4.0.0.0.

если я установлю это в Version=2.0.0.0 тогда все работает, как в Visual Studio, так и во всех внешних программах. Проблема в том, что если я что-то редактирую в Visual Studio, он сбросит его обратно в Version=4.0.0.0.

в настоящее время я собираюсь установите целевой фреймворк в профиль клиента .NET Framework 3.5 чтобы Visual Studio не переопределяла версию. Это обходной путь и означает, что я не могу использовать функции .NET 4.0.

Я прав, предполагая, что в .NET Framework есть ошибка или каждая из них .редактор resx там (включая Microsoft).

Edit 2: Оказалось, что когда я пытался использовать WinRes от Microsoft.exe tool я фактически запускал версию .NET Framework 3.5, так как версия .NET Framework 4.0 не устанавливается.

мне пришлось установить .NET Framework 4.0 SDK из http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/winsdk_web.exe и тогда я смог отредактировать .resx файлы с WinRes.exe 4.0

4 ответов


Visual Studio создает правильный *.файлы resx. Проблема в том, что инструменты, которые вы пытаетесь использовать, были созданы для предыдущей версии спецификации. Вот почему ваш обходной путь работает.

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


в рамках .resx файл, найдите первую строку в кодировке base64. Конец должен быть "j00LjAuMC4w" (что означает .net 4.0). Попробуйте изменить это на "j0yLjAuMC4w" (что означает .net 2.0). Работать на меня. Благодаря Luis Mack at http://connect.microsoft.com/VisualStudio/feedback/details/532584/error-when-compiling-resx-file-seems-related-to-beta2-bug-5252020#


иногда в определенных случаях конструктор Windows forms аварийно завершает работу во время проверки формы с помощью *.файлы resx.

элементы управления, к которым был присоединен источник данных, зависят от этого поведения. В моем случае я получил некоторые наборы данных в качестве источника данных для сеток, комбо...

поэтому я открыл конструктор, и он не говорит мне, что не может открыть из-за проблемы с элементом управления с именем: blabla

после проверки конструктора-файла я узнал, что ничего нет неправильно с контролем, это просто *.resx файл, указывающий на неправильный источник, потому что Я рефакторингу набор данных. Так что the *.resx не обновился из-за этого рефакторинга.

Я открыл *.resx файл и просто искал идентификатор элемента управления и нашел код, закодированный Base64. удаление значения внутри блока без удаления тегов объемного звучания устранит проблему для этого элемента управления, как конструктор windows forms автоматическое обновление и чтение отсутствующего содержимого в *.файл resx.


эта ошибка отображается, когда компилятор потерял ссылку на какой-либо объект или когда вы изменили важное свойство этого объекта, например, если у вас есть сетка в форме all setup (это означает, что вы используете набор данных в качестве источника данных для выполнения вашей сетки), и вы меняете имя своего набора данных против потерянной этой ссылки, он принесет вам это сообщение.