Xamarin.iOS旧.NET项目构建错误MSB3644求助
问题描述
构建旧.NET iOS项目时触发MSB3644错误,具体错误信息:
/usr/local/share/dotnet/sdk/8.0.302/Microsoft.Common.CurrentVersion.targets(1248,5): error MSB3644: The reference assemblies for Xamarin.iOS,Version=v1.0 were not found. To resolve this, install the Developer Pack (SDK/Targeting Pack) for this framework version or retarget your application. You can download .NET Framework Developer Packs at https://aka.ms/msbuild/developerpacks [/Users/estefanord/Downloads/Snap.Net-master/Mobile/Mobile.iOS/Snap.Net.Mobile.iOS.csproj]
错误触发的Microsoft.Common.CurrentVersion.targets第1248行内容:
<GetReferenceAssemblyPaths Condition="'$(TargetFrameworkMoniker)' != '' and ('$(_TargetFrameworkDirectories)' == '' or '$(_FullFrameworkReferenceAssemblyPaths)' == '')" TargetFrameworkMoniker='$(TargetFrameworkMoniker)' RootPath="$(TargetFrameworkRootPath)" TargetFrameworkFallbackSearchPaths="$(TargetFrameworkFallbackSearchPaths)" BypassFrameworkInstallChecks="$(BypassFrameworkInstallChecks)" ContinueOnError="!$(BuildingProject)"> <Output TaskParameter="ReferenceAssemblyPaths" PropertyName="_TargetFrameworkDirectories"/> <Output TaskParameter="FullFrameworkReferenceAssemblyPaths" PropertyName="_FullFrameworkReferenceAssemblyPaths"/> <Output TaskParameter="TargetFrameworkMonikerDisplayName" PropertyName="TargetFrameworkMonikerDisplayName" Condition="'$(TargetFrameworkMonikerDisplayName)' == ''"/> </GetReferenceAssemblyPaths>
已尝试重装.NET、修改产品版本、临时设置路径等方法,问题仍未解决。
针对性解决步骤
1. 修正项目TargetFramework配置
旧Xamarin.iOS项目的目标框架格式与.NET 8+的iOS项目不同,打开项目的.csproj文件,检查<TargetFramework>节点:
- 错误示例(可能被误升级):
<TargetFramework>net8.0-ios</TargetFramework> - 正确示例(匹配Xamarin.iOS版本):
<TargetFramework>Xamarin.iOS16.1</TargetFramework>
版本号需与你本地安装的Xamarin.iOS版本一致,可通过Visual Studio for Mac的
设置 > SDK Locations > Apple > Xamarin.iOS查看当前版本。
2. 确认Xamarin.iOS安装完整性
- 打开Visual Studio for Mac,进入
Visual Studio > Settings > SDK Locations > Apple > Xamarin.iOS,确认路径指向/Library/Frameworks/Xamarin.iOS.framework/Versions/Current - 若路径为空或无效,重新运行Visual Studio安装器,勾选移动开发分类下的Xamarin.iOS组件进行安装。
3. 手动强制指定引用路径
如果MSBuild自动检测路径失败,在.csproj的<PropertyGroup>中添加以下配置:
<_TargetFrameworkDirectories>/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/Xamarin.iOS</_TargetFrameworkDirectories> <_FullFrameworkReferenceAssemblyPaths>/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/Xamarin.iOS</_FullFrameworkReferenceAssemblyPaths>
4. 清理项目缓存
- 删除项目根目录下的
bin、obj文件夹 - 运行终端命令:
dotnet clean - 重启Visual Studio后重新构建项目
5. 锁定兼容的.NET SDK版本
Xamarin.iOS最高兼容.NET 6 SDK,创建项目目录下的global.json文件锁定版本:
{ "sdk": { "version": "6.0.418", "rollForward": "latestMinor" } }
若未安装.NET 6 SDK,可通过
dotnet install-sdk 6.0命令安装。
内容的提问来源于stack exchange,提问作者user25915597

