Compile your .NET projects with multiple SDKs on GitHub

Compile your .NET projects with multiple SDKs on GitHub

Compile your .NET projects with multiple SDKs on GitHub

The recommended variant for specifying the SDK in .NET is the global.json file. This centrally guarantees that all computers on which the code is compiled ideally have the same SDK installed and use it.

I have now updated my blog schwabencode.com to .NET 10 Preview 1 so that my global.json looks like this:

{
    "sdk": {
        "version": "10.0.100-preview.1.25120.13"
    }
}

Everything can be built locally, but unfortunately not in my GitHub action. This is crashing with the following error:

  Tool 'bundlerminifier.core.tool' is up to date.
  You must install or update .NET to run this application.
  
  App: /home/runner/.nuget/packages/bundlerminifier.core.tool/7.6.2/tools/net9.0/any/dotnet-bundle.dll
  Architecture: x64
  Framework: 'Microsoft.NETCore.App', version '9.0.0' (x64)
  .NET location: /usr/share/dotnet/
  
  The following frameworks were found:
    8.0.13 at [/usr/share/dotnet/shared/Microsoft.NETCore.App]
    10.0.0-preview.1.25080.5 at [/usr/share/dotnet/shared/Microsoft.NETCore.App]

I am using a tooling that requires .NET 9; .NET 9 is also installed on my developer machine, but not on the CI system. This error is typical for using dotnet tools, but also in a .NET preview phase such as we currently have with .NET 10; it is also a typical case with Entity Framework and the EF tooling.

The solution in this case is that we have two SDK versions as a requirement for compilation - and this specification is not supported in global.json. This was simply forgotten in the design.

The solution here is that two SDKs are installed via an external command; in the case of GitHub Actions via actions/setup-dotnet.

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup .NET
        uses: actions/setup-dotnet@v4
        with:
          dotnet-version: | 
            9.x
            10.x

      - name: dotnet restore
        run: dotnet restore

      - name: dotnet build
        run: dotnet build --no-restore --configuration Release

And then you can build your code again.