Skip to content

Update the instructions for the SDK-style projects, central package management, C# 14 and dotnet build - #69

Closed
xperiandri wants to merge 20 commits into
mrlacey:mainfrom
xperiandri:chain/instructions
Closed

xperiandri wants to merge 20 commits into
mrlacey:mainfrom
xperiandri:chain/instructions

Conversation

@xperiandri

@xperiandri xperiandri commented Oct 29, 2026 •

Copy link
Copy Markdown

Summary

Stacked on #58 and #54. The branch merges both, so besides the commits of #54 the commits that are new here are the merge and 5 others.

This pull request is the last link of the chain. It merges the AI agent files (#54) with the modernization branch (#58 and the pull requests before it), and updates what only makes sense when both are there: .github/copilot-instructions.md for the SDK-style projects, central package management, C# 14 and dotnet build, and .github/workflows/copilot-setup-steps.yml, which restores with dotnet restore. Those files come with #54, which is why these edits are not part of the pull requests they describe. The extension code and the projects do not change.

Chain, changes, things to know and verification

Chain

This pull request is part of a chain of small pull requests that all target main. After #53 the chain has two branches that do not depend on each other: the AI agent files (#54) and the modernization of the build (#55 to #58). The last pull request (#69) merges both and updates the instructions, which live in the files of the AI branch. The branch of each pull request contains the commits of the ones it is stacked on, so GitHub lists those commits here until they are merged. Merge in this order and review only the commits that are new in each pull request:

  1. Switch the solution to the .slnx format #53 – Switch the solution to the .slnx format (first in the chain, no dependencies)
  2. Add instructions, skills and MCP configuration for AI coding agents #54 – Add instructions, skills and MCP configuration for AI coding agents (stacked on Switch the solution to the .slnx format #53)
  3. Convert the projects to the SDK style #55 – Convert the projects to the SDK style (stacked on Switch the solution to the .slnx format #53)
  4. Move the package versions to central package management #56 – Move the package versions to central package management (stacked on Convert the projects to the SDK style #55)
  5. Set the C# language version to 14 #57 – Set the C# language version to 14 (stacked on Move the package versions to central package management #56)
  6. Build with dotnet build #58 – Build with dotnet build (stacked on Set the C# language version to 14 #57)
  7. Update the instructions for the SDK-style projects, central package management, C# 14 and dotnet build #69 – Update the instructions for the SDK-style projects, central package management, C# 14 and dotnet build (stacked on Build with dotnet build #58 and Add instructions, skills and MCP configuration for AI coding agents #54) – this pull request

Changes

  • The merge commit joins the two branches. The only conflict was the list of solution items in StringResourceVisualizer.slnx: the merged file lists the items of both branches.
  • copilot-setup-steps.yml restores with dotnet restore and no longer sets up MSBuild (the same change that the dotnet build pull request makes in the build workflow).
  • .github/copilot-instructions.md describes the SDK-style projects (a new .cs file needs no entry in the project, F5 needs Visual Studio 2026 18.5 or later), says where the package versions are, names the language version 14, and gives dotnet build as the build command with the MSBuild of Visual Studio as the alternative. These are the four instruction commits that were part of the pull requests before; the text did not change.

Things to know

  • If you take only some of the pull requests, take this one last or skip it: with only the AI branch the instructions still describe the old projects, and with only the modernization branch there are no instructions to update.
  • The result of the whole chain is the same tree as before the chain was split in two branches; nothing was added or removed.

Verification

  • The tree of this branch is identical to the tree of the earlier tip of the chain that had every step in one line (git diff between them is empty), so the builds of that tip apply.
  • CI: the workflows of this repository wait for the approval of a maintainer on a pull request from a fork, so the commit ran in a fork on a clean windows-2022 runner: Build builds the solution with dotnet build and runs the 4 tests, which pass. Copilot Setup Steps passes. As on the unchanged main (run), the step Publish Test Results fails there: the third-party action EnricoMi/publish-unit-test-result-action finds no Python interpreter on the image. This pull request neither causes nor changes it.
  • Not verified: running the extension (F5, the Experimental instance).

🤖 Generated with Claude Code

xperiandri and others added 20 commits October 27, 2026 02:21
`dotnet sln migrate` produced `StringResourceVisualizer.slnx` from `StringResourceVisualizer.sln`, and the old file is removed. The projects and the solution items are the same. The project ids are the ones of the old solution, which is what Visual Studio writes into the file itself. The `.slnx` format is XML, much shorter than the `.sln`, and designed to reduce merge conflicts (https://devblogs.microsoft.com/visualstudio/new-simpler-solution-file-format/).

Building it needs the .NET SDK 9.0.200 or later, or MSBuild from Visual Studio or Build Tools 17.13 or later.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
`.github/copilot-instructions.md` is the single source for GitHub Copilot, Claude Code and other agents: the build and test commands, the structure, how the adornments work, the parts that belong to the original author, the rules for Visual Studio extensions and the C# guidelines. `CLAUDE.md` imports it and `AGENTS.md` points to it.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
`create-pr-description.prompt.md` compares the branch with `origin/main` and fills in the pull request template. This repository has no template, so the prompt falls back to a default structure.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
A custom agent for the extension code, based on `madskristensen/CustomAgents`. It refers to the project instructions and to the skills instead of repeating them.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Six skills of `madskristensen/vs-agent-plugins` (commit e971073e2163d4bc66d3e455e102c316e01c94c6) that apply to this extension: `handling-async-threading`, `handling-extension-errors`, `adding-editor-adornments`, `listening-text-view-events`, `adding-options-settings` and `handling-solution-events`. The content is unchanged. The Apache License 2.0 of the upstream repository comes with them, and `README.md` names the source.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Git cannot store a Windows junction, so `Directory.Build.targets` creates it when Visual Studio loads the project, and `.gitignore` excludes it. A command-line build skips the target. `Directory.Build.targets` is a solution item.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
`.claude/settings.json` registers the `vs-agent-plugins` marketplace and enables `vs-extensibility-skills`, the whole catalogue of 40 skills. If Claude Code does not offer to install it, `claude plugin install vs-extensibility-skills@vs-agent-plugins --scope project` does.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The job runs on `windows-2022`: the VSIX builds only with the MSBuild of Visual Studio, and the extension targets Visual Studio 2022. The integrated firewall of the agent is not compatible with Windows, so the agent runs without it.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
`.mcp.json` lists `GitHub` for Visual Studio and Claude Code, and `Microsoft Learn` for Claude Code only, because Visual Studio bundles that server itself.

The GitHub server does not support the OAuth dynamic client registration that Claude Code needs, so `.claude/scripts/github-mcp-headers.ps1` passes it the token that Git Credential Manager already stores. `.mcp.json` is a solution item.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Both projects use `Microsoft.NET.Sdk` with `net481` now, and `VSSDKBuildToolsAutoSetup` with `Microsoft.VSSDK.BuildTools` 18.5 builds the VSIX. The source files are included by globbing; the extension project excludes the folder of the test project, which lies inside its own folder. `Properties\AssemblyInfo.cs` stays, because the version comes from the `Vsix` constants, and the output stays in `bin\Debug\` and `bin\Release\`.

The signing target is called `SignAndCopyVsix` and runs after `Build`. As `AfterBuild` it would be replaced by the SDK targets and never run.

The packages and their versions are the same, apart from the added `Microsoft.VSSDK.BuildTools`.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Visual Studio 2026 18.5 and later deploys an SDK-style VSIX project to the Experimental instance on F5 only when the solution has a `<Deploy>` element for it.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
`Directory.Packages.props` holds the version of each of the 19 packages, and the two projects name the packages only. The versions are the ones the projects had, so the resolved packages (154 for the extension, 162 for the tests) are the same as before.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
`Directory.Build.props` sets `LangVersion` to 14.0 for both projects; it was 12.0. A development machine needs the .NET SDK 10 or Visual Studio 2026 for it. The code compiles to the same types and methods as with 12.0, with the same warnings.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
New files need no entry in the project any more, only a file that goes into the VSIX needs a `Content` item. The .NET Framework 4.8.1 targeting pack is not needed, the signing target has a new name, and F5 needs Visual Studio 2026 18.5 or later.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The package versions are in `Directory.Packages.props` now.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The language version is 14.0 now, and the instructions say what builds it.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The build command is `dotnet build` now; the MSBuild of Visual Studio is mentioned as the alternative that gives the same VSIX.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
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.

1 participant