Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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:
Önemli
.NET Framework'ün aksine, .NET'te assemblyFile parametresi Assembly.LoadFrom bir URI olarak değil, dosya yolu olarak değerlendirilir. .NET Framework'te, bir dosya URI'sini (örneğin, file:///C:/path/to/assembly.dll' den Assembly.CodeBasederlenmiş bir dosya) geçirebilirsiniz ve derleme başarıyla yüklenir. .NET'te assemblyFile değeri, URI'leri düzgün şekilde işlemeyen Path.GetFullPath'ye geçirilir, bu nedenle yük başarısız olur. Zaten bir dosya URI dizeniz varsa, Uri örneğini oluşturun ve LocalPath özelliğini kullanarak dosya yolunu alın, ardından Assembly.LoadFrom çağrısını yapın. Zaten yüklenmiş bir derlemenin dosya yolunu almak için CodeBase yerine Assembly.Location kullanın.
Algoritma
Aşağıdaki algoritma, çalışma zamanının yönetilen derlemeyi nasıl yüklediği açıklanmaktadır.
activeAssemblyLoadContext öğesini belirleyin.- Statik derleme başvurusu için,
activeAssemblyLoadContext başvuruda bulunan derlemeyi yükleyen örnektir. - Tercih edilen API'ler
activeAssemblyLoadContext açıkça belirtir. - Diğer API'ler
activeAssemblyLoadContext çıkarım yapar. Bu API'ler için AssemblyLoadContext.CurrentContextualReflectionContext özelliği kullanılır. Eğer değerinullise, çıkarsanan AssemblyLoadContext örneği kullanılır. - Yönetilen derlemeler ne zaman yüklenir? bölümündeki tabloya bakın.
- Statik derleme başvurusu için,
Load-by-nameyöntemler için,activeAssemblyLoadContext derlemeyi aşağıdaki öncelik sırasına göre yükler:- öğesini
cache-by-namedenetleyin. - AssemblyLoadContext.Load işlevini çağırın.
- Örnek önbelleğini AssemblyLoadContext.Default kontrol edin ve yönetilen derleme varsayılan arama mantığını çalıştırın. Bir derleme yeni yüklendiyse, AssemblyLoadContext.Default örneğinin
cache-by-namebölümüne bir başvuru eklenir. - Etkin AssemblyLoadContext için AssemblyLoadContext.Resolving olayını tetikler.
- Olayı tetikleyin AppDomain.AssemblyResolve.
- öğesini
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. -
activeAssemblyLoadContext iseAssemblyLoadContext.Default, yönetilen derlemeler için varsayılan yoklama mantığını çalıştırın. - Belirtilen yoldan veya ham derleme nesnesinden yükleyin. Bir derleme yeni yüklendiğinde
activeAssemblyLoadContext örneğinecache-by-namebir başvuru eklenir.
- öğesini
Her iki durumda da, bir derleme yeni yüklenirse AppDomain.AssemblyLoad olayı tetiklenir.