9

我有一个带有多个项目(类库和 Web 应用程序)的 .net Visual Studio 解决方案。

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

该解决方案构建没有问题,但是当我运行 Web 应用程序时,出现以下异常:

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

重构中删除的名为XXX.YYY的项目输出了一个名为XXX.YYY的dll。但这并没有在应用程序的任何地方使用。我删除了 web 应用程序 obj 目录和 bin 文件夹并重建,但它仍然发生。

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

更新:

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

因此,可以缓存的任何其他内容或任何其他原因导致它发生在我的 PC 上。

进一步更新

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

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

任何进一步的想法......

4

8 回答 8

6

有两个可能的原因。

1) 当你运行你的 webapp 时,你仍然在你机器上的某个地方使用旧的程序集。您的旧程序集引用了旧程序集“XXX.YYY”。

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

要找出你的 webapp 使用了哪些程序集,如果你正在运行调试器,你可以很容易地从输出窗口中找到它。它应该是输出的前几行。另一种查找方法是在调试期间在 VS.NET IDE 中打开模块窗口。

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

找出您的 webapp 成功加载了哪些程序集后,您可以对这些程序集执行 ildasm 以查看它们引用了哪些程序集。不幸的是,您需要一一检查。

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

于 2011-01-02T18:28:12.087 回答
2

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

于 2011-12-07T18:28:22.040 回答
1

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

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

于 2011-01-01T23:48:17.090 回答
1

只需检查项目构建配置.. 如果您的引用中有 64 位编译的 dll 并且您的主项目是 32 位(或任何 cpu 并且您的机器是 32 位),反之亦然,您将收到此错误

于 2011-01-01T23:17:59.917 回答
1

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

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

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

于 2011-01-01T23:18:45.690 回答
0

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

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

于 2011-01-08T15:22:40.300 回答
0

您只是缺少一个依赖项。可能是项目 A 引用了项目 B,而项目 B 又引用了项目 C。您的输出目录缺少项目 C 的 DLL。

于 2011-01-02T00:15:17.803 回答
0

进入Referencesin 。Solution Explorer_ Visual Studio选择被投诉的程序集。选择它并转到View菜单选项并Property Window在底部选择。选择组件后,在属性窗口中查看其属性并查找Copy Local值。如果其值设置为False,则将其设置为True。构建解决方案并发布它。它应该成功地解决了这个问题。

于 2015-08-25T08:19:39.467 回答