调试 Expression Blend 应用程序

如果 Microsoft Expression Blend 应用程序的行为与预期不符,或者在尝试测试应用程序时出错,则说明应用程序中可能包含错误。理解错误的原因或者找出错误在应用程序中的位置可能很困难,但理解可能遇到的错误类型会有所帮助。

语法错误

在生成应用程序时,任何语法错误都将显示在 Expression Blend 的“结果”面板的“错误”选项卡中或 Microsoft Visual Studio 2010 的“错误列表”面板中。

如果可扩展应用程序标记语言 (XAML) 或代码不符合语言的格式设置规则,就会出现语法错误。错误的说明有助于理解如何更正该错误。该说明还指定了出现错误的文件名称和行号。语法错误的某些常见原因如下:

  • 关键字的拼写错误或大小写错误。

  • 文本字符串前后丢失问号。

  • XAML 元素丢失结束标记。

  • XAML 元素出现在不允许使用的位置。通过在 Expression Blend 的“设计”视图中或在 Visual Studio 2010 中编辑文档,可以避免发生这些错误。

  • 在代码文件中,函数调用或方法调用未包含必要的参数。例如,MessageBox.Show() 方法必须至少具有一个参数(如 MessageBox.Show("Hello") 中的字符串)。

  • 在代码文件中,某种类型的变量被指定了不同的类型。例如,MessageBox.Show() 方法可以具有字符串参数,但不能具有整数参数。

  • 在 C# 中,不需要参数的方法可能未在末尾包含小括号。例如,this.InitializeComponent; 将导致语法错误,因为正确的代码行是 this.InitializeComponent();

有关 XAML 语法的信息,请参阅 MSDN 上的 控件库 Cc294906.xtlink_newWindow(zh-cn,Expression.40).png 中以及 Silverlight Control Gallery Cc294906.xtlink_newWindow(zh-cn,Expression.40).png(Silverlight 控件库)中列出的各个控件的概述主题。有关编程语法的信息,可在 MSDN 上搜索代码中的关键字。

编译错误

在生成应用程序时,任何编译错误都将显示在 Expression Blend 的“结果”面板的“错误”选项卡中或 Visual Studio 2010 的“错误列表”面板中。

当 Expression Blend 或 Visual Studio 2010 的编译系统无法找到项目所需的内容时,将发生编译错误。例如,如果 Windows Presentation Foundation (WPF) 项目缺少对 WPF 程序集的引用,则可能会出现“名称‘Window’在命名空间‘https://schemas.microsoft.com/winfx/2006/xaml/presentation’中不存在”之类的错误。如果出现此错误,则可以单击“项目”菜单上的“添加引用”,添加对“C:\Program Files\Reference Assemblies\Microsoft\Framework\”文件夹中的下列 WPF 程序集的引用:

  • PresentationCore.dll

  • PresentationFramework.dll

  • WindowsBase.dll

