Skip to main content

building-code

Instructions for restoring and building the WinForms repository. Use when asked how to restore NuGet packages, build the full solution, build a single project, create packages, or troubleshoot build errors.

Informations de source

Dépôt
dotnet/winforms
Dernière activité de la source
24 juillet 2026 à 08:39
Langue détectée de SKILL.md
anglais
Étoiles
4 867
Forks
1 122

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
building-code
description
Instructions for restoring and building the WinForms repository. Use when asked how to restore NuGet packages, build the full solution, build a single project, create packages, or troubleshoot build errors.
metadata
{"author":"dotnet-winforms","version":"1.0"}
# Building the WinForms Repository > ## 🛑 TENET — Build the solution ONLY with `build.cmd` > > **Never** build, validate, or declare the WinForms solution "clean" with a plain > `dotnet build` / `dotnet msbuild` of `Winforms.sln`. Only **`build.cmd`** (Arcade) applies the > repository's CI configuration — the **PublicAPI analyzer (RS0016/RS0017)**, the code-style and > documentation analyzers, and **`-warnAsError`**. A plain `dotnet build` silently downgrades or > skips these, so **"0 warnings" there does NOT mean CI is green** — the very same change can fail > the official build with errors. > > * **Full / release / package / "is it clean?" verification → always `build.cmd`** (see §2). > * A single-project `dotnet build` (see §3) is an **inner-loop convenience only**. It is fine while > iterating, but you **must re-verify with `build.cmd` before claiming a change builds cleanly**. > * If `build.cmd` cannot run in your environment, the closest fallback is > `dotnet build <project> /p:ContinuousIntegrationBuild=true /p:TreatWarningsAsErrors=true` — and > you must say so explicitly rather than implying a `build.cmd` result. ## Prerequisites * Windows is required for WinForms runtime scenarios, test execution, and Visual Studio workflows. * Linux is supported for command-line restore/build only; use `build.sh` instead of `build.cmd` / `Restore.cmd`. * Visual Studio 2022 (for IDE builds) — see `WinForms.vsconfig` for required workloads. * The repo-local .NET SDK (specified in `global.json`) is used automatically by `build.cmd` and `Restore.cmd`. You do **not** need a machine-wide SDK install for command-line builds. --- ## 1 Restore Restoring downloads the repo-local SDK and all NuGet packages. ``` .\Restore.cmd ``` Under the hood this runs: ```powershell eng\common\Build.ps1 -NativeToolsOnMachine -restore ``` You can pass any extra `Build.ps1` flags after `Restore.cmd`, e.g. `.\Restore.cmd -configuration Release`. --- ## 2 Full Solution Build (preferred) > **Always use `build.cmd` (Arcade) for full, release, and package builds.** Do **not** use a plain > `dotnet build` of the solution for these — only `build.cmd` guarantees the Arcade-supported build > options and the download of the correct base SDK (`global.json`) needed to compile. Plain > `dotnet build` is reserved for the fast single-project inner loop (see Section 3), and even then > only after at least one successful `build.cmd` / `Restore.cmd`. ``` .\build.cmd ``` This restores **and** builds `Winforms.sln` in `Debug|Any CPU` by default. Under the hood this runs: ```powershell eng\common\Build.ps1 -NativeToolsOnMachine -restore -build -bl ``` ### 2.1 Full (clean) test build — required workflow For a full, clean build of the whole solution, **clean the artifacts first, then build**: ```powershell # 1. Clean the artifacts folder. .\build -clean # 2. Build the full solution. .\build ``` **Reporting requirement:** a full build is long-running, so while it runs **report progress back to the user in the console to bridge the wait and give early orientation.** As assemblies complete, report which assemblies have been **built successfully** and which **failed and with how many errors**. Prefer running the build with a binary log (the default `-bl`) and/or stream the console output so per-project results can be surfaced as they happen rather than only at the end. ### 2.2 Release build ```powershell .\build -configuration release ``` ### 2.3 Creating packages ```powershell # Debug packages .\build -pack # Release packages .\build -configuration release -pack ``` ### 2.4 Full `Build.ps1` parameter list `build.cmd` forwards every extra argument to `eng\common\Build.ps1`. The full surface is: ``` Build.ps1 [-configuration <string>] [-platform <string>] [-projects <string>] [-verbosity <string>] [-msbuildEngine <string>] [-warnAsError <bool>] [-warnNotAsError <string>] [-nodeReuse <bool>] [-buildCheck] [-restore] [-deployDeps] [-build] [-rebuild] [-deploy] [-test] [-integrationTest] [-performanceTest] [-sign] [-pack] [-publish] [-clean] [-productBuild] [-fromVMR] [-binaryLog] [-binaryLogName <string>] [-excludeCIBinarylog] [-ci] [-prepareMachine] [-runtimeSourceFeed <string>] [-runtimeSourceFeedKey <string>] [-excludePrereleaseVS] [-nativeToolsOnMachine] [-help] [-properties <string[]>] [<CommonParameters>] ``` ### Common flags | Flag | Short | Description | |------|-------|-------------| | `-configuration <Debug\|Release>` | `-c` | Build configuration (default: `Debug`) | | `-platform <x86\|x64\|Any CPU>` | | Platform (default: `Any CPU`) | | `-restore` | `-r` | Restore only | | `-build` | `-b` | Build only (skip restore if already done) | | `-rebuild` | | Clean + build | | `-clean` | | Delete build artifacts | | `-pack` | | Create NuGet packages (`Microsoft.Private.Winforms`) | | `-bl` / `-binaryLog` | | Emit `artifacts\log\Debug\Build.binlog` | | `-ci` | | CI mode (stricter warnings, signing, etc.) | | `-test` | `-t` | Build **and** run unit tests | | `-integrationTest` | | Build **and** run integration / functional tests | ### Examples ```bash # Release build .\build.cmd -configuration Release # Build and run unit tests .\build.cmd -test # Create NuGet package .\build.cmd -pack ``` --- ## 3 Optimized Building a Single Project (fast inner-loop) > **Inner-loop only.** Use plain `dotnet build` of a single project **only** for quick iteration on > one project, and **only after** at least one successful `.\build.cmd` / `.\Restore.cmd`. It does > **not** guarantee the Arcade-supported build options or the download of the correct base SDK, so it > must **never** be used for a full solution build, a release build, packaging, or any build whose > result you intend to report as authoritative. For those, always use `build.cmd` (Section 2). Prefer rebuilding just the project(s) with recent changes by using the standard `dotnet build` command, **after** at least one initial successful full restore (via `.\Restore.cmd` or `.\build.cmd`). This is **much** faster than building the whole solution. ```bash # Build a single src project dotnet build src\System.Windows.Forms\System.Windows.Forms.csproj # Build a single test project dotnet build src\test\unit\System.Windows.Forms\System.Windows.Forms.Tests.csproj # Release configuration dotnet build src\System.Windows.Forms\System.Windows.Forms.csproj -c Release ``` > **Tip:** The repo-local SDK must be on your `PATH`. Running `.\start-code.cmd` > or `.\start-vs.cmd` prepends it automatically. From a plain terminal you can > also run `.\Restore.cmd` first (it sets up the SDK). --- ## 4 Building from Visual Studio 1. Run `.\Restore.cmd` (one-time, or after SDK/package changes). 2. Run `.\start-vs.cmd` — opens `Winforms.sln` with the repo-local SDK on `PATH`. 3. Build normally (<kbd>Ctrl+Shift+B</kbd>). ## 5 Building from Visual Studio Code 1. (Optional) `.\Restore.cmd` 2. `.\start-code.cmd` — opens the workspace with the repo-local SDK on `PATH`. 3. Build from the integrated terminal: `.\build.cmd` or `dotnet build <project>`. --- ## Build Outputs | Artifact | Location | |----------|----------| | Binaries | `artifacts\bin\<Project>\Debug\<tfm>\` | | Logs | `artifacts\log\` | | Binary log | `artifacts\log\Debug\Build.binlog` | | Test results | `artifacts\TestResults\` | | NuGet packages | `artifacts\packages\` | Use the [MSBuild Structured Log Viewer](https://msbuildlog.com/) to inspect `.binlog` files when troubleshooting build errors. --- ## Troubleshooting * **Most errors are compile errors** — fix them as usual. * **MSBuild task errors** — inspect `artifacts\log\Debug\Build.binlog`. * **SDK version mismatch** — the repo pins its SDK in `global.json`; run `.\Restore.cmd` to ensure the correct SDK is available. * **VS preview features** — if using a non-Preview VS, enable *Tools → Options → Environment → Preview Features → Use previews of the .NET SDK*.
Voir sur GitHub