You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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:创建平台专属服务扩展

  1. 在Platforms/Android文件夹下创建扩展类:
namespace MyName.Platforms.Android;

public static class AndroidServiceExtensions
{
    public static IServiceCollection AddAndroidSpecificServices(this IServiceCollection services)
    {
        services.AddTransient<IMyData, MyData>();
        return services;
    }
}
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 21:27:34