C# Uno Platform入门方法 C#如何使用Uno Platform构建跨所有平台的应用

来源:这里教程网 时间:2026-02-21 17:40:21 作者:

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 的问题,但新手常在这里耗半天。

相关推荐