随着 .NET 5的到来,微软在 .NET跨平台路上又开始了一个更高的起点。

回顾.NET Core近几年的成果,可谓是让.NET重生了一次.

ASP .NET Core跨平台解决了Windows服务器昂贵的费用和不能长时间待机的问题,让Asp程序能够跑在Linux甚至Mac上。

从博客园里.NET分类可以看到,每天都可以涌现大批ASP .NET Core的技术文章,越来越多的开发者或者公司开始尝试这个船新的跨平台框架。

然鹅,ASP的跨平台是能够使用html作为UI,C#作为后台代码完成的,html本来就是原生支持跨平台的语言。如果要到达在客户端方面的跨平台,仍需要走很长一段路。

早些年的时候。微软使用钞能力收购了移动客户端跨平台开发的大佬Mono,并组建了新的Xamarin,一次开发就可以生成Android,iOS,UWP平台的App,但也仅仅停留在移动客户端跨平台。

同样在民间一些大佬的努力下,也创造出了很多PC跨平台的轮子

比如:Electron.Net,GTK#,Qt#等等,这些框架都是使用Html或者Mono平台的内容达到UI跨平台的,而今天我则要推荐一款新的跨平台方案AvaloniaUI。

  • 一个Linux的机器

这里推荐使用windows 10下的linux子系统,可以快速的在windows上操作linux子系统的文件目录,用来快速上传编译的程序到linux。详细操作可以看这篇文章启用Windows10的Linux子系统并安装图形界面。

当然使用实体机,或者服务器都可以。总之最终目的就是有一个可以连接带图形化界面的Linux系统。

  • 安装.Net Core Runtime

微软官方给出了在Ubutnu安装.Net Core的方法,这里我以Ubuntu为例,其他发行版本使用对应的包管理命令

1、注册 Microsoft 密钥和源

wget https://packages.microsoft.com/config/ubuntu/19.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb

2、安装.Net Core 3.1 Runtmime

sudo apt-get update
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-runtime-3.1

更多详情可参考Microsoft Docs :Ubuntu 19.04 包管理器 - 安装 .NET Core。

https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-package-manager-ubuntu-1904

  • 安装VS拓展

如果VS拓展下载太慢,可以使用下面的网盘链接下载。

链接: https://pan.baidu.com/s/1sYnpC37IcH2VKQKjmqBALw 提取码: wyqn

  • WPF/UWP的经验

1、Xaml的语法

3、最好了解MVVM模式或者ReactiveUI

创建一个AvaloniaUI的项目

了解WPF/UWP通知模式的童鞋可以使用MVVM

和WPF/UWP很相似的结构,但是不同的是Program.cs被重写了

class Program 
{
// Initialization code. Don't use any Avalonia, third-party APIs or any
// SynchronizationContext-reliant code before AppMain is called: things aren't initialized
// yet and stuff might break.
public static void Main(string[] args) => BuildAvaloniaApp()
.StartWithClassicDesktopLifetime(args);
// Avalonia configuration, don't remove; also used by visual designer.
public static AppBuilder BuildAvaloniaApp()=> AppBuilder.Configure()
.UsePlatformDetect()
.LogToDebug()
.UseReactiveUI();
}

MainWindow.Xaml

可以说和WPF/Xaml大致一模一样了,但是体验不太好地就是在Xaml标签页的智能提示和显示内容体验,以及右侧的实时渲染窗口是一帧一帧地刷新整个页面。

ViewModel

Avalonia UI使用地是ReactiveUI来做的界面绑定和响应。和以往使用MVVMLight不同,绑定命令不用RelayCommand,而是直接在xaml绑定一个后台的方法名。

编码完成在windows上测试通过之后,就可以把程序打包发到其他平台上测试了。这里以Linux为例:

Alt+B-->选择发布

根据目标平台选择配置保存。

点击发布,稍等片刻。

跨平台运行

以linux为例:

1、将Publish的文件夹上传到Linux上

2、找到对应的程序名(没有任何后缀),更改权限为”允许此文件作为程序运行“

3、双击运行,即可看到和Windows上一模一样的效果。

由于AvaloniaUI不是微软官方出品,而是民间团队开发,且目前仍处于预览。我罗列一些自己遇到问题时的解决方案

1、尝试Nuget把AvaloniaUI的包更新到最新

2、保证开发的.netcore配置比运行环境的.net core版本低

3、*字体渲染问题

这个问题是我遇到的最严重的问题,直接导致程序都不能渲染出来。如果有遇到这个问题的同学,可以首先在Program.cs下的Main函数里面加两行代码:

Console.WriteLine(SKTypeface.Default.FamilyName);
Console.WriteLine(SKTypeface.FromFamilyName("Sans").FamilyName);

然后在linux里使用控制台来运行程序,定位到程序目录,更改程序权限为可执行程序

chmod -x 程序名
./程序名

如果出现权限不足的可以使用如下

chmod 777 程序名

如果运行程序后,控制台打印了NullRefrence的错误,那就是缺少默认字体。估计是AvaloniaUI的团队设置了程序的默认字体”Sans“。

只需要替换软件默认字体就可以了,这里我使用微软雅黑

