无法从c#中的控制台应用程序中的配置文件中读取

时间:2014-06-18 06:51:31

标签: c# exception visual-studio-2012 configuration app-config

我正在尝试从Visual Studio 2012中的项目中的app.config文件中读取两个变量。但是我得到一个例外:"配置系统无法初始化"。有什么想法吗?

这是我的app.config文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <configurationSections>
    <section name ="connectionConfig" type="ConnectionManager.MyConnectionConfigurationSection"
             />
  </configurationSections>
  <connectionConfig  portNumber="7777"/>
  <connectionConfig  hostName="localhost" />
</configuration>

C#文件:

          namespace ConnectionManager
            {
                public class MyConnectionConfigurationSection : System.Configuration.ConfigurationSection
                {
                    [ConfigurationProperty("portNumber")]
                    public string PortNumber
                    {
                        get
                        {
                            return (string)this["portNumber"];
                        }
                    set
                    {
                        this["portNumber"] = value;
                    }
                }

                [ConfigurationProperty("hostName")]
                public string HostName
                {
                    get
                    {
                        return (string)this["hostName"];
                    }
                    set
                    {
                        this["hostName"] = value;
                    }
                }
            }

            public static class ConnectionApplication
            {
                public static MyConnectionConfigurationSection Config { get; internal set; }

                public static void Initialize()
                {
                    try
                    {
                        Config = ConfigurationManager.GetSection("connectionConfig") as MyConnectionConfigurationSection ;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message.ToString());
                    }

                }

            }
    class Program
        {
            static string portNumber;
            static string hostName;
            static void Main(string[] args)
            {
                ConnectionApplication.Initialize();

                portNumber=ConnectionApplication.Config.PortNumber;
                Console.WriteLine(portNumber);

                hostName = ConnectionApplication.Config.HostName;
                Console.WriteLine(hostName);

            }
        }
}

似乎它无法仅初始化...当我转储异常时,异常说:配置系统无法初始化。任何建议我做错了什么

2 个答案:

答案 0 :(得分:3)

再次检查您的代码:

  <configurationSections>
    <section name ="connectionConfig" type="ConnectionManager.MyConnectionConfigurationSection"
             />
  </configurationSections>
  <connectionConfig  portNumber="7777"/>
  <connectionConfig  hostName="localhost" />
  • 它是<configSections>
  • 为什么要宣布两次自定义部分? <connectionConfig portNumber="7777" hostName="localhost" />是使用自定义栏目的正确方法。
  • <section name ="connectionConfig" type="ConnectionManager.MyConnectionConfigurationSection" />属性上的
  • type应该提供该类的完整程序集限定名称。也就是说,如果您的程序集被调用ConnectionManager,则应配置ConnectionManager.MyConnectionConfigurationSection, ConnectionManager

BTW,在我看来,如果您要配置2个简单设置,我就不会使用自定义配置部分(这是一种过度杀伤)。为什么不使用内置在.NET配置模型上的appSettings

<appSettings>
     <add key="connectionManager:host" value="localhost" />
     <add key="connectionManager:port" value="7777" />
</appSettings>

您将以这种方式访问​​这些参数:

string host ConfigurationManager.AppSettings["connectionManager:host"];
int port = int.Parse(ConfigurationManager.AppSettings["connectionManager:port"]);

答案 1 :(得分:2)

检查配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <configurationSections>
        <section name ="connectionConfig" type="ConnectionManager.MyConnectionConfigurationSection"/>
    </configurationSections>
    <connectionConfig  portNumber="7777"/>
    <connectionConfig  hostName="localhost" />
</configuration>

包含portnumber和hostname的部分位于您在代码中读取的部分之外。

试试这样:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <configurationSections>
        <section name ="connectionConfig" type="ConnectionManager.MyConnectionConfigurationSection">        
          <connectionConfig  portNumber="7777"/>
          <connectionConfig  hostName="localhost" />
        </section>
    </configurationSections>
</configuration>