我有一个看似随机的问题,我的项目将使用不再存在的旧版DLL文件运行。有时会使用DLL文件的真实版本,有时会使用古老版本的DLL文件。谁知道Visual Studio从哪里获取这个DLL文件 - 它已经过时了几个月!
我知道它正在使用旧的DLL文件,因为当应用程序运行时,我开始变得奇怪的'TypeLoadExceptions',抱怨方法不存在或没有实现。
以下行动有时会有所帮助,有时不会:
有时我执行以上所有步骤,它仍然使用DLL文件的旧副本。它隐藏在哪里?!
我们使用TeamCity的MSBuild服务器上存在同样的问题。当TeamCity尝试运行单元测试时,它使用旧的DLL文件。
现在,我知道我可以在web.config
文件中使用程序集重定向,但DLL文件的版本号没有改变(我不打算更新它,所以它只停留在版本1)。我不想只是为了解决这个问题而开始对DLL文件进行版本控制。我想知道我需要清除哪些特定的缓存,以便我可以继续开发。
答案 0 :(得分:40)
它隐藏在GAC中。在那里它可能无限期地存在。使用更新版本可能确实可以解决问题,但Visual Studio中存在一个与选择正确版本的DLL文件有关的突出错误。 (如果DLL Hell还不够糟糕,Visual Studio团队会让情况变得更糟!)
在GAC中查找它很棘手,我无法告诉您如何执行此操作,但是一旦旧版本从那里删除,将无法再次找到它。有时,即使您将编译器指向较新的版本(按日期),它也将使用旧版本,因为它具有相同的版本级别(按版本)。这是它的错误。
答案 1 :(得分:22)
谁知道Visual Studio从哪里获得这个dll-几个月了 过时了!
Modules Window是你的朋友......
它会告诉您该文件的确切位置。如果附加调试器,甚至可以将它与任意进程一起使用。
答案 2 :(得分:3)
我也猜测他们藏在GAC中。 您可以查看“C:\ Windows \ assembly”以查看所有dll并从那里取消注册。
答案 3 :(得分:3)
构建订单或项目可能存在问题。
如果您的Test项目是在应用程序项目之前构建的,则会导致您描述的行为。
要解决此问题:
右键单击VS中的主项目并选择项目依赖项... < / i>选项并检查构建顺序。通过正确设置这些依赖关系,可以在此处对构建子序列进行更改。
答案 4 :(得分:1)
在我的情况下,这导致切换到 Release 模式,该模式具有不同的配置(使用DLL的不同位置)。
答案 5 :(得分:1)
我有一个类似的问题(但没有Visual Studio)。我正在使用UnsafeLoadFrom加载.NET dll。 在一台计算机(终端服务器)上,旧文件仍然在使用,无论更新的版本号等等。
原因很简单:只要程序实例正在运行,它已经加载了旧的dll,就永远不会使用新的dll。所有进一步的UnsafeLoadFrom都将成为旧的dll,虽然旧版本不再存在于硬盘上,因为它已经在前一段时间内加载了。
解决方案是关闭所有正在运行的应用程序实例,甚至重新启动计算机。然后所有新实例都将获得更新的dll。
答案 6 :(得分:1)
在我的情况下,我使用Visual Studio发布网站,虽然我检查dll文件的引用已更改,但已发布的dll仍然是旧的。最后,我新建了Publish Web Profile
并选择了正确的配置(例如Debug - x86 / Release - Any CPU
),再次发布,然后更正了dll。
答案 7 :(得分:1)
虽然这个问题很老,但也许有人会在寻求解决方案的过程中再次偶然发现它。 在我的情况下,我得到一个ASP.Net页面的CS0433错误。删除项目的obj \和bin \文件夹中的内容后,它再次起作用。可能必须使用封闭的Visual Studio完成。也许还可以在同一解决方案中清除引用项目中的那些文件夹(如果在项目中使用而不是通过Nuget提取)。
答案 8 :(得分:0)
可能是从另一个文件夹引用DLL。如果您的PATH环境变量中有一个,它甚至可以在网络驱动器上。以下是Windows搜索DLL的方式: http://msdn.microsoft.com/en-us/library/7d83bc18%28v=vs.80%29.aspx
答案 9 :(得分:0)
答案 10 :(得分:0)
如果发现此类问题,请删除参考dll和pdb扩展文件,添加新参考并重建项目。这通常是由于没有重建项目,提交和更新而发生的。
答案 11 :(得分:0)
就我而言,旧DLL位于
C:\Windows\Microsoft.NET\assembly\GAC_MSIL\MyDLL\MyDLL.dll
它没有显示在c:\Windows\assembly
中。
我在驱动器中搜索了MyDLL,它的显示如上所示。当时我正在调试我的测试应用程序,并尝试删除有问题的文件夹...不行...它已被Visual Studio锁定。我必须停止调试我的应用程序,关闭Visual Studio,然后删除该文件夹。问题解决了!!我不知道我的DLL如何到达那里,但是自从我删除它以来,它没有出现在那儿。
答案 12 :(得分:0)
我尝试了很多事情,包括重新安装VS 2107。 您可以在“输出”窗口中查看从何处加载DLL文件。遍历所有地雷,寻找我的地雷项目DLL后,我找到了它。
清除这个对我有用。
C:\ Users \ YourUser \ AppData \ Local \ assembly \ dl3 \ 222Q4G1T.8AT \ JBEAR7PB.E3J \ 8bfcf9ab \ 6e61cbd5_30acd401 \ YourDLL.dll'
我实际上删除了以下所有文件:
C:\ Users \ YourUser \ AppData \ Local \ assembly \
答案 13 :(得分:0)
对我来说,解决方法是确保IIS中的虚拟目录指向正确的目录。我的系统上有两个项目,一个v4和一个v5。开发系统上的虚拟目录指向v4 bin目录,而不是v5 bin目录-哎呀!
答案 14 :(得分:0)
正在dll中缓存的文件,我无法跟踪该文件,因此最终重命名了该文件。这可能无法解决此处提到的问题,但这是与该问题相关的对我有用的修复程序。
答案 15 :(得分:0)
圣乌鸦!我有一套旧的应用程序套件,包括2个Web服务,一堆类库和一个单击一次应用程序。好吧,单击一次停止了VS 2005的发布,出现了一系列“未找到”错误。因此,我没有像现在这个网站上建议的那样去破解我的注册表,而是想到了将项目升级到2017年的时候了。嗯,当我这样做时,Web服务项目中的项目引用就丢失了。然后,VS 2017一定不是要告诉我有错误,而是必须转到C:\ Users \ XXX \ AppData \ Local \ Temp \ WebSitePublish或C:\ Users \ XXX \ AppData \ Local \ Microsoft \中的某些缓存文件VisualStudio \ 8.0 \ ProjectAssemblies或C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files \ root和“有帮助”地只是使用这些文件!我必须使用自定义程序进行硬盘搜索,以找到C:\驱动器上的所有文件,并在最终得到错误之前将其删除!