Avalonia开发(二)项目结构解析
一、前言
在Avalonia开发(一)环境搭建 文章中介绍了Avalonia的介绍、开发环境的搭建、项目创建,以及项目FirstAvaloniaApp项目结构的介绍。本篇文章将介绍各平台的项目介绍。
二、Desktop项目结构
FirstAvaloniaApp.Desktop项目中默认生成的只有两个文件:Program.cs和app.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.xml、Resources、Icon.png、MainActivity.cs几个文件/文件夹。在这里我们主要讲的是MainActivity.cs。

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

MainActivity类上面添加了Activity属性,指定主题、图标、启动页等相关内容。
项目完成编译后,如果不使用模拟器或者真机运行的话不会生成apk文件,只是简单的生成了对应dll文件。
连接真机,并打开调试功能,可以将apk程序安装到手机上运行。
三、iOS项目结构
FirstAvaloniaApp.iOS 项目内包含的基础文件(夹)比较多,如:Asset Catalogs、Resources、AppDelegata.cs、Entitlements.plist、Info.plist、Main.cs。因没有开发国iOS的应用,某些文件(夹)具体作用不得而知。

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

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

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

是否能运行,未验证。
四、Browser项目结构
目前还处于早期阶段,尚未准备好用于生产
FirstAvaloniaApp.Browser 项目内包含的Properties、AppBundle、Program.cs、runtimeconfig.template.json

Program.cs:定义一个主函数。
看一下BuildAvaloniaApp()函数,使用的是lambda表达式,里面用到了类为AppBuilder,后面的为几个静态方法
Configure<T>:AppBuilder中的静态方法,用于生成一个AppBuilder的实例。

可以在浏览器中运行。
五、发布

5.1 Desktop发布
发布选择文件夹,执行到最后,会生成一个Properties\PublishProfiles\FolderProfile.pubxml文件,
经过本人的测试,对于Windows、Linux、oxs三个平台的桌面程序均可以正常发布(使用的单文件发布),Windows平台程序可以正常运行,对于其他两个系统的程序,因没有机器,未进行验证。

Windows发布后的文件列表

Linux发布后的文件列表

oxs发布后的文件列表

5.2 Android发布
选择了文件夹选项,不能正常发布生成apk程序。
5.3 iOS发布
选择了文件夹选项,在Windows平台上不能正常发布程序。
5.4 Browser发布
选择了文件夹选项,在Windows平台上可以发布,但是在publish文件夹中没有文件。
结果分析

五、总结
各个平台的程序都使用了AppBuilder这个类,主要用于构建初始化特定平台的初始化服务工作。
目前,Avalonia的某些内容还不成熟,对于特定平台的需求,选择还是要谨慎一些。
Avalonia系列文章
Avalonia开发(二)项目结构解析的更多相关文章
- Dubbo 入门之二 ——- 项目结构解析
本文主要说明点 概述 背景 需求 架构 Dubbo源代码项目结构 概述 分享 Dubbo 的项目结构 ,通过本文可以大致了解到Dubbo整个项目的结构 背景 将一个项目进行拆分, 进行分布式架构. 需 ...
- 上门洗车APP --- Androidclient开发 之 项目结构介绍
上门洗车APP --- Androidclient开发 之 项目结构介绍 前言 尽管公司项目较紧,但还是抽空给大家继续更新. o_O"~ 欢迎大家的关注,非常高兴和大家共同学习.前面给大家分 ...
- ionic项目结构解析
ionic项目结构解析 原始结构 创建一个IonicDemo项目 'ionic start IonicDemo sidemenu' 这种结构多模块开发比较麻烦,因为view跟controller分开路 ...
- vue(16)vue-cli创建项目以及项目结构解析
vue-cli创建项目 上一篇我们安装了vue-cli,接下来我们就使用该脚手架进行创建项目 1.进入一个目录,创建项目 创建项目命令如下: vue create <Project Name&g ...
- 二十四、【开源】EFW框架Winform前端开发之项目结构说明和调试方法
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan ...
- vs项目结构解析
当我们用VS开发一个项目的时候,首先应该清楚用VS这个IDE生成的一些文件和文件夹是什么意思,起什么作用,什么场合下使用. 因为我使用的是VS2015,就以这个为例来进行一些说明: 首先要做的是更改你 ...
- TypeScript编写Vue项目结构解析
使用TypeScript编写Vue项目也已经有了一段时间,笔者在刚刚使用TypeScript时候也是很茫然,不知道从何下手,感觉使用TypeScript写项目感觉很累赘并不像JavaScript那么灵 ...
- Vuejs+elementUI框架开发的项目结构及文件关系
项目结构|----- build #webpack编译相关文件目录,一般不用动 |----- config #配置目录| |------ dev.env.js #开发环境变量| |-- ...
- AngularJS+Ionic开发-2.项目结构介绍
使用上篇博客<开发环境搭建>中的命令创建完成IonicHelloWorld项目,在VSCode中的左侧,显示该项目的结构信息,如下图所示: 1 .sourcesmaps文件夹 调试状态的j ...
- ionic 2.x 3.x项目结构解析
myApp │ config.xml //项目配置文件,包名.名称.minSdkVersion等都在此处配置 │ ionic.config.json │ package.json //项目依赖文件列表 ...
随机推荐
- ImageMagick 图像处理学习笔记
Use ImageMagick to create, edit, compose, or convert bitmap images. It can read and write images in ...
- Python socket记录
目录 网络编程 1.基本概念 Python中的网络编程 网络编程 1.基本概念 1.什么是客户端/服务器架构? 服务器就是一系列硬件或软件,为一个或多个客户端(服务的用户)提供所需的"服务& ...
- string类型可以作为lock的锁对象吗
lock 关键字介绍 lock 关键字是用于在多线程编程中实现同步和互斥访问的关键字.它的作用是确保共享资源在任意时刻只能被一个线程访问,从而避免出现竞态条件(race condition)和数据不一 ...
- 3. @RequestMapping注解
1. @RequestMapping 注解的功能 @RequestMapping 注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系. SpringMVC 接收到指定的请求 , ...
- 大语言模型(LLM)在文本分类、语言生成和文本摘要中的应用
目录 大语言模型(LLM)在文本分类.语言生成和文本摘要中的应用 引言 文本分类.语言生成和文本摘要是人工智能领域中的重要任务,涉及到自然语言处理.机器学习和深度学习等领域.本文将介绍大语言模型(LL ...
- Python3.7源码编译
1.下载Python3.7.0源码 git clone https://github.com/python/cpython.gitgit checkout v3.7.0 wget https://ww ...
- JWT解析详解
JWT解析详解:> https://www.fke6.com/html/77107.html
- Task Execution and Scheduling In SpringBoot
开天辟地 Task Execution and Scheduling In the absence of an Executor bean in the context, Spring Boot au ...
- 即构SDK5月迭代:新增声道选择、网络探测、智能消噪等功能,打造更优的视听体验
即构SDK5月份的迭代更新如期而至,本月互动视频(LiveRoom).实时语音(AudioRoom)两大SDK以及录制插件(PlayRecord)均有新功能上线.新增的声道选择.变调控制.智能消噪.枚 ...
- 数据分析之jupyter notebook工具
一.jupyter notebook介绍 1.简介 Jupyter Notebook是基于网页的用于交互计算的应用程序.其可被应用于全过程计算:开发.文档编写.运行代码和展示结果.--Jupyter ...