10

我有一个 WebForms 项目,它有一个硬编码到 web.config 中的连接字符串(用于调试 - web.Debug.config)。此连接字符串指向用于开发的数据库服务器。

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

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

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

有什么方法可以覆盖 web.config 连接字符串以强制站点指向我的本地数据库而不将任何内容签入源代码控制?

4

3 回答 3

12

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

与 2012 年相比:

  1. 转到构建-> 配置管理器
  2. 单击活动解决方案配置列表框并选择“新建”。
  3. 输入 local 作为新配置的名称,然后单击 Save。
  4. 确保将配置列下的值更改回调试或以前的默认值
  5. 右键单击您的 Web.config 文件并选择添加配置转换,这将添加新创建的 web.local.config
  6. 在 web.local.config 中添加本地连接字符串转换,类似于

    <connectionStrings>
        <add name="DbConnection"
            connectionString="...Add Local Connection String..."
            xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
    

运行或调试项目时,请确保从绿色运行箭头旁边的列表框中选择本地配置。您只是不检查 web.local.config

于 2013-08-20T20:54:27.400 回答
10

您可能能够做的一件事是为您的连接字符串创建一个单独的文件 - 您根本不会将其签入源代码控制。

根据您的东西的组织方式,您可能需要所有从事开发的人都做同样的事情,并且根据您的发布/部署方式,这可能不适合您。

例如:

网页配置

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

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

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

每个开发者都可以选择他们的本地机器指向哪个数据库,只要connectionstrings.config文件不在源代码管理中(将其添加到忽略列表中),没有人会踩到对方的脚。

于 2013-08-20T20:43:29.853 回答
4

在本地计算机上 创建SQL ALIAS 。

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

于 2013-08-20T20:32:06.597 回答