System.Runtime.Loader.AssemblyLoadContext sınıfı
Bu makale, bu API'nin başvuru belgelerine ek açıklamalar sağlar.
bir AssemblyLoadContext yük bağlamını temsil eder. Kavramsal olarak, bir yük bağlamı bir derleme kümesini yüklemek, çözümlemek ve potansiyel olarak kaldırmak 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.
Not
- 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.
- yöntemi, Assembly.LoadFile(String) en temel AssemblyLoadContextörneği oluşturarak yüklediği derlemeleri yalıtıyor. Bağımlılık çözümlemesi olmadan her derlemeyi kendi AssemblyLoadContext başına yükleyen basit 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.
yönetilen AssemblyLoadContext derleme çözümlemesini uygulamak için iki uzantı 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 döndürürse
null
, yükleyici derlemeyi içine AssemblyLoadContext.Defaultyüklemeye çalışır. - derlemeyi AssemblyLoadContext.Default çözümleyemiyorsa, özgün AssemblyLoadContext derlemeyi çözümlemek için ikinci bir şans elde eder. Çalışma zamanı olayı tetikler Resolving .
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.
Dikkat
Ç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.
İpucu
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üklediğinde.
- Kod derlemeleri açıkça yüklediğinde.
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ünde bir nesne 'Sample.Plugin' türüne oluşturulamıyor".
- Yalıtım sınırları arasında sıralamak önemsiz değildir. Tipik bir çözüm, yalnızca varsayılan yük bağlamı içine yüklenen bir derlemede tanımlanan bir arabirim kullanmaktır.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin