【问题标题】:Visual Studio 2008 resolving wrong referenceVisual Studio 2008 解决错误参考
【发布时间】:2010-12-09 13:33:01
【问题描述】:

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

<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\库

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

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

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

我已将特定版本设置为 true,但它仍会解析来自该位置的引用。

有什么想法吗?

TIA。

克劳斯

【问题讨论】:

  • 将 C:\Program Files\Microsoft Enterprise Library 4.1 - October 2008\Bin 重命名为 C:\Program Files\Microsoft Enterprise Library 4.1 - October 2008\Bin_bk 会强制它使用正确的引用,但为什么呢?
  • Unity DLL 的版本是否相同?如果是这样,它在不同的位置找到相同的文件是否重要?

标签: visual-studio


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这些程序集不在 GAC 中。我通过浏览到特定文件夹来添加它们,但有人 VS 忽略了这一点。
    【解决方案3】:

    它可能会在评估 HintPath 之前在搜索路径中找到 dll。正如this post 中提到的,在 HintPath 之前搜索了两个地方。

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

    【讨论】:

      猜你喜欢
      • 2010-12-22
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-09
      • 2012-06-22
      • 1970-01-01
      相关资源
      最近更新 更多