ОК, теперь я действительно смущен.
Я изначально имел эту проблему, которая, согласно плакатам, была связана с версией Castle.DynamicProxy, которая ILMerged в последнюю библиотеку Rhino.Mocks. Он, по мнению нескольких властей по этому вопросу, был зафиксирован в последнем замке, но эта библиотека не превратилась в новый Rhino.Mocks. Большинство людей говорят "просто скачайте источник Rhino и последний замок и создайте свою собственную версию".
Итак, я сделал именно это; Я схватил ZIP файл источника Rhino от Ayende GitHub, открыл его и построил. Затем, как хороший маленький TDDer, я создал unit test, чтобы убедиться, что мои изменения сработали (потому что последний Castle сбрасывает DynamicProxy в Core, требуя значительных изменений ссылок):
[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 { }
Результат, когда вы запускаете мой собственный код производства с последним выпущенным Rhino? Ошибка со следующим сообщением:
System.TypeLoadException: метод TestMethod по типу 'ITestRestrictedInterfaceProxy83ad369cdf41472c857f61561d434436' от сборка 'DynamicProxyGenAssembly2, Версия = 0.0.0.0, Культура = нейтральная, PublicKeyToken = null 'попытался неявно реализовать метод интерфейса с более слабыми параметрами параметра.
... Однако, когда я копирую и вставляю этот тест в инструмент в проекте Rhino.Mocks.Tests, без внесения каких-либо изменений в библиотеки ссылок, тестовый PASSES. Я сделал нулевые изменения для загруженного источника. Я внес изменения ZERO в метод тестирования и связанные с ним интерфейсы/объекты с обеих сторон. Я построил новую библиотеку Rhino.Mocks DLL (без IL-слияния Castle libs) и скопировал ее с помощью Castle libs обратно в мое производственное решение, перезапустил тест и все еще не смог с тем же сообщением.
WTF?