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

Xamarin Android中获取VersionName的替代方案咨询(原方法已弃用)

获取Xamarin Android应用VersionName的替代方案

针对你遇到的PackageManager.GetPackageInfo(PackageName, 0)被弃用的问题,以下是两种无需依赖Xamarin Essentials的原生解决方案:

方法一:适配新版PackageManager API

Android 11(API 30)起弃用了int类型flags的GetPackageInfo重载,需改用PackageInfoFlags枚举;Android 12(API 31)进一步弃用PackageInfo.VersionName,可根据系统版本做兼容处理:

using Android.Content.PM;
using Android.OS;

// 获取PackageInfo实例
PackageInfo packageInfo;
if (Build.VERSION.SdkInt >= BuildVersionCodes.Tiramisu) // API 33及以上
{
    packageInfo = PackageManager.GetPackageInfo(PackageName, PackageManager.PackageInfoFlags.None);
}
else if (Build.VERSION.SdkInt >= BuildVersionCodes.R) // API 30-32
{
    packageInfo = PackageManager.GetPackageInfo(PackageName, PackageInfoFlags.Of(0));
}
else // API 29及以下
{
    packageInfo = PackageManager.GetPackageInfo(PackageName, 0);
}

// 获取版本名称
string versionName;
if (Build.VERSION.SdkInt >= BuildVersionCodes.S) // API 31及以上
{
    // VersionCodeName对应AndroidManifest中android:versionCode的字符串形式
    // 若需原显示用版本字符串,可在AndroidManifest的<application>中添加<meta-data>字段后读取
    versionName = packageInfo.VersionCodeName;
}
else
{
    versionName = packageInfo.VersionName;
}

方法二:从程序集直接读取

如果项目Assembly版本与AndroidManifest配置的versionName保持同步,可直接从程序集获取版本信息,无需调用PackageManager:

using System.Reflection;

var assembly = typeof(MainActivity).Assembly;
var assemblyVersion = assembly.GetName().Version;
var versionName = $"{assemblyVersion.Major}.{assemblyVersion.Minor}.{assemblyVersion.Build}";

注:使用此方法需确保项目属性的Assembly版本与AndroidManifest的android:versionName完全一致,避免版本信息不匹配。

内容的提问来源于stack exchange,提问作者Jim Wilcox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:55:16