Udostępnij za pośrednictwem


loadFromContext MDA

Uwaga

Ten artykuł jest specyficzny dla programu .NET Framework. Nie ma zastosowania do nowszych implementacji platformy .NET, w tym .NET 6 i nowszych wersji.

Asystent loadFromContext zarządzanego debugowania (MDA) jest aktywowany, jeśli zestaw zostanie załadowany do LoadFrom kontekstu. Taka sytuacja może wystąpić w wyniku wywołania Assembly.LoadFrom lub innych podobnych metod.

Objawy

Użycie niektórych metod modułu ładującego może spowodować załadowanie zestawów w LoadFrom kontekście. Użycie tego kontekstu może spowodować nieoczekiwane zachowanie serializacji, rzutowania i rozwiązywania zależności. Ogólnie rzecz biorąc, zaleca się, aby zestawy były ładowane do kontekstu, Load aby uniknąć tych problemów. Trudno jest określić kontekst, do którego zestawu został załadowany bez tej usługi MDA.

Przyczyna

Ogólnie rzecz biorąc, zestaw został załadowany do LoadFrom kontekstu, jeśli został załadowany ze ścieżki poza Load kontekstem, takich jak globalna pamięć podręczna AppDomainSetup.ApplicationBase zestawów lub właściwość.

Rozwiązanie

Skonfiguruj aplikacje tak, aby LoadFrom wywołania nie są już potrzebne. W tym celu można użyć następujących technik:

  • Zainstaluj zestawy w globalnej pamięci podręcznej zestawów.

  • Umieść zestawy w ApplicationBase katalogu dla elementu AppDomain. W przypadku domeny ApplicationBase domyślnej katalog jest katalog, który zawiera plik wykonywalny, który rozpoczął proces. Może to również wymagać utworzenia nowego AppDomain , jeśli nie jest wygodne przenoszenie zestawu.

  • Dodaj ścieżkę sondowania do pliku konfiguracji aplikacji (.config) lub do domen aplikacji pomocniczych, jeśli zależne zestawy znajdują się w katalogach podrzędnych względem pliku wykonywalnego.

W każdym przypadku kod można zmienić tak, aby używał Assembly.Load metody .

Wpływ na środowisko uruchomieniowe

MdA nie ma żadnego wpływu na CLR. Raportuje kontekst, który został użyty w wyniku żądania ładowania.

Wyjście

MdA zgłasza, że zestaw został załadowany do LoadFrom kontekstu. Określa prostą nazwę zestawu i ścieżkę. Sugeruje również środki zaradcze, aby uniknąć korzystania z LoadFrom kontekstu.

Konfigurowanie

<mdaConfig>
  <assistants>
    <loadFromContext />
  </assistants>
</mdaConfig>

Przykład

W poniższym przykładzie kodu pokazano sytuację, która może aktywować tę usługę MDA:

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");
        }
    }
}

Zobacz też