Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
PhysicalFilesWatcher Конструкторы теперь проверяют root аргумент и связь между root и FileSystemWatcher.Path. Недопустимые сочетания, которые ранее были приняты во время строительства, теперь вызывают исключение.
Представленная версия
.NET 11 предварительная версия 4
Предыдущее поведение
PhysicalFilesWatcher Ранее конструкторы хранили предоставленные root без проверки или нормализации. Корень null или иной недопустимый корень может быть принят при создании, а затем привести к сбою в ходе последующей операции наблюдения.
Конструкторы также принимали Path, у которого непустой FileSystemWatcher не был связан с root. Такой наблюдатель, как правило, не мог сообщать об изменениях, относящихся к настроенному корневому каталогу, но это несоответствие не приводило к выбросу исключения в конструкторе.
Например, следующее строительство выполнено успешно:
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() и отклоняют недопустимые входные данные при создании:
- Если
rootимеет значениеnull, конструктор вызывает исключение ArgumentNullException. - Если
rootневозможно преобразовать в полный путь, конструктор распространяет применимое исключение изPath.GetFullPath(). - Если
FileSystemWatcher.Pathне пусто и не связано сroot, конструктор вызывает исключение ArgumentException.
FileSystemWatcher.Path считается допустимым, если он пуст, равен root, является предком root или потомком root. В предыдущем примере создание теперь вызывает ArgumentException, потому что unrelatedPath не является ни предком, ни потомком root.
Корневой каталог, который еще не существует, остается допустимым. Просмотр файлов откладывается до создания корневого каталога.
Тип разрушающего изменения
Это изменение поведения.
Причина изменения
PhysicalFilesWatcher теперь поддерживает корневые каталоги, которые ещё не существуют на момент создания наблюдателя. Для этого требуется нормализация корня и согласование заданного FileSystemWatcher с этим корнем.
Объект FileSystemWatcher , отслеживающий несвязанный каталог, не может надежно создавать уведомления для настроенного корневого каталога. Отклонение этой недопустимой комбинации во время строительства предотвращает создание наблюдателя в конфигурации, которая обычно не работала. Проверка корня также приводит к тому, что недопустимые пути сразу вызывают ошибку, а не при последующей операции наблюдателя. Дополнительные сведения см. в статье dotnet/runtime#126411.
Рекомендуемое действие
Передайте допустимый путь root, отличный от NULL.
Если вы указываете FileSystemWatcher с непустым Path, настройте путь этого FileSystemWatcher так, чтобы он совпадал с путем 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);
Наблюдатель начинает мониторинг после создания корневого каталога.