2009-05-17 10 views
5

Bu soru another sorusu ile ilgili olabilir ve kesinlikle System.BadImageFormatException ile sonuçlanır. Belki de aynı şeydir ama farklı şekilde ortaya çıkar?Neden Moq ile oluşturulan alaycı örnek almak bir System.BadImageFormatException?

Aşağıdaki kod var:

Sonra
public interface IFoo<T> where T : class, new() { 
    T FooMethod(object o); 
} 

public interface IFooRepo { 
    F GetFoo<T, F>() where T : class, new() where F : IFoo<T>; 
} 

Ben IFooRepo şöyle Moq kullanarak alay bir test var:

var instance = new Mock<IFooRepo>().Object; 

Yukarıdaki kod iyi çalışır Görsel Testi ayıklama dışında Studio 2008. Yukarıdaki satırın üzerine adım attığımda System.BadImageFormatException Castle.DynamicProxy aracılığıyla System.Reflection.Emit'ten atılıyor. Bu, something Ayende Rahien'e benzer olabilir mi?

Şimdi bu çözüm IFooRepo için bir sahte uygulamaktır, ancak bu tür bir senaryo için neden kötü bir görüntünün üretildiğini merak ediyorum ve bir düzeltme var mı? System.Reflection.Emit buggy mi? Yoksa kendi kodumda bariz bir şeyi mi özlüyorum?

EDIT: GetFoo() için yanlış imza gönderildi. İmzayı doğru bir şekilde yeniden üreten, GetFoo < T, F >() öğesine imzayı düzeltildi. GDR yüklü bu sorun devam ediyor.

EDIT: F'deki kısıtlama, T BadImageFormatException tür parametresi içeriyorsa, görünür. Ama onu where F : class, new() olarak değiştirdim, sonra her şey beklendiği gibi çalışıyor.

cevap

0
+0

.NET 3.5 SP1 yüklü. GDR yüklü olsa da bir fikir yok. Nasıl söyleyebilirim? Ayende'nin yazısı ile GDR indirme sayfası arasındaki bağlantıyı nasıl yaptınız? Ayende'nin meselesini sorgama göndermeden önce görmüştüm ama GDR'ye referans göstermedim. Oh ve BTW bağlantısı için teşekkürler, yakında kontrol edeceğim. –

+0

Scott Hanselman, GDR'nin yüklü olup olmadığını belirlemek için sayfanın alt kısmına yakın yorumlar. http://www.hanselman.com/blog/NET35SP1GDRIsAvailableToDownload.aspx –

+0

GDR zaten benim durumumda uygulandı. Sonra yanlış kod snippet'leri gönderdiğimi keşfettim. Sorudaki snippet'leri düzelttim. –

2

FWIW, ben Ayende sonrası bu davranışı açıklar konusunda hemfikir ve sadece olur ne zaman bir jenerik parametre referansı diğerine kısıtlamalar. Ben de GDR ile karşılaşıyorum ve el ile kodlanmış sahte malların aynı çözümünü kabul ettim.