Apple M1芯片Mac上VS Code运行.NET Core 3.1项目报错求解
问题根因
.NET Core 3.1 官方未提供ARM64架构原生支持,在Apple M1系列芯片设备上运行该版本必须通过Rosetta 2转译执行x64版本程序。之前开启Rosetta运行VS Code未生效,核心原因是OmniSharp及C#扩展默认优先调用了ARM64版本的dotnet进程,未走x64运行时链路。
全局修改/etc/path把x64版本dotnet路径前置的方案,会导致所有目标版本≥6.0的.NET项目也默认走x64转译,损失ARM原生运行性能,不属于最优方案。Visual Studio for Mac内置了多架构SDK的自动路由逻辑,因此可以无配置自动切换运行环境,这也是同项目在VS中可正常运行、VS Code报错的核心原因。
最优配置方案
不需要修改全局PATH配置,按以下步骤操作即可实现不同版本.NET项目自动匹配对应架构的SDK:
- 确认本地已同时安装ARM64版.NET 6+ SDK、x64版.NET Core 3.1 SDK,x64版本默认安装路径为
/usr/local/share/dotnet/x64,不要调整该路径下的文件位置 - 打开VS Code设置,搜索
OmniSharp: Dotnet Path配置项,将值设置为x64版本dotnet的目录路径/usr/local/share/dotnet/x64 - 打开VS Code的settings.json配置文件(可通过命令面板执行「Preferences: Open User Settings (JSON)」打开),添加以下配置项:
{ "omnisharp.useModernNet": false, "omnisharp.dotnetPath": "/usr/local/share/dotnet/x64", "dotnet.dotnetPath": "/usr/local/share/dotnet/x64" }
- 保存配置后,通过命令面板执行「OmniSharp: Restart OmniSharp」重载服务,重启VS Code即可生效。
配置完成后,OmniSharp加载.NET Core 3.1项目时会自动通过Rosetta转译调用x64版本SDK,不会影响.NET 6+项目调用ARM64原生SDK运行。
内容的提问来源于stack exchange,提问作者Mikhail Tokarev
相关产品推荐
相关产品推荐

