2010-08-20 55 views
0

我有一个配置文件,这样得到的值:无法从App.config文件(框架4.0)

?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"]); 
     } 
    } 
} 

...它告诉我我那些键不存在。

我在做什么错?请帮忙!

+0

你在做什么似乎罚款!这是什么样的应用程序? Web/Windows窗体等? – InSane 2010-08-20 15:56:05

+1

你确定你有一个app.config?更确切地说,在您的应用程序文件夹中名为[yourAppName] .exe.config的文件?或者基于Web的应用程序的web.config? – 2010-08-20 15:57:00

+0

这是一个类文件。 – dani 2010-08-20 15:57:15

回答

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中读取配置,所有其他配置文件都无用。

+0

谢谢您的回答。 – dani 2010-08-20 16:18:07

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