Создание и настройка доменов приложений
После того, как основное приложение определило положение границ домена на основании описанных выше критериев, оно использует метод CreateDomain типа System.AppDomain для создания домена, в котором будет работать код пользователя. Каждый домен приложения содержит коллекцию пар "имя-значение", в которой основное приложение может хранить сведения об этом домене. Эти пары передаются как параметр в метод CreateDomain.
Платформа .NET Framework определяет ряд свойств, которые распознаются средой выполнения на машинном уровне. Имена этих свойств определены статическими строками в классе System.AppDomain. Основное приложение может задавать воспринимаемые машинным кодом свойства для настройки домена приложения. Например, эти свойства могут определять способ изоляции кода, работающего в различных доменах. Эти пары "имя-значение" можно расширить таким образом, чтобы основные приложения имели возможность определения тех пользовательских свойств, в которых они могут хранить сведения для определенного сценария.
В целом изоляция, предоставляемая доменами приложений, имеет два вида.
Домен приложения не допускает влияния других доменов на код, работающий в одном домене приложения, путем ввода для сторонних доменов запрета на обнаружение и вызов типов в этом домене. Домены приложения полагаются на то, что код был проверен на защищенность от сбоев памяти.
Основное приложение определяет, в каком месте среда выполнения находит по его поручению код для загрузки в конкретный домен приложения. Это важный момент, поскольку он предотвращает случайное воздействие других приложений на код данного приложения. Возможность ограничения области действия запросов на загрузку кода таким образом значительно отличается от способа работы Microsoft Win32 и COM. В настоящее время в Windows областью разрешения является весь компьютер, поскольку любое приложение может использовать любой код, описанный в реестре или находящийся в общеизвестном расположении, таком как системный каталог Windows. В настоящее время такое общее использование ресурсов устанавливается по умолчанию, и отражается на возможности конфликтов между DLL-файлами.
В дополнение к установлению области для способа загрузки кода важно также ограничить область действия сведений о конфигурации в приложении. Однако в настоящее время это невозможно для многих параметров конфигурации.
Например, если сконфигурирован удаленный компьютер, на котором работает класс COM, параметры RemoteServerName в разделе реестра для конкретного класса влияют на все приложения, использующие этот класс. Аналогично непреднамеренному совместному использованию кода, непреднамеренное совместное использование данных конфигурации не позволяет приложению полностью контролировать свое поведение.
Свойства AppDomainSetup.ApplicationBase и AppDomainSetup.ConfigurationFile определяют, соответственно, управление возможностью задания каталогов, в которых среда выполнения ищет сборки, и ограничение сферы действия параметров конфигурации для конкретного домена приложения.
Свойство ApplicationBase задает корневую папку для домена приложения, в котором среда выполнения ищет закрытые сборки. Если основное приложение разрешает загрузку сборок с диска, необходимо задать значение свойства ApplicationBase, чтобы среда выполнения знала, где искать загруженные сборки.
Свойство ConfigurationFile задает имя XML-файла, в котором содержатся параметры, используемые при настройке работающего в данном домене приложения. Примеры параметров в файле конфигурации приложения включают правила отслеживания версий сборки и инструкции по поиску типов, к которым возможен удаленный доступ для типов, работающих в данном домене приложения.
Описание других свойств, доступных для настройки домена приложения, см. в документации на класс AppDomain.
Примечание о безопасности. Значением по умолчанию для свойства AppDomainSetup.DisallowCodeDownload является false. Этот параметр не является безопасным для служб. Чтобы помочь предотвратить загрузку службами кода с частичным доверием, устанавливайте значение этого свойства равным true.