Pregunta

Al tener un ensamblado .NET, ¿cómo puedo detectar si se creó para .NET CF o un marco completo?

¿Fue útil?

Solución

Es bastante simple:

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

Otros consejos

La mejor opción sería tomar el encabezado del archivo de inclusión de C llamado winnt.h, que se encuentra en su VS Professional estándar (generalmente C: \ Archivos de programa \ Microsoft Visual Studio 9.0 \ VC \ include) y desde allí, cargue el. EXE en un volquete PE de algún tipo, o use un volquete hexagonal. 1. Mire el DOS HEader desde el offset 0x0. 2. El Encabezado de NT seguiría inmediatamente después del encabezado de DOS. 3. La ID de la máquina es lo que está buscando. La ID de máquina para CF (ARM / MIPS) sería 0x010C / 0x0169, respectivamente. Si deseas invertir más tiempo en hurgar ... sigue leyendo, 4. Luego tiene el directorio de Datos inmediatamente después del Encabezado de NT. Es la entrada de directorio de datos 15 es la indicación de si el .EXE es .NET o no. Si es 0, entonces es un .EXE nativo.

Combinados juntos, puede saber si el ejecutable es .NET y para el CF.

Busque aquí para obtener más detalles.

Espero que esto ayude, Atentamente, Tom.

Prefiero usar CCI o Cecil para analizar sus metadatos y verificar de qué conjunto de referencias depende.

http://ccimetadata.codeplex.com/

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

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