我的asp.net mvc项目正确构建。当我尝试运行时,我收到X.dll未找到运行时错误,这与我的项目无关。看来,asp.net试图以递归方式加载任何依赖项的所有依赖项。
我确信我的代码没有访问X.dll中的任何代码,那么asp.net运行时尝试做什么?我该如何解决?
答案 0 :(得分:0)
asp.net项目尝试加载dll的可能原因是
您没有引用dll,但可以使用Reflection
动态加载dll您的配置(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没有帮助。只有调用方法才能捕获错误。异常发生在方法的左大括号上(或者:对于调用其基本构造函数的构造函数)。