Expression Blend 應用程式除錯

如果 Microsoft Expression Blend 應用程式行為與預期不同,或嘗試測試應用程式時發生錯誤,表示應用程式中有錯誤。雖然瞭解錯誤原因或應用程式中發生錯誤的位置可能不容易,但瞭解可能會有的錯誤類型仍是有所幫助。

語法錯誤

當您建置應用程式時,任何語法錯誤都會顯示於 Expression Blend 之 [結果] 面板的 [錯誤] 索引標籤中,或是 Microsoft Visual Studio 2008 的 [錯誤清單] 面板中。

如果可延伸應用程式標記語言 (XAML) 或程式碼不符合語言的格式規則,就會發生語法錯誤。錯誤描述有助於您瞭解修正方法。描述也會指出發生錯誤的檔案名稱與行號。常見的一些語法錯誤原因如下:

  • 關鍵字拼錯或大小寫錯誤。

  • 文字字串周圍遺漏引號。

  • XAML 元素遺漏關閉標籤。

  • XAML 元素位於禁止的位置。在 Expression Blend 的 [設計] 檢視或在 Visual Studio 2008 中編輯文件,即可避免這些錯誤。

  • 在程式碼檔案中,函數或方法呼叫未包含必要的參數。例如,MessageBox.Show() 方法必須至少具有一個參數,例如字串 MessageBox.Show("Hello")。

  • 在程式碼檔案中,某個類型的變數被指派至不同的類型。例如,MessageBox.Show() 方法可具有字串引數,但不可具有整數引數。

  • 在 C# 中,不需要引數之方法的結尾可能沒有括弧。例如,this.InitializeComponent; 會產生語法錯誤,因為正確寫法是 this.InitializeComponent();。

如需有關 XAML 語法的詳細資訊,請參閱 MSDN 文件庫Windows Presentation Foundation 一節的控制項程式庫主題 (英文) 所列出的個別控制項概觀主題。如需程式設計語法的詳細資訊,可在 MSDN 上搜尋程式碼關鍵字。

Cc294906.7e183f1f-37d8-4dcb-980c-19a5d61ca087(zh-tw,Expression.10).gif回到頁首

編譯錯誤

當您建置應用程式時,任何編譯錯誤都會顯示於 Expression Blend 之 [結果] 面板的 [錯誤] 索引標籤中,或是 Visual Studio 2008 的 [錯誤清單] 面板中。

當 Expression Blend 或 Visual Studio 2008 的編譯系統找不到專案所需的項目時,就會發生編譯錯誤。例如,如果 WPF 專案遺漏 WPF 組件的參照,則可能會收到「'https://schemas.microsoft.com/winfx/2006/xaml/presentation' 命名空間中不存在 'Window' 名稱」之類的錯誤。如果發生此錯誤,可在 [專案] 功能表上按一下 [新增參照] 來新增對 C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5 資料夾中下列 WPF 組件的參照:

  • PresentationCore.dll

  • PresentationFramework.dll

  • WindowsBase.dll

