MacOS(Apple M1 Pro)构建GRPC项目时MSBUILD无法解析工具链
解决Apple M1 Pro上.NET GRPC项目构建时找不到protoc的问题
执行dotnet build时出现以下错误:
mr@bogobox GrpcLab % dotnet build MSBuild version 17.9.8+b34f75857 for .NET Determining projects to restore... All projects are up-to-date for restore. /Users/mr/.nuget/packages/grpc.tools/2.62.0/build/_protobuf/Google.Protobuf.Tools.targets(291,5): error MSB6004: The specified task executable location "/Users/mr/.nuget/packages/grpc.tools/2.62.0/tools/macosx_aarch64/protoc" is invalid. [/Users/mr/temp/dotnetlab/grpclab/GrpcLab/GrpcGreeter/GrpcGreeter.csproj] Build FAILED.
针对Apple M1 Pro(arm64架构)上的这个问题,可尝试以下解决步骤:
升级Grpc.Tools到最新稳定版本
旧版本的Grpc.Tools对Apple Silicon架构的支持可能存在路径识别问题,直接更新到最新版大概率能解决。可以通过命令行更新:dotnet add package Grpc.Tools --version <最新稳定版本号>或者手动修改项目的
.csproj文件,将<PackageReference Include="Grpc.Tools" Version="2.62.0" />中的版本号替换为最新值,之后执行dotnet restore。强制指定构建的运行时架构
让MSBuild明确使用arm64架构构建,执行构建命令时添加运行时参数:dotnet build -r osx-arm64也可以在项目的
.csproj文件中添加全局配置,避免每次构建都加参数:<PropertyGroup> <RuntimeIdentifier>osx-arm64</RuntimeIdentifier> </PropertyGroup>清理NuGet缓存并重新还原依赖
可能是NuGet缓存中的Grpc.Tools包损坏,执行以下命令清理缓存后重新还原:dotnet nuget locals all --clear dotnet restore手动指定protoc和插件路径
检查Grpc.Tools的工具目录,正常情况下Apple Silicon对应的文件夹应该是macosx_arm64而非错误中的macosx_aarch64。如果目录中存在macosx_arm64,可以在.csproj中手动指定工具路径:<PropertyGroup> <ProtocToolPath>/Users/mr/.nuget/packages/grpc.tools/<你的版本号>/tools/macosx_arm64/protoc</ProtocToolPath> <GrpcCsharpPluginToolPath>/Users/mr/.nuget/packages/grpc.tools/<你的版本号>/tools/macosx_arm64/grpc_csharp_plugin</GrpcCsharpPluginToolPath> </PropertyGroup>检查.NET SDK版本
确保使用的.NET SDK是支持Apple Silicon的版本(.NET 6及以上版本原生支持),执行dotnet --version查看版本,若版本过低,升级到最新稳定版。
内容的提问来源于stack exchange,提问作者Lord of the Goo
相关产品推荐
相关产品推荐

