一、前言

Avalonia开发(一)环境搭建 文章中介绍了Avalonia的介绍、开发环境的搭建、项目创建,以及项目FirstAvaloniaApp项目结构的介绍。本篇文章将介绍各平台的项目介绍。

二、Desktop项目结构

FirstAvaloniaApp.Desktop项目中默认生成的只有两个文件:Program.csapp.manifest(程序文件清单)

Program.cs 主要是Main函数,指定程序运行的一些条件

看一下BuildAvaloniaApp()函数,使用的是lambda表达式,里面用到了类为AppBuilder,后面的为几个静态方法

  • Configure<T>AppBuilder中的静态方法,用于生成一个AppBuilder的实例。

  • UsePlatformDetect:静态扩展方法,用于加载平台需要的一些基础内容,如渲染等。位于Avalonia.Desktop.dll类库中

  • WithInterFont:静态扩展方法,用于加载字体的相关处理,位于Avalonia.Fonts.Inter.dll库中

  • LogToTrace:静态扩展方法,用于一些日志信息的输出,位于Avalonia.Controls.dll库中。

项目完成编译后,对于Windows平台的话,直接生成对应的exe程序。

三、Android项目结构

FirstAvaloniaApp.Android 项目内包括Android需要的 Properties\AndroidManifest.xmlResourcesIcon.pngMainActivity.cs几个文件/文件夹。在这里我们主要讲的是MainActivity.cs

MainActivity继承自AvaloniaMainActivity<TApp>类,并实现虚方法CustomizeAppBuilder。此虚方法主要是执行加载字体,在父类中存在执行了用于加载Android系统相关资源的一些东西,如果想继续研究的话,可以参考Avalonia的源代码,这里不再详细赘述。

MainActivity类上面添加了Activity属性,指定主题、图标、启动页等相关内容。

项目完成编译后,如果不使用模拟器或者真机运行的话不会生成apk文件,只是简单的生成了对应dll文件。

连接真机,并打开调试功能,可以将apk程序安装到手机上运行。

三、iOS项目结构

FirstAvaloniaApp.iOS 项目内包含的基础文件(夹)比较多,如:Asset CatalogsResourcesAppDelegata.csEntitlements.plistInfo.plistMain.cs。因没有开发国iOS的应用,某些文件(夹)具体作用不得而知。

Main.cs:入口函数,传入了AppDelegata.cs的类型

AppDelegata.cs继承自AvaloniaAppDelegate<TApp>类,并实现虚方法CustomizeAppBuilder,执行一些平台的相关内容。

Entitlements.plist是权限相关的内容

Info.plist是对程序的一些内容的设置。

是否能运行,未验证。

四、Browser项目结构

目前还处于早期阶段,尚未准备好用于生产

FirstAvaloniaApp.Browser 项目内包含的PropertiesAppBundleProgram.csruntimeconfig.template.json

Program.cs:定义一个主函数。

看一下BuildAvaloniaApp()函数,使用的是lambda表达式,里面用到了类为AppBuilder,后面的为几个静态方法

  • Configure<T>AppBuilder中的静态方法,用于生成一个AppBuilder的实例。

可以在浏览器中运行。

五、发布

5.1 Desktop发布

发布选择文件夹,执行到最后,会生成一个Properties\PublishProfiles\FolderProfile.pubxml文件,

经过本人的测试,对于WindowsLinuxoxs三个平台的桌面程序均可以正常发布(使用的单文件发布),Windows平台程序可以正常运行,对于其他两个系统的程序,因没有机器,未进行验证。

Windows发布后的文件列表

Linux发布后的文件列表

oxs发布后的文件列表

5.2 Android发布

选择了文件夹选项,不能正常发布生成apk程序。

5.3 iOS发布

选择了文件夹选项,在Windows平台上不能正常发布程序。

5.4 Browser发布

选择了文件夹选项,在Windows平台上可以发布,但是在publish文件夹中没有文件。

结果分析

五、总结

各个平台的程序都使用了AppBuilder这个类,主要用于构建初始化特定平台的初始化服务工作。

目前,Avalonia的某些内容还不成熟,对于特定平台的需求,选择还是要谨慎一些。

Avalonia系列文章

1、 Avalonia开发(一)环境搭建

