Как установить архитектуру платформы для csi.exe

Я вижу следующую ошибку при запуске csi.exe:

System.BadImageFormatException: не удалось загрузить файл или сборку 'xyz.dll' или одну из ее зависимостей. не является приложением Win32. (Исключение из HRESULT: 0x800700C1)

Компиляция в Visual Studio вызывает предупреждение, но компилируется и запускается без проблем:

Произошло несоответствие между процессорной архитектурой строящегося проекта "MSIL" и эталонной архитектурой процессора "xyz", "x86". Это несоответствие может привести к сбоям во время выполнения. Рекомендуется изменить архитектуру целевого процессора вашего проекта с помощью Configuration Manager, чтобы согласовать архитектуры процессора между вашим проектом и ссылками, или взять зависимость от ссылок с архитектурой процессора, которая соответствует целевой архитектуре процессора вашего проекта.

Таким образом, кажется, я должен указать архитектуру процессора при запуске csi.exe? Как это сделать?

1 ответ

Решение

Ваша сборка xyz.dll скомпилирована для запуска только в 32-битном процессе. Это может быть по уважительной причине (например, загрузка другой собственной библиотеки DLL, доступной только с 32-битным кодом). В этом случае используйте решение, представленное ниже. Это также может быть без уважительной причины. В этом случае измените целевую платформу xyz.dll.


Программа CSI.exe (C# Interactive Compiler) построена таким образом, что она будет работать как 32-битный исполняемый файл в 32-битной версии Windows, и она будет работать как 64-битный исполняемый файл в 64-битной версии Windows.

При работе в качестве 64-битного исполняемого файла он не сможет загрузить сборку, созданную для запуска только в 32-битном процессе (например, в xyz.dll).


Чтобы изменить это, вы можете создать версию CSI.exe, которая работает как 32-битный процесс даже в 64-битной версии Windows. Следуй этим шагам:

  1. Найдите файл csi.exe, сделайте его копию в том же каталоге и переименуйте копию в csi32.exe. Вы можете найти csi.exe по пути, аналогичному "C:\Program Files (x86)\MSBuild\14.0\Bin\csi.exe"
  2. Найдите файл CorFlags.exe. Файл CorFlags.exe можно найти по пути, аналогичному "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools\CorFlags.exe"
  3. Откройте окно командной строки от имени администратора.
  4. Выполните следующую команду, используя правильные пути для двух исполняемых файлов

    C:\Path\To\CorFlags.exe /32bit+ /force C:\Path\To\csi32.exe

Теперь вы можете использовать csi32.exe вместо csi.exe для запуска сценариев, для которых требуются сборки / библиотеки, доступные только в 32-битных версиях.

Другие вопросы по тегам