这个问题在这里已有答案:
我在我的服务中有一个方法,我正在观看服务配置文件。它看起来像这样:
private void WatchConfigurationFile()
{
var fileLocation = Assembly.GetExecutingAssembly().Location;
watcher.Path = Path.GetDirectoryName(fileLocation);
watcher.NotifyFilter = NotifyFilters.LastWrite;
watcher.Filter = fileLocation + ".config";
watcher.Changed += new FileSystemEventHandler(OnConfigChange);
watcher.EnableRaisingEvents = true;
Log.DebugFormat("config location: {0}", watcher.Filter.ToString());
}
日志返回我的目标文件的完整文件路径位置,包括存储位置:C /用户等
但是,当我更新配置文件时,更改不会显示在我的日志文件中。记录是这样完成的:
private void OnConfigChange(object source, FileSystemEventArgs e)
{
ConfigurationManager.RefreshSection("appSettings");
Log.DebugFormat("Updated ConnectionString: {0}", ConfigurationManager.AppSettings["dbConn"]);
}
但是在我的文件观察器类中,如果我将过滤器更改为文件的实际名称,在我的情况下,最后是带有“.config”的服务exe名称。它工作正常。
为什么一个有效,另一个无效?
您应该将watcher.Filter = "*.config";
用于所有配置文件,或者将watcher.Filter = "yourFileName.config";
用于特定文件。无需在此指定完整路径;
根据MSDN:要观察所有文件中的更改,请将Filter属性设置为空字符串(“”)。要查看特定文件,请将Filter属性设置为文件名。例如,要监视文件MyDoc.txt中的更改,请将Filter属性设置为“MyDoc.txt”。您还可以查看特定类型文件的更改。例如,要监视任何文本文件中的更改,请将Filter属性设置为“.txt”。不支持使用多个过滤器,例如“.txt | * .doc”。