我正在使用 SDK 樣式的多目標專案升級 Xamarin Native 解決方案以在 .net 6 上運行。
據我了解,有兩種撰寫平臺相關代碼的方法: a) 適當平臺目錄(例如“iOS”或“MacCatalyst”)中的代碼總是針對該平臺有條件地編譯。b) 代碼可以通過例如#if IOS
.
當兩個平臺之間共享大量代碼時,這些似乎都不理想。在 (a) 中,代碼是重復的,在 (b) 中,代碼中散布著#if
s。
有沒有更好的方法在這兩個平臺之間共享代碼?
uj5u.com熱心網友回復:
MSBuild 條件可用于控制不同情況下的構建操作。
給定默認值true
,<EnableDefaultCompileItems>
最簡單的方法是從不應該擁有的目標中洗掉檔案夾。
目標是讓(大部分)iOS 代碼同時包含在 iOS 和 MacCatalyst 中;因此將其從所有其他目標框架中排除。
腳步:
- 在專案根目錄下創建一個檔案夾。例如
iosShared
。 - 在其中放置要包含在 iOS 和 MacCatalyst 構建中的檔案(和子檔案夾)。
- 默認情況下,這些檔案將包含在所有目標中。通過添加到停止它
YourProject.csproj
:
<ItemGroup Condition="'$(TargetFramework)' != 'net6.0-ios' And
'$(TargetFramework)' != 'net6.0-maccatalyst'">
<Compile Remove="iosShared\**\*" />
</ItemGroup>
uj5u.com熱心網友回復:
我正在考慮在下創建一個“共享”檔案夾Platforms/iOS
并將該檔案夾符號鏈接到Platforms/MacCatalyst/Shared
.
仍在等待其他答案,以及對此的評論。
編輯:我在 Visual Studio For Mac 2022 上試過這個。符號鏈接的檔案夾Platforms/MacCatalyst/Shared
在解決方案資源管理器中顯示為一個帶有紅色標題的單個檔案,即它的子樹不可見。但是,該專案適用于 iOS 和 Mac Catalyst。由于共享代碼可以從其原始位置訪問Platforms/iOS/Shared
,因此這看起來是有效的,盡管有點不受支持。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/470484.html