如何使用reflection创建“reflection机器”

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

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

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

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

听起来有可能吗?

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

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

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

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

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

我认为它现在有点过时,但在CodeProject上有一个早期版本 ,你可以在其中看到他的工作方式和内容的源代码。

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

请参阅此答案,了解如何构建“reflection引擎”。

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

我的猜测是你还需要一个运行时编译器,这样你就可以制造被检查程序的检测/转换变体来收集你想要的运行时数据。 您可能会发现此类机器提供的静态分析结果可以避免在许多情况下进行运行时分析。