Frage

Mit einer .NET-Assembly, wie kann ich erkennen, ob es für .NET CF oder einen vollen Rahmen gebaut wurde?

War es hilfreich?

Lösung

Es ist ganz einfach:

public enum AssemblyType
{
    CompactFramework,
    FullFramework,
    NativeBinary
}

public AssemblyType GetAssemblyType(string pathToAssembly)
{
    try
    {
        Assembly asm = Assembly.LoadFrom(pathToAssembly);
        var mscorlib = asm.GetReferencedAssemblies().FirstOrDefault(a => string.Compare(a.Name, "mscorlib", true) == 0);
        ulong token = BitConverter.ToUInt64(mscorlib.GetPublicKeyToken(), 0);

        switch (token)
        {
            case 0xac22333d05b89d96:
                return AssemblyType.CompactFramework;
            case 0x89e03419565c7ab7:
                return AssemblyType.FullFramework;
            default:
                throw new NotSupportedException();
        }
    }
    catch (BadImageFormatException)
    {
        return AssemblyType.NativeBinary;
    }
}

Andere Tipps

Der beste Weg, die C der Include-Datei-Header genannt winnt.h greifen würde, in Ihrem Standard-VS Professional zur (in der Regel C: \ Programme \ Microsoft Visual Studio 9.0 \ VC \ include) und von dort laden die. EXE in einen PE-Dumper von einer Art, oder verwenden Sie einen Hex Dumper. 1. Betrachten Sie die DOS-Header von Offset 0x0. 2. Die NT-Header würden unmittelbar nach den DOS-Header folgen. 3. Die Geräte-ID ist das, was Sie suchen. Die ID-Maschine für CF (ARM / MIPS) wäre 0x010C / 0x0169, respectively. Wenn Sie in Stochern mehr Zeit investieren wollen .. lesen Sie weiter, 4. Dann haben Sie das Datenverzeichnis unmittelbar nach nach NT-Header. Es ist das 15. Datenverzeichniseintrag ist die Angabe, ob das .EXE .NET ist oder nicht. Wenn es 0 ist, dann ist es eine native .EXE.

In Kombination zusammen können Sie dann sagen, ob die ausführbare .NET und für die CF ist.

Schauen Sie hier für weitere Details.

Hope, das hilft, Freundliche Grüße, Tom.

ich eher CCI oder Cecil verwende seine Metadaten zu analysieren und prüfen, welchen Satz von Referenzen es hängt davon ab.

http://ccimetadata.codeplex.com/

http://www.mono-project.com/Cecil

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top