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.
Sanal modül bölmeyi etkinleştirir veya devre dışı bırakır.
Sözdizimi
HRESULT EnableVirtualModuleSplitting(
BOOL enableSplitting
);
Parametreler
enableSplitting
true sanal modül bölmeyi etkinleştirmek için; false öğesini seçin.
Açıklamalar
Sanal modül bölme , ICorDebug'un derleme işlemi sırasında birleştirilen modülleri tanımasına ve bunları tek bir büyük modül yerine ayrı modüller grubu olarak sunmasına neden olur. Bunu yapmak, aşağıda açıklanan çeşitli ICorDebug yöntemlerinin davranışını değiştirir.
Uyarı
Bu yöntem yalnızca .NET Native ile kullanılabilir.
Bu yöntem çağrılabilir ve değeri enableSplitting istediğiniz zaman değiştirilebilir. Sanal modül bölme ve yönetilmeyen hata ayıklama API'leri bölümünde listelenen yöntemlerin davranışının çağrıldıkları anda değiştirilmesi dışında, ICorDebug nesnesinde durum bilgisi olan işlevsel değişikliklere neden olmaz. Sanal modüllerin kullanılması, bu yöntemleri çağırırken bir performans cezasına neden olur. Ayrıca, IMetaDataImport API'lerini doğru uygulamak için sanallaştırılmış meta verilerin bellek içinde önemli ölçüde önbelleğe alınması gerekebilir ve bu önbellekler sanal modül bölme kapatıldıktan sonra bile korunabilir.
Terminoloji
Sanal modül bölme işlemi açıklanırken aşağıdaki terimler kullanılır:
kapsayıcı modülleri veya kapsayıcılar Toplu modüller.
alt modüller veya sanal modüller Kapsayıcıda bulunan modüller.
normal modüller Derleme zamanında birleştirilmemiş modüller. Bunlar ne kapsayıcı modülleri ne de alt modüllerdir.
Hem kapsayıcı modülleri hem de alt modüller arabirim nesneleriyle ICorDebugModule temsil edilir. Ancak, arabirimin davranışı her durumda biraz farklıdır.
Modüller ve derlemeler
Çok modüllü derlemeler derleme birleştirme senaryolarında desteklenmez, bu nedenle modül ile derleme arasında bire bir ilişki vardır. Kapsayıcı modülünü veya alt modülü temsil edip etmediğine bakılmaksızın her ICorDebugModule nesnenin karşılık gelen bir ICorDebugAssembly nesnesi vardır.
ICorDebugModule::GetAssembly yöntemi modülden derlemeye dönüştürülür. Diğer yönde eşlemek için ICorDebugAssembly::EnumerateModules yöntemi yalnızca 1 modülü numaralandırır. Derleme ve modül bu durumda sıkı bir şekilde bağlanmış bir çift oluşturduğundan, derleme ve modül terimleri büyük ölçüde değiştirilebilir hale gelir.
Davranış farklılıkları
Kapsayıcı modülleri aşağıdaki davranışlara ve özelliklere sahiptir:
Tüm kurucu alt modüller için meta verileri birleştirilir.
Tür adları mangled olabilir.
ICorDebugModule::GetName yöntemi, disk içi modülün yolunu döndürür.
ICorDebugModule::GetSize yöntemi bu görüntünün boyutunu döndürür.
ICorDebugAssembly3.EnumerateContainedAssemblies yöntemi, alt modülleri listeler.
ICorDebugAssembly3.GetContainerAssembly yöntemi döndürür
S_FALSE.
Alt modüller aşağıdaki davranışlara ve özelliklere sahiptir:
Yalnızca birleştirilmiş özgün derlemeye karşılık gelen azaltılmış bir meta veri kümesine sahiptir.
Meta veri adları mangled değil.
Meta veri belirteçlerinin derleme işleminde birleştirilmeden önce özgün derlemedeki belirteçlerle eşleşme olasılığı düşüktür.
ICorDebugModule::GetName yöntemi bir dosya yolu değil derleme adını döndürür.
ICorDebugModule::GetSize yöntemi özgün birleştirilmemiş görüntü boyutunu döndürür.
ICorDebugModule3.EnumerateContainedAssemblies yöntemi döndürür
S_FALSE.ICorDebugAssembly3.GetContainerAssembly yöntemi, içeren modülü döndürür.
Modüllerden alınan arabirimler
Modüllerden çeşitli arabirimler oluşturulabilir veya alınabilir. Bunlardan bazıları:
ICorDebugModule::GetClassFromToken yöntemi tarafından döndürülen bir ICorDebugClass nesnesi.
ICorDebugModule ::GetAssembly yöntemi tarafından döndürülen bir ICorDebugAssembly nesnesi.
Bu nesneler her zaman ICorDebug tarafından önbelleğe alınır ve kapsayıcı modülünden veya bir alt modülden oluşturulduklarından veya sorgulandıklarından bağımsız olarak aynı işaretçi kimliğine sahip olurlar. Alt modül, kendi kopyalarına sahip ayrı bir önbellek değil, önbelleğe alınmış bu nesnelerin filtrelenmiş bir görünümünü sağlar.
Sanal modül bölme ve yönetilmeyen hata ayıklama API'leri
Aşağıdaki tabloda sanal modül bölmenin yönetilmeyen hata ayıklama API'sindeki diğer yöntemlerin davranışını nasıl etkilediği gösterilmektedir.
| Yöntem | enableSplitting = true |
enableSplitting = false |
|---|---|---|
| ICorDebugFunction::GetModule | Bu işlevin başlangıçta tanımlandığı alt modülü verir | Bu işlevin birleştirildiği kapsayıcı modülünü döndürür |
| ICorDebugClass::GetModule | Bu sınıfın başlangıçta tanımlandığı alt modülü döndürür. | Bu sınıfın birleştirildiği kapsayıcı modülünü döndürür. |
| ICorDebugModuleDebugEvent::GetModule | Yüklenen kapsayıcı modülünü döndürür. Alt modüllere bu ayardan bağımsız olarak yük olayları verilmez. | Yüklenen kapsayıcı modülünü döndürür. |
| ICorDebugAppDomain::EnumerateAssemblies | Alt derlemelerin ve normal derlemelerin listesini döndürür; kapsayıcı derlemeleri dahil değildir. Not: Herhangi bir kapsayıcı derlemesinde simgeler eksikse, alt derlemelerinin hiçbiri numaralandırılamaz. Herhangi bir normal derlemede semboller eksikse numaralandırılabilir veya numaralandırılamayabilir. | Kapsayıcı derlemelerinin ve normal derlemelerin listesini döndürür; alt derlemeler dahil değildir. Not: Herhangi bir normal derlemede semboller eksikse numaralandırılabilir veya numaralandırılamayabilir. |
| ICorDebugCode::GetCode (yalnızca IL koduna başvururken) | Birleştirme öncesi derleme görüntüsünde geçerli olacak IL döndürür. Özellikle, başvurulmakta olan türler IL içeren sanal modülde tanımlanmadığında satır içi meta veri belirteçleri doğru şekilde TypeRef veya MemberRef belirteçleri olacaktır. Bu TypeRef veya MemberRef belirteçleri, ilgili sanal ICorDebugModule nesne için IMetaDataImport nesnesinde aranabilir. |
Birleştirme sonrası derleme görüntüsündeki IL değerini döndürür. |
Gereksinimler
Platform: Bkz. .NET tarafından desteklenen işletim sistemleri.
Üstbilgi: CorDebug.idl, CorDebug.h
Kütüphane: CorGuids.lib
.NET sürümleri: .NET Framework 4.6'dan itibaren kullanılabilir