12

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

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

ResX Тип файла System.Drawing.Point, System.Drawing, Version = 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.

Единственные расширения, которые Я установил (в соответствии с Менеджером Extension) являются:

  • Выделите все вхождения выделенного слова
  • 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, он вернет его обратно к Version=4.0.0.0.

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

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

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

+0

Вы сделали «PublicKeyToken = REMOVED» ИЛИ это точное сообщение об ошибке? Также там написано неправильно. – leppie

+0

Это я набираю его. Я отредактирую его и добавлю обратно. Никакого вреда для открытого ключа, который я предполагаю. –

+0

@Blair McMillan: Не ваше anyways :) – leppie

ответ

6

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

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

+0

Правда. Я не могу найти версию WinRes.exe версии 4.0 (средство Microsoft, предназначенное для подключения к VS). –

+0

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

3

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

+0

Это это не фактическое изменение, которое я сделал, но это заставило меня понять, что проблема связана с библиотекой с неправильной версией. – DCShannon

3

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

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

Так я открыл конструктор и it't говорит мне, что не может открыть из-за проблем с управлением по имени: BlaBla

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

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

0

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

Смежные вопросы