代码之家  ›  专栏  ›  技术社区  ›  Richard Slater

如何识别加载程序集的框架?

  •  2
  • Richard Slater  · 技术社区  · 15 年前

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

    <?xml version=“1.0”encoding=“utf-8”?gt;
    <配置>
    启动;
    <supportedRuntime version=“2.0.50727”/>
    </startup>
    </configuration>
    < /代码> 
    
    

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

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


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

    安装.NET 4之后,可以解决上的问题:

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

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

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


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

    3 回复  |  直到 15 年前
        1
  •  5
  •   Nicole Calinoiu    15 年前

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

    如果不想更改程序集代码,可以使用 Process Explorer 以查看运行时在进程中加载的DLL。clr版本可以从mscoree.dll的版本识别。

        2
  •  1
  •   Hans Passant    15 年前

    没有意义,一个针对clr版本2.0.50727的程序将不会自动与.NET 4.0一起运行。需要显式.config文件项。考虑到您的客户对.config文件的强大能力,这可能是她实际上做的事情,然后发现存在问题。

        3
  •  1
  •   Conrad Frix    15 年前

    正如妮可所说,过程探索者绝对是最简单的方法。您还可以使用windbg从完全内存转储中获取此信息。

    还要注意,使用4.0,您可以并排 CLR hosting . 在4.0之前,如果您不拥有您拥有的流程 no way of knowing what CLR was loaded . 这可能是你体验到你描述的行为的原因。

    推荐文章