dotnet watch
는 원본 파일이 변경되면 .NET CLI 명령을 실행하는 도구입니다. 예를 들어 파일 변경은 컴파일, 테스트 실행 또는 배포를 트리거할 수 있습니다.
이 자습서에서는 합계를 반환하는 엔드포인트와 제품을 반환하는 엔드포인트의 두 가지 엔드포인트가 있는 기존 웹 API를 사용합니다. 제품 메서드에 버그가 있으며 이 자습서에서는 수정되었습니다.
샘플 앱다운로드합니다. WebApp(ASP.NET Core 웹 API) 및 WebAppTests(웹 API에 대한 단위 테스트)의 두 프로젝트로 구성됩니다.
명령 셸에서 WebApp 폴더로 이동합니다. 다음 명령을 실행합니다.
dotnet run
비고
실행할 프로젝트를 지정하는 데 사용할 dotnet run --project <PROJECT>
수 있습니다. 예를 들어 샘플 앱의 루트에서 실행 dotnet run --project WebApp
하면 WebApp 프로젝트도 실행됩니다.
콘솔 출력은 다음과 유사한 메시지를 표시합니다(앱이 실행 중이며 요청을 기다리고 있음을 나타낸다).
$ dotnet run
Hosting environment: Development
Content root path: C:/Docs/aspnetcore/tutorials/dotnet-watch/sample/WebApp
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
웹 브라우저에서 http://localhost:<port number>/api/math/sum?a=4&b=5
으로 이동합니다.
9
의 결과를 확인하십시오.
제품 API(http://localhost:<port number>/api/math/product?a=4&b=5
)로 이동합니다.
9
를 반환하며, 예상했던 20
가 아닙니다. 이 문제는 자습서의 뒷부분에서 해결되었습니다.
프로젝트에 추가 dotnet watch
dotnet watch
파일 감시자 도구는 .NET Core SDK 버전 2.1.300에 포함되어 있습니다. 이전 버전의 .NET Core SDK를 사용하는 경우 다음 단계가 필요합니다.
Microsoft.DotNet.Watcher.Tools
파일에 패키지 참조를 추가합니다..csproj
<ItemGroup> <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" /> </ItemGroup>
다음 명령을 실행하여
Microsoft.DotNet.Watcher.Tools
패키지를 설치합니다.dotnet restore
를 사용하여 .NET CLI 명령 실행 dotnet watch
모든 .NET CLI 명령은dotnet watch
사용하여 실행할 수 있습니다. 다음은 그 예입니다.
명령어 | 감시 명령어 |
---|---|
dotnet run (도트넷 실행 명령) | dotnet watch run |
dotnet run -f netcoreapp3.1 | dotnet watch run -f netcoreapp3.1 |
dotnet run -f netcoreapp3.1 -- --arg1 | dotnet watch run -f netcoreapp3.1 -- --arg1 (이 명령어는 실행 중인 .NET Core 앱에 대한 관찰 실행을 수행합니다) |
dotnet test 명령어 (이 .NET 애플리케이션을 테스트하는 명령어입니다) | dotnet watch 테스트 |
dotnet watch run
폴더에서 를 실행합니다. 콘솔 출력은 watch
이(가) 시작되었음을 나타냅니다.
웹앱에서 실행 dotnet watch run
하면 준비되면 앱의 URL로 이동하는 브라우저가 시작됩니다.
dotnet watch
는 앱의 콘솔 출력을 읽고, WebHost의 준비 메시지가 표시될 때까지 기다림으로써 이를 수행합니다.
dotnet watch
는 감시된 파일의 변경 내용을 검색할 때 브라우저를 새로 고칩니다. 이를 위해 watch 명령은 앱에서 만든 HTML 응답을 수정하는 미들웨어를 앱에 삽입합니다. 미들웨어는 브라우저에 새로 고침을 지시할 수 있는 JavaScript 스크립트 블록을 페이지에 추가합니다 dotnet watch
. 현재 감시된 모든 파일(예: .html
정적 콘텐츠 및 .css
파일)이 변경되면 앱이 다시 빌드됩니다.
dotnet watch
:
- 기본적으로 빌드에 영향을 주는 파일만 감시합니다.
- 추가로 감시된 파일(구성을 통해)은 여전히 빌드가 진행됩니다.
구성에 대한 자세한 내용은 이 문서의 dotnet-watch 구성 을 참조하세요.
비고
볼 프로젝트를 지정하는 데 사용할 dotnet watch --project <PROJECT>
수 있습니다. 예를 들어 샘플 앱의 루트에서 실행 dotnet watch --project WebApp run
하면 WebApp 프로젝트도 실행되고 감시됩니다.
dotnet watch
을 사용하여 변경하십시오.
dotnet watch
이 실행 중인지 확인하십시오.
Product
의 MathController.cs
메서드에서 합계가 아닌 곱을 반환하도록 버그를 수정하세요.
public static int Product(int a, int b)
{
return a * b;
}
파일을 저장합니다. 콘솔 출력은 파일 변경을 감지하고 앱을 다시 시작했음을 나타냅니다 dotnet watch
.
http://localhost:<port number>/api/math/product?a=4&b=5
이(가) 올바른 결과를 반환하는지 확인합니다.
를 사용하여 테스트 실행 dotnet watch
Product
의 메서드를 다시 합계를 반환하도록 변경하세요. 파일을 저장합니다.명령 셸에서 WebAppTests 폴더로 이동합니다.
dotnet watch test
를 실행합니다. 출력은 테스트가 실패했으며 감시자가 파일 변경 내용을 기다리고 있음을 나타냅니다.Total tests: 2. Passed: 1. Failed: 1. Skipped: 0. Test Run Failed.
Product
제품을 반환할 수 있도록 메서드 코드를 수정합니다. 파일을 저장합니다.
dotnet watch
는 파일 변경 사항을 검색하고 테스트를 다시 실행합니다. 콘솔 출력은 통과된 테스트를 나타냅니다.
감시할 파일 목록 사용자 지정
기본적으로 dotnet-watch
다음 glob 패턴과 일치하는 모든 파일을 추적합니다.
**/*.cs
*.csproj
**/*.resx
- 콘텐츠 파일:
wwwroot/**
,**/*.config
**/*.json
.csproj
파일을 편집하여 감시 목록에 더 많은 항목을 추가할 수 있습니다. 항목을 개별적으로 또는 glob 패턴을 사용하여 지정할 수 있습니다.
<ItemGroup>
<!-- extends watching group to include *.js files -->
<Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>
감시할 파일에서 제외하기
dotnet-watch
는 기본 설정을 무시하도록 구성할 수 있습니다. 특정 파일을 무시하려면 파일의 항목 정의에 Watch="false"
특성을 추가 .csproj
합니다.
<ItemGroup>
<!-- exclude Generated.cs from dotnet-watch -->
<Compile Include="Generated.cs" Watch="false" />
<!-- exclude Strings.resx from dotnet-watch -->
<EmbeddedResource Include="Strings.resx" Watch="false" />
<!-- exclude changes in this referenced project -->
<ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" Watch="false" />
</ItemGroup>
<ItemGroup>
<!-- Exclude all Content items from being watched. -->
<Content Update="@(Content)" Watch="false" />
</ItemGroup>
사용자 지정 시계 프로젝트
dotnet-watch
는 C# 프로젝트로 제한되지 않습니다. 다양한 시나리오를 처리할 수 있는 맞춤형 시계 프로젝트를 만들 수 있습니다. 다음 프로젝트 레이아웃을 고려합니다.
-
테스트/
UnitTests/UnitTests.csproj
IntegrationTests/IntegrationTests.csproj
두 프로젝트를 모두 시청하는 것이 목표인 경우 두 프로젝트를 모두 감시하도록 구성된 사용자 지정 프로젝트 파일을 만듭니다.
<Project>
<ItemGroup>
<TestProjects Include="**\*.csproj" />
<Watch Include="**\*.cs" />
</ItemGroup>
<Target Name="Test">
<MSBuild Targets="VSTest" Projects="@(TestProjects)" />
</Target>
<Import Project="$(MSBuildExtensionsPath)\Microsoft.Common.targets" />
</Project>
두 프로젝트에서 파일 감시를 시작하려면 테스트 폴더로 변경합니다. 다음 명령을 실행합니다.
dotnet watch msbuild /t:Test
VSTest는 두 테스트 프로젝트에서 파일이 변경되면 실행됩니다.
dotnet-watch 구성
일부 구성 옵션은 환경 변수를 dotnet watch
통해 전달될 수 있습니다. 사용 가능한 변수는 다음과 같습니다.
설정 | 설명 |
---|---|
DOTNET_USE_POLLING_FILE_WATCHER |
"1" 또는 "true" dotnet watch 로 설정하면 CoreFx FileSystemWatcher 대신 폴링 파일 감시자를 사용합니다. 네트워크 공유 또는 Docker 탑재 볼륨의 파일을 볼 때 사용됩니다. |
DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM |
기본적으로 dotnet watch 는 복원 실행을 피하거나 파일 변경 시마다 감시 파일 집합을 다시 평가하는 등의 작업을 피하여 빌드를 최적화합니다. "1" 또는 "true"로 설정하면 이러한 최적화를 사용할 수 없습니다. |
DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER |
dotnet watch run 에서 구성된 launchBrowser 웹앱 launchSettings.json 에 대한 브라우저를 시작하려고 합니다. "1" 또는 "true"로 설정하면 이 동작이 표시되지 않습니다. |
DOTNET_WATCH_SUPPRESS_BROWSER_REFRESH |
dotnet watch run 는 파일 변경 내용을 검색할 때 브라우저를 새로 고치려고 시도합니다. "1" 또는 "true"로 설정하면 이 동작이 표시되지 않습니다. 이 동작은 DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER 가 설정된 경우에도 억제됩니다. |
브라우저 새로 고침
dotnet watch
는 콘텐츠가 변경되면 브라우저를 새로 고칠 수 있는 스크립트를 앱에 삽입합니다. 앱에서 응답 압축 dotnet watch
을 사용하도록 설정하는 경우와 같은 일부 시나리오에서는 스크립트를 삽입 하지 못할 수 있습니다. 개발 중인 이러한 경우 스크립트를 앱에 수동으로 삽입합니다. 예를 들어 스크립트를 수동으로 삽입하도록 웹앱을 구성하려면 다음을 포함 _framework/aspnet-browser-refresh.js
하도록 레이아웃 파일을 업데이트합니다.
@* _Layout.cshtml *@
<environment names="Development">
<script src="/_framework/aspnetcore-browser-refresh.js"></script>
</environment>
ASCII가 아닌 문자
Visual Studio 17.2 이상에는 .NET SDK 6.0.300 이상이 포함됩니다. .NET SDK 및 6.0.300 이후 dotnet-watch
버전에서는 핫 다시 로드 세션 중에 ASCII가 아닌 문자를 콘솔로 내보냅니다. Windows conhost와 같은 특정 콘솔 호스트에서 이러한 문자가 왜곡된 것처럼 보일 수 있습니다. 왜곡된 문자를 방지하려면 다음 방법 중 하나를 고려하세요.
-
DOTNET_WATCH_SUPPRESS_EMOJIS=1
이러한 값을 내보내지 않는 환경 변수를 구성합니다. - ASCII가 아닌 문자 렌더링을 지원하는 다른 터미널(예: https://github.com/microsoft/terminal)로 전환합니다.
ASP.NET Core