我有一个c#程序集,它使用app.config存储其数据库连接字符串。调试应用程序时,我注意到与数据库的连接保持失败,因为ConfigurationManager保持返回machine.config连接字符串:
data source =。\ SQLEXPRESS;综合安全; ....
我添加了<clear/
&gt;在我的app.config中的连接字符串之前,它修复了我的开发机器上的问题。我将其部署到生产环境时返回了问题。有人能告诉我如何停止使用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>
更新
以下仍然提供了machine.config连接字符串?!
Configuration appConfig = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
string dllConfigData =
appConfig.ConnectionStrings.ConnectionStrings[0].ConnectionString;
答案 0 :(得分:6)
在DLL中使用连接字符串时,您还需要使用设置的完全相同的名称将它们添加到exe的app.config中。然后,您可以更改exe的.config文件中的连接字符串,DLL将在加载时自动获取它。
当您的数据库持久层在单独的DLL中实现时,这可能是您在app.config文件中使用自定义连接字符串的唯一方法。甚至不问我花了多少时间来研究和调试它。
答案 1 :(得分:2)
我知道这是一个较老的问题,但我今天遇到了同样的问题。问题是我添加到项目中的app.config
没有被复制到输出目录。要解决此问题,请右键点击app.config
并选择Properties
。然后将Build Action
更改为Content
。
希望这有帮助!
答案 2 :(得分:1)
尝试将app.config文件的实例作为配置对象获取:
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var myConnString = config.ConnectionStrings["VersionConnectionString"].ConnectionString;
这完全绕过了机器配置文件。
答案 3 :(得分:0)
你应该通过NAME而不是INDEX来获取你的连接字符串 - 这将确保你得到你想要的东西。
尝试
SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["VersionConnectionString"].ConnectionString);