确定dll的.NET Framework版本

mpe*_*row 124 .net .net-framework-version

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

Swo*_*gan 108

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

$path = "C:\Some.dll"
[Reflection.Assembly]::ReflectionOnlyLoadFrom($path).ImageRuntimeVersion
Run Code Online (Sandbox Code Playgroud)

我根据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
Run Code Online (Sandbox Code Playgroud)

你应该得到类似的东西

.NETFramework,版本= v4.5.2

  • @BHSPitMonkey只有4个运行时版本:1.0,1.1,2.0和4.0..NET 3.0和3.5编译为CLR 2.0版.https://msdn.microsoft.com/en-us/library/bb822049(v=vs.110).aspx (4认同)
  • 这个答案是最有帮助的.2003年之后的所有Windows操作系统都支持Powershell.一个shell提供即时反馈,不需要任何其他应用支持,因为许多其他答案表明.非常适合dll的"一次性"检查.你是男人@swoogan. (3认同)
  • 我为使用 v3.5 的 TargetFrameworkVersion 构建的 DLL 执行此操作,它返回 v2.0.50727。我错过了什么? (2认同)
  • 此脚本仅提供 RuntimeVersion,问题是关于 TargetFrameworkversion。对于针对 2.0、3.0、3.5 编译的所有程序集,此脚本将运行时版本显示为 2.0.0.0 (2认同)
  • 对我来说,ReflectionOnlyLoadFrom返回ImageRuntimeVersion,但零个CustomAttributes。使用LoadFrom而不是ReflectionOnlyLoadFrom可以得到预期的结果。任何原因?PS版本5.1.16299.251 CLRVersion 4.0.30319.42000 (2认同)
  • 看起来我的程序集没有“TargetFrameworkAttribute”。它确实有“ImageRuntimeVersion”。但我想要为其构建二进制文件的目标框架版本。可能出什么问题了? (2认同)

wal*_*wal 65

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

如果您在掌握Reflector时遇到一些问题,那么这是一个很好的选择.

在此输入图像描述

  • 仅供参考,由于一个问题,我从DotPeek切换到JustDecompile:如果选择"特定版本=假",则DotPeek显示空版本,JustDecompile显示正确版本.让我值得转换. (4认同)

Par*_*ice 51

将它加载到Reflector中,看看它引用了什么?

例如:

在此输入图像描述

  • 您还可以使用免费的开源替代[ILSpy](http://ilspy.net/)作为[注释](http://stackoverflow.com/a/25123275/2822719)由Kat Lim Ruiz. (2认同)

Jos*_*ola 45

你可以使用ILDASM ......

ildasm.exe C:\foo.dll /metadata[=MDHEADER] /text /noil
Run Code Online (Sandbox Code Playgroud)

并检查输出中的"元数据部分".它会是这样的:

元数据部分:0x424a5342,版本:1.1,额外:0,版本len:12,版本:v4.0.30319

'version'标记将告诉您.NET Framework版本.在上面的例子中它是4.0.30319

  • 我在这找什么?这是否意味着.NET 4.0?`//元数据部分:0x424a5342,版本:1.1,额外:0,版本len:12,版本n:v4.0.30319` (3认同)

Ben*_*old 15

您有几个选项:要以编程方式从托管代码获取它,请使用Assembly.ImageRuntimeVersion:

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

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


ste*_*nly 14

简单地说

var tar = (TargetFrameworkAttribute)Assembly
          .LoadFrom("yoursAssembly.dll")
          .GetCustomAttributes(typeof(TargetFrameworkAttribute)).First();
Run Code Online (Sandbox Code Playgroud)


Kat*_*uiz 14

使用ILSpy http://ilspy.net/

开源,免费,绝对是一个选项,因为现在反射器已经支付.


lin*_*ney 11

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

在此输入图像描述

  • 这个答案表明你可以添加对你在PC上找到的任何ol'.NET DLL的引用,并且对应于该DLL的引用下的项目的一个属性是"运行时版本". (6认同)

lep*_*pie 8

使用ILDASM对其进行反编译,并查看正在引用的mscorlib的版本(应该在顶部非常正确).


ced*_*bal 7

最简单的方法:只需在任何文本编辑器中打开 .dll。看最后一行: 在此处输入图片说明

  • 但是,这对于 .Net 3.0 之前构建的 dll 不起作用 (2认同)

Sam*_*Sch 6

如果您有JetBrains 的dotPeek,则可以在 Assembly Explorer 中看到它。

你能看到这个截图吗? 我不是:(