.NET Maui中Platforms命名空间无法解析的依赖注入问题
.NET Maui平台特定依赖注入命名空间无法解析的解决方案
检查平台类的基础配置
- 确认
MyData类文件必须放在项目的Platforms/Android文件夹内,Maui依靠文件夹结构识别平台专属代码,只有对应平台文件夹内的类才会被编译到目标平台程序集。 - 核对命名空间:Android平台类的命名空间需包含具体平台层级,比如应用名为
MyName,正确命名空间应为MyName.Platforms.Android,而非MyName.Platforms。
正确注册平台特定服务
共享项目的MauiProgram.cs无法直接识别平台专属类型,需通过以下两种方式处理:
方式1:使用条件编译指令
在MauiProgram.cs中添加平台判断,仅在Android环境下注册服务:
#if ANDROID using MyName.Platforms.Android; #endif namespace MyName; public static class MauiProgram { public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); builder .UseMauiApp<App>() .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); }); #if ANDROID builder.Services.AddTransient<IMyData, MyData>(); #endif return builder.Build(); } }
方式2:创建平台专属服务扩展
- 在
Platforms/Android文件夹下创建扩展类:
namespace MyName.Platforms.Android; public static class AndroidServiceExtensions { public static IServiceCollection AddAndroidSpecificServices(this IServiceCollection services) { services.AddTransient<IMyData, MyData>(); return services; } }
- 在
MauiProgram.cs中通过条件编译调用扩展:
namespace MyName; public static class MauiProgram { public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); builder .UseMauiApp<App>() .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); }); #if ANDROID builder.Services.AddAndroidSpecificServices(); #endif return builder.Build(); } }
排查编译缓存与项目配置问题
- 清理并重建解决方案:点击菜单栏
生成→清理解决方案,再执行生成解决方案,解决VS缓存导致的命名空间识别异常。 - 检查项目文件(
.csproj):确认Platforms/Android/MyData.cs被正确标记为Android平台专属,项目文件中应有类似配置:
<ItemGroup> <Compile Include="Platforms\Android\MyData.cs" Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'" /> </ItemGroup>
额外说明
应用名称包含App不会引发命名空间解析问题,新建MyName应用仍出现问题大概率是配置错误而非VS Bug。若以上步骤无效,可尝试:
- 卸载并重新安装VS的.NET Maui工作负载
- 创建全新Maui项目,严格按上述步骤配置,对比差异排查问题
内容的提问来源于stack exchange,提问作者Dumber_Texan2
相关产品推荐
相关产品推荐

