Как отлаживать файлы конфигурации в .NET? - PullRequest
3 голосов
/ 26 июня 2010

У меня есть проект Visual Studio, который недавно начал генерировать исключение ConfigurationErrorsException, и я не могу понять, откуда он. Я охотился высоко и низко, не могу найти ничего похожего на ошибку, и она не появляется ни у одного из моих товарищей по команде, когда они запускают проект на своих ПК.

Есть ли у кого-нибудь конкретные советы по отладке загрузки и разбора файлов конфигурации? Поскольку ConfigurationManager - это фреймворковый код, у меня нет исходного кода, и я не могу войти в него с помощью отладчика Visual Studio, поэтому я охотюсь в темноте.

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

Просто к сведению, проект представляет собой проект формы InfoPath, отредактированный в Visual Studio 2008 с использованием .NET 3.5. Исключение происходит при первой загрузке формы; метод пытается получить URL-адрес веб-службы из файла конфигурации:

_clmWebSrvc.Url = System.Configuration.ConfigurationSettings.AppSettings["CLMUtilityWebServiceUrl"];

, что не удается (только для меня!) С:

System.Configuration.ConfigurationErrorsException
The configuration section 'connectionStrings' has an unexpected declaration.
   at System.Configuration.ConfigurationManager.get_ConnectionStrings()

Я нигде не могу найти раздел connectionStrings; Раньше в machine.config было значение по умолчанию, но я давно удалил его, так как это вызывало конфликты в некоторых веб-приложениях, которые я поддерживаю. Ничего подобного нет ни в Infopath.exe.config, ни в любом другом файле конфигурации, который был бы в цепочке наследования. Я остановил отдельный веб-сайт, который работал в локальной IIS. Я переустановил VS2008, InfoPath, очистил InfoPath FormCache, переименовал мой профиль пользователя и перезагрузил компьютер, вошел в систему как совершенно другой пользователь, но все безрезультатно.

Как видите, все это неуклюжие, отчаянные попытки выяснить, какие файлы конфигурации влияют на приложение. Что я действительно хочу, так это утилита, которая покажет мне, что именно загружается. Есть ли такое животное?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 26 июня 2010

Извлечение Монитор процесса от внутренних систем (MSFT).Вы должны отфильтровать его в своем процессе, что позволит вам увидеть, какие файлы он пытается открыть и где он ищет.

Затем вы также можете использовать Red Gate .NET Reflector , который позволит вам перейти к классам .NET, таким как ConfigurationManager, чтобы вы могли отлаживать вплоть до фактического источника создаваемого исключения.

1 голос
/ 26 июня 2010

Эта ошибка может возникать, если отсутствует раздел connectionStrings.

Ваша ошибка - удаление раздела connectionStrings из machine.config - для некоторых частей .NET Framework этот раздел требуется.

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

<connectionStrings>
    <clear/>
</connectionStrings>

, который удалит все строки подключения, которые были определены в machine.config.

1 голос
/ 26 июня 2010

Ответ, но, возможно, не ответ на вашу проблему, заключается в загрузке файлов символов для .NET (которая, конечно, включает вашу сборку конфигурации).

Не могу вспомнить, был ли он предварительно заполнен в параметрах отладки в 2008 году, но на всякий случай вот пост Хансельмана: Исходный код библиотеки .NET Framework доступен для просмотра

...