如果您仍然得到「名稱 '<成員>' 不存在於目前的內容中。」之類的錯誤,表示可能遺漏其他的組件參照,或是可能需要將 using (C#) 或 Imports (Visual Basic .NET) 陳述式新增至遺漏命名空間的程式碼。若要瞭解需要哪些組件或命名空間,請參閱造成錯誤之成員的 MSDN 參照主題。

常見的其他一些編譯錯誤原因如下:

  • 關鍵字拼錯或大小寫錯誤。

  • 應用程式中未正確參照類別。例如,如果應用程式使用的自訂類別是在具有專用命名空間的個別 .cs 或 .vb 程式碼檔案中實作 (或者,如果是 Microsoft Silverlight 1.0 專案,則在 .js 程式碼檔案中),則應用程式中任何使用自訂類別的文件都需要包括類似下列一行的文字,其中 FullyQualifiedNamespace 是程式碼檔案中的命名空間:

    xmlns:SampleNamespace="clr-namespace:FullyQualifiedNamespace"
    
  • 編譯器選項的設定不正確,或系統無法建置 Microsoft .NET Framework 應用程式。如果已安裝 Microsoft .NET Framework 3.5,且用以建立應用程式的是 Expression Blend 或 Visual Studio 2008,就不會發生此問題。

  • 未儲存檔案就嘗試建置專案。例如,如果使用 Expression Blend 的 [事件] 面板 Cc294906.6c67bb3b-e8a2-4a63-bad5-54d5c15b04dd(zh-tw,Expression.10).png 在程式碼後置檔案中產生新的事件處理常式方法 (進而在 Visual Studio 中開啟程式碼後置檔案),接著不先儲存程式碼後置檔案就嘗試在 Expression Blend 中建置專案,就會得到錯誤,指出專案不包含事件處理常式的定義。

Cc294906.7e183f1f-37d8-4dcb-980c-19a5d61ca087(zh-tw,Expression.10).gif回到頁首

執行階段錯誤

如果應用程式建置成功但執行 (在 Expression Blend 中按 F5) 時的行為與預期不同,就表示有執行階段錯誤。執行階段錯誤最難識別,因為涉及邏輯的錯誤。有時候,您可藉由在 XAML 或程式碼中嘗試不同變化直到瞭解幕後過程,以修正執行階段錯誤。不過,在應用程式執行時逐行執行程式碼,可以更迅速地確實看到發生的情況。如需詳細資訊,請參閱本主題稍後的 在 Visual Studio 2008 中除錯。

常見的一些執行階段錯誤原因如下:

  • XAML 元素配置版面不正確,或使用錯誤的面板元素來包含其他元素。若要瞭解版面配置,請參閱本使用者指南的「版面配置系統」,或參閱 MSDN 文件庫之<WPF>一節的版面配置系統對齊、邊界與邊框間距概觀 (英文)。

  • XAML 元素未繫結至正確的事件處理常式。如果建立多個事件處理常式方法而指派了錯誤的方法給 XAML 元素,就會發生此錯誤。若要瞭解有哪些事件處理常式被指派給 Expression Blend 所開啟之 WPF 專案中的 XAML 元素,請選取 [互動] 面板之 [物件與時間軸] 下的元素,然後在 [屬性] 面板中按一下 [事件] 按鈕。如需詳細資訊,請參閱本使用者指南中的事件處理及使用者互動功能。在 Silverlight 1.0 中,如果您使用下列程式碼將事件處理常式連接到根元素,就會發生此動作:

    rootElement.addEventListener(…);
    

    除了將事件處理常式連接到文件中的子元素 (例如透過使用下列程式碼) 之外:

    this.control.content.findName("WebLink").addEventListener(…);
    

    如需詳細資訊,請參閱建立可控制 Silverlight 應用程式中腳本的按鈕

  • Expression Blend 中的動畫觸發程序設定不正確。例如,若要在載入應用程式後能夠停止或暫停動畫分鏡板,則必須在任一觸發程序中啟動這些動畫分鏡板(預設會在 Window.Loaded 觸發程序中啟動所有動畫分鏡板,但您可以變更觸發程序)。如需詳細資訊,請參閱本使用者指南中的動畫。如需動畫觸發程序的範例,請參閱建立簡單動畫,或查看簡單樣式中<試試看!>一節下的主題。

  • 程式碼檔案中有變數參照不存在的物件。例如,在 WPF 專案的程式碼後置檔案中,您不可以在 this.InitializeComponent() 這行前面參照 XAML 物件,否則會收到 XamlParseException 錯誤。

  • 程式碼檔案中有些假設會使應用程式不按照預期的程式碼路徑行進。在 Visual Studio 2008 中逐步執行程式碼以進行應用程式除錯,是最有效的解決方法。如需詳細資訊,請參閱本使用者指南中的在 Visual Studio 2008 中進行 Expression Blend 應用程式除錯

  • 在程式碼後置檔案中,執行使用者介面 (UI) 更新所用的執行緒上,還有其他應該在不同執行緒上執行的程式設計邏輯。例如,若您建立的事件處理常式方法會更新 [標籤] 中顯示的文字、執行一些其他計算,然後會在事件處理常式方法完成之前,再次更新相同 [標籤] 中的文字,則只會看到最新的更新內容。這是因為只有在事件處理常式方法結束並且在相同的執行緒上完成所有處理時,才會出現 UI 的呈現,所以應用程式無法在方法執行期間暫停下來更新 UI。如需有關撰寫含多重 UI 更新及計算之 WPF 應用程式的詳細資訊,請參閱 MSDN 文件庫之<WPF>一節的執行緒模型 (英文)。

  • 程式碼後置檔案的事件處理常式方法中,參照了還不能使用的 UI 元素或屬性。例如,在 WPF 專案的 Window1() 建構函式方法中,您還不能存取 UI 元素。在 OnInitialized() 事件處理常式方法中,您可以存取 UI 元素,但是無法檢查 ActualWidth 等屬性,因為 UI 元素尚未配置版面。在 OnLoaded() 事件處理常式方法中,您可以對 XAML 文件中現有的 UI 元素執行任何需要執行的動作。如需詳細資訊,請參閱 MSDN 文件庫之<WPF>一節的物件存留時間事件 (英文)。如需事件及發生時機的清單,請參閱本使用者指南的 WPF 事件快速參照

Cc294906.7e183f1f-37d8-4dcb-980c-19a5d61ca087(zh-tw,Expression.10).gif回到頁首

-

在 Visual Studio 2008 中進行除錯

Expression Blend 是針對 WPF 型應用程式及 Silverlight 1.0 應用程式建立豐富使用者介面的設計工具。您可以使用 Visual Studio 2008 來開啟、建立和除錯 Expression Blend 專案。如果無法使用 Expression Blend 的 [測試] (F5) 功能對應用程式進行除錯,則可以使用 Visual Studio 2008 獲得執行階段錯誤的詳細錯誤訊息。如需詳細資訊,請參閱本使用者指南中的在 Visual Studio 2008 中進行 Expression Blend 應用程式除錯

Cc294906.7e183f1f-37d8-4dcb-980c-19a5d61ca087(zh-tw,Expression.10).gif回到頁首

效能問題除錯

WPF 提供一套效能評估工具,可讓您分析應用程式的執行階段行為,協助判斷改善效能的方法。如需詳細資訊,請參閱 MSDN 文件庫之<WPF>一節的 WPF 效能設定檔工具最佳化 WPF 應用程式效能 (英文)。

Cc294906.7e183f1f-37d8-4dcb-980c-19a5d61ca087(zh-tw,Expression.10).gif回到頁首

事件追蹤

經驗豐富的 .NET 程式設計師可以在 WPF 應用程式中新增程式碼來觸發自訂除錯事件,協助其對更複雜的錯誤進行除錯。此功能稱為 Windows 事件追蹤 (ETW)。WPF 事件追蹤設定檔工具會使用 ETW 記錄事件。如需詳細資訊,請參閱 MSDN 文件庫WPF 效能設定檔工具 (英文) 中的「事件追蹤」及 PresentationTraceSources。

Cc294906.7e183f1f-37d8-4dcb-980c-19a5d61ca087(zh-tw,Expression.10).gif回到頁首

混合式應用程式除錯

如果您的應用程式同時使用了 WPF 和像 Windows 表單程式設計之類的其他技術,您可能會遇到未預期的重疊行為、縮放行為、控制項焦點等問題。如需有關可協助您對混合式應用程式進行除錯的詳細資訊,請參閱 MSDN 文件庫之<WPF>一節的混合式應用程式的疑難排解 (英文)。

Cc294906.7e183f1f-37d8-4dcb-980c-19a5d61ca087(zh-tw,Expression.10).gif回到頁首

安全性

對應用程式進行除錯時,應用程式具有和其他人使用它時相同的安全性權限。如需詳細資訊,請參閱本使用者指南中的部署及發佈 Expression Blend 應用程式。如需有關 WPF 應用程式安全性的詳細資訊,請參閱 MSDN 文件庫之<WPF>一節的安全性 (英文)。

Cc294906.7e183f1f-37d8-4dcb-980c-19a5d61ca087(zh-tw,Expression.10).gif回到頁首

取得協助

如需對 Expression Blend 應用程式進行除錯的詳細說明,可以搜尋 Windows Presentation Foundation 論壇 (英文),找出與您問題相關的公佈或張貼問題。

Cc294906.7e183f1f-37d8-4dcb-980c-19a5d61ca087(zh-tw,Expression.10).gif回到頁首