如何在Azure DevOps中为Xamarin Forms Android库创建生成Nuget包的YAML流水线
问题修复方案
错误原因
- 报错
MSB4019的核心原因是你使用DotNetCoreCLI@2任务执行pack操作时,调用的是dotnet SDK内置的MSBuild,Windows-2019镜像中的dotnet SDK未集成Xamarin.Android专属的构建目标文件(Xamarin.Android.CSharp.targets),只有完整版Visual Studio附带的MSBuild才包含这些依赖。 - 普通无平台绑定的Xamarin Forms类库可以正常打包,是因为不需要依赖Xamarin平台专属的构建目标。
修复方案
把原来的DotNetCoreCLI pack任务替换为MSBuild任务调用pack命令即可,以下是完整可用的YAML配置:
pool: vmimage: 'windows-2019' variables: buildConfiguration: 'Release' outputDirectory: '$(build.binariesDirectory)/$(buildConfiguration)' steps: - task: DotNetCoreCLI@2 displayName: Restore Nuget packages inputs: command: 'restore' projects: '**/*.Droid.csproj' feedsToUse: 'select' vstsFeed: '426fe2cd-0983-468f-b5bd-8073930ec94c' - task: XamarinAndroid@1 displayName: Build project inputs: projectFile: '**/*.Droid.csproj' outputDirectory: '$(outputDirectory)' createAppPackage: true configuration: '$(buildConfiguration)' msbuildVersionOption: '16.0' # 替换原DotNetCoreCLI pack任务,改用VS自带的MSBuild执行打包 - task: MSBuild@1 displayName: Generate Nuget package inputs: solution: '**/*.Droid.csproj' msbuildVersion: '16.0' configuration: '$(buildConfiguration)' msbuildArguments: '-t:pack -p:PackageOutputPath=$(Build.ArtifactStagingDirectory)' - task: DotNetCoreCLI@2 displayName: Publish Nuget inputs: command: 'push' packagesToPush: '$(Build.ArtifactStagingDirectory)/*.nupkg' nuGetFeedType: 'internal' publishVstsFeed: '426fe2cd-0983-468f-b5bd-8073930ec94c'
可选简化方案
如果你的项目.csproj文件中已经配置了GeneratePackageOnBuild=true(也就是本地VS编译时自动生成Nuget包的配置),可以省略单独的打包步骤,直接在XamarinAndroid构建任务中添加输出参数即可生成nupkg:
- task: XamarinAndroid@1 displayName: Build project inputs: projectFile: '**/*.Droid.csproj' outputDirectory: '$(outputDirectory)' createAppPackage: true configuration: '$(buildConfiguration)' msbuildVersionOption: '16.0' msbuildArguments: '-p:PackageOutputPath=$(Build.ArtifactStagingDirectory)'
配置完成后可直接删除单独的Generate Nuget package步骤。
内容的提问来源于stack exchange,提问作者Fer
相关产品推荐
相关产品推荐

