loadFromContext MDA

Nota

Artikel ini khusus untuk .NET Framework. Ini tidak berlaku untuk implementasi .NET yang lebih baru, termasuk .NET 6 dan versi yang lebih baru.

Asisten loadFromContext penelusuran kesalahan terkelola (MDA) diaktifkan jika rakitan dimuat ke dalam LoadFrom konteks. Situasi ini dapat terjadi sebagai akibat dari panggilan Assembly.LoadFrom atau metode serupa lainnya.

Gejala

Penggunaan beberapa metode pemuat dapat mengakibatkan rakitan dimuat dalam LoadFrom konteks. Penggunaan konteks ini dapat mengakibatkan perilaku tak terduga untuk serialisasi, transmisi, dan resolusi dependensi. Secara umum, disarankan agar rakitan dimuat ke dalam Load konteks untuk menghindari masalah ini. Sulit untuk menentukan konteks mana yang telah dimuat assembly tanpa MDA ini.

Penyebab

Umumnya, rakitan dimuat ke dalam LoadFrom konteks jika dimuat dari jalur di luar Load konteks, seperti cache rakitan global atau AppDomainSetup.ApplicationBase properti .

Resolution

Mengonfigurasi aplikasi singa agar LoadFrom panggilan tidak lagi diperlukan. Anda dapat menggunakan teknik berikut untuk melakukannya:

  • Pasang rakitan di cache rakitan global.

  • Tempatkan rakitan di ApplicationBase direktori untuk AppDomain. Dalam kasus domain default, ApplicationBase direktori adalah direktori yang berisi file yang dapat dieksekusi yang memulai proses. Ini mungkin juga memerlukan pembuatan baru AppDomain jika tidak nyaman untuk memindahkan assembly.

  • Tambahkan jalur pemeriksaan ke file konfigurasi aplikasi Anda (.config) atau ke domain aplikasi sekunder jika rakitan dependen berada di direktori anak relatif terhadap yang dapat dieksekusi.

Dalam setiap kasus, kode dapat diubah untuk menggunakan Assembly.Load metode .

Efek pada Runtime

MDA tidak memiliki efek apa pun pada CLR. Ini melaporkan konteks yang digunakan sebagai akibat dari permintaan beban.

Hasil

MDA melaporkan bahwa rakitan dimuat ke dalam LoadFrom konteks. Ini menentukan nama sederhana rakitan dan jalur. Ini juga menyarankan mitigasi untuk menghindari penggunaan LoadFrom konteks.

Konfigurasi

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

Example

Contoh kode berikut menunjukkan situasi yang dapat mengaktifkan MDA ini:

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");
        }
    }
}

Baca juga