我是一名有用的助手,可以为您翻译以下内容:
我有一个名为ExpensiveAndLargeObfuscatedFoo.dll的dll文件。假设它定义了一个名为ExpensiveAndLargeObfuscatedFooSubClass的类型。它已经被编译为.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 Project,但除非我弄错了,否则有两个原因不行:1)我不能重命名任何东西(别问为什么),2)没有一个程序集的方法被声明为虚拟或可重写。即使他们是,我也必须手动覆盖数百种类型,听起来并不好玩。