2010-08-24 7 views
2

J'ai un fichier exécutable, que je lance par exemple à partir de C :. L'exécutable référence certaines DLL d'un autre répertoire, disons C: \ MyDLLs. Le problème est que ces DLL référencées dépendent à nouveau des autres DLL, qui sont stockées dans un autre répertoire. Puis-je dire à Visual Studio où chercher ces DLL manquantes? Merci beaucoup!Comment définir les répertoires de travail pour les dépendances DLL dans Visual Studio/C#

+0

J'ai dû faire quelque chose comme ça sur un projet il y a quelques années, et ce n'était pas joli. :) Bonne chance!! –

+0

hehe merci;) – iDog

Répondre

1

J'ai déjà eu ce problème et j'ai créé un script de post-construction qui copie toutes les DLL nécessaires dans le répertoire de mon exécutable.

Quelque chose comme: copie "$ (ProjectDir) Ressources \ DLL \ yourDLL.dll" "$ (TargetDir) yourDLL.dll"

+0

Merci, mais ce serait des centaines de DLL à copier. D'autres idées? – iDog

+0

http://msdn.microsoft.com/en-us/library/7d83bc18(VS.80).aspx Cela vous indique le chemin de recherche que Windows utilise pour trouver des DLL. Ainsi, vous pourriez ajouter le répertoire C: \ DLLs à votre variable PATH peut-être. Le seul problème avec cela est bien sûr qu'il est plus bas sur la liste des chemins de recherche ... donc s'il trouve d'abord la DLL dans l'un des autres endroits, cela la dépassera. – KrisTrip

+0

Je l'ai déjà essayé, curieusement ça ne marche pas, je ne sais pas pourquoi .. – iDog

3

Vous pouvez faire référence à des ensembles en dehors des règles de chargement de montage de votre application en définissant ces valeurs en configuration. Voici un fichier de configuration exemple de this Microsoft KB article:

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="MyAssembly2" culture="neutral" publicKeyToken="307041694a995978"/> 
      <codeBase version="1.0.1524.23149" href="FILE://C:/Myassemblies/MyAssembly2.dll"/> 
     </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

Vous utilisez l'élément <codeBase> de dire à votre application où chercher.

Vous devez rendre l'assembly fort nommé (utilisez l'outil sn.exe) pour que cela fonctionne.

Il est également utile de comprendre comment le temps d'exécution resolves assembly references et peut-être vous pouvez profiter de cela au lieu de passer par tous les cerceaux pour utiliser <codeBase>.

+0

merci, j'aime votre suggestion. L'utilisation de System.Reflection.Assembly pourrait être la réponse à ma question. Je vais essayer. Merci. – iDog

Questions connexes