Поделиться через


Помощник по отладке управляемого кода 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");
        }
    }
}

См. также