使用多个设置文件并在运行时选择它们

时间:2017-11-08 10:02:17

标签: c# application-settings

截至今天,我的项目中有一个App.config文件。

我在程序中使用我的配置设置,如下所示:

ConfigurationManager.AppSettings["FileDir"];

其中 FileDir App.config中的设置,定义如下:

<appSettings>
  <add key="FileDir" value="C:\MyFolder" />
</appSettings>

在我的构建文件夹(是DebugRelease)中,如果我的项目名为MyProject.exe.config,该文件将显示为MyProject

我想添加多个类似的配置文件,它们具有完全相同的变量但值不同,我想使用命令行参数指向配置文件,以便我可以重用相同的程序,但设置不同。 / p>

如何告诉我的程序选择哪个配置文件?

3 个答案:

答案 0 :(得分:1)

我会做这样的事情:

<appSettings>
    <add key="WordV1" value="abc" />
    <add key="WordV2" value="def" />
    <add key="WordV3" value="ghi" />
</appSettings>
string word = ConfigurationManager.AppSettings["WordV" + user.version];

答案 1 :(得分:0)

正常的方法是拥有基于构建配置应用的转换文件。所以你仍然只有一个配置文件,但它根据构建的预期用途而不同地构建。

像SlowCheetah这样做的事情,或者如果您正在使用octopus deploy之类的部署进行部署,那么可以在部署时执行此操作。

https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.SlowCheetah-XMLTransforms

答案 2 :(得分:0)

另一种解决方案如何,特别是在陈述之后:

  

截至今天,我的项目中有一个App.config文件。

为什么你没有自己的设置类?您可以使用代码中的一组默认设置来维护它 - 这比尝试维护多个App.config文件要简洁得多。类似的东西:

sync.Map

您可以拥有不同的实例,或者根据您需要执行的操作,您可以加载第二组设置:

[Serializable]
public class AppSettings
{
  public string FileDir { get; set; }

  public AppSettings()
  {
    FileDir = string.Empty;
  }

  public AppSettings(string fDir)
  {
    FileDir = fDir;
  }

  public void SetDefault()
  {
    FileDir = "SomeDefault";
  }
}

坚持以上的课程:

m_dSettings = SettingsIO.GetSettings(Path.Combine(Application.StartupPath, "DefaultSettings.xml"));
m_cSettings = SettingsIO.GetSettings(Path.Combine(Application.StartupPath, "CustomSettings.xml"));
m_eSettings = new AppSettings("F:\\Dir");

SettingsIO.WriteSettings(m_dSettings, Path.Combine(Application.StartupPath, "DefaultSettings.xml"));
SettingsIO.WriteSettings(m_dSettings, Path.Combine(Application.StartupPath, "CustomSettings.xml"));
SettingsIO.WriteSettings(m_eSettings, Path.Combine(Application.StartupPath, "ExtraSettings.xml"));