我有一个在运行时发出动态类型的应用程序。为了检查生成的 .NET 代码,我们保存动态生成的程序集并使用反射器。
我想知道是否有办法在各自的进程运行时以反射器方式反映它们,而不必保存动态程序集?换句话说,在反射器中有一种“附加到进程...”按钮。
谢谢。
编辑:该功能的唯一存在理由是反映动态生成的程序集。
我有一个在运行时发出动态类型的应用程序。为了检查生成的 .NET 代码,我们保存动态生成的程序集并使用反射器。
我想知道是否有办法在各自的进程运行时以反射器方式反映它们,而不必保存动态程序集?换句话说,在反射器中有一种“附加到进程...”按钮。
谢谢。
编辑:该功能的唯一存在理由是反映动态生成的程序集。
我知道您可能正在寻找来自动态程序集的 C# 代码,并且这个问题已经很老了,但是......
您可以使用 Visual Studio即时窗口或使用WinDbg获取正在运行的动态程序集的 IL 。(如果要调试 64 位进程,则必须使用 WinDbg,因为 Visual Studio 仍然是 32 位产品。)
!load SOS.dll
使用命令或简单地加载 SOS.dll !load SOS
。
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\SOS.dll
~
命令和~n s
命令手动选择线程。用于~
列出所有线程并使用~n s
命令进行切换。例如,用于~12 s
切换到 12 号线程。!clrstack
!ip2md [address]
0123456
,您将发出命令!ip2md 0123456
。!dumpil [method descriptor]
as the address of the method descriptor, you would issue the command
!dumpil 0A1B2C3D”。这应该允许您查看动态程序集,尽管是在 IL 程序集中。
Reflector 有一个正在运行的程序集插件 ( http://weblogs.asp.net/kdente/articles/438539.aspx )。但是,我怀疑它只是帮助检索运行程序集的路径,随后反射器从磁盘加载程序集。但是,它可能值得一试。此外,创建反射器插件并不是那么困难,因此您可以扩展正在运行的程序集插件方法以自动将程序集保存到磁盘,以便反射器可以加载它(假设现有的插件还没有这样做。)