如何在WPF中使用外部配置文件?

时间:2010-12-22 21:37:23

标签: wpf configuration external

我想设置一个外部配置文件,我可以存储在我的WPF应用程序的目录中,不一定是我创建程序时的exe目录。

我创建了一个App.Config文件,并将System.Configuration添加到我的程序集中。我的App.Config有:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings file="sd.config">
   <add key="username" value="joesmith" />
  </appSettings>
</configuration>

和我的sd.config(外部文件)现在位于我项目的根目录中,有

<?xml version="1.0"?>
 <appSettings>
   <add key="username1" value="janedoe" />
</appSettings>

在我使用的MainWindow cs课程中

string username = ConfigurationManager.AppSettings.Get("username1");

返回一个空字符串。当我从App.Config中检索用户名字段时,它可以工作。我错过了什么?非常感谢!

1 个答案:

答案 0 :(得分:4)

请参阅ConfigurationManager上的文档:

AppSettings属性:

  

获取当前应用程序默认的AppSettingsSection数据    配置。

您需要做一些额外的工作才能在应用程序的默认配置文件中获取不是的数据。

不是使用file=属性,而是向<appSettings>添加一个用于定义辅助配置文件位置的密钥,如下所示:

<add key="configFile" value="sd.config"/>

然后,为了使用ConfigurationManager从辅助配置文件中提取设置,您需要使用它的OpenMappedExeConfiguration method,它应该看起来像这样:

var map = new ExeConfigurationFileMap();
map.ExeConfigFilename = Path.Combine(
      AppDomain.CurrentDomain.SetupInformation.ApplicationBase, 
      ConfigurationManager.AppSettings["configFile"]
);

//Once you have a Configuration reference to the secondary config file, 
//you can access its appSettings collection:
var config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);

var userName1 = config.AppSettings["username1"];

对于您的示例,该代码可能不会死,但希望它能让您走上正确的轨道!