Skip to content

Commit 692d3aa

Browse files
fix(packaging): publish Fallout.VisualStudio.SolutionPersistence; bump to 10.3 (#107)
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 `<dependency id="Fallout.VisualStudio.SolutionPersistence" ... />` instead of the bogus Microsoft.* reference. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 8e2f273 commit 692d3aa

3 files changed

Lines changed: 9 additions & 3 deletions

File tree

docs/dependencies.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ Central package versions are pinned in `Directory.Packages.props`; this page lin
7474

7575
| Package | Source | Why vendored |
7676
|---|---|---|
77-
| `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. |
77+
| `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. |
7878

7979
## ⚠️ Matt-era personal forks — to replace
8080

src/Fallout.VisualStudio.SolutionPersistence/Fallout.VisualStudio.SolutionPersistence.csproj

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,15 @@
2424
<Nullable>enable</Nullable>
2525
<ImplicitUsings>disable</ImplicitUsings>
2626
<LangVersion>latest</LangVersion>
27-
<IsPackable>false</IsPackable>
2827
<NoWarn>$(NoWarn);CS1591;CS1573;CS8632;RS0016</NoWarn>
2928
<GenerateDocumentationFile>false</GenerateDocumentationFile>
29+
30+
<!-- Pack as Fallout.VisualStudio.SolutionPersistence so consumers of Fallout.SolutionModel
31+
get a working dependency. AssemblyName stays Microsoft.* for type identity / drop-in
32+
compatibility with anything originally written against the upstream package. -->
33+
<PackageId>Fallout.VisualStudio.SolutionPersistence</PackageId>
34+
<Description>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.</Description>
35+
<PackageTags>solution-persistence visualstudio msbuild fallout</PackageTags>
3036
</PropertyGroup>
3137

3238
<PropertyGroup>

version.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/main/src/NerdBank.GitVersioning/version.schema.json",
3-
"version": "10.2",
3+
"version": "10.3",
44
"publicReleaseRefSpec": [
55
"^refs/heads/main$"
66
],

0 commit comments

Comments
 (0)