Delen via


loadFromContext MDA

Notitie

Dit artikel is specifiek voor .NET Framework. Dit geldt niet voor nieuwere implementaties van .NET, waaronder .NET 6 en nieuwere versies.

De loadFromContext beheerde foutopsporingsassistent (MDA) wordt geactiveerd als een assembly in de LoadFrom context wordt geladen. Deze situatie kan optreden als gevolg van aanroepen Assembly.LoadFrom of andere vergelijkbare methoden.

Symptomen

Het gebruik van sommige loadermethoden kan ertoe leiden dat assembly's in de LoadFrom context worden geladen. Het gebruik van deze context kan leiden tot onverwacht gedrag voor serialisatie, cast- en afhankelijkheidsresolutie. Over het algemeen wordt aanbevolen om assembly's in de Load context te laden om deze problemen te voorkomen. Het is moeilijk om te bepalen in welke context een assembly is geladen zonder deze MDA.

Oorzaak

Over het algemeen is een assembly in de LoadFrom context geladen als deze vanuit een pad buiten de Load context is geladen, zoals de globale assemblycache of de AppDomainSetup.ApplicationBase eigenschap.

Oplossing

Configureer toepassingen zodanig dat LoadFrom aanroepen niet meer nodig zijn. U kunt hiervoor de volgende technieken gebruiken:

  • Installeer assembly's in de globale assemblycache.

  • Plaats assembly's in de ApplicationBase map voor de AppDomain. In het geval van het standaarddomein is de ApplicationBase map het bestand dat het uitvoerbare bestand bevat dat het proces heeft gestart. Dit kan ook nodig zijn om een nieuwe AppDomain te maken als het niet handig is om de assembly te verplaatsen.

  • Voeg een testpad toe aan uw toepassingsconfiguratiebestand (.config) of aan secundaire toepassingsdomeinen als afhankelijke assembly's zich in onderliggende mappen bevinden ten opzichte van het uitvoerbare bestand.

In elk geval kan de code worden gewijzigd om de Assembly.Load methode te gebruiken.

Effect op de runtime

De MDA heeft geen effect op de CLR. Het rapporteert de context die is gebruikt als gevolg van een belastingsaanvraag.

Uitvoer

De MDA meldt dat de assembly in de LoadFrom context is geladen. Hiermee geeft u de eenvoudige naam van de assembly en het pad. Er worden ook oplossingen voorgesteld om te voorkomen dat de LoadFrom context wordt gebruikt.

Configuratie

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

Opmerking

In het volgende codevoorbeeld ziet u een situatie waarin deze MDA kan worden geactiveerd:

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

Zie ook