Cкажите, а можно ли как то при помощи Reflection или еще как то, у типа класса подменить один метод немного другим в рантайме?
То есть я возьму класс, который лежит в стороннем модуле, чтото с ним сделаю а затем везде в стороннем модуле, который подключен через add reference у меня будет работать мой метод?
22 апреля 2009 в 13:04
По идее не нужно, возможно проблема в некорректном изменении исходников. Зависит от конкретной сборки. Нужно определить причину ошибки, телепатия не развита)
Мои ключи, которые я обычно использую:
"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)
21 апреля 2009 в 14:04
Спасибо!
Я взял ILDASM раскомпилил, а потом ilasm скомпилил. Ресурсы включил, но прога не запускается – вылетает с nullreferenceexception. Нужно ли как то указывать dllки на которые используются и которые я не декомпилировал?
Может какие ключи включить надо?
21 апреля 2009 в 11:02
Теоретически в runtime можно.
А если в готовой сборке, то тулза – ildasm, ilasm в помощь.
21 апреля 2009 в 2:03
Ну на самом деле вряд ли такое возможно, иначе двери для троянов были бы открыты. Вопрос тогда такой – как можно поменять некоторые значения констант в скомпиленном модуле .NET? Reflector декомпилит на ура. Но есть ли возможность поменять пару тройку констант?
Верней возможность то понятно есть, вопрос в том какая тулза поможет?
20 апреля 2009 в 20:00
Я бы сказал, это не имеет вообще никакого отношения к тому, что нужно.
20 апреля 2009 в 19:03
Попробуй унаследоваться от стороннего класса, и в классе-наследнике написать ключевое слово new в объявлении метода, который нужно подменить:
public new int YourMethod( …. );
После этого пользуешься наследником.
Может не совсем то, что нужно, но мне помогало часто.