创建或寻找fuslogvw.exe的替代品,也称为Fusion程序集绑定日志查看器。

4
汇编绑定日志查看器存在一些错误(例如,往往无法清空日志),并且功能相对较少(搜索、排序、过滤几乎都不可用)。因此,我想知道是否存在以下情况:
1. 已存在替代方案; 2. 全局挂钩程序集解析事件是可能的,因此我可以自己完成这个任务; 3. 微软已经在某个地方发布了源代码,我们被允许分叉。
除了第二个选项外,我知道你可以相对简单地创建一个CLR主机实现(尽管不是微不足道的),但如果你需要比现有的融合日志查看器更精细的控制,那似乎有点过头了。
请注意,我已经看到了这个答案,但那似乎并不能回答这个问题。

回答一些评论:

我知道程序集重定向,AssemblyResolveAssemblyLoad事件,但第一个只能作为最后的手段(探测链中的最后一个),第二个只会在装载了一个程序集之后才会触发。两者都不能用于其他进程,并且都无法显示整个探测过程。

我注意到使用RyuJIT时,某些绑定会略有不同,以不同的顺序出现,这是由于编译和加载编译后的IL的不同方式所致。虽然我已经能够研究和解决绑定问题,但我非常不喜欢fuslogvw.exe,因为它耗时很长(尽管是独一无二且有帮助的工具)。因此,我开始寻找更好的工具来监视探测过程,但结果却很少。


处理AppDomain.AssemblyLoad是您正在寻找的吗?这将使您能够检查加载到应用程序域中的每个程序集。AppDomain.AssemblyResolve事件在加载之前提供了所有程序集,因此它可以让您确定程序集错误。 - xxbbcc
@xxbbcc,感谢您的建议,但我已经在使用这些方法了。它们无法帮助解决这些方法的问题,而且一旦失败,所有方法都将失败。我需要一种类似于融合的进程外方法,但最好是在我的控制下。 - Abel
我不确定我理解你所说的“一个失败意味着所有都会失败” - 加载程序集失败就是整个过程的结束。融合日志查看器会显示什么不同?除了需要一种不同的跟踪程序集绑定的方式之外,你的问题似乎非常模糊。 - xxbbcc
@xxbbcc,你提到的事件可以解决自己程序集中一部分有限的情况,但不能用于其他进程中的其他程序集。此外,有些情况可以通过app.config绑定重定向来解决,但无法使用AssemblyResolve(即强名称重定向)。据我所知,通过托管代码,没有办法显示整个探测过程,只有fuslogvw.exe可以显示它们,但这个工具已经过时且难以使用。我希望有更好的方法来监视探测过程。我想我必须自己动手(也许与社区分享;)。 - Abel
啊,好的 - 如果你想监控第三方进程,你需要一个独立的工具。 - xxbbcc
显示剩余9条评论
1个回答

5

可能有些人已经知道了,但是也许有些人对我最近在GitHub上发布的一个现代替代品FUSLOGVW.exe感兴趣:Fusion++

Fusion++

使用起来非常简单:只需点击“记录”以捕获汇编日志。完成后,再次点击“停止”,Fusion++将为您解析所有日志文件。

在幕后,它使用与好老的 FUSLOGVW.exe 相同的机制。


听起来很棒!我自己也尝试过这个想法,但是FuslogVw使用了未记录的API调用,因此完全重写变得困难。我理解你基本上是在使用现有机制并以更有意义的方式显示它? - Abel
1
此外,这是4年来唯一的答案,Microsoft并没有采取任何措施来改善或开源该FuslogVw.exe文件,所以我对这次尝试感到非常满意 :) - Abel
非常乐意帮忙,是的,我只是通过Windows注册表激活默认的.NET日志记录(将设置和日志路径抽象化,使用户不必关心),并确保在停止会话后回归一切。然后,Fusion++解析文件并将其带到UI中,以防止您自己扫描文件系统。 - Waescher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接