Zsolt Madlen Ответов: 1

Ссылка на объект не установлена на экземпляр объекта. Со статическим классом? ! Диспетчер конфигураций


public string connectionString = ConfigurationManager.ConnectionStrings["HPDL160G62"].ConnectionString;


бросить меня
Object reference not set to an instance of an object.
ошибка.

спасибо

ОТРЕДАКТИРУЙТЕ МОЕ ПРИЛОЖЕНИЕ.КОНФИГ

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="HPDL160G62" providerName="System.Data.SqlClient" connectionString="Data Source=HPDL160G62;Initial Catalog=Database;User ID=username;Password=password;"/>
  </connectionStrings>
  <appSettings>
    
  </appSettings>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration>


Это находится в библиотеке классов,и я выполняю его из приложения cl.

Что я уже пробовал:

добавлено статическое ключевое слово и удалено, но просто я не понимаю, почему я получаю эту ошибку со статическим классом ?!
поместил только верхнюю часть класса и попробовал поместить в методы, но всегда одно и то же

CHill60

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

Zsolt Madlen

Этот комментарий-настоящее решение моей проблемы! Спасибо

CHill60

Я обновлю свое решение на случай, если у кого-то еще возникнет подобная проблема

CHill60

Кстати - у вас может быть app. config для DLL-я включил ссылку в свое обновление, которая показывает, как его использовать.

1 Ответов

Рейтинг:
7

CHill60

Станет более очевидным, что происходит, если вы разобьете эту линию на сегменты

var x = ConfigurationManager.ConnectionStrings;
var y = x["HPDL160G62"];
var z = y.ConnectionString;

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

Но y является null потому что в коллекции нет ничего, что соответствовало бы "HPDL160G62".

Поэтому вы получаете ошибку при назначении z

[РЕДАКТИРОВАТЬ]
Причина, по которой в коллекции не было соответствующего элемента, заключается в том, что файл App.Config принадлежал библиотеке DLL. Конфигурации считывает только приложение.конфиг на данный момент сборки т. е. приложения, вызывающего библиотеку DLL.

Таким образом, решение состоит в том, чтобы иметь эту строку подключения в файле App. Config для вызывающего приложения
ОПЕРАЦИОННАЯ
У вас все еще может быть DLL-конфигурация, но вам придется читать ее вручную (я нашел хороший пример того, как это сделать здесь[^])


Zsolt Madlen

да, вы правы. Хотя я не знаю, почему там ничего нет? в приложении конфиг добавлен параметр connectionString, как на сайте MSDN

CHill60

Можете ли вы поделиться своим App.Config?

Zsolt Madlen

добавлено в основной вопрос!

F-ES Sitecore

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

BillWoodruff

+5

Sergey Alexandrovich Kryukov

5ед.
—СА