2009-05-17 37 views
5

Câu hỏi này có thể liên quan đến câu hỏi another và chắc chắn kết quả với một System.BadImageFormatException. Có lẽ đó là cùng một điều nhưng tiếp xúc khác nhau?Tại sao nhận được trường hợp giả tạo được tạo ra với Moq ném một System.BadImageFormatException?

Tôi có sau mã:

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>; 
} 

Sau đó, tôi có một bài kiểm tra đó chế giễu IFooRepo sử dụng Moq như vậy:

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

Đoạn mã trên chạy tốt trừ khi gỡ lỗi các thử nghiệm với Visual Studio 2008. Khi tôi bước qua dòng trên, một System.BadImageFormatException được ném từ System.Reflection.Emit qua Castle.DynamicProxy. Điều này có thể tương tự như something Ayende Rahien được đăng không?

Bây giờ giải pháp thay thế là triển khai giả mạo cho IFooRepo nhưng tôi tò mò là tại sao một hình ảnh xấu được tạo ra cho loại kịch bản này và có khắc phục không? System.Reflection.Emit có lỗi không? Hoặc tôi thiếu một cái gì đó rõ ràng trong mã của riêng tôi?

EDIT: Đã đăng chữ ký không đúng cho GetFoo(). Đã sửa chữ ký thành GetFoo < T, F >(), sẽ tái tạo lại vấn đề một cách chính xác. Với GDR, vấn đề này vẫn tồn tại.

EDIT: Dường như nếu ràng buộc trên F bao gồm tham số kiểu T BadImageFormatException được nâng lên. Nhưng tôi thay đổi nó thành, nói where F : class, new(), sau đó mọi thứ hoạt động như mong đợi.

Trả lời

0
+0

Tôi đã cài đặt .NET 3.5 SP1. Không có ý tưởng nếu GDR được cài đặt mặc dù. Làm thế nào tôi có thể nói? Và bạn đã tạo kết nối giữa bài đăng của Ayende và trang tải xuống GDR như thế nào? Tôi đã xem bài đăng của Ayende trước khi đăng câu hỏi của tôi nhưng không thấy tham chiếu đến GDR. Oh và cảm ơn cho liên kết BTW, tôi sẽ kiểm tra nó ra sớm. –

+0

Scott Hanselman nhận xét gần cuối trang về cách xác định xem GDR có được cài đặt hay không. http://www.hanselman.com/blog/NET35SP1GDRIsAvailableToDownload.aspx –

+0

GDR đã được áp dụng trong trường hợp của tôi. Sau đó, tôi phát hiện ra rằng tôi đã đăng các đoạn mã không chính xác. Tôi đã sửa các đoạn trích trong câu hỏi. –

2

FWIW, tôi đồng ý rằng bài đăng của Ayende giải thích hành vi này và điều đó chỉ xảy ra khi các ràng buộc trên một tham chiếu tham số chung khác. Tôi cũng gặp nó, với GDR, và đã áp dụng cùng một cách giải quyết các hàng giả được mã hóa bằng tay.

Các vấn đề liên quan