71 votes

L’état des Linkers pour les applications .NET (aka « s’il vous plaît Monsieur le Président, j’ai peut-être un Linker » édition de 2009)

Beaucoup de gens ici sont probablement familier avec l'un de Joel Spolsky plus populaires de messages de blog, Plaît, Monsieur, puis-je Avoir un éditeur de liens, où il pousse des cris de manière à éliminer les dépendances de la .NET framework est donc une application autonome peut être développé et vendu.

Jason Zander de Visual Studio de développement de l'équipe, à l'époque, a répondu avec son point de vue sur le sujet, arguant que le sujet est quelque peu discutable - la capacité à résoudre des problèmes de sécurité dans le moteur d'exécution (entre autres) était leur principale préoccupation. Dans l'ensemble, la faible surcharge en valait la peine.

Avance rapide jusqu'en 2009. Il y a quelques groupes là-bas maintenant, affirmant C# linkers. (Jason Zander a même dit lui-même qu'il ne serait pas beaucoup à la mise en œuvre.) Au lieu de la mignonne, la douzaine-de sorte que meg télécharger de .NET 1.0, nous avons maintenant un énorme 200-300 mo de croix-plate-forme complète .NET 3.5 programme d'installation qui contient les versions de .NET pour les architectures x86, x64 et ia64. Microsoft suggestions pour diminuer le runtime taille comprennent:

  • Décompresser le package redistribuable, supprimer les plateformes cibles que vous ne voulez pas, et de le remettre ensemble
  • Utiliser le web programme d'amorçage qui ne télécharge que les bibliothèques pour votre plate-forme
  • Utiliser le Profil des Clients du programme d'installation (nouveau à partir de la fin 2008), ce qui a limité les bibliothèques et ne fonctionne que pour x86

Pour aggraver les choses, ce que je comprends (corrigez-moi si je me trompe) le profil du client et ne même pas s'inscrire avec windows comme ayant .NET 3.5 est installé. Cela signifie que si plusieurs .NET 3.5 client les applications sont installées sur l'ordinateur, aucun ne voir les uns les autres et l'exécution sera ré-installé, encore et encore!

Je ne sais vraiment pas ce que Microsoft est pensée ici. Même en supposant le pire des cas, installer sera pour une plate-forme cible (par exemple, x64) et que les bibliothèques doivent être incluses, vous êtes toujours à la recherche de plus de 60 mo au-dessus sur votre application. Même l'un des plus bien connu .NET applications, Paint.NET, est marqué par les Difficultés de l'installation de l'application en raison de l'énorme .NET dépendances. S'ILS ont des problèmes de la distribution d'une application gratuite, ce qui sur le reste du monde? En fin de compte, ils ont dû Faire un programme d'amorçage installé Microsoft Installer 3.1, l' .NET runtime programme d'amorçage, et de tous les autres dépendants libraires avant qu'ils puissent installer leurs propres applications.

Alors, comment à ce sujet. Un éditeur de liens. Faire une bonne existent - ou d'un outil qui, tout simplement, il est possible de construire une application en C#, sans que l'utilisateur d'installer le massif .NET runtime?

Mise à jour: alors, on dirait qu'il y a deux options:

Mono:

.NET:

Il ressemble à la Mono outils sont à se servir; comment .NET tools? Toute autre expérience avec eux, ou bien allons-nous attendre pour Microsoft de pousser de 3,5 à tout le monde? Je frémis à l'idée combien de temps ça va prendre pour .NET 4.0 pour être mis hors...

49voto

Jb Evain Points 11368

Le cas de la Mono de l'éditeur de liens.

Je ne peux pas parler beaucoup sur les autres morceaux de logiciels qui sont répertoriés ici, mais comme l'auteur de la Mono éditeur de liens, je peux dire qu'il fait et ce qu'il ne l'est pas.

Le Mono de l'éditeur de liens n'est qu'un gérés de l'éditeur de liens, donc par définition, il prend assemblées, et supprime ce qui n'est pas nécessaire pour un programme à exécuter. Il n'a pas de fusion des assemblées tous ensemble, et il ne fait pas originaire programme de.

Il y a un Mono.Fusion clone de ILMerge, mais il n'est pas complet, et son auteur n'est pas l'entretenir. Pour générer un natif programme contenant à la fois le Mono d'exécution et d'assemblage, Mono fournit la mkbundle outil.

Aussi, comme il est seulement une gestion de l'outil, qui est en train de modifier les assemblées, si vous indiquez un nom fort assemblées, et que vous n'avez pas les clés privées de les signer en arrière, vous allez avoir des difficultés à l'exécution de ces assemblées.

J'ai écrit quelques billets de blog sur le linker:

À propos de notre expérience avec l'éditeur de liens. L'éditeur de liens est actuellement utilisé dans les deux parties du projet Mono. Il est utilisé pour générer de l'assemblée que nous distribuons pour les personnes à intégrer notre compilateur C#, Mono.CSharp.dll. Vous pouvez regarder Miguel de présentation lors de la PDC, qui décrit la façon dont nous le faisons. C'est assez simple, et c'est un usage de base de l'éditeur de liens, qui est un outil personnalisable, et il est assez facile d'écrire des étapes personnalisées.

Plus complexe de l'utilisation de l'éditeur de liens est la façon dont nous créons notre Lune des assemblées. Clair de lune en cours de mise en œuvre de notre Silverlight, les assemblées sont un sous-ensemble du bureau des assemblées. Nous avons donc le lien de notre bureau des assemblées afin de réduire leur taille, et à l'aide personnalisée étapes, nous transformons l'API publique de match de Silverlight.

Donc oui, l'éditeur de liens a quelques jolis bords bruts, tels que l'interface de ligne de commande par exemple, ou le fait que vous devez vraiment savoir ce que vous faites, ou vous pouvez vous retrouver avec d'étranges assemblages, mais dans l'ensemble, cela fonctionne vraiment bien pour nous.

5voto

Sam Saffron Points 56236

FWIW

Mono, a eu un linker pendant un bon moment.

Voici un exemple d’utilisation de mkbundle.

5voto

Clay Nichols Points 4252

http://www.xenocode.com/

C'est ce que nous utilisons. Jusqu'à présent, après un an, ou de quelque peu limité (peut-être 500 installations dans la nature), zéro problème.

Et c'est assez prix raisonnable. Ils ont un peu plus cher plein le logiciel de virtualisation (que les faisceaux de votre application avec d'autres applications et même un O/S). Mais nous n'avons pas besoin de tout ça. Nos frais, il y a un an était de 400$.Je pense que c'est un peu plus cher maintenant, mais beaucoup moins que Thinstall.

Et ils ont de grandes démonstrations, vous pouvez télécharger, comme IE 8. Aucune installation nécessaire.

3voto

Nir Points 18250

Profil client enregistre avec Windows, mais d’une manière spéciale, étant donné que vous ne voulez pas confondre une machine avec seulement le profil client avec une machine avec la pleine .net 3.5

Profil client :

Pleine .net 3.5 :

2voto

Jacob Adams Points 3108

C’est le principal que j’ai entendu parler de longtemps sur .NET Rocks. J’ai jamais vraiment eu un changement de l’essayer mais

http://www.remotesoft.com/linker/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X