【问题标题】:How to set platform architecture for csi.exe如何为 csi.exe 设置平台架构
【发布时间】:2017-03-04 21:10:43
【问题描述】:

我在运行 csi.exe 时看到以下错误:

System.BadImageFormatException:无法加载文件或程序集 'xyz.dll' 或其依赖项之一。不是有效的 Win32 应用。 (HRESULT 异常:0x800700C1)

在 Visual Studio 中编译会引发警告,但编译和运行没有问题:

项目的处理器架构不匹配 正在构建的“MSIL”和参考的处理器架构 “xyz”、“x86”。这种不匹配可能会导致运行时失败。请 考虑更改项目的目标处理器架构 通过配置管理器对齐处理器 您的项目和参考之间的体系结构,或采取 依赖于具有匹配处理器架构的参考 您项目的目标处理器架构。

看来我必须在运行 csi.exe 时指定处理器架构?该怎么做?

【问题讨论】:

  • 不太清楚你的设置是什么。您在 VS 中构建项目和使用 CSI 之间有什么关系?什么是 xyz.dll? xyz.dll 是否包含需要在 x86 模式下运行的代码?

标签: c# csi


【解决方案1】:

您的程序集 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 位进程运行。请按以下步骤操作:

  1. 找到文件 csi.exe,在同一目录中制作一份副本,并将副本重命名为 csi32.exe。您可以在类似于“C:\Program Files (x86)\MSBuild\14.0\Bin\csi.exe”的路径中找到 csi.exe
  2. 找到文件 CorFlags.exe。您可以在类似于“C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools\CorFlags.exe”的路径中找到 CorFlags.exe
  3. 以管理员身份打开命令行窗口。
  4. 使用两个可执行文件的正确路径执行以下命令

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

您现在可以使用 csi32.exe 代替 csi.exe 来运行需要仅在 32 位版本中可用的程序集/dll 的脚本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 2020-05-27
    • 2011-09-17
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多