Sdílet prostřednictvím


loadFromContext – pomocník spravovaného ladění (MDA)

Poznámka:

Tento článek je specifický pro rozhraní .NET Framework. Nevztahuje se na novější implementace .NET, včetně .NET 6 a novějších verzí.

Pomocník loadFromContext pro spravované ladění (MDA) se aktivuje, pokud je sestavení načteno LoadFrom do kontextu. K této situaci může dojít v důsledku volání Assembly.LoadFrom nebo jiných podobných metod.

Příznaky

Použití některých metod zavaděče může vést k načtení sestavení v LoadFrom kontextu. Použití tohoto kontextu může vést k neočekávanému chování serializace, přetypování a rozlišení závislostí. Obecně se doporučuje, aby se sestavení načetla do Load kontextu, aby se těmto problémům vyhnula. Je obtížné určit, do kterého kontextu bylo sestavení načteno bez tohoto MDA.

Příčina

Obecně platí, že sestavení bylo načteno do LoadFrom kontextu, pokud bylo načteno z cesty mimo Load kontext, například globální mezipaměť sestavení nebo AppDomainSetup.ApplicationBase vlastnost.

Rozlišení

Nakonfigurujte aplikace tak, aby LoadFrom volání už nebyla potřeba. K tomu můžete použít následující techniky:

  • Nainstalujte sestavení do globální mezipaměti sestavení.

  • Umístěte sestavení do ApplicationBase adresáře pro AppDomain. V případě výchozí domény je adresář ten, ApplicationBase který obsahuje spustitelný soubor, který proces spustil. To může také vyžadovat vytvoření nového AppDomain , pokud není vhodné přesunout sestavení.

  • Přidejte cestu k sondování do souboru konfigurace aplikace (.config) nebo do sekundárních domén aplikace, pokud jsou závislá sestavení v podřízených adresářích vzhledem ke spustitelnému souboru.

V každém případě je možné kód změnit tak, aby používal metodu Assembly.Load .

Vliv na modul runtime

MdA nemá žádný vliv na CLR. Hlásí kontext, který byl použit jako výsledek požadavku na načtení.

Výstup

MdA hlásí, že sestavení bylo načteno LoadFrom do kontextu. Určuje jednoduchý název sestavení a cestu. Navrhuje také zmírnění rizik, aby se zabránilo použití LoadFrom kontextu.

Konfigurace

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

Příklad

Následující příklad kódu ukazuje situaci, která může aktivovat tuto 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");
        }
    }
}

Viz také