@
blinue 可以实现单文件。
不使用 WinUI 的情况下,用代码创建界面元素,就不需要 resources.pri 。
要 resources.pri 的情况下,可以 hook 加载 resources.pri 的 DLL(印象中是 twinui.appcore.dll),让其加载内存中的数据。不过 hook 属于非正常手段,升级系统后可能出现问题,风险自担。方法参见
https://github.com/ysc3839/SingleExeXamlIsland要 WinUI 2 的情况下,如果是 Win11 ,可以用 AddPackageDependency 引入系统中已安装的 WinUI 2 AppX 包,甚至可以引入系统内置的 WinUI 2 包 ("Microsoft.UI.Xaml.CBS_8wekyb3d8bbwe"),不过当然也是风险自担。
要 WinUI 2 的情况下,如果是 Win10 ,我之前调查过,似乎是只能把 WinUI 2 的 DLL 和 resources.pri 放到 exe 目录下,除非是打包成 AppX 并添加 WinUI 2 AppX 包的依赖,否则只能自己附带 WinUI 2 。不过可以考虑 Win10 下不用 WinUI 2 ,Win11 下才用。
上述“用代码创建界面元素”有个衍生方案,那就是用 React Native for Windows ,因为 React Native 就是纯代码创建元素的。之前测试没记错的话 React Native for Windows 的 DLL 只有 2MB 。原版 React Native for Windows 是独立的 DLL ,同时需要从文件加载数据,不过因为是开源的,可以改成静态链接以及从内存加载数据,就可以单文件了。