.NET Maui集成Google AdMob广告iOS编译路径错误解决方案咨询
.NET Maui iOS端集成Google AdMob路径过长问题及解决方案
问题背景
在Windows 11上使用Visual Studio 2022 17.8.0开发基于.NET 7.0的.NET Maui项目,集成Google AdMob时采用Plugin.MauiMTAdmob 1.0.4插件,Android端运行正常,但iOS端因依赖的Xamarin.Firebase.iOS.Core内部路径过长,导致编辑器无法正常工作,编译时出现以下错误:
System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\g\AppData\Local\Temp\Xamarin\HotRestart\Signing\MauiAds.app\out\Payload\MauiAds.app\MauiAds.content\Firebase.Core.resources\FirebaseCoreDiagnostics.xcframework\ios-arm64_x86_64-simulator\FirebaseCoreDiagnostics.framework\Headers\FIRCoreDiagnostics.h'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) at System.IO.Compression.ZipFileExtensions.DoCreateEntryFromFile(ZipArchive destination, String sourceFileName, String entryName, Nullable`1 compressionLevel) at System.IO.Compression.ZipFile.DoCreateFromDirectory(String sourceDirectoryName, String destinationArchiveFileName, Nullable`1 compressionLevel, Boolean includeBaseDirectory, Encoding entryNameEncoding) at Xamarin.iOS.Windows.Installer.ApplicationSession.CreateIpa(String appName, String appPath, String targetPath) in D:\a\_work\1\s\src\Tools\Xamarin.iOS.Windows.Client\Installer\ApplicationSession.cs:line 238 at Xamarin.iOS.Windows.Installer.ApplicationSession.Deploy(String appRootFolder, String appBundleId, String appName) in D:\a\_work\1\s\src\Tools\Xamarin.iOS.Windows.Client\Installer\ApplicationSession.cs:line 91 at Xamarin.iOS.Windows.HotRestartClient.Deploy(AppleDevice nativeDevice, String appBundleId, String appBundleName, Boolean& incremental) in D:\a\_work\1\s\src\Tools\Xamarin.iOS.Windows.Client\HotRestartClient.cs:line 250
已尝试过相关开源问题中的解决方案,但均无效。
解决方案
方案一:解决Windows路径过长问题
- 启用Windows长路径支持:
- 打开注册表编辑器,导航到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem - 修改
LongPathsEnabled键值为1(无该键则新建DWORD值) - 重启Visual Studio或电脑后重试编译
- 打开注册表编辑器,导航到
- 缩短项目路径:
将项目迁移到更短的目录下,比如从C:\Users\g\Documents\LongProjectName\MauiAds改为C:\Projects\MauiAds,减少整体路径长度 - 修改临时目录路径:
更改Xamarin HotRestart的临时目录到短路径:- 右键项目属性 → iOS Build → 高级
- 在「临时目录」中设置短路径,例如
C:\Temp\Xamarin
方案二:替换广告插件或提供商
若上述方法无效,可考虑更换集成方式或广告平台:
更换为官方Google.MobileAds包
- 卸载Plugin.MauiMTAdmob插件
- 安装NuGet包
Google.MobileAds(选择适配.NET Maui的版本) - 按官方文档配置双端设置:
- iOS端:在
Info.plist中添加AdMob应用ID,配置广告相关权限 - Android端:在
AndroidManifest.xml中配置应用ID和权限
- iOS端:在
- 重写广告初始化、展示代码,适配新包API
更换广告提供商
若不想继续使用Google AdMob,可选择其他支持.NET Maui的平台:
- Unity Ads:提供跨平台广告解决方案,支持Maui集成
- AdColony:有官方或社区维护的Maui适配包
- AppLovin:支持Maui,涵盖多种广告格式
更换步骤:
- 卸载现有AdMob相关插件及依赖
- 安装目标提供商的NuGet包
- 按对应平台文档配置项目权限和应用ID
- 替换原有广告展示代码,适配新平台API
内容的提问来源于stack exchange,提问作者Spack09
相关产品推荐
相关产品推荐

