12
votes

Pourquoi C # n'a-t-il pas de bibliothèques statiques de style C ++?

Dernièrement, je travaille sur quelques petites applications .NET qui partagent du code commun. Le code a des interfaces introduites à l'abstrait de tout E / S appelle des tests d'unités.

Je voulais que les applications soient autonomes exes sans dépendances externes. Cela semble être le cas d'utilisation parfait pour les bibliothèques statiques. Venez penser à ce que les vendeurs de contrôle des tiers pourraient également bénéficier de ce modèle.

Y a-t-il des nazes cachés avec des bibliothèques statiques que j'ai manquées?

Y a-t-il une raison pour laquelle les concepteurs C # leur ont quitté?

Edit: Je suis au courant de Ilmmerge mais cela n'offre pas la même commodité que les bibliothèques statiques.


0 commentaires

3 Réponses :


3
votes

Ce n'est pas directement lié à C #, mais à l'ensemble .NET .NET. Bien sûr, il est possible de fusionner des assemblages avec Ilmmerge , mais hélas C'est toujours un projet de recherche, mais au moins sa licence permet une utilisation pour les efforts commerciaux. Autre que cela, le temps d'exécution (CLR) ne peut pas être regroupé dans un seul exécutable, la plate-forme cible a toujours besoin de .NET à installer.

EDIT:

Je tapais cela avant de modifier votre message avec Ilmmerge. Je me tromperais peut-être mais il n'y a pas d'avantages supplémentaires d'éviter la liaison dynamique de style .NET au moment de l'exécution. Il n'y a rien de mal à mettre les assemblages satellites avec l'exécutable. Microsoft ne recommande pas de les mettre dans le GAC.


1 commentaires

Je sais que cela n'a pas d'inconvénient, mais il est tout simplement plus facile de pouvoir donner un exe uniquement.



1
votes

Utilisation de Static Libs a l'inconvénient qu'il n'est pas corrompu par le fournisseur d'exécution (MS).

Par exemple, si vous utilisez Static MFC Libs et un problème de sécurité ou un autre bogue figurant dans la MFC Static Libs, MS ne peut pas le corriger (le code est déjà dans votre exécutable). L'utilisation de DLL partagées permet un correctif facile au niveau du système d'exploitation sans que vous vous souciez de cela.

Bien sûr, avoir partagé des libs a un petit inconvénient: une dépendance est prise et doit être installée sur le système.


0 commentaires

11
votes

.NET fait en fait soutenir l'équivalent moral d'une statique une bibliothèque. Ça s'appelle un NetModule (l'extension de fichier est généralement .NetModule). En savoir plus à ce sujet dans ce Publication du blog . Méfiez-vous qu'il n'est pas bien soutenu par le studio visuel Construire une chaîne d'outils. Je pense que méthodes d'extension est un problème aussi. Ilmmerge est le meilleur outil pour obtenir cette fait.


1 commentaires

C'est très intéressant merci.