2010-08-18 53 views
2

报告给我们的用户,在我们的应用一些奇怪的行为可以在安装.NET 4后得到解决:如何识别程序集加载到哪个框架?

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
    <supportedRuntime version="v2.0.50727" /> 
    </startup> 
</configuration> 

我不知道,如果你没有指定一个组件它可能会在加载更高,但兼容版本。

是否有可能确定一个可执行文件正在执行的框架?在运行时?或通过一些外部过程?我想确认情况是这样,用户体验并不是其他问题的结果。


Process Explorer中说EVEMon下的2.0上运行,我倾向于怀疑问题是环境:

Process Explorer

+0

任何关心分享downvote是什么? – 2010-08-19 19:21:21

+0

我不知道,但我会给你+1,因为Evemon是一个如此有用的工具。 – 2010-08-19 19:36:04

+0

感谢Scott,不要忘记EVEMon是用C#编写的,所以如果你想一起来看看我们的代码,看看你有没有什么可以随意添加的感觉 :-p – 2010-08-19 20:23:28

回答

5

使用汇编的运行代码中,你可以使用该系统。 Environment.Version静态属性来确定它正在执行的CLR版本。

如果您不想更改汇编代码,则可以使用Process Explorer来查看运行时在进程中加载​​的DLL。 CLR版本可以从mscoree.dll的版本中识别。

+0

Process Explorer说2.0,很奇怪。 – 2010-08-19 19:26:50

1

没有意义,针对CLR 2.0.50727版本的程序不会自动运行.NET 4.0。一个明确的.config文件条目是必需的。考虑到你的客户使用.config文件的实力,这可能是她事实上的事情,然后发现有麻烦。

+0

然而,2/3/3.5目标组件可以加载到4.0进程中。 – Richard 2010-08-18 20:43:07

1

由于Nicole说Process Explorer绝对是最简单的方法。您还可以使用WindDBG从全内存转储中获取此信息。

另请注意,与4.0你并排CLR hosting。在4.0之前,如果你没有拥有你的过程,你有no way of knowing what CLR was loaded。这可能是你体验到你所描述的行为的原因。