loadFromContext MDA
loadFromContext
Asystent zarządzanego debugowania (MDA) jest aktywowany, jeśli zestaw zostanie załadowany do LoadFrom
kontekstu. Taka sytuacja może wystąpić w wyniku wywołania Assembly.LoadFrom lub innych podobnych metod.
Objawy
Użycie niektórych metod modułu ładującego może spowodować załadowanie zestawów w LoadFrom
kontekście. Użycie tego kontekstu może spowodować nieoczekiwane zachowanie serializacji, rzutowania i rozpoznawania zależności. Ogólnie rzecz biorąc, zaleca się załadowanie zestawów do kontekstu w Load
celu uniknięcia tych problemów. Trudno jest określić, do którego kontekstu został załadowany zestaw bez tego mdA.
Przyczyna
Ogólnie rzecz biorąc, zestaw został załadowany do LoadFrom
kontekstu, jeśli został załadowany ze ścieżki spoza Load
kontekstu, takiej jak globalna pamięć podręczna zestawów lub AppDomainSetup.ApplicationBase właściwość.
Rozwiązanie
Skonfiguruj aplikacje tak, aby LoadFrom wywołania nie są już potrzebne. W tym celu można użyć następujących technik:
Zainstaluj zestawy w globalnej pamięci podręcznej zestawów.
Umieść zestawy w ApplicationBase katalogu dla elementu AppDomain. W przypadku domeny ApplicationBase domyślnej katalog jest katalogem zawierającym plik wykonywalny, który rozpoczął proces. Może to również wymagać utworzenia nowego AppDomain , jeśli nie jest wygodne przeniesienie zestawu.
Dodaj ścieżkę sondowania do pliku konfiguracji aplikacji (.config) lub do domen aplikacji pomocniczych, jeśli zależne zestawy znajdują się w katalogach podrzędnych względem pliku wykonywalnego.
W każdym przypadku kod można zmienić, aby użyć Assembly.Load metody .
Wpływ na środowisko uruchomieniowe
MdA nie ma żadnego wpływu na CLR. Raportuje kontekst, który został użyty w wyniku żądania obciążenia.
Dane wyjściowe
Usługa MDA zgłasza, że zestaw został załadowany do LoadFrom
kontekstu. Określa prostą nazwę zestawu i ścieżkę. Sugeruje również środki zaradcze, aby uniknąć korzystania z LoadFrom
kontekstu.
Konfigurowanie
<mdaConfig>
<assistants>
<loadFromContext />
</assistants>
</mdaConfig>
Przykład
Poniższy przykład kodu przedstawia sytuację, która może aktywować tę usługę 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");
}
}
}
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla