2

一位用户向我们报告说,安装 .NET 4 后可以解决我们应用程序中的一些奇怪行为:

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

我不知道如果您没有指定程序集,它可能会加载到更高但兼容的版本中。

是否可以识别可执行文件正在执行的框架?在运行时?还是通过一些外部过程?我想确认是这种情况,用户体验不是其他问题的结果。


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

进程浏览器

4

3 回答 3

5

在程序集的运行代码中,您可以使用 System.Environment.Version 静态属性来确定它正在执行的 CLR 版本。

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

于 2010-08-18T18:52:02.160 回答
1

没有意义,针对 CLR 版本 2.0.50727 的程序不会自动与 .NET 4.0 一起运行。需要一个明确的 .config 文件条目。鉴于您的客户在 .config 文件方面的实力,这可能是她实际上所做的事情,然后发现有问题。

于 2010-08-18T19:07:00.490 回答
1

正如 Nicole 所说,Process Explorer 绝对是最简单的方法。您还可以使用 WindDBG 从完整内存转储中获取此信息。

另请注意,在 4.0 中,您可以同时获得CLR 托管。在 4.0 之前,如果您不拥有该进程,您就无法知道加载了哪些 CLR。这可能是您体验到您所描述的行为的原因。

于 2010-08-18T19:13:57.907 回答