C# FileNotFoundException在方法调用时抛出,而不输入方法

C# FileNotFoundException在方法调用时抛出,而不输入方法,c#,asp.net,.net,C#,Asp.net,.net,因此,我遇到了一个真正令人困惑的FileNotFoundException,我不确定如何进行故障排除 我有一个.cs文件,它作为web页面方法的基本模板。在其中,我有以下私有方法: private void Initialize(object sender, EventArgs e) { // Some initialize functions and... AddWebAnalyticsScript(); } AddWebAnalyticsS

因此,我遇到了一个真正令人困惑的FileNotFoundException,我不确定如何进行故障排除

我有一个.cs文件,它作为web页面方法的基本模板。在其中,我有以下私有方法:

private void Initialize(object sender, EventArgs e)
    {
        // Some initialize functions and...

        AddWebAnalyticsScript();
    }
AddWebAnalyticsScript()
是同一类中的私有函数。它处理一些Google Web分析代码的加载。通过此类调试,我看到AddWebAnalyticsScript()正在为依赖程序集引发FileNotFoundException

我尝试在函数定义中放置断点,因为我假设其中的某些逻辑引用了丢失的程序集。然而,当我在函数定义中放置断点时,我发现这个异常是在函数中执行任何代码之前抛出的;一接到电话就立即发生。我以前从未见过这种情况,也找不到任何关于类似问题的文档。从概念上讲,我不理解为什么在实际执行包含的代码之前,对同一类中定义的函数的调用会寻找程序集

此外,程序集似乎正好出现在引用下它应该出现的位置

所以我很困惑。除了在函数定义中放置断点之外,我想不出还有什么其他方法可以进行故障排除。在AddWebAnalyticsScript()上使用调试器“单步执行”操作;导致立即引发异常

错误文本

{"Could not load file or assembly 'myApplication.Frameworks.WebAnalyticsInterface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0113ab8eb0779932' or one of its dependencies. The system cannot find the file specified.":"myApplication.Frameworks.WebAnalyticsInterface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0113ab8eb0779932"}
堆栈跟踪:

at MyApplication.PageTemplate.AddWebAnalyticsScript()
at MyApplication.PageTemplate.Initialize(Object sender, EventArgs e) in D:\\{filepath}:line 246
at System.EventHandler.Invoke(Object sender, EventArgs e)
at System.Web.UI.Control.OnInit(EventArgs e)
at System.Web.UI.UserControl.OnInit(EventArgs e)
at System.Web.UI.Control.InitRecursive(Control namingContainer)
at System.Web.UI.Control.InitRecursive(Control namingContainer)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
从fusion日志:

LOG: This bind starts in default load context.
LOG: Using application configuration file: D:\MyApp\Web\web.config
LOG: Using host configuration file: C:\Windows\Microsoft.NET\Framework\v2.0.50727\Aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Post-policy reference: MyApp.Frameworks.WebAnalyticsInterface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0113ab8eb0779932
LOG: The same bind was seen before, and was failed with hr = 0x80070002.
ERR: Unrecoverable error occurred during pre-download check (hr = 0x80070002).

非常感谢您的帮助。

正如您所说,在方法内部执行代码之前,您定义的方法不可能需要调用外部程序集

您还提到,有问题的程序集实际上是直接引用的。这并不一定意味着可以找到该程序集的所有从属程序集

为了解决dll加载问题,请始终使用。我引用的文章包含了关于如何打开和使用它的信息。这真的很简单


无法加载程序集的原因可能有很多,包括错误图像格式(x64 vs x86)上的异常、错误的搜索路径等。这些都可以通过Fusion日志加以区分,因为Fusion日志记录了不同路径中的所有尝试,并给出了某个程序集失败的详细原因。

查看异常的堆栈跟踪。
AddWebAnalyticsScript()
中使用的类型是在您第一次调用它时加载的;可能某个地方有一个静态构造函数试图访问某些文件。如果需要帮助,请添加错误和StackTrace…您发现缺少依赖程序集,对吗?那么把它加回去有什么问题吗?增加了stacktrace。不,依赖程序集似乎在那里。但我也试图弄明白为什么在这种情况下它会被引用,因为我认为(理想情况下)如果没有任何东西在使用它/调用成员,它不应该爆炸。+1到codecaster评论。此外,VisualStudio中还有一个选项,可以在引发异常时中断。它在调试->验证下。试试看。谢谢,我会试试看,如果我发现了什么,会告诉你的。添加了Fusion日志的摘录。我不确定这些错误的含义,而且似乎没有太多的文档。是否有更可靠的日志记录实际错误<代码>错误:在预下载检查期间发生不可恢复的错误。相当模糊。@请尝试搜索网站和本网站,了解如何使用Fusion日志记录。“以前见过相同的绑定”错误表示您尚未回收应用程序池。当你这样做时,你会得到一个完整的日志,你可以通读。