确定.NET Framework版本的DLL

我有一个旧的dll被编译的.NET框架和部署。 我不确定它被编译的.NET框架的版本。 我想知道如何我可以确定哪个版本的.NET框架这个DLL编译? 我不能相信源代码,因为我相信它已经升级到Visual Studio 2008,并更改为.NET框架版本3.5。

加载到reflection器 ,看看它参考?

例如:

在这里输入图像说明

在PowerShell中,您可以使用以下命令来获取目标运行时:

$path = "C:\Some.dll" [Reflection.Assembly]::ReflectionOnlyLoadFrom($path).ImageRuntimeVersion 

我从Ben Griswold的回答中将其适用于PowerShell。

如果您想知道在Visual Studio中指定的目标框架版本,请使用:

 $path = "C:\Some.dll" [Reflection.Assembly]::ReflectionOnlyLoadFrom($path).CustomAttributes | Where-Object {$_.AttributeType.Name -eq "TargetFrameworkAttribute" } | Select-Object -ExpandProperty ConstructorArguments | Select-Object -ExpandProperty value 

你应该得到类似的东西

.NETFramework,版本= v4.5.2

dotPeek是一个很好的(免费)工具来显示这些信息。

如果你有几个问题得到reflection器,那么这是一个很好的select。

在这里输入图像说明

你可以使用ILDASM …

 ildasm.exe C:\foo.dll /metadata[=MDHEADER] /text /noil 

你有几个select:要从程序的代码中获得它,使用Assembly.ImageRuntimeVersion:

 Dim a As Assembly = Reflection.Assembly.ReflectionOnlyLoadFrom("C:\path\assembly.dll") Dim s As String = a.ImageRuntimeVersion 

在命令行中,从v2.0开始,如果双击“MANIFEST”并查找“元数据版本”,ildasm.exe将显示它。 确定图像的CLR版本

使用ILSpy http://ilspy.net/

开源,免费,绝对是一个select,因为现在reflection器是付费的。

通过Visual Studio的另一种select,添加到任何项目的DLL的引用,然后右键单击新的引用,然后单击属性,您可以看到您在运行时版本中查找:

在这里输入图像说明

用ILDASM反编译它,看看被引用的mscorlib的版本(应该在顶部)。

只是简单

 var tar = (TargetFrameworkAttribute)Assembly .LoadFrom("yoursAssembly.dll") .GetCustomAttributes(typeof(TargetFrameworkAttribute)).First();