Pergunta

Ter um .NET assembly, como posso detectar se ele foi construído para .NET CF ou um quadro completo?

Foi útil?

Solução

É muito simples:

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

Outras dicas

A melhor aposta seria para pegar os do C incluem cabeçalho do arquivo chamado winnt.h, encontrada em seu padrão VS Professional (geralmente C: \ Program Files \ Microsoft Visual Studio 9.0 \ VC \ include) e de lá, carregue o. EXE em um Dumper PE de algum tipo, ou usar um Hex Dumper. 1. Veja o cabeçalho DOS a partir de 0x0 offset. 2. O cabeçalho NT imediatamente seguir após o cabeçalho DOS. 3. The Machine ID é o que você está procurando. O ID de máquina para a fibrose cística (ARM / MIPS) seria 0x010C / 0x0169, respectivamente. Se você deseja investir mais tempo em bisbilhotando .. ler, 4. Então você tem o diretório de dados imediatamente após após NT cabeçalho. É a entrada de diretório de dados 15 é a indicação de se o .exe é .NET ou não. Se for 0, então é um .EXE nativa.

Combinadas então você pode dizer se o executável é .NET e para o CF.

aqui para mais detalhes.

Espero que isso ajude, Cumprimentos, Tom.

Eu prefiro usar CCI ou Cecil para analisar seus metadados e confira qual o conjunto de referências que depende.

http://ccimetadata.codeplex.com/

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top