OK, maintenant, je suis vraiment confus.
J'ai d'abord eu ce problème, qui est, selon les affiches, un problème avec la version de Château.DynamicProxy c'est ILMerged dans les derniers Rhinocéros.On se moque de la bibliothèque. Il a, selon plusieurs autorités sur le sujet, été corrigé dans la dernière Château, mais que la bibliothèque n'a pas fait dans un nouveau Rhino.Des simulacres. La plupart des gens disent "il suffit de télécharger le Rhino source et le dernier Château et construire votre propre version".
Donc, j'ai fait exactement cela; j'ai attrapé un ZIP de la Rhino tronc source de Ayende de GitHub, il s'est ouvert, et l'a construit. Puis, comme un bon petit TDDer, j'ai créé une unité de test pour s'assurer que mes changements travaillé (parce que la dernière Château plis DynamicProxy de Base, nécessitant d'importants référencement de modifications):
[Test]
public void MockOfInterfaceMethodWithInterfaceGTR()
{
var mock = mocks.DynamicMock<ITestRestrictedInterface>();
Assert.NotNull(mock);
Expect.Call(mock.TestMethod(new Object2())).IgnoreArguments().Return(5);
mocks.ReplayAll();
Assert.AreEqual(5, mock.TestMethod(new Object2()));
}
...
internal interface ITestGenericInterface<TRest> where TRest:IObject1
{
int TestMethod<T>(T input) where T : TRest;
}
internal interface ITestRestrictedInterface:ITestGenericInterface<IObject2> { }
internal interface IObject1 { }
internal interface IObject2:IObject1 { }
internal class Object2:IObject2 { }
Le résultat, lorsque vous exécutez dans mon propre code de production avec la dernière version de Rhino? L'échec avec le message suivant:
Système.TypeLoadException : la Méthode 'TestMethod" sur le type 'ITestRestrictedInterfaceProxy83ad369cdf41472c857f61561d434436" de l'assembly 'DynamicProxyGenAssembly2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' a tenté implicitement de mettre en œuvre une méthode d'interface avec moins de contraintes de paramètre de type.
...Cependant, lorsque je fais un copier-coller de ce test dans un appareil de Rhino.Des simulacres.Les Tests du projet, sans aucune modification de référencé les bibliothèques, le test PASSE. J'ai fait aucun changement à la source téléchargé. J'ai fait aucun changement à la méthode d'essai et interfaces/objets sur les deux côtés. J'ai construit un nouveau Rhino.On se moque de DLL (sans IL-la fusion du Château libs) et copié avec le Château de libs de retour à ma solution de production, re-couru à l'essai, et il échoue toujours avec le même message.
WTF?