5

この質問は別の質問に関連している可能性があり、確かに 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>;
}

次に、次のように Moq を使用して IFooRepo をモックするテストがあります。

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

上記のコードは、Visual Studio 2008 でテストをデバッグする場合を除いて正常に実行されます。これは、 Ayende Rahien が投稿したものと似ているでしょうか?

現在の回避策は、IFooRepo の偽物を実装することですが、この種のシナリオで悪いイメージが生成される理由について知りたいのですが、修正はありますか? System.Reflection.Emit はバグがありますか? または、自分のコードに明らかな何かが欠けていますか?

編集: GetFoo() の誤った署名を投稿しました。問題を正しく再現する署名を GetFoo<T, F>() に修正しました。GDR をインストールすると、この問題は解決しません。

編集: F の制約に型パラメーター T が含まれている場合、 BadImageFormatException が発生するようです。しかし、たとえば に変更するとwhere F : class, new()、すべてが期待どおりに機能します。

4

2 に答える 2

2

FWIW、Ayende の投稿でこの動作が説明されており、あるジェネリック パラメーターの制約が別のパラメーターを参照している場合にのみ発生することに同意します。私も東ドイツでそれに遭遇し、手作業でコード化された偽物と同じ回避策を採用しました.

于 2009-07-20T17:10:51.350 に答える
0

.NET 3.5 SP1 GDR をインストールしましたか? その既知の問題

于 2009-05-17T08:37:16.887 に答える