Avalonia开发(二)项目结构解析的更多相关文章

  1. Dubbo 入门之二 ——- 项目结构解析

    本文主要说明点 概述 背景 需求 架构 Dubbo源代码项目结构 概述 分享 Dubbo 的项目结构 ,通过本文可以大致了解到Dubbo整个项目的结构 背景 将一个项目进行拆分, 进行分布式架构. 需 ...

  2. 上门洗车APP --- Androidclient开发 之 项目结构介绍

    上门洗车APP --- Androidclient开发 之 项目结构介绍 前言 尽管公司项目较紧,但还是抽空给大家继续更新. o_O"~ 欢迎大家的关注,非常高兴和大家共同学习.前面给大家分 ...

  3. ionic项目结构解析

    ionic项目结构解析 原始结构 创建一个IonicDemo项目 'ionic start IonicDemo sidemenu' 这种结构多模块开发比较麻烦,因为view跟controller分开路 ...

  4. vue(16)vue-cli创建项目以及项目结构解析

    vue-cli创建项目 上一篇我们安装了vue-cli,接下来我们就使用该脚手架进行创建项目 1.进入一个目录,创建项目 创建项目命令如下: vue create <Project Name&g ...

  5. 二十四、【开源】EFW框架Winform前端开发之项目结构说明和调试方法

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan ...

  6. vs项目结构解析

    当我们用VS开发一个项目的时候,首先应该清楚用VS这个IDE生成的一些文件和文件夹是什么意思,起什么作用,什么场合下使用. 因为我使用的是VS2015,就以这个为例来进行一些说明: 首先要做的是更改你 ...

  7. TypeScript编写Vue项目结构解析

    使用TypeScript编写Vue项目也已经有了一段时间,笔者在刚刚使用TypeScript时候也是很茫然,不知道从何下手,感觉使用TypeScript写项目感觉很累赘并不像JavaScript那么灵 ...

  8. Vuejs+elementUI框架开发的项目结构及文件关系

    项目结构|----- build #webpack编译相关文件目录,一般不用动 |----- config #配置目录|         |------ dev.env.js #开发环境变量| |-- ...

  9. AngularJS+Ionic开发-2.项目结构介绍

    使用上篇博客<开发环境搭建>中的命令创建完成IonicHelloWorld项目,在VSCode中的左侧,显示该项目的结构信息,如下图所示: 1 .sourcesmaps文件夹 调试状态的j ...

  10. ionic 2.x 3.x项目结构解析

    myApp │ config.xml //项目配置文件,包名.名称.minSdkVersion等都在此处配置 │ ionic.config.json │ package.json //项目依赖文件列表 ...

随机推荐

  1. 如何获取 C#程序 内核态线程栈

    一:背景 1. 讲故事 在这么多的案例分析中,往往会发现一些案例是卡死在线程的内核态栈上,但拿过来的dump都是用户态模式下,所以无法看到内核态栈,这就比较麻烦,需要让朋友通过其他方式生成一个蓝屏的d ...

  2. 使用Git进行代码版本控制和协作:代码共享、协作和版本管理

    目录 1. 引言 2. 技术原理及概念 3. 实现步骤与流程 使用 Git 进行代码版本控制和协作:代码共享.协作和版本管理 Git 是一个开源的分布式版本控制系统,由 Linux 内核开发组创建.G ...

  3. Linux 一些常用命令

    Linux命令的分类 1.帮助命令(help) 2.常用系统工作命令 3.常用状态检测命令 4.工作目录切换命令 linux命令在线中文手册 Linux常用命令 echo命令 作用:在终端输出字符串或 ...

  4. JVM中的编译器

    JVM中集成了两种编译器,Client Compiler和Server Compiler,它们的作用也不同.Client Compiler注重启动速度和局部的优化,Server Compiler则更加 ...

  5. MySQL数据库的集群方案

    读写分离结构(主从) 读多写少,也就是对数据库读取数据的压力比较大. 其中一个是主库,负责写入数据,成为写库:其他都是从库,负责读取数据,成为读库. 对我们的要求: 读库和写库的数据一致: 写数据必须 ...

  6. Linux0.11内核笔记(-)

    基础知识 C语言.汇编知识.嵌入式汇编.x86处理器和编程的相关知识和.UNIX操作系统设计 Linus在最初开发Linux操作系统时参考了MINIX操作系统:<操作系统:设计与实现>一种 ...

  7. Blazor提取出Razor类库,没有css的class的智能提示

    最开始从stackoverflow上找到了答案,有两种办法,但都不太理想 后来自己找了新的办法,其实很简单,把要用的css复制到Razor类库的wwwroot文件夹中,默认是不会复制到引用Razor类 ...

  8. [爬虫]3.4.1 Scrapy框架的基本使用

    Scrapy是一款强大的Python网络爬虫框架,它可以帮助你快速.简洁地编写爬虫程序,处理数据抓取.处理和存储等复杂问题. 1. 安装Scrapy 在开始使用Scrapy之前,你需要先将其安装在你的 ...

  9. 在 Arch 配置 i3-wm 终端模拟器 xterm

    在 Arch 配置 i3-wm 终端模拟器 xterm 关于怎么在 Arch 安装 i3-wm 可以查看上一篇文章 https://www.cnblogs.com/shadow-/p/17572589 ...

  10. 一个批处理,解决你重装python第三方模块的烦恼~(1.0版本)

    @echo offpip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simplepython -m pip insta ...