2

我有一个非常复杂的 WPF 和 C++/CLI 应用程序,它是使用 .NET 3.5 构建的。我们已迁移到 4.0 以利用 WPF 的优势,因此我们在解决方案中的所有项目都针对 4.0。

在只有 4.0(和 MSVC++ 2010 [和 2008])的 XP 机器上运行我们的应用程序时,将弹出一个错误对话框并显示以下消息:

“要运行此应用程序,您首先必须安装以下 .NET 框架版本之一:2.0.50727”

如果我使用 .NET 4.0 安装 .NET 2.0,我的应用程序将运行。

任何人都知道如何调试加载程序集以了解发生了什么?

更新

我刚刚发现了 VS2010 中的“模块”窗口,并且在调试器中运行时还观察了输出窗口中的模块加载事件。我可以清楚地看到我的应用程序正在运行一个 .NET 2.0 模块。

'Kudu.exe': Loaded 'C:\Windows\SysWOW64\WindowsCodecs.dll', Exports loaded.
'Kudu.exe': Loaded 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll', Exports loaded.
'Kudu.exe': Loaded 'C:\Windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5\msvcr80.dll', Exports loaded.

有什么办法可以查看加载了什么?

4

2 回答 2

4

好吧,我放弃了,从启动开始逐行遍历我的代码,直到我点击模块加载语句。不,感谢 VS2010 糟糕的调用堆栈,感谢无偿断点,这是我对一个现已弃用的 StrongName.h 函数的引用,我用它来验证我们的程序集。

.NET 4 now uses MetaHost.h and ICLRStrongName functions.

There REALLY needs to be a compiler warning about this.

于 2010-10-20T19:18:23.790 回答
3

检查解决方案中每个项目的目标框架。
此外,检查对象浏览器的我的解决方案视图并确保您没有看到mscorlib [2.0.0.0].

您也可能引用了为 .Net 2.0 编译的单独 DLL。

于 2010-10-19T16:48:28.017 回答