我有一个旧的dll文件,编译时使用的是.NET Framework,并且已经部署了。但是我不确定它是编译在哪个版本的.NET Framework上的。我想知道如何确定这个dll是针对哪个版本的.NET Framework进行编译的?我不能依赖源代码,因为我认为它已经升级到Visual Studio 2008并更改为.NET Framework版本3.5。
我有一个旧的dll文件,编译时使用的是.NET Framework,并且已经部署了。但是我不确定它是编译在哪个版本的.NET Framework上的。我想知道如何确定这个dll是针对哪个版本的.NET Framework进行编译的?我不能依赖源代码,因为我认为它已经升级到Visual Studio 2008并更改为.NET Framework版本3.5。
$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,Version = v4.5.2
您可以使用ILDASM...
ildasm.exe C:\foo.dll /metadata[=MDHEADER] /text /noil
查看输出中的“元数据部分”。它应该像这样:
元数据部分:0x424a5342,版本:1.1,额外信息:0,版本长度:12,版本:v4.0.30319
通过“version”标签可以查看.NET Framework版本。在以上示例中,版本是4.0.30319。
// 元数据部分:0x424a5342,版本:1.1,额外信息:0,版本长度:12,版本号:v4.0.30319
- PeterXDim a As Assembly = Reflection.Assembly.ReflectionOnlyLoadFrom("C:\path\assembly.dll")
Dim s As String = a.ImageRuntimeVersion
只是简单地
var tar = (TargetFrameworkAttribute)Assembly
.LoadFrom("yoursAssembly.dll")
.GetCustomAttributes(typeof(TargetFrameworkAttribute)).First();
GetCustomAttributes
没有TargetFrameworkAttribute
。但是ImageRuntimeVersion
可以正常工作,它检索二进制文件构建的正确CLR。我需要它构建的目标框架版本。 - Shameel Mohamed使用ILDASM反编译它,并查看被引用的mscorlib版本(应该在顶部附近)。