Dela via


loadFromContext MDA

Kommentar

Den här artikeln är specifik för .NET Framework. Det gäller inte för nyare implementeringar av .NET, inklusive .NET 6 och senare versioner.

Den loadFromContext hanterade felsökningsassistenten (MDA) aktiveras om en sammansättning läses in i kontexten LoadFrom . Den här situationen kan inträffa till följd av anrop Assembly.LoadFrom eller andra liknande metoder.

Symtom

Användningen av vissa inläsningsmetoder kan leda till att sammansättningar läses in i kontexten LoadFrom . Användningen av den här kontexten kan resultera i oväntat beteende för serialisering, gjutning och beroendematchning. I allmänhet rekommenderar vi att sammansättningar läses in i kontexten Load för att undvika dessa problem. Det är svårt att avgöra vilken kontext en sammansättning har lästs in i utan denna MDA.

Orsak

I allmänhet lästes en sammansättning in i kontexten om den LoadFrom lästes in från en sökväg utanför kontexten Load , till exempel den globala sammansättningscacheminnet eller AppDomainSetup.ApplicationBase egenskapen.

Åtgärd

Konfigurera program så att LoadFrom anrop inte längre behövs. Du kan använda följande tekniker för att göra det:

  • Installera sammansättningar i den globala sammansättningscacheminnet.

  • Placera sammansättningar i ApplicationBase katalogen för AppDomain. När det gäller standarddomänen ApplicationBase är katalogen den som innehåller den körbara fil som startade processen. Detta kan också kräva att du skapar en ny AppDomain om det inte är praktiskt att flytta sammansättningen.

  • Lägg till en avsökningssökväg till programkonfigurationsfilen (.config) eller till sekundära programdomäner om beroende sammansättningar finns i underordnade kataloger i förhållande till den körbara filen.

I varje fall kan koden ändras för att använda Assembly.Load metoden.

Effekt på körningen

MDA har ingen effekt på CLR. Den rapporterar kontexten som användes som ett resultat av en belastningsbegäran.

Output

MDA rapporterar att sammansättningen lästes in i kontexten LoadFrom . Den anger det enkla namnet på sammansättningen och sökvägen. Det föreslår också åtgärder för att undvika att använda kontexten LoadFrom .

Konfiguration

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

Exempel

Följande kodexempel visar en situation som kan aktivera denna 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");
        }
    }
}

Se även