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ż