我有一个集会。有没有办法检测用于构建该程序集的.NET版本?
答案 0 :(得分:2)
您可以使用Assembly.ImageRuntimeVersion。根据{{3}},默认情况下,它设置为用于构建程序集的CLR的版本。虽然显然可以改变。
这是一个字符串属性,因此您必须对其进行一些字符串比较。
答案 1 :(得分:1)
我不相信。使用.NET 2.0构建.NET 1.1应用程序相对比较困难,虽然这并非不可能 - 所以如果你检查了引用的应用程序的mscorlib版本,你可以得到一个“可能准确”的图片,它是用1.1还是2.0构建的+。
在使用VS2008时,你还需要问自己你想要的答案,但是要针对.NET 2.0的目标。您真的对使用哪个版本的编译器感兴趣吗?不同版本的编译器的输出之间可能存在一些特征差异。额外的功能也可以放弃它 - 如果应用程序是用C#编写的,目标是.NET 2.0,你可以找到类似于源代码中的匿名类型生成的类型。当然,这依赖于首先使用的语言功能......
为什么你需要知道这个,出于兴趣?
答案 2 :(得分:1)
对于框架< 2.0和框架4.0,引用的mscorlib的版本将为您提供框架版本。对于框架2.0 - 3.5,检查是否存在对System.Core或其他3.5+程序集以及PresentationCore或任何其他3.0+程序集的任何引用。如果您没有这些,则应该定位2.0。
答案 3 :(得分: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
}
}
}
编辑:我不确定我是否理解你想要的东西。
答案 4 :(得分:0)
你的问题的一部分问题是.NET在版本增加时没有改变代码方面做得很好。我的意思是mscorlib在.NET 4.0中与.NET 1.1中的相同。
但我同意Jon Skeet的隐含问题:你为什么需要知道?这纯粹是出于兴趣,因为我认为这对你来说无关紧要。