Конфигурация ASP.NET
190ASP.NET --- ASP.NET Web Forms 4.5 --- Конфигурация
В этой и последующих статьях мы рассмотрим возможности настройки конфигурации ASP.NET, настройки файла Web.config, как использовать систему конфигурации для определения конфигурационных значений и каким образом создавать собственные добавления.
В качестве примера мы создали новый проект под названием ConfigFiles, используя шаблон ASP.NET Empty Web Application (Пустое веб-приложение ASP.NET) в Visual Studio. В проект мы добавили веб-форму по имени Default.aspx, которая будет применяться для отображения конфигурационной информации. Контент этой веб-формы представлен в примере ниже:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
Inherits="ConfigFiles.Default" %>
<!DOCTYPE html>
<html>
<head runat="server">
<title></title>
</head>
<body>
<asp:Repeater ID="Repeater1" runat="server" SelectMethod="GetConfig" ItemType="System.String">
<HeaderTemplate>
<ul>
</HeaderTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
<ItemTemplate>
<li><%# Item %></li>
</ItemTemplate>
</asp:Repeater>
</body>
</html>
Внутри этой веб-формы используется элемент управления Repeater для генерации элементов <li> из элементов данных, возвращаемых методом GetConfig() класса отделенного кода. Первоначально этот метод реализован в виде заглушки, как показано в примере ниже, но мы будем применять его для демонстрации различных конфигурационных средств по мере продвижения.
using System.Web.Configuration;
using System.Collections.Generic;
namespace ConfigFiles
{
public partial class Default : System.Web.UI.Page
{
public IEnumerable<string> GetConfig()
{
yield return "Простая заглушка";
}
}
}
Иерархия конфигурации
Мы начнем с объяснения, как среда ASP.NET обрабатывает конфигурационные параметры для приложения. В большинстве случаев мы применяем конфигурационные параметры в файле Web.config, расположенном в корневой папке приложения, но это только одна часть иерархии конфигурационных файлов, которые ASP.NET объединяет для получения конфигурационной информации.
Когда конфигурационные элементы определяются в файле Web.config, они всегда переопределяют значения, указанные в файлах, которые находятся выше в иерархии. В таблице ниже перечислены конфигурационные файлы и их позиция в рамках иерархии.
Область действия | Имя | Описание |
---|---|---|
Глобальная | Machine.config | Это файл верхнего уровня в иерархии, в котором определены разделы конфигурации, используемые в примерах, такие как system.web. Изменения в этом файле влияют на каждое приложение ASP.NET, выполняющееся на сервере. (Местоположение этого файла указано ниже.) |
Глобальная | ApplicationHost.config | В данном файле определены разделы конфигурации и стандартные значения для IIS или IIS Express. Это второй уровень иерархии, который применяется для определения разделов, специфичных для сервера приложений, таких как system.webServer. (Местоположение этого файла указано ниже.) |
Глобальная | Web.config | Это глобальная версия файла Web.config. Он расположен в той же папке, что и файл Machine.config. В данном файле предоставляются стандартные значения для конфигурационных элементов ASP.NET, и он находится на втором уровне иерархии. Изменения в этом файле переопределяют параметры в Machine.config |
Сайт | Web.config | Сайт ASP.NET - это иерархия папок IIS, которая может содержать множество приложений. Файл Web.config в корневой папке сайта устанавливает стандартную конфигурацию для всех приложений в рамках сайта. Этот файл находится на третьем уровне иерархии и применяется для переопределения параметров в глобальном файле Web.config |
Приложение | Web.config | Это файл Web.config в корневой папке приложения. Данный файл чаще всего используется разработчиками для целей конфигурирования, и он переопределяет значения, указанные в файле Web.config уровня сайта |
Папка | Элементы location | Элемент location в файле Web.config уровня приложения позволяет устанавливать конфигурационные параметры для папки внутри приложения, указанной в атрибуте path |
Папка | Web.config | Это файл Web.config, добавляемый в папку внутри приложения. Он дает такой же эффект, как и атрибут location в файле Web.config уровня приложения |
Мы должны заботиться о порядке файлов в иерархии из-за способа, которым ASP.NET объединяет эти файлы с целью создания единого набора конфигурационных элементов, предназначенного для применения к приложению.
Среда ASP.NET начинает с файла Machine.config, находящегося в самом верху иерархии - это предоставляет начальную объединенную конфигурацию. Затем ASP.NET перемещается на второй уровень иерархии и обрабатывает файл ApplicationHost.config и глобальный файл Web.config. В объединенную конфигурацию добавляются новые элементы, а элементы, которые уже существуют, используются для изменения ранее определенных параметров.
Этот процесс продолжается по иерархии вплоть до достижения файла Web.config уровня приложения, а встречающиеся элементы применяются для расширения объединенной конфигурации или замены существующих значений параметров. Наконец, обрабатываются элементы location и файлы Web.config уровня папок, в результате чего создаются конфигурации, специфичные для частей приложения.
Мы заметили, что по мере расширения использования облачных служб и совершенствования платформ хостинга сайты ASP.NET применяются все реже и реже. Мы рекомендуем больше не пользоваться сайтами и устанавливать приложения изолированно друг от друга.
В конечном итоге получается согласованное представление конфигурации приложения с дополнениями, которые применяются к отдельным папкам. Чтобы упростить понимание способа объединения иерархии, мы проиллюстрировали отношения между различными файлами на рисунке ниже:

Если любой из файлов отсутствует, среда ASP.NET переходит на следующий уровень иерархии. (Как уже упоминалось, в глобальных файлах определена структура, которую файлы, расположенные ниже в иерархии, используют для определения конфигурационных значений.)
Причина, по которой большинство разработчиков имеют дело с файлом Web.config уровня приложения, связана с недоступностью файлов из более высоких уровней иерархии, что почти всегда характерно для платформ хостинга и облачных платформ, а также часто происходит в случае применения серверов IIS в закрытых дата-центрах.
Во время разработки иногда необходимо изменять глобальные конфигурационные файлы для воссоздания параметров, с которыми придется работать в производственной среде. Причина в том, что не все конфигурационные параметры могут быть определены в файле Web.config уровня приложения. Файл Machine,.config и глобальный файл Web.config расположены в следующей папке:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config
Указанный путь может несколько отличаться, если вы пользуетесь более новой версией платформы .NET или установили операционную систему Windows в нестандартном местоположении. Файл ApplicationHost.config, применяемый IIS Express, можно найти в такой папке (здесь <пользователь> понадобится заменить именем текущего пользователя):
C:\Users\<пользователь>\Documents\IISExpress\config
Никаких специальных примеров для демонстрации иерархии конфигурации в этом разделе не предусмотрено, но мы будем возвращаться к данной теме в последующих статьях, потому что она лежит в основе многих поведенческих аспектов приложения ASP.NET.