我正在使用 C# 和 XAML 开发 Metro 风格的应用程序(适用于 Windows 8)。我已将 View 模型设置为用作设计时数据上下文,如下所示:
xmlns:vm="using:hub.ViewModels"
d:DataContext="{d:DesignInstance IsDesignTimeCreatable=True, Type=vm:ViewModels
我的应用程序在运行时似乎运行良好,但在 VS 2012 和 Blend 的设计 View 中,我偶尔会收到以下(无用的)错误消息:
An Exception was thrown. TargetException: Error in the application.
Stacktrace
at System.ComponentModel.PropertyChangedEventHandler.Invoke(Object sender, PropertyChangedEventArgs e)
InnerException: None
这仅发生在设计 View 中 - 这意味着我无法在所有 INotifyPropertyChanged() 事件周围设置断点。
调试设计时错误的最佳方法是什么?
最佳答案
如果这种情况持续或半持续发生,您可以将调试器附加到 XAML 设计器:
启动 Visual Studio;打开项目并打开 XAML 文件,从而加载 XAML 设计器
启动 Visual Studio 的第二个实例。打开您的项目,但确保没有打开任何 XAML 文档。
确保禁用“仅我的代码”:从工具菜单中,选择选项。选择调试类别。在常规页面中,确保取消选中仅启用我的代码旁边的复选框。
从调试菜单中,选择异常...,然后选中公共(public)语言旁边的抛出复选框运行时异常。这将能够优先处理所有 CLR 异常。如果您知道异常的具体类型,则可以仅针对该类型启用首次机会处理。
从调试菜单中,选择附加到进程。在附加到:字段中,单击选择...并选中列表中的托管(v4.5、v4.0)条目然后点击确定。
这是必要的,因为如果在进程执行 native 代码时附加该进程,调试器可能会将进程误检测为 native 进程。如果您的项目包含 native 代码,您还需要选中列表中的 native 复选框(您可以同时调试托管代码和 native 代码)。
<在可用进程列表框中,找到与您的项目对应的xdesproc.exe,然后单击附加。
如果有多个进程(通常是因为您打开了多个项目或者因为设计器正在重新加载或最近重新加载),则可能很难确定哪个设计器进程属于哪个 Visual Studio 实例。通常最简单的方法就是将它们全部连接起来。像 Process Explorer 这样的工具可以帮助您确定哪个设计器进程属于哪个 Visual Studio 实例。
注意:请勿将调试器附加到属于用于调试的 Visual Studio 同一实例的设计器进程 (xdesproc):这样做可能会导致 Visual Studio 挂起。您必须始终使用 Visual Studio 的两个不同实例。
尽一切努力重现该错误。当它发生时,调试器将在抛出异常的地方中断。调试器应该加载程序集的符号。
关于windows-8 - VS2012/混合 5 : Debugging an Exception (only) occurring in design view,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11738436/