在ASP.NET程序中,我们是可以在各个目录放置不同的web.config文件的,但有时在非根目录先放置的web.config文件会导致这样的错误提示:
"在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。如果在 IIS 中没有将虚拟目录配置为应用程序,则可能导致此错误。"
"It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS. "
网上有不少相关的帖子,主要的解决方法如下:
解决方法1(不推荐):
在IIS将该目录做成应用程序:打开IIS —> 默认Web站点 —> 找到该目录右键打开属性页 —> 目录(或虚拟目录)卡 —> 在下半部分“应用程序设置”处点第一项的“创建”,把该目录做成应用程序。
解决方法2(不推荐):
若IIS中没有应用程序名,先创建,若还不行把C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config中的所有allowDefinition="MachineToApplication"改为allowDefinition="Everywhere"
解决方法3:
在Web.config文件中删除<authentication mode="Windows" />结点就可以了。
要注意的一点是,我们首先要理解这个错误,再视图去消除这个错,其实大部分时候是不应该用第一种和第二种解决方法去消除出错提示的,这个出错提示的出现是因为web.config中的某些节点在一个IIS应用程序中是只能设置一次的,比如<authentication>节,所以大部分时候这个错误是由于多个子目录下存在多个web.config导致的,比较谨慎的解决方法应该是仔细查看出问题目录下的web.config,剔除掉不能重复设置的节点。
附:对于DNN用户,任何子目录下被误插入了web.config文件都会导致这个错误,删除误插入了web.config文件即可解决问题。