Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/core/compatibility/10.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ If you're migrating an app to .NET 10, the breaking changes listed here might af
| [`dotnet package list` performs restore](sdk/10.0/dotnet-package-list-restore.md) | Behavioral change | Preview 4 |
| [`dotnet restore` audits transitive packages](sdk/10.0/nugetaudit-transitive-packages.md) | Behavioral change | Preview 3 |
| [`dotnet tool install --local` creates manifest by default](sdk/10.0/dotnet-tool-install-local-manifest.md) | Behavioral change | Preview 7 |
| [`dotnet watch` logs internal-facing messages to stderr instead of stdout](sdk/10.0/dotnet-watch-stderr.md) | Behavioral change | RC 2 |
| [project.json not supported in `dotnet restore`](sdk/10.0/dotnet-restore-project-json-unsupported.md) | Source incompatible | Preview 7 |
| [SHA-1 fingerprint support deprecated in `dotnet nuget sign`](sdk/10.0/dotnet-nuget-sign-sha1-deprecated.md) | Behavioral change | Preview 1 |
| [MSBUILDCUSTOMBUILDEVENTWARNING escape hatch removed](sdk/10.0/custom-build-event-warning.md) | Behavioral change | Preview 1 |
Expand Down
42 changes: 42 additions & 0 deletions docs/core/compatibility/sdk/10.0/dotnet-watch-stderr.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
title: "Breaking change: 'dotnet watch' logs internal-facing messages to stderr instead of stdout"
description: "Learn about the breaking change in .NET 10 RC 2 where 'dotnet watch' emits its log messages to stderr instead of stdout."
ms.date: 01/16/2025
ai-usage: ai-assisted
ms.custom: https://github.com/dotnet/docs/issues/45871
---
# 'dotnet watch' logs internal-facing messages to stderr instead of stdout

Starting in .NET 10 RC 2, [`dotnet watch`](../../../tools/dotnet-watch.md) emits its own log messages to the `stderr` channel instead of `stdout`. This change is part of a general trend towards `dotnet` CLI commands not obscuring the `stdout` channel, which is often reserved for special semantics when running certain kinds of applications, like LSP or MCP servers.

## Version introduced

.NET 10 RC 2

## Previous behavior

Previously, [`dotnet watch`](../../../tools/dotnet-watch.md) emitted log messages to `stdout`.

## New behavior

Starting in .NET 10 RC 2, [`dotnet watch`](../../../tools/dotnet-watch.md) emits log messages to `stderr`.

## Type of breaking change

This change is a [behavioral change](../../categories.md#behavioral-change).

## Reason for change

This change is part of a general trend towards `dotnet` CLI commands not obscuring the `stdout` channel, which is often reserved or assumed to have special semantics when running certain kinds of applications, like LSP or MCP servers. This change was implemented in <https://github.com/dotnet/sdk/pull/50820>. In general, the CLI should get out of the way of your applications.

## Recommended action

Most users shouldn't need to take any action. If you need the `dotnet watch` messages on `stdout`, you can redirect the `stderr` stream to `stdout`. For example, use `2>&1` to redirect the `2` file descriptor for `stderr` to the `1` file descriptor for `stdout`:

```bash
dotnet watch 2>&1
```

## Affected APIs

None.
2 changes: 2 additions & 0 deletions docs/core/compatibility/toc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,8 @@ items:
href: sdk/10.0/dotnet-package-list-restore.md
- name: "`dotnet tool install --local` creates manifest by default"
href: sdk/10.0/dotnet-tool-install-local-manifest.md
- name: "`dotnet watch` logs internal-facing messages to stderr instead of stdout"
href: sdk/10.0/dotnet-watch-stderr.md
- name: MSBUILDCUSTOMBUILDEVENTWARNING escape hatch removed
href: sdk/10.0/custom-build-event-warning.md
- name: MSBuild custom culture resource handling
Expand Down
Loading