You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于使用.NET 5构建netcoreapp3.1项目的疑问:为何构建系统未选用已安装的.NET Core 3.1

为什么你的netcoreapp3.1项目会用.NET 5 SDK构建,以及如何解决

我来帮你拆解这个问题:

为什么默认会用.NET 5 SDK?

.NET SDK的设计是向前兼容的——也就是说,高版本的SDK可以用来构建低版本目标框架的项目。当你的系统中安装了多个SDK版本时,dotnet cli会默认选择最新的稳定版本来执行构建命令,不管你的项目目标框架是netcoreapp3.1还是其他旧版本。这就是为什么你本地和Azure DevOps Pipeline里都会自动用上5.0.102版本的SDK。

用.NET 5 SDK构建netcoreapp3.1项目可行吗?

答案是大部分场景下可行,因为微软保证高版本SDK对旧目标框架的兼容性。不过确实要注意,少数情况下可能会遇到一些小的兼容性问题(比如某些工具链行为变化),但针对Azure Function的netcoreapp3.1项目,用.NET 5 SDK构建通常不会有大问题。不过如果你想完全规避潜在风险,或者要解决那个System.Text.Json的警告(这个警告大概率和SDK版本不匹配有关),最好还是指定使用3.1版本的SDK来构建。

如何强制使用.NET Core 3.1 SDK?

这里有几个可靠的方案:

1. 添加global.json文件(本地和Pipeline通用)

在你的项目根目录或者解决方案根目录创建一个global.json文件,内容如下:

{
  "sdk": {
    "version": "3.1.405"
  }
}

这个文件会告诉dotnet cli和IDE(比如Rider),优先使用指定版本的SDK来构建项目。只要这个文件存在,不管系统里有什么新版本的SDK,都会乖乖用你指定的3.1.405版本。

2. 在Azure DevOps Pipeline中显式指定SDK版本

在你的Pipeline yaml里添加UseDotNet任务,明确安装并使用3.1.405版本的SDK:

- task: UseDotNet@2
  inputs:
    packageType: 'sdk'
    version: '3.1.405'
    installationPath: $(Agent.ToolsDirectory)/dotnet

这样Pipeline构建时会先确保安装了指定的3.1 SDK,然后用它来构建你的项目,不会再默认选最新的5.x版本。

3. 在Rider中手动指定SDK

打开Rider的设置:File → Settings → Build, Execution, Deployment → Toolset and Build,找到.NET Core SDK选项,从下拉列表里选择3.1.405版本,保存设置后重新构建项目,控制台就会显示使用3.1版本的MSBuild.dll了。

内容的提问来源于stack exchange,提问作者mnj

火山引擎 最新活动