Skip to content
| Marketplace
Sign in
Visual Studio Code>Debuggers>.NET WorkbenchNew to Visual Studio Code? Get it now.
.NET Workbench

.NET Workbench

Efthymios Koktsidis

|
2 installs
| (0) | Free
Build, run, debug and attach .NET solutions, run and debug tests, format code, manage EF Core migrations, NuGet packages, user secrets and dev tunnels, and run the repo's own scripts from VS Code.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

.NET Workbench

Build, run, debug and test .NET solutions from VS Code, without C# Dev Kit.
Tests, NuGet packages, EF Core migrations, user secrets, code formatting, dev tunnels and the repo's own scripts each get their own panel.
.NET Workbench is built to stay light, for laptops that struggle with a full IDE.

Features

The sidebar's Tools buttons open the panels, and so do the .NET Workbench: Open … commands in the Command Palette.

Run, debug and attach

  • The sidebar picks the startup project and its launch profile, kept per solution.
    .NET Workbench: Refresh finds the solution and its projects again.
  • Run starts the startup project with the chosen launch profile, after a build.
    One app runs at a time, so a second Run or Debug restarts it.
  • Debug builds the startup project, then starts it under the C# debugger.
  • Stop ends the app, and .NET Workbench: Restart App starts it again the way it last started.
  • The default browser opens maximized in a window of its own once the app accepts connections, when the launch profile sets launchBrowser.
    Stopping the app closes that window and leaves the browser's other windows open; closing it stops debugging.
    This works with Chrome, Edge, Firefox, Opera, Brave and Vivaldi on Windows; other browsers get a normal tab.
  • An Aspire AppHost opens its dashboard already signed in, without the token prompt.
  • Debug on an Aspire AppHost runs each of its projects under the C# debugger too, as a child of the AppHost's session, so their breakpoints hit.
  • Attach picks a running .NET process for the debugger.
    Attach last goes back to the process picked last time, or shows the picker once that process has exited.

Breakpoints

  • The Breakpoints tab sits in the bottom panel, next to the Debug Console, debugging or not.
    Stepping, variables, watches and the call stack are VS Code's own Run and Debug.
  • It lists every breakpoint with its label, condition, hit count and log message.
    While a C# session runs, a row shows why its breakpoint won't be hit; under an Aspire AppHost, a breakpoint counts as bound once any of its projects binds it.
  • A checkbox enables a breakpoint, and a click opens its line.
    A row's icons edit it in VS Code's own condition editor, set its label and remove it.
  • The toolbar mutes all breakpoints, adds a function breakpoint, and enables, disables or removes all.

Build

  • Build, Rebuild and Clean run on the solution, with the output in the extension's Output channel.
    Each one stops the app and the workspace's processes first, so no file stays locked.
  • Clean bin/obj deletes every bin and obj folder in the workspace.
  • Force stop all .NET ends every process started from the workspace folders, for builds that hang on locked files.
  • Build servers shut down after each build, so they don't stay in memory.

Test Explorer

  • The Test Explorer lists every test in a Project, Namespace, Class and Test tree.
    .NET Workbench: Open Test Explorer and Run All Tests opens it and runs every test, and Open Test Explorer and Debug All Tests debugs them.
  • Run All, Run Selected and Run Failed run the matching tests; checkboxes pick the selected tests, and Cancel stops the build or the run.
  • The debug icon next to each Run button builds, then runs the same tests under the C# debugger, one project at a time, so breakpoints in the tests and in the code they test are hit.
    Results come in as the tests run for VSTest projects, and when the session ends for xUnit.net v3 and Microsoft.Testing.Platform projects; Stop on the debug toolbar cancels the run.
    The status bar says when the tests are paused at a breakpoint, and .NET Framework test hosts get the clr debugger on Windows.
  • Each row has its own Run and Debug icons, shown on hover and on the selected row, for the tests of that project, namespace, class or test.
    Tab or Right moves from the selected row to its icons, and Enter or Space presses one.
  • The tree filters by result (passed, failed, skipped, not run) and by name.
  • The details pane shows the message, the stack trace and the output of the selected test.
  • Ctrl+click on a test opens its source at the test method, or at the scenario in its .feature file for Reqnroll tests.

NuGet Manager

  • The NuGet Manager lists the installed, outdated, vulnerable, deprecated and transitive packages of the solution or of one project.
  • Search and install work across every configured source, private Azure Artifacts feeds included.
    The key button signs in to a private feed with Microsoft sign-in, the Azure CLI or a personal access token.
  • Install / Update and Uninstall apply to the projects checked in the package's details.
  • Update selected moves the checked packages to their latest stable version.
  • Consolidate shows the packages installed at different versions across projects.
  • The bin button clears the NuGet caches.

EF Migrations

  • The EF Migrations panel lists the migrations of a DbContext, with the ones the database has applied.
  • The panel adds a migration, removes the last one, and updates the database to the latest or to any earlier migration.
  • Pending changes? checks whether the model has changes without a migration.
  • The panel generates SQL scripts, idempotent ones included.
  • DbContext info and List DbContexts describe the DbContexts, and the panel installs or updates dotnet-ef and adds the Design package on request.
  • A migration's name opens its file in the editor.

