Sdílet prostřednictvím


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

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 Load do kontextu, aby se těmto problémům zabránilo. 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, jako je například globální mezipaměť sestavení nebo AppDomainSetup.ApplicationBase vlastnost.

Řešení

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

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

  • 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í.

  • Pokud jsou závislá sestavení v podřízených adresářích vzhledem k spustitelnému souboru v podřízených adresářích, přidejte cestu ke zkoumacímu souboru aplikace (.config) nebo k sekundárním doménám aplikace.

V každém případě lze 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 do LoadFrom kontextu. Určuje jednoduchý název sestavení a cestu. Navrhuje také zmírnění rizik, aby se zabránilo LoadFrom použití kontextu.

Konfigurace

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

Příklad

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