Bagikan melalui


loadFromContext MDA

Catatan

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

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

Gejala

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

Penyebab

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

Resolusi

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

  • Pasang rakitan di cache perakitan global.

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

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

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

Efek pada Runtime

MDA tidak memiliki pengaruh apapun pada CLR. MDA melaporkan konteks yang digunakan sebagai akibat dari permintaan beban.

Output

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

Konfigurasi

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

Contoh

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

Lihat juga