請務必在其目標平臺上測試通用 Windows 平臺應用程式的發行組建,因為偵錯和發行組態完全不同。 根據預設,偵錯組態會使用 .NET Core 執行階段來編譯您的應用程式,但發行組態會使用 .NET Native 將應用程式編譯為原生碼。
這很重要
如需處理測試應用程式發行版本時可能會遇到的 MissingMetadataException、MissingInteropDataException和 MissingRuntimeArtifactException 例外狀況的相關資訊,請參閱「步驟 4:手動解決遺漏的中繼資料」使用者入門 主題,以及 反射和 .NET Native 和 執行時間指示詞(rd.xml)配置檔參考。
偵錯和發行組建
當偵錯組建針對 .NET Core 執行階段執行時,它尚未編譯為原生程式碼。 這可讓運行時間通常提供的所有服務可供您的應用程式使用。
另一方面,發行組建會針對其目標平臺編譯成原生程式代碼、移除外部運行時間和連結庫的大部分相依性,並大幅優化程式代碼以達到最大效能。
當您調試使用 .NET Native 編譯的發佈版本時:
您可以使用 .NET Native 偵錯引擎,這與一般 .NET 偵錯工具不同。
可執行檔的大小會盡可能減少。 .NET Native 減少可執行檔大小的其中一種方式是大幅修剪運行時間例外狀況訊息,這是 運行時間例外狀況訊息 一節中更詳細討論的主題。
您的程式代碼已大幅優化。 這表示盡可能使用內嵌。 (內嵌會將程式代碼從外部例程移至呼叫例程。).NET Native 提供了一個特製化運行時環境,並實行積極的內嵌,這會影響偵錯時所顯示的呼叫堆疊。 如需詳細資訊,請參閱 運行時間呼叫堆疊 一節。
備註
您可以藉由勾選或取消勾選 使用 .NET 原生工具鏈編譯 方塊,來控制偵錯和發行組建是否以 .NET 原生工具鏈編譯。 不過,Microsoft 市集一律會使用 .NET Native 工具鏈編譯應用程式的正式版本。
運行時間例外狀況訊息
為了將應用程式可執行檔大小降到最低,.NET Native 不包含例外狀況訊息的完整文字。 因此,在發行組建中擲回的運行時間例外狀況可能不會顯示例外狀況訊息的全文。 反之,這段文字可能會包含一個子字串,以及一個可點擊以獲取更多資訊的連結。 例如,例外狀況資訊可能會顯示為:
Exception thrown: '$16_System.AggregateException' in Unknown Module.
Additional information: AggregateException_ctor_DefaultMessage
If there is a handler for this exception, the program may be safely continued.
如果您需要完整的例外狀況訊息,請改為執行偵錯組建。 例如,發行組建中的先前例外狀況資訊可能會出現在偵錯組建中,如下所示:
Exception thrown: 'System.AggregateException' in NativeApp.exe.
Additional information: Value does not fall within the expected range.
執行時呼叫堆疊
由於內嵌和其他優化,由 .NET 原生工具鏈編譯的應用程式所顯示的呼叫堆棧,可能無法協助您清楚識別運行時間例外狀況的路徑。
若要取得完整堆疊,請改為執行偵錯組建。