旧的DLL文件一直在使用

cbp*_*cbp 56 dll

我有一个看似随机的问题,我的项目将使用不再存在的旧版DLL文件运行.有时会使用DLL文件的真实版本,有时会使用古老版本的DLL文件.谁知道Visual Studio从哪里获取这个DLL文件 - 它已经过时了!

我知道它正在使用旧的DLL文件,因为当应用程序运行时,我开始变得奇怪的'TypeLoadExceptions',抱怨方法不存在或没有实现.

以下操作有时会有所帮助,有时不会:

  • 重新启动Visual Studio
  • 重新启动计算机
  • 清洁和重建解决方案
  • 删除\ WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files中的所有内容
  • 在\ Documents and Settings\username\Local Settings\Temp中搜索和删除DLL文件的实例

有时我执行上述所有步骤,它仍然使用DLL文件的旧副本.它隐藏在哪里?!

使用MSBuild的TeamCity服务器上存在同样的问题.当TeamCity尝试运行单元测试时,它使用旧的DLL文件.

现在,我知道我可以在web.config文件中使用程序集重定向,但DLL文件的版本号没有改变(我不打算更新它,所以它只停留在版本1).我不想只是为了解决这个问题而开始对DLL文件进行版本控制.我想知道我需要清除哪些特定的缓存,以便我可以继续开发.

shi*_*ipr 44

它隐藏在GAC中.在那里它可能无限期地存在.使用更新版本可能确实可以解决问题,但Visual Studio中存在一个与选择正确版本的DLL文件有关的突出错误.(如果DLL Hell还不够糟糕,Visual Studio团队会让它变得更糟!)

在GAC中查找它很棘手,我无法告诉您如何执行此操作,但是一旦旧版本从那里删除,将无法再次找到它.有时,即使您将编译器指向较新的版本(按日期),它也将使用旧版本,因为它具有相同的版本级别(按版本).这是它的错误.

  • 您是否看过这份标题为“如何:从全局程序集缓存中删除程序集”的文档?http://msdn.microsoft.com/en-us/library/zykhfde0.aspx (2认同)
  • 您可以使用 gacutil -l {程序集名称} 检查它是否存在 (2认同)
  • 对于 gacutil,请将 cmd 指向 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin (2认同)

Eri*_*son 24

谁知道Visual Studio从哪里获得这个dll - 它已经过时了!

模块窗口是你的朋友?

它会告诉你文件的确切位置.如果附加调试器,甚至可以将它与任意进程一起使用.

  • 我想为未来的撇渣器添加一点,您的项目需要在调试模式下运行才能出现选项(调试 -> 窗口 -> 模块)。 (4认同)

Dan*_*ord 5

我也猜想他们躲在 GAC 中。您可以查看“C:\Windows\assembly”以查看所有 dll 并从那里取消注册您的 dll。