rik*_*kit 7 design-time blend microsoft-metro windows-8 visual-studio-2012
我正在使用C#和XAML开发Metro风格的应用程序(适用于Windows 8).我已将我的viewmodels设置为用作设计时datacontexts,如下所示:
xmlns:vm="using:hub.ViewModels"
d:DataContext="{d:DesignInstance IsDesignTimeCreatable=True, Type=vm:ViewModels
Run Code Online (Sandbox Code Playgroud)
我的应用程序在运行时似乎运行正常,但在VS 2012和Blend的设计视图中,我偶尔会得到这个(无用的)错误消息:
An Exception was thrown. TargetException: Error in the application.
Stacktrace
at System.ComponentModel.PropertyChangedEventHandler.Invoke(Object sender, PropertyChangedEventArgs e)
InnerException: None
Run Code Online (Sandbox Code Playgroud)
这仅发生在设计视图-这意味着我不能设置周围的一切我INotifyPropertyChanged的()事件断点.
调试设计时错误的最佳方法是什么?
Jam*_*lis 20
如果这种情况一致或半一致地发生,您可以将调试器附加到XAML设计器:
启动Visual Studio; 打开您的项目并打开一个XAML文件,导致XAML设计器加载
启动Visual Studio的第二个实例.打开您的项目,但确保没有打开XAML文档.
确保禁用"仅我的代码":从" 工具"菜单中,选择" 选项".选择" 调试"类别.在" 常规"页面中,确保未选中" 启用我的代码 "旁边的复选框.
从Debug菜单中,选择Exceptions ...并选中Common Language Runtime Exceptions旁边的Thrown复选框.这将实现所有CLR异常的第一次机会处理.如果您知道异常的特定类型,则可以为该类型启用第一次机会处理.
从" 调试"菜单中,选择" 附加到进程".在Attach to:字段中,单击Select ...并选中列表中的Managed(v4.5,v4.0)条目,然后单击OK.
这是必要的,因为如果在进程执行本机代码时附加了调试器,则调试器可能会将该进程误检测为本机进程.如果您的项目包含本机代码,您还需要检查列表中的Native复选框(您可以同时调试托管代码和本机代码).
在" 可用进程"列表框中,找到与项目对应的xdesproc.exe,然后单击" 附加".
如果有多个进程(通常是因为您打开了多个项目,或者因为设计器正在重新加载或最近重新加载),则可能很难确定哪个设计器进程属于哪个Visual Studio实例.通常最容易附加到所有这些.Process Explorer之类的工具可以帮助您确定哪个设计器进程属于哪个Visual Studio实例.
注意:请勿将调试器附加到属于您用于调试的Visual Studio的同一实例的设计器进程(xdesproc):这样做可能会导致Visual Studio挂起.您必须始终使用两个不同的Visual Studio实例.
做你需要做的任何事情来重现bug.当它发生时,调试器将在抛出异常的位置中断.调试器应加载程序集的符号.
小智 5
我在这里寻找有关如何调试设计器时间实例问题的信息,尽管我没有与rikkit相同的问题。但是...我正在分享一个相关问题的解决方案,以防其他人也遇到同样的问题:
确保已将“启用/禁用项目代码”切换设置为“启用” ...在VS / Blend 2015中,它是XAML编辑器下方的小图标,如下 所示。
如果禁用它,这可能是您的设计时实例似乎无法正常工作的原因。
此外,如果禁用了该功能,并且尝试使用第二个VS实例进行调试,那么当您将XDesProc附加到XDesProc时,在代码背后设置的任何断点将报告它们“当前不会被命中。[因为]没有符号已为此文档加载”。您可能认为您需要以某种方式加载符号,但是如果尝试打开“模块”窗口,甚至在清单中都不会看到您的模块。
由于此设置被禁用,我在此问题上损失了几个小时。希望这可以帮助其他人不要这样做。
归档时间: |
|
查看次数: |
3286 次 |
最近记录: |