如果仍然出现“名称‘<member>’在当前上下文中不存在”之类的错误,则可能缺少其他程序集引用,或者可能需要在代码中为缺少的命名空间添加 using (C#) 或 Imports (Visual Basic .NET) 语句。若要找出需要哪个程序集或命名空间,请参阅 MSDN 上与导致错误的成员相关的参考主题。

编译错误的某些常见原因如下:

  • 关键字的拼写错误或大小写错误。

  • 应用程序中对类的引用不正确。例如,如果应用程序使用在单独的 .cs 或 .vb 代码文件中实现的且具有自己的命名空间的自定义类,则应用程序中使用该自定义类的任何文档都需要包括如下代码行,其中 FullyQualifiedNamespace 是代码文件中的命名空间:

    xmlns:SampleNamespace="clr-namespace:FullyQualifiedNamespace"
    
  • 编译器选项的设置不正确,或者系统不能生成基于 Microsoft .NET Framework 的应用程序。如果有 Microsoft .NET Framework,并且使用 Expression Blend 或 Visual Studio 2010 生成应用程序,这应不会成为问题。

  • 在尝试生成项目之前有文件尚未保存。例如,如果使用 Expression Blend 的“事件”面板 Cc294906.6c67bb3b-e8a2-4a63-bad5-54d5c15b04dd(zh-cn,Expression.40).png 在代码隐藏文件中生成新的事件处理程序方法(因而在 Visual Studio 中打开该代码隐藏文件),然后尝试在 Expression Blend 中生成项目而不先保存该代码隐藏文件,便会出现错误,指明项目中未包含该事件处理程序的定义。

运行时错误

如果生成了应用程序,但它在运行时(在 Expression Blend 中按 F5)的行为与预期不符,则会发生运行时错误。运行时错误是最难识别的一种错误,因为它们涉及逻辑错误。有时候,可以在 XAML 或代码中尝试不同的更改,直到理解其原理,以便更正运行时错误。不过,更快的方法是在应用程序运行时逐行单步执行代码,以便实际观察具体原因。

有关详细信息,请参阅在 Visual Studio 2010 中调试 Expression Blend 应用程序

运行时错误的某些常见原因如下:

  • XAML 元素的布置不正确,或者使用错误的面板对象来包含其他对象。

    若要了解布局,请参阅排列对象,或参阅 MSDN 上的 WPF 部分中的布局系统 Cc294906.xtlink_newWindow(zh-cn,Expression.40).pngAlignment、Margin 和 Padding 概述 Cc294906.xtlink_newWindow(zh-cn,Expression.40).png

    XAML 元素未挂钩到正确的事件处理程序。如果创建了许多事件处理程序方法,然后将一个错误的方法分配给 XAML 元素,就会出现此错误。若要查看为 Expression Blend 中打开的 WPF 项目中的某个 XAML 元素分配了哪些事件处理程序,请在“对象和时间线”面板中选择该对象,然后在“属性”面板中单击“事件”按钮。

    有关详细信息,请参阅编写将对事件做出响应的代码

  • Expression Blend 中的动画触发器设置不正确。例如,如果希望能够在加载应用程序之后停止或暂停动画情节提要,则必须在任意触发器中开始动画情节提要。(默认情况下,所有动画情节提要都在 Window.Loaded 触发器中开始,但用户可以进行更改。)

    有关详细信息,请参阅动态显示对象。有关动画触发器的示例,请参阅创建简单动画

  • 在代码文件中,变量引用了并不存在的对象。例如,在代码隐藏文件中,如果您在 this.InitializeComponent() 行之前引用 XAML 对象,则会出现 XamlParseException 错误。

  • 在代码文件中,应用程序进入了意外的代码路径。在 Visual Studio 2010 中调试应用程序时单步执行代码的方法对这种情况的帮助最大。

    有关详细信息,请参阅在 Visual Studio 2010 中调试 Expression Blend 应用程序

  • 在代码隐藏文件中,用户界面 (UI) 更新与应该在单独的线程上执行的其他编程逻辑在同一个线程上执行。例如,如果创建一个事件处理程序方法使之先更新 Label 中显示的文本,再执行其他一些计算,然后在事件处理程序方法完成之前再次更新同一 Label 中的文本,则您将只会看到最后一次更新。这是因为 UI 的呈现是在事件处理程序方法结束时执行的,而所有处理都是在同一个线程上完成的,所以应用程序在执行方法以更新 UI 期间不能将工作暂停。

    有关如何编写具有多个 UI 更新和计算的 WPF 应用程序的信息,请参阅 MSDN 上的 WPF 部分中的线程处理模型 Cc294906.xtlink_newWindow(zh-cn,Expression.40).png

  • 在代码隐藏文件内的事件处理程序方法中,UI 元素或其属性在可用之前即被引用。例如,在 Window1() 构造函数方法中,还不能访问 UI 元素。在 OnInitialized() 事件处理程序方法中,可以访问 UI 元素,但不能检查类似“ActualWidth”的属性,因为尚未布置 UI 元素。在 OnLoaded() 事件处理程序方法中,可以执行能够对 XAML 文档中存在的 UI 元素执行的任何操作。

    有关详细信息,请参阅 MSDN 上的 WPF 部分中的对象生存期事件 Cc294906.xtlink_newWindow(zh-cn,Expression.40).png

在 Visual Studio 2010 中调试

Expression Blend 是一个设计工具,用于为基于 WPF 的应用程序和 Microsoft Silverlight 应用程序创建丰富的用户界面。可以使用 Visual Studio 2010 来打开、生成和调试 Expression Blend 项目。如果在使用 Expression Blend 的“运行项目”(F5) 功能调试应用程序时遇到问题,可以使用 Visual Studio 2010 获取有关运行时错误的详细错误消息。

有关详细信息,请参阅在 Visual Studio 2010 中调试 Expression Blend 应用程序

调试性能问题

WPF 提供了一套性能评估工具,用于分析应用程序的运行时行为并决定如何提高性能。

有关详细信息,请参阅 MSDN 上的 WPF 部分中的 WPF 性能分析工具 Cc294906.xtlink_newWindow(zh-cn,Expression.40).png优化 WPF 应用程序性能 Cc294906.xtlink_newWindow(zh-cn,Expression.40).png

事件跟踪

老练的 .NET 程序员可以在 WPF 应用程序中添加代码来触发自定义的调试事件,帮助他们调试更复杂的错误。此功能称为 Windows 事件跟踪 (ETW)。WPF 事件跟踪配置工具使用 ETW 来执行事件记录。

有关详细信息,请参阅 MSDN 上的 WPF 性能分析工具 Cc294906.xtlink_newWindow(zh-cn,Expression.40).png 中的“事件跟踪”和“PresentationTraceSources”。

调试混合型应用程序

如果应用程序同时使用了 WPF 和其他技术(如 Windows 窗体编程),可能会遇到诸如意外的重叠行为、缩放行为、控件聚焦问题等问题。

有关可帮助您调试混合应用程序的信息,请参阅 MSDN 上的 WPF 部分中的混合应用程序疑难解答 Cc294906.xtlink_newWindow(zh-cn,Expression.40).png

安全性

应用程序调试时所具有的安全性权限与其他用户使用它时所具有的安全性权限相同。

有关详细信息,请参阅部署和发布 Expression Blend 应用程序

有关 WPF 应用程序安全性的详细信息,请参阅 MSDN 上的 WPF 部分中的安全性 (WPF) Cc294906.xtlink_newWindow(zh-cn,Expression.40).png

获取帮助

若要获取有关调试 Expression Blend 应用程序的更多帮助,可以在 Windows Presentation Foundation Forum Cc294906.xtlink_newWindow(zh-cn,Expression.40).png(Windows Presentation Foundation 论坛)或 Silverlight learning center Cc294906.xtlink_newWindow(zh-cn,Expression.40).png(Silverlight 学习中心)中搜索与您的问题相关的帖子或发布问题。

Microsoft Corporation 版权所有 ⓒ 2011。保留所有权利。