Подтвердить что ты не робот

Чтение из App.config в проекте библиотеки классов

Я разрабатываю простой проект class library, который даст мне dll.

Мне нужно, чтобы определенное значение читалось из файла конфигурации. Поэтому я добавил файл App.config в свой проект.

 <?xml version="1.0" encoding="utf-8" ?>
 <configuration>

  <appSettings>
  <add key="serviceUrl" value="test value" />
  </appSettings>

  </configuration>

Выше мой файл App.config, и теперь я пытаюсь прочитать его как следующий

  string strVal = System.Configuration.ConfigurationManager.AppSettings["serviceUrl"];

Но я не получаю никакого значения в своей строковой переменной.

enter image description here

Я сделал это для веб-приложения аналогичным образом, и он сработал. Но почему-то я не могу заставить эту работу работать.

Является ли идея иметь приложение App.config в проекте библиотеки классов в первую очередь?

4b9b3361

Ответ 1

Как указано в моем комментарии, добавьте файл App.Config в основное решение, а не в проект библиотеки классов.

Ответ 2

Вам не нужно добавлять файл app.config. Если вы создаете библиотеку классов для веб-приложения, вы можете получить соединение строка непосредственно из файла web.config

ИЛИ

Вы можете добавить в него любой текстовый файл со строкой подключения и извлечь эту строку. используя этот

public static ConnectionStringSettings ConnSettings
{
    get
    {
        string connectionStringKey = null;
        connectionStringKey = ConfigurationManager.AppSettings.Get("DefaultConnectionString");
        return ConfigurationManager.ConnectionStrings[connectionStringKey];          
    }
}

Ответ 3

Предполагая, что вопрос запрашивает файл конфигурации, специфичный для проекта dll, а не файл конфигурации проекта приложения или веб-приложения, я использовал следующий код для получения значений из ключей в разделе "sqlSection". (один из предостережений заключается в том, что этот файл конфигурации - даже когда он настроен на копирование всегда - не копируется автоматически при частичной сборке веб-приложения, поэтому я использовал потрясающее однострочное предварительное действие для копирования файла, поскольку упомянутый в этом сообщении fooobar.com/info/437141/...).

вот весь конфигурационный файл dll

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


<sqlSection>

<add key="sql1" value="--statement--"/>
</sqlSection>

это код С#.

 string GetSqlStatement(string key)
    {
            string path =   Path.GetDirectoryName(Assembly.GetCallingAssembly().CodeBase) + @"\DataLayer.dll.config";

        XDocument doc = XDocument.Load(path);

        var query = doc.Descendants("sqlSection").Nodes().Cast<XElement>().Where(x => x.Attribute("key").Value.ToString() == key).FirstOrDefault();

        if (query != null)
        {
            return query.Attribute("value").Value.ToString();
        }