2008-11-17 86 views
11

确定,以便标题有点吸引但我想不出任何更好的东西(也许别人可以?)。如何使用反射来创建一个“反射机器”

所以我有一个围绕这个问题的几个问题。我想要做的是创建一个程序,它可以接受一个对象并使用反射来列出它的所有属性,方法,构造函数等等。然后,我可以在运行时操作这些对象来测试,调试和计算出我的某些类/程序在运行时正在运行,(其中一些将是windows服务,可能安装在机器上,而不是从VS进行调试运行)。

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

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

听起来可能吗?

请问程序必须提供一个钩子或者可以在“反思机”采取EXE和(如果它知道它使用的所有类),创建一个对象来使用?

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

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

+0

我不知道为什么这个问题被低估。这似乎是一个有趣的想法。上投了反对票。 – 2008-11-18 20:01:20

回答

5

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

+0

我喜欢Crack.Net,它看起来很邪恶。这将在工作环境中使用,我们在机器上没有3.5,也没有ironpython,(当他们不需要时,他们不会放入额外的位)。 – Jon 2008-11-18 07:32:31

1

如果我正确理解你在说什么,Powershell几乎可以做到所有这些。

+0

Powershell看起来很有趣,值得探索。 – Jon 2008-11-18 07:33:47

3

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

这是一个有点过时了,现在,我想,但有一个earlier version of it on CodeProject在这里你可以看到他是怎样的,什么是源代码。

+0

鹰眼看起来不错,可能是理想的。 – Jon 2008-11-18 07:35:37

0

参见如何建立一个"reflection engine".

所有你需要做的是放下这组在您所设定的可用 运行时库的机械这个答案,它你想要做什么,我想。 (我做了它在实践中听起来也许不那么容易)。

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