Android/iOS项目中<UseMauiEssentials>与<UseMaui>的区别及适配疑问
.NET MAUI在现有Xamarin项目中的配置指南
1. <UseMauiEssentials> 和 <UseMaui> 的区别及使用选择
<UseMaui>:启用完整的.NET MAUI框架,包含跨平台UI控件、布局系统、资源管理等全套MAUI能力,适合打算彻底迁移到MAUI生态、用MAUI构建跨平台UI的项目。<UseMauiEssentials>:仅启用MAUI Essentials组件——这是Xamarin.Essentials的升级替代版本,提供相机、位置、文件系统等设备级API,但不包含MAUI的UI框架,适合只需要替换Xamarin.Essentials、保留现有Xamarin Native(Android/iOS原生)UI的场景。
不需要同时启用两者:如果用<UseMaui>,MAUI Essentials已经被包含在内,无需额外添加<UseMauiEssentials>;如果只需要设备API,仅添加<UseMauiEssentials>即可。
2. Xamarin.Essentials的处理
必须移除项目中的Xamarin.Essentials NuGet包。因为MAUI Essentials是它的官方继任者,两者底层实现不同,同时存在会导致命名空间冲突、依赖版本冲突等问题。
移除后,只需将代码中的using Xamarin.Essentials;替换为MAUI Essentials对应的命名空间(比如using Microsoft.Maui.ApplicationModel;、using Microsoft.Maui.Media;等),大部分API的调用逻辑可以直接沿用。
3. 所需的.NET MAUI NuGet包配置
分两种场景给出配置方案:
场景一:仅替换Xamarin.Essentials(保留现有Native UI)
- 在项目的
<PropertyGroup>中添加<UseMauiEssentials>true</UseMauiEssentials> - 移除
Xamarin.Essentials包,添加Microsoft.Maui.Essentials包(版本建议与你的.NET版本匹配,比如net6.0对应MAUI 6.x系列版本)
修改后的Android csproj示例
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6.0-android</TargetFramework> <SupportedOSPlatformVersion>23</SupportedOSPlatformVersion> <OutputType>Exe</OutputType> <ApplicationId>com.companyname.AndroidprojectwithXamarin</ApplicationId> <ApplicationVersion>1</ApplicationVersion> <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion> <UseMauiEssentials>true</UseMauiEssentials> </PropertyGroup> <ItemGroup> <PackageReference Include="MonoGame.Content.Builder.Task" Version="3.8.1.303" /> <PackageReference Include="MonoGame.Framework.Android" Version="3.8.1.303" /> <PackageReference Include="Microsoft.Maui.Essentials" Version="6.0.547" /> </ItemGroup> <Target Name="RestoreDotnetTools" BeforeTargets="Restore"> <Message Text="Restoring dotnet tools" Importance="High" /> <Exec Command="dotnet tool restore" /> </Target> </Project>
修改后的iOS csproj示例
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6.0-ios</TargetFramework> <OutputType>Exe</OutputType> <SupportedOSPlatformVersion>15.0</SupportedOSPlatformVersion> <CodesignKey>iPhone Developer</CodesignKey> <UseMauiEssentials>true</UseMauiEssentials> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <CreatePackage>false</CreatePackage> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <CreatePackage>false</CreatePackage> </PropertyGroup> <ItemGroup> <PackageReference Include="MonoGame.Content.Builder.Task" Version="3.8.1.303" /> <PackageReference Include="MonoGame.Framework.iOS" Version="3.8.1.303" /> <PackageReference Include="Microsoft.Maui.Essentials" Version="6.0.547" /> </ItemGroup> <Target Name="RestoreDotnetTools" BeforeTargets="Restore"> <Message Text="Restoring dotnet tools" Importance="High" /> <Exec Command="dotnet tool restore" /> </Target> </Project>
场景二:迁移到完整.NET MAUI(使用MAUI UI)
- 在项目的
<PropertyGroup>中添加<UseMaui>true</UseMaui> - 移除
Xamarin.Essentials包,无需单独添加Microsoft.Maui.Essentials(<UseMaui>已包含该组件) - 添加
Microsoft.Maui.Controls及对应平台的兼容包(如果需要兼容旧控件)
内容的提问来源于stack exchange,提问作者John_Kub
相关产品推荐
相关产品推荐

