Domanda

Ho una vecchia dll che è stato compilato contro il framework .NET e implementato. Non sono sicuro di quale versione del framework .NET è stato compilato contro. Mi chiedo come posso determinare la versione di .NET framework questa dll è stato compilato contro? Non posso fidarmi il codice sorgente perché credo che è stato aggiornato a Visual Studio 2008 e modificato per framework .NET versione 3.5.

È stato utile?

Soluzione

riflettore e vedere quello che i riferimenti?

Ad esempio:

entrare descrizione dell'immagine qui

Altri suggerimenti

In PowerShell è possibile utilizzare il seguente per ottenere il runtime di destinazione:

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

mi sono adattato a questo PowerShell dal di Ben Griswold risposta .

Se vuoi conoscere la versione framework di destinazione specificata in Visual Studio, uso:

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

Si dovrebbe ottenere qualcosa di simile

  

.NETFramework, Version = v4.5.2

dotPeek è un grande (gratuito) strumento per mostrare queste informazioni.

Se si hanno alcuni problemi entrare in possesso di riflettore allora questa è una buona alternativa.

entrare descrizione dell'immagine qui

È possibile utilizzare ILDASM .. .

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

e di controllo per la sezione 'Metadati' in uscita. Sarebbe qualcosa di simile:

  sezione

Metadata: 0x424a5342, Versione: 1.1, extra: 0, versione len:   12, versione: v4.0.30319

Il tag 'versione' vi dirà la versione di .NET Framework. Nell'esempio sopra è 4.0.30319

Hai alcune opzioni: per ottenere a livello di codice, dal codice gestito, l'uso Assembly.ImageRuntimeVersion:

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

Dalla riga di comando, a partire dal v2.0, ildasm.exe mostrerà se si fa doppio clic su "PALESE" e cercare "la versione metadati". determinazione di un'immagine CLR versione

http://ilspy.net/

open source, libero, sicuramente un'opzione dal momento che ora riflettore viene pagato.

Basta semplicemente

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

Ancora un'altra opzione tramite Visual Studio, aggiungere un riferimento alla DLL a qualsiasi progetto, poi tasto destro del mouse sul nuovo riferimento e fare clic su Proprietà, è possibile vedere ciò che stai cercando in versione runtime:

entrare descrizione dell'immagine qui

Decompile con ILDASM, e un'occhiata alla versione di mscorlib che viene fatto riferimento (dovrebbe essere più o meno a destra in alto).

Se avete DotPeek da JetBrains, si può vedere in Assembly Explorer.

Riesci a vedere questo screenshot? im non :(

Ampliando le risposte qui, questo può far saltare in aria se c'è un assembly dipendente. Se siete fortunati e si sa dove le è dipendente (o anche più fortunato, è nel GAC), allora questo può aiutare ...

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);
}

Riferimento: https: // blog .west-wind.com / messaggi / 2006 / Dic / 22 / Riflessione-on-Problem-Assemblee

ho scritto in fretta questo C # console app per fare questo:

https://github.com/stuartjsmith/binarydetailer

È sufficiente passare una directory come parametro e che farà del suo meglio per dire la net framework per ogni dll e exe in là

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top