2013-07-23 17 views
7

Gerçekten başlık olarak basit. Bir çözümü .Net 2-3.5'ten .Net 4'e yükselttim, iyi çalıştı, VS 2012'yi kurdum ve onunla birlikte .Net 4.5 ve şimdi CustomAttributes'ı yansıtmaya çalışırken bir ExecutionEngineException alıyorum. aşağıdaki kodu kullanarak dinamik olarak oluşturulmuş bir DLL:Neden VS2012/.Net 4.5 yüklendikten sonra .Net 4.0 Assembly.GetCustomAttributes üzerinde ExecutionEngineException alıyorum?

Assembly assembly = Assembly.LoadWithPartialName("DavesNamespace.Custom"); 
var attributes = assembly.GetCustomAttributes(typeof(ChecksumAttribute), true); 

senle ya GetCustomAttributes için belirtilen Tip olmadan istisna olsun, ama buna istisna atar bu noktada sadece var, montaj başarıyla yüklenir ve aslında can Bir ara noktaya yapıştığında CustomAttributes koleksiyonunu görüntüleyin.

Orijinal .Net 2-3.5 sürümü, yaklaşık 2020 yüklendiğinden beri çalışır.

Herhangi bir yardım çok takdir, ben online görünümlü ExecutionEngineExceptions ile biten vs2012 kaynaklanan bazı sorunları buldum, ama bir cevap ile hiçbir şey. Sorun, VS2012 ve .Net 4.5 kaldırılarak çözülebilir, ancak piyasaya çıktığında VS2013 şirketine taşınmak istediğimiz için gerçekten bir çözüm değil.

DÜZENLEME: Sadece bu yapan bir örnek uygulamasında ortaya çıkan hata var ve uygulama 4.5

Yığın izleme aşağıdaki yorum eklenmiştir hedefleme inşa halinde istisna hala (Bu en null) bile atılır

+1

Özel durum ve stacktrace'i yükleyebilir misiniz? – jessehouwing

+4

@mckjerral .NET Framework uyumluluk ekibindenim. Bu konuya bir göz atmak isterim. Microsoft dot com şirketinde netfx45compat şirketinde bana ulaşın Sorunu çoğaltmak için kodunuz varsa, bu da harika olurdu. Teşekkürler, Varun – Varun

+0

@jessehouwing '{" System.ExecutionEngineException 'türünün istisnası atıldı. "} HRESULT -2146233082 StackTrace null' Orada bulunacak çok fazla yardım yok! – mckjerral

cevap

1

Kökenin, .Net 4.5'ün DLL'lerde CustomAttributes öğelerini okuma biçiminde belgesiz bir değişiklik olduğunu düşünmemize karşın, özel durumumuz için sorunu çözdüm.

çözelti CustomAttributeBuilder ilerliyordu AssemblyBuilder.Save() önceki son bir şey olmaktan ayarlı [düzeneğin tüm içerik yerine oturtulduktan sonra] İlk thing after AppDomain.CurrentDomain.DefineDynamicAssembly() [içeriğin herhangi doldurulmadan önce]

için

Sadece Load(), olan LoadWithPartialName() için değiştirmeyi kullanmak üzere yeniden yapılandırılmış olsa da, istisnaın atıldığı gerçek kodun değiştirilmesine gerek yoktur, ancak bu geçici çözüm hala LoadWithPartialName() ile çalışmıştır.

Derleme içeriği, özel özniteliği yanlış yere koyduktan sonra özel bir öznitelik eklemek olabilir mi? Ancak sorun MS'ye bakmak için kayıt altına alındı.

İlgili konular