Assists with updating the Roslyn language server version in the vscode-csharp repository.
Install
mkdir -p .claude/skills/update-roslyn-version && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/2329" && unzip -o skill.zip -d .claude/skills/update-roslyn-version && rm skill.zipInstalls to .claude/skills/update-roslyn-version
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Guide for updating the Roslyn language server version in the vscode-csharp repository. Use this when asked to update Roslyn, bump the Roslyn version, or upgrade the language server version.Key capabilities
- →Discover latest versions from official pipelines
- →Automate Azure DevOps token retrieval
- →Validate Roslyn-tools installation status
- →Sync local repository dependencies
How it works
It utilizes the Azure Developer CLI to authenticate and query build artifact registries, ensuring the local repository matches the latest official build.
Inputs & outputs
When to use update-roslyn-version
- →Updating Roslyn server version
- →Managing vscode-csharp dependencies
- →Syncing with upstream Roslyn builds
About this skill
Update Roslyn Version
This skill describes how to update the Roslyn language server version in the vscode-csharp repository.
Prerequisites
- You must have a local clone of the
dotnet/roslynrepository. Common locations for this include:
C:\Users\<username>\source\repos\roslyn- Next to the current repo directory, e.g.
<current-repo-root>/../roslyn - If unable to find local roslyn repo, ask the user for its location.
- The
roslyn-toolsCLI tool must be installed as a global .NET tool:
Note: After installation, the tool is invoked asdotnet tool install -g Microsoft.RoslynTools --prerelease --add-source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.jsonroslyn-tools(notdotnet roslyn-tools) - You must have authenticated with GitHub for
roslyn-tools:roslyn-tools authenticate
Input Required
- New Roslyn Version (optional): The new version to update to (e.g.,
5.5.0-2.26080.10). If not provided, the version will be auto-discovered from the latest passingdotnet-roslyn-officialpipeline build on main. See Version Auto-Discovery below.
Version Auto-Discovery
If the user does not provide a specific Roslyn version, follow these steps to discover the latest version from the official Roslyn build pipeline.
Prerequisites
- The Azure Developer CLI (
azd) must be installed. See https://learn.microsoft.com/azure/developer/azure-developer-cli/install-azd for platform-specific instructions.- If
azdis missing, don't look for an alternative. Instead, stop and assist the user with installing it.
- If
- You must be authenticated:
azd auth login
Discovery Steps
-
Get an Azure DevOps bearer token:
TOKEN=$(azd auth token --scope "499b84ac-1321-427f-aa17-267ca6975798/.default" --output json | jq -r '.token') -
Find the latest passing main build (pipeline definition ID
327=dotnet-roslyn-official):BUILD_ID=$(curl -s -H "Authorization: Bearer $TOKEN" \ "https://dnceng.visualstudio.com/internal/_apis/build/builds?definitions=327&branchName=refs/heads/main&statusFilter=completed&resultFilter=succeeded&\$top=1&api-version=7.0" \ | jq '.value[0].id') -
Find the "Publish Assets" task log URL from the build timeline:
LOG_URL=$(curl -s -H "Authorization: Bearer $TOKEN" \ "https://dnceng.visualstudio.com/internal/_apis/build/builds/$BUILD_ID/timeline?api-version=7.0" \ | jq -r '.records[] | select(.name == "Publish Assets" and .type == "Task") | .log.url') -
Fetch the log and extract the NuGet package version:
VERSION=$(curl -s -H "Authorization: Bearer $TOKEN" "$LOG_URL" \ | grep -oP 'Microsoft\.CodeAnalysis\.\K\d+\.\d+\.\d+-[\w.]+(?=\.nupkg)' \ | head -1) echo "Discovered version: $VERSION"
The extracted version (e.g., 5.6.0-2.26173.1) is the value to use as the new Roslyn version for the rest of the process.
Process
Step 1: Create a New Branch
Create a new git branch for the update:
git checkout -B update/roslyn-<version>
Replace <version> with the new Roslyn version, using dashes instead of dots for the branch name.
Step 2: Update package.json
Update the defaults.roslyn field in package.json:
"defaults": {
"roslyn": "<new-version>",
...
}
Step 3: Run updateRoslynVersion
This step acquires the new Roslyn packages and ensures they are in the proper feeds:
npm run updateRoslynVersion
This task:
- Downloads all platform-specific Roslyn nuget packages
- Ensures packages are saved to the consumption AzDo artifacts feed
- Runs
installDependenciesto update local dependencies
Note: You may need to install the Azure Artifacts NuGet Credential Provider for interactive authentication.
Step 4: Get the Previous Roslyn Commit SHA
The commit SHAs are stored in the .nuspec files inside the downloaded NuGet packages. After running npm run updateRoslynVersion, the new version's package will be cached locally, but you need to explicitly download the old version to get its commit SHA.
To get the old version's commit SHA:
- First, find the old version number from the current
package.json(before your edit) - look at thedefaults.roslynvalue - Download the old version's package to the local cache:
dotnet restore "C:\Users\<username>\source\repos\vscode-csharp\msbuild\server" /p:PackageName=roslyn-language-server.osx-arm64 /p:PackageVersion=<old-version> --interactive - Extract the commit SHA from the nuspec file:
This will show output like:Get-Content "C:\Users\<username>\source\repos\vscode-csharp\out\.nuget\roslyn-language-server.osx-arm64\<old-version>\roslyn-language-server.osx-arm64.nuspec" | Select-String -Pattern "commit"<repository type="git" url="https://github.com/dotnet/roslyn" branch="main" commit="0e21a3cb684db6ab02646541a780b3278f53d19e" />
Step 5: Get the New Roslyn Commit SHA
After running npm run updateRoslynVersion, the new version's package is already cached. Extract the commit SHA:
Get-Content "C:\Users\<username>\source\repos\vscode-csharp\out\.nuget\roslyn-language-server.osx-arm64\<new-version>\roslyn-language-server.osx-arm64.nuspec" | Select-String -Pattern "commit"
Note: The Azure DevOps artifacts feed web pages require authentication and may not load properly in automated scenarios. Always use the nuspec files from the local package cache.
Step 6: Generate Changelog Entries Using PR Finder
First, locate the local dotnet/roslyn repository. Common locations include:
C:\Users\<username>\source\repos\roslynC:\repos\roslyn
Navigate to the roslyn repository, fetch the latest, and run the pr-finder tool:
cd <path-to-roslyn-repo>
git fetch origin
roslyn-tools pr-finder --start <old-commit-sha> --end <new-commit-sha> --format "o#"
Important: The tool is invoked as roslyn-tools (a global tool), NOT dotnet roslyn-tools.
This will output a list of PRs in the format needed for the changelog:
* <PR title> (PR: [#<number>](https://github.com/dotnet/roslyn/pull/<number>))
Keep the raw output from roslyn-tools pr-finder; you'll use it unchanged in the pull request description in Step 10.
Step 7: Update CHANGELOG.md
Add an entry to CHANGELOG.md under the current version section (e.g., # 2.121.x):
Copy the results from the previous step (should already be formatted correctly).
* Update Roslyn to <new-version> (PR: [#](https://github.com/dotnet/vscode-csharp/pull/))
* <PR title 1> (PR: [#<number>](https://github.com/dotnet/roslyn/pull/<number>))
* <PR title 2> (PR: [#<number>](https://github.com/dotnet/roslyn/pull/<number>))
...
Note: Leave the PR number blank initially (just [#]) - it will be updated after the PR is created.
Step 8: Filter Changelog Entries
Review the changelog entries in CHANGELOG.md and remove any PRs that obviously don't affect VS Code. Remove entries that are:
- Infrastructure/Build changes: CI/CD pipelines, build scripts, Azure DevOps configurations
- Visual Studio-only changes: Features or fixes specific to Visual Studio IDE (not VS Code)
- Test-only changes: Test infrastructure, test fixes that don't affect production code
- Internal tooling: Changes to internal tools not used by the language server
- Documentation-only: README updates, internal docs (unless they document user-facing features)
Keep entries that are:
- Language server protocol (LSP) changes
- Code analysis/diagnostics improvements
- Completion, navigation, refactoring features
- Performance improvements
- Bug fixes that affect language server behavior
- API changes that could affect VS Code extension
Step 9: Commit and Push
git add package.json CHANGELOG.md
git commit -m "Update Roslyn to <new-version>"
git push -u origin update/roslyn-<version>
Step 10: Create Pull Request
Create a pull request on GitHub:
- Title:
Update roslyn to <new-version> - Base:
main - Description/body: the raw, unfiltered output from
roslyn-tools pr-finderin Step 6, including the compare link and full PR list exactly as produced by the tool. Do not apply the Step 8 changelog filtering to the PR description.
Step 11: Update Changelog with PR Number
After the PR is created, note the PR number (e.g., #8941), then:
-
Update the CHANGELOG.md entry to include the actual PR number:
* Update Roslyn to <new-version> (PR: [#8941](https://github.com/dotnet/vscode-csharp/pull/8941)) -
Commit and push the update:
git add CHANGELOG.md git commit -m "Update changelog with PR number" git push
Example
For updating from 5.4.0-2.26077.7 to 5.5.0-2.26080.10:
- Branch:
update/roslyn-5-5-0-2-26080-10 - package.json change:
"roslyn": "5.5.0-2.26080.10" - Find old commit from package metadata for version
5.4.0-2.26077.7 - Find new commit from package metadata for version
5.5.0-2.26080.10 - Run pr-finder in roslyn repo
- Update CHANGELOG.md with the output
- Run
npm run updateRoslynVersion - Create PR titled "Update roslyn to 5.5.0-2.26080.10"
- Update changelog with PR number
Reference PR
See PR #8941 as an example of a Roslyn version update.
Files Modified
package.json- Updatedefaults.roslynversionCHANGELOG.md- Add changelog entry with Roslyn PR list
Troubleshooting
Authentication Issues with updateRoslynVersion
If you encounter authentication errors:
- Install Azure Artifacts Credential Provider
- Run the co
Content truncated.
When not to use it
- →Manual library version updating
- →Non-Roslyn related dependency management
Prerequisites
Limitations
- →Requires active Azure auth
- →Dependent on official pipeline uptime
How it compares
It uses official build pipeline automation for version discovery rather than manual package searching.
Compared to similar skills
update-roslyn-version side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| update-roslyn-version (this skill) | 2 | 2mo | Review | Advanced |
| csharp-developer | 43 | 2mo | No flags | Advanced |
| csharp-pro | 9 | 4mo | No flags | Intermediate |
| orchardcore-module-creator | 1 | 6mo | Review | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by dotnet
View all by dotnet →You might also like
csharp-developer
zenobi-us
Expert C# developer specializing in modern .NET development, ASP.NET Core, and cloud-native applications. Masters C# 12 features, Blazor, and cross-platform development with emphasis on performance and clean architecture.
csharp-pro
sickn33
Write modern C# code with advanced features like records, pattern matching, and async/await. Optimizes .NET applications, implements enterprise patterns, and ensures comprehensive testing. Use PROACTIVELY for C# refactoring, performance optimization, or complex .NET solutions.
orchardcore-module-creator
OrchardCMS
Creates new OrchardCore modules with proper structure, manifest, startup, and patterns. Use when the user needs to create a new module, add content parts, fields, drivers, handlers, or admin functionality.
coding-standards
dotnet
>-
generator.equals
diegofrata
Guidance for using Generator.Equals — a C# source generator for auto-generating Equals, GetHashCode, operators, and Diff/Inequalities methods via attributes.
quality-ci
managedcode
Set up or refine open-source .NET code-quality gates for CI: formatting, `.editorconfig`, SDK analyzers, third-party analyzers, coverage, mutation testing, architecture tests, and security scanning. USE FOR: .NET quality gates in CI; analyzer, coverage, mutation, and architecture-test choices; stand