I'm trying to watch for changes in a specified directory using the FileSystemWatcher class. Based heavily off of the example on the MS docs which works fine on my windows machine. The problem though, I'm targeting Ubtuntu 18.04 lts and greater for running this. The watcher apparently sets up just fine (code executes and console/logging messages are printed out) but none of the file system events are ever triggered, ie: Change/Create/Delete/Rename/etc nothing triggers those.
Are there any undocumented or "hidden" setup details needed to work with Linux, or is this not supported altogether and even though it's in .NET 5 shouldn't be used for Linux/Mac/Unix builds? I can't find any definitive docs on non-Windows usage, but thought that .NET 5 was meant to work "portably." Any tips/details would be appreciated as I'm sure others have come across this as well, or are at least likely to.
Current code that works with Windows build but not Linux:
public void WatchFolder()
{
string directoryPath = _configuration["FolderLocation"];
if (string.IsNullOrWhiteSpace(directoryPath))
throw new Exception("Folder location was not set.");
try
{
// setup file system watcher
using var watcher = new FileSystemWatcher(directoryPath);
watcher.NotifyFilter = NotifyFilters.Attributes
| NotifyFilters.CreationTime
| NotifyFilters.DirectoryName
| NotifyFilters.FileName
| NotifyFilters.LastAccess
| NotifyFilters.LastWrite
| NotifyFilters.Security
| NotifyFilters.Size;
// add handler methods
watcher.Changed += OnChanged;
watcher.Created += OnCreated;
watcher.Deleted += OnDeleted;
watcher.Renamed += OnRenamed;
watcher.Error += OnError;
watcher.IncludeSubdirectories = true;
watcher.EnableRaisingEvents = true;
// wait for next key to kill execution
Console.ReadLine();
}
catch (Exception ex)
{
_logger.LogError($"Couldn't watch folder: {directoryPath}\nBecause: {ex}");
}
}
Edit
Attempting to use the answer in this related SO quetion: https://stackoverflow.com/a/57025115/8645002 did not fix the issue. The delegate still doesn't trigger when running the built exe in a Linux environment.
note: building for Linux x64 single file self-contained exe.