2010-08-20 54 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);