【问题标题】:How to use reflection to create a "reflection machine"如何利用反射打造“反射机器”
【发布时间】:2010-09-22 18:39:41
【问题描述】:

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

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

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

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

这听起来可能吗?

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

我知道您可以在运行时导入 DLL,以便它了解各种类,但是您可以导入单个类吗? IE。假设我有未编译为 DLL 的项目“Y”,但我想在其上使用“反射机”,我可以指向该目录并获取文件以引用这些类吗?

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

【问题讨论】:

  • 我不知道为什么这个问题被否决了。这似乎是一个有趣的想法。投票赞成。

标签: c# reflection


【解决方案1】:

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

【讨论】:

  • 我喜欢 Crack.Net,它看起来很邪恶。这将在工作环境中使用,我们的机器上没有 3.5,也没有 Ironpython,(他们不喜欢在不需要时添加额外的位)。
【解决方案2】:

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

我认为现在有点过时了,但有一个 earlier version of it on CodeProject,您可以在其中查看源代码,了解他的所作所为。

【讨论】:

  • 鹰眼看起来很棒,可能是理想的。
  • 可以在命令行应用程序上使用 Hawkeye。我已经快速使用它,似乎只能连接到 Windows 窗体应用程序。
  • 我没有广泛使用它,但我认为你是对的,它不能挂接到控制台应用程序中。
  • 比 AR。我想我会看看 PowerShell 或尝试自己动手。
【解决方案3】:

如果我正确理解您的意思,Powershell 实际上几乎可以完成所有这些工作。

【讨论】:

  • Powershell 看起来很有趣,值得探索。
【解决方案4】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-21
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 2020-10-22
    相关资源
    最近更新 更多