从外部配置文件中读取连接字符串

我创建了一个控制台应用程序和一个app.config文件以及Connections.config文件。 app.config文件有一个指向Connections.config的connectionstring属性源

当我尝试读取应用程序中的连接字符串时,我得到一个ConfigurationErrorException

这是我的主要方法。

 static void Main(string[] args) { var settings = ConfigurationManager.ConnectionStrings; if (settings != null) { foreach (ConnectionStringSettings setting in settings) { Console.WriteLine(setting.ConnectionString); } } } 

App.config文件

     

Connections.config文件

     

我在这里观察了两件事。 第一:如果我指定configSource,我无法读取连接字符串(抛出exception。)

第二:如果我在App.config文件中放入相同的连接字符串并尝试读取然后代码正在工作但获得两个连接字符串(应该只返回一个空字符串)第一个连接字符串是sqlexpress连接字符串,如下所示

 data source=.\SQLEXPRESS;Integrated Security=SSPI; AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true 

它返回的第二个连接字符串是空字符串(这是预期的)。

我想从我的场景中读取外部文件中的连接字符串。 怎么做? 我在这里想念的是什么?

MSDN说 :

不要包含任何其他元素,部分或属性。

您需要删除XML编码。

编辑

此外,您需要将配置文件的属性设置为“ Copy to Output Directory = Copy if newer Copy alwaysCopy always

在此处输入图像描述

编辑2

在Dave所说的基础上,将clear元素添加到外部文件中。 您的最终Connections.config文件应如下所示:

     

您的Connections.config文件应如下所示,不带xml标头

    

另外,为了在控制台应用程序中正确定位文件,请将“ 复制到输出目录”设置“始终复制”或“ 复制为较新”

您获得的第一个连接字符串是从machine.configinheritance的。 这在MSDN文档中有所描述。 http://msdn.microsoft.com/en-us/library/bf7sd233(v=vs.90).aspx

您可以使用配置文件中的Clear标记删除inheritance的连接字符串。 http://msdn.microsoft.com/en-us/library/ayb15wz8(v=vs.90).aspx

     

MSDN上有一篇很好的文章: https : //msdn.microsoft.com/en-us/library/ms254494(v = vs.110) .aspx 。

从文章引用:

要在外部配置文件中存储连接字符串,请创建仅包含connectionStrings部分的单独文件。 不要包含任何其他元素,部分或属性。 此示例显示外部配置文件的语法。

    

希望这能帮助后来遇到这个问题的人们。