如何使用反射创建“反射机器”

时间:2008-11-17 23:21:54

标签: c# reflection

好的,所以标题很糟糕,但我想不出更好的东西(也许其他人可以吗?)。

所以我在这里有一些关于某个主题的问题。我想要做的是创建一个程序,可以获取一个对象并使用反射列出其所有属性,方法,构造函数等。然后我可以在运行时操作这些对象来测试,调试和确切地知道我的一些类/程序在运行时正在进行,(其中一些是Windows服务,可能安装在机器上,而不是在VS的调试中运行)。

所以我会为程序提供一个钩子,从本地机器(仅)这个程序可以获得主对象的实例,因此可以看到在其中运行的所有子对象。 (为了安全起见,可能需要使用arg来启动程序以暴露该钩子。)

“反射机器”将允许运行时操作和询问。

这听起来有可能吗?

程序是否必须提供一个钩子,或者“反射机器”是否可以使用EXE并且(如果它知道它正在使用的所有类),创建一个要使用的对象?

我知道您可以在运行时导入DLL,以便它知道各种类,但是您可以导入单个类吗? I.E.假设我有没有编译成DLL的项目'Y'但是我想在它上面使用“反射机器”,我可以指向该目录并获取文件以便能够引用这些类吗?

编辑:我很想尝试自己开发它,但我已经有很多项目我想做并且已经开始了。为什么在有很多可供选择的选择时重新发明轮子。

4 个答案:

答案 0 :(得分:6)

尝试查看Crack.NET。它用于在WPF / WinForms上进行运行时操作和查询,但源可用,如果它已经不能满足您的需求,可能是一个好的开始。

答案 1 :(得分:3)

听起来好像Corneliu Tusnea的Hawkeye可能接近你正在寻找的对象/属性/等的运行时询问。他称之为.NET运行时对象编辑器。我不确定我上面链接的主页或CodePlex project是否是最佳起点。

现在有点过时了,我想,但是有一个earlier version of it on CodeProject,你可以看到他做的方式和内容的源代码。

答案 2 :(得分:1)

如果我正确地理解你在说什么,那么Powershell实际上几乎完成了所有这些。

答案 3 :(得分:0)

请参阅此答案,了解如何构建"reflection engine".

您需要做的就是将这套机器放在您的可用设备中 我认为,运行时库可以满足您的需求。 (这可能不像我在实践中听起来那么容易)。

我的猜测是你也想要一个运行时编译器,这样就可以了 制造检验项目的仪表/变换变体 收集所需的运行时数据。你可能会发现这样的 机械提供静态分析结果,让您避免 在许多情况下进行运行时分析。