
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 Release
And then you can build your code again.
Related articles

Feb 24, 2025 - 6 min read
When to use records in C#
For several years now, C# has supported Records as a new “type”. Initially only for classes (which is why the class is optional …

Feb 17, 2025 - 3 min read
Create an anti-idle App for Microsoft Teams with .NET
Anti-idle apps for Microsoft Teams and the like are a dime a dozen, but how about creating your own? In this article, I’ll show you …

Feb 10, 2025 - 2 min read
Create QRCodes with .NET and ZXing
QR Codes are a very popular way to pass on information - for example an URL. The QR code can be placed on all kinds of places, for example …
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.
