2011-06-20 1 views
1

Je crée un fichier bild pour un projet contenant plusieurs bibliothèques tierces situées dans un répertoire lib. Donc, mon build script ressemble à ceci:Construire avec les bibliothèques nant et de référence dans les sous-répertoires

<csc target="library" ....> 
    <sources> 
     <include name="**/*.cs" /> 
     <!-- common assembly-level attributes --> 
     <include name="../../src/CommonAssemblyInfo.cs" /> 
     <exclude name="Properties/AssemblyInfo.cs" /> 
    </sources> 
    <references> 
     <include name="${build.dir}/bin/lib/Should.Fluent.dll" /> 
    </references> 
</csc> 

La compilation fonctionne très bien, cependant, l'exécution ne fonctionne pas, en disant qu'il ne peut pas trouver la bibliothèque Should.Fluent.dll. Comment puis-je faire en sorte que le programme le trouve?

Répondre

0

La bibliothèque doit être présente dans GAC ou dans le même répertoire que celui dans lequel se trouve l'assembly de référence. Vous pouvez le copier manuellement pour vérifier si cela résout le problème - si oui, ajoutez une tâche <copy> qui vous assure les références sont présentes dans votre problème de sortie.

+0

Vous me dites qu'il n'est pas possible d'exécuter dll depuis un autre répertoire que votre application ou le GAC? Parce que j'ai lu à propos d'un/lib-switch à csc.exe qui indique au programme où chercher des DLL. – Alxandr

+0

Ce commutateur ne fonctionne que pendant la compilation, il ne fait rien pendant l'exécution. Cependant, MSBuild copie automatiquement vos références dans le répertoire de sortie, ce que la plupart des développeurs ne remarquent pas. Vous pouvez vous connecter à ['AppDomain.CurrentDomain.AssemblyResolve'] (http://stackoverflow.com/questions/5260404/resolve-assembly-references-from-another-folder) pour changer cela, mais je ne le recommanderais pas. – skolima

+0

Je vois. Eh bien, je suppose que je vais devoir laisser les ressources dans le même répertoire. – Alxandr

Questions connexes