Поделиться через


MSBuild 4.0 или Visual Studio 2010 может не скомпилировать 32-разрядное приложение, предназначенное для .NET Framework 3.5, 3.0 или 2.0 на машине x64.

Эта статья поможет вам решить проблему, при которой MSBuild 4.0 или Microsoft Visual Studio 2010 не может скомпилировать 32-разрядное приложение, предназначенное для .NET Framework 3.5, 3.0 или 2.0 на машине x64.

Исходная версия продукта: Visual Studio 2010
Исходный номер базы знаний: 2028833

Симптомы

Вы создаете приложение, ориентированное на конфигурацию x86, на машине x64 с Visual Studio 2010. Проект содержит файл ресурсов, ссылающийся на 32-битную сборку. Выбрана целевая рабочая среда 3.5, 3.0 или 2.0.

Возможно, вы получите следующую ошибку:

Form1.resx(161,5):error RG0000: не удалось загрузить файл или сборку "<file_name>" или одну из его зависимостей. Была сделана попытка загрузить программу с неверным форматом. Строка 161, позиция 5.

Диагностический журнал сборки показывает, что задача GenerateResource не удается.

Причина

Resgen.exe в <system_drive>:\Program Files (x86)\Microsoft SDKs\Windows\vx.x\bin, который является частью Windows SDK, помечен как MSIL, поэтому он будет работать как 64-разрядный процесс. Он попытается загрузить 32-битную сборку и потерпит неудачу.

Решение

Чтобы обойти эту проблему, вам необходимо выполнить следующие действия:

  1. Закройте все экземпляры Visual Studio.

  2. В подпапке Visual Studio Tools откройте командную строку Visual Studio с повышенными привилегиями (2010) (используя параметр Запуск от имени администратора). Измените каталог на <system_drive>:\Program Files (x86)\Microsoft SDKs\Windows\v<x.xx>\bin\.

  3. Выполните команду:

    corflags /32bit+ ResGen.exe /force
    
  4. Откройте <project_name.csproj> в блокноте.

  5. Добавьте свойство <ResGenToolArchitecture>Managed32Bit</ResGenToolArchitecture> в раздел PropertyGroup. Сохраните и закройте файл csproj.

Дополнительная информация

Если вы хотите создать файл .resx, который ссылается на 64-разрядную сборку, нацеленную на v3.5, v3.0 или v2.0, вам, возможно, придется перед этим отменить этот обходной путь.

CorFlagsCorFlags.exe (средство преобразования CorFlags) может помочь вам.