8
votes

Bundle .NET DLLS Pour exécuter une application dans la machine .NET-MOINS?

afaik, NGEN tourne MSIL dans Code indigène (également reformé comme pré-JIT), mais je n'ai jamais beaucoup accordé l'attention sur son impact sur la performance du démarrage. Les applications Ngen'D nécessitent toujours le .NET Bibliothèques de classe de base (le temps d'exécution).

Étant donné que les bibliothèques de la classe de base ont tout ce que nos assemblages .NET ont besoin (correct?) Serait-il possible d'expédier les DLL de la structure avec mon application Ngen'D afin qu'elle ne nécessite pas l'installation d'exécution? (E.G., le scénario pour la plupart des machines Windows XP)

Oh, et s'il vous plaît ne vous embêtez pas de mentionner Linker de Salamandre de RemoteSoft ou PostBuild de Xenocode . Ils ne sont pas pour mon budget actuel (et de nombreux) (et ils semblent simplement regrouper le cadre dans un environnement virtualisé, ce qui signifie de grandes tailles de téléchargement et des moments de démarrage lents que je crois)

EDIT:
Je sais maintenant, Ngen ne fait pas ce que je pensais.
Mais est-il possible de regrouper les fichiers .NET avec une application, sans utiliser de VM?


0 commentaires

4 Réponses :


1
votes

voir Comment compiler un .NET Application au code natif? - Le consensus semble être que ce n'est pas possible.


1 commentaires

Oui, je sais qu'il n'est pas possible de transformer un assemblage .NET en code natif (c.-à-d. Traduire .NET en natif), mais ce que je veux, c'est simplement regrouper les dlls d'exécution que j'utilise réellement (puisque la plupart d'entre eux sont assez légers poids, tel que System.dll étant un peu plus de 1 Mo) et exécutez mon application avec eux, avec la possibilité agréable d'exécuter plus d'une application et / ou plus d'une version sans réemballage du tout (ce que la salamandre / Postbuild do). Mon principale préoccupation est de raser la taille de la structure et de pouvoir exécuter mon code sans le cadre présent dans la machine.



2
votes

Ce n'est pas comment fonctionne Ngén. Cela ne contourne que l'étape de compilation JIT. Le fichier .ni.dll résultant ne contient que le code de la machine, pas la métadonnée de l'assemblage. Vous devez garder l'assemblage d'origine disponible pour cela. Et le CLR et les assemblages Framework .NET doivent être disponibles sur la machine cible, vous obligeant à installer .NET.


3 commentaires

Je suis désolé alors, je n'ai jamais utilisé ngen moi-même. Mais le xénocode semble fonctionner en incorporant un sous-ensemble de cadre dans un système de fichiers virtuel, et je pense que ce n'est pas un système d'exploitation virtuel complet comme le mode XP sur la victoire 7, il peut donc y avoir un moyen de laisser de côté la configuration absurdement longue .NET et quelques assemblées redondantes (à mon application) dans un tel projet. En outre, la connectivité réseau ou cette cible gonflée-Target-Tarchersors 200+ MB Redist ne serait pas nécessaire.


Vous pouvez cibler le cadre client .NET, il n'est que 26 Mo. Re-inventer un lieur n'est que techniquement réalisable. Les frais de licence élevés qu'ils facturent pour eux sont à la mesure de l'effort et du fardeau de la conserver compatible avec les versions-cadres. S'il s'agit d'un obstacle, cibler .NET est probablement la mauvaise approche.


Merci pour votre commentaire, puisque le cadre client est une bonne idée, et il semble que Microsoft ne se soucie pas de la manière dont les développeurs devraient traiter des OSES héritées + différentes versions du cadre = (si je devais bloquer mon logiciel de 26 Mo d'avoir Installez-enfer du cadre, ce serait déjà magnifique = (



5
votes

Vous ne pouvez pas faire cela. De nombreux composants essentiels tels que le collecteur des ordures font partie du CLR (qui fait partie du cadre-cadre), afin d'exécuter votre application avec succès, vous devez installer le cadre.


4 commentaires

Je comprends et j'abandonnerais vraiment l'idée de pouvoir contourner l'ensemble de la configuration .NET si des produits tels que Xenocode n'existaient pas. Un peu têtu de moi je sais = p


@Camilo Martin, 90% des PC Windows ont déjà installé .NET installé et 65% ont installé 65%. Net 3.5 SP1 ( hanselman.com/blog/... ). Alors pourquoi déranger?


Eh bien, je ne sais pas où il a obtenu ces chiffres, car je crois que moins de 90% des utilisateurs Worldwide ont .net 2.0. En tout cas, je veux juste que mon logiciel fonctionne même sans .NET (ou dites, sans .NET 3.5 SP1) installé. Ces statistiques pourraient provenir des grumes d'un petit blog visitée par des personnes au courant des technologies. Sans parler de cela, de mon expérience, la plupart des ordinateurs de l'entreprise / Commerce / Industry ne sont pas autorisés à installer des logiciels et beaucoup d'entre eux s'exécutent sur OSES héritées = (


En outre, IE6 est déjà minoritaire et les développeurs Web se dérangent à ce sujet. C'est la même gênante que j'ai pour .net.



2
votes

Regardez Microsoft .Net natif :

.NET Compile Native C # à code machine natif qui fonctionne comme C ++. Vous continuerez à bénéficier de la productivité et de la familiarité de le document .NET avec la grande performance du code natif.

Il sera intégré à Visual Studio 2014 .


5 commentaires

Au début, j'estime que "ah, un autre gars m'envoyant un lien vers ngen docs", et maintenant ... je rigole - qu'ils ont enfin pensé à ça! Comme ils mentionnent, codes commencent et fonctionnent plus rapidement et nécessitant moins de mémoire, c'est juste génial! Je me demande à quel point cela sera compatible avec un code déjà écrit, mais même si je n'ai pas de temps ni de motivation pour essayer cela pour le moment, vous méritez la tique verte car il s'agit désormais d'une fonctionnalité officielle.


@Camilomartin Merci, je suis devenu tellement excité quand j'ai aussi découvert cela aussi. Je m'attends à ce qu'il soit très robuste car il va être expédié avec VS 2014.


Une autre chose qui m'a été excitée est que C # aura le ?. opérateur . À quel point cela est cool?! Je suppose qu'ils ont finalement cessé d'avoir de nouvelles idées pour passer du temps à développer "encore une autre nouvelle façon de faire parallèle / async" et sont maintenant obligées de travailler sur des caractéristiques qui n'ont rien à voir avec la multithreading, lol.


@Camilomartin, Wow je ne savais pas à ce sujet! Merci d'avoir partagé. Je souhaite qu'il y ait un moyen de vous abonner à la balise "complétée" pour C #


Hé, tout le monde peut me dire si cela l'a fait dans Visual Studio 2015?