2008-12-05 81 views

回答

2

您可以使用Assembly.ImageRuntimeVersion。根据MSDN docs,默认情况下,它被设置为用于构建程序集的CLR版本。虽然显然它可以改变。

它是一个字符串属性,所以你必须做一些字符串比较。

+1

所以推测这可能会区分1.1和2.0,但只不过是(直到4.0出来)? – 2008-12-05 09:22:53

1

我不这么认为。使用.NET 2.0构建.NET 1.1应用程序相对困难,但这不是不可能的 - 因此,如果您检查了引用的应用程序的mscorlib版本,则可能会得到“很可能准确”的图片,说明它是使用1.1还是2.0构建的+。

你还需要问自己在使用VS2008时想要什么样的答案,但是要针对.NET 2.0的目标进行构建。你真的对编译器的哪个版本感兴趣吗?编译器不同版本的输出之间可能存在一些特征差异。额外的功能也可以让它消失 - 如果应用程序是以.NET 2.0为目标编写的,则可以找到类似于源代码中的匿名类型的类型。当然,这首先依赖于语言功能......

为什么你需要知道这一点,出于兴趣?

0

你也许可以使用System.Reflection来检查系统引用程序集的版本号。

using System; 
using System.Reflection; 

class Module1 
{ 

    public static void CheckReferencedAssemblies(string assemblyPath) 
    { 
     Assembly a = Assembly.Load(assemblyPath); 

     foreach (AssemblyName an in a.GetReferencedAssemblies()) 
     { 
      // Check an.Version for System assemblies 
     } 
    } 
} 

编辑:我不知道我已经明白你想要什么。

0

问题的一部分与您的问题是,.NET已经做了很好的工作,不会随着版本的增加而改变代码。我的意思是,mscorlib将在.NET 4.0中与.NET 1.1中的相同。

但我有点同意Jon Skeet的暗示问题:你为什么需要知道?它纯粹是出于兴趣,因为我认为这对你没有关系。

1

对于框架< 2.0和框架4.0,引用的mscorlib的版本将为您提供框架版本。对于框架2.0 - 3.5,请检查是否存在任何对System.Core或其他3.5+程序集以及PresentationCore或任何其他3.0+程序集的引用。如果你没有这些,它应该瞄准2.0。

相关问题