Skip to content

aspnetcore8-runtime, aspnetcore9-runtime, aspnetcore10-runtime: Add manifests - #3095

Open
jycr wants to merge 3 commits into
ScoopInstaller:masterfrom
jycr:aspnetcore-runtime
Open

jycr wants to merge 3 commits into
ScoopInstaller:masterfrom
jycr:aspnetcore-runtime

Conversation

@jycr

@jycr jycr commented Oct 12, 2026

Copy link
Copy Markdown

Relates to ScoopInstaller/Extras#18999

Adds portable ASP.NET Core Runtime manifests for the pinned channels 8.0, 9.0 and 10.0, installed from the official ZIP archive (no admin rights required).

Manifest Version
aspnetcore8-runtime 8.0.31
aspnetcore9-runtime 9.0.20
aspnetcore10-runtime 10.0.12
  • The ZIP bundles dotnet.exe, Microsoft.NETCore.App and Microsoft.AspNetCore.App, so it is self-contained.
  • DOTNET_ROOT is set to $dir and $dir is added to PATH.
  • Supports 64bit, 32bit and arm64.
  • checkver is pinned per channel (channel-version == 'X.0'), and autoupdate takes the sha512 from the official releases.json.
  • The latest stable (aspnetcore-runtime) is proposed in ScoopInstaller/Extras:

Checked with checkver.ps1 -Update -ForceUpdate: the regenerated manifests are identical.

  • Use conventional PR title: <manifest-name[@version]|chore>: <general summary of the pull request>
  • I have read the Contributing Guide

@coderabbitai

coderabbitai Bot commented Oct 12, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Summary by CodeRabbit

  • New Features
    • Added package availability for ASP.NET Core Runtime versions 8.0.31, 9.0.20, and 10.0.12.
    • Packages are available for 64-bit, 32-bit, and ARM64 Windows.
    • Installed runtimes integrate with the shared .NET runtime location, and environment settings are configured during installation.
    • Version checks and update downloads follow release information for each supported runtime version. Uninstalling a package preserves runtimes still provided by other installed packages.

Walkthrough

Adds Scoop manifests for ASP.NET Core Runtime versions 8.0.31, 9.0.20, and 10.0.12. Each manifest defines downloads for x64, x86, and ARM64, shared runtime installation behavior, environment settings, version detection, and automatic updates.

Changes

ASP.NET Core Runtime manifests

Layer / File(s) Summary
Runtime manifest definitions
bucket/aspnetcore8-runtime.json, bucket/aspnetcore9-runtime.json, bucket/aspnetcore10-runtime.json
Adds architecture-specific ZIP downloads and hashes, release-metadata version checks, and automatic URL and hash updates for the three runtime versions.
Shared runtime installation and handoff
bucket/aspnetcore8-runtime.json, bucket/aspnetcore9-runtime.json, bucket/aspnetcore10-runtime.json
Links package runtimes into a shared .NET root and configures DOTNET_ROOT and PATH. During uninstall, removes owned links, hands runtime paths to another installed package when available, and removes the shared root when no runtime links remain.

Priority: ➖ Normal

Merge Risk: 🟡 Moderate · up to 46e65

Installing or uninstalling a runtime alongside an SDK can leave DOTNET_ROOT pointing away from the SDK. Resolve that ownership conflict before merging.

Pre-merge checks · Passed 5
Passed Passed checks (5 passed)
Check name Status Explanation
Title check Passed The title clearly identifies the three manifests and states that they add manifests. It is specific, concise, and related to the main changes.
Description check Passed The description provides a clear change summary, lists the manifest versions, documents supported architectures and installation behavior, references the related issue, and marks both template checkli…
Docstring Coverage Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

jycr added 2 commits October 13, 2026 12:46
… side-by-side installation

DOTNET_ROOT was set to each package's own $dir, so installing or removing one
package changed or wiped it for the others. The .NET host only resolves
frameworks located under a single DOTNET_ROOT.

Expose the runtime in a common root, <scoop root>\shared\dotnet, shared by all
.NET runtime packages. Each package keeps its files in its own versioned
directory and only links into the root.

- post_install: junction host\fxr\<ver> and shared\<framework>\<ver>, keeping an
  existing valid link (the ASP.NET Core zip also bundles the .NET runtime, so
  it can overlap with dotnetN-runtime); copy dotnet.exe if missing or older.
- pre_uninstall: unlink only this package's junctions, re-link them to another
  installed package providing the same runtime, remove the root when empty.
- post_uninstall: restore DOTNET_ROOT while the root still exists.
@jycr
jycr force-pushed the aspnetcore-runtime branch from 2556b71 to e092f38 Compare October 13, 2026 10:46
…ide-by-side install and uninstall edge cases

- Compare the full dotnet.exe file version instead of the major only

- Find replacement runtimes in installed version dirs when NO_JUNCTION is set

- Stop recursively deleting the shared dotnet root; remove only empty dirs

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: bb26b0ba-384f-49a3-9771-b8b33782299d
📥 Commits

Reviewing files that changed from the base of the PR and between 2556b71 and 46e65af.

📒 Files selected for processing (3)
  • bucket/aspnetcore10-runtime.json
  • bucket/aspnetcore8-runtime.json
  • bucket/aspnetcore9-runtime.json

Included review availability: This review used your included allowance. Your plan provides up to 2 included reviews per hour; 0 remain after this review.

