VSTS构建Xamarin Forms Android项目报错:project.assets.json未找到
project.assets.json缺失的问题 这个问题我在Azure DevOps构建Xamarin.Android项目时也碰到过,核心就是NuGet依赖还原的步骤没正确执行或者顺序不对,毕竟project.assets.json是NuGet还原后生成的依赖清单文件。结合你的情况(本地正常、iOS构建没问题),给你几个针对性的解决办法:
1. 确保NuGet还原步骤在MSBuild构建之前执行
iOS构建流程可能默认帮你处理了NuGet还原,但Android构建需要显式执行还原任务。在YAML里把NuGet还原放在MSBuild任务前面:
- task: NuGetCommand@2 inputs: command: 'restore' restoreSolution: '**/*.sln' # 或者直接指定包含MyApp.Controls的解决方案 feedsToUse: 'select' # 如果用了私有NuGet Feed,这里配置你的Feed信息
2. 给MSBuild任务添加强制还原参数
如果不想单独加NuGet任务,也可以在MSBuild的参数里强制先执行还原再构建,同时建议直接指定Android项目而非整个解决方案,减少其他项目的干扰:
- task: MSBuild@1 inputs: solution: '**/MyApp.Android.csproj' platform: 'Any CPU' configuration: 'Release' msbuildArguments: '/t:Restore;Build /p:AndroidSdkDirectory=$(AndroidSdkDirectory)'
这样MSBuild会先处理MyApp.Controls等依赖项目的NuGet还原,再执行构建。
3. 清理构建目录,避免缓存干扰
VSTS构建代理的缓存可能残留旧的obj目录文件,导致还原不彻底。可以在构建开始前添加清理任务:
- task: DeleteFiles@1 inputs: SourceFolder: '$(Build.SourcesDirectory)' Contents: '**/obj/**'
或者直接在MSBuild参数里加上Clean目标:/t:Clean;Restore;Build
4. 检查并匹配.NET SDK版本
错误里显示用的是dotnet sdk 2.1.104,这个版本比较老旧,可能和你的Xamarin.Forms版本不兼容。可以在YAML里指定项目需要的SDK版本:
- task: UseDotNet@2 inputs: packageType: 'sdk' version: '3.1.x' # 根据你的项目实际依赖调整,比如Xamarin.Forms 5.x建议用更高版本SDK
5. 检查类库项目的引用配置
错误指向MyApp.Controls,确认这个类库是.NET Standard项目,并且被Android项目正确引用。本地能构建说明配置没问题,但CI环境下可以尝试在NuGet还原时单独指定这个类库的项目文件,确保它的依赖被正确还原。
我当时碰到这个问题就是因为把NuGet还原步骤放在了MSBuild之后,调整顺序后就解决了,你可以先从步骤1开始尝试,应该能快速定位问题。
内容的提问来源于stack exchange,提问作者François

