围绕现有的 .net 库生成 .net dll 包装器

sca*_*man 5 .net c# clr code-generation wrapper

我有一个名为 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它必须处理自定义返回类型以及原语

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));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

对于每个定义的类,依此类推。

基本上,可怜的人动态代理?(是的,城堡项目太棒了!)

我们还想重命名一些包装类,但该工具不需要这样做。

无需重命名,我们就可以用新生成的程序集替换旧程序集,更改 using 语句并像什么也没发生一样继续(除了错误已修复!)

它只需要检查 dll 并进行代码生成。生成的代码甚至可以是 VB.NET、ironpython 或任何 CLR。

这是一个滑坡,我不高兴我最终来到这里,但这似乎是要走的路。我查看了 Castle Project,但除非我弄错了,否则它不会因两个原因而工作:1)我无法重命名任何东西(不要问),2)没有任何程序集方法被声明为虚拟甚至可覆盖. 即使是这样,我也必须手动覆盖数百种类型,这听起来并不有趣。

sca*_*man 2

看来最好的答案是“没有这样的工具”。因此,我稍后将尝试编写自己的项目作为业余项目。如果我得到一些有用的东西,我会把它放到 github 上并在这里更新。

更新 Visual Studio 2012 Fakes 似乎很有前途。http://msdn.microsoft.com/en-us/library/tfs/hh549175(v=vs.110).aspx - 我们已经继续,但我可能会尝试创建一个假的,然后将其作为替换 dll 放入将来的某个时候