我想将 DataBinding 错误记录到文件中。我使用了这个接受的答案中提出的解决方案:
我也试过这个:http: //msdn.microsoft.com/en-us/library/system.diagnostics.presentationtracesources.aspx
问题是它仅在 VS IDE 中运行时才有效。当我发布应用程序时,没有发现错误。
有谁知道如何在运行时通过已发布的应用程序以编程方式获取 WPF Bindind 错误并保存到文件中?
我想将 DataBinding 错误记录到文件中。我使用了这个接受的答案中提出的解决方案:
我也试过这个:http: //msdn.microsoft.com/en-us/library/system.diagnostics.presentationtracesources.aspx
问题是它仅在 VS IDE 中运行时才有效。当我发布应用程序时,没有发现错误。
有谁知道如何在运行时通过已发布的应用程序以编程方式获取 WPF Bindind 错误并保存到文件中?
I used a technique similar to the one described in the first link you provided. It can be resumed by the following steps:
TraceListener
that throws instead of loggingPresentationTraceSources.DataBindingSource
I tested with .NET Framework 4.0, 4.5 and 4.5.1; it works on both Debug
and Release
configurations.
Please check the complete solution I pushed on GitHub, it includes a demo application and a unit test project.
我参加聚会有点晚了,但我最近遇到了同样的问题,并深入研究了 .NET 源代码。
所以问题是只有在满足以下条件之一时才启用跟踪
AvTrace.cs:
private static bool ShouldCreateTraceSources()
{
return AvTrace.IsWpfTracingEnabledInRegistry() || AvTrace.IsDebuggerAttached() || AvTrace._hasBeenRefreshed;
}
因此,只有在以下情况下才会报告绑定错误:
在注册表中启用了 WPF 跟踪 ( HKCU\Software\Microsoft\Tracing\WPF\ManagedTracing
)
附加了调试器(无论应用程序是在调试模式还是发布模式下编译)
追踪来源已刷新
最后一个很棘手 - 当您手动更新跟踪源时会刷新跟踪源:
PresentationTraceSources.DataBindingSource
这就是它在 Benoit Blanchon 提供的解决方案中起作用的原因
但是当您直接在 app.config 文件中定义跟踪源时,它将不起作用。如果要创建追踪源,需要手动调用:
PresentationTraceSources.Refresh();
这将重新读取 app.config,但也会调用 internalAvTrace.OnRefresh()
来更改_hasBeenRefreshed
标志并启用跟踪。