Рефакторинг файла .NET 4 web.config - в чем ценность? - PullRequest
3 голосов
/ 18 февраля 2011

Согласно , что нового в .NET 4 : «основные элементы конфигурации были перемещены в файл machine.config, и приложения теперь наследуют эти настройки».

Я нахожусьпроект обновляется с .NET 3.5 до .NET 4, и у меня есть несколько вопросов об этом изменении:

  • Я предполагаю, что это изменение не является обязательным: если я оставлю свой текущий файл web.config как есть,он должен нормально работать под .NET 4 - правильно?
  • Это усовершенствование, по-видимому, имеет сомнительное значение: конфигурация не была упрощена - сложность / разложенность была только что перемещена в файл machine.config вместоweb.config.Я что-то упустил?
  • Похоже, что это улучшение на самом деле делает развертывание более сложным: в дополнение к уже выполненным шагам по развертыванию, теперь нам также нужно изменить файл machine.config, чтобы он содержал наши ожидаемые настройки/values.

Как вы видите, мое первоначальное решение заключается в следующем: это хлопоты, и я не хочу этого делать.Есть ли какая-то перспектива, которую я упускаю, которая делает это изменение особенно полезным и ценным?

РЕДАКТИРОВАТЬ: Натан и Роб - оба ваших ответа были очень полезны и высоко оценены - было трудно принять решениекоторый помечается как «реальный» ответ.Я проголосовал за оба, конечно.Еще раз спасибо!

Ответы [ 2 ]

2 голосов
/ 18 февраля 2011

Вам не нужно изменять 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 голосов
/ 18 февраля 2011

С моей точки зрения, web.config росло и росло между .net 1.0 и .net 3.5, так как в него постепенно добавлялись «вещи». К тому времени, как мы выпустили .net 3.5, он был переполнен вещами, которые я никогда не использовал и не модифицировал. Да, это требовалось во время выполнения asp.net, но это не моя проблема!

Если вы специально не изменили настройку, которая была перенесена на machine.config для одного из ваших приложений, нет необходимости заново создавать его в вашем файле web.config. Другими словами, сместив все значения по умолчанию, которые были добавлены в .net 1.1 -> .net 3.5, с каждого web.config, созданного Visual Studio, с на 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.

...