Проблемы с файлами RESX на VS2010, ориентированными на фреймворк 3.5

Вот история, с которой я недавно столкнулся, и возможный ответ (?) Я просто хотел поделиться этой информацией, потому что я еще не мог найти ее в stackru.

Я обновил свое решение с VS2008, WinXP, 32bit до VS2010, Win7, 64bit.

Когда я делаю изменения в WinForms, которые генерируют новые файлы RESX, или обновляю файлы RESX, у меня возникают проблемы.

Сборка Debug с VS2010 не была проблемой. Однако для режима Release я должен использовать процесс подписи с задержкой. Теперь этот процесс выдает ошибки в новых файлах RESX, созданных с помощью VS2010. (Снова обратите внимание, что старые файлы RESX НЕ показывают это поведение)

(Цель CoreResGen) Search.resx(176,5): ошибка RG0000: Не удалось загрузить файл или сборку xxx.Controls, версия =1,5 0, культура = нейтральная, PublicKeyToken=7acfcc7eabace048'или одна из ее зависимостей. Проверка строгого имени не удалась. (Кроме HRESULT: 0x8013141A) Строка 176, позиция 5.

Вот часть информации, которую я нашел в Интернете

http://blogs.msdn.com/b/visualstudio/archive/2010/06/19/resgen-exe-error-an-attempt-was-made-to-load-a-program-with-an-incorrect-format.aspx

Мне было интересно, если другие люди столкнулись с этим и какой обходной путь они следовали? Никакого обходного пути не будет означать ожидание выхода VS2010 SP1.

К сожалению, я использую сторонние сборки, которые могли быть скомпилированы как 32-битные. (Я не контролирую их процесс сборки)

- 8/11/2010 Некоторая дополнительная информация.

Сам элемент управления не подписан и не подписан с задержкой. Но элемент управления использует компонент из сборки с подписью с задержкой. Обе сборки находятся в одном решении.

Когда я изменяю ассемблерную сборку на целевой фреймворк 4.0, проблема решается. Когда я нацеливаюсь на 3.5 рамки, мы получаем ошибку.

1 ответ

Проблема, с которой мы столкнулись, была также связана с ImageList внутри файла *.resx (открывается в коде, а не в дизайнере):

<data name="imageList1.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
    <value>
        [bunch of binary data here]
    </value>
</data>

Мы подтвердили это, только удалив <data /> тег, связанный с ImageList (см. выше) и затем удаляем ссылки в конструкторе элемента управления:

//initialize
this.imageListSuperHeroes = new System.Windows.Forms.ImageList(this.components);

//control that references the ImageList
this.btnAwesome.ImageKey = "superman.gif";
this.btnAwesome.ImageList = this.imageListSuperHeroes;

Добавьте ссылки на изображения (используйте отдельные изображения!) Элемента управления из "файла ресурсов проекта", а не из "Локального ресурса", и обновите ссылки, которые вы удалили из форм.

this.btnAwesome.Image = global::PMPPlus.Properties.Resources.Superman;

Это исправило это для нас, и, надеюсь, это поможет вам двигаться в правильном направлении. Если нет, то покопайтесь вокруг *.resx, чтобы увидеть, какой плохой <data /> облажался

Ссылка по теме: http://connect.microsoft.com/VisualStudio/feedback/details/566131/error-in-resx-file-when-adding-imagelist

Они предложили некоторые обходные пути, которые не соответствовали нашим потребностям:

  • Ориентация на другую платформу и платформу
  • Используйте corflags, чтобы прикрутить ваш каталог C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin!

Наша установка

  • Старая среда: Windows XP 32-разрядная
  • Новая среда: Windows 7 64-битная
  • Общая настройка: VS2010 + Целевая платформа: 3.5 + Целевая платформа: x86
Другие вопросы по тегам