如何从.NET MAUI Blazor Hybrid App向控制台应用导入类/结构体/记录
.NET MAUI Blazor Hybrid类导入控制台应用的兼容性问题解决
需求
- 将.NET MAUI Blazor Hybrid App中的部分类/结构体/记录导入至控制台应用(控制台仅用于开发,不调用Blazor或.NET MAUI功能)
- 需要将目标类的访问修饰符从
internal改为public,示例如下:
public record PeopleManagementPageEnglishLocalization : PeopleManagementPageLocalization { public override string personManagerActivationGuidance { get; } = "Click or tap the person card to view details or edit the dedicated person data."; public override SuccessMessages successMessages { get; init; } = new() { personAddingSucceeded = "Person has been added.", personUpdatingSucceeded = "Person has been updated", personDeletingSucceeded = "Person has been deleted." }; public override ErrorMessages errorMessages { get; init; } = new() { personAddingFailed = SharedStaticEnglishStrings.SingleInstance. buildDataRetrievingOrSubmittingFailedPoliteMessage("The malfunction has occurred during adding of new person."), personUpdatingFailed = SharedStaticEnglishStrings.SingleInstance. buildDataRetrievingOrSubmittingFailedPoliteMessage("The malfunction has occurred during updating of person."), personDeletingFailed = SharedStaticEnglishStrings.SingleInstance. buildDataRetrievingOrSubmittingFailedPoliteMessage("The malfunction has occurred during deleting of person.") }; }
遇到的问题
添加MAUI项目引用后,控制台应用出现以下问题:
- 编译报错:无法解析
System相关符号 - 运行时触发NU1201兼容性错误:
项目Client不兼容net8.0,移除引用后恢复正常
尝试过的方案
将控制台应用的TargetFramework改为net8.0-windows,仍出现版本不兼容错误:
Error (active) NU1201 Project Client is not compatible with net8.0-windows7.0 (.NETCoreApp,Version=v8.0). Project Client supports: - net8.0-android34.0 (.NETCoreApp,Version=v8.0) - net8.0-ios17.5 (.NETCoreApp,Version=v8.0) - net8.0-maccatalyst17.5 (.NETCoreApp,Version=v8.0) - net8.0-windows10.0.19041 (.NETCoreApp,Version=v8.0) GeneratorOfAssetsForStaticPreview D:\IntelliJ IDEA\****\Automation\GeneratorOfAssetsForStaticPreview\GeneratorOfAssetsForStaticPreview.csproj 1 Error (active) Project '..\..\Implementation\Elements\Client\Client.csproj' targets 'net8.0-maccatalyst;net8.0-ios;net8.0-android;net8.0-windows10.0.19041.0'. It cannot be referenced by a project that targets '.NETCoreApp,Version=v8.0'. GeneratorOfAssetsForStaticPreview C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets 1890
背景限制
必须基于现有类生成JSON文件并输出至.NET MAUI项目,且无法将这些类提取到独立的类库项目中。
解决方案
1. 匹配目标框架版本
将控制台项目的TargetFramework修改为与MAUI项目完全一致的Windows目标版本,即net8.0-windows10.0.19041。修改控制台项目的.csproj文件:
<PropertyGroup> <TargetFramework>net8.0-windows10.0.19041</TargetFramework> </PropertyGroup>
2. 优化项目引用配置
在控制台项目的项目引用中添加PrivateAssets="all"和ExcludeAssets="runtime",避免引入MAUI的运行时依赖,仅保留编译时所需的类型信息:
<ProjectReference Include="..\..\Implementation\Elements\Client\Client.csproj" PrivateAssets="all" ExcludeAssets="runtime" />
3. 确保访问修饰符正确修改
将所有需要在控制台应用中访问的类、属性、方法的访问修饰符从internal改为public,包括示例中的记录类型及其重写的属性。
4. 排除MAUI平台特定代码(可选)
如果MAUI类中包含平台专属代码,可通过条件编译在控制台编译时排除:
#if !NET8_0_WINDOWS10_0_19041 // MAUI平台特定代码,控制台编译时会忽略 #endif
内容的提问来源于stack exchange,提问作者Takeshi Tokugawa YD
相关产品推荐
相关产品推荐