Comment on lines +40 to +43
"env_add_path": "dotnet-root",
"env_set": {
"DOTNET_ROOT": "$(basedir $global)\\shared\\dotnet"
},

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

🔎 Supported by static analysis

🏁 Script executed:

set -eu
printf '%s\n' '--- PR diff ---'
git diff --stat c83dad2632f5aef48c5ea67406bd69f74218911a1 46e65afa860dfd4fd1b29a0dc1392230a8cc3fb0
git diff --unified=80 c83dad2632f5aef48c5ea67406bd69f74218911a1 46e65afa860dfd4fd1b29a0dc1392230a8cc3fb0 -- \
  bucket/aspnetcore8-runtime.json bucket/aspnetcore9-runtime.json bucket/aspnetcore10-runtime.json \
  bucket/dotnet8-sdk.json bucket/dotnet9-sdk.json bucket/dotnet10-sdk.json
printf '%s\n' '--- runtime manifests at reviewed head ---'
for f in bucket/aspnetcore8-runtime.json bucket/aspnetcore9-runtime.json bucket/aspnetcore10-runtime.json; do
  printf '\n### %s\n' "$f"
  git show 46e65afa860dfd4fd1b29a0dc1392230a8cc3fb0:"$f"
done
printf '%s\n' '--- SDK environment and uninstall declarations ---'
for f in bucket/dotnet8-sdk.json bucket/dotnet9-sdk.json bucket/dotnet10-sdk.json; do
  if git cat-file -e 46e65afa860dfd4fd1b29a0dc1392230a8cc3fb0:"$f" 2>/dev/null; then
    printf '\n### %s\n' "$f"
    git show 46e65afa860dfd4fd1b29a0dc1392230a8cc3fb0:"$f" | rg -n -C 12 -e '"env_add_path"' -e '"env_set"' -e '"post_uninstall"' -e '"pre_uninstall"'
  fi
done
printf '%s\n' '--- relevant manifest references ---'
rg -n -F --glob '*.json' -e '"DOTNET_ROOT"' -e '"dotnet-root"' -e '"shared\\dotnet"' -e '"post_uninstall"' bucket | head -240

Repository: ScoopInstaller/Versions

Length of output: 42590


🏁 Script executed:

set -eu
for f in bucket/aspnetcore8-runtime.json bucket/aspnetcore9-runtime.json bucket/aspnetcore10-runtime.json bucket/dotnet8-sdk.json bucket/dotnet9-sdk.json bucket/dotnet10-sdk.json; do
  printf '\n### %s\n' "$f"
  git show 46e65afa860dfd4fd1b29a0dc1392230a8cc3fb0:"$f" 2>/dev/null || true
done
printf '\n### diff\n'
git diff --unified=30 c83dad2632f5aef48c5ea67406bd69f74218911a1 46e65afa860dfd4fd1b29a0dc1392230a8cc3fb0 -- bucket/aspnetcore8-runtime.json bucket/aspnetcore9-runtime.json bucket/aspnetcore10-runtime.json

Repository: ScoopInstaller/Versions

Length of output: 42807


🌐 Web query:

official Scoop manifest documentation env_set environment variables uninstall behavior

💡 Result:

**Official Scoop manifest docs** are the [App Manifests wiki](https://github.com/ScoopInstaller/Scoop/wiki/App-Manifests). It says `env_set` sets environment variables for the user, or system-wide with `--global`; `uninstaller` runs during both `scoop uninstall` and `scoop update`. ([github.com](https://github.com/ScoopInstaller/Scoop/wiki/App-Manifests))

**Uninstall behavior:** Scoop’s current `master` implementation removes the variable names declared under `env_set` during uninstall—clearing the user or system variable according to install scope, and removing it from the current PowerShell process. ([github.com](https://github.com/ScoopInstaller/Scoop/blob/master/lib/install.ps1))

So `env_set` is not just an install-time setting: Scoop’s implementation also cleans up those variables on uninstall. **Caveat:** cleanup removes the named variables rather than restoring any prior values. The docs describe `env_set`’s purpose, while that cleanup detail is established by the implementation; this source is `master`, not a version-pinned release. ([github.com](https://github.com/ScoopInstaller/Scoop/wiki/App-Manifests))

Citations:

- 1: https://github.com/ScoopInstaller/Scoop/wiki/App-Manifests
- 2: https://github.com/ScoopInstaller/Scoop/blob/master/lib/install.ps1
- 3: https://github.com/ScoopInstaller/Scoop/wiki/App-Manifests

Preserve the SDK-owned DOTNET_ROOT.

The runtime manifests overwrite the SDK manifests' $dir value during installation. During uninstall, post_uninstall also overwrites the value with the shared root when another runtime keeps that root present. The guard only checks whether the shared root exists; it does not check whether an SDK owns DOTNET_ROOT.

The unconditional overwrite can make SDK-only runtimes or apphosts resolve against a shared root without the SDK contents. Make ownership mutually exclusive across installation and uninstall: preserve the SDK's $dir while an SDK is installed, and use the shared runtime root only when no SDK owns DOTNET_ROOT. Apply this policy to all three runtime manifests.

📍 Affects 3 files
  • bucket/aspnetcore10-runtime.json#L40-L43 (this comment)
  • bucket/aspnetcore8-runtime.json#L40-L43
  • bucket/aspnetcore9-runtime.json#L40-L43

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant