VS2022中MAUI Android版本预处理器未按设备API版本生效问题
预处理器指令ANDROID33_0_OR_GREATER未按预期生效的解决方案
这个问题并非Visual Studio的bug,核心原因是预处理器指令是基于项目编译时指定的「目标Android版本(Target Framework)」生效,而非运行时连接的设备API版本。以下是具体解决思路和步骤:
调整项目目标框架配置
右键Android项目 → 属性 → 「应用」选项卡 → 找到「目标框架」设置:- 若希望连接API31设备时走#else分支,需将当前编译配置(Debug/Release)对应的目标框架设置为API31或更低版本,而非API33+。预处理器会根据编译时的目标框架判定分支,和运行设备无关。
检查编译配置一致性
确认当前选中的编译配置(Debug/Release)的目标框架设置正确,不同配置可能独立设定目标框架,避免出现配置不匹配的情况。改用运行时版本判断(按需选择)
如果你的需求是根据运行时设备的API版本执行对应逻辑,预处理器指令不适用(它是编译时判定),应替换为运行时检测代码:class DeviceInfoProvider: IDeviceInfoProvider { public string GetAppVarsion() { if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Tiramisu) { var packageManager = Platform.AppContext.PackageManager; var packageName = Platform.AppContext.PackageName; var flags = PackageManager.PackageInfoFlags.Of((int)PackageInfoFlags.MetaData); var appVer = packageManager.GetPackageInfo(packageName, flags).VersionName; return appVer; } else { var appVer = Platform.AppContext.PackageManager.GetPackageInfo(Platform.AppContext.PackageName, 0).VersionName; return appVer; } } }此代码会在App运行时检测设备的API版本,真正实现基于连接设备的分支逻辑。
内容的提问来源于stack exchange,提问作者o_w
相关产品推荐
相关产品推荐

