PhysicalFilesWatcher가 루트 및 FileSystemWatcher 경로의 유효성을 검사합니다.

이제 PhysicalFilesWatcher 생성자는 root 인수와 rootFileSystemWatcher.Path 간의 관계를 검증합니다. 이전에는 생성 시점에 허용되던 잘못된 조합이 이제는 예외를 발생시킵니다.

도입된 버전

.NET 11 미리 보기 4

이전 동작

PhysicalFilesWatcher 이전에는 생성자가 유효성 검사 또는 정규화 없이 제공된 root 것을 저장했습니다. null 또는 기타 잘못된 루트가 생성 시점에 허용될 수 있지만 이후 watcher 작업 중에 실패할 수 있습니다.

생성자도 비어 있지 않은 rootFileSystemWatcher와 관련이 없는 Path를 허용했습니다. 이러한 감시자는 일반적으로 구성된 루트와 관련된 변경 내용을 보고할 수 없지만 불일치로 인해 생성자가 throw되지는 않았습니다.

예를 들어, 다음과 같은 구문이 성공했습니다:

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);

새 동작

.NET 11부터는 PhysicalFilesWatcher 생성자가 root를 호출하여 Path.GetFullPath()을 정규화하고, 잘못된 입력은 생성 시점에 거부합니다.

  • nullroot이면 생성자는 ArgumentNullException를 발생시킵니다.
  • root을 전체 경로로 변환할 수 없는 경우 생성자는 Path.GetFullPath()의 해당 예외를 전파합니다.
  • root이 비어 있지 않고 FileSystemWatcher.Path와 관련이 없으면 생성자는 ArgumentException를 throw합니다.

FileSystemWatcher.Path는 비어 있거나, root와 같거나, root의 상위 항목이거나, root의 하위 항목인 경우 유효합니다. 이전 예제에서는 ArgumentExceptionunrelatedPath의 상위 항목도 하위 항목도 아니므로 이제 생성 시 root이 발생합니다.

아직 존재하지 않는 루트 디렉터리가 유효한 상태로 유지됩니다. 루트를 만들 때까지 파일 감시가 지연됩니다.

파괴적 변경 유형

이 변경 사항은 동작 변경입니다.

변경 이유

PhysicalFilesWatcher 이제 감시자가 생성될 때 존재하지 않는 루트를 지원합니다. 이렇게 하려면 루트의 정규화와 해당 루트와 함께 제공되는 FileSystemWatcher 조정이 필요합니다.

관련 없는 디렉터리를 모니터링하는 A FileSystemWatcher 는 구성된 루트에 대한 알림을 안정적으로 생성할 수 없습니다. 생성 시점에 이 잘못된 조합을 거부하면, 대체로 제대로 작동하지 않던 구성에서 watcher가 생성되는 것을 방지할 수 있습니다. 또한 루트도 검증하면 잘못된 경로가 이후 watcher 작업 중이 아니라 즉시 실패하게 됩니다. 자세한 내용은 dotnet/runtime#126411 참조하세요.

null이 아니고 유효한 경로를 root로 전달합니다.

비어 있지 않은 FileSystemWatcher이 있는 Path을 제공하는 경우 해당 경로가 root와 같거나, root의 상위 경로이거나, root의 하위 경로가 되도록 설정하세요. 다음은 그 예입니다.

string root = Path.GetFullPath(configuredRoot);

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

루트 디렉터리가 아직 없으면 빈 FileSystemWatcher.Path 디렉터리가 유효합니다.

string root = Path.GetFullPath(configuredRoot);

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

감시자는 루트 디렉터리를 만든 후 모니터링을 시작합니다.

영향을 받는 API