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é
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro