Uno Platform 项目模板怎么选
新建 Uno Platform 项目时,
unoapp模板是唯一推荐起点,它默认包含 UWP、WinUI 3、iOS、Android、macOS 和 WebAssembly 六个目标平台。别用
unoapp-net6或
unoapp-winui等旧变体——它们已过时,缺少对 .NET 7+ 的完整支持,且 WebAssembly 构建会失败。
创建后检查
.csproj中是否含
<targetframework>net8.0</targetframework>(或 net9.0),并确认
<unoplatformversion></unoplatformversion>指向 5.1+。低于 5.0 的版本无法在 macOS Ventura+ 或 Android 14 上正常运行 UI 渲染。
共享 XAML 页面为什么在 WebAssembly 上空白
这是最常遇到的卡点:XAML 加载成功但内容不显示。根本原因通常是资源字典未被正确合并,或
App.xaml中遗漏了
Application.Resources的初始化逻辑。 确保
App.xaml内有
<application.resources><resourcedictionary><resourcedictionary.mergeddictionaries></resourcedictionary.mergeddictionaries></resourcedictionary></application.resources>结构,且所有平台共用的
Styles.xaml被显式引入 WebAssembly 不支持动态加载
ResourceDictionary的
Source属性,必须用
x:Key+
MergedDictionaries静态合并 检查浏览器控制台是否有
Failed to load resource: net::ERR_ABORTED—— 这说明某个
.xaml文件没被
WasmHead.csproj的
<content include="..." copytooutputdirectory="PreserveNewest"></content>正确打包
如何让 C# 代码真正跨平台运行
Uno Platform 不是“写一次到处编译”,而是“写一次,按需适配”。C# 逻辑层能跨平台的前提是避开平台专属 API。
禁用System.IO.File直接读写路径,改用
IFileService抽象接口 + 各平台实现(Uno 自带
StorageFile封装) 避免硬编码
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),改用
Windows.Storage.ApplicationData.Current.LocalFolder(Uno 已桥接到所有平台) 网络请求必须用
HttpClient,不要用
WebClient(WebAssembly 不支持);且需手动设置
BaseAddress,否则 iOS/Android 可能因 ATS 或 cleartext 限制静默失败
调试 Android/iOS 时 Log 输出看不到
Uno 默认把
Debug.WriteLine和
Console.WriteLine重定向到平台原生日志系统,但需要手动开启输出通道。
在
App.xaml.cs的
OnLaunched开头加入:
#if __ANDROID__
Android.Util.Log.Info("App", "Android log enabled");
#elif __IOS__
Foundation.NSLog("iOS log enabled");
#endif
然后用
adb logcat或 Xcode Console 查看对应 tag;WebAssembly 则必须用
Uno.UI.RuntimeTests.Logging.Logger替代原生
Debug类,否则日志完全丢失。
真机调试时,iOS 的
NSAppTransportSecurity和 Android 的
android:usesCleartextTraffic="true"容易被忽略,导致网络请求无报错却收不到响应——这不是 Uno 的问题,但新手常在这里耗半天。
