【问题标题】:use .Net 2.0 dll in .net 4.0 wpf application在 .net 4.0 wpf 应用程序中使用 .Net 2.0 dll
【发布时间】:2011-03-22 19:33:37
【问题描述】:

我正在尝试在面向 .Net 4 框架的 WPF 应用程序中添加对 .Net 2.0 DLL 的引用。

我在 app.config 文件中添加了<startup useLegacyV2RuntimeActivationPolicy="true">。 WPF 应用程序构建良好,但在尝试访问 .Net 2.0 DLL 时在运行时收到 BadImageFormatException。

“试图加载格式不正确的程序”

这适用于新的测试 WPF 项目,但不适用于我的应用程序。我的应用程序使用实体框架和 MEF。这些技术是否会导致问题?

有什么想法吗?

编辑:已解决

根据下面 Alois 的评论,我的主应用程序针对“任何 CPU”,而 DLL 的目标是 32 位。

<startup useLegacyV2RuntimeActivationPolicy="true"> 不是必需的

【问题讨论】:

  • 会不会是程序集是为 32 位编译的,而您正在将其加载到 64 位进程中,反之亦然?使用 .NET Framework SDK 中的 corflags 进行检查。
  • @Alois:谢谢。我没有想到这一点。我的应用程序针对“任何 CPU”。将其更改为 x86 可以使其正确加载。

标签: c# .net-4.0 clr


【解决方案1】:

当您必须使用 useLegacyV2RuntimeActivationPolicy 属性时,您正在使用以 C++/CLI 编写的混合模式程序集,并以 CLR 版本 2.0.50727 为目标。这样的程序集包含托管代码和本机机器代码。在您的情况下,该机器代码是 32 位的,您不能在 64 位进程中运行它。这就是异常的含义。需要在您的 EXE 项目中将 Platform 目标设置为 x86。

【讨论】:

  • 是的。请参阅问题中的上述 cmets。已经发现我在 64 位进程中加载​​ 32 位代码。此外,不需要 useLegacyV2RuntimeActivationPolicy。这只是 32 位的问题。我能够删除 useLegacyV2RuntimeActivationPolicy="true"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多