如何在C#中发现appsettings已更改?

如何在C#中发现appsettings已更改?,c#,service,C#,Service,有没有办法(活动将是最好的选择),哪一个会注意到我的代码,即应用程序设置已更改 我正试图实现一个windows服务,在该服务中,管理员应该在不重新启动服务的情况下“联机”更改行为 我在考虑FileSystemWatcher,但在这个选项中,我必须硬编码配置文件的路径和名称,所以也许还有其他方法可以做到这一点 更新 下面的答案建议使用AppDomain.CurrentDomain.SetupInformation.ConfigurationFile,但如果外部配置文件定义如下,则此选项将不起作用:

有没有办法(活动将是最好的选择),哪一个会注意到我的代码,即应用程序设置已更改

我正试图实现一个windows服务,在该服务中,管理员应该在不重新启动服务的情况下“联机”更改行为


我在考虑
FileSystemWatcher
,但在这个选项中,我必须硬编码配置文件的路径和名称,所以也许还有其他方法可以做到这一点

更新

下面的答案建议使用
AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
,但如果外部配置文件定义如下,则此选项将不起作用:

<configuration>
  <appSettings configSource="appsettings.config"/>
</configuration>


可能通过在后台线程中使用计时器,并每5秒检查一次配置文件校验和(如果比fire config changed事件发生更改)。

您可以使用
FileSystemWatcher
和以下语句的路径:

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

不需要硬编码路径。

FileSystemWatcher
Timer
好得多,但我仍然会遇到相同的问题,比如路径和名称的编码。此外,我还必须重新读取配置文件。否路径没有问题,您可以从以下位置获取:AppDomain.CurrentDomain.SetupInformation.ConfigurationFile,但我认为FileSystemWatcher是一个更好的解决方案,因为您使用的CPU和内存少于.Hmm。我想知道让用户更改一个概念上为只读的文件(如果你做得对,那么它将位于
程序文件中,需要提升更改权限)是否真的是允许用户对你的服务进行更改的最佳方式。我会考虑一个在用户登录中运行的助手应用程序,它可以与您的服务(可能使用WCF)通信,并使用Stounds.St设置框架来设置这些服务。这项服务应该做什么?@ Spner-Yu选项对于管理员和测试来说要复杂得多。文件中的简单更改总是更容易管理。@MikaelÖstberg它重要吗,它有什么作用?你认为不同的解决方案有不同的方法吗?这可能是真的。考虑到app.config包含许多对成功启动应用程序至关重要的其他设置,将这些设置放在服务用户的appdata文件夹中自己的配置文件中不是更好吗?这样,关键设置和非关键设置彼此隔离。如果我将外部应用程序设置定义为:
,则它将不起作用。当然会。使用上面提到的路径,使用您喜欢的任何方法,查找configSource属性并监视它。让它变得超级通用,在GitHub上发布,创建nuget包,然后变得超级著名。:)