7
votes

Pouvez-vous regrouper des dlls ensemble?

J'ai un projet de bibliothèque de classe que j'ai faite. Appelons cela CLASSA. Dans CLASSA, j'ai besoin d'accéder à certains outils résidant dans dll (outilsdll.dll).

dans classa j'ai ajouté des outilsdll.dll au projet et sélectionné le fichier outilsdll.dll pour copier toujours au répertoire de sortie. De sorte que la bibliothèque construit et compile simplement bien et dans le répertoire de sortie, je vois classa.dll avec des outilsdll.dll

Ensuite, je souhaite écrire une application, dis app_a qui utilise les méthodes de la classe. Donc, dans mon projet APP_A, j'ai ajouté une référence à classa.dll afin que je puisse accéder à son espace de noms. Tout va bien et bien, il construit / compile.

Le problème est dès que j'exécuterais app_a et il devient à un point où les outilsdll.dll doivent être utilisés, il envoie une exception "Impossible de charger des outilsdll.dll. Je ne comprends pas comment il est possible qu'il puisse 't Trouver cette DLL car il est dans le même répertoire que classa.dll.

J'ai trouvé que si je pose des outilsdll.dll dans le répertoire de sortie de l'app_a, cela fonctionne simplement bien. Y a-t-il un moyen autour de cela? Y a-t-il une façon que les outilsdll.dll peuvent être groupés avec classa.dll. La raison en est que mes clients vont écrire leurs propres applications similaires à Appa et ce serait bien s'ils ne devaient faire que référencer un fichier dans leur projet et non multiples.


0 commentaires

4 Réponses :


12
votes

Il y a un outil de Microsoft appelé Ilmerge . Il fera probablement ce que vous voulez, en regroupant plusieurs assemblées dans un seul fichier.

PS : une autre solution assez fréquemment utilisée à votre problème serait d'ajouter un événement post-construction à la solution de votre application / projet qui copie le outilsdll.dll requis sur le répertoire de sortie? Quelque chose le long de la ligne de: xxx

(désolé si j'en reçois une erreur, je tape cela de ma mémoire.)

Bien sûr , votre client devra également faire cela. Mais là encore, ils l'ont probablement fait auparavant.


3 commentaires

Il semble que Ilmmerge ne puisse être utilisé que sur des assemblages .NET. Est-ce exact. Dans mon cas, les outilsdll.dll m'ont fourni par une fabrication de copeaux. Je ne sais pas s'il s'agit d'un assemblage .NET ou non. Est-ce que ça importe?


J'ai remarqué dans Visual Studio si je vais à Outilsdll.dll -> Propriétés Il existe une propriété appelée action. Puis-je simplement définir cela sur la ressource intégrée?


Il devrait y avoir une "copie si plus récente" ou "copier toujours" des options, utilisez celles-ci.



1
votes

Avez-vous ajouté la DLL au projet ou avez-vous réellement ajouté une référence? Vous devriez faire ce dernier, puis ce genre de chose est pris en charge automatiquement pour vous. On dirait que vous avez ajouté le fichier réel aux fichiers de projet et définissez-le sur copier.

Si vous voulez absolument utiliser une seule approche de fichier, acceptez les autres suggestions de ilmmerge évidemment ...


0 commentaires

0
votes

Vous pouvez utiliser ILMERGE pour combiner des assemblages dans une DLL.

https://research.microsoft.com/en-us /people/mbarnett/ilmerge.aspx


0 commentaires

0
votes

Vous pouvez utiliser un outil de fusion IL ou installer des outilsdll.dll dans le GAC.

Aussi si vous regardez la sortie d'app_a, classa.dll est déjà là, c'est là qu'il recherche des outilsDll.dll.


0 commentaires