Castle DynamicProxy - Ошибка при создании прокси с использованием GTP, используемого в качестве GTR

Хорошо, теперь я действительно в замешательстве.

Первоначально у меня была эта проблема , которая, согласно плакатам, связана с версией Castle.DynamicProxy, которая интегрирована в последнюю версию библиотеки Rhino.Mocks. Согласно нескольким авторитетным источникам, он был исправлен в последней версии Castle, но эта библиотека не превратилась в новый Rhino.Mocks. Большинство людей говорят: «Просто скачайте исходный код Rhino и последнюю версию Castle и создайте свою собственную версию».

Итак, я сделал именно это; Я взял ZIP-архив с исходным кодом Rhino на GitHub, открыл его и собрал. Затем, как хороший маленький TDDer, я создал модульный тест, чтобы убедиться, что мои изменения работают (потому что последняя версия Castle сворачивает DynamicProxy в Core, что требует некоторых значительных изменений ссылок):

    [Test]
    public void MockOfInterfaceMethodWithInterfaceGTR()
    {
        var mock = mocks.DynamicMock();
        Assert.NotNull(mock);
        Expect.Call(mock.TestMethod(new Object2())).IgnoreArguments().Return(5);
        mocks.ReplayAll();
        Assert.AreEqual(5, mock.TestMethod(new Object2()));
    }

...

internal interface ITestGenericInterface where TRest:IObject1
{
    int TestMethod(T input) where T : TRest;
}

internal interface ITestRestrictedInterface:ITestGenericInterface { }

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.Тестирует проект без внесения каких-либо изменений в библиотеки, на которые есть ссылки, файл test PASSES. Я не внес никаких изменений в загруженный исходный код. Я сделал НОЛЬ изменений в методе тестирования и связанных интерфейсах / объектах с обеих сторон. Я создал новую DLL Rhino.Mocks (без слияния библиотек Castle с помощью IL) и скопировал ее с библиотеками Castle обратно в свое производственное решение, повторно запустил тест, и он по-прежнему терпит неудачу с тем же сообщением.

WTF?

68
задан Community 23 May 2017 в 12:10
поделиться