【问题标题】:Unable to load assembly on XP 64bit无法在 XP 64 位上加载程序集
【发布时间】:2010-12-14 14:45:32
【问题描述】:

我使用Any CPU 选项编译了一个.NET 应用程序。此 .NET 应用程序使用封装 C++ 调用的非托管 dll(托管包装器)。此 .NET 包装器位于 GAC 中。

当我运行 .NET 应用程序时,它在 XP 32 位上运行良好。但是当我在 XP 64 位上运行它时,它会失败并给出以下异常:

无法加载文件或程序集“Dll 名称、版本、Culture=neutral、PublicKeyToken”或其依赖项之一。

我该如何解决这个问题?

【问题讨论】:

    标签: c# .net 64-bit 32-bit


    【解决方案1】:

    您需要使用 x86 CPU 选项。如果您知道您的非托管依赖项之一是 32 位,那么您需要使用 CPU 的 x86 选项构建您的解决方案。这确保即使在 64 位操作系统上,您的应用程序也将在 32 位进程中运行。

    这是必需的,因为它不可能将 32 位编译代码加载到 64 位进程中。

    【讨论】:

    • 是否任何 CPU 选项都不够用?
    • 不,不会的。 “任何 CPU”选项允许构建将在 32 到 64 位上运行的单个程序集。在 64 位操作系统上运行时,.NET 将启动 64 位进程并使用 64 位版本的 JIT 编译器。因此,当该代码随后尝试加载仅 32 位的 dll 时,您会收到错误消息。您必须通过指定 x86 明确指出 .NET 应仅在 32 位进程中运行代码,而不管其运行在什么操作系统上。
    【解决方案2】:

    你可以在Microsoft Connect website找到一些解释

    【讨论】:

      【解决方案3】:

      您需要确保您的非托管 dll 也支持 64 位并且在搜索路径内。

      【讨论】:

        猜你喜欢
        • 2012-02-14
        • 1970-01-01
        • 2019-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多