C# 使用ConfigurationManager无法读取配置

C# 使用ConfigurationManager无法读取配置,c#,.net,xml,configuration,configurationmanager,C#,.net,Xml,Configuration,Configurationmanager,我第一次尝试使用ConfigurationManager,我就是这么做的: 1。)创建了一个新项目(TestProject) 2。)右键单击TestProject->Add->New Item->Application Configuration File(名称:Conf.config) 3。)我编辑了文件,使其看起来像这样: <?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings

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

1。)创建了一个新项目(TestProject) 2。)右键单击TestProject->Add->New Item->Application Configuration File(名称: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>
public class FooConfiguration
{
   public string Key1
   {
      get { return ConfigurationManager.AppSettings["key1"]; }
   }
}

即使我尝试
ConfigurationManager.AppSettings[“key1”]
我也不会得到任何输出。嗯,我做错了什么?

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

public interface IFooConfiguration
{
    public string Key1 { get; }
    public string Key2 { get; }
    public string Key3 { get; }
}
按如下方式实现此接口:

<?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>
public class FooConfiguration
{
   public string Key1
   {
      get { return ConfigurationManager.AppSettings["key1"]; }
   }
}
但对于您的测试,请使用模拟配置(例如,我使用Moq):

Mock Mock=new Mock();
mock.Setup(foo=>foo.Key1).Returns(“output1”);
var sut=新sut(mock.Object);

顺便说一句,应用程序配置文件应具有名称
App.config

,您应该重新生成项目,因为新的配置应复制到生成目录

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

尝试将配置文件重命名为
app.config
。这是WPF、Forms还是ASP.Net应用程序?为什么不能将这些值存储在web.config或app.config中?@Shaks是一个c#console应用程序-我在使用它,正如本教程中所示:@JohnIsaiahCarmona谢谢你,它使用app.config-所以调用.config总是app.config很重要?我在问自己,如果文件名为App.config,为什么VS会给我一个名称选择。抱歉,我想让你知道,重命名文件可以解决问题,正如John已经通知的那样。VS为您提供和选项来命名文件,因为它不知道您是否将使用ConfigurationManager从文件中获取值。:)