Eu tenho um arquivo executável e gostaria de saber quais versões do .NET framework esse arquivo precisa ser iniciado.
Existe uma maneira fácil de encontrar essas informações em algum lugar?
.net
version
executable
Sam
fonte
fonte
Respostas:
Acho que o mais próximo que você pode obter com segurança é determinar qual versão do CLR é necessária. Você pode fazer isso usando ILDASM e olhando para o nó "MANIFESTO" ou Refletor e olhando para a visualização de desmontagem do nó "Application.exe" como IL. Em ambos os casos há um comentário que indica a versão do CLR. No ILDASM, o comentário é "// Metadata version" e no Reflector o comentário é "Target Runtime Version".
Aqui estão alguns exemplos de um aplicativo .NET WinForms chamado WindowsFormsApplication1.exe:
ILDASM:
Refletor:
Você também pode examinar a lista de assemblies referenciados e procurar a referência com o maior número de versão.
Novamente, usando ILDASM olhando para os dados do nó "MANIFESTO":
E usando o refletor, olhando para a dissambly (ainda como IL) para cada referência listada:
Ao localizar a referência com os metadados da versão mais alta, você pode determinar de qual versão do Framework essa referência veio, o que indicaria que você precisa da mesma versão do Framework instalada para que o aplicativo seja executado. Dito isso, eu não trataria isso como 100% confiável, mas não acho que vai mudar tão cedo.
fonte
Usando o Notepad , três décadas de idade, 200kb de tamanho, ferramenta pré-instalada:
notepad appname.exe
,F3
até.NET Framework,version=vX.Y
aparecerv2.
... ainda 100 vezes mais fácil do que instalar gigabytes de ferramentas de análise de ponto-net e estúdios de lixo.Qualquer outro editor / espectador pode abrir binários também, como o Notepad ++ ou grande texto / hex telespectador do TotalCommander Lister .
fonte
Uma abordagem mais simplificada seria usar o dotPeek e ver o que aparece na árvore.
Veja o painel de propriedades:
fonte
Agora você pode usar ILSpy para examinar a estrutura de destino de uma montagem. Depois de carregar a montagem, clique na raiz do nó da montagem, e você pode encontrar as informações na declaração TargetFramework:
fonte
Você pode usar o código,
Assembly.ImageRuntimeVersion
mas olhando para o arquivo provavelmente a melhor coisa a fazer seria usar o reflector e ver qual versão domscorlib
está sendo referenciada.Edit: Ainda melhor seria usar ildasm , abrir sua montagem e visualizar o manifesto da montagem. A primeira linha do manifesto informará a versão exata do CLR para a qual o assembly foi criado.
fonte
Você pode usar uma ferramenta chamada CorFlags.exe. Ele existe desde o .NET 2.0 e tenho certeza de que está incluído no Windows SDK 7.0. Por padrão (no Windows XP Pro), ele é instalado em C: \ Arquivos de programas \ Microsoft SDKs \ Windows \ v7.0A \ bin \ CorFlags.exe. Forneça a ele o caminho do arquivo para um módulo gerenciado (sem quaisquer outros sinalizadores de linha de comando) para exibir suas informações de cabeçalho, que incluem a versão.
Lembre-se de que este utilitário foi projetado para modificar o cabeçalho PE32 de um módulo, portanto, não use nenhum dos sinalizadores até ler a documentação com atenção.
fonte
Na linha de comando:
find "Framework" MyApp.exe
fonte
Ou você pode apenas descobrir qual referência de System.Core ele possui. Isso informará a versão do .NET Framework que este aplicativo está usando. Para 2.0, a versão de System.Core será 2.0.xxx.xxx. Para 3.5, a versão será 3.5.xxx.xxx, etc.
fonte
Você pode obter a versão .NET de um arquivo no Windows usando o Powershell. O seguinte script;
fornece o seguinte resultado;
Observe que o resultado extraiu a versão .NET para os arquivos exe nessa pasta, mas também fará o mesmo para uma dll.
fonte
No Linux / OSX / unix, você pode usar:
fonte