<Applicationx:Class="AvaloniaTest.App"xmlns="https://github.com/avaloniaui"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:AvaloniaTest">
<Application.DataTemplates>
<local:ViewLocator />
Application.DataTemplates>
<Application.Resources>
<FontFamily x:Key="yh">微软雅黑FontFamily>
Application.Resources>
<Application.Styles>
<StyleInclude Source="avares://Avalonia.Themes.Default/DefaultTheme.xaml" />
<StyleInclude Source="avares://Avalonia.Themes.Default/Accents/BaseLight.xaml" />
<Style Selector="Window">
<Setter Property="FontFamily" Value="{StaticResource yh}" />
Style>
Application.Styles>
Application>

并且需要在linux安装微软雅黑的字体

sudo apt-get install ttf-mscorefonts-installer

博客园之前也有一位大佬体验AvaloniaUI时候遇到字体的问题,可是他的树莓派是可以渲染出窗体只是没有文字,但是我测试了好几个发行版本都是窗体都不渲染。大家可以参考一下他的文章树莓派 Raspberry Pi 4,.net core 3.0 ,Avalonia UI 开发

我尝试使用Face++的 API接口,测试写了一个有网络请求的抠图程序

Windows:

Linux:

贴出一些参考网站给大家

  • 官网: http://avaloniaui.net/

  • GitHub: https://github.com/AvaloniaUI/Avalonia

  • 树莓派使用AvaloniaUI: https://www.cnblogs.com/drzhong/p/11678701.html

  • Mac使用AvaloniaUI: https://www.cnblogs.com/seamas/p/11245348.html

点击标题可跳转

你所不知道的C#中的细节

.NET Core使用NPOI导出复杂美观的Excel ASP.NET Core AutoWrapper 自定义响应输出

看完本文有收获?请转发分享给更多人

关注「DotNet」加星标,提升.Net技能

好文章,我在看❤️

React性 使用, 和最流行的 XAML UI框架创建的真正 跨平台 应用程序示例。 该应用程序实现了MVVM体系结构, 通过扩展。 它旨在演示如何在使用INotifyPropertyChanged接口时避免编写样板 代码 以及如何创建可移植且可维护的视图模型。 媒体文章: : 通过或ASP .NET Core 使用的技术和工具 现代MVVM框架 用于INotifyPropertyChanged注入的 提高测试的可读性 用于存根和 用于使用C#构建 跨平台 的.NET项目 用于Linux和MacOS 明亮而现代的AvaloniaUI主题 于Android,iOS和Tizen的 XGraphics旨在解决以下问题: 将基于 XAML 的图形带到Xamarin.Forms 如今,Xamarin.Forms中的图形通常是通过C# 代码 在SkiaSharp中实现的。 XGraphics使您可以直接从 XAML 进行操作,就像在UWP / WPF 中一样。 这更加简洁,当您绘制的UI看起来恰到好处时,可以使用“热重装”功能立即查看更新。 它还允许用于 XAML 动画,以获得复杂的视觉效果。 是图形形状元素(椭圆,路径,渐变,变换等)的 XAML 标准。 今天,UWP, WPF 和Silverlight都使用非常相似但略有不同的图形元素。 尽管如此,它们仍是一种标准,如今,许多设计工具和图标库都支持 XAML 矢量图形,其支持方式与SVG几乎相同。 XGraphics采用事实上的标准UWP / WPF / Sliverl 多平台数据驱动的2D图编辑器。 Core2D是一个多平台应用程序,用于制作数据驱动的2D图。 该应用程序具有内置的wyswig矢量图形编辑器,您可以在其中将数据绑定到形状,跨多个文档共享数据,使用图层编辑文档。 它支持将文档导出为许多流行的文件格式,例如pdf,位图和dxf。 您可以使用C#脚本 自动 执行绘图和处理。 Windows 7 SP1 or higher Linux macOS Core2D.Desktop: A multi-platform data driven 2D diagram editor. Usage: Core2D.Desktop [options] Options: -t, --theme <DefaultDark> Set applic 在本文中,我介绍了一个简单的Avalonia XAML 教程,提供易于理解的示例。它涵盖了有关使用 XAML 表示类和属性、 XAML 命名空间、简单标记扩展、 XAML 资源以及将 XAML 用于非可视项目的重要主题。 这几天使用 WPF 写软件,想引用外部字体,于是下载了字体文件: 然后在App. xaml 中添加了如下 代码 :<FontFamily x:Key="Digital-7 Mono"> pack://application:,,,/IVFTempMonitor;component/Fonts/Digital7Mono-B1g5.ttf#Digital-7 Mono </FontFa... wpf 数据库直接读一表绑定到datagrid,时间格式不同,datagrid会 自动 补全至时分秒 在xmal的 代码 里加上: <DataGrid x:Name="data" 。。。AutoGeneratingColumn="OnAutoGeneratingColumn"> 在 后台 上加上一个方法: private void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 1.输入for或foreach,按两下Tab键, 自动 补全括号里的 代码 2.输入prop,按两下Tab键,出现public int MyProperty { get; set; } 3.输入propfull,按两下Tab键,出现 private int myVar; public int MyProperty get { return myVar; } set { myVa... 如果VS2008 WPF Designer的Intellisense在安装了最新的Windows SDK/MSDN之后不工作了 最近这些日子,很多程序员反映,在安装了最新的Windows SDK for Windows Server 2008 and .NET Framework 3.5之后,VS2008 WPF Designer的Intellisense就不再工作了。他们不得不重新安装或者修复V http://www.broculos.net/2014/04/ wpf -autocompletebox-autocomplete-text.html 但是光参考上面的文章做还是有些小问题的,下面是我用WAF框架(MVVM)的一个小例子: ShellWindow. xaml &lt;Window x:Clas...