田老师 發表於 2020-7-22 16:50:00

.net 跨平台桌面程序 avalonia:从项目创建到打包部署linux-64系统deepin 或 ubuntu。

<h2><span>介绍:</span></h2>
<p><span style="font-size: 15px">目前微软还没有跨平台桌面程序的开发框架。github上有一个团队开始自行研发跨平台桌面框架,其中一款叫avalonia。avalonia 采用&nbsp;Xaml+C#,类似于wpf,可运行于.netframework,.netcore,是相对比较成熟的.net跨平台桌面应用技术。下面介绍如何创建 avalonia项目;如何在windows平台下,将程序打包成可在deepin 或 ubuntu 执行的.deb安装包,以及如何在deepin上安装(<span style="background-color: rgba(255, 255, 0, 1); color: rgba(255, 0, 0, 1)">由于ubuntu 和 deepin都是基于debian的linux系统,本文以deepin 来演示</span>)。</span></p>
<h2>第一步:项目创建</h2>
<h3><span><strong>1.项目创建之</strong><strong>前,先在vs2019中安装avalonia</strong><strong> 扩展。</strong></span></h3>
<p>&nbsp; &nbsp;<img src="https://img2020.cnblogs.com/blog/501935/202007/501935-20200720180940705-1582137241.png"></p>
<h3><strong>2.创建 avalonia mvvm项目</strong></h3>
<p><span style="font-size: 15px">&nbsp;<span style="color: rgba(255, 0, 0, 1); background-color: rgba(255, 255, 0, 1)">注意:由于要安装在linux系统,创建项目的时候,项目名称建议用小写。不用小写时,打包安装包在linux上安装,如果已经安装了相同版本,则不会提示已安装相同版本,也不能通过双击安装包卸载。</span></span><img src="https://img2020.cnblogs.com/blog/501935/202007/501935-20200721164838247-1060137459.png">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <img src="https://img2020.cnblogs.com/blog/501935/202007/501935-20200722135718287-1569886553.png"></p>
<p style="margin-left: 90px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</p>
<p><span style="font-size: 15px">项目结构如下:</span></p>
<p>&nbsp; &nbsp;<img src="https://img2020.cnblogs.com/blog/501935/202007/501935-20200722135511758-394620523.png"></p>
<p>&nbsp;</p>
<h3><strong>3.F5运行项目,如果运行成功,则项目创建成功。</strong></h3>
<h2>第二步:打包设置</h2>
<p><span style="font-size: 15px">在windows上将项目打包成可在 deepin 或ubuntu上安装的.deb安装包文件,需要对项目做一些配置,设置应用程序生成快捷方式,应用程序图标。</span></p>
<h3><strong>1.项目添加.desktop文件和.png图片(或者是其他格式的图片)。</strong></h3>
<p><span style="font-size: 15px">.desktop文件用于生成桌面快捷方式,可新建.txt文件(utf-8格式),按下图编辑内容,改后缀为 .desktop,粘贴到项目中;</span><span style="font-size: 15px">png图片用于生成应用程序图标(也可用icon图片)</span></p>
<p><span style="font-size: 16px">&nbsp;</span>&nbsp;<img src="https://img2020.cnblogs.com/blog/501935/202007/501935-20200722143635065-495262084.png"></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1); font-size: 15px; background-color: rgba(255, 255, 255, 1)">
Name=testapp
Type=Application
Exec=/usr/share/testapp/testapp
Icon=/usr/share/icons/testapp.png</span></pre>
</div>
<p><span style="font-size: 15px">&nbsp;linux系统的.desktop文件可参考 https://blog.csdn.net/yiferhuang/article/details/86634589 扫盲。</span></p>
<h3><strong>2.文件配置:双击解项目名称,打开项目文件。添加.desktop和.png</strong></h3>
<p>&nbsp;&nbsp;<img src="https://img2020.cnblogs.com/blog/501935/202007/501935-20200722145453937-1049237444.png"></p>
<div class="cnblogs_code">
<pre><span style="font-size: 15px">&lt;ItemGroup&gt;
    &lt;Content Include=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">testapp.png</span><span style="color: rgba(128, 0, 0, 1)">"</span> CopyToPublishDirectory=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">PreserveNewest</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;
      &lt;LinuxPath&gt;/usr/share/icons/testapp.png&lt;/LinuxPath&gt;
    &lt;/Content&gt;
    &lt;Content Include=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">testapp.desktop</span><span style="color: rgba(128, 0, 0, 1)">"</span> CopyToPublishDirectory=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">PreserveNewest</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;
      &lt;LinuxPath&gt;/usr/share/applications/testapp.desktop&lt;/LinuxPath&gt;
    &lt;/Content&gt;
