Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Tarafından Rick Anderson ve Victor Hurdugaci
dotnet watch , kaynak dosyalar değiştiğinde .NET CLI komutu çalıştıran bir araçtır. Örneğin, bir dosya değişikliği derlemeyi, test yürütmeyi veya dağıtımı tetikleyebilir.
Bu öğreticide, toplam ve ürün döndüren iki uç noktası bulunan mevcut bir web API'si kullanılır. Ürün metodunda bir hata var, bu öğreticide düzeltiliyor.
örnek uygulamasını indirin. İki projeden oluşur: WebApp (ASP.NET Core web API'si) ve WebAppTests (web API'sinin birim testleri).
Komut kabuğunda WebApp klasörüne gidin. Aşağıdaki komutu çalıştırın:
dotnet run
Uyarı
Çalıştırılacak bir proje belirtmek için kullanabilirsiniz dotnet run --project <PROJECT> . Örneğin, örnek uygulamanın kökünden çalıştırıldığında dotnet run --project WebAppWebApp projesi de çalıştırılır.
Konsol çıkışı aşağıdakine benzer iletiler gösterir (uygulamanın çalıştığını ve istekleri beklediğini belirtir):
$ 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.
Web tarayıcısında http://localhost:<port number>/api/math/sum?a=4&b=5 adresine gidin.
9 sonucunu görmeniz gerekir.
Ürün API'sine (http://localhost:<port number>/api/math/product?a=4&b=5) gidin. Beklediğiniz gibi 9 değil, 20 döndürür. Bu sorun öğreticinin daha sonraki bölümlerinde düzeltilecektir.
Bir projeye dotnet watch ekle
Dosya dotnet watch izleyici aracı , .NET Core SDK'sının 2.1.300 sürümüne dahildir. .NET Core SDK'nın önceki bir sürümü kullanılırken aşağıdaki adımlar gereklidir.
Dosyaya
Microsoft.DotNet.Watcher.Toolspaket başvurusu ekleyin:.csproj<ItemGroup> <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" /> </ItemGroup>Aşağıdaki komutu çalıştırarak
Microsoft.DotNet.Watcher.Toolspaketini yükleyin:dotnet restore
kullanarak .NET CLI komutlarını çalıştırma dotnet watch
Herhangi bir .NET CLI komutu ile dotnet watchçalıştırılabilir. Örneğin:
| Komut | Saat ile komut |
|---|---|
| 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 (bu komut, .NET Core uygulamanızın çalışmasını sağlar, örnek olarak netcoreapp3.1 yapılandırması içindir) |
| dotnet testi | dotnet watch test |
dotnet watch run klasöründe komutunu çalıştırın. Konsol çıkışı watch'nin başlatıldığını gösterir.
Bir web uygulamasında çalıştırılırsa dotnet watch run , hazır olduğunda uygulamanın URL'sine gidebilecek bir tarayıcı başlatılır.
dotnet watch bunu, uygulamanın konsol çıkışını okuyarak ve tarafından WebHostgörüntülenen hazır iletiyi bekleyerek yapar.
dotnet watch izlenen dosyalarda değişiklik algıladığında tarayıcıyı yeniler. Bunu yapmak için, watch komutu uygulamaya uygulama tarafından oluşturulan HTML yanıtlarını değiştiren bir ara yazılım ekler. Ara yazılım, sayfaya tarayıcıya yenileme talimatı vermenizi sağlayan dotnet watch bir JavaScript betik bloğu ekler. Şu anda .html ve .css gibi statik içerikler de dahil olmak üzere izlenen tüm dosyalarda yapılan değişiklikler, uygulamanın yeniden oluşturulmasına yol açar.
dotnet watch:
- Yalnızca varsayılan olarak derlemeleri etkileyen dosyaları izler.
- Ek olarak izlenen dosyalar (yapılandırma aracılığıyla) yine de derlemenin gerçekleşmesiyle sonuçlanır.
Yapılandırma hakkında daha fazla bilgi için bu belgedeki dotnet-watch yapılandırmasına bakın.
Uyarı
İzleneceğiniz bir proje belirtmek için kullanabilirsiniz dotnet watch --project <PROJECT> . Örneğin, örnek uygulamanın kök dizininden dotnet watch --project WebApp run çalıştırmak, WebApp projesini de çalıştırır ve izler.
dotnet watch ile değişiklik yapın
dotnet watch çalıştığından emin olun.
Product yöntemindeki MathController.cs hatasını düzeltin, böylece toplamı değil, ürünü döndürsün.
public static int Product(int a, int b)
{
return a * b;
}
Dosyayı kaydedin. Konsol çıkışı, bir dosya değişikliği algılandığını dotnet watch ve uygulamayı yeniden başlatıldığını gösterir.
Doğrula http://localhost:<port number>/api/math/product?a=4&b=5 işlevi doğru sonucu verir.
dotnet watch kullanarak testleri çalıştırın
Productyöntemini,MathController.cstoplamı döndürecek şekilde eski haline getirin. Dosyayı kaydedin.Komut kabuğunda WebAppTests klasörüne gidin.
dotnet restore komutunu çalıştırın.
dotnet watch test'i çalıştırın. Çıktısı bir testin başarısız olduğunu ve izleyicinin dosya değişikliklerini beklediğini gösterir:Total tests: 2. Passed: 1. Failed: 1. Skipped: 0. Test Run Failed.Yöntem kodunu düzelterek
Productmetodunun ürünü döndürmesini sağlayın. Dosyayı kaydedin.
dotnet watch dosya değişikliğini algılar ve testleri yeniden çalıştırır. Konsol çıkışı, geçirilen testleri gösterir.
İzleyebileceğiniz dosya listesini özelleştirme
Varsayılan olarak, dotnet-watch aşağıdaki glob desenleri ile eşleşen tüm dosyaları izler:
**/*.cs*.csproj**/*.resx- İçerik dosyaları:
wwwroot/**,**/*.config,**/*.json
Dosyayı düzenleyerek .csproj izleme listesine daha fazla öğe eklenebilir. Öğeler tek tek veya glob desenleri kullanılarak belirtilebilir.
<ItemGroup>
<!-- extends watching group to include *.js files -->
<Watch Include="**\*.js" Exclude="node_modules\**\*;**\*.js.map;obj\**\*;bin\**\*" />
</ItemGroup>
İzlenecek dosyaları geri çevirme
dotnet-watch varsayılan ayarlarını yoksayacak şekilde yapılandırılabilir. Belirli dosyaları yoksaymak için Watch="false" dosyasındaki bir öğenin tanımına .csproj özniteliğini ekleyin.
<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>
Özel saat projeleri
dotnet-watch C# projeleri ile sınırlı değildir. Farklı senaryoları işlemek için özel izleme projeleri oluşturulabilir. Aşağıdaki proje düzenini göz önünde bulundurun:
-
test/
UnitTests/UnitTests.csprojIntegrationTests/IntegrationTests.csproj
Hedef her iki projeyi de izlemekse, her iki projeyi de izlemek üzere yapılandırılmış özel bir proje dosyası oluşturun:
<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>
Her iki projede de dosya izlemeye başlamak için test klasörüne geçin. Aşağıdaki komutu yürütür:
dotnet watch msbuild /t:Test
VsTest, herhangi bir test projesinde herhangi bir dosya değiştiğinde yürütülür.
dotnet-watch yapılandırması
Bazı yapılandırma seçenekleri, dotnet watch'ye ortam değişkenleri aracılığıyla geçirilebilir. Kullanılabilir değişkenler şunlardır:
| Ayarlar | Açıklama |
|---|---|
DOTNET_USE_POLLING_FILE_WATCHER |
"1" veya "true" olarak ayarlanırsa CoreFx dotnet watchFileSystemWatcheryerine bir yoklama dosyası izleyicisi kullanır. Ağ paylaşımlarında veya Docker'a bağlı birimlerde dosyaları izlerken kullanılır. |
DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM |
Varsayılan olarak, dotnet watch geri yüklemeyi çalıştırma veya her dosya değişikliğinde izlenen dosya kümesini yeniden değerlendirme gibi belirli işlemlerden kaçınarak derlemeyi iyileştirir. "1" veya "true" olarak ayarlanırsa, bu iyileştirmeler devre dışı bırakılır. |
DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER |
dotnet watch run içindeki launchBrowser ile yapılandırılmış web launchSettings.json uygulamaları için tarayıcıları başlatmaya çalışır. "1" veya "true" olarak ayarlanırsa, bu davranış gizlenir. |
DOTNET_WATCH_SUPPRESS_BROWSER_REFRESH |
dotnet watch run dosya değişikliklerini algıladığında tarayıcıları yenilemeye çalışır. "1" veya "true" olarak ayarlanırsa, bu davranış gizlenir. Ayarlanırsa DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER bu davranış da gizlenir. |
Tarayıcı yenileme
dotnet watch uygulamaya, içerik değiştiğinde tarayıcıyı yenilemesini sağlayan bir betik ekler. Belli senaryolar söz konusu olduğunda, örneğin uygulama yanıt sıkıştırmayı etkinleştirdiğinde, dotnet watch betiği ekleyemeyebilir. Geliştirme aşamasındaki bu gibi durumlarda betiği uygulamaya el ile ekleyin. Örneğin, web uygulamasını betiği el ile eklenecek şekilde yapılandırmak için yerleşim dosyasını _framework/aspnet-browser-refresh.js şeklinde güncelleştirin.
@* _Layout.cshtml *@
<environment names="Development">
<script src="/_framework/aspnetcore-browser-refresh.js"></script>
</environment>
ASCII olmayan karakterler
Visual Studio 17.2 veya üzeri .NET SDK 6.0.300 veya üzerini içerir. .NET SDK ve 6.0.300 sonraki sürümlerinde, dotnet-watch etkin yeniden yükleme oturumu sırasında konsola ASCII olmayan karakterler yayar. Windows conhost gibi bazı konsol barındırıcılarında bu karakterler bozuk bir şekilde görünebilir. Çapraşık karakterleri önlemek için aşağıdaki yaklaşımlardan birini göz önünde bulundurun:
- Ortam değişkenini
DOTNET_WATCH_SUPPRESS_EMOJIS=1bu değerlerin yayılmalarını engelleyerek yapılandırın. - ASCII olmayan karakterlerin işlenmesini destekleyen gibi https://github.com/microsoft/terminalfarklı bir terminale geçin.
ASP.NET Core