【发布时间】:2011-06-12 19:50:47
【问题描述】:
我有一个包含两个项目的解决方案。一个项目是一个 Windows 服务,它包含一些用于执行各种功能的类。另一个项目是一个 Windows 窗体应用程序,用于执行各种测试和执行服务按需完成的任务。例如,该服务将在某个时间间隔内执行一些不同的任务,但如果您想在时间间隔过去之前执行其中一项任务,您可以加载 Windows 窗体应用程序并立即执行其中一项任务。 Windows 窗体应用程序(此处称为测试程序)引用 Windows 服务(此处称为服务)项目。当 Tester 加载时,它会从服务中创建一个类的实例。每当按下按钮执行任务时,它都会引用创建的实例并调用类的各种方法。该服务使用应用程序设置进行配置,因此有一个 app.config。使用 [ProjectName].Properties.Settings.Default.[SettingName] 访问配置设置。当测试仪的配置设置在其自己的 app.config(或发布后的 exe.config)上发生更改时,设置会被刷新而不会出现问题。如果测试仪关闭,配置被修改,然后重新打开,新的设置将被填充。如果在设置上调用 Reload 方法,则刷新配置没有问题。该服务以相同的方式执行。可以毫无问题地更新配置设置。
问题是如果需要对服务进行配置更改,当从测试器调用服务方法时,配置不会采用新的设置。将使用构建项目的任何设置。我无法让测试人员识别出服务的 app.config/exe.config 已更改,并且应该重新加载和使用新配置,而不是在 Visual Studio 中构建项目时使用的任何配置。也许我对这个主题的了解不够,但在我看来 app.config 在构建时会汇总到由服务创建的 .exe 文件中。
我试过封装Service的Reload方法并调用它,似乎没有什么区别。
我有一个示例项目,在非常基本的层面上执行上述描述。理想的目标是能够即时修改 exe.config 文件,并让服务和测试人员毫无问题地拾取它们。如果您想从编码的角度确切了解我的意思,可以在此处找到示例项目:example solution
任何帮助将不胜感激。感谢您的宝贵时间。
更新
我已设法找到解决此问题的方法,但我仍然很好奇是否有更好的方法。通过使用在两个项目之间共享的 app.config 并使用配置管理器而不是应用程序设置,一切都按预期工作。如果可能的话,我更喜欢使用应用程序设置;但是,它可以使用共享的 app.config 并且配置管理器指向该 app.config。
【问题讨论】:
标签: c# .net settings app-config