Pregunta

Tengo un viejo DLL que fue compilada en el marco .NET y desplegado. No estoy seguro de qué versión del marco .NET que fue compilado en contra. Me pregunto cómo puedo determinar la versión del marco .NET esta DLL que fue compilada? No puedo confiar en el código fuente, porque creo que se ha actualizado a Visual Studio 2008 y cambiado a la versión 3.5 de .NET Framework.

¿Fue útil?

Solución

Reflector y ver lo que las referencias?

por ejemplo:

introducir descripción de la imagen aquí

Otros consejos

En PowerShell se puede utilizar el siguiente para obtener el tiempo de ejecución de destino:

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

Adapté esto a partir de PowerShell Ben Griswold respuesta .

Si quieres saber la versión del marco de destino especificado en Visual Studio, utilice:

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

Usted debe obtener algo como

  

.NETFramework, versión = v4.5.2

dotPeek es un gran herramienta (libre) para mostrar esta información.

Si usted está teniendo algunos problemas en hacerse con reflector entonces esta es una buena alternativa.

introducir descripción de la imagen aquí

Puede utilizar ILDASM .. .

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

y de verificación de la sección de metadatos 'en la salida. Sería algo así:

  sección

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

Usted tiene algunas opciones: conseguirlo mediante programación, desde el código administrado, el uso 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, a partir de v2.0, ildasm.exe lo mostrará si hace doble clic en "manifiesto" y el aspecto de "versión de metadatos". La determinación de CLR versión de una imagen

http://ilspy.net/

de código abierto, libre, sin duda una opción ya que ahora se paga reflector.

Simplemente

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

Sin embargo, otra opción a través de Visual Studio, añadir una referencia a la DLL para cualquier proyecto, a continuación, haga clic en la nueva referencia y haga clic en Propiedades, se puede ver lo que está buscando en la versión de tiempo de ejecución:

introducir descripción de la imagen aquí

Descompilar con ILDASM, y vistazo a la versión de mscorlib que se está haciendo referencia (debe ser más o menos a la derecha en la parte superior).

Si usted tiene DotPeek de JetBrains, se puede ver en Assembly Explorer.

¿puede usted ver captura de pantalla? im no :(

La expansión de las respuestas aquí, esto puede explotar si hay un ensamblado dependiente. Si tienes suerte y sabes donde las depende (o incluso más suerte, es en la GAC), entonces esto puede ayudar ...

using System.Reflection;
using System.Runtime.Versioning;
// ...
{
    AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += new ResolveEventHandler(CurrentDomain_ReflectionOnlyAssemblyResolve);
    var asm = System.Reflection.Assembly.LoadFrom(@"C:\Codez\My.dll");
    var targetFrameAttribute = asm.GetCustomAttributes(true).OfType<TargetFrameworkAttribute>().FirstOrDefault();
    targetFrameAttribute.Dump();
}

Assembly CurrentDomain_ReflectionOnlyAssemblyResolve(object sender, ResolveEventArgs args)
{
    var name = args.Name;

    if (name.StartsWith("Depends"))
        return System.Reflection.Assembly.ReflectionOnlyLoadFrom(@"C:\Codez\Depends.dll");

    return System.Reflection.Assembly.ReflectionOnlyLoad(args.Name);
}

Referencia: https: // weblog .west-wind.com / mensajes / 2006 / Dec / 22 / Reflexión-en-problema-Asambleas

Me escribió rápidamente esta aplicación de consola de C # para hacer esto:

https://github.com/stuartjsmith/binarydetailer

Basta con pasar un directorio como parámetro y que hará todo lo posible para decirle el marco neto para cada DLL y EXE allí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top