2009-10-23 6 views
4

Dans mon dossier de projet, j'ai l'entrée suivante:Visual Studio 2008 résolution référence erronée

<Reference Include="Microsoft.Practices.Unity, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> 
    <HintPath>..\..\..\..\Libraries\Microsoft.Practices.Unity.dll</HintPath> 
</Reference> 

qui, en termes absolus se traduit par:

C: \ dev \ LUT600 2.1.1 \ OCC600 \ bibliothèques

d'une certaine façon, lorsque je tente de compiler le projet, Visual studio charge une référence d'un chemin totalement différent:

/référence: «C: \ Program Files \ Microsoft Enterprise Library 4.1 - Octobre 2008 \ Bin \ Microsoft.Practices.Unity.dll.

Comment il résout à cet endroit est un mystère complet que cette DLL n'est référencée nulle part dans ce projet.

J'ai défini Specific Verion sur true, mais il résout toujours la référence à partir de cet emplacement.

Des idées?

TIA.

Klaus

+0

C Renommage: \ Program Files \ Microsoft Enterprise Library 4.1 - Octobre 2008 \ Bin à C: \ Program Files \ Microsoft Enterprise Library 4.1 - Octobre 2008 \ Bin_bk l'oblige à utiliser la bonne référence mais pourquoi? –

+0

Les DLL Unity sont-elles la même version? Si oui, est-ce important de trouver le même fichier dans un endroit différent? – Shiv

Répondre

3

Il se peut que la référence n'a pas le même numéro de version que l'ensemble dans cet endroit particulier, il commence à chercher ailleurs pour trouver un match « meilleur ».

Plutôt que de simplement prendre le fichier que vous avez spécifié, VS utilise toujours un chemin de sonde pour essayer de trouver des assemblys référencés. Cela fournit souvent un effet aléatoire "choisir n'importe quoi avec le même nom". Sur notre serveur de construction, j'ai trouvé 996 exemplaires d'un assemblage. 995 étaient la même, la version correcte, et un était la mauvaise version. Et un jour notre build a cessé de fonctionner quand sans raison apparente, il a soudainement décidé d'utiliser le seul faux exemplaire!

Essayez de supprimer et de recréer la référence. Cela aide souvent.

Dans le pire des cas, supprimez toutes les copies de cet assemblage de votre PC, à l'exception de la version que vous souhaitez lier. (si possible sans décevoir tout ce qui vous est cher)

0

Vous avez probablement ajouté la référence du GAC (Global Assembly Cache). La longue liste de références qui prennent du temps à charger sont des références du GAC. Essayez de supprimer votre référence et de la rajouter en accédant à cet assemblage dans la boîte de dialogue Ajouter des références.

+0

Ces assemblys ne sont pas dans le GAC. Je les ai ajouté en naviguant dans le dossier spécifique, mais quelqu'un VS ignoré cela. –

0

Il peut être trouver la DLL dans le chemin de recherche avant d'évaluer le HintPath. Comme mentionné dans this post, il y a deux endroits qui sont recherchés avant HintPath.

  • Fichiers du projet en cours - indiqués par {CandidateAssemblyFiles}.
  • $ (ReferencePath) propriété provenant du fichier .user/targets.