AssemblyLoadContext Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Çalışma zamanının derleme yükleme kapsamı kavramını temsil eder.
public ref class AssemblyLoadContext
public ref class AssemblyLoadContext abstract
public class AssemblyLoadContext
public abstract class AssemblyLoadContext
type AssemblyLoadContext = class
Public Class AssemblyLoadContext
Public MustInherit Class AssemblyLoadContext
- Devralma
-
AssemblyLoadContext
Açıklamalar
bir AssemblyLoadContext yük bağlamını temsil eder. Kavramsal olarak, bir yükleme bağlamı bir derleme kümesini yüklemek, çözümlemek ve potansiyel olarak boşaltmak için bir kapsam oluşturur.
AssemblyLoadContext birincil olarak derleme yükleme yalıtımı sağlamak için vardır. Aynı derlemenin birden çok sürümünün tek bir işlem içinde yüklenmesine izin verir. .NET Framework'te birden çok AppDomain örnek tarafından sağlanan yalıtım mekanizmalarının yerini alır.
Note
- AssemblyLoadContext herhangi bir güvenlik özelliği sağlamaz. Tüm kodlar işlemin tam izinlerine sahiptir.
- Yalnızca AssemblyLoadContext .NET Core 2.0 - 2.2'de soyut bir sınıftır. Bu sürümlerde somut bir sınıf oluşturmak için yöntemini uygulayın AssemblyLoadContext.Load(AssemblyName) .
Çalışma zamanında kullanım
Çalışma zamanı iki derleme yükü bağlamı uygular:
- AssemblyLoadContext.Default uygulama ana derlemesi ve statik bağımlılıkları için kullanılan çalışma zamanının varsayılan bağlamını temsil eder.
- Bu yöntem, en temel Assembly.LoadFile(String) örneği oluşturarak yüklediği AssemblyLoadContext derlemelerini yalıtıyor. Bağımlılık çözümlemesi olmadan her derlemeyi ayrı bir AssemblyLoadContext içinde yükleyen yalın bir yalıtım şemasına sahiptir.
Uygulama kullanımı
Bir uygulama, gelişmiş senaryolar için özel bir çözüm oluşturmak üzere kendi AssemblyLoadContext uygulamasını oluşturabilir. Özelleştirme, bağımlılık çözümleme mekanizmaları tanımlamaya odaklanır.
AssemblyLoadContext yönetilen derleme çözümlemesini uygulamak için iki genişleme noktası sağlar.
-
AssemblyLoadContext.Load(AssemblyName) yöntemi, derlemeyi çözümlemek, yüklemek ve döndürmek AssemblyLoadContext için ilk şansı sağlar.
AssemblyLoadContext.Load(AssemblyName) yöntemi
nulldöndürürse, yükleyici AssemblyLoadContext.Default'e derlemeyi yüklemeye çalışır. - derlemeyi AssemblyLoadContext.Default çözümleyemiyorsa, özgün AssemblyLoadContext derlemeyi çözümlemek için ikinci bir şans elde eder. Çalışma zamanı Resolving olayını tetikler.
Buna ek olarak, AssemblyLoadContext.LoadUnmanagedDll(String) sanal yöntem varsayılan yönetilmeyen derleme çözümlemesinin özelleştirilmesine izin verir. Varsayılan uygulama, çalışma zamanı aramasının varsayılan arama ilkesini kullanmasına neden olan değerini döndürür null. Varsayılan arama ilkesi çoğu senaryo için yeterlidir.
Teknik zorluklar
Çalışma zamanının birden çok sürümünü tek bir işlemde yüklemek mümkün değildir.
Caution
Çerçeve derlemelerinin birden çok kopyasının veya farklı sürümlerinin yüklenmesi beklenmeyen ve tanılaması zor davranışlara yol açabilir.
Tip
Bu yalıtım sorununu çözmek için uzaktan iletişim veya işlemler arası iletişim ile işlem sınırlarını kullanın.
Derleme yüklemesinin zamanlaması test ve hata ayıklamayı zorlaştırabilir. Derlemeler genellikle bağımlılıkları hemen çözümlenmeden yüklenir. Bağımlılıklar gerektiğinde yüklenir:
- Kod bağımlı bir derlemeye dallandığında.
- Kod kaynakları yüklerken.
- Kod açıkça derlemeleri yüklerken.
uygulaması AssemblyLoadContext.Load(AssemblyName) , farklı sürümlerin var olması için yalıtılması gerekebilecek yeni bağımlılıklar ekleyebilir. En doğal uygulama, bu bağımlılıkları varsayılan bağlama yerleştirir. Dikkatli tasarım yeni bağımlılıkları yalıtabilir.
Aynı derleme farklı bağlamlara birden çok kez yüklenir.
- Bu, kafa karıştırıcı hata iletilerine yol açabilir, örneğin "'Sample.Plugin' türündeki bir nesne 'Sample.Plugin' türüne dönüştürülemiyor".
- Yalıtım sınırları arasında koordine etmek zor bir iştir. Tipik bir çözüm, yalnızca varsayılan yük bağlamı içine yüklenen bir derlemede tanımlanan bir arabirim kullanmaktır.
Oluşturucular
| Name | Description |
|---|---|
| AssemblyLoadContext() |
AssemblyLoadContext sınıfının yeni bir örneğini başlatır. |
| AssemblyLoadContext(Boolean) |
Kaldırmanın AssemblyLoadContext etkinleştirilip etkinleştirilmediğini gösteren bir değerle sınıfının yeni bir örneğini başlatır. |
| AssemblyLoadContext(String, Boolean) |
Sınıfın yeni bir örneğini bir ad ve kaldırmanın AssemblyLoadContext etkinleştirilip etkinleştirilmediğini gösteren bir değerle başlatır. |
Özellikler
| Name | Description |
|---|---|
| All |
Tüm AssemblyLoadContext örneklerin bir koleksiyonunu döndürür. |
| Assemblies |
içinde Assemblyyüklenen örneklerin AssemblyLoadContext bir koleksiyonunu döndürür. |
| CurrentContextualReflectionContext |
en AssemblyLoadContext son çağrısına EnterContextualReflection()göre kümesini alır. |
| Default |
Varsayılan AssemblyLoadContextalır. Varsayılan bağlam, ana uygulama derlemesini ve statik bağımlılıklarını içerir. |
| IsCollectible |
Bunun toplanabilir olup olmadığını AssemblyLoadContext gösteren bir değer alır. |
| Name |
öğesinin AssemblyLoadContextadını alın. |
Yöntemler
| Name | Description |
|---|---|
| EnterContextualReflection() |
olarak CurrentContextualReflectionContext |
| EnterContextualReflection(Assembly) |
Derlemeyi CurrentContextualReflectionContext yükleyen öğesine ayarlarAssemblyLoadContext. |
| Equals(Object) |
Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Devralındığı yer: Object) |
| Finalize() |
Nesnenin, atık toplama tarafından geri kazanılmadan önce kaynakları boşaltmaya ve diğer temizleme işlemlerini gerçekleştirmeye çalışmasına izin verir. |
| GetAssemblyName(String) |
Derleme yolu için alır AssemblyName . |
| GetHashCode() |
Varsayılan karma işlevi işlevi görür. (Devralındığı yer: Object) |
| GetLoadContext(Assembly) |
AssemblyLoadContext Belirtilen Assemblyöğesini içeren öğesini alır. |
| GetType() |
Geçerli örneğin Type alır. (Devralındığı yer: Object) |
| Load(AssemblyName) |
Türetilmiş bir sınıfta geçersiz kılındığında, bir derlemenin temel alınarak çözümlenmesine AssemblyNameizin verir. |
| LoadFromAssemblyName(AssemblyName) |
verilen AssemblyNamebir derlemeyi çözümler ve yükler. |
| LoadFromAssemblyPath(String) |
Belirtilen yola bir derleme dosyasının içeriğini yükler. |
| LoadFromNativeImagePath(String, String) |
Yönetilen derleme dosyasının yerel görüntüsünün içeriğini belirtilen yola yükler. |
| LoadFromStream(Stream, Stream) |
Derlemeyi, isteğe bağlı olarak derleme için simgeler de dahil olmak üzere yönetilen bir derleme içeren ortak nesne dosyası biçimi (COFF) tabanlı bir görüntüyle yükler. |
| LoadFromStream(Stream) |
Derlemeyi, yönetilen bir derleme içeren ortak nesne dosyası biçimi (COFF) tabanlı bir görüntüyle yükler. |
| LoadUnmanagedDll(String) |
Türetilmiş sınıfın ada göre yönetilmeyen bir kitaplığı yüklemesine izin verir. |
| LoadUnmanagedDllFromPath(String) |
Belirtilen yoldan yönetilmeyen bir kitaplığı yükler. |
| MemberwiseClone() |
Geçerli Objectbasit bir kopyasını oluşturur. (Devralındığı yer: Object) |
| SetProfileOptimizationRoot(String) |
Bu yük bağlamı için iyileştirme profillerinin depolandığı kök yolu ayarlar. |
| StartProfileOptimization(String) |
Belirtilen profil için profil iyileştirmeyi başlatır. |
| ToString() |
Bu yük bağlamının dize gösterimini döndürür. |
| ToString() |
Geçerli nesneyi temsil eden bir dize döndürür. (Devralındığı yer: Object) |
| Unload() |
Bu AssemblyLoadContextöğesinin kaldırılmasını başlatır. |
Ekinlikler
| Name | Description |
|---|---|
| Resolving |
Bu derleme yükleme bağlamı içine yüklenmeye çalışıldığında bir derlemenin çözümlemesi başarısız olduğunda gerçekleşir. |
| ResolvingUnmanagedDll |
Yerel kitaplığın çözümlemesi başarısız olduğunda gerçekleşir. |
| Unloading |
kaldırıldığında AssemblyLoadContext gerçekleşir. |