mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-16 19:57:57 +01:00
128 lines
4.9 KiB
Markdown
128 lines
4.9 KiB
Markdown
|
|
## Developing PowerToys with Visual Studio Code
|
|||
|
|
|
|||
|
|
This guide shows how to build, debug, and contribute to PowerToys using VS Code instead of (or alongside) full Visual Studio. It focuses on common inner‑loop tasks for C++, .NET, and mixed scenarios present in the solution.
|
|||
|
|
|
|||
|
|
> PowerToys is a large mixed C++ / C# / WinAppSDK solution. VS Code works well for incremental development and quick module iterations, but occasionally you may still prefer full Visual Studio for designer tooling or specialized diagnostics.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
VS Code extensions Needed:
|
|||
|
|
|
|||
|
|
| Area | Extension | Notes |
|
|||
|
|
|------|-----------|-------|
|
|||
|
|
| C++ | ms-vscode.cpptools | IntelliSense, debugging (cppvsdbg) |
|
|||
|
|
| C# | ms-dotnettools.csdevkit (or C#) | Language service / test explorer |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Building in VS Code
|
|||
|
|
### Configure developer powershell for vs2022 for more convenient dev in vscode.
|
|||
|
|
1. Configure profile in in settings, entry: "terminal.integrated.profiles.windows"
|
|||
|
|
2. Add below config as entry:
|
|||
|
|
```json
|
|||
|
|
"Developer PowerShell for VS 2022": {
|
|||
|
|
// Configure based on your preference
|
|||
|
|
"path": "C:\\Program Files\\WindowsApps\\Microsoft.PowerShell_7.5.2.0_arm64__8wekyb3d8bbwe\\pwsh.exe",
|
|||
|
|
"args": [
|
|||
|
|
"-NoExit",
|
|||
|
|
"-Command",
|
|||
|
|
"& {",
|
|||
|
|
"$orig = Get-Location;",
|
|||
|
|
// Configure based on your environment
|
|||
|
|
"& 'C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\Common7\\Tools\\Launch-VsDevShell.ps1';",
|
|||
|
|
"Set-Location $orig",
|
|||
|
|
"}"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
```
|
|||
|
|
3. [Optional] Set Developer PowerShell for VS 2022 as your default profile, so that you can get a deep integration with vscode coding agent.
|
|||
|
|
|
|||
|
|
4. Now You can build with plain `msbuild` or configure tasks.json in below section
|
|||
|
|
Or reach out to "tools\build\BUILD-GUIDELINES.md"
|
|||
|
|
|
|||
|
|
### Sample plain msbuild command
|
|||
|
|
```powershell
|
|||
|
|
# Restore:
|
|||
|
|
msbuild powertoys.sln -t:restore -p:configuration=debug -p:platform=x64 -m
|
|||
|
|
|
|||
|
|
# Build powertoys sln
|
|||
|
|
msbuild powertoys.sln -p:configuration=debug -p:platform=x64 -m
|
|||
|
|
|
|||
|
|
# dotnet project
|
|||
|
|
msbuild src\settings-ui\Settings.UI\PowerToys.Settings.csproj -p:Platform=x64 -p:Configuration=Debug -m
|
|||
|
|
|
|||
|
|
# native project
|
|||
|
|
msbuild "src\modules\MouseUtils\FindMyMouse\FindMyMouse.vcxproj" -p:Configuration=Debug -p:Platform=x64 -m
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Debugging
|
|||
|
|
|
|||
|
|
### Existing launch configuration
|
|||
|
|
|
|||
|
|
The repo provides `.vscode/launch.json` with:
|
|||
|
|
|
|||
|
|
- `Run PowerToys.exe (no build)`: Launches the already-built executable at `x64/Debug/PowerToys.exe` using `cppvsdbg`.
|
|||
|
|
|
|||
|
|
Build first, then press F5. To switch configuration (Release / ARM64) either edit the path or create additional launch entries.
|
|||
|
|
|
|||
|
|
### Attaching to a running instance
|
|||
|
|
|
|||
|
|
If PowerToys is already running, you can attach to that process:
|
|||
|
|
|
|||
|
|
2. VS Code command palette: “C/C++: (Windows) Attach to Process”.
|
|||
|
|
3. Filter for `PowerToys.exe` / module-specific processes.
|
|||
|
|
|
|||
|
|
### Debugging managed components
|
|||
|
|
|
|||
|
|
Many modules have a managed component loaded into the PowerToys process. `cppvsdbg` can debug mixed mode, but if you need richer .NET inspection you can create a second configuration using `type: coreclr` and `processId` attachment after the native launch, or just attach separately:
|
|||
|
|
|
|||
|
|
Similar for attach to managed code.
|
|||
|
|
> Note: In arm64 machine, can only debug arm64 code.
|
|||
|
|
|
|||
|
|
```jsonc
|
|||
|
|
{
|
|||
|
|
"version": "0.2.0",
|
|||
|
|
"configurations": [
|
|||
|
|
{
|
|||
|
|
"name": "Run native executable (no build)",
|
|||
|
|
"type": "cppvsdbg",
|
|||
|
|
"request": "launch",
|
|||
|
|
"program": "${workspaceFolder}\\x64\\Debug\\PowerToys.exe",
|
|||
|
|
"args": [],
|
|||
|
|
"stopAtEntry": false,
|
|||
|
|
"cwd": "${workspaceFolder}",
|
|||
|
|
"environment": [],
|
|||
|
|
"console": "integratedTerminal"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "C/C++ Attach to PowerToys Process (native)",
|
|||
|
|
"type": "cppvsdbg",
|
|||
|
|
"request": "attach",
|
|||
|
|
"processId": "${command:pickProcess}",
|
|||
|
|
"symbolSearchPath": "${workspaceFolder}\\x64\\Debug;${workspaceFolder}\\Debug;${workspaceFolder}\\symbols"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "Run managed code (managed, no build)",
|
|||
|
|
"type": "coreclr",
|
|||
|
|
"request": "launch",
|
|||
|
|
"program": "${workspaceFolder}\\arm64\\Debug\\WinUI3Apps\\PowerToys.Settings.exe",
|
|||
|
|
"args": [],
|
|||
|
|
"cwd": "${workspaceFolder}",
|
|||
|
|
"env": {},
|
|||
|
|
"console": "internalConsole",
|
|||
|
|
"stopAtEntry": false
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6. Common tasks & tips
|
|||
|
|
|
|||
|
|
| Task | Command / Action | Notes |
|
|||
|
|
|------|------------------|-------|
|
|||
|
|
| Clean | `git clean -xdf` (careful) or `msbuild /t:Clean PowerToys.sln` | Deep clean removes packages & build outputs |
|
|||
|
|
| Rebuild single project | `msbuild path\to\proj.vcxproj /t:Rebuild -p:Platform=x64 -p:Configuration=Debug` | Faster than whole solution |
|
|||
|
|
| Generate installer (rare in inner loop) | See `tools\build\build-installer.ps1` | Usually not needed for local debug |
|
|||
|
|
| Resource conversion errors | Re-run restore + build | Triggers custom PowerShell targets |
|