“无法加载文件或程序集’XXX.YYY’或其依赖项之一。 该系统找不到指定的文件。”

我有一个.net visual studio解决方案,包含许多项目(类库和Web应用程序)。

我做了一些refractoring,它在项目之间移动文件,创建新项目,删除未使用的项目,并重命名一些现有项目。

解决方案构建没有问题,但是当我运行Web应用程序时,会发生以下exception:

“无法加载文件或程序集’XXX.YYY’或其中一个依赖项。系统找不到指定的文件。”

这个名为XXX.YYY的项目在refractoring中删除了一个名为XXX.YYY的dll。 但这不适用于应用程序中的任何位置。 我删除了web应用程序obj目录和bin文件夹并重建但仍然会发生。

任何人都有任何想法,这可能发生,任何提示?

更新:

更新我的问题。 我将代码放在另一台计算机上并从那里运行它,它构建并成功运行,没有出现此问题。 所以这让我觉得问题在于我的PC而不是代码库。 也许我的电脑上有缓存的东西。 我确实在“C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files”中删除了我的临时文件,但没有运气。

所以其他任何可能被缓存或任何其他原因在我的PC上发生。

进一步更新

关于此的另一个更新。 我在其他开发人员机器上运行了相同的代码,并没有运行它的问题。 所以一定要在我的机器上做点什么! 我们机器上唯一不同的是我在经典模式下使用应用程序的应用程序池运行IIS7。 另一个开发人员正在运行IIS6。

2件新信息。 首先在我的web.config中的httpmodules中,我必须在添加之前删除自定义的http模块。 其他开发人员不必这样做。 其次,我已经能够修复“无法加载文件或程序集’XXX.YYY’或其中一个依赖项”问题通过“hack”,这只是一个短期修复,通过在我的项目中创建一个名为XXX的类库.YYY并包括要查找的类,这些都是自定义控件,即。 inheritance自System.Web.UI.WebControls.WebControl。

还有什么想法……

有两个可能的原因。

1)运行webapp时,仍然可以在计算机上的某个位置使用旧的程序集。 您的旧程序集引用了旧程序集“XXX.YYY”。

2)您构建的最新二进制文件仍引用旧程序集“XXX.YYY”。

要找出webapp使用的程序集,如果运行的是调试程序,可以从输出窗口轻松找到它。 它应该是输出的前几行。 另一种方法是在调试期间在VS.NET IDE中打开Module窗口。

如果由于某些原因无法调试它或者连接调试器时遇到问题,另一种更简单的方法是使用fuslogvw 。 它为您提供了所有成功加载的assemblis以及无法加载的程序集的确切位置。 请确保在Windows 7中以管理员身份运行fuslogvw。

在找到webapp成功加载的程序集后,可以对这些程序集执行ildasm以查看它们引用的程序集。 不幸的是,你需要逐个检查它们。

我的猜测是,一些成功加载的程序集实际上来自ASP.NET缓存或GAC中的某个位置。

只检查项目构建配置..如果你的引用上有一个64位编译的dll,你的主项目是32位(或任何cpu和你的机器是32位),反之亦然你会得到这个错误

在所有EXE和DLL上使用Dependency Walker (取决于)来查看哪个具有缺失的依赖项。 您应该从项目的工作目录运行depends以获得最佳结果。

一旦你知道哪个EXE / DLL是罪魁祸首,进入该项目的设置,看看是否提到了抱怨的依赖关系。

编辑:几分钟前我发生了另一件事…如果你的任何依赖项被“阻止”,因为它们被某些MS tardware标记为已下载(例如,当你使用Inet浏览器进行DL时)可能会阻止加载可执行代码。 使用Windows资源管理器查看可执行文件的属性(DLL / EXE),看看它们是否在第一页上有解除阻止按钮。 如果是这样,请单击该按钮。 这花了我一些时间才弄清楚,希望它会有所帮助。

为构建输出启用诊断日志记录(TOols – >选项 – >构建并运行 – >输出日志详细程度 – >诊断)并构建解决方案并查看Visual Studio从哪里选择dll(somedll.dll版本xxx.yy)。 现在运行Application并查看运行时尝试解析dll的位置。 (Windbg是一个选项)。

解决方案搜索文本“XXX.YYY”并删除所有出现的内容。 也许你已经在一些web.config文件中遗漏了。

此外,如果解决方案搜索没有找到任何内容,您可以检查* .csproj文件。 它们基本上是文本文件,因此删除引用应该没有问题。

你只是缺少一个依赖。 它可能像项目A的情况引用了项目B,它引用了项目C.您的输出目录缺少项目C的DLL。

好消息我已经解决了这个问题! 我不得不重新安装我的.net运行时环境。 我还从IIS中删除了网站并再次读取了该网站。 当我运行它时,问题没有发生,网站运行。

非常感谢大家的帮助和帮助,非常感谢。 所有的建议和帮助引导我朝着解决这个问题的方向前进!

转到Visual Studio中的Solution Explorer中的References 。 选择受到抱怨的程序集。 选择它并转到“ View菜单选项,然后选择底部的“ Property Window ”。 选择程序集时,在属性窗口中查看其属性并查找“ Copy Local值。 如果其值设置为False ,则将其设置为True 。 构建解决方案并发布它。 它应该成功解决问题。