Reliant de manière statique en C#
Je suis en train de travailler sur un module pour un CMS. Ce module est distribué comme un DLL de bibliothèque de classe.
J'ai plusieurs bibliothèques utilitaires que j'aimerais utiliser dans ce module. Est-il de toute façon je peux relier ces bibliothèques de manière statique, donc je n'aurai pas à distribuer plusieurs DLL (de ce fait, la distribution de mon utilitaire de bibliothèques séparément)?
Je voudrais avoir une seule DLL.
OriginalL'auteur erlando | 2008-09-02
Vous devez vous connecter pour publier un commentaire.
Vous pouvez fusionner vos nombreuses Dll avec ILMERGE:
http://research.microsoft.com/~mbarnett/ILMerge.aspx
N'ai pas essayé moi-même. Espérons que cela aide.
Télécharger ici:
http://www.microsoft.com/downloads/details.aspx?familyid=22914587-B4AD-4EAE-87CF-B14AE6A939B0&displaylang=en
Brève Description (à partir d'un téléchargement de la page)
ILMerge est un utilitaire de fusion de plusieurs .NET assemblées en un seul .NET de l'assemblée. Il fonctionne sur les executables et les Dll de même et est livré avec plusieurs options pour contrôler le traitement et le format de la sortie. Voir la documentation pour plus de détails.
Le code Unsafe est tout simplement parfait. Ne pas traiter en mode mixte assemblées. Le genre qui contient le code non managé et a été créé par un C++/CLI projet.
OriginalL'auteur Seb Nilsson
Si vous ne souhaitez pas utiliser ILMerge, voir cette page:
http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx
note de l'éditeur: Jeffrey Richter conseils pour mettre votre dll dans le fichier exe en tant que ressources (Pour chaque fichier DLL à ajouter, afficher ses propriétés et changer sa “Action de Construire” à la “Ressource Incorporée.”). Puis un class loader personnalisé est nécessaire pour faire le travail exécutable (Au moment de l'exécution, le CLR ne sera pas en mesure de trouver la DLL dépendante des assemblées, ce qui est un problème. Pour résoudre ce problème, lorsque votre application initialise, inscrire un rappel de la méthode avec le domaine d'application de la ResolveAssembly événement).
Assurez-vous de changer la
resourceName
chaîne au point de vos ressources réelles. (par exemple, changementAssemblyLoadingAndReflection
au nom du projet.)Tout ceci prend un peu d'effort supplémentaire, ce qui semble être la meilleure solution au cours de la accepté de répondre.
OriginalL'auteur Kaganar
La courte réponse est non!
Vous ne pouvez pas le lien dans une dll lors de la compilation.
Je ne sais pas si il existe une certaine manière subtile pour ce faire, mais vous serait probablement à distribuer les dll avec votre cms.
La meilleure façon de le faire est de faire une sorte de re-distribuable.
Faux, ce n'est pas le fait de relier ce est la fusion. Alors que la plupart des upvoted réponse répond à l'intention de la question (et qui est donc le plus utile de réponse), khebbie la réponse est en fait le droit, et aussi longtemps que l'on pourrait répondre précisément à la question posée. Vous ne pouvez pas même un lien entre une dll en C/C++, vous avez besoin d'une bibliothèque statique pour le faire...
C'est marrant que cette réponse, qui est techniquement correcte, n'a pas de upvotes. Le C# est un langage managé, et même ILMerge est une assemblée de la fusion, pas un éditeur de liens. Un éditeur de liens, telle que comprise par le C++ et C les développeurs, ne peut pas exister actuellement .NET telle qu'elle existe actuellement. Toutefois, une ".Net native" technologie pas encore publié à la mi 2015, peut un jour être publié qui permet à un entièrement compilé (pas de MSIL plus) de l'application qui pourrait être lié statiquement.
OriginalL'auteur khebbie