如何将多目标框架的.NET MAUI App引用到.NET MAUI类库?
解决.NET MAUI跨项目引用的NU1201错误
核心原因
你遇到的NU1201错误,本质是主MAUI应用的多平台目标框架(net6.0-android31.0等)与组件类库的通用net6.0目标框架不兼容,NuGet无法在不同目标框架集合之间建立引用关系。
可行解决方案
1. 让组件类库与主应用目标框架对齐
直接修改组件类库的.csproj文件,将其改为和主应用一致的多平台目标框架,同时启用MAUI类库支持:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFrameworks>net6.0-android31.0;net6.0-ios15.4;net6.0-maccatalyst15.4;net6.0-windows10.0.19041</TargetFrameworks> <UseMaui>true</UseMaui> <ImplicitUsings>enable</ImplicitUsings> </PropertyGroup> </Project>
这样组件类库和主应用的目标框架完全匹配,就能正常引用主应用项目,不会再触发兼容性错误。
2. 给主应用添加条件化项目引用(不推荐)
如果坚持让组件类库保持单net6.0目标,可以尝试在主应用的.csproj中为每个平台目标添加条件化引用:
<ItemGroup> <ProjectReference Include="..\YourComponentLibrary\YourComponentLibrary.csproj" Condition="'$(TargetFramework)' == 'net6.0-android31.0' Or '$(TargetFramework)' == 'net6.0-ios15.4' Or '$(TargetFramework)' == 'net6.0-maccatalyst15.4' Or '$(TargetFramework)' == 'net6.0-windows10.0.19041'" /> </ItemGroup>
但这种方式可能引发编译阶段的依赖问题,且后续平台版本更新时需要同步修改条件,维护成本较高。
3. 抽离通用实用类到共享类库(长远最优)
虽然你想避免新增项目,但如果主应用中的实用类是跨平台通用逻辑,将其抽离到一个net6.0或.NET Standard 2.0类库中,让主应用和组件类库同时引用这个共享类库,是更合理的架构设计:
- 彻底规避目标框架不兼容问题
- 避免主应用与组件类库之间的循环引用风险
- 通用逻辑的复用性和可维护性更强
内容的提问来源于stack exchange,提问作者jaydopartu
相关产品推荐
相关产品推荐

