天天看點

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

前言:随着跨平台越來越流行,.net core支援跨平台至今也有好幾年的光景了。但是目前基于.net的跨平台,大多數還是在使用B/S架構的跨平台上;至于C/S架構,大部分人可能會選擇QT進行開發,或者很早之前還有一款Mono可以支援.NET開發者進行開發跨平台應用。

以下内容,我使用Avalonia UI架構來開發支援可以跨平台的應用程式(仿WPF程式)。

前提準備:

開發環境:Win10+VS2022企業版

運作環境:Win10 & Ubuntu20.04 LTS

.NET環境: .NET 6

以下,正文:

0、在開始之前,需要添加一個拓展,名稱叫 Avalonia for Visual Studio xxxx。

安裝完成以後,需要關閉所有目前運作的VS,然後會提示安裝。選擇安裝即可。

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

1、添加拓展成功以後,在建立新項目裡面,建立項目時候,會多出兩個項目選項。一個是無雙向綁定的項目,另一個是基于MVVM雙向綁定的項目。此處,我選擇基于MVVM雙向綁定的項目。

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

2、配置項目時候,最好對項目名稱進行小寫。大寫可能Linux系統在識别的時候會有某些意想不到的bug(人品好的可能沒有,人品不好的可以自行測試)。此處我的項目名稱命名為linuxwpf

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

3、建立的項目,初始項目檔案以及代碼,如下圖所示。

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

4、直接運作,運作以後的畫面,如下圖所示。

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

5、咱們改造一下,寫一個按鈕,然後點選彈出提示框,意思一下。此處需要引入nuget包:MessageBox.Avalonia

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

6、引入nuget包以後,對主窗體頁面進行改寫,提供了個button,并且在對應的VM裡面,添加一個Running方法,用于當做點選觸發的綁定方法。同時方法裡面提供了一個彈出消息提示框的功能。

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

7、運作,驗證一下,結果如圖所示。

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

8、按鈕綁定的方法,還可以傳輸參數,如下圖所示。跟往常傳統的WPF雙向綁定基本一緻。

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

以上代碼:VM部分:

public class MainWindowViewModel : ViewModelBase
    {
     //   public string Greeting => "Welcome to Avalonia!";

        public void Running(string msg)
        {
            var message = MessageBox.Avalonia.MessageBoxManager.GetMessageBoxStandardWindow("标題",msg);
            message.Show();
        }

    }      

axaml部分:

<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="using:linuxwpf.ViewModels"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
        x:Class="linuxwpf.Views.MainWindow"
        Icon="/Assets/avalonia-logo.ico"
        Title="linuxwpf">

    <Design.DataContext>
        <vm:MainWindowViewModel/>
    </Design.DataContext>

    <!--<TextBlock Text="{Binding Greeting}" HorizontalAlignment="Center" VerticalAlignment="Center"/>-->
    <Button Command="{Binding Running}"  CommandParameter="Hello World" Content="點我" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Window>      

9、運作結果,如下圖所示。

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

10、接下來,咱們把它部署到Linux系統上去實驗一下。需要先建立個 xxx.desktop檔案,用于指定可執行檔案路徑、快捷圖示路徑有關。其中,png圖檔随便搞一個就行。同時,需要對新增的這倆檔案,屬性設定為“始終複制”。

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

以上配置代碼:

[Desktop Entry]
Name=linuxwpf
Type=Application
Exec=/usr/share/ linuxwpf/linuxwpf
Icon=/usr/share/icons/linuxwpf.png      

11、在項目檔案裡面,新增上面倆檔案的有關配置,如圖所示。

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

新增的配置代碼:

<ItemGroup>
    <Content Include="linuxwpf.png" CopyToPublishDirectory="PreserveNewest">
        <LinuxPath>/usr/share/icons/linuxwpf.png</LinuxPath>
    </Content>
    <Content Include="linuxwpf.desktop" CopyToPublishDirectory="PreserveNewest">
        <LinuxPath>/usr/share/applications/linuxwpf.desktop</LinuxPath>
    </Content>
</ItemGroup>      

12、然後,在程式包管理器下,或者shell視窗,或者dos視窗,輸入  dotnet tool install --global dotnet-deb

該指令的作用是,用于安裝一個可以對.net項目進行打包成deb檔案的工具。deb格式檔案是linux系統下的一種安裝包格式之一。

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

13、指定到在項目目錄下,準備進行項目打包。

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

14、先輸入 dotnet deb install 指令,用于下載下傳 deb 工具。

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

15、然後輸入  dotnet restore -r linux-x64 指令,用于重置指定的程式運作目标環境,例如 linux-x64  

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

16、最後輸入 以下如圖所示的指令,進行釋出程式。該指令會在根目錄下生成release檔案夾。其中,指定操作方式是建立Deb檔案,目标環境是.net6.0,以及運作時是 linux-x64環境。

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

17、在根目錄下,可以看到生成了一個deb檔案,隻需要把該檔案拷貝到指定的linux系統上即可(前提是linux系統是帶有圖形界面的那種)

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

18、在遠端ubuntu系統上,建立一個測試用的檔案夾叫wpf,用于存放上面的deb檔案

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

19、使用指令,遠端直接拷貝到指定的路徑。遠端拷貝指令說明:

指令:scp -v 遠端使用者 1@遠端位址 1:/檔案路徑 1/檔案 1 遠端使用者 2@遠端位址 2:/檔案路徑 2

解釋:從遠端伺服器 1 上面的檔案 1 拷貝到遠端伺服器2 的檔案路徑 2 檔案夾下

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

20、拷貝完成,可以開始安裝了。

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

21、使用 dpkg -i xxx.deb指令,即可開始安裝。如果沒有dpkg指令可以用,需要先通過指令 (需要sudo權限)  apt-get install -f 進行安裝一些基礎的元件先。

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

22、此處安裝完成以後,沒有顯示桌面圖示,說明有點小問題,可能原因是xxx.desktop桌面圖示檔案裡面配置的字元編碼不是 UTF-8或者某個路徑或配置檔案配置不标準,大佬們可以自行去研究。

此處沒有桌面圖示,可以進入到安裝路徑下,在 /usr/shard/程式名稱檔案夾/ 下,可以找到對應的程式檔案,直接運作即可。例如此處我的程式名稱是linuxwpf,則直接運作,即打開程式視窗。通過點選按鈕,彈出符合預期的提示框,說明該跨平台方案是成功的。

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

以上就是該部落格的所有内容,如果有幫助,歡迎點贊、留言或轉發。轉發請注明出處:https://www.cnblogs.com/weskynet/

如果有想法進行技術交流,也可以掃下面的二維碼添加我個人微信,我可以拉入專屬部落格群進行答疑,或不定時進行其他技術分享。或者點選我的部落格欄上的QQ群連結,加入QQ群,也是可以的。

再次感謝大家觀看!祝大家寫代碼寫的開心~~

歡迎加入QQ群:

群号:1079830632

【.NET6+Avalonia】開發支援跨平台的仿WPF應用程式以及基于ubuntu系統的示範

繼續閱讀