如何阻止从GAC加载某些程序集?
我在GAC中安装了一些第三方程序集。 我正在开发一个使用其中一些程序集的ASP.NET。 在开发机器中,如果程序集不在bin文件夹中,它将从GAC加载。 如果由于未报告错误而导致bin文件夹中缺少程序集,则会出现这种情况。 但是,当应用程序部署在共享主机上时,如果bin文件夹中缺少程序集,则应用程序错误。
有没有办法强制应用程序不从GAC加载某些程序集,并在开发机器的bin文件夹中缺少它时报告错误?
据我所知,你不能。
对于这种类型的问题的回答“医生,当我这样做的时候会感到痛苦”通常是“那么不要这样做”。
换句话说:不要将第三方程序集安装到开发机器上的GAC中。
出于理性,我认为你已经知道解决方案是什么。 您应该将这些程序集简单地放在Web应用程序的bin文件夹中,然后在web.config
文件的必需部分中指定程序集名称。 例如,如果它是要在所有页面中注册的服务器控件,请将其添加到pages
部分中。
<pages styleSheetTheme="DefaultTheme" controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
<controls>
<add tagPrefix="telerik" namespace="Telerik.Web.UI" assembly="Telerik.Web.UI" />
</controls>
</pages>
如果它是自定义模块,则应在modules
部分指定...
<httpModules>
<add name="PerRequestLifestyle" type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.Windsor" />
</httpModules>
你应该总是努力设置一个尽可能接近生产环境的开发环境,这意味着使用.NET Framework分发的第三方程序集应该放在bin中......我的意思是,bin文件夹,而不是垃圾bin;)
你不能!。 这是CLR Fusion引擎的一个固定行为。
Fusion引擎(在.Net中加载程序集的责任方)始终走着它的步骤(temp / download / gac / base path / probe path),并且无法阻止/更改它。
如果你在两个地方有一个程序集,那么首先在上面提到的列表中的程序集就会被加载(对于不同的版本可能会非常混淆)。
链接地址: http://www.djcxy.com/p/44439.html上一篇: How to stop certain assemblies from being loaded from the GAC?