<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Amrut</title>
    <description>The latest articles on DEV Community by Amrut (@amrup).</description>
    <link>https://dev.to/amrup</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3787974%2F84cd5787-7e4e-452a-98da-bd08a2900cab.png</url>
      <title>DEV Community: Amrut</title>
      <link>https://dev.to/amrup</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/amrup"/>
    <language>en</language>
    <item>
      <title>Fixing Grpc.Core ARM64 dylib Error in Azure Functions on Apple Silicon (2026 Fix)</title>
      <dc:creator>Amrut</dc:creator>
      <pubDate>Tue, 24 Feb 2026 01:03:01 +0000</pubDate>
      <link>https://dev.to/amrup/fixing-grpccore-arm64-dylib-error-in-azure-functions-on-apple-silicon-2026-fix-417n</link>
      <guid>https://dev.to/amrup/fixing-grpccore-arm64-dylib-error-in-azure-functions-on-apple-silicon-2026-fix-417n</guid>
      <description>&lt;p&gt;If you're developing Azure Functions using the .NET isolated worker model (.NET 8, .NET 9, or even preview .NET 10) on a Mac with Apple Silicon and you run func start, you've almost certainly seen this exact error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[2026-02-22T20:18:22.336Z] Grpc.Core: Error loading native library. Not found in any of the possible locations: 
/Users/.../bin/output/.azurefunctions/libgrpc_csharp_ext.arm64.dylib,
.../runtimes/osx-arm64/native/libgrpc_csharp_ext.arm64.dylib,
.../../../runtimes/osx-arm64/native/libgrpc_csharp_ext.arm64.dylib.

Value cannot be null. (Parameter 'provider')
Host startup operation has been canceled
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This issue has existed since 2023 and, as of February 2026, is still not fixed in Azure Functions Core Tools (4.x) or the .NET worker. It affects every isolated-worker function on ARM64 Macs because the legacy Grpc.Core library (used internally by the Functions host-worker communication) never shipped official osx-arm64 binaries.&lt;br&gt;
The good news? There's a battle-tested, 2-minute fix that works reliably in 2026.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why This Happens
&lt;/h2&gt;

&lt;p&gt;The Azure Functions runtime looks for libgrpc_csharp_ext.arm64.dylib in the .azurefunctions folder (and a few fallback paths).&lt;br&gt;
Contrib.Grpc.Core.M1 is a tiny community package that ships the correctly compiled ARM64 .dylib.&lt;br&gt;
An MSBuild target then copies it to the exact location the runtime expects.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step-by-Step Fix (Works for Regular Functions + Durable Functions)
&lt;/h2&gt;
&lt;h2&gt;
  
  
  1. Add the NuGet Package
&lt;/h2&gt;

&lt;p&gt;Open your main function project’s .csproj file (e.g. CenchatFileUpload.csproj) and add this inside any :&lt;br&gt;
&lt;code&gt;&amp;lt;PackageReference Include="Contrib.Grpc.Core.M1" Version="2.46.7" /&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: 2.46.7 is the latest version (March 2024) and works great.&lt;br&gt;
Microsoft’s official Durable Functions docs (updated May 2025) recommend pinning to 2.41.0 for extensions projects — you can use either, but 2.46.7 is fine for almost everyone.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you have a separate extensions.csproj (common with Durable Functions or when using many Worker.Extensions.* packages), add the reference there too.&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Add the MSBuild Copy Target
&lt;/h2&gt;

&lt;p&gt;Still in the same .csproj file, add this after the  (but still inside ):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;Target Name="CopyGrpcNativeAssetsToOutDir" AfterTargets="Build"&amp;gt;
  &amp;lt;ItemGroup&amp;gt;
    &amp;lt;NativeAssetToCopy Condition="$([MSBuild]::IsOSPlatform('OSX'))" 
                       Include="$(OutDir)runtimes/osx-arm64/native/*" /&amp;gt;
  &amp;lt;/ItemGroup&amp;gt;
  &amp;lt;Copy SourceFiles="@(NativeAssetToCopy)" 
        DestinationFolder="$(OutDir).azurefunctions/runtimes/osx-arm64/native" /&amp;gt;
&amp;lt;/Target&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This target runs automatically after every build and copies the .dylib into the hidden .azurefunctions folder that func start actually uses.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Clean + Rebuild
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dotnet clean
dotnet build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Run the Function Host Bash
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should now see the host start successfully without any gRPC errors.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verification
&lt;/h2&gt;

&lt;p&gt;After building, check that the file exists:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ls bin/Debug/net8.0/.azurefunctions/runtimes/osx-arm64/native/
# or wherever your OutDir points (e.g. bin/output/.azurefunctions/...)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;This workaround has saved countless macOS .NET developers over the last three years. It’s clean, reproducible, and doesn’t require any runtime hacks.&lt;br&gt;
Hopefully Microsoft will eventually ship native arm64 support for the legacy gRPC bits or fully migrate to Grpc.AspNetCore, but until that day comes, Contrib.Grpc.Core.M1 + the copy target is the gold standard.&lt;br&gt;
Did this fix work for you? Drop a comment below with your Core Tools version, .NET version, and macOS version — happy to help troubleshoot any follow-up errors!&lt;/p&gt;

</description>
      <category>azurefunctions</category>
      <category>dotnet</category>
      <category>arm64</category>
      <category>m4</category>
    </item>
  </channel>
</rss>
