C#中的集中设置用于多个程序

时间:2009-11-26 02:38:05

标签: c# app-config

我最近得到了一堆维护的程序,我正在努力寻找一些帮助来采用一些最佳实践。它们本质上是三个独立的软件,它们使用通用DLL来管理应用程序共享的一系列设置。 DLL以这种方式工作:它交换用户设置文件(深埋在Windows用户配置文件夹中的XML文件),以及由硬编码(egad!)路径指定的修复文件。

将其保留为用户设置而不是应用设置的基本原理是可以在多个位置找到DLL(每个应用程序将使用一个),因此用户设置文件是common(如果DLL的所有副本都是相同的编译),而使用应用程序设置,则会有与副本一样多的app.config文件。

我正在尝试设想一种更好的方法来集中这些配置并结束无意义的文件交换。一种方法(实际上,最有可能是最好的方法)是重新设计所有3个应用程序,以便它们都使用带有自己的“app.config”的中央dll。还有其他更值得推荐的场地吗?

4 个答案:

答案 0 :(得分:7)

您是否考虑过使用Windows注册表?我们都讨厌它,但也许它是这种情况下的最佳选择,因为它是集中式的,你可以在应用程序之间轻松共享设置。

编辑:如果您不喜欢注册表(我不会因此而责怪您),您可以在Application Data special下的目录中创建XML或其他配置文件夹。据我所知,这就是现在这样做的。

string appData = Environment.GetFolderPath(
    Environment.SpecialFolder.LocalApplicationData));
string folder = "MyApplicationName";
string fileName = "settings.xml";
string path = Path.Combine(Path.Combine(appData, folder), fileName);

答案 1 :(得分:2)

对于这个精确的问题,如果它是.Net DLL,你可以使用 GAC ,这会集中你的DLL。所有软件都知道他们可以访问此DLL的位置。通过这种方式,您可以减少重构

这只是此问题的补丁 。对于新的发展,我不建议这样做。

GAC in Wikipedia

答案 2 :(得分:2)

您可以在公共文件中使用设置 - 很可能存储在用户设置文件夹中的AppData下

这里的优点是您无需修改​​任何代码。

应用程序会将其设置存储在其正常的配置文件中,并参考dll设置的公共文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings file="commondll.config">
    <add key="KeyToOverride" value="Original" />
    <add key="KeyToNotOverride" value="Standard" />
  </appSettings>
</configuration>

然后在公共文件commondll.config中:

<appSettings>
  <add key="KeyToOverride" value="Overridden" />
  <add key="KeyToBeAdded" value="EntirelyNew" />
</appSettings>

答案 3 :(得分:0)