
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:
1{
2 "sdk": {
3 "version": "10.0.100-preview.1.25120.13"
4 }
5}Everything can be built locally, but unfortunately not in my GitHub action. This is crashing with the following error:
1 Tool 'bundlerminifier.core.tool' is up to date.
2 You must install or update .NET to run this application.
3
4 App: /home/runner/.nuget/packages/bundlerminifier.core.tool/7.6.2/tools/net9.0/any/dotnet-bundle.dll
5 Architecture: x64
6 Framework: 'Microsoft.NETCore.App', version '9.0.0' (x64)
7 .NET location: /usr/share/dotnet/
8
9 The following frameworks were found:
10 8.0.13 at [/usr/share/dotnet/shared/Microsoft.NETCore.App]
11 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 .
1jobs:
2 build-and-deploy:
3 runs-on: ubuntu-latest
4 steps:
5 - uses: actions/checkout@v4
6
7 - name: Setup .NET
8 uses: actions/setup-dotnet@v4
9 with:
10 dotnet-version: |
11 9.x
12 10.x
13
14 - name: dotnet restore
15 run: dotnet restore
16
17 - name: dotnet build
18 run: dotnet build --no-restore --configuration ReleaseAnd then you can build your code again.
Related articles

- 16 min read
Production Rate Limiting in ASP.NET Core
Most ASP.NET Core rate-limiting examples stop after registering a fixed window. That is enough to demonstrate the middleware, but it is not …

- 11 min read
The Big Decimal Bugfix with .NET 11
For more than two decades, (decimal)1.23 returned 1.23m. It looked correct, it passed every test and it was a polite lie.

- 10 min read
Distroless, Chiseled or Alpine: Choosing a .NET Base Image
Distroless, Chiseled and Alpine are often compared as three equivalent Linux distributions. They are not. Alpine is a distribution built …
Let's Work Together
Looking for an experienced Platform Architect or Engineer for your next project? Whether it's cloud migration, platform modernization or building new solutions from scratch - I'm here to help you succeed.
