如何在.NET中调试配置文件?

时间:2010-06-25 23:07:48

标签: .net visual-studio debugging configuration-files config

我有一个最近开始抛出ConfigurationErrorsException的Visual Studio项目,我无法弄清楚它来自哪里。我一直在寻找高低,找不到任何类似错误的东西,并且当我们的队友在他们的PC上运行项目时,它不会出现。

有没有人对如何调试配置文件的加载和解析有任何具体建议?由于ConfigurationManager是框架代码,我没有源代码,也无法使用Visual Studio调试器进入它,所以我在黑暗中狩猎。

我非常希望能够至少看到哪些文件被加载,检索了哪些部分,密钥等,以及在后续配置文件加载时覆盖了哪些值。

仅供参考,该项目是使用.NET 3.5在Visual Studio 2008中编辑的InfoPath表单项目。首次加载表单时会发生异常;方法尝试从配置文件中获取Web服务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,重命名了我的用户配置文件并重新启动了我的PC,以完全不同的用户身份登录,一切都没有效果。

正如您所看到的,这些都是笨拙,绝望的尝试,以找出哪些配置文件影响应用程序。我真正想要的是一个实用程序,它将向我显示正在加载的内容。有没有这样的动物?

谢谢!

3 个答案:

答案 0 :(得分:2)

从系统内部(MSFT)中查看Process Monitor。您应该在您的流程上对其进行过滤,这样您就可以查看它尝试打开的文件以及它所在的位置。

然后,您还可以使用Red Gate .NET Reflector,这将允许您进入.NET类,例如ConfigurationManager,以便您可以直接调试到抛出的异常的实际来源。

答案 1 :(得分:1)

响应但可能无法解决您的问题是下载.NET的符号文件(当然,包括您的配置程序集)。

我不记得它是否在2008年的Debug选项中预先填写了,但这是一个Hanselman帖子以防万一: .NET Framework Library Source Code available for viewing

答案 2 :(得分:1)

如果缺少connectionStrings部分,则可能抛出此错误。

您的错误是从machine.config中删除了connectionStrings部分 - .NET Framework的某些部分要求此部分存在。

您不应手动修改machine.config。相反,任何有问题的应用都应该使用

<connectionStrings>
    <clear/>
</connectionStrings>

将清除在machine.config中定义的所有连接字符串。