如何识别程序集加载到哪个框架?
报告给我们的用户,在我们的应用一些奇怪的行为可以在安装.NET 4后得到解决:如何识别程序集加载到哪个框架?
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v2.0.50727" />
</startup>
</configuration>
我不知道,如果你没有指定一个组件它可能会在加载更高,但兼容版本。
是否有可能确定一个可执行文件正在执行的框架?在运行时?或通过一些外部过程?我想确认情况是这样,用户体验并不是其他问题的结果。
Process Explorer中说EVEMon下的2.0上运行,我倾向于怀疑问题是环境:
使用汇编的运行代码中,你可以使用该系统。 Environment.Version静态属性来确定它正在执行的CLR版本。
如果您不想更改汇编代码,则可以使用Process Explorer来查看运行时在进程中加载的DLL。 CLR版本可以从mscoree.dll的版本中识别。
Process Explorer说2.0,很奇怪。 – 2010-08-19 19:26:50
没有意义,针对CLR 2.0.50727版本的程序不会自动运行.NET 4.0。一个明确的.config文件条目是必需的。考虑到你的客户使用.config文件的实力,这可能是她事实上的事情,然后发现有麻烦。
然而,2/3/3.5目标组件可以加载到4.0进程中。 – Richard 2010-08-18 20:43:07
由于Nicole说Process Explorer绝对是最简单的方法。您还可以使用WindDBG从全内存转储中获取此信息。
另请注意,与4.0你并排CLR hosting。在4.0之前,如果你没有拥有你的过程,你有no way of knowing what CLR was loaded。这可能是你体验到你所描述的行为的原因。
任何关心分享downvote是什么? – 2010-08-19 19:21:21
我不知道,但我会给你+1,因为Evemon是一个如此有用的工具。 – 2010-08-19 19:36:04
感谢Scott,不要忘记EVEMon是用C#编写的,所以如果你想一起来看看我们的代码,看看你有没有什么可以随意添加的感觉 :-p – 2010-08-19 20:23:28