Vra

Ek het 'n ou dll wat saamgestel is teen die NET raamwerk en ontplooi. Ek is nie seker watter weergawe van die NET raamwerk is saamgestel teen. Ek wonder hoe ek watter weergawe van die NET raamwerk hierdie dll saamgestel teen kan bepaal? Ek kan nie vertrou dat die bron-kode, want ek glo dit is opgegradeer na Visual Studio 2008 en verander na NET raamwerk weergawe 3.5.

Was dit nuttig?

Oplossing

Laai dit in Reflector en sien wat dit verwysings?

byvoorbeeld:

betree beeld beskrywing hier

Ander wenke

In PowerShell kan jy die volgende om die teiken runtime kry gebruik:

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

Ek aangepas hierdie na PowerShell van Ben Griswold se antwoord .

As jy wil hê dat die teiken raamwerk weergawe wat in Visual Studio weet, gebruik:

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

Jy moet iets soos te kry

  

.NETFramework, version = v4.5.2

dotPeek is 'n groot (gratis) instrument om hierdie inligting te wys.

As jy 'n paar probleme om in die hande van Reflector dan is dit 'n goeie alternatief.

betree beeld beskrywing hier

Jy kan gebruik ILDASM .. .

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

en tjek vir die "Metadata artikel 'in die uitset. Dit sou so iets wees:

  

Metadata artikel: 0x424a5342, weergawe 1.1, ekstra: 0, weergawe Len:   12, weergawe: v4.0.30319

Die "weergawe" tag sal jou vertel die NET Framework weergawe. In die voorbeeld hierbo is dit 4.0.30319

Jy het 'n paar opsies: Om dit programmaties kry, uit beheer kode, gebruik Assembly.ImageRuntimeVersion:

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

Van die command line, begin in v2.0, ildasm.exe sal dit wys as jy dubbel-kliek op "MANIFEST" en kyk vir "Metadata weergawe". Die bepaling van 'n Beeld se CLR Weergawe

Gebruik ILSpy http://ilspy.net/

open source, gratis, beslis 'n opsie aangesien nou reflector betaal.

Net eenvoudig

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

Nog 'n opsie via Visual Studio, voeg 'n verwysing na die DLL om enige projek, dan regs te klik op die nuwe verwysing en klik Properties, kan jy sien wat jy is op soek na in Runtime weergawe:

 betree beeld beskrywing hier

afbreek dit met ILDASM, en kyk na die weergawe van mscorlib wat word gekla (moet pretty much heel bo).

As jy DotPeek van JetBrains, jy kan dit sien in Assembly Explorer.

 Kan jy sien hierdie kiekie? im nie :(

Die uitbreiding van die antwoorde hier, dit kan op te blaas as daar 'n afhanklike gemeente. As jy gelukkig is en jy weet waar die afhanklike (of selfs gelukkiger, dit is in die GAC) dan kan dit help ...

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

Reference: https: // weblog .west-wind.com / poste / 2006 / Desember / 22 / Refleksie-op-Probleem-Assemblies

Ek het vinnig die C # konsole app om dit te doen:

https://github.com/stuartjsmith/binarydetailer

slaag eenvoudig 'n gids as 'n parameter en dit sal sy bes doen om jou te vertel die netto raamwerk vir elke dll en exe in daar

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top