旧的DLL文件不断被使用

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

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

以下行为有时会有所帮助,有时不会:

  • 重新启动Visual Studio
  • 重新启动计算机
  • 清洁和重build解决scheme
  • 删除\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET文件中的所有内容
  • 在\ Documents and Settings \用户名\ Local Settings \ Temp中search并删除DLL文件的实例

有时我执行上述所有步骤 ,并且仍使用DLL文件的旧副本。 它藏在哪里?

使用MSBuild的 TeamCity服务器存在同样的问题。 当TeamCity尝试运行unit testing时,它使用一个旧的DLL文件。

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

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

在GAC中查找是非常棘手的,我不能告诉你如何做到这一点,但是一旦从那里删除旧版本,就不会再find它。 有时,即使您正在将编译器指向新版本(按date),也会使用旧版本,因为它具有相同的版本级别(按版本)。 这是它的错误。

谁知道Visual Studio是从哪里得到这个DLL – 这是几个月过时了!

模块窗口是你的朋友…

它会告诉你该文件来自哪里。 如果连接debugging器,甚至可以将其用于任意进程。

该问题可能存在与build设秩序或您的项目。 如果您的testing项目是在应用程序项目之前构build的,则会导致您描述的行为。
要解决这个问题:
在VS中右键单击你的主项目并selectProject Dependencies …选项,并检查构build顺序。 通过正确设置这些依赖关系,可以在这里对构build子序列进行更改。

我也会猜测他们藏在了GAC中。 你可以在'C:\ Windows \ assembly'中查看所有的dll,并从那里取消注册。

在我的情况下,这是由于切换到发布模式,它具有不同的configuration(使用DLL的不同位置)。

我有一个类似的问题(但没有Visual Studio)。 我正在使用UnsafeLoadFrom加载.NET DLL。 在一台计算机(terminal服务器)上,不pipe更新的版本号如何,旧的文件仍然被使用。

原因很简单:只要一个程序实例正在运行,它已经加载了旧的DLL,新的DLL将永远不会被使用。 所有进一步UnsafeLoadFrom将成为旧的DLL,虽然老版本不再存在硬盘上,因为它已经加载了一段时间。

解决scheme是closures应用程序的所有正在运行的实例,甚至重新启动计算机。 然后所有新的实例将得到更新的DLL。

有可能是从另一个文件夹引用该DLL。 如果您的PATH环境variables中有一个,它甚至可能位于networking驱动器上。 以下是WindowssearchDLL的方式: http : //msdn.microsoft.com/en-us/library/7d83bc18%28v=vs.80%29.aspx