C#ConfigurationManager从app.config检索到错误的连接字符串

C#ConfigurationManager从app.config检索到错误的连接字符串,c#,winforms,connection-string,app-config,C#,Winforms,Connection String,App Config,我有一个简单的WinForms应用程序,最终将成为一个游戏。现在,我正在研究it的数据访问层,遇到了一个障碍。我创建了一个名为DataAccess的单独项目,并在其中创建了一个本地.mdfSQLServer数据库文件。我还创建了一个app.config文件来存储连接字符串 下面是配置文件: <?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings>

我有一个简单的WinForms应用程序,最终将成为一个游戏。现在,我正在研究it的数据访问层,遇到了一个障碍。我创建了一个名为
DataAccess
的单独项目,并在其中创建了一个本地
.mdf
SQLServer数据库文件。我还创建了一个
app.config
文件来存储连接字符串

下面是配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <add name="TBG_Master"
             connectionString="Data Source=(localdb)\MSSQLLocalDb;Integrated Security=true;AttachDbFileName=|DataDirectory|\TBG_Master.mdf"
             providerName="System.Data.SqlClient"/>
    </connectionStrings>
</configuration>
当它到达使用字符串作为键拉取连接字符串的行时,它会给我一个null引用异常。在检查了
css.ConnectionString
集合后,其中唯一的连接字符串如下所示:

data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true
这显然不是我的
app.config
文件中的内容,我知道在我的
DataAccess
项目中没有其他
app.config
文件。同样在调试之后,我知道它正在寻找正确的程序集


为什么它给了我这个连接字符串而不是正确的

正如@Amy指出的,这不起作用的原因是连接字符串没有存储在executing assemblies app.config文件中。移动它之后,它现在可以正常工作了。感谢您的快速帮助:)

您还可以使用machine.config文件来保存与给定机器的任何应用程序无关的连接字符串。这样,它们就不必位于任何app.config文件中,因为所有应用程序都会自动读取它们正在执行的计算机上的machine.config文件。

连接字符串需要存在于执行的项目中,而不是库项目中:例如,它需要存在于Winforms项目的app.config.ohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh,这是有道理的。我将更改我的代码并报告是否有效:)库中的app.configs仅供参考,或用于编译时工具。但是在运行时,只有正在执行的项目的app.config才起作用。如何仅从app.config/web.config而不是machine.config获取connectionstrings?machine.config中有一个名为“LocalSqlServer”的连接字符串;默认提供程序(如预期)是“System.Data.SqlClient”,连接字符串是
datasource=。\SQLEXPRESS;综合安全=SSPI;AttachDBFilename=|数据目录| aspnetdb.mdf;用户实例=true“,
data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true