VSCode Omnisharp无法找到Chocolatey安装的.NET Framework 4.7.1开发包
问题现象
已完成Unity与VSCode的适配配置,但Omnisharp日志抛出如下错误:
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(1217,5):
Error: The reference assemblies for .NETFramework,Version=v4.7.1 were not found.
To resolve this, install the Developer Pack (SDK/Targeting Pack) for this framework
version or retarget your application.
You can download .NET Framework Developer Packs at
https://aka.ms/msbuild/developerpacks
通过Chocolatey执行了以下命令(注:原命令存在重复输入笔误,已修正):
choco install dotnet choco install netfx-4.8-devpack
重启系统后报错依旧,怀疑VSCode无法识别Chocolatey的安装路径。本地已安装的Chocolatey包列表(choco list --localonly输出):
chocolatey-compatibility.extension 1.0.0 chocolatey-core.extension 1.4.0 chocolatey-dotnetfx.extension 1.0.1 chocolatey-visualstudio.extension 1.10.2 chocolatey-windowsupdate.extension 1.0.5 dotnet-7.0-sdk 7.0.202 dotnet-7.0-sdk-2xx 7.0.202 dotnet-sdk 7.0.202 DotNet4.5.2 4.5.2.20140902 dotnetfx 4.8.0.20220524
问题排查
- 缺失对应版本的目标包:从本地包列表可见,仅安装了.NET Framework 4.8运行时(
dotnetfx)和4.5.2版本,未安装4.7.1的Developer Pack。netfx-4.8-devpack是4.8版本的开发包,无法替代4.7.1的引用集。 - 路径识别验证:Chocolatey安装的.NET Framework开发包默认路径为
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework,打开该目录检查是否存在v4.7.1文件夹,若无则确认未安装对应包。
解决方案
方案1:安装.NET Framework 4.7.1 Developer Pack
通过Chocolatey安装对应版本的目标包:
choco install netfx-4.7.1-devpack
安装完成后重启VSCode,重新加载Unity项目即可。
方案2:切换Unity项目的API兼容级别至.NET 4.8
若不想安装4.7.1,可修改Unity项目配置适配已安装的4.8版本:
- 打开Unity编辑器,依次进入
Edit > Project Settings > Player - 在
Other Settings的Configuration区域,将Api Compatibility Level设置为.NET 4.x - 右键Unity项目的
Assets文件夹,选择Open C# Project重新生成VSCode项目文件
方案3:手动配置Omnisharp的MSBuild路径(路径识别异常时)
若确认已安装4.7.1开发包但Omnisharp仍无法识别,可手动指定MSBuild路径:
- 打开VSCode设置(快捷键
Ctrl+,) - 搜索
omnisharp.msbuild.path,设置为MSBuild的完整路径(示例:C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\MSBuild.exe) - 确保
omnisharp.useModernNet设置为false(Unity依赖.NET Framework而非.NET Core/.NET 5+) - 重启VSCode并重新加载项目
内容的提问来源于stack exchange,提问作者Michael Moreno

