gpt4 book ai didi

c# - 围绕现有.net库生成.net dll包装器

转载 作者:行者123 更新时间:2023-12-05 01:30:30 25 4
gpt4 key购买 nike

我有一个名为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。

这是一个湿滑的斜坡,我不高兴自己到这里结束,但这似乎是要走的路。我看了看《城堡计划》,但除非我被误认为是行不通的,原因有两个:1)我不能重命名任何东西(不要问),2)没有一个程序集方法被声明为虚拟方法甚至是可重写的。即使它们是,我也必须手动重写数百种类型,这听起来并不有趣。

最佳答案

ReSharper可以为您完成很多工作。

您将需要声明一个基本类:

namespace easytoread {
public class SubClass {
private ExpensiveAndLargeObfuscatedFoo.SubClass _originalSubClass;
}
}

然后,选择ReSharper>编辑>生成代码(Alt + Ins),选择“委派成员”,选择全部,然后让它生成代码。

它不会使用自定义类包装返回值(它将返回原始类型),因此仍然必须手动添加。

关于c# - 围绕现有.net库生成.net dll包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9916367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com