如何更改不同工作位置的连接字符串

我正在研究C#4.0,WPF 4.0,SQL 2008项目,我在家里和办公室工作。 我只是根据其他问题中的建议使用Visual SVN设置SubVersion。 我遇到的问题是数据库的连接字符串对于每个位置是不同的。

在家里,我的开发系统上有数据库,办公室里的数据库在我们的服务器上。 两者都没有暴露在互联网上,所以我必须同时使用它们。 是否有一种优雅的方式来自动选择正确的方法?

更新

我一直有这方面的问题,我正在尝试平衡学习版本控制与完成我的项目工作。 我一直在阅读颠覆书,并且对它涵盖的内容很好。 我唯一的问题是处理需要在开发环境之间正确变化的文件。 我可以很容易地编写代码,但这对我来说似乎有些古怪。 我确实看到了几篇关于svn:exclude可能是多么古怪的文章,在我看来,在家工作的是导致工作中的问题,反之亦然。

也许我只是不知道得到正确的答案,所以请指出我正确的方向(我不需要你为我做这件事)或者投票给现有最好的答案,我会继续我的研究。

谢谢你

如果你真的想要完全自动化,你可以这样做:

首先,在源代码管理中存储不同环境的设置,但不存储实际配置文件。 例如:

configfiles\app.config.mikeb_home configfiles\app.config.local configfiles\app.config.development configfiles\app.config.staging configfiles\app.config.production 

然后在构建配置中,您可以添加一个步骤,将正确的配置文件复制到根app.config。 例如,使用基于’environment’参数的“预构建事件”(命令行脚本)(computername,username,…)。 您可以通过在.csproj文件中添加一些msbuild命令来实现相同的function。

但是,这一切真的值得吗? TortoiseSVN有一个名为’ignore-on-commit’的function列表,可帮助您防止意外提交不应提交的本地更改文件(在提交对话框中,右键单击文件=>移动到更改列表 – > ignore-on-commit)。 如果您确实需要在.config文件中更改其他内容,可能会有点烦人,但仍然如此。

简单:不要将连接字符串放在代码中,从某处的配置数据中读取它。 然后就是不要将配置数据放在Subversion中。

在我现在正在处理的应用程序中,我们将连接字符串信息存储在Windows注册表中的HKLM \ Software \ [OurProduct] \ Database中。

你不能在家里更改.config而不是检查对连接字符串的更改吗?

在代码中保存连接字符串信息是不好的做法(任何人都可以使用ildasm.exe并查看代码中的所有字符串)。

这种信息应该是您可以更好地控制的配置。

此外,如果需要,.NET支持连接字符串部分的加密 。

我认为理想的解决方案是使用类似于在Visual Studio 2010中添加的web.config转换 。不幸的是,据我所知,这些仅适用于web.config文件。

您可以使用设置来定义多个连接字符串。 只需双击Solution Explorer-> project-> Properties中的Settings.settings。 然后你会看到包含设置类型的combobox。 选择ConnectionString然后输入connstr。

然后你可以用下面的代码获得connstr

 using System.Configuration; using test.Properties; namespace test{ public partial class mainForm : Form{ public mainForm() { InitializeComponent(); } private void mainForm_Load(object sender, EventArgs e) { string connectionStr = ConfigurationManager.ConnectionStrings[this_index_is_up_to your_algorithm].ToString(); } } 

}

在源代码管理中,使用app.config中用于最常用连接字符串的连接字符串(可能是有效的)。

在家里,劫持(或结账)文件,选择要使用的连接字符串,并编辑它以使用您的家庭连接字符串。

.NET有一种方法可以使用file属性覆盖一个配置文件中的设置与另一个配置文件中的设置。 我们通常做这样的事情:

web.config中

      

web.custom.config

    

按照惯例,我们设置源代码控制系统[SVN]以忽略任何custom.config文件。 这允许我们签入核心默认设置,同时仍允许每个开发人员管理特定于环境的设置。

注意:这仅适用于键。 如果要在键中存储连接字符串,请考虑将这些设置移动到appSettings。

请参阅http://msdn.microsoft.com/en-us/library/ms228154.aspx