Использование отдельного домена приложений для предотвращения сбоя
Управляемые надстройки, реализующие интерфейс IDTExtensibility2, по умолчанию загружаются в тот же домен приложений. Если в домене приложений происходит сбой надстройки, это может привести к сбою других надстроек в этом же домене приложений.
Чтобы обойти эту проблему, для надстройки можно создать оболочку совместимости, позволяющую загрузить надстройку в ее собственный домен приложения. Оболочка совместимости — это неуправляемая библиотека DLL, написанная на C++. При использовании оболочки совместимости регистрируется эта оболочка, а не надстройка. Outlook загружает оболочку совместимости, а оболочка совместимости загружает надстройку, для которой она была создана. Необходимо создавать и регистрировать отдельную оболочку для каждой надстройки. Дополнительные сведения о разработке оболочек для управляемых надстроек см. в статье Изоляция расширений Office с помощью мастера com shim.
Другим способом загрузки надстройки в отдельный домен приложений является разработка надстройки с использованием инструментов разработки Office в Visual Studio 2010 или более поздней версии инструментов разработчика Office для Visual Studio. Надстройки, разработанные с помощью этих версий инструментов разработчика Office для Visual Studio, не реализуют интерфейс IDTExtensibility2, а используют интерфейс IStartup. Они используют загрузчик AddinLoader.dll, предоставленный Visual Studio, который выступает в качестве универсальной оболочки. Outlook ищет в реестре надстройки, созданные с помощью Visual Studio.
Если Outlook обнаруживает такие надстройки, запускается AddinLoader.dll, который затем запускает инструменты Visual Studio для среды выполнения Office и ретранслирует манифест приложения инструментам Visual Studio для среды выполнения Office. После этого инструменты Visual Studio для среды выполнения Office загружают каждую из этих надстроек в отдельный домен приложений. Дополнительные сведения о том, как Visual Studio загружает надстройку, см. в статье Архитектура надстроек уровня приложения.