User Secrets

  • The User Secrets panel shows each project's secrets.json as a key and value table, or as JSON.
    Manage User Secrets on a .csproj in the Explorer opens it at that project.
  • Create secrets gives a project a new secrets id and an empty secrets.json.
  • Change ID gives a project a new secrets id, and can copy its secrets over to the new id.
  • Save (Ctrl+S) writes the file, Revert drops the unsaved edits, and Format sorts the keys and indents the JSON.

Format

  • The Format panel runs dotnet format on the solution, on whole projects, or on the files checked in a tree.
  • The tree narrows to the files of uncommitted changes, unpushed commits, or any picked commits.
  • The fix can be everything, or whitespace, code style or analyzers only.
  • Unsaved files in scope are saved first, the files a run changed get a mark, and Ctrl+click opens a file.

Dev Tunnels

  • The Dev Tunnels panel creates, hosts and deletes dev tunnels, so a phone, another machine or a webhook can reach the app on this machine.
    Install installs the Dev Tunnels CLI with winget, and Update shows when the CLI says a newer version is out.
  • It signs in with a Microsoft or GitHub account, in the browser or with a code.
  • A tunnel is Private (only you), Organization (your Microsoft Entra tenant, or a GitHub organization with a GitHub account) or Public (anyone with the URL), and its access can be changed later.
  • Each tunnel lists its ports with their URLs to copy or open, and an inspect page while hosted; Host puts it online until Stop.
    The key button copies a connect token for clients of a Private or Organization tunnel, and Keep the Host header makes the redirects and absolute URLs the app builds use the tunnel address.
  • The starred tunnel is the one Run and Debug use, kept per solution, and the sidebar shows it under the launch profile.
    A temporary tunnel instead is made for each Run or Debug and deleted when the app stops.
  • With either, Run and Debug add the app's port to the tunnel, host it, set VS_TUNNEL_URL on the app and open the browser at the tunnel URL.
    Private and Organization tunnels open in a normal browser tab, which can sign in to them; Public ones open in the app's own browser window.
    Stopping the app stops the host.
  • A launch profile with "devTunnelEnabled": true gets a temporary tunnel when no tunnel is starred, with the access in devTunnelAccess (private, org or public), as in Visual Studio.
    A starred tunnel wins over the profile, and "devTunnelEnabled": false keeps that profile off any tunnel.
  • An Aspire AppHost gets no tunnel from Run and Debug: AppHosts set up tunnels in code, with the Aspire.Hosting.DevTunnels integration, which the panel links when the startup project is one.
  • The dotnetWorkbench.devTunnels.expiration setting, from 1h to 30d, sets how long a new tunnel lasts; empty uses the CLI's default.

Shortcuts

  • The Shortcuts panel keeps the repo's own programs and scripts, each under a name: Add picks an .exe, .ps1, .cmd or .bat file.
  • Run opens a terminal named after the shortcut and runs it there, and running it again replaces that terminal.
    The terminal stays open with the output once the program ends, whatever its exit code.
    A .ps1 script runs through pwsh when it is on PATH, else Windows PowerShell, with -NoProfile -ExecutionPolicy Bypass -NoExit.
    An .exe, .cmd or .bat file runs through cmd.exe /k, which leaves a prompt in the working folder.
  • A shortcut can have arguments, split the way a shell splits them, so a value with spaces goes in quotes.
    It runs in its file's folder unless it has a working folder of its own.
  • Edit changes the name, the file, the arguments and the working folder, and the bin removes a shortcut.
  • The list is sorted by name, ignoring case, and saved in that order in .vscode/dotnet-workbench.json, so it can be committed and shared.
    Files inside the repo are saved relative to it, so a shared list works on any machine; files outside it stay absolute.
  • Edits to the file by hand or by git show in the panel.
    The file is strict JSON; while it doesn't parse, the panel shows the error and never writes the file.
  • A shortcut whose file is missing shows File not found and can't run.

Requirements

  • .NET SDK 8 or later.
  • The C# extension for Debug, Attach and debugging tests.
  • VS Code 1.90 or later.
  • The dotnet-ef global tool for EF Migrations; the panel installs it on request.
  • git, for the Format panel's commit filters.
  • The Dev Tunnels CLI for Dev Tunnels; the panel installs it with winget on request.
  • A workspace folder with one .sln or .slnx.

Keyboard shortcuts

Shortcut Action
F5 Debug
Ctrl+F5 Run without debugging
Shift+F5 Stop the app
Ctrl+Shift+B Rebuild the solution
Ctrl+Shift+A Reattach to the last process
Ctrl+Shift+C Delete the bin and obj folders
Ctrl+Shift+K Force stop all workspace processes
Ctrl+Shift+T Open the Test Explorer and run all tests

The sidebar's Keyboard shortcuts button lists them, and Customize opens VS Code's keybindings.

License

Copyright (c) 2026 Efthymios Koktsidis.
All rights reserved.
The extension is free to install and use; see LICENSE for the terms.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft