本文記錄一個 WinUI 3 的坑點,有時候開發者只是想拉下來程式碼跑一下,自己本機沒有預先安裝好 Windows App Runtime 導致缺失環境,進而在執行的時候提示 Unable to load DLL 找不到 Microsoft.ui.xaml.dll 啟動失敗
詳細的錯誤資訊如下
System.DllNotFoundException:“Unable to load DLL 'Microsoft.ui.xaml.dll' or one of its dependencies: 找不到指定的模組。 (0x8007007E)”
大部分情況下的錯誤都在如以下程式碼的 XamlCheckProcessRequirements 裡面
[global::System.Runtime.InteropServices.DllImport("Microsoft.ui.xaml.dll")]
[global::System.Runtime.InteropServices.DefaultDllImportSearchPaths(global::System.Runtime.InteropServices.DllImportSearchPath.SafeDirectories)]
private static extern void XamlCheckProcessRequirements();
對應的英文錯誤資訊如下
Unable to load DLL 'Microsoft.ui.xaml.dll' or one of its dependencies: The specified module could not be found. (0x8007007E)
此問題是因為沒有安裝好 Windows App Runtime 環境,導致 WinUI 3 缺失環境而執行失敗,或者是因為沒有將 WinUI 3 使用自包含方式釋出而找不到環境
對應以上原因就有兩個修復方法:
方法一是給安裝上環境,安裝方法如下
進入到 https://learn.microsoft.com/en-us/windows/apps/windows-app-sdk/downloads 下載頁
下載安裝 Windows App Runtime 安裝包 WindowsAppRuntimeInstall.exe 檔案修復此問題
方法二是構建為自包含方式,在 csproj 裡面新增如下程式碼即可
<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>
詳細請參考 WinUI 3 修復非打包應用執行提示缺少 Windows App Runtime 環境
此問題已經報告給官方,詳細請看 https://github.com/microsoft/WindowsAppSDK/issues/2443