ConfigurationManager返回null而不是字符串值

时间:2010-12-01 23:17:36

标签: c# .net

我正在尝试从我的App.config文件中检索存储在我的工作目录中的值,但是当我运行该程序时,它返回null。我很困惑为什么会这样,并且多次查看代码以试图发现错误。

这是我的App.config文件代码:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="provider" value="System.Data.SqlClient" />
  </appSettings>
  <connectionStrings>
    <add name="connection" connectionString="Data Source=(local)\SQLEXPRESS;Initial Catalog=Autos;Integrated Security=True;Pooling=False" />
  </connectionStrings>
</configuration>

这是我的C#代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.Common;

namespace DataProviderFun
{
  class Program
  {
    static void Main(string[] args)
    {
      string p = ConfigurationManager.AppSettings["provider"];
      string c = ConfigurationManager.ConnectionStrings["connection"].ConnectionString;

      ...

当我运行此代码时,p = null且c = null。

我引用了System.Configuration.dll。

4 个答案:

答案 0 :(得分:16)

您是否确保将配置文件正确放置在运行应用程序的目录中?该目录中是否存在名为&lt; app name&gt; .exe.config的文件?

我只是在这里猜测 - 也许您在另一个项目中添加了App.Config文件,然后是您的exe汇编项目......?

顺便说一句,我将你的代码和App.Config原样复制到一个干净的项目中,这段代码对我有用。所以我会查看配置文件本身的方向,而不是代码。代码很好......

希望这有帮助,

答案 1 :(得分:0)

如果所有设置都是正确的,但是如果您仍然获得空值,请检查您的app.config文件并替换如下所示的xml代码,

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="ClientSettingsProvider.ServiceUri" value="" />
  </appSettings>
</configuration>

现在运行您的代码,您可能会看到正确的值

答案 2 :(得分:0)

如果您的配置文件在不同的类库中使用,则必须更改您的名称 YourClasslibraryDllname.dll.config ,并且必须将配置文件 copy更改为输出目录< / strong>属性

Ex:
   YourSolution
       ClassLibrary_1
            ClassLibrary_1.dll.config
            ApplicationConfigurationReader.cs
            ConfigurationConst.cs
       ClassLibrary_2
       ConsoleApp
  1. 像这样 YourClasslibraryDllname.dll.config
  2. 重命名您的配置文件
  3. 打开属性窗口
  4. 请勿复制更改为始终复制

enter image description here

  1. 添加参考->程序集-> System.Configuration

  2. 在ClassLibrary_1项目中添加以下主题

ConfigurationConst类,使用System.Configuration;

public static class ConfigurationConst
{
   public static KeyValueConfigurationCollection Configs;
}

ApplicationConfigurationReader类使用System.Configuration;

internal class ApplicationConfigurationReader
    {
        public void Read()
        {
            // read assembly
            var ExecAppPath = this.GetType().Assembly.Location;

            // Get all app settings  in config file
            ConfigurationConst.Configs = ConfigurationManager.OpenExeConfiguration(ExecAppPath).AppSettings.Settings;

        }
    }

使用ClassLibrary_1读取配置

static void Main(string[] args)
{
    new ApplicationConfigurationReader().Read();
    var Configval = ConfigurationConst.Configs["provider"].Value;            
    Console.ReadKey();
}

我希望您能获得干净的帮助

答案 3 :(得分:0)

如果您的调试文件夹中有 .dll,则将您的 confif 文件重命名为 yourprojectname.dll.config。这在我的情况下有效