【问题标题】:Asp.net dll not found error for unused dll未找到未使用 dll 的 Asp.net dll 错误
【发布时间】:2017-06-22 14:28:42
【问题描述】:

我的 asp.net mvc 项目可以正确构建。当我尝试运行时,我收到与我的项目无关的 X.dll not found 运行时错误。似乎,asp.net 尝试以递归方式加载任何依赖项的所有依赖项。

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

【问题讨论】:

  • 可能的修复:将 X.dll 包含到您的部署中。或者不要使用(间接)依赖于 X.dll 的任何代码。
  • 我没有那个 dll。因为我不需要它

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


【解决方案1】:

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

  • 您的引用和引用的依赖关系
  • 您不是在引用 dll,但您可以使用反射动态加载 dll

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

      的配置条目

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

    • 同样,您可能有一个 httphandler 或模块配置来加载类型

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

  • 另一种可能是您的 bin 目录中仅存在此 dll。默认情况下,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>

如果上述步骤都没有帮助,您可以使用融合日志和进程资源管理器/进程监视器找出加载 dll 的位置和原因。检查[这个]( http://www.hanselman.com/blog/BackToBasicsUsingFusionLogViewerToDebugObscureLoaderErrors.aspx)

希望这会有所帮助!

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-09
      • 2021-12-25
      相关资源
      最近更新 更多