Visual studio Visual Studio 2008解析错误的引用

Visual studio Visual Studio 2008解析错误的引用,visual-studio,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&g

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

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

..\..\..\..\Libraries\Microsoft.Practices.Unity.dll
就绝对值而言,这意味着:

C:\dev\LUT600 2.1.1\OCC600\Libraries

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

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

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

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

有什么想法吗

蒂亚


Klaus

可能是引用与该特定位置的程序集版本号不同,因此它开始在其他位置搜索以找到“更好”的匹配项

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

尝试删除并重新创建引用。这通常会有所帮助


在最坏的情况下,请从电脑中删除该程序集的所有副本,但要链接到的版本除外。(如果可能的话,无需销毁您所珍视的任何内容)

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

它可能在计算HintPath之前在搜索路径中找到dll。如中所述,在HintPath之前搜索两个位置

  • 当前项目中的文件–由{candidateasemblyfiles}表示
  • 来自.user/targets文件的$(ReferencePath)属性

将C:\Program Files\Microsoft Enterprise Library 4.1-2008年10月\Bin重命名为C:\Program Files\Microsoft Enterprise Library 4.1-2008年10月\Bin\u bk会强制它使用正确的引用,但为什么?Unity DLL是同一版本?如果是,在不同的位置找到相同的文件是否重要?这些程序集不在GAC中。我通过浏览特定文件夹添加了它们,但有人忽略了这一点。