Asp.net dll未找到未使用的dll错误

时间:2017-06-22 14:28:43

标签: asp.net asp.net-mvc iis .net-assembly

我的asp.net mvc项目正确构建。当我尝试运行时,我收到X.dll未找到运行时错误,这与我的项目无关。看来,asp.net试图以递归方式加载任何依赖项的所有依赖项。

我确信我的代码没有访问X.dll中的任何代码,那么asp.net运行时尝试做什么?我该如何解决?

2 个答案:

答案 0 :(得分:0)

asp.net项目尝试加载dll的可能原因是

  • 您的参考文献和参考依赖
  • 您没有引用dll,但可以使用Reflection

    动态加载dll
    • 在您的代码中,您可能正在使用Assembly.Load或其中的任何变体。因此,在运行时,这会尝试加载该程序集及其依赖程序集
    • 您的配置(web.config)可能是指该dll。例如,您可能有任何配置条目将使用类型

      <log4net> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      </layout> </appender>

    • 类似地,您可能有一个httphandler或模块配置,您正在加载类型

      <httpHandlers>
      <add verb="*" path="test" type="MyHttpHandler.CustomHandler,CustomHandler"/> </httpHandlers>

  • 另一种可能性就是你将这个dll简单地存在于你的bin目录中。默认的asp.net会尝试加载bin目录中存在的所有dll,因为root web.config( C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config )设置

    <system.web> <compilation> <assemblies> <add assembly="*" /> </assemblies> </compilation> </system.web>

如果上述步骤都不起作用,您可以使用Fusion日志和进程资源管理器/进程监视器找出加载DLL的位置和原因。检查[this]( http://www.hanselman.com/blog/BackToBasicsUsingFusionLogViewerToDebugObscureLoaderErrors.aspx

希望这有帮助!

答案 1 :(得分:0)

您正在调用一个方法,该方法具有一个在X.dll中声明其类型的局部变量。即使if路径将使您远离参考,抖动仍会尝试访问它。

在我弄清楚这条规则之前,我有点几次。如果任何方法得到jitted,它可以通过任何路径引用程序集(包括编译器无法证明的静态不可达路径;在C#中,对于编译器可以证明其无法访问的所有情况,您将收到无法访问的代码错误/警告),装配将被加载。此外,方法中的try / catch / ignore没有帮助。只有调用方法才能捕获错误。异常发生在方法的左大括号上(或者:对于调用其基本构造函数的构造函数)。