如何让VS 2022使用.NET Core 5编译.NET Core 5控制台应用?
如何让Visual Studio 2022使用.NET Core 5编译指定项目?
问题背景
我有一个.NET Core 5控制台应用,项目文件中明确指定了目标框架:
<TargetFramework>net5.0</TargetFramework>
但在Visual Studio 2022(版本17.4.0 Preview 6)中编译时,构建输出显示系统实际使用了.NET Core 7的预览版SDK:
1>C:\Program Files\dotnet\sdk\7.0.100-rc.2.22477.23\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(257,5):
message NETSDK1057: You are using a preview version of .NET.
我的机器上已安装.NET 5 SDK,执行dotnet --list-sdks的输出如下:
PS B:\...> dotnet --list-sdks 5.0.413 [C:\Program Files\dotnet\sdk] 7.0.100-rc.2.22477.23 [C:\Program Files\dotnet\sdk]
注:我知道.NET Core 5已过时。
项目相关文件
解决方案文件(NetCore5Console.sln)
Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.4.33027.239 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetCore5Console", "ConsoleNetCore5\NetCore5Console.csproj", "{43DE576A-1052-4AC5-B612-D88D9D6624B6}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {43DE576A-1052-4AC5-B612-D88D9D6624B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {43DE576A-1052-4AC5-B612-D88D9D6624B6}.Debug|Any CPU.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {EF895EC5-66AD-4B5A-ACFF-594C848D2311} EndGlobalSection EndGlobal
项目文件(NetCore5Console.csproj)
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> <CheckEolTargetFramework>false</CheckEolTargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> </ItemGroup> </Project>
代码文件(Program.cs)
using System; using System.Text.RegularExpressions; namespace ConsoleNetCore5 { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } } }
解决方法
方法一:通过global.json强制指定SDK版本(推荐)
在解决方案根目录或项目根目录创建global.json文件,内容如下:
{ "sdk": { "version": "5.0.413", "rollForward": "disable" } }
该文件会让dotnet CLI和Visual Studio优先使用指定版本的SDK构建项目,彻底避免自动升级到高版本SDK的问题。
方法二:在Visual Studio中直接设置项目SDK版本
- 右键项目 → 选择「属性」
- 切换到「应用程序」选项卡,点击「高级」按钮
- 在弹出的「高级构建设置」对话框中,找到「SDK版本」下拉框,选择已安装的
5.0.413版本 - 保存设置后重新编译项目
方法三:临时通过环境变量限制SDK版本
如果仅需临时测试,可在命令行中设置环境变量后执行构建:
$env:DOTNET_ROLL_FORWARD="Disable" dotnet build
注意:这种方式仅对当前命令行会话有效,Visual Studio需要重启才能识别该环境变量,不适合长期使用。
内容的提问来源于stack exchange,提问作者Thomas W.
相关产品推荐
相关产品推荐

