Winforms ConnectionString和TeamCity

时间:2011-04-28 07:34:26

标签: winforms continuous-integration teamcity


我们正在开始一个新的WinForms项目,并决定使用TeamCity来创建构建并运行单元和集成测试。该项目涉及数据库。我们有3个数据库(developDB(这是开发人员在开发时使用的)),testDB(teamcity用来运行测试)和productionDB(客户端使用它))。 TeamCity有3个buildConfiguration。提交发生时会触发第一个。第二个是每晚触发运行集成测试。第三个是由开发人员在我们发布什么时触发的。所以我希望TeamCity能够根据发生的构建类型来更改connectionString。另外我不想在app.config中存储connectionString(我不希望客户端知道用户和密码)。有哪些选项可用于执行任务?
提前谢谢!
更新
如果重要的话,我使用NHibernate和FluentNHibernate来连接数据库。

3 个答案:

答案 0 :(得分:0)

我没有使用过TeamCity,但我在登录过程中(即在运行时)编写了多个动态更改ConnectionStrings的应用程序,而且非常简单。

您没有告诉我们如何连接到您的数据库。既然你提到app.config,我想它是ADO.NET DataSets或simmilar技术,它在你的Settings.Designer.cs / app.config中创建一个只读(getter)ConnectionString。

我做的是在Settings.cs(而不是Settings.Designer.cs)中为ConnectionString属性创建一个setter方法,如下所示:

public void setNorthwindConnectionString(String value) {
    this["NorthwindConnectionString"] = value;
}

我生成的DataSet然后使用此NorthwindConnectionString访问数据。

您可以使用预处理程序指令进行ConnectionString的条件设置:

#if DEBUG
    Console.WriteLine("Mode=Debug"); 
    Settings.Default.setNorthwindConnectionString("(DebugDBConnectionString)");
#else
    Console.WriteLine("Mode=Release"); 
    Settings.Default.setNorthwindConnectionString("(ReleaseDBConnectionString)");
#endif

您还可以encrypt your connection strings,并在发布后事件期间复制正确的app.config。

答案 1 :(得分:0)

在这种情况下,我会使用TeamCity运行一个nant脚本来执行构建。

NAnt允许您在构建时修改配置文件值(例如连接字符串)。

可以在此博客文章中找到使用TeamCity / NAnt部署到不同登台环境的示例: http://thecodedecanter.wordpress.com/2010/03/25/one-click-website-deployment-using-teamcity-nant-git-and-powershell/

正如@surfen建议的那样,每个环境的连接字符串值都应加密,以防止凭据以纯文本格式存储。

答案 2 :(得分:-2)

我假设你将使用msbuild在Team city中构建你的项目。如果是这种情况,那么您可以发送条件编译符号,您可以在其中传递您需要的符号。

一旦你有了symols,你可以做以下事情:

#if DEVBUILD
//.... Your Connection String Code here
#endif

#if INTBUILD
.... Your Connection String Code here
#endif

这是你第一个问题的答案。

查看问题的第二部分,在哪里,您不想存储用户名& app.config中的密码,

选项:

  • 尝试集成安全性,它将使用您的域帐户
  • 如果无法使用选项,请尝试将连接字符串保留为注册表项,以使其不明显或是环境变量。