다음을 통해 공유


dotnet watch

이 문서의 적용 대상: ✔️ .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 탑재 볼륨 및 기타 가상 파일 시스템과 같은 일부 파일 시스템에는 폴링이 필요합니다. 이 클래스 PhysicalFileProviderDOTNET_USE_POLLING_FILE_WATCHER 메서드PhysicalFileProvider.WatchPollingFileChangeToken .

  • 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설정 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 로 설정하거나 true

  • DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER

    설정하거나 1true 설정 dotnet watch 하면 launchBrowser구성된 웹앱에 대한 브라우저를 시작하거나 새로 고치지 않습니다.

  • DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM

    기본적으로 dotnet watch 복원 실행 또는 모든 파일 변경 시 감시된 파일 집합 다시 평가와 같은 특정 작업을 방지하여 빌드를 최적화합니다. 이 변수를 설정 1 하거나 true설정하면 이러한 최적화를 사용할 수 없습니다.

  • DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLING

    설정 1 하거나 truedotnet 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>

지정된 파일 및 폴더 무시

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 모든 기본 항목 형식(예: CompileEmbeddedResource.)에 영향을 줍니다. 이 특성은 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
    

참고하십시오