Pergunta

Se eu quiser executar uma aplicação .NET em uma máquina onde o .NET framework não está disponível;Existe alguma maneira de compilar o aplicativo em código nativo?

Foi útil?

Solução

A Microsoft tem um artigo que descreve como você pode Compilar MSIL para código nativo

Você pode usar Ngen.

O gerador de imagens nativo (NGEN.EXE) é uma ferramenta que melhora o desempenho dos aplicativos gerenciados.O NGEN.EXE cria imagens nativas, que são arquivos que contêm código de máquina compilado específico do processador e as instala no cache de imagem nativo no computador local.O tempo de execução pode usar imagens nativas do cache, em vez disso, usando o compilador just-in-time (JIT) para compilar a montagem original.

Infelizmente, você ainda precisa das bibliotecas do framework para executar seu programa.Não há nenhum recurso que eu conheça no SDK da estrutura MS .Net que permita compilar todos os arquivos necessários em um único executável

Outras dicas

RemoteSoft cria uma ferramenta que compila um aplicativo .NET em um pacote que pode ser executado sem o .NET instalado.Não tenho nenhuma experiência com isso:

Salamandra RemoteSoft

Eu testei vários deles e neste momento o único que suporta .NET 3.5 e também possui uma ótima pilha de virtualização é Xenocódigo Pós-construção

Com o ngen você ainda precisa ter o .NET framework instalado, mas usando uma ferramenta como tal, todo o seu código gerenciado é compilado em código nativo para que você possa implantá-lo em máquinas sem a presença do framework.

A Microsoft anunciou seu Visualização nativa do .NET isso permitirá executar aplicativos .NET sem ter o framework instalado.

Dê uma olhada: http://blogs.msdn.com/b/dotnet/archive/2014/04/02/announcing-net-native-preview.aspx

PERGUNTAS FREQUENTES: http://msdn.microsoft.com/en-US/vstudio/dn642499.aspx

Você pode baixar o Microsoft .NET Native para VS2013 aqui: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

Como algumas das outras respostas aqui mencionaram, você pode usar o .NET nativo ferramenta para compilar seu aplicativo em código de máquina nativo.Ao contrário dessas respostas, no entanto, vou explicar como para fazer isso.

Passos:

  1. Instale o CLI dotnet (interface de linha de comando), que faz parte da nova cadeia de ferramentas do .NET Core.Usaremos isso para compilar nosso aplicativo;você pode encontrar um bom artigo sobre isso aqui.

  2. Abra um prompt de shell e cd para o diretório do seu aplicativo.

  3. Digite isto:

    dotnet compile --native
    

É isso!Quando terminar, seu aplicativo será compilado em um único binário, assim:

Native compiled .NET Core EXE

Será um executável independente;nenhum PDBs, assemblies ou arquivos de configuração incluídos (viva!).


Alternativamente, se quiser um programa ainda mais rápido, você pode executar isto:

dotnet compile --native --cpp

Isso otimizará seu programa usando o gerador de código C++ (em oposição ao RyuJIT), para que seu aplicativo fique ainda mais otimizado para cenários AOT.

Você pode encontrar mais informações sobre isso na CLI dotnet Repositório GitHub.

Sim, usando Ngen, o gerador de imagens nativas.Há, no entanto, uma série de coisas que você precisa estar ciente:

  • Você ainda precisa do CLR para executar seu executável.
  • O CLR não otimizará dinamicamente seus assemblies com base no ambiente em que é executado (por exemplo,486 vs.586 vs.686, etc.)

Resumindo, só vale a pena usar o Ngen se precisar reduzir o tempo de inicialização da sua aplicação.

Você pode!No entanto, você está restrito ao .NET 1.1 (sem genéricos para você):Compilação Mono Ahead-Of-Time (AOT)

No entanto, isso significa que a compilação é realmente nativa, então você não será mais capaz de implantar um único assembly de bytecode, você precisará de um por plataforma.

Ele foi originalmente projetado porque não existe .NET ou Mono para iPhone, então foi assim que eles criaram o MonoTouch.

Você pode fazer isso usando a nova tecnologia de pré-compilação chamada .NET Native.Confira aqui: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

Atualmente está disponível apenas para aplicativos da Windows Store.Ele executa vinculação de componente único.Portanto, as bibliotecas do .NET Framework estão vinculadas estaticamente ao seu aplicativo.Tudo é compilado em assemblies nativos e IL não são mais implantados.Os aplicativos não são executados no CLR, mas em um tempo de execução simplificado e otimizado chamado Managed Runtime (Mrt.dll)

Conforme mencionado acima, o NGEN usou um modelo de compilação misto e contou com IL e JIT para cenários dinâmicos.O .NET Native não utiliza JIT, mas oferece suporte a vários cenários dinâmicos.Os autores de código precisariam utilizar Diretivas de tempo de execução para fornecer dicas ao compilador .NET Native sobre os cenários dinâmicos que eles desejam oferecer suporte.

Você pode usar ngen.exe para gerar uma imagem nativa mas você ainda precisa distribuir o código não nativo original e ele ainda precisa da estrutura instalada na máquina de destino.

O que não resolve o seu problema, na verdade.

A natureza do .NET é ser capaz de instalar aplicativos que foram compilados para MSIL e, em seguida, por JIT ou Ngen, o MSIL é compilado em código nativo e armazenado localmente em um cache.Nunca foi planejado gerar um .exe nativo verdadeiro que pudesse ser executado independentemente do framework .NET.

Talvez haja algum hack que faça isso, mas não parece seguro para mim.Existem muitas dinâmicas que exigem a estrutura, como:carregamento dinâmico de assembly, geração de código MSIL, etc.

Resposta de 2019:Usar pontonet/corert.Ele pode compilar projetos .NET Core em projetos independentes .exe arquivos.Sem dependências (exceto para bibliotecas de sistema como kernel32.dll).Aposto que é exatamente disso que o OP precisa.

Na página inicial do GitHub:

O compilador CoreRT pode compilar um aplicativo .NET Core gerenciado em um executável de arquivo único nativo (específico da arquitetura) que é fácil de implantar.Ele também pode produzir bibliotecas dinâmicas ou estáticas independentes que podem ser consumidas por aplicativos escritos em outras linguagens de programação.

Eu acho que não é possível.Você também precisará distribuir o .NET FW.Se você deseja compilar o aplicativo .NET em código nativo, use NGen ferramenta

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