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.pswp.cn/news/286162.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286162.shtml
英文地址,請注明出處:http://en.pswp.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…