You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已安装.NET 8 SDK时运行.NET 6项目报错的问题咨询

.NET 6项目在同时安装.NET 6和8 SDK后dotnet run报错找不到文件的解决方案

问题背景

  • 单独使用.NET 6 SDK时,项目构建、运行完全正常
  • 同时安装.NET 6和.NET 8 SDK后,dotnet build可成功完成,但执行dotnet run时抛出以下错误:
Unhandled exception: System.ComponentModel.Win32Exception (2): An error occurred trying to start process '/home/dpd-/prj/Test/bin/Debug/net6.0/Test'
with working directory '/home/dpd-/prj/Test'. No such file or directory

at System.Diagnostics.Process.ForkAndExecProcess(ProcessStartInfo startInfo, String resolvedFilename, String[] argv, String[] envp, String cwd, Boolean setCredentials, UInt32 userId, UInt32 groupId, UInt32[] groups, Int32& stdinFd, Int32& stdoutFd, Int32& stderrFd, Boolean usesTerminal, Boolean throwOnNoExec)
at System.Diagnostics.Process.StartCore(ProcessStartInfo startInfo)
at Microsoft.DotNet.Cli.Utils.Command.Execute(Action`1 processStarted)
at Microsoft.DotNet.Tools.Run.RunCommand.Execute()
at System.CommandLine.Invocation.InvocationPipeline.Invocation(ParseResult parseResult)
at Microsoft.DotNet.Cli.Program.ProcessArgs(String[] args, TimeSpan startupTime, ITelemetry telemetryClient)
  • .NET 8项目在双SDK环境下运行无异常
  • 使用全局global.json强制.NET 6 SDK存在局限:无法应用于共享项目、同一解决方案无法混合不同SDK项目、无法在.NET 6项目中启用C# 12

附当前SDK检查结果:

dotnet sdk check

.NET SDKs:
Version      Status                     
----------------------------------------
6.0.417      Patch 6.0.418 is available.
8.0.100      Patch 8.0.101 is available.

Try out the newest .NET SDK features with .NET 8.0.101.

.NET Runtimes:

Name                          Version      Status                    
---------------------------------------------------------------------
Microsoft.AspNetCore.App      6.0.25       Patch 6.0.26 is available.
Microsoft.NETCore.App         6.0.25       Patch 6.0.26 is available.
Microsoft.AspNetCore.App      8.0.0        Patch 8.0.1 is available. 
Microsoft.NETCore.App         8.0.0        Patch 8.0.1 is available. 

可行解决方案

1. 运行时指定框架版本执行

直接在dotnet run命令中明确指定目标框架,强制CLI使用.NET 6的运行时逻辑:

dotnet run --framework net6.0

该方式无需修改任何配置,临时生效,适合单次运行测试,同时不影响解决方案中其他.NET 8项目的运行。

2. 配置项目文件的RuntimeIdentifier(RID)

在.NET 6项目的.csproj文件中添加或明确指定RuntimeIdentifier,确保构建生成对应平台的正确可执行文件:

<PropertyGroup>
  <RuntimeIdentifier>linux-x64</RuntimeIdentifier> <!-- 根据操作系统调整,如windows-x64、osx-x64等 -->
</PropertyGroup>

重新构建后,dotnet run会正确定位到生成的可执行文件,避免因RID不明确导致的路径或文件缺失问题。

3. 更新.NET 6 SDK至最新补丁版本

当前检查显示.NET 6 SDK 6.0.417存在可用补丁6.0.418,更新至最新补丁可修复部分跨SDK兼容性问题:

# 以Ubuntu系统为例,使用apt包管理器更新
sudo apt update && sudo apt install dotnet-sdk-6.0

更新后,.NET 6 SDK与.NET 8 SDK的共存兼容性会提升,可能直接解决dotnet run的文件定位问题。

4. 直接执行生成的可执行文件

跳过dotnet run命令,直接运行构建输出的可执行文件:

# Linux/macOS
./bin/Debug/net6.0/Test
# Windows
.\bin\Debug\net6.0\Test.exe

该方式绕开了dotnet CLI的运行时调度逻辑,直接调用生成的二进制文件,适合验证是否是CLI调度的问题。

5. 局部global.json控制(适配混合解决方案)

不在解决方案根目录放置全局global.json,而是在单个.NET 6项目的目录下单独创建global.json,仅对该项目生效:

{
  "sdk": {
    "version": "6.0.418",
    "rollForward": "latestPatch"
  }
}

同时在该.NET 6项目的.csproj中启用C# 12:

<PropertyGroup>
  <LangVersion>12</LangVersion>
</PropertyGroup>

这种方式既保证了.NET 6项目使用指定SDK,又不影响解决方案中其他.NET 8项目,同时支持在.NET 6项目中使用C# 12语法。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 10:35:55