Skip to content

Convert the solution to slnx - #14

Closed
henrikottesorensen wants to merge 2 commits into
Notalib:feature/dotnet10-multitargetfrom
henrikottesorensen:build/slnx
Closed

Convert the solution to slnx#14
henrikottesorensen wants to merge 2 commits into
Notalib:feature/dotnet10-multitargetfrom
henrikottesorensen:build/slnx

Conversation

@henrikottesorensen

@henrikottesorensen henrikottesorensen commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

Stacked on #7. This PR's base is that branch, so the diff and commit list below are only this change. GitHub will retarget it to main automatically when #7 merges.

Chain: #7#14

dotnet sln migrate, plus the two things that fall out of it. 34 lines of GUIDs and per-configuration platform mappings become five lines:

<Solution>
  <Project Path="LibLouis.NET.Tables/LibLouis.NET.Tables.csproj" />
  <Project Path="LibLouis.NET.Test/LibLouis.NET.Test.csproj" />
  <Project Path="LibLouis.NET/LibLouis.NET.csproj" />
</Solution>

It stacks on #7 because of a hard SDK requirement

.slnx needs an SDK of 9.0.200 or later. main's workflow installs 8.0.x only, and SDK 8 cannot read the format at all — it has no migrate verb and fails with MSB4068: The element <Solution> is unrecognized. #7 is what puts a .NET 10 SDK in CI, so this has to follow it.

global.json declares the floor. Being honest about what that buys: on a machine with both SDKs installed, dotnet already picks the newer one, so nothing changes in practice; and an unsatisfiable global.json reports "The command could not be loaded", which is no clearer than MSB4068. The value is that the requirement is written down where someone would look for it, not that the failure becomes obvious.

runtime.liblouis.crosscompile.sln is deleted, not converted

Nothing loads it. The build scripts pack individual .csproj files, and grepping the repository finds no reference to it. It had also never been updated to include the two macOS runtime projects, so it had been quietly wrong for a while. Converting a file nobody opens would only have preserved that.

The only consumer of a solution file is build/build_managed_packages.sh, updated here.

Verified

build_managed_packages.sh builds, tests and packs through the .slnx, on both net8.0 and net10.0. global.json resolves to SDK 10.0.302.

Note for reviewers on older tooling: .slnx needs Visual Studio 17.14+, Rider 2025.1+, or the .NET 9.0.200+ CLI.

🤖 Generated with Claude Code

henrikosorensen and others added 2 commits August 5, 2026 18:50
dotnet sln migrate, plus the two things that fall out of it.

runtime.liblouis.crosscompile.sln is deleted rather than converted.
Nothing loaded it: the build scripts pack individual csproj files, and it
had not been updated to include the macOS runtime projects, so it had
been quietly wrong for some time. Converting a file nobody opens would
only preserve that.

global.json declares an SDK floor of 9.0.200, the first release that
reads slnx. This is mostly documentation: on a machine with both SDKs
dotnet already picks the newer one, so nothing changes in practice. It
does not buy a good error either - an unsatisfiable global.json reports
that the command could not be loaded, which is no clearer than the
MSB4068 an old SDK gives on an slnx. The value is that the requirement is
written down where someone would look for it.

Stacks on the multi-targeting change because that is what puts a .NET 10
SDK in CI. On main the workflow installs 8.0.x only, which cannot read
slnx at all.

Verified: build_managed_packages.sh builds, tests and packs through the
slnx, on both target frameworks.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
It broke the container build:

  A compatible .NET SDK was not found.
  process "/bin/sh -c sh ./build/build_metapackage.sh" exited 145

global.json applies to every dotnet invocation in the repository, and the
container runs sdk:8.0-jammy. I had reasoned about which SDK CI installs
and missed that the container has its own.

Nothing in the container needs a newer SDK. It packs individual project
files, which any SDK handles, and never loads the solution. Only
build_managed_packages.sh does, and that runs on a runner where
setup-dotnet provides .NET 10. The floor is documented instead.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@henrikottesorensen
henrikottesorensen changed the base branch from main to feature/dotnet10-multitarget August 12, 2026 06:27
@henrikottesorensen

Copy link
Copy Markdown
Collaborator Author

Superseded by #24.

The head branch has moved from the henrikottesorensen/LibLouis.NET fork onto Notalib/LibLouis.NET, because GitHub's stacked pull requests require the head and base branches to live in the same repository (gh-stack#46). No commits or content were changed in the move.

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.

2 participants