我有一个运行时发出的动态类型的应用程序。为了检查生成的.NET代码,我们保存动态生成的程序集并使用Reflector。
我想知道是否有办法在相应的进程运行时反映它们的Reflector方式,而不必保存动态程序集?换句话说,在Reflector中有一种“附加到进程...”按钮。
感谢。
编辑:该功能的唯一存在理由是反思动态生成的程序集。
答案 0 :(得分:2)
我知道您可能正在寻找动态装配体中的C#代码,而且这个问题很老了,但是...
您可以使用Visual Studio 立即窗口或使用 WinDbg 来获取正在运行的动态程序集的IL。 (如果您正在调试64位进程,则必须使用WinDbg,因为Visual Studio仍然是32位产品。)
!load SOS.dll
或!load SOS
命令加载SOS.dll。
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装配中。
答案 1 :(得分:-1)
Reflector(http://weblogs.asp.net/kdente/articles/438539.aspx)有一个正在运行的程序集加载项。但是,我怀疑它只是帮助检索运行程序集的路径,随后由Reflector从磁盘加载程序集。但是,它可能值得一试。此外,创建反射器加载项并不是那么困难,因此您可以扩展正在运行的程序集加载项方法,以自动将程序集保存到磁盘,以便它可以由Reflector加载(假设现有加载项)还没有这样做。)