Этот вопрос может быть связан с другим вопросом, и он, безусловно, приводит к исключению System.BadImageFormatException. Может быть, это одно и то же, но по-разному выставлено?
У меня есть следующий код:
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>;
}
Затем у меня есть тест, который имитирует IFooRepo, используя Moq следующим образом:
var instance = new Mock<IFooRepo>().Object;
Приведенный выше код работает нормально, за исключением случаев отладки теста в Visual Studio 2008. Когда я перехожу указанную выше строку, исключение System.BadImageFormatExmat выдается из System.Reflection.Emit через Castle.DynamicProxy. Может ли это быть похоже на что-то , опубликованное Ayende Rahien?
Теперь обходной путь состоит в том, чтобы реализовать фальшивку для IFooRepo, но мне любопытно, почему генерируется плохое изображение для такого сценария и есть ли исправление? Не глючит ли System.Reflection.Emit? Или я упускаю что-то очевидное в своем собственном коде?
РЕДАКТИРОВАТЬ : добавлена неверная подпись для GetFoo (). Исправлена подпись для GetFoo (), которая правильно воспроизводит проблему. После установки ГДР эта проблема сохраняется.
EDIT : Кажется, что если ограничение на F включает параметр типа T, то BadImageFormatException повышается. Но я изменяю его, скажем, where F : class, new()
, тогда все работает как положено.