【问题标题】:Visual Studio: Error loading DLLVisual Studio:加载 DLL 时出错
【发布时间】:2012-03-26 22:01:12
【问题描述】:

我有一个 C# dll 并想将其导入 stdafx.h(JNI 的另一个 DLL): 导入“C:\Users\Marcus Tik\Documents\Visual Studio 2010\Projects\DotNETSpy\DotNETSpy\bin\Release\DotNETSpy.dll” -> Visual Studio 说:“加载 DLL 时出错。”

然后我使用了 Dependency Walker,它显示错误:“找到具有不同 CPU 类型的模块。”

C# DLL 支持不同的 CPU 类型不是标准吗? 我怎样才能解决我的问题? 提前谢谢!

【问题讨论】:

  • Depends 非常不适合托管程序集。在描述您真正想要完成的任务之前,您无法得到更好的答案。
  • 您是否在使用#import - 即您是否尝试导入在 C# 中定义的 COM 对象?

标签: c# visual-studio java-native-interface dependency-walker


【解决方案1】:

如果您想检查 .Net 程序集的依赖关系,最好使用 CheckAsm 而不是 Dependency Walker(至少如果您想查看托管代码依赖项,这可能是您想要的)。

您可以将托管的 .Net 库编译为“AnyCPU”,因此您通常不必担心 32 位/64 位问题。但也许您的 DLL 依赖于非托管 DLL,如果非托管库是例如,这可能会导致麻烦。 32 位,而您正尝试在 64 位机器上运行它。

【讨论】:

  • 我尝试下载 CheckASM,但 IE 显示:“CheckASM 不经常下载,可能会损坏您的 PC。”
  • 真的吗?随便下载就行了。它不会加热你的电脑。这只是一般的警告信息。
  • 刚刚用 Firefox 下载了 CheckASM -> 一切正常 CheckASM 报告我的 C# DLL 没有错误。
  • 尝试明确地为 x86 构建,这可能会解决一些问题!
  • 我在 Visual Studio 2010 Express 上选择了 Win32,但仍然出现错误。
【解决方案2】:

将 Build 选项更改为 x86,您可能正在尝试将 32 位操作系统 dll 导入 64 位环境。

查看此链接:Access x86 COM from x64 .NET

【讨论】:

    【解决方案3】:

    如果你的操作系统是 32 位,并且 dll 是专门为 64 位编译的,我想你会得到这个结果。

    【讨论】:

      【解决方案4】:

      试图使调试版本工作是毫无意义的,您无法部署 CRT 库的调试版本。请注意,Dependency Walker 在现代可执行文件上的gas 用完了,它对清单一无所知。它总是将它们显示为丢失,即使它们不是。

      这种情况的两种解决方案是将其用作私有程序集或静态链接。 但请记住,这仅用于调试,您不应分发这些文件,因为这违反了 Microsoft 条款。

      【讨论】:

        猜你喜欢
        • 2022-01-01
        • 2010-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-07
        • 1970-01-01
        相关资源
        最近更新 更多