我可以覆盖web.config中的连接字符串以进行本地开发吗?

时间:2013-08-20 20:23:23

标签: asp.net .net web-config

我有一个WebForms项目,其连接字符串已硬编码到web.config中(对于Debug - web.Debug.config)。此连接字符串指向要进行开发的DB服务器。

我想运行该数据库的本地副本,以便我的更改不会立即影响其他人。

我一直在做的是进入web.config并更新连接字符串以指向我的本地数据库。这可行,但有点乏味,因为我必须记住排除web.config,如果我撤消所有更改,则必须重新更新它。

因为,就像我说的,其他人正在使用这个解决方案,我想避免检查任何内容或修改Web配置。

有没有办法覆盖web.config连接字符串以强制网站指向我的本地数据库而不检查任何来源控件?

3 个答案:

答案 0 :(得分:9)

一种解决方案是使用配置转换功能。

VS 2012:

  1. 转到Build-> Configuration Manager
  2. 单击“活动解决方案配置列表”框,然后选择“新建”。
  3. 输入local作为新配置的名称,然后单击“保存”。
  4. 确保将“配置”列下的值更改回“调试”或哪个 曾经是默认的
  5. 右键单击您的Web.config文件并选择Add Config Transform,它将添加新创建的web.local.config
  6. 在web.local.config中添加本地连接字符串转换,类似于

    <connectionStrings>
        <add name="DbConnection"
            connectionString="...Add Local Connection String..."
            xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
    
  7. 运行或调试项目时,请确保从绿色运行箭头旁边的列表框中选择本地配置。你只是不要检查web.local.config

答案 1 :(得分:7)

您可以做的一件事是为您的连接字符串设置一个单独的文件 - 您根本不会将其检入源代码控制中。

根据您的内容的组织方式,您可能需要每个正在进行开发的人都做同样的事情,并且根据您的发布/部署方式,这可能对您不起作用。

例如:

<强>的Web.config

<configuration>
  <connectionStrings configSource="connectionstrings.config">
  </connectionStrings>
</configuration>

connectionstrings.config(不在源代码管理中)

<connectionStrings>
  <add name="cs" connectionString="server=.;database=whatever;"/>
</connectionStrings>

每个开发人员都可以选择他们的本地计算机指向哪个数据库,只要connectionstrings.config文件不在源代码控制中(将其添加到忽略列表中),就没有人会踩到彼此的脚。

答案 2 :(得分:3)

在本地计算机上创建 SQL ALIAS

单击开始运行并在本地计算机上键入“cliconfg.exe”。这将帮助您在本地计算机上创建SQL别名。在web.config上连接到实时数据库,但在您的机器上创建一个将重定向到本地数据库的SQL别名。完成此操作后,当您发布程序时,它将自动连接到实时数据库,但是当从本地计算机运行时,它将连接到本地数据库而无需更改任何代码。