MAUI 入门教程系列(3.多目标平台)

前言

如果您是第一次创建MAUI项目, 并且在之前也并没有接触过Xamarin.Forms应用, 或许你并不知道MAUI的强大优势, 在原来的Xamarin.Forms当中, 我们基于不同平台的项目他们是单独维护的。
如下所示:
348458674f5c2068419e5bfc2e308f1e.png

因为如此, 你需要维护不同平台的项目。包括每个项目当中包含的资源、图像、属性定义, Nuget包引用, 都需要保持一致。

在MAUI项目当中, 你不会再存在类似的问题, .NET MAUI 相比Xamarin.Forms 最大的区别就在于, MAUI是单个项目支持多个平台。MAUI 应用的项目包含 一个 Platform 文件夹,每个子文件夹都表示 .NET MAUI 可以面向的平台:
5f44930e939661cf2d863d3fc1fb36f8.png
每个文件夹代表了每个平台特定的代码, 在默认的情况下 编译阶段仅仅会编译当前选择的平台文件夹代码。

当你选择编译Windows平台的时候,Android、IOS等文件夹会忽略编译阶段,仅编译Windows平台相关代码, 同理其他平台也是一样。

这个时候, 我们可能就存在一个问题, 既然一个项目包含了这么多平台的代码, 那么它应该怎么区分哪些代码属于哪个平台?

这也正是MAUI项目默认通过文件夹来区分平台定义的方式, 那是不是还有别的方式来区分不同平台的代码?确实有的, 我们还可以通过文件名定义的方式来区分不同平台。

基于文件名的多目标

为了能够让VisualStudio 区分当前编译的平台中, 哪些代码应该被编译, 哪些代码应该被忽略, 所以我们通过文件的结尾命名来区分。在这里, 首先我们需要在项目中添加以下XML代码

<ItemGroup Condition="$(TargetFramework.StartsWith('net6.0-android')) != true"><Compile Remove="**\**\*.Android.cs" /><None Include="**\**\*.Android.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" /></ItemGroup><ItemGroup Condition="$(TargetFramework.StartsWith('net6.0-ios')) != true AND $(TargetFramework.StartsWith('net6.0-maccatalyst')) != true"><Compile Remove="**\**\*.iOS.cs" /><None Include="**\**\*.iOS.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" /></ItemGroup><ItemGroup Condition="$(TargetFramework.Contains('-windows')) != true "><Compile Remove="**\*.Windows.cs" /><None Include="**\*.Windows.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" /></ItemGroup>

选择当前的项目, 右键编辑项目文件, 添加如上所示的代码即可。

该XML的主要作用是将生成系统配置为在特定条件下删除基于平台的文件名模式:

  • 不要编译文件名以 .Android 结尾的 C# 代码。cs,如果不为Android生成。

  • 不要编译文件名以 .iOS 结尾的 C# 代码。cs,如果未为 iOS 或 MacCatalyst 生成。

  • 不要编译文件名以 .Windows 结尾的 C# 代码。cs,如果不为Windows生成。

配置完成后, 我们就可以不必在Platform文件夹中去单独定义了, 我们随便编写一个Services文件夹, 添加基于不同平台的模拟代码。
20b0895ccbfe20de9585eeff0b470c0b.png

在实现的代码当中, 我们模拟在方法中创建基于不同平台的进度条控件。

public interface ILocalService{void GetValue(string key);}//Androidpartial class LocalService : ILocalService{public void GetValue(string key){new Android.Widget.ProgressBar(null);}}//IOSpartial class LocalService : ILocalService{public void GetValue(string key){new UIKit.UIProgressView();}}//Windowspartial class LocalService : ILocalService{public void GetValue(string key){new ProgressBar();}}

同时, 基于文件夹的多目标可以与基于文件名的多目标组合在一起。 

总结

这一节, 主要是介绍了MAUI当中的单项目支持多目标平台, 以及与传统的Xamarin.Forms的差异, 在下一节中, 则会介绍MAUI当中的依赖注入, 以及针对Xamarin.Forms的差异进行详细对比。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286162.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于质量的联想:消费示范效应

IT业界有新闻说&#xff0c;根据可靠性数据研究专家Rescue.com发布的今年一季度可靠性报告&#xff0c;“五大电脑公司中&#xff0c;联想-IBM的分数高居首位&#xff0c;第二名是华硕&#xff0c;之前的可靠性冠军苹果跌落第三&#xff0c;东芝、惠普-康柏则排在第五”。大部分…

六、注册页功能制作《仿淘票票系统前后端完全制作(除支付外)》

一、注册块内容制作 首先打开在线编辑器进入我们的项目&#xff1a;https://editor.ivx.cn/ 上一节已经知道了如何制作登录块内容&#xff0c;但是咱们先做还没有注册&#xff0c;所以就测试不了登录块功能&#xff0c;现在咱们同样的&#xff0c;在注册块中添加一个变量和一…

【MATLAB统计分析与应用100例】案例002:matlab使用xlsread函数读取excel中的数据

文章目录 1. 读取文件excel表中单元格A2:H4中的数据2. 读取excel第1个工作表中单元格A2:C3中的数据,将数据分别加1后返回3. 读取excel第1个工作表中单元格A2:H2中的数据,将读取到的数据分别加1,返回数值矩阵num,文本矩阵txt,元胞数组raw,变换后数值矩阵X1. 读取文件excel…

美图秀秀首页界面按钮设计(二)

