.net 如何强制将特定程序集加载到MVC2应用程序的每个应用程序域中?

.net 如何强制将特定程序集加载到MVC2应用程序的每个应用程序域中?,.net,asp.net,asp.net-mvc,iis,reflection,.net,Asp.net,Asp.net Mvc,Iis,Reflection,我有一些松散耦合的代码,这些代码取决于加载到当前应用程序域中的特定程序集: Assembly assembly = AppDomain.CurrentDomain.GetAssemblies().Where( candidateAssembly => candidateAssembly.FullName.StartsWith("Microsoft.WindowsAzure.ServiceRuntime")).SingleOrDefault(); 该代码在MVC2应用程序内执行,并

我有一些松散耦合的代码,这些代码取决于加载到当前应用程序域中的特定程序集:

Assembly assembly = AppDomain.CurrentDomain.GetAssemblies().Where(
    candidateAssembly => candidateAssembly.FullName.StartsWith("Microsoft.WindowsAzure.ServiceRuntime")).SingleOrDefault();
该代码在MVC2应用程序内执行,并生成空引用,因为该程序集未加载到当前应用程序域中。我可以从该程序集中调用一些代码,但这将引入应用程序代码对该程序集的强依赖性,我不再有松耦合

在代码运行之前,我需要强制IIS或其他任何程序将该程序集加载到应用程序域中。我试图编写IHttpModule的一个实现,并将其列在web.config中,但没有帮助

到目前为止,我试图在下面添加程序集,看起来它可以工作,但我不确定它是否可靠


如何在不在代码中引入依赖项的情况下强制将特定程序集加载到应用程序域中?

这是错误的方法,可能会导致严重的定时错误

该设置会影响ASP.NET编译,因此它仅在编译ASP.NET视图时强制加载程序集,并且这些视图最多编译一次-在第一次请求该视图时或在就地预编译过程中(如果后者已设置)。无论如何,总有一段时间不需要编译ASP.NET视图

现在,IIS应用程序池每29小时自动回收一次。当池回收时,它启动一个新的工作进程,该进程开始承载站点负载。重要的是ASP.NET视图在此过程中不会更改,因此不需要重新编译它们,因此不会调用编译过程,因此不会强制加载中列出的程序集

所以这个东西看起来一直工作到29个小时过去,然后它就崩溃了


需要一个更好的解决方案。类似于说明Azure运行时是否可用的设置。如果设置了该设置,那么代码可以对Azure运行时程序集中的代码进行第一次调用,这将使它们加载。如果未设置设置,则不会尝试调用该代码。

Assembly.load应加载程序集,前提是您知道该程序集的名称。MEF还有查找和加载程序集的方法AFAIK@Simon哈尔西:这也是一个硬依赖,我想要一些不需要修改代码的东西。在这种情况下,我也会依赖依赖依赖注入工具。例如,StructureMap支持扫描特定目录中的程序集,非常适合那些拖放插件要求。