PhysicalFilesWatcher kök ve FileSystemWatcher yollarını doğrular

PhysicalFilesWatcher oluşturucuları artık FileSystemWatcher.Path bağımsız değişkenini ve root ile root arasındaki ilişkiyi doğrular. Daha önce inşaat zamanında kabul edilen geçersiz birleşimler artık bir özel durum oluşturur.

Sürüm kullanıma sunulmuştur

.NET 11 Önizleme 4

Önceki davranış

PhysicalFilesWatcher Daha önce oluşturucular doğrulama veya normalleştirme olmadan sağlanan root öğesini depolamıştı. Bir null veya başka bir nedenle geçersiz olan bir kök, oluşturma sırasında kabul edilebilir ve daha sonraki bir izleyici işleminde başarısız olabilir.

Oluşturucular ayrıca, boş olmayan root öğesi FileSystemWatcher ile ilgisiz olan bir Path öğesini de kabul ediyordu. Böyle bir izleyici genellikle yapılandırılmış kökle ilgili değişiklikleri raporlayamazdı, ancak bu uyuşmazlık oluşturucunun bir istisna fırlatmasına neden olmadı.

Örneğin, aşağıdaki yapı başarılı oldu:

string root = Path.Combine(Path.GetTempPath(), "root");
string unrelatedPath = Path.Combine(Path.GetTempPath(), "unrelated");
Directory.CreateDirectory(root);
Directory.CreateDirectory(unrelatedPath);

using var fileSystemWatcher = new FileSystemWatcher(unrelatedPath);
using var watcher = new PhysicalFilesWatcher(
    root,
    fileSystemWatcher,
    pollForChanges: false);

Yeni davranış

.NET 11'den itibaren, PhysicalFilesWatcher oluşturucuları, root çağrısı yaparak Path.GetFullPath() değerini normalleştirir ve geçersiz girdileri oluşturma sırasında reddeder:

  • root, null ise, oluşturucu ArgumentNullException fırlatır.
  • root tam yola dönüştürülemezse, oluşturucu Path.GetFullPath() öğesinden gelen ilgili özel durumu iletir.
  • FileSystemWatcher.Path boş değilse ve root ile ilişkili değilse, oluşturucu ArgumentException fırlatır.

FileSystemWatcher.Path, boş olduğunda, root öğesine eşit olduğunda, root öğesinin bir atası olduğunda veya root öğesinin bir alt öğesi olduğunda geçerlidir. Önceki örnekte, ArgumentException, unrelatedPath öğesinin ne atası ne de soyundan geleni olduğundan, oluşturma işlemi artık root oluşturur.

Henüz var olmayan bir kök dizin geçerli kalır. Dosya izleme, kök oluşturulana kadar erteleniyor.

Kesinti yaratan değişiklik türü

Bu değişiklik davranışsal bir değişikliktir.

Değişiklik nedeni

PhysicalFilesWatcher, izleyici oluşturulduğunda mevcut olmayan kökleri artık destekliyor. Bu işlem, kökün normalleştirilmesini ve sağlanan FileSystemWatcher öğesinin bu kökle eşgüdümlenmesini gerektirir.

İlişkili olmayan bir dizini izleyen FileSystemWatcher, yapılandırılmış kök dizin için güvenilir şekilde bildirimler oluşturamaz. Bu geçersiz kombinasyonun oluşturma aşamasında reddedilmesi, genel olarak işe yaramayan bir yapılandırmada bir izleme bileşeninin oluşturulmasını önler. Kökün doğrulanması, geçersiz yolların daha sonraki bir izleyici işlemi yerine hemen başarısız olmasına da neden olur. Daha fazla bilgi için bkz. dotnet/runtime#126411.

Null olmayan, geçerli bir yolu olarak rootgeçirin.

Boş olmayan bir FileSystemWatcher içeren bir Path sağladığınızda, yolunu root ile aynı, root’nin üst öğesi veya alt öğesi olacak şekilde yapılandırın. Örneğin:

string root = Path.GetFullPath(configuredRoot);

using var fileSystemWatcher = new FileSystemWatcher(root);
using var watcher = new PhysicalFilesWatcher(
    root,
    fileSystemWatcher,
    pollForChanges: false);

Kök dizin henüz yoksa boş FileSystemWatcher.Path bir dizin geçerlidir:

string root = Path.GetFullPath(configuredRoot);

using var fileSystemWatcher = new FileSystemWatcher();
using var watcher = new PhysicalFilesWatcher(
    root,
    fileSystemWatcher,
    pollForChanges: false);

İzleyici, kök dizin oluşturulduktan sonra izlemeye başlar.

Etkilenen API'ler