我正在开发一个C#4.0,WPF 4.0,SQL 2008项目,我在家里和办公室工作。我只是根据其他问题中的建议使用Visual SVN设置SubVersion。我遇到的问题是数据库的连接字符串对于每个位置都是不同的。
在家里,我的开发系统上有数据库,办公室里的数据库在我们的服务器上。两者都没有暴露在互联网上,所以我必须同时使用它们。是否有一种优雅的方式来自动选择正确的方法?
更新
我一直有这方面的问题,我正在尝试平衡学习版本控制与完成我的项目工作。我一直在阅读颠覆书,并且对它涵盖的内容很好。我的一个真正问题是处理需要在开发环境正确之间变化的文件。我可以很容易地编写代码,但这对我来说似乎有些古怪。我确实看到不止一篇关于svn:exclude可能是多么古怪的文章,而且在我看来,在家工作的是导致工作中的问题,反之亦然。
也许我只是不知道得出正确的答案所以请指出正确的方向(我不需要你为我做)或投票给现有最好的答案我将继续我的研究
非常感谢
答案 0 :(得分:4)
如果你真的想要完全自动化,你可以这样做:
首先,在源代码管理中存储不同环境的设置,但不存储实际的配置文件。例如:
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,...)的'pre-build event'(命令行脚本)。你可以通过在.csproj文件中添加一些msbuild命令来实现同样的目的。
然而,这一切真的值得吗? TortoiseSVN有一个名为'ignore-on-commit'的功能列表,它可以帮助您防止意外提交不应提交的本地更改文件(在提交对话框中,右键单击文件=>移动到更改列表 - > ignore-on-commit)。如果您确实需要更改.config文件中的其他内容,可能会有点烦人,但仍然。
答案 1 :(得分:3)
简单:不要将连接字符串放在代码中,从某处的配置数据中读取它。然后就是不要把配置数据放在Subversion中。
在我现在正在处理的应用程序中,我们将连接字符串信息存储在Windows注册表中的HKLM \ Software \ [OurProduct] \ Database中。
答案 2 :(得分:3)
你不能在家更改.config而不是检查对连接字符串的更改吗?
在代码中保存连接字符串信息是不好的做法(任何人都可以使用ildasm.exe并查看代码中的所有字符串)。
此类信息应处于您可以更好地控制的配置中。
此外,如果需要,.NET支持encryption of the connection string section。
答案 3 :(得分:1)
我认为理想的解决方案是使用像Visual Studio 2010中添加的web.config transforms之类的东西。不幸的是,据我所知,这些只适用于web.config文件。
答案 4 :(得分:0)
在源代码管理中,使用app.config中用于最常用连接字符串的连接字符串(可能正常工作)。
在家中,劫持(或结帐)选择要使用哪个连接字符串的文件,然后对其进行编辑以使用您的家庭连接字符串。
答案 5 :(得分:0)
您可以使用设置来定义多个连接字符串。只需双击解决方案资源管理器中的Settings.settings-> project-> Properties。然后你会看到包含设置类型的组合框。选择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();
}
}
}
答案 6 :(得分:0)
.NET有一种方法可以使用file
属性覆盖一个配置文件中的设置与另一个配置文件中的设置。我们通常做这样的事情:
<强>的web.config 强>
<configuration>
<appSettings file="web.custom.config">
<!-- your default settings here -->
</appSettings>
</configuration>
<强> web.custom.config 强>
<appSettings>
<!-- override stuff from root web.config here here -->
</appSettings>
按照惯例,我们设置源代码控制系统[SVN]以忽略任何custom.config文件。这允许我们签入核心默认设置,同时仍然允许每个开发人员管理特定于环境的设置。
注意:这仅适用于<appSettings>
键。如果您要在<connectionStrings>
键中存储连接字符串,请考虑将这些设置移至appSettings。
答案 7 :(得分:0)
对我来说,关于使用包含名称 runner 的 gitlab ci,以下内容就足够了。
public static string GetConnectionString(IConfiguration configuration)
{
if (Environment.MachineName.Contains("runner"))
{
return configuration.GetConnectionString("DatabasePipeline");
}
return configuration.GetConnectionString("DatabaseLocal");
}
您可以指定尽可能多的情况,因为您的环境必须使用不同的连接字符串。