5

我正在将 SQL 服务器移动到单独的机器上。目前我们在同一个盒子上运行我们的 web 服务器和 sql 服务器。所以我们有一个带有 IIS 和 SQLServer 的生产服务器,然后是一个独立的开发服务器来反映这个设置。

当涉及到我们的 asp.net 控件的 app.config 和网站的 web.config 时,这很有效,因为我们可以使用“Initial Catalog=MyDB;...”,而且因为两台机器上的 DB 名称相同,所以效果很好.

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

4

8 回答 8

8

这是我使用的解决方案。在 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 文件设置都随您而行,而不会弄乱您的连接字符串。

于 2009-02-04T18:24:56.417 回答
4

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

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

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

于 2009-02-04T17:59:09.573 回答
2

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

nant -D:environment=dev

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

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

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

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

于 2009-02-04T18:14:08.513 回答
1

我在这里可能不完全理解您的问题,但在我看来,当您部署应用程序时,您根本无法重新部署 web.config,除非需要对 web.config 进行更改。也就是说,将所有文件复制到web.config 文件之外的目录。

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

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

于 2009-02-04T17:57:56.317 回答
0

查看 web.config 中 connectionStrings 元素的 configSource 属性

那应该很容易

于 2009-02-04T18:27:21.140 回答
0

我很清楚,您当前的环境是两台服务器,即

开发应用程序/数据库服务器
生产应用程序/数据库服务器

你正在考虑把它做成这样

应用服务器(开发+生产)
数据库服务器(开发+生产)

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

话虽如此,我不建议在同一台服务器上像这样并排运行开发和生产环境。虽然在财务上可能有意义,但隔离开发环境的目的是防止“开发错误”流入生产环境,如果您将一些错误代码推送到开发环境,这样做可能会导致停机。

于 2009-02-05T08:19:03.723 回答
0

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

于 2009-02-08T03:46:34.923 回答
0

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

于 2017-08-31T15:16:59.833 回答