使用ConfigurationManager无法读取配置

时间:2012-07-11 09:53:14

标签: c# .net xml configuration configurationmanager

我第一次尝试使用ConfigurationManager,这就是我所做的:

1。)创建了一个新项目(TestProject) 2。)右键单击TestProject - >添加 - >新商品 - >应用程序配置文件(名称:Conf.config) 3。)我编辑了文件,看起来像这样:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="key1" value="output1"/>
    <add key="key2" value="output2"/>
    <add key="key3" value="output3"/>
  </appSettings>
</configuration>

现在如果我尝试读取配置,我的代码告诉我它是空的:/

    NameValueCollection appSettings = ConfigurationManager.AppSettings;

    if (appSettings.Count == 0) //always true
        Console.WriteLine("something is wrong");

即使我尝试ConfigurationManager.AppSettings["key1"]我也没有得到任何输出。嗯,我做错了什么?

3 个答案:

答案 0 :(得分:1)

如果您正在进行测试,请尝试模拟您的环境,而不是访问配置文件,数据库等。

public interface IFooConfiguration
{
    public string Key1 { get; }
    public string Key2 { get; }
    public string Key3 { get; }
}

像这样实现这个界面:

public class FooConfiguration
{
   public string Key1
   {
      get { return ConfigurationManager.AppSettings["key1"]; }
   }
}

但是对于您的测试,请使用模拟配置(例如我使用Moq):

Mock<IFooConfiguration> mock = new Mock<IFooConfiguration>();
mock.Setup(foo => foo.Key1).Returns("output1");
var sut = new Sut(mock.Object);

BTW应用程序配置文件应具有名称App.config

答案 1 :(得分:0)

您应该重新构建项目,因为应该将新配置复制到构建目录。

答案 2 :(得分:0)

在您的控制台应用程序中使用App.config而不是.config。在尝试在控制台项目中使用EF6时遇到同样的问题 - 它不会起作用。经过一系列的试验和错误后,将设置移动到app.config为我做了这个:)