singlepost

Подмена методов в .net << На главную или назад  

Cкажите, а можно ли как то при помощи Reflection или еще как то, у типа класса подменить один метод немного другим в рантайме?

То есть я возьму класс, который лежит в стороннем модуле, чтото с ним сделаю а затем везде в стороннем модуле, который подключен через add reference у меня будет работать мой метод?

38 ответов в теме “Подмена методов в .net”

  1. 6
    Иван Voyager ответил:

    По идее не нужно, возможно проблема в некорректном изменении исходников. Зависит от конкретной сборки. Нужно определить причину ошибки, телепатия не развита)
    Мои ключи, которые я обычно использую:

    "C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\ildasm.exe" /OUT=MyDll.h MyDll.dll /ALL

    "c:\Windows\Microsoft.NET\Framework\v2.0.50727\ilasm.exe" /DLL MyDll.h /RES:MyDll.res /KEY:MyDllKey.snk /OUTPUT=MyDll1.dll
    (/KEY – если нужен strong name)

  2. 5
    Иван Пахомов ответил:

    Спасибо!

    Я взял ILDASM раскомпилил, а потом ilasm скомпилил. Ресурсы включил, но прога не запускается – вылетает с nullreferenceexception. Нужно ли как то указывать dllки на которые используются и которые я не декомпилировал?

    Может какие ключи включить надо?

  3. 4
    Иван Voyager ответил:

    Теоретически в runtime можно.
    А если в готовой сборке, то тулза – ildasm, ilasm в помощь.

  4. 3
    Иван Пахомов ответил:

    Ну на самом деле вряд ли такое возможно, иначе двери для троянов были бы открыты. Вопрос тогда такой – как можно поменять некоторые значения констант в скомпиленном модуле .NET? Reflector декомпилит на ура. Но есть ли возможность поменять пару тройку констант?

    Верней возможность то понятно есть, вопрос в том какая тулза поможет?

  5. 2
    Жека Кирпичев ответил:

    Я бы сказал, это не имеет вообще никакого отношения к тому, что нужно.

  6. 1
    Сергей Смирнов ответил:

    Попробуй унаследоваться от стороннего класса, и в классе-наследнике написать ключевое слово new в объявлении метода, который нужно подменить:

    public new int YourMethod( …. );

    После этого пользуешься наследником.
    Может не совсем то, что нужно, но мне помогало часто.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.