Как установить архитектуру платформы для 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. Следуй этим шагам:
- Найдите файл csi.exe, сделайте его копию в том же каталоге и переименуйте копию в csi32.exe. Вы можете найти csi.exe по пути, аналогичному "C:\Program Files (x86)\MSBuild\14.0\Bin\csi.exe"
- Найдите файл CorFlags.exe. Файл CorFlags.exe можно найти по пути, аналогичному "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools\CorFlags.exe"
- Откройте окно командной строки от имени администратора.
Выполните следующую команду, используя правильные пути для двух исполняемых файлов
C:\Path\To\CorFlags.exe /32bit+ /force C:\Path\To\csi32.exe
Теперь вы можете использовать csi32.exe вместо csi.exe для запуска сценариев, для которых требуются сборки / библиотеки, доступные только в 32-битных версиях.