- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
背景:我正在使用 Timer 在 Windows 服务中定期做一些工作。我希望定时器在运行时是可配置的。我唯一能做的就是在启动时配置它。
我的解决方案:我正在使用 app.config 来配置计时器的开始时间和周期:
<appSettings>
<add key="StartTime" value="14:40:00"/>
<add key="Period" value="24:00:00"/>
</appSettings>
我正在使用 FileSystemWatcher 通知配置文件(将是 AppName.exe.config)上的文件写入
public ConfigWatcher(params object[] args)
{
configurationChangedListeners = new List<INotifyConfigurationChanged>();
string assemblyDirectory = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
NotifyFilters notifyFilters = NotifyFilters.LastWrite;
_fileSystemWatcher = new FileSystemWatcher()
{
Path = assemblyDirectory,
NotifyFilter = notifyFilters,
Filter = "*.config"
};
_fileSystemWatcher.Changed += OnChanged;
_fileSystemWatcher.EnableRaisingEvents = true;
if (args != null)
{
foreach (var arg in args)
{
AddListener(arg);
}
}
}
private void OnChanged(object source, System.IO.FileSystemEventArgs e)
{
try
{
_fileSystemWatcher.EnableRaisingEvents = false;
ConfigurationManager.RefreshSection("appSettings");
foreach (var listener in configurationChangedListeners)
{
listener.NotifyConfigurationChanged();
}
}
finally
{
_fileSystemWatcher.EnableRaisingEvents = true;
}
}
最后,每个监听器都像这样获取其配置:
public void NotifyConfigurationChanged()
{
string strKeyName = "StartTime";
string startTime = ConfigurationManager.AppSettings[strKeyName];
// ...
}
还有问题:- 当我编辑文件时,文件观察器会触发事件,但是当我尝试获取新的 AppSettings 时,我正在读取旧值(从服务启动时开始)
奇怪的是,这个设置在某些时候起作用,然后却不起作用(据我所知没有更改代码)。
非常感谢任何帮助/建议。
最佳答案
问题的答案(经过大量搜索 :D)是使用 OpenExeConfiguration 而不是直接访问 AppSettings。据我了解,刷新后需要再次打开配置:
var appSettings = ConfigurationManager.OpenExeConfiguration(System.Reflection.Assembly.GetEntryAssembly().Location).AppSettings;
string setting = appSettings.Settings[strKeyName].Value;
虽然我第一次尝试时第一个变体在特定情况下工作,但我很肯定......
关于c# - ConfigurationManager.RefreshSection ("appSettings") 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34439625/
我有一些好奇,希望 .Net 专家可以帮助我。 我有一个自定义配置部分,为了掌握它,我这样做: var s = (TestConfigurationSection)ConfigurationManag
我有一个解决方案分为两个项目,一个用于类库,另一个用于单元测试(使用 NUnit 2.5)。现在,在类库项目的 App.config 文件中,我添加了几行,例如 我在类库代码中阅读 Configur
这个问题在这里已经有了答案: The name 'ConfigurationManager' does not exist in the current context (19 个回答) 关闭 5
大家好,我收到以下错误:“名称‘ConfigurationManager’在当前上下文中不存在” // namespaces using System; using System.Collection
我尝试使用 ConfigurationManager,起初 System.Configuration 没有,我想知道为什么。 经过一些尝试,在包含引用 System.Configuration 之后它
我正在以最简单的方式使用配置管理器: 阅读: ConfigurationManager.AppSettings["Foo"] 写: Configuration config = Configurati
我的程序有如下配置文件 通过深入挖掘,我发现了如何 A) 检查该 key 是否存在 B) 在需要时添加一个新 key 。由于我的程序在程序文件中,我发现为了
我无法从 App.Config 文件中获取 connectionString.. 我错过了什么吗? 创建类(class)后,我将类(class)移到了某个文件夹中。这是问题所在吗?不移动类的解决方案是
所以,我有一个类库,我知道它会被网站使用,我需要访问配置设置。我添加了对 System.Configuration 的引用,但在类库中找不到 ConfigurationManager。有几件事,其中一
这是我使用的代码: private void SaveConfiguration() { if (txtUsername.Text != "" && txtPassword.Text != "
我正在尝试为我的项目编写单元测试,但它不允许我使用配置管理器。现在我的项目设置如下 ASP.Net 应用程序(所有 aspx 页面) ProjectCore(所有 C# 文件 - 模型) Projec
我有一个对 System.Configuration 的引用 - 并且 ConfigurationSettings 没有问题 - 但类型或命名空间“ConfigurationManager”找不到!?
我正在尝试从配置文件访问 connectionStrings。代码是 ASP.NET + C#。我已经添加了 System.Configuration 以供引用,并且还提到了使用。但它仍然不接受程序集
我有一个 VS2008 ASP.NET Web 服务应用程序在我的 XP 机器的本地 IIS 上运行。同一解决方案中的一个单独项目使用测试方法来调用 WS 调用,并运行它们的进程。 当我向 WS Ap
用于连接数据库时出现“ConfigurationManager未声明”错误信息如何解决? 这是给出错误的代码行: SQLConnStr= ConfigurationManager.Connection
我正在编写一个配置系统,其中 app.config 文件是由分布在多个位置的各种配置片段动态构建的。该系统目前的工作方式如下: Bootstrapper 构建配置文件。 Bootstrapper 使用
我一直使用我自己的配置文件格式,即 XML,然后我只是将 XML 反序列化为我项目中的一个对象,或者只是将其读入 XML 文档。 这似乎更容易阅读和访问我需要的信息。 我今天早上查看了 Configu
我使用下面的代码来读取配置。此代码在 global.asax Application_Start 方法中使用。 var showAllMethodSetting = Configura
我目前的理解是它调用我的配置文件中的某些内容并返回数据。我不清楚 ConfigurationManager.AppSettings 的参数是什么。 我已经浏览了此文档( https://msdn.mi
我根本无法让 Visual Studio 2005 找到 System.Configuration.ConfigurationManager 类。这是代码: using System.Configur
我是一名优秀的程序员,十分优秀!