You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
|`spec/tech-standards/build-system.md`| Documents `net8.0;netstandard2.0`| Update five specific sections (see Spec Update section below) |
21
22
22
23
## Conditional Compilation
23
24
@@ -29,18 +30,58 @@ This guard already applies correctly to net8.0, net9.0, and net10.0.
29
30
No new `#if` directives are required.
30
31
No `#if NET9_0_OR_GREATER` or `#if NET10_0_OR_GREATER` optimisations have been identified as necessary for this changeset.
31
32
33
+
## CI YAML Change
34
+
35
+
The `actions/setup-dotnet@v4` action supports a multi-line scalar for `dotnet-version`.
36
+
Use the following exact syntax in `.github/workflows/ci.yml`:
37
+
38
+
```yaml
39
+
- uses: actions/setup-dotnet@v4
40
+
with:
41
+
dotnet-version: |
42
+
8.0.x
43
+
9.0.x
44
+
10.0.x
45
+
cache: true
46
+
cache-dependency-path: '**/*.csproj'
47
+
```
48
+
49
+
Do not use separate `setup-dotnet` steps for each version — this would break `cache: true` behaviour.
50
+
51
+
## Devcontainer Change
52
+
53
+
The current `.devcontainer/Dockerfile` is based on `mcr.microsoft.com/dotnet/sdk:9.0-bookworm-slim` and installs only the .NET 8.0 *runtime*.
54
+
The Examples project is a developer-facing runnable tool; after changing its target to `net10.0`, it must remain buildable inside the devcontainer.
55
+
56
+
**Resolution (Option A):** Change the base image to `mcr.microsoft.com/dotnet/sdk:10.0-bookworm-slim` and add explicit installation of the 8.0 and 9.0 runtimes using the `dotnet-install.sh` script, so all three runtime versions remain available locally.
57
+
58
+
## Spec Update: Sections to Change in `spec/tech-standards/build-system.md`
59
+
60
+
The following five locations must be updated; all other sections (including the AppVeyor section, lines 137–177, which is already acknowledged as outdated) are out of scope:
-[ ] CI installs .NET SDK 8.0.x, 9.0.x, and 10.0.x
78
+
- [ ] CI installs .NET SDK 8.0.x, 9.0.x, and 10.0.x using a single `setup-dotnet` step with a multi-line `dotnet-version` scalar
79
+
- [ ] `.devcontainer/Dockerfile` uses `sdk:10.0-bookworm-slim` base image with 8.0 and 9.0 runtimes installed
39
80
- [ ] `dotnet build -c Release` succeeds for all target frameworks
40
81
- [ ] `dotnet test` passes on all three modern runtimes (net8.0, net9.0, net10.0)
41
82
- [ ] `dotnet pack` produces a NuGet package containing assemblies for all four targets
42
83
- [ ] No regressions — all existing tests pass on all targets
43
-
-[ ]`spec/tech-standards/build-system.md` updated to reflect the new target frameworks
84
+
- [ ] `spec/tech-standards/build-system.md` updated at the five specific locations listed above
44
85
45
86
## Test Strategy
46
87
@@ -61,18 +102,14 @@ After `dotnet pack`, confirm the `.nupkg` contains `lib/net8.0/`, `lib/net9.0/`,
61
102
62
103
## Risks and Open Questions
63
104
64
-
-**net10.0 SDK availability**: The devcontainer currently uses a .NET 9.0 base image with an additional 8.0 runtime.
65
-
A .NET 10.0 SDK must be available in CI (GitHub Actions `setup-dotnet@v4` supports `10.0.x`) and locally.
66
-
If the devcontainer does not have .NET 10 installed, local builds targeting `net10.0` will fail.
67
-
The CI step is the authoritative build environment; local failure is acceptable during transition.
68
-
69
105
- **BenchmarkDotNet compatibility**: `BenchmarkDotNet` version `0.13.12` (currently referenced) must support net10.0.
70
-
If it does not, the version pin may need updating.
71
-
This should be verified during implementation by attempting a Release build of the benchmarking project.
106
+
Verify during implementation by attempting a Release build of the benchmarking project.
107
+
If `BenchmarkDotNet 0.13.12` fails to build against `net10.0`, upgrade both `BenchmarkDotNet` and `BenchmarkDotNet.Diagnostics.Windows` to the latest stable version as part of this PR and update the version recorded in `spec/tech-standards/build-system.md` accordingly.
72
108
73
109
- **Examples project**: The issue specifies updating to `net10.0` only (single target, not multi-target).
74
110
This is intentional — examples are a developer-facing runnable tool, not a shipped library.
111
+
The devcontainer change (see above) ensures local buildability is preserved.
75
112
76
113
- **Spec update**: `spec/tech-standards/build-system.md` still documents AppVeyor CI.
77
114
That section was already outdated before this issue.
78
-
Only the target framework tables and CI setup sections need updating here; AppVeyor cleanup is out of scope.
115
+
Only the five target framework and prerequisite locations listed above need updating here; AppVeyor cleanup is out of scope.
0 commit comments