Azure DevOps构建含netstandard2.0的.NET Framework项目报错问询
修复Azure DevOps构建.NET Framework混合.NET Standard 2.0项目的方案
根因说明
- 仓库根目录的
global.json文件硬指定了需要.NET SDK 2.0.2版本,Azure DevOps公有构建代理默认未预装该版本 - 当前使用的
VS2017-Win2016镜像自带的.NET SDK版本不满足.NET Standard 2.0的构建要求,哪怕临时切换到VS2019镜像,没有匹配SDK版本也会触发报错 - 本地VS2019和Bamboo环境可正常构建的原因是这两个环境已经预装了
global.json要求的2.0.2版本SDK
修复方案(无需迁移项目到.NET Core)
方案1(推荐):安装匹配版本的SDK+对齐构建镜像
和本地开发环境保持一致,修改管道配置即可:
- 将构建池镜像替换为
windows-2019(对应VS2019环境,和你本地开发工具版本对齐) - 在NuGet相关步骤前新增
UseDotNet任务,安装global.json指定的2.0.2版本SDK
修改后的完整管道配置示例:
trigger: - master pool: vmImage: 'windows-2019' variables: solution: 'WebSolution.sln' buildPlatform: 'Any CPU' # 注意:你原配置里msbuildArgs硬写了Configuration=web-develop,和这里的Release冲突,建议统一 buildConfiguration: 'web-develop' steps: # 新增:安装匹配global.json要求的.NET SDK - task: UseDotNet@2 inputs: packageType: 'sdk' version: '2.0.2' - task: NuGetToolInstaller@1 - task: NuGetCommand@2 inputs: restoreSolution: '$(solution)' - task: VSBuild@1 inputs: solution: '$(solution)' msbuildArgs: '/p:DeployOnBuild=false /p:PublishProfile=web.pubxml /p:AllowUntrustedCertificate=True' platform: '$(buildPlatform)' configuration: '$(buildConfiguration)' - task: PublishBuildArtifacts@1 inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)' ArtifactName: 'drop' publishLocation: 'Container'
如果global.json是冗余配置,本地不需要硬锁SDK版本,也可以直接删除仓库里的global.json文件,无需新增UseDotNet任务,仅替换镜像为windows-2019即可正常构建。
方案2(临时兼容):指定MSBuild SDK路径
如果不想修改global.json也不想调整镜像,可以在VSBuild任务的msbuildArgs参数中追加/p:NETSDKPath=<你手动上传到代理的SDK路径>,该方案稳定性较差,仅适合特殊场景使用。
注:以上方案均不需要修改项目代码,也不需要将任何项目迁移到.NET Core
内容的提问来源于stack exchange,提问作者Vivendi
相关产品推荐
相关产品推荐

