【问题标题】:Visual Studio 2012 refuses to find referenced .dllVisual Studio 2012 拒绝查找引用的 .dll
【发布时间】:2013-11-21 16:46:53
【问题描述】:

我陷入了 DLL 地狱。我有一个在我的项目中引用的 .dll。我将其称为 project.dll。 Project.dll 由 Visual Studio 2012 创建。我通过浏览到它的 bin 目录引用了 project.dll。我可以在目录中实际看到它。

当我尝试调试到 project.dll 时,Visual Studio 的行为就像这个东西不存在一样。相反,它给了我一个屏幕,上面写着“找不到文件名.cs”。”(它甚至看起来吗?) Filename.cs 是 project.dll 的一部分。它让我可以选择浏览到 filename.cs,我尝试这样做做。然后我得到一个错误,说源文件与构建模块时不同。这没有意义,因为我只是 BUILT project.dll 并引用了它。我还应该补充一点,错误有以下几点:

来源:Filename.cs 的正确路径

模块:空白

进程:空白

我已经尝试了以下所有方法,但没有任何解决方法:

  1. 清理/构建/重建两个项目。 (到了想吐的地步)
  2. 清除浏览器缓存
  3. 删除临时文件
  4. 删除 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files 下的所有内容
  5. 验证 GAC 中不存在 project.dll。
  6. 多次退出并重新启动 Visual Studio。
  7. 重新启动计算机。
  8. 删除引用,然后重新添加引用。
  9. 从另一个项目的 bin 文件夹中手动删除 project.dll。
  10. 尖叫。

如何让 Visual Studio 2012 识别 project.dll 和 filename.cs 都存在并且是正确的版本?另外,也许更重要的是,我如何防止这种 BS 将来发生?

编辑:我刚刚注意到在“浏览到文件”屏幕上,有一个文本框显示“原始位置”,后面跟着一个在我的机器上不存在的路径。我相信这是问题的一部分。如何让 Visual Studio 停止查找无效路径,而是查看引用 project.dll 的正确路径?

【问题讨论】:

  • superuser.com 似乎是提出这个问题的好地方!
  • @huMptyduMpty 这看起来像是开发人员的问题,而不是 IT。
  • 那个原始位置对你来说是不是很眼熟?我看到它现在不存在,但它是您机器上以前存在的位置吗?或者它完全不熟悉并且在其他开发者的机器上?

标签: visual-studio-2012 dll


【解决方案1】:

“原始位置”是从为已加载的特定 project.dll 实例找到的调试信息中扣除的。它是在构建 project.dll 时添加的。

发生的情况是,您的软件显然没有加载您构建的 project.dll,而是加载了另一个。要找出是哪一个,请打开 Visual Studio 的“模块”视图:Debug > Windows > Modules。浏览到列表中的项目 dll,您可以找到加载它的确切位置。现在您只需要确保用您的副本覆盖确切的 project.dll(或更改它的加载方式,以便加载您的)。

【讨论】:

  • 嗨 Csaba Toth。为 project.dll 提供的路径位于“C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root”下。我在那里看到一个名为“AssemblyInfo.ini”的文件。该文件内是 project.dll 的正确路径。
  • 它如何在临时文件夹中查找它?我一直从这里删除。从您之前的评论中回答您的其他问题......路径来自另一个开发人员的机器。
  • 在您的情况下,ASP.NET 部署使事情发生了一点变化,并增加了一个额外的步骤。现在您必须找到该 project.dll 的另一个副本(由您的开发伙伴编译)。这就是它被部署到临时文件夹的位置。
  • 从该临时文件夹中删除任何内容都无济于事,因为它是由 IIS 维护和配置的。您必须找到 IIS 将那个虚假版本的 dll 放在哪里(或者从另一个角度看,VS 向它提供了该文件)。仔细检查 ASP.NET 项目中对 project.dll 的程序集引用。您可以找到项目引用的绝对或相对路径(存储在 csproj 文件中)。也许这会带来一些启示。
【解决方案2】:

我不知道为什么这最终解决了它,但我注意到 MyMainWebService.dll(引用 project.dll 的项目)上的日期已经过时。我手动删除了这个 .dll 以及那里的 project.dll 版本。然后我构建了解决方案,它找到了正确版本的 project.dll。 (它还构建了 MyMainWebservice.dll 的正确日期)。

让我感到困惑的是,为什么不进行“清理”删除过时的 MyMainWebService.dll 版本?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    相关资源
    最近更新 更多