У меня есть dll с именем ExорогоAndLargeObfuscatedFoo.dll.Допустим, он определяет тип с именем ExорогоAndLargeObfuscatedFooSubClass.Он был скомпилирован для .NET.
Существуют ли какие-либо инструменты (бесплатные, платные и т. Д.), Которые будут генерировать файлы классов c # или vb, которые ничего не будут делать, кроме обтекания всего , определенного в этой дорогой dll?Таким образом я могу добавить функциональность, исправить ошибки (которые CorpFUBAR не исправит), добавить ведение журнала и т. Д.?
Буквально, я хочу вывод, который выглядит следующим образом
namespace easytoread {
public class SubClass {
private ExpensiveAndLargeObfuscatedFoo.SubClass _originalSubClass;
public SubClass() {
this._originalSubClass = new ExpensiveAndLargeObfuscatedFoo.SubClass ();
}
public string StupidBuggyMethod(string param1,int param2) {
return _originalSubClass.StupidBuggyMethod(param1, param2);
}
}
}
Он должен обрабатывать пользовательские типы возврата, а также примитивы
namespace easytoread {
public class SubFooClass {
private ExpensiveAndLargeObfuscatedFoo.SubFooClass _originalSubFooClass;
public SubFooClass() {
this._originalSubFooClass= new ExpensiveAndLargeObfuscatedFoo.SubFooClass ();
}
private SubFooClass(ExpensiveAndLargeObfuscatedFoo.SubFooClass orig) {
this._originalSubFooClass = orig;
}
public SubFooClass StupidBuggyMethod(string param1,int param2) {
return new SubFooClass(_originalSubFooClass.StupidBuggyMethod(param1, param2));
}
}
}
И так далее, и так далеевперед для каждого определенного класса.
По сути, бедный человек динамический прокси?(да, Castle Project потрясающий!)
Мы также хотели бы переименовать некоторые из наших классов-оболочек, но инструмент не должен этого делать.
Без переименования мы 'я смог бы заменить старую сборку на новую сгенерированную, изменить с помощью операторов и продолжить, как будто ничего не произошло (за исключением ошибок, исправленных!)
Нужно просто проверить dll и выполнить генерацию кода.сгенерированный код может быть даже VB.NET, ironpython или чем-то вроде CLR.
Это скользкий уклон, и я не рад, что оказался здесь, но, похоже, это путь.Я посмотрел на проект Castle, но если я не ошибаюсь, это не сработает по двум причинам: 1) я не могу ничего переименовать (не спрашивать), 2) ни один из методов сборок не объявлен виртуальным или даже перезаписываемым,Даже если бы они были, есть сотни типов, которые мне пришлось бы переопределить вручную, что не очень весело.