Visual Studio 2008解决了错误的引用

时间:2009-10-23 18:21:54

标签: visual-studio

在我的项目文件中,我有以下条目:

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

以绝对术语转换为:

  

C:\ dev \ LUT600 2.1.1 \ OCC600 \ Libraries

不知何故,当我尝试编译项目时,Visual Studio会从完全不同的路径加载引用:

  

/ reference:“C:\ Program Files \ Microsoft Enterprise Library 4.1 - 2008年10月\ Bin \ Microsoft.Practices.Unity.dll。

它如何解析到这个位置是一个完全的谜,因为这个DLL在这个项目的任何地方都没有被引用。

我已将Specific Verion设置为true,但它仍然会解析此位置的引用。

有什么想法吗?

TIA。

克劳斯

3 个答案:

答案 0 :(得分:3)

可能是引用与该特定位置的程序集没有相同的版本号,因此它开始在别处搜索以找到“更好”的匹配。

VS不仅仅是获取您指定的文件,而是始终使用探测路径来尝试查找引用的程序集。这通常提供随机“选择具有相同名称的任何东西”的效果。在我们的构建服务器上,我曾经发现了996个程序集。 995是相同的,正确的版本,一个是错误的版本。有一天,我们的构建停止工作,因为没有明显的理由它突然决定使用单一的错误副本!

尝试删除并重新创建参考。这往往有帮助。

在最坏的情况下,从您的PC中删除该程序集的所有副本,但您要链接的版本除外。 (如果可能的话,不会破坏你亲爱的任何东西)

答案 1 :(得分:0)

您很可能添加了GAC(全局程序集缓存)中的引用。需要一段时间才能加载的长引用列表是GAC的引用。尝试删除您的引用,并通过在“添加引用”对话框中浏览到该程序集来重新添加它。

答案 2 :(得分:0)

可能在评估HintPath之前在搜索路径中找到dll。如this post中所述,在HintPath之前有两个地方被搜索。

  • 当前项目中的文件 - 由{CandidateAssemblyFiles}指示。
  • 来自.user / targets文件的
  • $(ReferencePath)属性。