dotnet WinUI 3 修復非打包應用執行提示 Microsoft.ui.xaml.dll 找不到

lindexi發表於2024-08-27

本文記錄一個 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

相關文章