-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathDirectory.Build.props
More file actions
78 lines (67 loc) · 3.83 KB
/
Copy pathDirectory.Build.props
File metadata and controls
78 lines (67 loc) · 3.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<Project>
<!--
Shared multi-target framework list (#189).
The three shipped packages (Celerity.Collections / Celerity.Hashing /
Celerity.Primitives), the test project, and the Native AOT smoke test all
build for this same set of TFMs so they stay in lockstep — bump the list in
one place and every shipped assembly and its verification follow.
Why these three:
- net8.0 — the prior single target; LTS (Nov 2023). Kept so existing
consumers are never dropped.
- net9.0 — required by #189; STS (Nov 2024). Included for consumers still
on the 9.x line during the transition, even though its support
window is short.
- net10.0 — GA Nov 2025, LTS, and the SDK the family already builds with.
Folded in now (the issue's "evaluate net10.0" decision) so
newer-runtime consumers get an assembly compiled against their
own reference pack, ready for future TFM-gated (#if) paths.
Newer-runtime-only optimizations are guarded with #if NET9_0_OR_GREATER /
NET10_0_OR_GREATER; the trim / AOT analyzers and the CS1591 doc gate run on
every TFM. Dev-only, non-shipped projects (Celerity.Benchmarks,
Celerity.Fuzz) deliberately stay single-TFM — they are tools, not packages.
-->
<PropertyGroup>
<CelerityTargetFrameworks>net8.0;net9.0;net10.0</CelerityTargetFrameworks>
</PropertyGroup>
<!--
Shared package-publishing settings (#190).
These apply to every project under src/, but only the three shipped packages
(Celerity.Collections / Celerity.Hashing / Celerity.Primitives) are
<IsPackable>true</IsPackable> — the test / benchmark / fuzz / AOT-smoke
projects all set IsPackable=false, so the symbol-package and SourceLink
settings below are no-ops there and only take effect on the three packages.
Keeping them here (rather than duplicated in three .csproj files) is what
makes the family release in lockstep: change a publishing rule once and all
three packages follow.
Symbol packages (.snupkg):
IncludeSymbols + the snupkg format produce a separate symbol package per
package next to each .nupkg, so `dotnet pack` emits Celerity.*.snupkg
alongside Celerity.*.nupkg. Portable PDBs (the SDK default, pinned here for
clarity) are required for the snupkg format and for SourceLink.
SourceLink (debug-into-source):
Since .NET 8 the SDK bundles the SourceLink host packages and enables them
by default, so no explicit Microsoft.SourceLink.GitHub PackageReference is
needed — it auto-detects the GitHub remote from the repo's git metadata.
PublishRepositoryUrl stamps the repo URL into the package and the PDB;
EmbedUntrackedSources embeds any generated/untracked sources so a stepping
debugger can always resolve them.
Deterministic builds:
Deterministic is already the SDK default. ContinuousIntegrationBuild
additionally normalizes embedded source paths (so the PDB/SourceLink paths
are machine-independent and the build is byte-reproducible) — but it is
turned on ONLY in CI, because normalized paths make a local F5 debugging
experience worse. GitHub Actions sets both CI=true and GITHUB_ACTIONS=true.
-->
<PropertyGroup>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<DebugType>portable</DebugType>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
<RepositoryType>git</RepositoryType>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition="'$(ContinuousIntegrationBuild)' == '' and ('$(CI)' == 'true' or '$(GITHUB_ACTIONS)' == 'true')">
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
</PropertyGroup>
</Project>