Aracılığıyla paylaş


Yönetilen derleme yükleme algoritması

Yönetilen derlemeler, çeşitli aşamalara sahip bir algoritma ile bulunur ve yüklenir.

Uydu derlemeleri ve WinRT derlemeler dışındaki tüm yönetilen derlemeler aynı algoritmayı kullanır.

Yönetilen derlemeler ne zaman yüklenir?

Yönetilen derleme yükünü tetiklemenin en yaygın mekanizması statik derleme başvurusudur. Bu başvurular, kod başka bir derlemede tanımlanan bir tür kullandığında derleyici tarafından eklenir. Çalışma zamanı gerektiğinde bu derlemeleri yükler (load-by-name). Statik derleme referanslarının tam olarak ne zaman yükleneceği belirtilmemektedir. Çalışma zamanı sürümleri arasında farklılık gösterebilir ve inlining gibi iyileştirmelerden etkilenir.

Aşağıdaki API'lerin doğrudan kullanımı yükleri de tetikler:

Uygulama Programlama Arayüzü (API) Açıklama Active AssemblyLoadContext
AssemblyLoadContext.LoadFromAssemblyName Load-by-name Bu örnek.
AssemblyLoadContext.LoadFromAssemblyPath
AssemblyLoadContext.LoadFromNativeImagePath
Yoldan yükleyin. Bu örnek.
AssemblyLoadContext.LoadFromStream Nesneden yükle. Bu örnek.
Assembly.LoadFile Yeni AssemblyLoadContext bir örnekte yoldan yükleme Yeni AssemblyLoadContext örnek.
Assembly.LoadFrom Örnekteki AssemblyLoadContext.Default yoldan yükleyin.
AppDomain.AssemblyResolve işleyici ekler. İşleyici, derlemenin bağımlılıklarını dizininden yükler.
AssemblyLoadContext.Default örneği.
Assembly.Load(AssemblyName)
Assembly.Load(String)
Assembly.LoadWithPartialName
Load-by-name. Arayandan çıkarsanan.
Yöntemleri tercih edin AssemblyLoadContext .
Assembly.Load(Byte[])
Assembly.Load(Byte[], Byte[])
Yeni AssemblyLoadContext örneğine nesne üzerinden yükleyin. Yeni AssemblyLoadContext örnek.
Type.GetType(String)
Type.GetType(String, Boolean)
Type.GetType(String, Boolean, Boolean)
Load-by-name. Arayandan çıkarsanan.
Type.GetType bağımsız değişkeni kullanan yöntemleri tercih edin assemblyResolver.
Assembly.GetType Tür name, derleme ile nitelenmiş bir genel türü açıklıyorsa, bir Load-by-name tetikleyin. Arayandan çıkarsanan.
Derleme nitelikli tür adlarını kullanırken Type.GetType tercih edin.
Activator.CreateInstance(String, String)
Activator.CreateInstance(String, String, Object[])
Activator.CreateInstance(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])
Load-by-name. Arayandan çıkarsanan.
Bağımsız değişken alan Activator.CreateInstance yöntemleri tercih edinType.

Algoritma

Aşağıdaki algoritma, çalışma zamanının yönetilen derlemeyi nasıl yüklediği açıklanmaktadır.

  1. active AssemblyLoadContext öğesini belirleyin.

  2. Load-by-name yöntemler için, activeAssemblyLoadContext derlemeyi aşağıdaki öncelik sırasına göre yükler:

  3. Diğer yük türleri için, activeAssemblyLoadContext derlemeyi aşağıdaki öncelik sırasına göre yükler:

    • öğesini cache-by-namedenetleyin.
    • Belirtilen yoldan veya ham derleme nesnesinden yükleyin. Bir derleme yeni yüklendiğinde activeAssemblyLoadContext örneğine cache-by-name bir başvuru eklenir.
  4. Her iki durumda da, bir derleme yeni yüklenirse AppDomain.AssemblyLoad olayı tetiklenir.