&lt;/ItemGroup&gt;</span></pre>
</div>
<h2>第三步:打包发布</h2>
<p><span style="font-size: 15px">在windows10下,打包成可在ubuntu上安装的deb安装包。参考&nbsp;https://github.com/qmfrederik/dotnet-packaging</span></p>
<h3><strong>1.安装 .net打包deb工具:打开cmd 执行以下命令</strong></h3>
<pre><span style="font-size: 15px">dotnet tool install --global dotnet-deb</span></pre>
<p><img src="https://img2020.cnblogs.com/blog/501935/202007/501935-20200722152451573-1702010337.png"></p>
<h3><strong>2.执行打包命令:cmd进入项目文件夹</strong></h3>
<p>&nbsp;&nbsp;<img src="https://img2020.cnblogs.com/blog/501935/202007/501935-20200722151202445-664564642.png"></p>
<h3><strong>3.按顺序逐条执行以下命令,打包发布:</strong></h3>
<p><span style="font-size: 15px">第一条指令是在项目中安装打包工具,会在项目引用一个包。</span></p>
<p><span style="font-size: 15px">第二条指令会将项目的目标运行时还原为linux-x64</span></p>
<p><span style="font-size: 15px">第三条执行执行打包发布,会输出.deb文件存放的位置。</span></p>
<p><span style="font-size: 15px">注意:逐条执行命令时,执行到第三条有时候会报错,说需要还原 目标运行时为 linux-x64,这时候,重新执行如下三条命令即可,或者将第一条和第二条执行顺序换一下</span></p>
<div class="cnblogs_code">
<pre>dotnet restore -r linux-<span style="color: rgba(0, 0, 0, 1)">x64
dotnet deb install
dotnet msbuild testapp.csproj </span>/t:CreateDeb /p:TargetFramework=netcoreapp3.<span style="color: rgba(128, 0, 128, 1)">1</span> /p:RuntimeIdentifier=linux-x64 /p:Configuration=Release</pre>
</div>
<p>&nbsp; &nbsp;<img src="https://img2020.cnblogs.com/blog/501935/202007/501935-20200722152155601-1661270523.png"></p>
<h3><strong>4.执行发布命令后,会在输出路径上生成.deb文件,将其复制到linux 系统deepin(或者ubuntu) 上(<span style="background-color: rgba(255, 255, 0, 1); color: rgba(255, 0, 0, 1)">注意:打包时,是独立部署,也就是不需要在目标机器上安装.netcore 运行时</span>)。</strong></h3>
<p>&nbsp; &nbsp;<img src="https://img2020.cnblogs.com/blog/501935/202007/501935-20200722154153134-1920512393.png"></p>
<h2>第四步:运行安装包,在deepin上安装应用程序。</h2>
<h3><strong>将复制到deepin系统上的.deb文件,双击,即可安装应用程序。安装后,应用程序会出现在列表中。双击即可打开程序。</strong></h3>
<p><img src="https://img2020.cnblogs.com/blog/501935/202007/501935-20200722160856452-311429261.png"></p>
<p>&nbsp;&nbsp;<img src="https://img2020.cnblogs.com/blog/501935/202007/501935-20200722160959266-678813409.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: 16px">avalonia 官网:http://avaloniaui.net/</span></p>
<p><span style="font-size: 16px">打包参考网址:https://github.com/qmfrederik/dotnet-packaging</span></p>
<p><span style="font-size: 16px">avalonia网上即时交流,可在上面即时提问:https://gitter.im/AvaloniaUI/Avalonia</span></p>
<p><span style="font-size: 16px">推荐的avalonia在github上的网址,可提issue:https://github.com/AvaloniaUI/Avalonia/issues</span></p>
<p><span style="font-size: 16px">可参考的avalonia网址,里面有功能齐全的demo:https://github.com/AvaloniaUI/Avalonia</span></p>
<p><span style="font-size: 16px">avalonia社区网址:https://github.com/AvaloniaCommunity</span></p>
<p><span style="font-size: 16px">说明:目前国内关于avalonia的资料比较少,遇到问题,可到bing国际版去搜索答案;或者去上面的网站提issue,发即时信息。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</p>
<p>&nbsp;    </p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</p>
<p>&nbsp; &nbsp; &nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp; &nbsp; &nbsp;&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p style="margin-left: 30px">&nbsp;&nbsp;</p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/Fengyinyong/p/13346642.html
頁: [1]
查看完整版本: .net 跨平台桌面程序 avalonia:从项目创建到打包部署linux-64系统deepin 或 ubuntu。