OpenKylin上运行Avalonia应用
VS安装Avalonia模版
执行以下命令,安装Avalonia模版(.NET6及之前版本使用--install):
dotnet new install Avalonia.Templates
执行后,会安装如下模版:
模板名 短名称 语言 标记
----------------------------------- ------------------------- ------- -----------------------------------------
Avalonia .NET App avalonia.app [C#],F# Desktop/Xaml/Avalonia/Windows/Linux/macOS
Avalonia .NET MVVM App avalonia.mvvm [C#],F# Desktop/Xaml/Avalonia/Windows/Linux/macOS
Avalonia Cross Platform Application avalonia.xplat [C#],F# Desktop/Xaml/Avalonia/Web/Mobile
Avalonia Resource Dictionary avalonia.resource Desktop/Xaml/Avalonia/Windows/Linux/macOS
Avalonia Styles avalonia.styles Desktop/Xaml/Avalonia/Windows/Linux/macOS
Avalonia TemplatedControl avalonia.templatedcontrol [C#],F# Desktop/Xaml/Avalonia/Windows/Linux/macOS
Avalonia UserControl avalonia.usercontrol [C#],F# Desktop/Xaml/Avalonia/Windows/Linux/macOS
Avalonia Window avalonia.window [C#],F# Desktop/Xaml/Avalonia/Windows/Linux/macOS
创建Avalonia应用并发布
使用如下命令创建一个Avalonia MVVM应用:
dotnet new avalonia.mvvm
将程序发布到linux-x64平台,publish参数参考链接:
dotnet publish -r linux-x64 --self-contained
OpenKylin安装.NET运行时
安装aspnetcore运行时即可,aspnetcore运行时包含了.NET运行时,安装包我使用的ubuntu 18.04版本的。安装教程参考微软官方文档。
wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt update
sudo apt install aspnetcore-runtime-6.0
在OpenKylin上运行应用
首先把发布的publish文件夹压缩后下载到OpenKylin上,我使用的林大佬这篇文章中提供的办法。使用dotnet serve开启一个文件服务器:
dotnet tool install --global dotnet-serve
dotnet serve -p 1007 -a 0.0.0.0
解压后进入文件所在目录,修改下执行文件的权限,执行文件为何项目名称同名的不带后缀的文件:
chmod 777 ./执行文件
然后运行该文件:
./执行文件
然后就报错了...Default font family name can't be null or empty,这个问题讨论很久了,参考这个Issue。
默认字体问题处理
从上述Issue中,我看到了几个解决方案,首先,注册自定义字体管理器在Avalonia11中不可用了,因为IFontManagerImpl接口改成Internal了。我尝试的可行的解决方案有如下几个:
方法1:修改环境变量LANG的值:export LANG=en_US.UTF-8
;
方法2:设置系统语言为英语;
方法3:启动应用时使用命令:LC_ALL=C ./执行文件
;
方法4:Program.cs的BuildAvaloniaApp()方法中指定Linux系统的默认字体名;
以上几个办法均可行,我采用的第四个方法,OpenKylin的默认字体可以到设置中查看:
public static AppBuilder BuildAvaloniaApp()
{
FontManagerOptions options = new();
if (OperatingSystem.IsLinux())
{
options.DefaultFamilyName = "Noto Sans CJK SC";
}
else if (OperatingSystem.IsMacOS())
{
options.DefaultFamilyName = "<macOS Default Font Family Name Here>";
}
// No need to set default for Windows
return AppBuilder.Configure<App>()
.UsePlatformDetect()
.LogToTrace()
.UseReactiveUI()
.With(options);
}
修改程序后,再次发布并在OpenKylin上执行,就成功了。我试了下Avalonia的开源项目Core2D,也是可以的:
转载请注明出处,欢迎交流。