Не удается получить значения из файла App.config (framework 4.0) - PullRequest
0 голосов
/ 20 августа 2010

У меня есть файл конфигурации, подобный этому:

?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 ]

3 голосов
/ 20 августа 2010

Дикая догадка, выведенная из комментариев: не забудьте поместить свой конфиг в 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 голос
/ 20 августа 2010

Подумайте о том, чтобы получить конфигурацию приложения из вашего проекта 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);
...