Загрузка и выполнение пользовательского кода
Основной причиной написания основного приложения является настройка среды приложения, в которой работает управляемый код пользователя. В этом контексте под кодом пользователя понимается любой управляемый код, не являющийся частью основного приложения. Например, в основном приложении Internet Explorer кодом пользователя являются управляемые элементы управления и скрипты, содержащие HTML-страницы. В основном приложении сервера приложений кодом пользователя является код, содержащий корпоративные бизнес-правила, которые выполняются сервером приложений и находятся под его управлением.
Весь управляемый код является частью класса Assembly. В результате все методы, доступные для загрузки и выполнения управляемого кода, основываются на сборках. Например, классы System.AppDomain и System.Reflection.Assembly содержат методы, которые позволяют основному приложению загружать сборку. Методы Load реализуются в различной форме: для некоторых из них достаточно задания имени сборки, другие требуют указания полного пути к файлу, содержащему манифест сборки, и т. д. Эти методы используются для загрузки тех сборок, которые были ранее созданы и сохранены на диске.
Предположим, что только что описанное основное приложение сервера приложений позволяет пользователям написать управляемый код бизнес-правил, который загружается и выполняется в процессе сервера приложений. Когда запрос на запуск метода для конкретного бизнес-правила поступает на сервер приложений, код основного приложения среды выполнения сервера определяет, в каком домене нужно выполнять этот код, или же создается новый домен. Код основного приложения среды выполнения использует затем один из методов Load для загрузки сборки, содержащей эти бизнес-правила, и использует отражение для выполнения метода в этом бизнес-правиле. Дополнительные сведения см. в документации, посвященной пространству имен System.Reflection.
Пространство имен System.Reflection.Emit также предоставляет типы для динамически созданных сборок. Загрузка сборок таким способом полезна в том случае, если приложение представляет собой код, обрабатывающий скрипт.
Например, программа работы с текстами может поддерживать макросы, с помощью которых пользователи могут настраивать поведение этого приложения. После загрузки среды выполнения и создания домена приложения программа обработки текстов может скомпилировать скрипты макросов в управляемый код и создать сборку с помощью System.Reflection.Emit. Затем созданная сборка может быть загружена в домен приложения и запущена. Ввиду зависимости от конкретного сценария, эта сборка может существовать, только пока существует приложение (т. е. она никогда не будет сохраняться на диске).