运行csi.exe时看到以下错误:
System.BadImageFormatException:无法加载文件或程序集“ xyz.dll”或其依赖项之一。不是有效的Win32应用程序。(来自HRESULT的异常:0x800700C1)
在Visual Studio中进行编译会发出警告,但编译并运行不会出现问题:
正在构建的项目“ MSIL”的处理器体系结构与引用“ xyz”,“ x86”的处理器体系结构之间不匹配。这种不匹配可能会导致运行时失败。请考虑通过Configuration Manager更改项目的目标处理器体系结构,以使项目和引用之间的处理器体系结构保持一致,或者依赖具有与项目目标处理器体系结构相匹配的处理器体系结构的引用来进行依赖。
所以看来我在运行csi.exe时必须指定处理器体系结构?怎么做?
您的程序集xyz.dll被编译为仅在32位进程中运行。这可能是有充分理由的(例如,加载另一个仅具有32位代码的本机dll)。在这种情况下,请使用以下解决方案。也可能没有充分的理由。在这种情况下,请更改xyz.dll的目标平台。
程序CSI.exe(C#交互式编译器)的构建方式使其可以在32位版本的Windows上作为32位可执行文件运行,而在64位版本的Windows上作为64位可执行文件运行。
当以64位可执行文件运行时,它将无法加载仅在32位进程中运行的程序集(例如xyz.dll)。
为了更改此设置,您可以创建一个CSI.exe版本,即使在64位版本的Windows上也可以作为32位进程运行。跟着这些步骤:
使用两个可执行文件的正确路径执行以下命令
C:\ Path \ To \ CorFlags.exe / 32bit + / force C:\ Path \ To \ csi32.exe
现在,您可以使用csi32.exe代替csi.exe来运行需要仅在32位版本中可用的程序集/ dll的脚本。