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

时间:2013-10-09 14:16:47

标签: c# wpf

我想将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 Bindind错误并将其保存到已发布应用程序的文件中?

2 个答案:

答案 0 :(得分:4)

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

  1. 导出投掷的TraceListener而不是记录
  2. 将您的听众添加到PresentationTraceSources.DataBindingSource
  3. 我使用.NET Framework 4.0,4.5和4.5.1进行了测试;它适用于DebugRelease配置。

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

    Exception in Visual Studio

答案 1 :(得分:1)

我参加聚会的时间不算太晚,但是最近我遇到了同样的问题,并且对.NET来源进行了一些研究。

所以问题在于,仅在满足以下条件之一时才启用跟踪

AvTrace.cs:

private static bool ShouldCreateTraceSources()
{
    return AvTrace.IsWpfTracingEnabledInRegistry() || AvTrace.IsDebuggerAttached() || AvTrace._hasBeenRefreshed;
}

因此,仅在以下情况下才会报告绑定错误:

  • 在注册表(HKCU\Software\Microsoft\Tracing\WPF\ManagedTracing)中启用了WPF跟踪

  • 已附加调试器(应用程序是在Debug还是Release模式下编译都没有关系)

  • 跟踪源已刷新

最后一个是棘手的-使用以下手动更新跟踪源时会刷新跟踪源:

PresentationTraceSources.DataBindingSource

这就是为什么它可以在Benoit Blanchon提供的解决方案中起作用的原因

,但是当您直接在app.config文件中定义跟踪源时,它将不起作用。 如果要创建跟踪源,则需要手动调用:

PresentationTraceSources.Refresh();

这将重新读取app.config,但还将调用内部AvTrace.OnRefresh(),它将更改_hasBeenRefreshed标志并启用跟踪。