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.

  1. Microsoft.DotNet.Watcher.Tools . Csproj dosyasına bir paket başvurusu ekleyin:

    <ItemGroup>
        <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" />
    </ItemGroup>
    
  2. 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

  1. Product MathController. cs yöntemini, toplamı döndürmek için geri değiştirin. Dosyayı kaydedin.

  2. Bir komut kabuğunda Webapptests klasörüne gidin.

  3. DotNet restoreçalıştırın.

  4. 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.
    
  5. 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>