Помощник по отладке управляемого кода loadFromContext
Обновлен: Ноябрь 2007
Помощник по отладке управляемого кода (MDA) loadFromContext активируется при загрузке сборки в контекст LoadFrom. Это может произойти в результате вызова метода Assembly.LoadFrom или других сходных методов.
Признаки
Использование некоторых методов загрузки может привести к тому, что сборки загружаются в контекст LoadFrom. Использование данного контекста может привести к непредвиденному поведению при сериализации, приведении типов и разрешении зависимостей. В целом, во избежание подобных проблем рекомендуется загружать сборки в контекст Load. Трудно определить, в какой контекст загружается сборка, если данный помощник по отладке управляемого кода не включен.
Причина
Как правило, сборка загружается в контекст LoadFrom, если она была загружена из пути вне контекста Load, например из глобального кэша сборки или из свойства AppDomainSetup.ApplicationBase.
Решение
Необходимо настроить приложения таким образом, чтобы вызовы метода LoadFrom больше не требовались. Можно использовать для этого следующие методы.
Установка сборок в глобальный кэш сборок.
Помещение сборок в каталог ApplicationBase для класса AppDomain. В случае с доменом по умолчанию именно в каталоге ApplicationBase содержится исполняемый файл, который запускает процесс. Для этого также требуется создание нового класса AppDomain, если сборку перемещать нежелательно.
Добавление проверочного пути к файлу конфигурации приложения (CONFIG-файлу) или во второстепенным доменам приложения, если зависимые сборки находятся в дочерних каталогах, относящихся к исполняемому файлу.
В каждом конкретном случае код необходимо изменять, чтобы использовать метод Assembly.Load.
Влияние на среду выполнения
Данный помощник по отладке управляемого кода не оказывает влияния на среду выполнения CLR. Он только выводит сведения о контексте, который используется в результате запроса загрузки.
Результат
Помощник по отладке управляемого кода сообщает о том, что сборка была загружена в контекст LoadFrom. Также помощник по отладке управляемого кода указывает простое имя сборки и путь. Помощник по отладке управляемого кода также предлагает способы избежать использования контекста LoadFrom.
Конфигурация
<mdaConfig>
<assistants>
<loadFromContext />
</assistants>
</mdaConfig>
Пример
В следующем примере кода демонстрируется ситуация, в которой может активироваться данный помощник по отладке управляемого кода:
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// The following call caused the LoadFrom context to be used
// because the assembly is loaded using LoadFrom and the path is
// located outside of the Load context probing path.
Assembly.LoadFrom(@"C:\Text\Test.dll");
}
}
}
См. также
Основные понятия
Диагностика ошибок посредством управляемых помощников по отладке