ТОЛЬКО для конструктора WPF: NullReferenceException при загрузке строки подключения из app.config

Помогите, пожалуйста, ради моих невыдернутых волос...

Следующая строка кода:

this._connectionString = ConfigurationManager.ConnectionStrings["SqlConnectionString"].ConnectionString;

причиняет мне невыразимое количество горя.

Он находится в пользовательском элементе управления, в настоящее время в событии Loaded элемента управления, но я также пробовал конструктор и просто инициализировал поле значением при его объявлении. Всякий раз, когда я это делаю, дизайнер WPF делает подгонку на любом экране, который использует указанный пользовательский элемент управления.

Сам код компилируется нормально и работает без проблем. Но это превращается в настоящее препятствие в разработке, когда вообще невозможно использовать конструктор. Кто-нибудь знает, что может вызвать это, и намек на хорошую практику, чтобы избежать этого в будущем? Я подозреваю, что это как-то связано с попыткой доступа к ConfigurationManager, но я не могу понять, где поставить строку, чтобы она остановилась.

Спасибо.

PS: Visual Studio 2010 Премиум


person zk812    schedule 19.07.2010    source источник
comment
Сегментация вашего уровня данных из вашего пользовательского элемента управления (возможно, путем помещения его в модель архитектуры M-V-VM или MVC) может предотвратить эту проблему.   -  person Ed Gonzalez    schedule 20.07.2010


Ответы (3)


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

if (DesignerProperties.GetIsInDesignMode(this))
    this._connectionString = "Default";
else
{
    this._connectionString = ConfigurationManager
                              .ConnectionStrings["SqlConnectionString"]
                              .ConnectionString;
}
person Reed Copsey    schedule 19.07.2010
comment
Не работает. Он все еще продолжает работать и пытается разобрать Default, а затем говорит, что не может разобрать или что-то еще. Поэтому я вставил действительную, но неработающую строку подключения, и на самом деле он попытался подключиться к ней и потерпел неудачу. - person zk812; 20.07.2010
comment
@ zk812: Вам также нужно сделать так, чтобы ваше соединение не подключалось во время разработки. - person Reed Copsey; 20.07.2010
comment
Как это никогда не было проблемой до VS2010? Все мои приложения VS2008 WPF следуют этому же шаблону без проблем... - person zk812; 20.07.2010
comment
@ zk812: zk812: обычно это не проблема для большинства элементов управления, поскольку они редко что-то делают во время разработки. Вы пытаетесь подключиться к БД во время загрузки (что не очень хорошо для WPF - здесь очень поможет MVVM), что заставляет VS пытаться подключиться во время разработки. - person Reed Copsey; 20.07.2010

Разработчик, вероятно, смотрит не на конфигурацию вашего приложения, а на конфигурацию его текущего хост-приложения (VS), поэтому ConfigurationManager.ConnectionStrings["SqlConnectionString"] возвращает null во время разработки.

person 500 - Internal Server Error    schedule 19.07.2010

Это ограничение похоже на то, что наблюдается в приложениях MVC, где экземпляр Web.Config не создается во время разработки. Lo... WPF делает то же самое, когда App.Config отсутствует во время разработки.

person JWP    schedule 02.02.2015