【问题标题】:Using ConfigurationManager cannot read config使用 ConfigurationManager 无法读取配置
【发布时间】:2012-07-10 21:57:08
【问题描述】:

我第一次尝试使用 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"] 我也没有得到任何输出。嗯,我做错了什么?

【问题讨论】:

  • 尝试将您的配置文件重命名为App.config
  • 这是 WPF、Forms 还是 ASP.Net 应用程序?为什么不能将值存储在 web.config 或 app.config 中?
  • @Shaks 它是一个 c# 控制台应用程序 - 我正在使用它,如本教程中所示:blogs.technet.com/b/vanih/archive/2008/01/25/…
  • @JohnIsaiahCarmona 谢谢,它与 App.config 一起工作 - 所以调用 .config 总是 App.config 很重要吗?我问自己,如果文件应该命名为 App.config,为什么 VS 会给我一个名称的选择
  • 抱歉耽搁了,想让您知道重命名文件可以解决问题,正如 John 已经告知的那样。 VS 为您提供了命名文件的选项,因为它不知道您是否会使用 ConfigurationManager 从文件中获取值。 :)

标签: c# .net xml configuration configurationmanager


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      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);
      

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

      【讨论】:

        猜你喜欢
        • 2013-01-09
        • 2017-04-10
        • 1970-01-01
        • 2011-02-17
        • 2021-06-14
        • 2014-11-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多