那是设计使然。system.webServer部分实质上定义了IIS本身。如果您拥有,那么您将一无所有。在applicationHost.config中,您应该具有以下内容:
<modules>
<add name="HttpCacheModule" lockItem="true" />
<add name="DynamicCompressionModule" lockItem="true" />
<add name="StaticCompressionModule" lockItem="true" />
<add name="DefaultDocumentModule" lockItem="true" />
<add name="DirectoryListingModule" lockItem="true" />
<add name="IsapiFilterModule" lockItem="true" />
<add name="ProtocolSupportModule" lockItem="true" />
<add name="HttpRedirectionModule" lockItem="true" />
<add name="StaticFileModule" lockItem="true" />
...
注意lockItem属性。因为有1个或更多的锁定项,将引发锁定冲突。
因此,您只需要从web.config中专门删除不需要的项,或者如果您确实需要清除所有项并添加回自己的项,则在applicationHost.config中,删除上的lockItem =“ true”每个元素,并确保将它们添加回去,以便您的Web服务器可以正常工作。
编辑
(根据Daniel的要求,从Daniel处获得了进一步的信息。(斯科特)
这是我根据Scott所说的所做的:
在%windir%\ system32 \ inetsrv \ config中打开applicationHost.config。请注意,在64位Windows Server 2008中,您将需要使用64位编辑器编辑文件(本机Notepad可以,但是Notepad ++将无法找到该文件)。有关更多信息,请参见此处。
在元素中,将所有模块上的lockItem属性更改为false。
然后,在我的Web应用程序的web.config文件中,可以执行以下操作:
<system.webServer>
<modules>
<clear />
</modules>
</system.webServer>
当然,正如Scott所指出的,这意味着没有Web服务器了,因此这是使我的东西再次运行(YMMV)所需的最少模块集:
<add name="HttpRedirectionModule" lockItem="false" />
<add name="StaticFileModule" lockItem="false" />
<add name="CustomLoggingModule" lockItem="false" />
<add name="CustomErrorModule" lockItem="false" />
<add name="IsapiModule" lockItem="false" />
<add name="AnonymousAuthenticationModule" lockItem="false" />
另外,对于任何感兴趣的人,这里都是我为什么这么做的背景故事。