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 //项目依赖文件列表 ...
随机推荐
- JS和Document
对象1.new var obj = new Object(); 2.函数声明对象 function Human () {}: 3.var obj = {}; 大括号 就是对象var obj = {}; ...
- 实用的windows快捷键
Alt+F4 关闭窗口 win+D 显示桌面 win+Tab 切换窗口 Alt+Tab 应用之间的切换 win+E 打开我的电脑 Ctrl+Shift+Esc 打开任务管理器 Home 回到行首 En ...
- C#使用HtmlAgilityPack解析Html 爬取图片和视频
HtmlAgilityPack简介 HtmlAgilityPack是.net下的一个HTML解析类库.支持用XPath来解析HTML. 问题来了,有人就会问为什么要使用能XPath呢? 小编答:因为对 ...
- 【Rust-book】第五章 使用结构体来组织相关联的数据
第五章 使用结构体来组织相关联的数据 结构,或者结构体,是一种自定义数据类型,它允许我们命名多个相关的值并将它们组成一个有机的结合体. 可以把结构体视作对象中的数据属性 1 对比元组和结构体之间的异同 ...
- Thinkphp6 连接达梦数据库
Thinkphp6 连接达梦数据库 这里使用 IDEA phpEnv PHP7.3 Thinkphp6 桌面操作系统:Windows11 虚拟机:VMware 服务器操作系统:银河麒麟 在虚拟机操作与 ...
- 关于 Task 简单梳理
〇.前言 Task 是微软在 .Net 4.0 时代推出来的,也是微软极力推荐的一种多线程的处理方式. 在 Task 之前有一个高效多线程操作累 ThreadPool,虽然线程池相对于 Thread, ...
- 仪酷LabVIEW AI视觉工具包及开放神经网络交互工具包常见问题解答
前言 哈喽,各位朋友,好久不见~ 之前给大家分享了基于LabVIEW开发的AI视觉工具包及开放神经网络交互工具包,不少朋友私信说在安装和使用过程中会遇到一些问题,今天我们就集中回复一下大家问到最多的问 ...
- Nextcloud登录界面输入用户名和密码后报内部故障
查询~/nextcloud/data/nextcloud.log,找到日志报出如下错误 "Something is wrong with your openssl setup: error: ...
- KVM VM set net moel virtio and mulltiqueues
check $ qemu-kvm -net nic,model=help qemu: Supported NIC models: ne2k_pci,i82551,i82557b,i82559er,rt ...
- js将数字金额转换成中文金额格式
在开发中我们经常会遇到处理数字的问题,下面介绍一种处理数字金额转换为中文金额的方式: 我们通常使用三种书面数字系统:全球使用的阿拉伯数字系统和两种本地数字系统(繁体.简体).常规时我们使用阿拉伯数字( ...