From 90222ce4d43311f6556eae266766e09c2ea18553 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Wed, 14 Jan 2026 14:04:17 -0400 Subject: [PATCH 1/5] dotnetCorePackages.dotnet_10.packages: add NativeAOT package This packages is already included with the binary SDK. --- pkgs/development/compilers/dotnet/packages.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkgs/development/compilers/dotnet/packages.nix b/pkgs/development/compilers/dotnet/packages.nix index ea526b2212a5..756343e08258 100644 --- a/pkgs/development/compilers/dotnet/packages.nix +++ b/pkgs/development/compilers/dotnet/packages.nix @@ -114,6 +114,9 @@ let (mkPackage "runtime.${targetRid}.Microsoft.NETCore.DotNetHost" runtime.version) (mkPackage "runtime.${targetRid}.Microsoft.NETCore.DotNetHostPolicy" runtime.version) (mkPackage "runtime.${targetRid}.Microsoft.NETCore.DotNetHostResolver" runtime.version) + ] + ++ lib.optionals (lib.versionAtLeast runtime.version "10") [ + (mkPackage "Microsoft.NETCore.App.Runtime.NativeAOT.${targetRid}" runtime.version) ]; }; From 5cb866cd72fe54b4a8e3caaf56a6b75a6c2e4ad2 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Wed, 14 Jan 2026 14:07:55 -0400 Subject: [PATCH 2/5] dotnet-sdk_10: add Microsoft.AspNetCore.App.Internal.Assets to packages --- pkgs/development/compilers/dotnet/update.sh | 6 ++++++ pkgs/development/compilers/dotnet/versions/10.0.nix | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/pkgs/development/compilers/dotnet/update.sh b/pkgs/development/compilers/dotnet/update.sh index 132ea56874bc..2be0a8843ba9 100755 --- a/pkgs/development/compilers/dotnet/update.sh +++ b/pkgs/development/compilers/dotnet/update.sh @@ -128,6 +128,12 @@ aspnetcore_packages () { Microsoft.AspNetCore.App.Ref ) + if versionAtLeast "$version" 10; then + pkgs+=( + Microsoft.AspNetCore.App.Internal.Assets + ) + fi + generate_package_list "$version" ' ' "${pkgs[@]}" } diff --git a/pkgs/development/compilers/dotnet/versions/10.0.nix b/pkgs/development/compilers/dotnet/versions/10.0.nix index b5afc79b4c03..ab60243c61b8 100644 --- a/pkgs/development/compilers/dotnet/versions/10.0.nix +++ b/pkgs/development/compilers/dotnet/versions/10.0.nix @@ -14,6 +14,11 @@ let version = "10.0.2"; hash = "sha512-MeDkxsB9ir694B2z0nIG7ZZ6DISLmbU7aOwCusO6AadYjitxjv+e9TuY1Y0ijwuYNjxukBIj45nF/fCEg6CGHw=="; }) + (fetchNupkg { + pname = "Microsoft.AspNetCore.App.Internal.Assets"; + version = "10.0.2"; + hash = "sha512-v9Au9ZSo3ZOe77StttCPCtOZkY7xSFXSyyWMR9Y0Kx3ZKegVp4zg7TJwz4osTgQp7EKyXlbDpvjUbgly51XbmA=="; + }) (fetchNupkg { pname = "Microsoft.NETCore.DotNetAppHost"; version = "10.0.2"; From 537368d3cb78bcaab8bf2134c570014fb09e51be Mon Sep 17 00:00:00 2001 From: David McFarland Date: Thu, 15 Jan 2026 15:01:41 -0400 Subject: [PATCH 3/5] dotnet/wrapper: inherit meta.broken --- pkgs/development/compilers/dotnet/wrapper.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/development/compilers/dotnet/wrapper.nix b/pkgs/development/compilers/dotnet/wrapper.nix index e4cf6e158f71..1e66c4dbd0de 100644 --- a/pkgs/development/compilers/dotnet/wrapper.nix +++ b/pkgs/development/compilers/dotnet/wrapper.nix @@ -33,6 +33,7 @@ stdenvNoCC.mkDerivation (finalAttrs: { license maintainers platforms + broken ; }; From cb2ca79bd0ef2c00d5c518c359d8e25bf34f9c28 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Thu, 15 Jan 2026 15:07:04 -0400 Subject: [PATCH 4/5] dotnet: improve package fallbacks In the combined SDK packages, include any packages from the binary SDKs that aren't available in source builds. This covers the previous ILCompiler case, but also new ones like Microsoft.AspNetCore.App.Internal.Assets. --- pkgs/development/compilers/dotnet/default.nix | 117 ++++++++++-------- .../development/compilers/dotnet/packages.nix | 4 +- 2 files changed, 65 insertions(+), 56 deletions(-) diff --git a/pkgs/development/compilers/dotnet/default.nix b/pkgs/development/compilers/dotnet/default.nix index 9e1f248e61cd..1519f5562271 100644 --- a/pkgs/development/compilers/dotnet/default.nix +++ b/pkgs/development/compilers/dotnet/default.nix @@ -100,71 +100,77 @@ let # combine an SDK with the runtime/packages from a base SDK combineSdk = - base: overlay: - if (overlay.runtime.version != base.runtime.version) then - throw "combineSdk: unable to combine ${overlay.name} with ${base.name} because runtime versions don't match (${overlay.runtime.version} != ${base.runtime.version})" + base: fallback: + if (fallback.runtime.version != base.runtime.version) then + throw "combineSdk: unable to combine ${fallback.name} with ${base.name} because runtime versions don't match (${fallback.runtime.version} != ${base.runtime.version})" + else if base.meta.broken then + fallback else - pkgs.callPackage ./wrapper.nix { } "sdk" ( - (pkgs.combinePackages [ - base.runtime - base.aspnetcore - (overlay.overrideAttrs (old: { - passthru = old.passthru // { - inherit (base) - packages - targetPackages - ; - }; - })) - ]).unwrapped.overrideAttrs - (old: { - name = overlay.unwrapped.name; - # resolve symlinks so DOTNET_ROOT is self-contained - postBuild = '' - mv "$out"/share/dotnet{,~} - cp -Lr "$out"/share/dotnet{~,} - rm -r "$out"/share/dotnet~ - '' - + old.postBuild; - passthru = - old.passthru - // ( - let - # if only overlay has a working ILCompiler, use it - hostRid = pkgs.systemToDotnetRid base.stdenv.hostPlatform.system; - hasILCompiler = base.hasILCompiler || overlay.hasILCompiler; - packageName = "runtime.${hostRid}.Microsoft.DotNet.ILCompiler"; - packages = - if !base.hasILCompiler && overlay.hasILCompiler then - lib.filter (x: x.pname != packageName) base.packages - ++ lib.filter (x: x.pname == packageName) overlay.packages - else - base.packages; - in - { - inherit hasILCompiler packages; + let + withBaseRuntimes = + if fallback.version == base.version then + base.unwrapped + else + (pkgs.combinePackages [ + base.runtime + base.aspnetcore + fallback + ]).unwrapped.overrideAttrs + (old: { + name = fallback.unwrapped.name; + # resolve symlinks so DOTNET_ROOT is self-contained + postBuild = '' + mv "$out"/share/dotnet{,~} + cp -Lr "$out"/share/dotnet{~,} + rm -r "$out"/share/dotnet~ + '' + + old.postBuild; + passthru = old.passthru // { inherit (base) - targetPackages runtime aspnetcore ; - inherit (overlay.unwrapped) + inherit (fallback.unwrapped) pname version ; - } - ); - }) - ); + }; + }); + + withFallbackPackages = withBaseRuntimes.overrideAttrs (old: { + passthru = + old.passthru + // ( + let + hostRid = pkgs.systemToDotnetRid base.stdenv.hostPlatform.system; + hasILCompiler = base.hasILCompiler || fallback.hasILCompiler; + packageName = "runtime.${hostRid}.Microsoft.DotNet.ILCompiler"; + mergePackages = + a: b: + let + names = lib.genAttrs' a (p: lib.nameValuePair p.pname null); + in + a ++ lib.filter (p: !lib.hasAttr p.pname names) b; + packages = mergePackages base.packages fallback.packages; + targetPackages = lib.mapAttrs ( + name: value: mergePackages value fallback.targetPackages.${name} + ) base.targetPackages; + in + { + inherit hasILCompiler packages targetPackages; + } + ); + }); + in + pkgs.callPackage ./wrapper.nix { } "sdk" withFallbackPackages; in pkgs // rec { # use binary SDK here to avoid downgrading feature band - sdk_8_0_1xx = if !pkgs.dotnet_8.vmr.meta.broken then pkgs.dotnet_8.sdk else pkgs.sdk_8_0_1xx-bin; - sdk_9_0_1xx = if !pkgs.dotnet_9.vmr.meta.broken then pkgs.dotnet_9.sdk else pkgs.sdk_9_0_1xx-bin; - sdk_10_0_1xx = - if !pkgs.dotnet_10.vmr.meta.broken then pkgs.dotnet_10.sdk else pkgs.sdk_10_0_1xx-bin; + sdk_8_0_1xx = combineSdk pkgs.dotnet_8.sdk pkgs.sdk_8_0_1xx-bin; + sdk_9_0_1xx = combineSdk pkgs.dotnet_9.sdk pkgs.sdk_9_0_1xx-bin; + sdk_10_0_1xx = combineSdk pkgs.dotnet_10.sdk pkgs.sdk_10_0_1xx-bin; # source-built SDK only exists for _1xx feature band # https://github.com/dotnet/source-build/issues/3667 sdk_8_0_4xx = combineSdk sdk_8_0_1xx pkgs.sdk_8_0_4xx-bin; @@ -172,9 +178,10 @@ pkgs sdk_8_0 = sdk_8_0_4xx; sdk_9_0 = sdk_9_0_3xx; sdk_10_0 = sdk_10_0_1xx; - sdk_8_0-source = sdk_8_0_1xx; - sdk_9_0-source = sdk_9_0_1xx; - sdk_10_0-source = sdk_10_0_1xx; + sdk_8_0-source = if !pkgs.dotnet_8.vmr.meta.broken then pkgs.dotnet_8.sdk else pkgs.sdk_8_0_1xx-bin; + sdk_9_0-source = if !pkgs.dotnet_9.vmr.meta.broken then pkgs.dotnet_9.sdk else pkgs.sdk_9_0_1xx-bin; + sdk_10_0-source = + if !pkgs.dotnet_10.vmr.meta.broken then pkgs.dotnet_10.sdk else pkgs.sdk_10_0_1xx-bin; runtime_8_0 = sdk_8_0.runtime; runtime_9_0 = sdk_9_0.runtime; runtime_10_0 = sdk_10_0.runtime; diff --git a/pkgs/development/compilers/dotnet/packages.nix b/pkgs/development/compilers/dotnet/packages.nix index 756343e08258..6be556fe204c 100644 --- a/pkgs/development/compilers/dotnet/packages.nix +++ b/pkgs/development/compilers/dotnet/packages.nix @@ -94,8 +94,10 @@ let (mkPackage "Microsoft.DotNet.ILCompiler" runtime.version) (mkPackage "Microsoft.NET.ILLink.Tasks" runtime.version) (mkPackage "Microsoft.NETCore.App.Crossgen2.${hostRid}" runtime.version) - (mkPackage "runtime.${hostRid}.Microsoft.DotNet.ILCompiler" runtime.version) ] + ++ lib.optional vmr.hasILCompiler ( + mkPackage "runtime.${hostRid}.Microsoft.DotNet.ILCompiler" runtime.version + ) ++ lib.optionals (lib.versionOlder runtime.version "9") [ (mkPackage "Microsoft.NETCore.DotNetHost" runtime.version) (mkPackage "Microsoft.NETCore.DotNetHostPolicy" runtime.version) From 67d167a0e98951792e9d1b1dab3568e767e1bb15 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Thu, 15 Jan 2026 15:18:59 -0400 Subject: [PATCH 5/5] ersatztv: remove dependency on Microsoft.AspNetCore.App.Internal.Assets --- pkgs/by-name/er/ersatztv/nuget-deps.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pkgs/by-name/er/ersatztv/nuget-deps.json b/pkgs/by-name/er/ersatztv/nuget-deps.json index 84491619138b..e4c862ee5b5f 100644 --- a/pkgs/by-name/er/ersatztv/nuget-deps.json +++ b/pkgs/by-name/er/ersatztv/nuget-deps.json @@ -309,11 +309,6 @@ "version": "5.0.0", "hash": "sha256-THQ8Z7DAoMDEqAS7feAmAt82NvU7H90Y+jYwC7NwL+0=" }, - { - "pname": "Microsoft.AspNetCore.App.Internal.Assets", - "version": "10.0.2", - "hash": "sha256-nh+JRXHTI01RUDFeEw4yep4iMxci5R7zKyRX2Tkd/mc=" - }, { "pname": "Microsoft.AspNetCore.Authentication.JwtBearer", "version": "10.0.1",