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并不会被自动加载。