How to produce a cross-platform binary with Dotnet Core

The dotnet CLI

With the dotnet publish command you just have to add the runtime argument.

# for a linux build
dotnet publish --configuration Release --runtime linux-x64 --self-contained false

# for a windows build
dotnet publish --configuration Release --runtime win-x64 --self-contained false

Argument : runtime

Most interresting runtime :

  • win-x64 -> for windows
  • linux-x64 -> for linux in general
  • linux-musl-x64 -> for linux Alpine or other distributions using musl.
  • linux-arm -> for ARM Single Board Computers like the Odroid/Raspberry Pi

The full list of runtime can be found in the file runtime.json.

More information on the .NET Core RID Catalog.

Argument : self-contained (Bonus)

With --self-contained false the folder don’t include the .NET Core runtime.

+ Cross-platform
+ Small size
+ Use the latest runtime installed on the OS

- Require the runtime installed on the OS
- New version of the runtime may change the behavior of the application

With --self-contained true the folder include the .NET Core runtime.

+ You choose the .NET Core runtime of the application

- Really greater size
- Need to deploy a new version of the application to update .NET Core version.

More information on .NET Core application publishing overview

Discuss on Twitter