Visual Studio создает недопустимые файлы Resx - PullRequest
12 голосов
/ 09 ноября 2010

У меня довольно простая форма, которую я хочу локализовать (у меня на самом деле немало в этом проекте, у них у всех одна и та же проблема).Когда я устанавливаю для свойства формы Localizable значение true, Visual Studio создает файл .resx с именем формы (как и следовало ожидать).Однако проблема в том, что он добавляет в файл .resx все виды вещей, которые больше ничего не может открыть (например, WinRes, ResEx, Simple Resx Editor, RESX Editor и т. Д.).

Я получаю ошибку:

Файл ResX Тип System.Drawing.Point, System.Drawing, Версия = 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 (которую я не использую в этом проекте)

Диспетчер надстроек не показывает надстроек.

Редактировать:

После копания и ручного редактирования файла .resx проблема фактически связана со строкой 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.

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

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

Редактировать 2: Оказалось, что когда я пытался использовать инструмент Microsoft WinRes.exe, я фактически запускал версию .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

Ответы [ 5 ]

6 голосов
/ 09 ноября 2010

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

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

5 голосов
/ 13 ноября 2013

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

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

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

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

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

3 голосов
/ 27 февраля 2011

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

0 голосов
/ 02 декабря 2018

Я только что удалил эти строки в моем файле .RESX

<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken="" />
0 голосов
/ 19 февраля 2015

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

...