Uydu derleme yükleme algoritması
Uydu derlemeleri, dil ve kültür için özelleştirilmiş yerelleştirilmiş kaynakları depolamak için kullanılır.
Uydu derlemeleri, genel yönetilen derlemelerden farklı bir yükleme algoritması kullanır.
Uydu derlemeleri ne zaman yüklenir?
Yerelleştirilmiş bir kaynak yüklenirken uydu derlemeleri yüklenir.
Yerelleştirilmiş kaynakları yüklemek için temel API sınıfıdır System.Resources.ResourceManager . Sonuçta ResourceManager sınıfı her CultureInfo.Nameiçin yöntemini çağırırGetSatelliteAssembly.
Üst düzey API'ler alt düzey API'yi soyutlar.
Algoritma
.NET Core kaynak geri dönüş işlemi aşağıdaki adımları içerir:
active
AssemblyLoadContext Örneği belirleyin. Her durumda,active
örneği yürüten derlemenin AssemblyLoadContextörneğidir.Örnek,
active
istenen kültür için aşağıdaki öncelik sırasına göre bir uydu derlemesi yükler:Önbelleğini denetleyin.
Örnek ise
active
AssemblyLoadContext.Default varsayılan uydu (kaynak) derleme yoklama mantığını çalıştırın.işlevini çağırın AssemblyLoadContext.Load .
Uydu derlemesine karşılık gelen yönetilen derleme bir dosyadan yüklendiyse, istenen CultureInfo.Name ile eşleşen bir alt dizin için yönetilen derlemenin dizinini denetleyin (örneğin,
es-MX
).Not
Linux ve macOS'ta alt dizin büyük/küçük harfe duyarlıdır ve aşağıdakilerden biri gerekir:
- Büyük/küçük harfle tam olarak eşleş.
- Küçük harfle.
Olayı yükseltin AssemblyLoadContext.Resolving .
Olayı yükseltin AppDomain.AssemblyResolve .
Bir uydu derlemesi yüklenirse:
- Olay AppDomain.AssemblyLoad oluşturulur.
- Derleme istenen kaynak için arandı. Çalışma zamanı derlemedeki kaynağı bulursa kullanır. Kaynağı bulamazsa aramaya devam eder.
Not
Uydu derlemesinde bir kaynak bulmak için çalışma zamanı geçerli CultureInfo.Nameiçin tarafından istenen ResourceManager kaynak dosyasını arar. Kaynak dosyasının içinde istenen kaynak adını arar. Bu kaynaklardan biri bulunamazsa, kaynak bulunamadı olarak değerlendirilir.
Sonraki ResourceManager , her seferinde 2 . 3. adımları yineleyerek birçok olası düzeyde üst kültür derlemelerini arar.
Her kültürün özelliği tarafından CultureInfo.Parent tanımlanan yalnızca bir üst öğesi vardır.
Bir kültürün özelliği olduğunda CultureInfo.InvariantCultureüst kültür Parent araması durdurulur.
InvariantCultureiçin 2. ve 3. adımlara geri dönmez, 5. adımla devam ederiz.
Kaynak hala bulunamazsa, ResourceManager varsayılan (geri dönüş) kültürü için kaynağı kullanır.
Genellikle, varsayılan kültür kaynakları ana uygulama derlemesine dahil edilir. Ancak özelliği için NeutralResourcesLanguageAttribute.Location belirtebilirsinizUltimateResourceFallbackLocation.Satellite. Bu değer, kaynaklar için nihai geri dönüş konumunun ana derleme yerine bir uydu derlemesi olduğunu gösterir.
Not
Varsayılan kültür, nihai geri dönüştür. Bu nedenle, varsayılan kaynak dosyasına her zaman kapsamlı bir kaynak kümesi eklemenizi öneririz. Bu, özel durumların oluşmasını önlemeye yardımcı olur. Kapsamlı bir kümeye sahip olarak, tüm kaynaklar için bir geri dönüş sağlar ve kültürel olarak özel olmasa bile kullanıcı için her zaman en az bir kaynağın mevcut olduğundan emin olursunuz.
Sonunda
- Çalışma zamanı varsayılan (geri dönüş) kültürü için bir kaynak dosyası bulamazsa, veya MissingManifestResourceExceptionMissingSatelliteAssemblyException özel durumu oluşturulur.
- Kaynak dosyası bulunursa ancak istenen kaynak mevcut değilse, istek döndürür
null
.
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