Comment compiler un .NET application en code natif?
Si je veux lancer une .NET application dans une machine où les .NET framework n'est pas disponible, Est-il un moyen pour compiler l'application en code natif?
Vous devez vous connecter pour publier un commentaire.
Microsoft a un article vous expliquant comment vous pouvez Compiler MSIL en Code Natif
Vous pouvez utiliser Ngen.
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
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
Que certains des autres réponses ici l'avez mentionné, vous pouvez utiliser le .NET Native outil pour compiler votre application en code machine natif. À la différence de ces réponses, cependant, je vais vous expliquer comment de le faire.
Suit:
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 en trouver un bon article sur le sujet ici.
Ouvrir une invite de shell et
cd
dans le répertoire de votre application.Tapez ceci:
Que c'est! Lorsque vous avez terminé, votre application sera compilée en un seul binaire, ressemble à ceci:
Ç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, vous pouvez exécuter cette:
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 conscient:
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 le 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. Les auteurs de Code aurait besoin d'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.
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 le cadre, tels que: la dynamique de l'assemblage de chargement, MSIL la génération de code, etc.
2019 Réponse: Utiliser dotnet/corert. Il permet de compiler .NET de Base des projets en autonome
.exe
fichiers. Pas de dépendances (sauf pour le système de bibliothèques commekernel32.dll
). Je parie que c'est exactement ce que les OP ont besoin.De son GitHub page d'accueil:
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