我有一个非常复杂的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.
有什么方法可以看到加载了什么吗?
答案 0 :(得分:4)
好吧,我放弃并从启动开始逐行执行代码,直到我点击模块加载语句。不用多谢VS2010糟糕的调用堆栈,多亏了无端的断点,这是我对一个现在已弃用的StrongName.h函数的引用,我用它来验证我们的程序集。
.NET 4现在使用MetaHost.h和ICLRStrongName函数。
真的需要成为编译器警告。
答案 1 :(得分:3)
检查解决方案中每个项目的目标框架
另外,请检查对象浏览器的“我的解决方案”视图,确保没有看到mscorlib [2.0.0.0]
。
您也可能引用了为.Net 2.0编译的单独DLL。