dosya izleyicisi kullanarak ASP.NET Core uygulamalar geliştirme
By Rick Anderson ve Victor Hurdugaci
dotnet watch , kaynak dosyalar değiştiğinde .NET Core CLI komutu çalıştıran bir araçtır. Örneğin, bir dosya değişikliği derleme, test yürütmesi veya dağıtımı tetikleyebilir.
Bu öğretici, iki uç nokta ile mevcut bir Web API 'SI kullanır: bir toplamı ve bir ürünü döndüren bir tane döndürür. Ürün yönteminde, bu öğreticide düzeltilen bir hata vardır.
Örnek uygulamayıindirin. iki projeden oluşur: WebApp (bir ASP.NET Core web apı 'si) ve webapptests (web apı 'si için birim testleri).
Bir komut kabuğu 'nda WebApp klasörüne gidin. Şu komutu çalıştırın:
dotnet run
Not
dotnet run --project <PROJECT>Çalıştırmak için bir proje belirtmek üzere ' i kullanabilirsiniz. Örneğin, dotnet run --project WebApp örnek uygulamanın kökünden çalıştırıldığında WebApp projesi de çalıştırılır.
Konsol çıktısı aşağıdakine benzer iletileri gösterir (uygulamanın çalıştığını ve istekleri beklediğini gösterir):
$ 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.
Bir web tarayıcısında http://localhost:<port number>/api/math/sum?a=4&b=5 sayfasına gidin. Sonucunu görmeniz gerekir 9 .
Ürün API 'sine () gidin http://localhost:<port number>/api/math/product?a=4&b=5 . 9Beklenmez değil, döndürür 20 . Bu sorun öğreticide daha sonra düzeltildi.
dotnet watchProjeye ekleme
dotnet watchDosya İzleyici Aracı, .NET Core SDK sürüm 2.1.300 eklenir. .NET Core SDK önceki bir sürümü kullanılırken aşağıdaki adımlar gereklidir.
Microsoft.DotNet.Watcher.Tools. Csproj dosyasına bir paket başvurusu ekleyin:<ItemGroup> <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" /> </ItemGroup>Microsoft.DotNet.Watcher.ToolsAşağıdaki komutu çalıştırarak paketi yüklemelisiniz:dotnet restore
Kullanarak .NET Core CLI komutları çalıştırma dotnet watch
Tüm .NET Core CLI komutları ile çalıştırılabilir dotnet watch . Örnek:
| Komut | İzle komutu |
|---|---|
| dotnet run | DotNet izleme çalıştırması |
| DotNet Run-f netcoreapp 3.1 | DotNet Watch çalıştırması-f netcoreapp 3.1 |
| DotNet Run-f netcoreapp 3.1----arg1 | DotNet Watch-f netcoreapp 3.1----arg1 |
| dotnet test | DotNet izleme testi |
dotnet watch run WebApp klasöründe çalıştırın. Konsol çıktısı başladığını gösterir watch .
dotnet watch runBir Web uygulamasında çalıştırıldığında UYGULAMANıN URL 'sine, bir kez daha sonra giden bir tarayıcı başlatılır. dotnet watch Bunu, uygulamanın konsol çıkışını okuyarak ve tarafından görüntülenmiş bir ileti için bekleyen yapar WebHost .
dotnet watch izlenen dosyalardaki değişiklikleri algıladığında tarayıcıyı yeniler. Bunu yapmak için, izle komutu, uygulama tarafından oluşturulan HTML yanıtlarını değiştiren bir ara yazılımı uygulamaya yerleştirir. Ara yazılım, dotnet watch tarayıcıya, tarayıcıyı yenilemeye izin veren bir JavaScript betik bloğu ekler. Şu anda, .html ve . css dosyaları gibi statik içerikler de dahil olmak üzere tüm izlenen dosyalardaki değişiklikler uygulamanın yeniden oluşturulmasına neden olur.
dotnet watch:
- Yalnızca varsayılan olarak derlemeleri etkileyen dosyaları izler.
- Diğer izlenen dosyalar (yapılandırma aracılığıyla), hala derleme gerçekleşirken sonuç olarak oluşur.
Yapılandırma hakkında daha fazla bilgi için bu belgede DotNet-Watch yapılandırması bölümüne bakın.
Not
dotnet watch --project <PROJECT>İzlenecek projeyi belirtmek için kullanabilirsiniz. Örneğin, dotnet watch --project WebApp run örnek uygulamanın kökünden çalıştırılması Ayrıca WebApp projesini de çalıştırır ve bu uygulamayı izleyebilir.
İle değişiklik yap dotnet watch
Çalıştığından emin olun dotnet watch .
Product MathController. cs yöntemindeki hatayı düzeltir, bu nedenle ürünü döndürür ve toplamı değil:
public static int Product(int a, int b)
{
return a * b;
}
Dosyayı kaydedin. Konsol çıktısı dotnet watch bir dosya değişikliği olduğunu algıladı ve uygulamayı yeniden başlatın.
Verify http://localhost:<port number>/api/math/product?a=4&b=5 doğru sonucu döndürür.
Kullanarak testleri çalıştırma dotnet watch
ProductMathController. cs yöntemini, toplamı döndürmek için geri değiştirin. Dosyayı kaydedin.Bir komut kabuğunda Webapptests klasörüne gidin.
DotNet restoreçalıştırın.
dotnet watch testöğesini ç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.ProductYöntem kodunu, ürünü geri döndürdüğünden düzeltir. Dosyayı kaydedin.
dotnet watch dosya değişikliğini algılar ve testleri yeniden çalıştırır. Konsol çıktısı, geçirilen testleri belirtir.
Dosya listesini izlemek için Özelleştir
Varsayılan olarak, dotnet-watch aşağıdaki glob desenleriyle eşleşen tüm dosyaları izler:
**/*.cs*.csproj**/*.resx- İçerik dosyaları:
wwwroot/**,**/*.config,**/*.json
. Csproj dosyası düzenlenerek, 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>
İzlenen dosyaları kabul etme
dotnet-watch varsayılan ayarlarını yok sayılabilecek şekilde yapılandırılabilir. Belirli dosyaları yoksaymak için Watch="false" özniteliği . csproj dosyasındaki bir öğenin tanımına 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# projeleriyle sınırlı değildir. Özel izleme projeleri, farklı senaryoları işlemek için oluşturulabilir. Aşağıdaki proje mizanpajını göz önünde bulundurun:
- sınamanız
- UnitTests/UnitTests. csproj
- Integrationtests/ıntegrationtests. csproj
Hedef her iki projeyi de seyretmek istiyorsanız, her iki projeyi de izlemek için 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ün:
dotnet watch msbuild /t:Test
VSTest, her iki test projesinde herhangi bir dosya değiştiğinde yürütülür.
DotNet-yapılandırmayı izle
Bazı yapılandırma seçenekleri, dotnet watch ortam değişkenleri aracılığıyla geçirilebilir. Kullanılabilir değişkenler şunlardır:
| Ayar | Açıklama |
|---|---|
DOTNET_USE_POLLING_FILE_WATCHER |
"1" veya "true" olarak ayarlandıysa dotnet watch CoreFx yerine bir yoklama Dosya İzleyicisi kullanır FileSystemWatcher . Ağ paylaşımlarında veya Docker takılmış birimlerde dosya izlerken kullanılır. |
DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM |
Varsayılan olarak, dotnet watch her dosya değişikliğine geri yükleme çalıştırma veya izlenen dosyalar kümesini yeniden değerlendirme gibi belirli işlemleri önleyerek 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``launchBrowser launchSettings.jsüzerinde yapılandırılmış Web uygulamaları için tarayıcıları başlatmaya çalışır. "1" veya "true" olarak ayarlanırsa, bu davranış bastırılır. |
DOTNET_WATCH_SUPPRESS_BROWSER_REFRESH |
dotnet watch run dosya değişikliklerini algıladığında tarayıcıları yenilemeyi dener. "1" veya "true" olarak ayarlanırsa, bu davranış bastırılır. Bu davranış ayarlanırsa da DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER gizlener. |
Tarayıcı yenileme
dotnet watch uygulamaya, içerik değiştiklerde tarayıcıyı yenilemesine olanak sağlayan bir betik ekser. Bazı senaryolarda, örneğin uygulama yanıt sıkıştırmayı mümkün hale geldiğinde dotnet watch betiği ekeleyeyemiyor olabilir. Geliştirme aşamasındaki bu tür durumlar için betiği uygulamaya el ile ekleyebilirsiniz. Örneğin, web uygulamasını betiği el ile eklemek üzere yapılandırmak için düzen dosyasını içerecek şekilde _framework/aspnet-browser-refresh.js güncelleştirin:
@* _Layout.cshtml *@
<environment names="Development">
<script src="/_framework/aspnetcore-browser-refresh.js"></script>
</environment>