J'utilise EmguCV pour un projet et lorsque notre programme s'exécute, il a besoin de dll comme "cxcore.dll" etc. (ou il lève des exceptions d'exécution). Pour le moment, je mets les fichiers à la racine du dossier de sortie (sélectionné "Copier toujours" dans les propriétés du fichier dans Visual Studio).
Cependant, cela semble un peu désordonné, d'avoir environ 10 DLL différentes juste là. Y a-t-il en quelque sorte où je peux le déplacer vers un sous-dossier dans le dossier de sortie et il le trouvera toujours.
Des réponses étonnantes jusqu'à présent. Rien de bien;) Eh bien,
oui, vous pouvez placer les assemblages dans des emplacements distincts.
Dans la configuration d'application correspondante (app.config
qui est copié dans your.exe.config
) ajouter:
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<probing privatePath="lib" />
</assemblyBinding>
</runtime>
Selon:
http://msdn.Microsoft.com/en-us/library/823z9h8w.aspx
Cela fera en sorte que le programme regarde dans le chemin privé (dossiers sous son propre dossier) pour les assemblys - un peu comme une application Web recherche/bin.
Vous pouvez également les placer dans le GAC, mais cela devrait être évité à moins qu'il n'y ait d'autres raisons à cela.
Cela étant dit, vous n'en avez vraiment pas besoin. Les utilisateurs ne seront pas confus si vous installez correctement l'application dans le menu Démarrer;) Je n'ai jamais eu ce problème, y compris les projets avec plus de 50 assemblys. Les utilisateurs ne les voient jamais.
Pour obtenir les assemblys dans un sous-répertoire, vous pouvez les copier manuellement, utilisez un événement avant ou après la construction ou quelque chose de complètement différent.
Pour les charger, vous pouvez utiliser AppDomain.AssemblyResolve Event , ou (comme indiqué par TomTom ) le <probing>
Élément . Depuis MSDN:
L'exemple suivant montre comment spécifier les sous-répertoires de base d'application que le runtime doit rechercher pour les assemblys.
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<probing privatePath="bin;bin2\subbin;bin3"/>
</assemblyBinding>
</runtime>
</configuration>
Le GAC est bien sûr un autre endroit pour vider vos assemblys, mais cela ne compterait pas vraiment comme un sous-répertoire ... à moins que vous n'installiez votre application quelque part, elle ne devrait vraiment pas être installée: P