2010-05-31 29 views
14

Yönetilmeyen kodlu karma bir derleme olan System.Data.SQLite.DLL'u kullanmayla ilgili bir örnek vereceğim: Bu:Yönetilmeyen kod içeren ham derlemeleri dinamik olarak nasıl yüklerim? ('Doğrulanamaz kod başarısız ilke denetimi' kural dışı durumunu atlayarak)

var assembly= Assembly.LoadFrom("System.Data.SQLite.DLL") 

istisna yok atılmış, ancak bunu yaparsam gibidir:

var rawAssembly = File.ReadAllBytes("System.Data.SQLite.DLL"); 
    var assembly = Assembly.Load(rawAssembly); 

CLR ile FileLoadException atar "Doğrulanamayan kod politika kontrolünü başarısız (istisna HRESULT: 0x80131402).". Diyelim ki bu montajı bir çocuk AppDomain üzerine yüklemeye çalışıyorum, politika kontrolünü geçmeme izin vermek için AppDomain'in güvenliğini nasıl özelleştirebilirim?

+0

http://stackoverflow.com/a/24037103/1005741 Bu birisine yardımcı olabilir! – hriziya

cevap

13

Crummy istisna mesajının kurbanıyız. Desteklenmeyen yönetilmeyen kod içeren Assembly.Load (bayt []) ile derlemeler yükleniyor. Bu, bu feedback item konusu.

GÜNCELLEME: bağlı geri bildirim öğesi kayboldu, VS2012 serbest bırakma zamanında temizliğin bir parçası olarak silindi. Hala kurtarmak olabilir bunun sadece bir parçasıdır başka bir web sayfasından kopyalanan bu parçası şöyledir:

“[...] biz sadece ILOnly görüntüleri yüklenmesine izin [...] başka bir şey güvenli olmadığından” -

GÜNCELLEME: bağlantı archive.org yedek kopyası ile düzeltildi.

+0

Uygun bir kanıt nesnesinin nasıl oluşturulacağına dair bir örnek verebilir misiniz? –

+0

AppDomain.Current.Evidence kullanmayı denediniz mi? –

+0

Yapmadım, ama bu sadece geçerli alanın güvenlik ayarlarının bir kopyası değil (ilk başta istisna attı)? –

11

Sorun, CLR'nin dll ayrı bölümlerini farklı sayfalara eşleme, düzeltmeleri ayarlama vb. Gibi normal DLL yükleme adımlarını gerçekleştirmemesidir. Bir derleme ham bayttan yüklendiğinde, bu ham baytlar belleğe eşlenir. olduğu gibi sadece yönetilen meta veriler okunur. Hiçbir kanıt veya güvenlik ayarı bu davranışı değiştirmez.