2010-09-23 46 views
9

我有一个c#程序集,它使用app.config来存储其数据库连接字符串。在调试应用程序时,我注意到与数据库的连接保持失败,因为ConfigurationManager一直返回machine.config连接字符串:ConfigurationManager不断获取Machine.config连接字符串

data source =。\ SQLEXPRESS;集成安全性; ...

我在app.config中的连接字符串之前加了<clear/>,它解决了我的开发机器上的问题。当我将它部署到生产时,这个问题就回来了。有人能告诉我如何停止使用machine.config连接字符串吗?

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings[0].ConnectionString); 

<connectionStrings> 
    <clear/> 
    <add name="VersionConnectionString" 
    connectionString=" Data Source=localhost;Initial Catalog=VersionInfo;User ID=user;Password=password"   
    providerName="System.Data.SqlClient" /> 
    </connectionStrings> 

UPDATE

下仍然给我在machine.config连接字符串?

Configuration appConfig = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location); 
       string dllConfigData = 
        appConfig.ConnectionStrings.ConnectionStrings[0].ConnectionString; 
+0

我知道这是一个旧的帖子,但我仍然很好奇,这是一个桌面或控制台应用程序?是否在输出(bin)目录中看到带有clear元素的连接字符串部分? – 2015-10-22 08:33:32

+0

我的应用程序中仍存在问题。我添加了清除,或者使用下面的代码并将配置文件复制到exe文件夹中,但它仍在提取默认数据。我正在使用VS2015。 – Amir 2016-04-25 10:05:24

+0

我有同样的问题。我在我使用的'class library'项目中有正确的连接字符串,并在'Web'项目中留下'web.config'为空。只要我在web项目中添加了相同的内容,它对我来说也很好。以防万一您的解决方案中有多个项目 – Sugafree 2017-04-16 21:38:34

回答

1

尝试让你的app.config文件的实例作为配置对象:

var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

var myConnString = config.ConnectionStrings["VersionConnectionString"].ConnectionString; 

这完全绕过了机器的配置文件。

+0

这是一个类库(.dll)OpenExeConfig引发和异常。好主意,但。 – Nick 2010-09-23 20:05:17

+4

这似乎并没有真正绕过机器配置 – 2013-11-26 04:20:07

0

你应该通过NAME而不是INDEX得到你的连接字符串 - 这将确保你得到你所要求的。

尝试

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["VersionConnectionString"].ConnectionString); 
+0

你得到你的machine.config连接字符串,当你得到它的名字? – 2010-09-23 20:06:13

4

当一个DLL使用连接字符串,你需要将它们添加到您的exe的app.config以及使用该设置完全相同的名称。然后,你可以在exe的.config文件中更改连接字符串,并且DLL在加载时会自动选取它。

这可能是您的数据库持久层在单独的DLL中实现时,可以在app.config文件中使用自定义连接字符串的唯一方法。甚至不要问我花了多少时间来研究和调试它。

2

我知道这是一个较老的问题,但我今天遇到同样的问题。问题是我添加到我的项目中的app.config未被复制到输出目录。要解决此问题,请右键点击app.config并选择Properties。然后将Build Action更改为Content。 希望这有助于!