dotnet watch
이 문서의 적용 대상: ✔️ .NET Core 3.1 SDK 이상 버전
이름
dotnet watch
- 소스 코드의 변경 내용이 검색되면 지정된 애플리케이션을 다시 시작하거나, 핫 다시 로드하거나, 지정된 dotnet 명령을 실행합니다.
개요
dotnet watch [<command>]
[--list]
[--no-hot-reload] [--non-interactive]
[--project <PROJECT>]
[-q|--quiet] [-v|--verbose]
[--version]
[--] <forwarded arguments>
dotnet watch -?|-h|--help
설명
dotnet watch
명령은 파일 감시자입니다. 변경 내용이 검색되면 dotnet run
명령 또는 지정된 dotnet
명령을 실행합니다. dotnet run
을 실행하고 변경 내용이 핫 다시 로드에 지원되는 경우 지정된 애플리케이션을 핫 다시 로드합니다. 변경 내용이 지원되지 않으면 애플리케이션이 다시 시작됩니다. 이 프로세스를 통해 명령줄에서 빠른 반복 개발이 가능해졌습니다.
dotnet watch
를 실행하는 동안 명령 셸에서 Ctrl+R을 눌러 앱을 강제로 다시 빌드하고 다시 시작할 수 있습니다. 해당 기능은 앱이 실행되는 동안에만 사용할 수 있습니다. 예를 들어, Ctrl+R을 누르기 전에 종료되는 콘솔 앱에서 dotnet watch
를 실행하는 경우 Ctrl+R을 눌러도 아무런 효과가 없습니다. 그러나 이 경우 dotnet watch
는 계속 파일을 감시하고 있으며 파일이 업데이트되면 앱을 다시 시작합니다.
응답 압축
응답 압축을 사용하는 앱에 대해 dotnet watch
가 실행되는 경우 도구는 브라우저 새로 고침 스크립트를 삽입할 수 없습니다. .NET 7 이상 버전의 도구에서는 다음과 같은 경고 메시지를 표시합니다.
경고: Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware[4]
응답에 브라우저 새로 고침 스크립트 주입을 구성할 수 없습니다. 이는 응답의 Content-Encoding: 'br'로 인해 발생했을 수 있습니다. 응답 압축을 사용하지 않도록 설정하는 것이 좋습니다.
응답 압축을 사용하지 않도록 설정하는 대신 앱 페이지에 브라우저 새로 고침 JavaScript 참조를 수동으로 추가합니다.
@if (Environment.GetEnvironmentVariable("__ASPNETCORE_BROWSER_TOOLS") is not null)
{
<script src="/_framework/aspnetcore-browser-refresh.js"></script>
}
인수
<command>
.NET 7 SDK 및 이전
dotnet watch
버전에서는 기본 제공 CLI 명령 및 전역 도구와 같이 실행 파일을 통해dotnet
디스패치되는 모든 명령을 실행할 수 있습니다.dotnet <command>
를 실행할 수 있으면dotnet watch <command>
를 실행할 수 있습니다..NET 8 SDK 이상
dotnet watch
에서 실행dotnet run
dotnet build
하거나dotnet test
실행할 수 있습니다. 또는 에build
test
대해<command>
지정run
합니다.자식 명령이 지정되지 않은 경우 기본값은
dotnet run
의 경우run
입니다.<forwarded arguments>
이중 대시(
--
) 뒤에 제공된 인수는 자식dotnet
프로세스에 전달됩니다.dotnet watch run
을 실행 중인 경우 이러한 인수는 dotnet run에 대한 옵션입니다.dotnet watch test
를 실행 중인 경우 이러한 인수는 dotnet test에 대한 옵션입니다.
옵션
--list
감시자를 시작하지 않고 발견된 모든 파일을 나열합니다.
--no-hot-reload
--non-interactive
비대화형 모드에서
dotnet watch
를 실행합니다. 콘솔 입력이 요청되지 않도록 하려면 이 옵션을 사용합니다. 핫 다시 로드가 사용하도록 설정되고 편집 다시 실행이 감지되면 dotnet watch가 앱을 다시 시작합니다. .NET 7 SDK부터 사용할 수 있습니다.--project <PATH>
실행할 프로젝트 파일의 경로를 지정합니다(폴더만 또는 프로젝트 파일 이름 포함). 지정하지 않으면 현재 디렉터리로 기본 설정됩니다.
-q|--quiet
경고 및 오류를 제외하고
dotnet watch
명령으로 생성된 모든 출력을 표시하지 않습니다. 옵션은 자식 명령으로 전달되지 않습니다. 예를 들어,dotnet restore
및dotnet run
의 출력은 계속해서 출력됩니다.-v|--verbose
디버깅을 위한 자세한 출력을 표시합니다.
--version
dotnet watch
의 버전을 표시합니다.--
이중 대시 옵션('--')을 사용하면 자식 프로세스에 전달될 인수에서
dotnet watch
옵션을 구분할 수 있습니다. 사용은 선택 사항입니다. 이중 대시 옵션이 사용되지 않으면dotnet watch
는 인식할 수 없는 첫 번째 인수를 자식dotnet
프로세스에 전달해야 하는 인수의 시작으로 간주합니다.
환경 변수
dotnet watch
는 다음 환경 변수를 사용합니다.
DOTNET_HOTRELOAD_NAMEDPIPE_NAME
이 값은 앱이 시작될 때
dotnet watch
에 의해 구성되며 명명된 파이프를 지정합니다.DOTNET_USE_POLLING_FILE_WATCHER
1
또는true
로 설정되면dotnet watch
는 System.IO.FileSystemWatcher 대신 폴링 파일 감시자를 사용합니다. 네트워크 공유, Docker 탑재 볼륨, 기타 가상 파일 시스템과 같은 일부 파일 시스템에는 폴링이 필요합니다. PhysicalFileProvider 클래스는DOTNET_USE_POLLING_FILE_WATCHER
를 사용하여 PhysicalFileProvider.Watch 메서드가 PollingFileChangeToken에 의존하는지 여부를 알아냅니다.DOTNET_WATCH
dotnet watch
는 시작되는 모든 자식 프로세스에서 이 변수를1
로 설정합니다.DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAME
dotnet watch
의 일환으로 브라우저 새로 고침 서버 메커니즘은 이 값을 읽고 WebSocket 호스트 환경을 알아냅니다.127.0.0.1
값은localhost
로 대체되고http://
및https://
스키마는 각각ws://
및wss://
로 대체됩니다.DOTNET_WATCH_ITERATION
dotnet watch
는 이 변수를1
로 설정하고 파일이 변경될 때마다 1씩 증가하며 명령이 애플리케이션을 다시 시작하거나 핫 다시 로드합니다.DOTNET_WATCH_SUPPRESS_BROWSER_REFRESH
1
또는true
로 설정된 경우,dotnet watch
는 파일 변경 내용을 검색할 때 브라우저를 새로 고치지 않습니다.DOTNET_WATCH_SUPPRESS_EMOJIS
.NET SDK 6.0.300 이상에서는 다음 예와 같이
dotnet watch
가 ASCII가 아닌 문자를 콘솔에 내보냅니다.dotnet watch 🔥 Hot reload enabled. For a list of supported edits, see https://aka.ms/dotnet/hot-reload. 💡 Press "Ctrl + R" to restart. dotnet watch 🔧 Building... dotnet watch 🚀 Started dotnet watch ⌚ Exited dotnet watch ⏳ Waiting for a file to change before restarting dotnet...
특정 콘솔 호스트에서는 이러한 문자가 왜곡되어 나타날 수 있습니다. 잘못된 문자가 표시되는 것을 방지하려면 이 변수를
1
또는true
로 설정합니다.DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER
1
또는true
로 설정된 경우,dotnet watch
는 launchSettings.json에 구성된launchBrowser
가 있는 웹앱용 브라우저를 시작하거나 새로 고치지 않습니다.DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM
기본적으로
dotnet watch
는 파일이 변경될 때마다 복원 실행이나 감시된 파일 집합 다시 평가와 같은 특정 작업이 수행되지 않도록 하여 빌드를 최적화합니다. 이 변수가1
또는true
로 설정되면 이러한 최적화가 사용하지 않도록 설정됩니다.DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLING
1
또는true
로 설정하면dotnet watch
는 정적 콘텐츠 파일에 대해 특별한 처리를 수행하지 않습니다.dotnet watch
는 MSBuild 속성DotNetWatchContentFiles
를false
로 설정합니다.DOTNET_WATCH_RESTART_ON_RUDE_EDIT
1
또는true
로 설정하면dotnet watch
는 요청하는 대신 편집 다시 실행 시 항상 다시 시작됩니다.
기본적으로 감시되는 파일
dotnet watch
는 프로젝트 파일의 Watch
항목 그룹에 있는 모든 항목을 감시합니다. 기본적으로 이 그룹에는 Compile
및 EmbeddedResource
그룹의 모든 항목이 포함됩니다. dotnet watch
는 또한 프로젝트 참조의 전체 그래프를 검사하고 해당 프로젝트 내의 모든 파일을 감시합니다.
기본적으로 Compile
및 EmbeddedResource
그룹에는 다음 GLOB 패턴과 일치하는 모든 파일이 포함됩니다.
**/*.cs
*.csproj
**/*.resx
- 웹앱의 콘텐츠 파일:
wwwroot/**
구성 시스템에는 구성 변경을 처리하기 위한 자체 메커니즘이 있으므로 .config 및 .json 파일은 기본적으로 dotnet watch 다시 시작을 트리거하지 않습니다.
프로젝트 파일을 편집하여 관심 목록에 파일을 추가하거나 목록에서 제거할 수 있습니다. 파일은 개별적으로 지정하거나 GLOB 패턴을 사용하여 지정할 수 있습니다.
추가 파일 보기
Watch
그룹에 항목을 추가하면 더 많은 파일을 볼 수 있습니다. 예를 들어, 다음 태그는 JavaScript 파일을 포함하도록 해당 그룹을 확장합니다.
<ItemGroup>
<Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>
지정된 파일 무시
다음 예에 표시된 것처럼 dotnet watch
는 Watch="false"
특성이 있는 Compile
및 EmbeddedResource
항목을 무시합니다.
<ItemGroup>
<Compile Update="Generated.cs" Watch="false" />
<EmbeddedResource Update="Strings.resx" Watch="false" />
</ItemGroup>
다음 예에 표시된 것처럼 dotnet watch
는 Watch="false"
특성이 있는 프로젝트 참조를 무시합니다.
<ItemGroup>
<ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" Watch="false" />
</ItemGroup>
고급 구성
dotnet watch
는 볼 항목을 찾기 위해 디자인 타임 빌드를 수행합니다. 이 빌드가 실행되면 dotnet watch
가 DotNetWatchBuild=true
속성을 설정합니다. 이 속성은 다음 예와 같이 사용할 수 있습니다.
<ItemGroup Condition="'$(DotNetWatchBuild)'=='true'">
<!-- only included in the project when dotnet-watch is running -->
</ItemGroup>
핫 다시 로드
.NET 6부터 dotnet watch
에는 핫 다시 로드에 대한 지원이 포함됩니다. 핫 다시 로드는 다시 빌드하고 다시 시작할 필요 없이 실행 중인 앱에 변경 내용을 적용할 수 있는 기능입니다. 변경 내용은 코드 파일이나 스타일시트 파일 및 JavaScript 파일과 같은 정적 자산에 대한 것일 수 있습니다. 이 기능은 앱을 수정할 때 즉각적인 피드백을 제공하므로 로컬 개발 환경을 간소화합니다.
핫 다시 로드를 지원하는 앱 형식 및 .NET 버전에 대한 자세한 내용은 지원되는 .NET 앱 프레임워크 및 시나리오를 참조하세요.
편집 다시 실행
파일이 수정되면 dotnet watch
는 앱을 핫 다시 로드할 수 있는지 확인합니다. 핫 다시 로드할 수 없는 경우 변경 내용을 편집 다시 실행이라고 하며 dotnet watch
는 앱을 다시 시작할 것인지 묻습니다.
dotnet watch ⌚ Unable to apply hot reload because of a rude edit.
❔ Do you want to restart your app - Yes (y) / No (n) / Always (a) / Never (v)?
- 예: 앱을 다시 시작합니다.
- 아니요: 변경 내용을 적용하지 않고 앱을 계속 실행합니다.
- 항상: 앱을 다시 시작하고 편집 다시 실행에 대한 메시지를 더 이상 표시하지 않습니다.
- 안함: 변경 내용을 적용하지 않고 앱을 계속 실행하며 편집 다시 실행에 대한 메시지를 더 이상 표시하지 않습니다.
편집 다시 실행으로 간주되는 변경 내용에 대한 자세한 내용은 코드 편집 및 디버깅 계속 및 지원되지 않는 코드 변경을 참조하세요.
dotnet watch
를 실행할 때 핫 다시 로드를 사용하지 않도록 설정하려면 다음 예와 같이 --no-hot-reload
옵션을 사용합니다.
dotnet watch --no-hot-reload
예제
소스 코드가 변경될 때마다 현재 디렉터리의 프로젝트에 대해
dotnet run
을 실행합니다.dotnet watch
또는
dotnet watch run
소스 코드가 변경될 때마다 현재 디렉터리의 프로젝트에 대해
dotnet test
를 실행합니다.dotnet watch test
소스 코드가 변경될 때마다
dotnet run --project ./HelloWorld.csproj
를 실행합니다.dotnet watch run --project ./HelloWorld.csproj
소스 코드가 변경될 때마다 현재 디렉터리의 프로젝트에 대해
dotnet run -- arg0
을 실행합니다.dotnet watch run -- arg0
또는
dotnet watch -- run arg0
참고 항목
.NET