本文实现美图秀秀首页中的按钮&#xff0c;它包含3张图片和一个文本。通过开发按钮&#xff0c;我们可以学到iOS的自定义控件&#xff0c;绘制图片和文本的知识。【声明&#xff1a;本博客只能用作学习用途&#xff0c;不得用于商业用途&#xff0c;图片资源均来自官方&#xf…

C语言试题四十一之请编写一个函数,用来删除字符串中的所有空格。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 请编写一个…

第三方免费加固横向对比

前言 基于java开发的android应用由于其语言的特性&#xff0c;所以很容易被反编译&#xff0c;虽然android提供了proguard&#xff0c;但是也只是增加了源码阅读的难度&#xff0c;其中业务逻辑依旧可以分析得出。有些人通过各种破解手段将apk文件破解、反编译&#xff0c;然后…

(02).NET MAUI实战 布局

1.概要既然要做实战开发会建项目之后就需要认识布局控件了&#xff0c;本篇文章分享.NET MAUI中的一些基础常用的布局控件。GridStackLayoutFalyxLayoutAbsoluteLayout2.详细内容(1)Grid语法&#xff1a;<Grid RowDefinitions"50,50,50,50" RowSpacing"10&qu…

[Javascript] Avoid Creating floats if they are not needed

https://channel9.msdn.com/Series/Practical-Performance-Tips-to-Make-Your-HTMLJavaScript-Faster/06?WT.mc_id13400-DEV-sitepoint-article24 转载于:https://www.cnblogs.com/yoyohappy/p/5884629.html

七、后台入口及添加影院实现《仿淘票票系统前后端完全制作(除支付外)》

一、登录后台窗口显示与跳转 首先打开在线编辑器进入我们的项目&#xff1a;https://editor.ivx.cn/ 上一节已经完成了登录和注册功能&#xff0c;在这一节咱们将会实现对应的后台入口进入和一些后台功能的制作。 首先咱们需要记录一下登录的UID&#xff0c;因为咱们后台界面…

正则表达式 学习笔记4.3

下面看看逆序环视结构&#xff1a;publicclassGeneralSix { publicstaticvoidmain(String[] args) { String[] strings newString[]{"see","bee","tee"};String[] regexs newString[]{"(?<s)ee","(?<!s)ee"}; for…

【MATLAB统计分析与应用100例】案例003:matlab调用smooth函数进行加噪数据的平滑处理

文章目录 1. 产生加噪正弦波信号,绘制加噪波形图2. 利用移动平均法对加噪信号进行平滑处理,绘制平滑波形图3. 利用lowess方法对加噪信号进行平滑处理,绘制平滑波形图4. 利用rlowess方法对加噪信号进行平滑处理,绘制平滑波形图5. 利用loess方法对加噪信号进行平滑处理,绘制…

C语言试题四十二之假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部移到字符串的尾部。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 请编写一个…

linux curl模拟登录网页

有时在批量抓取网站页面内容时&#xff0c;是需要处于登录状态的&#xff0c;否则无法获取。curl这个强大的工具可以完成这个工作。之前最好也先了解一下http POST方法&#xff0c;网站登录大都是用这个办法。本文基本上参考这篇文章,来自依云s Blog&#xff0c;是archlinux中文…

APP上架到各大应用商店的小总结

转自https://blog.csdn.net/niezhipeng8/article/details/79103436 想要把APP上架到应用市场都要先注册开发者账号才可以。这里的方法包括注册帐号和后期上架及一些需要注意的问题。注意&#xff1a;首次提交应用绝对不能随便删除&#xff0c;否则后面再提交会显示应用APP冲突…

八、影片添加页实现《仿淘票票系统前后端完全制作(除支付外)》

一、影片添加页 首先打开在线编辑器进入我们的项目&#xff1a;https://editor.ivx.cn/ 上一届影院添加页功能已经完成&#xff0c;这一节咱们实现影片添加页内容。 影片添加页如下&#xff1a; 该页面实现起来比较简单&#xff0c;点击图片后使用文件上传组件进行图片上传…

MAUI 通用权限框架(ABP)

简介众所周知, MAUI目前发布正式版本了, 那么对应, MAUI对应的ABP框架也应该马上出现, 这点也恰巧在我的预料之中, 所以在去年年底就开始着手Xamarin.Forms的ABP框架迭代。到目前为止,针对Xamarin.Forms 以及 WPF版本的 ABP框架已经在之前的文章当中给大家介绍过。那么本次主要…

十六、Struts2文件上传与下载

文件上传与下载 1.文件上传前提&#xff1a;<form action"${pageContext.request.contextPath}/*" method"post" enctype"multipart/form-data"> 2.动作类中字段需要符合命名规范 表单字段名&#xff1a;image 动作类&#xff1a;…

C语言试题四十三之求出ss所指字符串中指定字符的个数,并返回此值。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 请编写一个…

《Matlab实用案例》系列Matlab从入门到精通实用100例案例教程目录(持续更新)

文章目录1. 专栏简介2. 专栏地址3. 专栏目录1. 专栏简介 2. 专栏地址 「 刘一哥与GIS的故事 」之《Matlab使用案例》 3. 专栏目录 【MATLAB统计分析与应用100例】案例001&#xff1a;matlab使用Importdata函数导入文本txt数据【MATLAB统计分析与应用100例】案例002&#xff…

Quartz2 定时器 《一》(概述)

为什么80%的码农都做不了架构师&#xff1f;>>> Quartz2 说白了&#xff0c;就是个功能比较完善的定时器&#xff0c;可以通过指定的时间执行指定的任务。 应用范围 a.比如让商城的活动&#xff08;对象&#xff09;在指定的时间&#xff08;定时&#xff0…