From c6d75758006f877afb86ba2c042fa9fef5ca36df Mon Sep 17 00:00:00 2001 From: Chrison Simtian Date: Fri, 22 May 2026 19:45:57 +1200 Subject: [PATCH] fix(packaging): publish Fallout.VisualStudio.SolutionPersistence; bump to 10.3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fallout.SolutionModel 10.2.24 through 10.2.34 are unrestorable: the wrapper csproj for the vendored SolutionPersistence fork was marked IsPackable=false, so dotnet pack fell back to emitting a dependency on the assembly name (Microsoft.VisualStudio.SolutionPersistence) at the Fallout version (10.2.x). That ID exists on nuget.org (real Microsoft package, max 1.0.52) but the 10.2.x versions don't, so restore fails for any consumer of Fallout.SolutionModel, Fallout.Common, Fallout.Build, Fallout.ProjectModel, or Fallout.Components. Fix: - Make src/Fallout.VisualStudio.SolutionPersistence/ packable as Fallout.VisualStudio.SolutionPersistence (PackageId set explicitly; AssemblyName stays Microsoft.VisualStudio.SolutionPersistence for drop-in type identity). Initial ID reservation (0.0.1-reserve) was uploaded manually to nuget.org to claim the ID under the Fallout.* prefix — see [[project_nuget_prefix_gotcha]]. CI's PushPackageFiles filter only excludes Nuke.*, so the wrapper now flows through. - Bump version.json from 10.2 → 10.3 so the fixed line is clearly delineated from the broken 10.2.24–34 range (which will be unlisted on nuget.org as a follow-up). - Update docs/dependencies.md vendored-source row to note the package now ships to nuget.org alongside the rest of Fallout.*. Fallout.SourceGenerators is unaffected: its ProjectReference to the wrapper uses PrivateAssets="all" and it bundles the DLL into the analyzer payload, so no public Microsoft.* dep ever leaked. Verification: dotnet pack on the wrapper produces a clean nupkg; Fallout.SolutionModel.nuspec now declares `` instead of the bogus Microsoft.* reference. Co-Authored-By: Claude Opus 4.7 (1M context) --- docs/dependencies.md | 2 +- .../Fallout.VisualStudio.SolutionPersistence.csproj | 8 +++++++- version.json | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/dependencies.md b/docs/dependencies.md index 68c698777..39018983f 100644 --- a/docs/dependencies.md +++ b/docs/dependencies.md @@ -74,7 +74,7 @@ Central package versions are pinned in `Directory.Packages.props`; this page lin | Package | Source | Why vendored | |---|---|---| -| `Microsoft.VisualStudio.SolutionPersistence` (assembly identity preserved) | Submodule at `vendor/vs-solutionpersistence/` tracking [`ChrisonSimtian/vs-solutionpersistence`](https://github.com/ChrisonSimtian/vs-solutionpersistence) — our fork of [`matkoch/vs-solutionpersistence`](https://github.com/matkoch/vs-solutionpersistence), which itself forked from [`microsoft/vs-solutionpersistence`](https://github.com/microsoft/vs-solutionpersistence). MIT-licensed; full attribution chain preserved. | Upstream Microsoft package ships only `net472` + `net8.0`, no `netstandard2.0`. Our source generator must target `netstandard2.0` (Roslyn requirement). Matt added netstandard2.0 patches that we now own forward. Compiled into the wrapper project `src/Fallout.VisualStudio.SolutionPersistence/` so we control the build infra without touching the submodule. | +| `Fallout.VisualStudio.SolutionPersistence` (assembly name remains `Microsoft.VisualStudio.SolutionPersistence` for drop-in type identity) — published to nuget.org alongside the rest of `Fallout.*`. | Submodule at `vendor/vs-solutionpersistence/` tracking [`ChrisonSimtian/vs-solutionpersistence`](https://github.com/ChrisonSimtian/vs-solutionpersistence) — our fork of [`matkoch/vs-solutionpersistence`](https://github.com/matkoch/vs-solutionpersistence), which itself forked from [`microsoft/vs-solutionpersistence`](https://github.com/microsoft/vs-solutionpersistence). MIT-licensed; full attribution chain preserved. | Upstream Microsoft package ships only `net472` + `net8.0`, no `netstandard2.0`. Our source generator must target `netstandard2.0` (Roslyn requirement). Matt added netstandard2.0 patches that we now own forward. Compiled into the wrapper project `src/Fallout.VisualStudio.SolutionPersistence/` so we control the build infra without touching the submodule. Packs as `Fallout.VisualStudio.SolutionPersistence` so `Fallout.SolutionModel` consumers get a valid transitive dep on nuget.org. | ## ⚠️ Matt-era personal forks — to replace diff --git a/src/Fallout.VisualStudio.SolutionPersistence/Fallout.VisualStudio.SolutionPersistence.csproj b/src/Fallout.VisualStudio.SolutionPersistence/Fallout.VisualStudio.SolutionPersistence.csproj index f3bb7b729..f8ce146f4 100644 --- a/src/Fallout.VisualStudio.SolutionPersistence/Fallout.VisualStudio.SolutionPersistence.csproj +++ b/src/Fallout.VisualStudio.SolutionPersistence/Fallout.VisualStudio.SolutionPersistence.csproj @@ -24,9 +24,15 @@ enable disable latest - false $(NoWarn);CS1591;CS1573;CS8632;RS0016 false + + + Fallout.VisualStudio.SolutionPersistence + Vendored fork of Microsoft.VisualStudio.SolutionPersistence with netstandard2.0 support. Ships as part of Fallout; the assembly name is unchanged so it's a drop-in for code written against the upstream package. + solution-persistence visualstudio msbuild fallout diff --git a/version.json b/version.json index b1b83ee48..33b4ae2a2 100644 --- a/version.json +++ b/version.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/main/src/NerdBank.GitVersioning/version.schema.json", - "version": "10.2", + "version": "10.3", "publicReleaseRefSpec": [ "^refs/heads/main$" ],