Share via


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. Bu derlemeler çalışma zamanı tarafından gerektiğinde yüklenir (load-by-name). Statik derleme başvurularının ne zaman yüklendiğinin tam zamanlaması belirtilmez. Ç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:

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.
İşleyici AppDomain.AssemblyResolve 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 çıkarılır.
Yöntemleri tercih edin AssemblyLoadContext .
Assembly.Load(Byte[])
Assembly.Load(Byte[], Byte[])
Nesneden yeni AssemblyLoadContext bir örneğe yükleyin. Yeni AssemblyLoadContext örnek.
Type.GetType(String)
Type.GetType(String, Boolean)
Type.GetType(String, Boolean, Boolean)
Load-by-name. Arayandan çıkarılır.
Bağımsız değişken içeren assemblyResolver yöntemleri tercih edinType.GetType.
Assembly.GetType Tür name , derleme nitelenmiş genel türünü açıklıyorsa, bir Load-by-nametetikler. Arayandan çıkarılır.
Derleme nitelikli tür adlarını kullanmayı tercih edin Type.GetType .
Activator.CreateInstance(String, String)
Activator.CreateInstance(String, String, Object[])
Activator.CreateInstance(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])
Load-by-name. Arayandan çıkarılır.
Bağımsız değişken alan Type yöntemleri tercih edinActivator.CreateInstance.

Algoritma

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

  1. öğesini activeAssemblyLoadContextbelirleyin.

  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üklenirse, örneğine activeAssemblyLoadContextcache-by-namebir başvuru eklenir.
  4. Her iki durumda da, bir derleme yeni yüklenirse AppDomain.AssemblyLoad olay oluşturulur.