Question

Si je veux lancer une .NET application dans une machine où les .NET framework n'est pas disponible;Est-il possible de compiler l'application en code natif?

Était-ce utile?

La solution

Microsoft a un article vous expliquant comment vous pouvez Compiler MSIL en Code Natif

Vous pouvez utiliser Ngen.

La Génération D'Images Natives (Ngen.exe) est un outil qui améliore la la performance de la gestion des applications.Ngen.exe crée des images natives, qui sont des fichiers contenant des compilé spécifiques au processeur de code machine, et installe dans l'image native cache sur l'ordinateur local.L' runtime pouvez utiliser les images natives de l' cache au lieu d'utiliser la juste-à-temps (JIT) compilateur pour compiler l'original de l'assemblée.

Malheureusement, vous avez encore besoin des bibliothèques du cadre afin d'exécuter votre programme.Il n'y a pas de fonction que je connais, avec le MME .Net framework SDK qui permet de compiler tous les fichiers nécessaires dans un seul exécutable

Autres conseils

RemoteSoft fait un outil qui compile un .NET application dans un package qui peut être exécuté sans .Installée NETTE.Je n'ai aucune expérience avec elle:

RemoteSoft De La Salamandre

J'ai testé plusieurs d'entre eux et en ce moment, le seul qui prend en charge .NET 3.5, et a également une grande pile de virtualisation est Xenocode Postbuild

Avec ngen vous devez toujours avoir la .NET framework est installé, mais à l'aide d'un outil en tant que tel tous vos géré le code est compilé en code natif de sorte que vous pouvez le déployer sur les ordinateurs sans le cadre de présence.

Microsoft a annoncé son .NET Native Aperçu qui permettra à terme .NET applications, sans avoir le framework est installé.

Prendre un coup d'oeil: http://blogs.msdn.com/b/dotnet/archive/2014/04/02/announcing-net-native-preview.aspx

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

Vous pouvez télécharger Microsoft .NET Native pour VS2013 à partir d'ici: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

Comme certains des autres réponses ici l'avez mentionné, vous pouvez utiliser le .NET Native outil de compilation de l'application du code machine natif.À la différence de ces réponses, cependant, je vais vous expliquer comment de le faire.

Étapes:

  1. Installer le dotnet CLI (interface de ligne de commande) de l'outil, qui fait partie de la nouvelle .NET Cœur de la chaîne.Nous allons l'utiliser pour compiler notre application;vous pouvez trouver un bon article sur le sujet ici.

  2. Ouvrir une invite de shell et cd dans le répertoire de votre application.

  3. Tapez ceci:

    dotnet compile --native
    

Ça y est!Lorsque vous avez terminé, votre application sera compilée en un seul binaire, ressemble à ceci:

Native compiled .NET Core EXE

Ça va être un exécutable autonome;pas de Pdb, assemblées, ou des fichiers de configuration inclus (hourra!).


Sinon, si vous voulez encore plus de programme, vous pouvez exécuter ce:

dotnet compile --native --cpp

Qui permettra d'optimiser votre programme en utilisant le générateur de code C++ (par opposition à RyuJIT), de sorte que votre application est encore plus optimisé pour AOT scénarios.

Vous pouvez trouver plus d'informations sur cette question à la dotnet CLI Dépôt GitHub.

Oui, à l'aide de Ngen, la génération d'Images Natives.Il ya, cependant, un certain nombre de choses que vous devez être au courant:

  • Vous avez encore besoin de le CLR pour exécuter votre exécutable.
  • Le CLR ne sera pas optimiser dynamiquement vos assemblées en fonction de l'environnement qu'il est exécuté (par ex.486 vs586 vs686, etc.)

Dans l'ensemble, il ne vaut l'aide de Ngen si vous avez besoin de réduire le temps de démarrage de votre application.

Vous pouvez!Cependant, vous êtes limité à .NET 1.1 (pas de génériques pour vous):Mono Avance sur le Temps de compilation (AOT)

Toutefois, cela signifie que la compilation est vraiment natif, de sorte que vous n'aurez plus la possibilité de déployer une seule bytecode de l'assemblée, vous aurez besoin de l'un par la plate-forme.

Il a été initialement conçu, car il n'y a pas .NET ou Mono pour iPhone, donc, c'est comment ils ont fait MonoTouch.

Vous pouvez faire cela en utilisant la nouvelle précompilation technologie appelée .NET Native.Découvrez-le ici: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

Actuellement, il est seulement disponible pour les Applications Windows Store.Il effectue seul composant de la liaison.Donc .NET Framework bibliothèques sont liés statiquement dans votre application.Tout est compilé en natif et IL assemblées ne sont plus déployé.Les applications ne s'exécutent pas sur CLR mais une dépouillé, optimisé d'exécution appelé Géré Runtime (Mrt.dll)

Comme indiqué ci-dessus, NGEN utilisé un mélange modèle de compilation et s'est appuyé sur IL et JIT pour la dynamique des scénarios..NET Natif de ne pas utiliser JIT mais il prend en charge divers dynamique des scénarios.Code des auteurs à utiliser D'Exécution Des Directives fournir des conseils au .NET compilateur Natif sur la dynamique des scénarios qu'ils souhaitent soutenir.

Vous pouvez utiliser ngen.exe pour générer une image native mais vous avez encore à distribuer l'origine de la non-code natif en tant que bien, et il a encore besoin d'un framework est installé sur la machine cible.

Ce qui ne résout pas votre problème, vraiment.

La nature de .NET est de pouvoir installer des applications qui ont été compilés pour MSIL, puis en JIT ou Ngen, MSIL est compilé en code natif et stockées dans un cache local.Il n'a jamais été destiné à générer un vrai natif .exe qui peut être exécuté indépendamment de la .NET framework.

Peut-être il y a quelques astuces qui fait cela, mais il n'a pas l'air sûr de moi.Il y a trop d'dynamique qui nécessitent de la structure, tel que:dynamique de l'assemblage de chargement, code MSIL génération, etc ...

2019 Réponse:Utilisation dotnet/corert.Il permet de compiler .NET de Base des projets en autonome .exe les fichiers.Pas de dépendances (sauf pour le système de bibliothèques, comme kernel32.dll).Je parie que c'est exactement ce que les OP ont besoin.

De son GitHub page d'accueil:

Le CoreRT compilateur peut compiler un programme géré .NET application de Base dans un natif (architecture spécifique) seul fichier exécutable qui est facile à déployer.Il peut également produire autonome, dynamique ou statique des bibliothèques qui peuvent être consommés par les applications écrites dans d'autres langages de programmation.

Je pense qu'il n'est pas possible.Vous aurez besoin de les distribuer .NET FW ainsi.Si vous voulez compiler .NET application en code natif, utiliser NGen outil

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top