Помощник по отладке управляемого кода loadFromContext
Примечание.
Эта статья относится к .NET Framework. Он не применяется к более новым реализациям .NET, включая .NET 6 и более поздние версии.
Помощник по отладке управляемого кода (MDA) loadFromContext
активируется при загрузке сборки в контекст LoadFrom
. Эта ситуация может возникнуть в результате вызова метода Assembly.LoadFrom или других аналогичных методов.
Симптомы
Использование некоторых методов загрузчика может привести к загрузке сборок в контекст LoadFrom
. Использование этого контекста может привести к неожиданному поведению при сериализации, приведении типов и разрешении зависимостей. Чтобы избежать этих проблем, рекомендуется загружать сборки в контекст Load
. Без этого помощника по отладке управляемого кода определить, в какой контекст загружена сборка, трудно.
Причина
Как правило, при использовании пути за пределами контекста Load
, например глобального кэша сборок или свойства AppDomainSetup.ApplicationBase, сборка загружается в контекст LoadFrom
.
Разрешение
Настройте приложения таким образом, чтобы вызовы 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");
}
}
}