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