loadFromContext MDA
Uwaga
Ten artykuł jest specyficzny dla programu .NET Framework. Nie ma zastosowania do nowszych implementacji platformy .NET, w tym .NET 6 i nowszych wersji.
Asystent loadFromContext
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 rozwiązywania zależności. Ogólnie rzecz biorąc, zaleca się, aby zestawy były ładowane do kontekstu, Load
aby uniknąć tych problemów. Trudno jest określić kontekst, do którego zestawu został załadowany bez tej usługi MDA.
Przyczyna
Ogólnie rzecz biorąc, zestaw został załadowany do LoadFrom
kontekstu, jeśli został załadowany ze ścieżki poza Load
kontekstem, takich jak globalna pamięć podręczna AppDomainSetup.ApplicationBase zestawów lub 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 katalog, który zawiera plik wykonywalny, który rozpoczął proces. Może to również wymagać utworzenia nowego AppDomain , jeśli nie jest wygodne przenoszenie 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ć tak, aby używał 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 ładowania.
Wyjście
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
W poniższym przykładzie kodu pokazano 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");
}
}
}