Dosya izleyici kullanarak ASP.NET Core uygulamaları geliştirme
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, biri toplam, diğeri de ürün döndüren olmak üzere iki uç noktası olan mevcut bir web API'si kullanılır. Ürün yönteminde bu öğreticide düzeltilen bir hata var.
Örnek uygulamayı 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
Not
Ç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 WebApp
WebApp 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 adresine http://localhost:<port number>/api/math/sum?a=4&b=5
gidin. sonucunu 9
görmeniz gerekir.
Ürün API'sine (http://localhost:<port number>/api/math/product?a=4&b=5
) gidin. Beklediğiniz gibi değil 20
döndürür9
. Bu sorun öğreticinin ilerleyen bölümlerinde düzeltilmiştir.
Projeye ekleme dotnet watch
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
.csproj
paketMicrosoft.DotNet.Watcher.Tools
başvurusu ekleyin:<ItemGroup> <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" /> </ItemGroup>
Aşağıdaki komutu çalıştırarak
Microsoft.DotNet.Watcher.Tools
paketini 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:
Command | Saatli 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 |
dotnet test | dotnet watch test |
WebApp klasöründe komutunu çalıştırındotnet watch run
. Konsol çıkışı başlatıldığını gösterir watch
.
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 ve .css
gibi .html
statik içerik de dahil olmak üzere izlenen tüm dosyalarda yapılan değişiklikler uygulamanın yeniden oluşturulmasına neden olur.
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.
Not
İzleneceğiniz bir proje belirtmek için kullanabilirsiniz dotnet watch --project <PROJECT>
. Örneğin, örnek uygulamanın kökünden çalıştırmak dotnet watch --project WebApp run
da çalıştırılır ve WebApp projesini izler.
ile değişiklik yapma dotnet watch
Çalıştığından emin dotnet watch
olun.
yönteminin Product
toplamını değil ürünü döndürmesi MathController.cs
için hata düzeltildi:
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.
Kullanarak testleri çalıştırma dotnet watch
Product
geri yönteminiMathController.cs
toplamı döndürecek şekilde değiştirin. 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
Product
ü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 özniteliğini Watch="false"
dosyadaki bir öğenin tanımına .csproj
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 izleme 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.csproj
IntegrationTests/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. Şu kodu yürütün:
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 ortam değişkenleri aracılığıyla geçirilebilir dotnet watch
. Kullanılabilir değişkenler şunlardır:
Ayar | Açıklama |
---|---|
DOTNET_USE_POLLING_FILE_WATCHER |
"1" veya "true" olarak ayarlanırsa CoreFx dotnet watch FileSystemWatcher yerine 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çinde yapılandırılmış launchSettings.json web launchBrowser 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 gizlenır. |
Tarayıcı yenileme
dotnet watch
uygulamaya, içerik değiştiğinde tarayıcıyı yenilemesini sağlayan bir betik ekler. Uygulamanın yanıt sıkıştırmayı dotnet watch
etkinleştirdiği durumlar gibi bazı senaryolarda 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 düzen dosyasını içerecek _framework/aspnet-browser-refresh.js
şekilde güncelleştirin:
@* _Layout.cshtml *@
<environment names="Development">
<script src="/_framework/aspnetcore-browser-refresh.js"></script>
</environment>
ASCII olmayan karakterler
Visual Studio 17.2 ve üzeri .NET SDK 6.0.300 ve ü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 konaklarında bu karakterler bozuk görünebilir. Bozuk karakterleri önlemek için aşağıdaki yaklaşımlardan birini göz önünde bulundurun:
- Ortam değişkenini
DOTNET_WATCH_SUPPRESS_EMOJIS=1
bu 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