2010-01-03 7 views
4

J'ai une solution avec 3 projets dedans. Deux des projets font référence à log4net et à quelques autres DLL.Comment faire pour déplacer toutes les DLL référencées dans un dossier séparé dans C#?

Lorsque je crée le package d'installation et que j'ajoute une sortie de projet pour chacun des projets, les DLL sont placées dans le «dossier d'application» principal. Si je fais glisser ces DLL dans un dossier séparé que j'ai créé dans le projet d'installation, les applications ne s'exécuteront pas en disant "Impossible de trouver log4net". Je veux ces références de DLL dans quelque chose comme "bin" ou n'importe quel nom vraiment, juste pas le dossier principal ils ajoutent la confusion - je veux juste mon 2 .exe dans le dossier principal.

J'ai essayé d'ajouter un chemin de référence dans chaque projet pour pointer vers le dossier "bin". Ensuite, dans le projet d'installation, j'ai ajouté un dossier de sortie appelé "bin" et déplacé les DLL dans ce dossier, ne fonctionne toujours pas.

Qu'est-ce qui me manque? J'ai passé quelques heures à regarder autour de moi pour essayer de comprendre ce que je fais de mal, peut-être que c'était comme ça que je suis née! Merci pour toute aide!

Répondre

10

Vous pouvez utiliser le <probing> element dans le fichier app.config pour spécifier un chemin privé pour la fusion (le chargeur de montage) pour effectuer la recherche.

Cela vous permet de spécifier des chemins qui sont sous-chemins de répertoire de l'application quelle Fusion devrait rechercher lorsque vous essayez de trouver des assemblages à lier. Un exemple (tiré de la page de documentation) est:

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="bin;bin2\subbin;bin3"/> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

Cela signifie que la fusion va chercher dans le bac, bin2 \ subbin (mais pas bin2, IIRC) et les sous-répertoires de BIN3 pour les assemblées en essayant de se lier à eux.

+0

a travaillé beaucoup, Je vous remercie! – user53885

3

J'ai écrit un paquet NuGet, appelé PrettyBin à cet effet Il ADDES une cible après de construction d'un projet, qui se déplace dll à un sous-dossier « lib », et modifie app.config pour regarder il

Questions connexes