开发与生产:连接字符串

时间:2009-02-04 17:44:52

标签: asp.net sql-server web-config visual-sourcesafe app-config

我正在将SQL服务器移动到另一台机器上。目前我们在同一个盒子上运行我们的Web服务器和SQL Server。因此,我们有一个带有IIS和SQLServer的生产服务器,然后是一个独立的开发服务器,它反映了这种设置。

说到我们的asp.net控件的app.config和web站点的web.config,这很好用,因为我们可以使用“初始目录= MyDB; ...”,因为数据库名称是相同的,所以它有效在两台机器上。

现在我正在考虑在同一个盒子(MyDB,MyDB-Dev)上运行两个DB。有没有一种简单的方法可以在每次部署或编译时都不需要编辑web.config和app.config?这是Visual Source Safe可以处理的吗?

8 个答案:

答案 0 :(得分:7)

这是我使用的解决方案。在Web.Config中,放置以下“include”行:

<connectionStrings configSource="WebCS.config"/>

然后,创建WebCS.config文件并输入以下内容:

<connectionStrings>
<add name="ConnString" 
     connectionString="Data Source=YourServer;Initial Catalog=YourDB;etc..
     providerName="System.Data.SqlClient"/>
</connectionStrings>

然后,在VS中发布您的站点之后,删除WebCS.config文件(我有一个批处理文件来执行此操作),然后将其他所有内容捆绑以便传输到新计算机。然后,您将确信所有Web.Config文件设置都与您一起使用而不会弄乱您的连接字符串。

答案 1 :(得分:4)

部署web.config几乎不会将文件从dev复制到prod。拥有不同的条目是正常的,例如:您的开发网站指向本地数据库或开发人员数据库框,您的产品网站通常必须指向您的产品数据库框。

部署时,如果您在应用中进行了需要新配置元素的架构更改,或者想要删除多余的配置元素,则通常只需要更改生产web.config。

使用源代码管理,通常的做法是排除web.config并拥有一个模板文件,该文件可用作创建配置文件的基础,例如: web.config.template。在对web.config进行结构更改时,您应该对web.config.template进行更改,然后为dev和prod创建它的副本,并相应地应用dev和prod设置。

答案 2 :(得分:2)

我使用NAnt来构建和部署。我使用.config.template命名约定将.config文件转换为模板。我有一个名为“environment”的NAnt属性,我从命令行调用到NAnt设置。在我的build.xml的顶部,我根据“environment”属性(如switch语句)设置了“db.connectionstring”属性。在构建任务中,我使用grep将“db.connectionstring”字符串推送到构建目录输出的模板中的位置。这样,我只需要打电话:

nant -D:environment=dev

这将获得一组特定于dev的.config文件。

如果您不喜欢grep,请按照以下步骤操作:

http://www.haidongji.com/2008/11/11/use-nant-to-replace-values-in-other-xml-config-files/

这仅适用于XML文件。 Grep更通用。实际上我根据部署环境有不同的数据库名称,grep允许我根据环境将不同的数据库名称插入到SQL脚本中。

答案 3 :(得分:1)

我可能不完全理解你的问题,但在我看来,当你部署应用程序时,你根本不能重新部署web.config,除非需要进行web.config的更改。换句话说,将所有文件复制到目录,除了 web.config文件。

如果必须在部署之间更改web.config文件,则需要编辑每个服务器的web.config。

或者,您可以在每台计算机上找到另一个位置来存储除web.config之外的连接字符串。

答案 4 :(得分:0)

查看web.config

中connectionStrings元素的configSource属性

应该让它变得容易

答案 5 :(得分:0)

我很清楚,你现在的环境是两台服务器,即

Dev App / DB Server
生产应用程序/数据库服务器

你想要做到这样的事情

App Server(dev + production)
数据库服务器(开发+生产)

如果是这种情况,我建议您将数据库和应用程序隔离到两个独立的服务器中 - 当从单个服务器环境迁移时,这是第一步,因为如果您需要集群多个数据库服务器,或者以后可以轻松升级(更常见地)在单个数据库服务器前面对多个Web服务器进行负载平衡,以帮助提高应用程序性能。

话虽如此,我不建议在同一台服务器上并行运行开发和生产环境。虽然它在经济上可能有意义,但是隔离开发环境的目的是让“开发错误”不会流入生产中,如果你有一些糟糕的代码被推送到开发环境,这样做可能会导致停机。

答案 6 :(得分:0)

您是否可以将所有连接字符串放在web.config中,然后在应用程序的主要点确定基于应用服务器使用哪一个?

答案 7 :(得分:0)

对于开发,请使用Web.Debug.config文件,并进行生产,请使用Web.Release.config。每个人都可以定义它自己的独立连接字符串。