如何阻止从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?

下一篇: Where are assemblies in .NET physically located?