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

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

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

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

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

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

Edit:

После копания и ручного редактирования файла .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, он вернет reset к Version=4.0.0.0.

В настоящее время я собираюсь установить Target Framework в .NET Framework 3.5 Client Profile, чтобы Visual Studio не переопределяла версию. Это обходное решение и означает, что я не могу использовать возможности .NET 4.0.

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Элементы управления, в которых был привязан DataSource, влияют на это поведение. В моем случае я получил некоторые DataSets как DataSource для Grids, Combos...

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

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

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

Ответ 4

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

Ответ 5

Я просто удалил строки в файле.RESX

<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken="" />