将WPF绑定错误转换为运行时异常。不适用于已发布的已发布应用

问题描述 投票:9回答:2

我想将DataBinding错误记录到文件中。我使用了这个被接受的anwser中提出的解决方案:

How can I turn binding errors into runtime exceptions?

我也试过这个:http://msdn.microsoft.com/en-us/library/system.diagnostics.presentationtracesources.aspx

问题是它只能在VS IDE中运行时才能运行。当我发布应用程序时,错误不是警告。

有没有人知道如何在运行时通过已发布的应用程序以编程方式获取WPF绑定错误并保存到文件中?

c# wpf
2个回答
4
投票

我使用的技术类似于您提供的第一个链接中描述的技术。它可以通过以下步骤恢复:

  1. 得出一个投掷而不是伐木的TraceListener
  2. 将您的监听器添加到PresentationTraceSources.DataBindingSource

我使用.NET Framework 4.0,4.5和4.5.1进行了测试;它适用于DebugRelease配置。

请检查complete solution I pushed on GitHub,它包括演示应用程序和单元测试项目。


1
投票

我迟到了,但我最近遇到了同样的问题,并对.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,但也将调用内部AvTrace.OnRefresh(),它将更改_hasBeenRefreshed标志并启用跟踪。

© www.soinside.com 2019 - 2024. All rights reserved.