Ubuntu下VS Code无法识别.NET 6,无法编译运行应用
解决VS Code无法识别.NET 6的问题
问题现象
在Ubuntu 20.04环境下使用VS Code和.NET 6加载项目时,出现以下错误:
[fail]: OmniSharp.MSBuild.ProjectLoader The reference assemblies for ".NETFramework,Version=v6.0" were not found. You might be using an older .NET SDK to target .NET 5.0 or higher. Update Visual Studio and/or your .NET SDK. [warn]: OmniSharp.MSBuild.ProjectManager Failed to load project file '/home/one/github/ion/Migration/Tests/Migrator.Tests/Migrator.Tests.csproj'. /home/one/github/ion/GCPMigration/Tests/AwsMigrator.Tests/Migrator.Tests.csproj /usr/lib/mono/msbuild/Current/bin/Microsoft.Common.CurrentVersion.targets(1232,5): Error: The reference assemblies for ".NETFramework,Version=v6.0" were not found. You might be using an older .NET SDK to target .NET 5.0 or higher. Update Visual Studio and/or your .NET SDK.
同时VS Code界面中没有Generate C# assets for Build and Debug选项。
已尝试操作
- 确认.NET 6 SDK已安装:
% dotnet --list-sdks 3.1.424 [/usr/share/dotnet/sdk] 6.0.405 [/usr/share/dotnet/sdk]
- 在项目根目录创建
global.json指定SDK版本:
{ "sdk": { "version": "6.0.405" } }
- 重启VS Code,但问题未解决。
补充环境信息
已安装的VS Code扩展
% code --list-extensions --show-versions jmrog.vscode-nuget-package-manager@1.1.6 ms-dotnettools.csharp@1.25.4
.NET环境详情
% dotnet --info .NET SDK (reflecting any global.json): Version: 6.0.405 Commit: 27ab36058b Runtime Environment: OS Name: ubuntu OS Version: 20.04 OS Platform: Linux RID: ubuntu.20.04-x64 Base Path: /usr/share/dotnet/sdk/6.0.405/ global.json file: /home/one/github/ion/Migration/Migrator/global.json Host: Version: 6.0.13 Architecture: x64 Commit: 1af80ba017 .NET SDKs installed: 3.1.424 [/usr/share/dotnet/sdk] 6.0.405 [/usr/share/dotnet/sdk] .NET runtimes installed: Microsoft.AspNetCore.App 3.1.30 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App] Microsoft.AspNetCore.App 6.0.13 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App] Microsoft.NETCore.App 3.1.30 [/usr/share/dotnet/shared/Microsoft.NETCore.App] Microsoft.NETCore.App 6.0.13 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
VS Code进程关键片段
从code -s输出中发现,OmniSharp正在使用Mono的MSBuild:
mono --assembly-loader=strict /home/one/.vscode/extensions/ms-dotnettools.csharp-1.25.4-linux-x64/.omnisharp/1.39.4/omnisharp/OmniSharp.exe ...
解决方案
1. 更新C#扩展到最新版本
当前使用的ms-dotnettools.csharp@1.25.4版本较旧,对.NET 6支持不完善。打开VS Code扩展面板,找到**C#**扩展,点击更新到最新版。
2. 配置OmniSharp使用.NET SDK内置的MSBuild
打开VS Code设置(快捷键Ctrl+,),搜索omnisharp.useModernNet并勾选该选项;或者直接在settings.json中添加:
"omnisharp.useModernNet": true
该配置会让OmniSharp使用.NET SDK自带的MSBuild,而非不支持.NET 6的Mono版本。
3. 重启VS Code并验证
完全关闭VS Code后重新打开,等待OmniSharp加载完成。通过输出面板选择OmniSharp日志,查看是否使用了正确的MSBuild路径,例如:
Using MSBuild from /usr/share/dotnet/sdk/6.0.405/
4. 检查项目文件目标框架
确保.csproj文件中的TargetFramework设置为net6.0,示例:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> </PropertyGroup> </Project>
完成以上步骤后,项目应能正常加载,且会出现Generate C# assets for Build and Debug选项。
内容的提问来源于stack exchange,提问作者dman
相关产品推荐
相关产品推荐

