Determine la versión de .NET Framework para dll

Tengo un dll antiguo que se compiló en .NET framework y se implementó. No estoy seguro de qué versión del .NET framework se compiló. Me pregunto cómo puedo determinar qué versión del .NET framework compiló este dll. No puedo confiar en el código fuente porque creo que se ha actualizado a Visual Studio 2008 y se ha cambiado a .NET Framework versión 3.5.

Cargarlo en Reflector y ver a qué se refiere?

por ejemplo:

enter image description here

En PowerShell puede usar lo siguiente para obtener el tiempo de ejecución de destino:

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

Lo adapté a PowerShell de la respuesta de Ben Griswold .

Si desea conocer la versión de marco de destino especificada en Visual Studio, use:

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

Deberías obtener algo como

.NETFramework, Version = v4.5.2

dotPeek es una gran herramienta (gratuita) para mostrar esta información.

Si tiene algunos problemas para hacerse con Reflector, esta es una buena alternativa.

enter image description here

Puedes usar ILDASM …

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

y verifique la ‘sección de metadatos’ en la salida. Sería algo como esto:

Sección de metadatos: 0x424a5342, versión: 1.1, extra: 0, versión len: 12, versión: v4.0.30319

La etiqueta ‘versión’ le dirá la versión de .NET Framework. En el ejemplo anterior, es 4.0.30319

Tiene algunas opciones: para obtenerlo mediante progtwigción, desde código administrado, use Assembly.ImageRuntimeVersion:

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

Desde la línea de comandos, comenzando en v2.0, ildasm.exe lo mostrará si hace doble clic en “MANIFEST” y busca la “versión de metadatos”. Determinar la versión CLR de una imagen

Utilice ILSpy http://ilspy.net/

open source, free, definitivamente una opción ya que ahora se paga el reflector.

Otra opción más a través de Visual Studio, agregar una referencia a la DLL a cualquier proyecto, luego hacer clic derecho en la nueva referencia y hacer clic en Propiedades, puede ver lo que está buscando en la versión Runtime:

enter image description here

Descompílelo con ILDASM, y observe la versión de mscorlib a la que se hace referencia (debería estar prácticamente en la parte superior).

Así de simple

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