web.config中的区别

2017年10月12日

ASP.NET窗体网站中,web.config system.web/compilation/assembly可以添加或删除该网站要使用的类库。常见的删除方法是调用<clear />指令,但是还有<remove>指令,并且在MSDN中出现了*参数的用法。<remove assembly="*" /><clear />到底有什么区别呢?

我并没有在MSDN中找到对<remove assembly="*" />的解释。但是通过查看.NET源代码发现了端倪。

根web.config(C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config)写有<add assembly="*" />,而<remove assembly="*"/>就是移除在根web.config里的那个<add>元素,因为CompilationSection.Assemblies属性并不对remove的星号通配符有特殊处理。而<clear/>是清除所有程序集元素。因此两个指令的作用是不同的。

识别星号通配符的是CompilationSection.LoadAssembly()。如果预加载的程序集是”*”,则调用LoadAllAssembliesFromAppDomainBinDirectory()。可见,星号通配符是用来加载bin文件夹里的所有DLL。同理,如果要禁止自动加载bin文件夹里的所有DLL,就使用<remove assembly="*" />

此外,bin文件夹里的子文件夹里的DLL并不会被自动加载。