我有这样的配置文件:
?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 :(得分: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);