이 문서의 적용 대상: ✔️ .NET 6 SDK 이상 버전
이름
dotnet watch - 소스 코드의 변경 내용이 감지되면 지정된 애플리케이션을 다시 시작하거나 핫으로 다시 로드 하거나 지정된 dotnet 명령을 실행합니다.
개요
dotnet watch [<command>]
[--artifacts-path <ARTIFACTS_DIR>] [--disable-build-servers]
[--list] [--no-hot-reload] [--no-self-contained]
[--non-interactive] [--project <PROJECT>] [--sc|--self-contained]
[-q|--quiet] [-v|--verbose] [--version]
[--] <forwarded arguments>
dotnet watch -?|-h|--help
Description
이 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>
}
Arguments
<command>.NET 7 SDK 및 이전
dotnet watch버전에서는 기본 제공 CLI 명령 및 전역 도구와 같이 실행 파일을 통해dotnet디스패치되는 모든 명령을 실행할 수 있습니다. 실행할dotnet <command>수 있는 경우 실행할dotnet watch <command>수 있습니다..NET 8 SDK 이상
dotnet watch에서 실행dotnet rundotnet build하거나dotnet test실행할 수 있습니다. 또는 에runbuild대해test지정<command>합니다.자식 명령이 지정되지 않은 경우 기본값은
run입니다dotnet run.<forwarded arguments>이중 대시(
--)가 자식dotnet프로세스에 전달된 후에 제공된 인수입니다. 실행하는dotnet watch run경우 이러한 인수는 dotnet 실행에 대한 옵션입니다. 실행하는dotnet watch test경우 이러한 인수는 dotnet 테스트에 대한 옵션입니다.
Options
-
--artifacts-path <ARTIFACTS_DIR>실행된 명령의 모든 빌드 출력 파일은 지정된 경로 아래의 하위 폴더에서 프로젝트로 구분됩니다. 자세한 내용은 아티팩트 출력 레이아웃참조하세요. .NET 8 SDK부터 사용할 수 있습니다.
-
--disable-build-servers명령이 영구 빌드 서버를 무시하도록 강제합니다. 이 옵션은 처음부터 빌드하도록 하는 모든 빌드 캐싱을 사용하지 않도록 설정하는 일관된 방법을 제공합니다. 캐시에 의존하지 않는 빌드는 어떤 이유로 캐시가 손상되거나 올바르지 않을 때 유용합니다. .NET 7 SDK부터 사용할 수 있습니다.
--list감시자를 시작하지 않고 검색된 모든 파일을 나열합니다.
-
--no-self-contained애플리케이션을 프레임워크 종속 애플리케이션으로 게시합니다. 애플리케이션을 실행하려면 대상 컴퓨터에 호환되는 .NET 런타임을 설치해야 합니다.
--no-hot-reload--non-interactive비대화형 모드에서 실행됩니다
dotnet watch. 콘솔 입력이 요청되지 않도록 하려면 이 옵션을 사용합니다. 핫 다시 로드를 사용하도록 설정하고 무례한 편집 이 감지되면 dotnet watch가 앱을 다시 시작합니다. .NET 7 SDK부터 사용할 수 있습니다.--project <PATH>실행할 프로젝트 파일의 경로를 지정합니다(폴더만 또는 프로젝트 파일 이름 포함). 지정하지 않으면 현재 디렉터리로 기본 설정됩니다.
-
--sc|--self-contained대상 컴퓨터에 런타임을 설치할 필요가 없도록 애플리케이션을 사용하여 .NET 런타임을 게시합니다.
-q|--quiet경고 및 오류를 제외하고 명령에서
dotnet watch생성된 모든 출력을 표시하지 않습니다. 이 옵션은 자식 명령에 전달되지 않습니다. 예를 들어 출력은dotnet restoredotnet run계속 출력됩니다.-v|--verbose디버깅에 대한 자세한 정보 출력을 표시합니다.
--version의 버전을 표시합니다
dotnet watch.--이중 대시 옵션('--')을 사용하여 자식 프로세스에 전달될 인수에서 옵션을 구분
dotnet watch할 수 있습니다. 사용은 선택 사항입니다. 이중 대시 옵션을 사용하지dotnet watch않는 경우 인식할 수 없는 첫 번째 인수를 자식dotnet프로세스에 전달해야 하는 인수의 시작 부분으로 간주합니다.-
-?|-h|--help명령을 사용하는 방법에 대한 설명을 출력합니다.
환경 변수
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_WATCHdotnet watch는 이 변수를1시작하는 모든 자식 프로세스에 대해 설정합니다.DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAME브라우저 새로 고침 서버 메커니즘의
dotnet watch일부로 이 값을 읽고 WebSocket 호스트 환경을 확인합니다. 값127.0.0.1이 대체localhost되고http://, 및https://구성표가 각각과 함께ws://wss://바뀝니다.DOTNET_WATCH_ITERATIONdotnet watch는 파일이 변경되고 명령이 애플리케이션을 다시 시작하거나 핫 다시 로드할 때마다 이 변수1를 1씩 증분합니다.DOTNET_WATCH_SUPPRESS_BROWSER_REFRESH설정하거나
1설정truedotnet 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로 설정하거나trueDOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER설정하거나
1true설정dotnet watch하면launchBrowser구성된 웹앱에 대한 브라우저를 시작하거나 새로 고치지 않습니다.DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM기본적으로
dotnet watch복원 실행 또는 모든 파일 변경 시 감시된 파일 집합 다시 평가와 같은 특정 작업을 방지하여 빌드를 최적화합니다. 이 변수를 설정1하거나true설정하면 이러한 최적화를 사용할 수 없습니다.DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLING설정
1하거나true정dotnet watch적 콘텐츠 파일에 대해 특수한 처리를 수행하지 않습니다.dotnet watchMSBuild 속성을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>
지정된 파일 및 폴더 무시
Watch="false" 특성을 사용하여 지정된 파일을 무시합니다. 이 DefaultItemExcludes 속성을 사용하여 폴더 또는 파일이 감시되지 않도록 무시합니다.
파일을 못하게 dotnet watch 하려면 다음 예제와 같이 특성과 함께 Watch="false" 항목 및 EmbeddedResource 항목을 사용합니다Compile.
<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>
.NET 10부터 속성을 사용하여 DefaultItemExcludes 전체 폴더 또는 파일 패턴이 감시되는 dotnet watch것을 제외합니다. 이 방법은 원치 않는 다시 시작 또는 다시 로드를 트리거하는 컴파일 또는 파일과 관련이 없는 파일을 제외하려는 경우에 유용합니다.
예를 들어 앱이 App_Data 실행되는 동안 ASP.NET Core 애플리케이션 폴더의 파일이 변경되어 불필요한 페이지가 다시 로드될 수 있습니다. 이 폴더를 감시하지 않도록 제외합니다.
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);**/App_Data/**</DefaultItemExcludes>
</PropertyGroup>
여러 패턴을 세미콜론으로 구분하여 제외합니다.
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);**/App_Data/**;**/temp/**;**/*.log</DefaultItemExcludes>
</PropertyGroup>
속성은 DefaultItemExcludes 모든 기본 항목 형식(예: Compile 및 EmbeddedResource.)에 영향을 줍니다. 이 특성은 Watch="false" 특정 파일 또는 프로젝트 참조를 더 세부적으로 제어합니다.
자세한 내용은 DefaultItemExcludes 참조를 참조하세요.
고급 구성
dotnet watch 는 디자인 타임 빌드를 수행하여 볼 항목을 찾습니다. 이 빌드가 실행 dotnet watch 되면 속성을 DotNetWatchBuild=true설정합니다. 이 속성은 다음 예제와 같이 사용할 수 있습니다.
<ItemGroup Condition="'$(DotNetWatchBuild)'=='true'">
<!-- only included in the project when dotnet-watch is running -->
</ItemGroup>
핫 리로드
.NET 6 SDK 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