翼度科技»论坛 编程开发 .net 查看内容

OpenKylin上运行Avalonia应用

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
VS安装Avalonia模版

执行以下命令,安装Avalonia模版(.NET6及之前版本使用--install):
  1. dotnet new install Avalonia.Templates
复制代码
执行后,会安装如下模版:
  1. 模板名                               短名称                     语言     标记
  2. -----------------------------------  -------------------------  -------  -----------------------------------------
  3. Avalonia .NET App                    avalonia.app               [C#],F#  Desktop/Xaml/Avalonia/Windows/Linux/macOS
  4. Avalonia .NET MVVM App               avalonia.mvvm              [C#],F#  Desktop/Xaml/Avalonia/Windows/Linux/macOS
  5. Avalonia Cross Platform Application  avalonia.xplat             [C#],F#  Desktop/Xaml/Avalonia/Web/Mobile
  6. Avalonia Resource Dictionary         avalonia.resource                   Desktop/Xaml/Avalonia/Windows/Linux/macOS
  7. Avalonia Styles                      avalonia.styles                     Desktop/Xaml/Avalonia/Windows/Linux/macOS
  8. Avalonia TemplatedControl            avalonia.templatedcontrol  [C#],F#  Desktop/Xaml/Avalonia/Windows/Linux/macOS
  9. Avalonia UserControl                 avalonia.usercontrol       [C#],F#  Desktop/Xaml/Avalonia/Windows/Linux/macOS
  10. Avalonia Window                      avalonia.window            [C#],F#  Desktop/Xaml/Avalonia/Windows/Linux/macOS
复制代码
创建Avalonia应用并发布

使用如下命令创建一个Avalonia MVVM应用:
  1. dotnet new avalonia.mvvm
复制代码
将程序发布到linux-x64平台,publish参数参考链接
  1. dotnet publish -r linux-x64 --self-contained
复制代码
OpenKylin安装.NET运行时

安装aspnetcore运行时即可,aspnetcore运行时包含了.NET运行时,安装包我使用的ubuntu 18.04版本的。安装教程参考微软官方文档
  1. wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
  2. sudo dpkg -i packages-microsoft-prod.deb
  3. rm packages-microsoft-prod.deb
  4. sudo apt update
  5. sudo apt install aspnetcore-runtime-6.0
复制代码
在OpenKylin上运行应用

首先把发布的publish文件夹压缩后下载到OpenKylin上,我使用的林大佬这篇文章中提供的办法。使用dotnet serve开启一个文件服务器:
  1. dotnet tool install --global dotnet-serve
  2. dotnet serve -p 1007 -a 0.0.0.0
复制代码
解压后进入文件所在目录,修改下执行文件的权限,执行文件为何项目名称同名的不带后缀的文件:
  1. chmod 777 ./执行文件
复制代码
然后运行该文件:
  1. ./执行文件
复制代码
然后就报错了...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的默认字体可以到设置中查看:
  1. public static AppBuilder BuildAvaloniaApp()
  2. {
  3.     FontManagerOptions options = new();
  4.     if (OperatingSystem.IsLinux())
  5.     {
  6.         options.DefaultFamilyName = "Noto Sans CJK SC";
  7.     }
  8.     else if (OperatingSystem.IsMacOS())
  9.     {
  10.         options.DefaultFamilyName = "<macOS Default Font Family Name Here>";
  11.     }
  12.     // No need to set default for Windows
  13.     return AppBuilder.Configure<App>()
  14.                 .UsePlatformDetect()
  15.                 .LogToTrace()
  16.                 .UseReactiveUI()
  17.                 .With(options);
  18. }
复制代码
修改程序后,再次发布并在OpenKylin上执行,就成功了。我试了下Avalonia的开源项目Core2D,也是可以的:


来源:https://www.cnblogs.com/louzixl/archive/2023/08/15/17631717.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具