在我看来,web.config 在 .net 1.0 和 .net 3.5 之间不断增长,因为“东西”逐渐添加到其中。当我们发布 .net 3.5 时,它已经塞满了我从未使用或修改过的东西。是的,asp.net 运行时需要它,但这不是我的问题!
除非您为某个应用程序专门更改了已迁移到 machine.config 的设置,否则无需在 web.config 中重新创建它。换句话说,通过将 .net 1.1 -> .net 3.5 中添加的所有默认值从 Visual Studio 创建的每个 web.config,曾经 转移到 machine.config,Microsoft 已经使文件更清晰并且更容易阅读。一个经典的例子是这样的:
<sectionGroup name="System.Web" type="System.Web.Configuration.MicrosoftWebSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false"/>
<section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false"/>
<section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false"/>
</sectionGroup>
</sectionGroup>
</sectionGroup>
所有这些混乱都可以在 Visual Studio 2008 生成的 web.config 中找到,但它不会出现在 Visual Studio 2010 生成的 web.config 中,因为它已移至 machine.config 它所属的地方 (但无法移动到 .net 3.0 / .net 3.5 中,因为它们仍在 .net 2.0 CLR 上运行)。
由于这些很少更改,将项目升级到 .net 4.0 并“清理”web.config 文件应该不会导致任何问题。在升级后的项目 web.config 文件中保留冗余配置也应该没有区别,因为 web.config 中的值将简单地覆盖 machine.config 中的值。