最近在玩微軟的Desktop Bridge項目,遇到瞭如下幾個坑: ...
最近在玩微軟的Desktop Bridge項目,遇到瞭如下幾個坑:
1、文檔中給的是js項目魔改的方法,其實C#項目也可以魔改加入UWP部分的,區別在於:
- 不用在項目文件里寫<AppxGeneratePrisForPortableLibrariesEnabled>false</AppxGeneratePrisForPortableLibrariesEnabled>
- 只支持Release,Debug的話會報錯
2、win32項目引用UWP的類庫之後,註意區分有些方法是UWP的,需要CoreWindow的支持。比如使用C# wpf做desktop bridge的時候,調用了 UWP里的獲取解析度的方法,程式就會報錯,但是因為都是用C#,命名空間也非常相似,還是要多加註意。
3、複製到uwp項目里的win32部分,一定要全部是 內容 複製 ,不然肯定爆炸,而且win32項目不要全部放到根目錄,最好建一個文件夾放所有的win32資源。
4、一個神坑,部分win32項目,尤其是wpf項目引用的dll,放到uwp項目中之後,編譯會報錯,而且我沒找到區分這些出問題的dll的方法。我的解決方法是一個一個的刪,然後測,最後找到了幾個依賴,然後用了其他方法實現。
5、神坑中的神坑。nuget包,Microsoft.NETCore.UniversalWindowsPlatform,版本5.4.X對應.net native1.7,6.0.X對應.net native2.0。
之前我一直用的5.4.X,生成的商店包中的upload,解壓開是可以直接安裝調試的,而6.0.X生成的商店包解壓安裝之後,會卡第一屏然後閃退。
外掛調試器提示KERNELBASE.dll出錯,事件查看器是
錯誤應用程式名稱: TestSapmple.exe,版本: 1.0.0.0,時間戳: 0x5aaa0663
錯誤模塊名稱: KERNELBASE.dll,版本: 10.0.17115.1,時間戳: 0xe1aad729
異常代碼: 0xe0434352
錯誤偏移量: 0x0000000000017e98
錯誤進程 ID: 0x48d8
錯誤應用程式啟動時間: 0x01d3bc2054d14484
錯誤應用程式路徑: C:\Program Files\WindowsApps\XXX\TestSapmple.exe
錯誤模塊路徑: C:\WINDOWS\System32\KERNELBASE.dll
報告 ID: b98bd41a-5bf5-4ed8-8753-b5812a261580
錯誤程式包全名: XXX
錯誤程式包相對應用程式 ID: App
應用程式: TestSapmple.exe
Framework 版本: v4.0.30319
說明: 由於未經處理的異常,進程終止。
異常信息: 異常代碼為 e06d7363,異常地址為 00007FFA9E357E98
堆棧:
我把VS重裝幾次,甚至都想重裝系統的時候,突然問了問別的大佬,發現大家都是這種狀況,才知道這是正常的。而微軟的文檔只說讓測試生成的Test文件夾下的appx包,並沒有提到appload文件怎麼怎麼樣。所以我把這個坑在這裡記錄一下,希望下一個遇到這個坑的人能看到。