无法从App.config文件中获取值(框架4.0)

时间:2010-08-20 15:53:24

标签: visual-studio-2010 c#-4.0 app-config

我有这样的配置文件:

?xml version="1.0" encoding="utf-8" ?

configuration

  appSettings

    add key="PortName" value="COM4"

    add key="BaudRate" value="9600"

   add key="DataBits" value="8" 

  appSettings

configuration

...然后我想用以下代码访问app.config值:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO.Ports;

using System.Configuration;


namespace SystemToControler

{

    public class ConnectionProtocol : IConnectionProtocol
    {
        SerialPort serialPort = new SerialPort();

        public ConnectionProtocol()
        {
            serialPort.PortName = ConfigurationManager.AppSettings["PortName"];
            serialPort.BaudRate = Convert.ToInt32(ConfigurationManager.AppSettings["BaudRate"]);
            serialPort.DataBits = Convert.ToInt32(ConfigurationManager.AppSettings["DataBits"]);
        }
    }
}

...它告诉我那些钥匙不存在。

我做错了什么???请帮忙!

2 个答案:

答案 0 :(得分:3)

从评论推断的狂野猜测:确保将您的配置放在正在运行的应用程序的app.config中。永远不会读取其他项目的配置。

例如: 如果您有一个包含2个项目的解决方案,ClassLibrary1带有app.config,Winform1带有自己的app.setting,而Winform1依赖于ClassLibrary1,那么构建Winform1会给出一个包含这些文件的目录:

ClassLibrary1.dll

ClassLibrary.dll.config

Winform1.exe

Winform1.exe.config

当Winform1.exe运行时,从Winform1.exe.config读取配置,所有其他配置文件都没用。

答案 1 :(得分:1)

考虑从winforms项目中获取应用程序配置,并从那里实例化ConnectionProtocol对象。您当前的方法将您的ConnectionProtocol类与它不需要的应用程序配置类相结合。

例如,在您的应用程序中,执行以下操作:

string portName = ConfigurationManager.AppSettings["PortName"];
int baudRate = Convert.ToInt32(ConfigurationManager.AppSettings["BaudRate"]);
int dataBits = Convert.ToInt32(ConfigurationManager.AppSettings["DataBits"]);

ConnectionProtocol protocol = new ConnectionProtocol(portName, baudRate, dataBits);