Est-il possible de compiler le code .NET IL en code machine?
-
02-07-2019 - |
Question
Je souhaite distribuer mes programmes .NET sans le framework .NET. Est-il possible de compiler un programme .NET en code machine?
La solution
Oui, vous pouvez précompiler avec Ngen.exe, mais cela ne supprime pas la dépendance CLR.
Vous devez également expédier les assemblys IL, le seul avantage de Ngen est que votre application peut démarrer sans invoquer le JIT, vous obtenez donc un temps de démarrage très rapide.
Selon le CLR via C #:
De plus, les assemblys précompilés à l'aide de Ngen sont généralement plus lents que JIT'ed assemblées parce que le compilateur JIT peut optimiser à la machine cible (32 bits? 64 bits? Registres spéciaux? etc.), tandis que NGEN produira simplement un compilation de base.
EDIT:
Il y a un débat sur les informations ci-dessus de CLR via C #, car certains disent que vous devez exécuter Ngen sur la machine cible uniquement dans le cadre du processus d'installation.
Autres conseils
Remotesoft en a un: Éditeur de liens Salamander .NET
Je n'en ai aucune expérience cependant.
Certains outils tiers le font, par exemple.
Le Postbuild Xenocode . Je ne l’ai cependant pas fait moi-même, car cela coûte environ le produit national brut d’un petit pays africain et tous ...
Est-il possible de compiler du code .NET IL au code machine?
Oui, mais .NET Framework le fait pour vous au moment de l'exécution (par défaut) ou au moment de l'installation (ngen). Parmi d'autres raisons, cette IL - > le code machine est défini séparément sur chaque machine d'installation afin qu'il puisse être optimisé pour cette machine particulière.
Je souhaite distribuer mon .NET programmes sans le framework .NET. Est-il possible de compiler un .NET programme en code machine?
Non, à toutes fins pratiques, vous ne pouvez pas le faire. Les solutions de contournement tierces peuvent fonctionner dans certains scénarios, mais à ce moment-là, je ne le prendrais pas vraiment en considération, "code géré". ou " .NET " plus.
Oui, vous pouvez maintenant! Récemment, Microsoft a annoncé .NET Native , une technologie compilant votre application avec le runtime .NET Native (ils l’appellent MRT) en un seul binaire (en réalité un exécutable et une bibliothèque dynamique).
Voir les liens: http: //blogs.msdn .com / b / dotnet / archive / 2014/04/02 / advertizing-net-native-preview.aspx http://blogs.msdn.com/b /dotnet/archive/2014/04/24/dotnetnative-performance.aspx
Il existe IL2CPU pour la partie compilation.
Je ne pense pas que ce soit possible. Vous pouvez créer un assemblage pré-assigné mais vous avez toujours besoin du framework.
Si vous vous souciez simplement de la taille du déploiement de la structure, vous pouvez en savoir plus sur this .
Je pense que vous ne devriez pas: c’est la tâche du compilateur JIT.
Cependant, vous pouvez utiliser ClickOnce ou Windows Installer pour le déployer de manière à ce que l'infrastructure manquante ne pose pas un problème aussi important: vous pouvez indiquer au programme d'installation de télécharger l'infrastructure et de l'installer.
Regardez le projet MONO: commande mono avec l’option --aot. http://www.mono-project.com/AOT
J'avais toujours pensé que ce serait cool de compiler directement c # en code machine sans la dépendance CLR ....