【问题标题】:.NET 4 web.config file refactoring - what's the value?.NET 4 web.config 文件重构 - 有什么价值?
【发布时间】:2023-03-29 13:25:02
【问题描述】:

根据what's new in .NET 4:“主要配置元素已移至 machine.config 文件,应用程序现在继承这些设置。”

我正在进行从 .NET 3.5 升级到 .NET 4 的项目,我对此更改有一些疑问:

  • 我认为此更改是可选的:如果我保留当前的 ​​web.config 文件原样,它应该可以在 .NET 4 下正常运行 - 对吗?
  • 此增强功能似乎具有可疑的价值:配置尚未简化 - 复杂性/膨胀只是重新定位到 machine.config 文件而不是 web.config。我错过了什么吗?
  • 似乎这种增强实际上使部署变得更加困难:除了我们已经拥有的部署步骤之外,现在我们还需要修改 machine.config 文件以确保它包含我们预期的设置/值。

如您所见,我最初对此的看法是:这很麻烦,我不想这样做。是否有一些我遗漏的观点使这种变化特别有用和有价值?

编辑: Nathan 和 Rob - 您的回答都非常有帮助并且非常感谢 - 很难决定将哪个标记为“真实”答案。当然,我对两者都投了赞成票。再次感谢!

【问题讨论】:

  • @David - 我确实看过那篇文章,但它似乎更关注 web.config 与 machine.config 的机制。我对更改的主观价值、它对从 3.5 升级的影响以及对部署过程的影响更感兴趣。阅读相关帖子总是很好(有时 SO 搜索找不到您需要的内容)。谢谢指点!

标签: asp.net configuration .net-4.0 web-config


【解决方案1】:

您无需修改​​machine.config,除非您希望这些设置成为服务器上运行的所有应用程序的默认设置。

web.config 中移出的大部分内容是随 .NET 3 和 3.5 发布而添加的“样板”配置项。 ASP.NET 需要它们来注册控件、处理程序等,但它们很少是您真正需要修改或关心的东西。

所以基本上这对您很有用,因为对您来说只是“白噪声”的配置项现在已被移走,让您可以专注于实际想要操作的设置。

ScottGu 在他的博客文章中讨论了这个主题:http://weblogs.asp.net/scottgu/archive/2009/08/25/clean-web-config-files-vs-2010-and-net-4-0-series.aspx

【讨论】:

    【解决方案2】:

    在我看来,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 中的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-24
      • 1970-01-01
      • 2018-01-20
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      相关资源
      最近更新 更多