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.

Datos de origen

Repositorio
dotnet/winforms
Última actividad en el origen
24 de julio de 2026 a las 08:39
Idioma detectado de SKILL.md
inglés
Estrellas
4864
Forks
1122

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
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*.
Ver en GitHub