【问题标题】:How to dynamically customize .net .config files如何动态自定义 .net .config 文件
【发布时间】:2013-11-20 00:17:13
【问题描述】:

我是一个小型开发团队的一员,我们目前正在从共享相同开发数据库的模型转变为我们都有自己的个人开发数据库的模型..

因此,我们正试图弄清楚如何管理 Web 和应用程序 .config 文件以适应各个数据库。显然,我们希望避免每个人都需要手动更改连接字符串以指向他们自己的数据库,然后记得在重新签入之前将其更改回来!

我确信这是几乎所有开发团队都面临的一个非常普遍的问题。尽管如此,我还是找不到任何解决这个问题的方法。

我熟悉使用 xdt 语法的 web.config 转换,虽然这有助于修改文件,但它(据我所知)不提供注入外部参数值的方法。例如,我们需要转换来检测当前用户,并将 .config 中的数据库名称替换为包含其用户名的名称。

那么,您如何在您的开发团队中解决这个问题?

谢谢。

编辑:

抱歉,我错过了一条相当重要的信息,导致这些答案无法被接受。作为一家公司,我们都在我们的开发环境中远程工作和远程桌面。我们实际上拥有一台(强大的)开发机器,所有开发人员 rdp 进入并同时使用。因此,使用别名或修改主机文件等将同样适用于所有用户,而不提供必要的个人定制。 SQL 实例已经是本地实例,它只是机器上的本地实例,供所有开发人员使用。

【问题讨论】:

    标签: .net sql-server-2008 web-config app-config transformation


    【解决方案1】:

    我可以建议两种方法。

    1. 为您的数据库服务器名称使用相同的别名,以便连接字符串相同,您可以通过将以下行放入主机文件中来做到这一点:

      127.0.0.1 数据库服务器

    2. 将连接字符串放入外部文件,不要将其添加到源代码管理中。对于暂存和发布配置,您可以通过 Web 配置转换添加所需的连接字符串。

    在第二种情况下,您的 web.config 将如下所示:

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

    编辑: 其中connectionStrings.config 文件放在同一个文件夹中,但添加到源代码管理下的忽略列表中,这样每个开发人员都将拥有自己的该文件副本,并且他的更改不会影响其他开发人员。为简化操作,您可以创建一个可用作模板的connectionStrings.config.default 文件,这样当新开发人员加入项目时,他将基于此文件使用默认值创建自己的connectionStrings.config 副本。

    【讨论】:

    • 谢谢,请参阅我的编辑,它解释了为什么这对我们的情况没有帮助。
    • 好的,我明白了。但是你为什么不喜欢第二种方法呢?据我了解,虽然在同一台计算机上工作的开发人员有自己的源代码副本,不是吗?
    • 是的,但同样的问题,每个开发人员都必须自定义源代码以指向他们自己的连接文件。该解决方案有效地将问题从 web.config 文件转移到另一个新文件。 - 也许我不明白这一点,您能否详细解释一下如何设置这些外部文件,以及如何获取访问它们的源代码。谢谢!
    • 我添加了更详细的方法描述。基本上你是对的 - 问题被转移到另一个文件并且只是部分解决。但是,每个开发人员只需要手动创建一次,并且在重新签入之前无需将其更改回来。
    【解决方案2】:

    一个选项可以使用命名的连接字符串,并在 machine.config 中而不是 web.config 中定义这些字符串。

    【讨论】:

    • 谢谢,请参阅我对问题的编辑,该问题解释了为什么在这种情况下修改 machine.config 无济于事。
    【解决方案3】:

    这个问题的一个常见解决方案是在每个用户的开发机器上都有开发数据库,​​这样你就可以为每个人拥有相同的连接字符串,例如对于 SQL Server,它将类似于:

    connectionString="data source=.\SQLExpress;..." 
    

    当您这样做时,您希望每个开发人员都拥有最新的数据库,因此您应该真正查看 Visual Studio 2010 数据库项目,这使得它变得非常容易(但仅限 SQL Server)。

    【讨论】:

    • 谢谢,请参阅我的编辑,它解释了为什么这对我们的情况没有帮助。
    【解决方案4】:

    我们使用的技术是标准化开发机器上的数据库名称、服务器名称(无命名实例)、用户名和密码。

    所以如果产品代号是 Aero,我们会使用

    服务器=(本地);数据库=aero;uid=aero;密码=密码

    对于开发环境,安全性并不重要,但一致性很重要,而且这种技术可以避免检查和破坏其他人的 app/web.configs。

    【讨论】:

    • 谢谢,请参阅我对问题的编辑,它解释了为什么这种方法在我们的情况下没有用。
    【解决方案5】:

    虽然我们使用 web.config 转换来定义使用的数据库(本地开发、测试、发布),但如果需要,每个开发人员都可以使用本地 SQL 服务器。我们通过设置 SQL 服务器别名来做到这一点,Web 配置连接字符串是相同的,并且开发人员在他们的机器上设置别名。

    例如,我们都在 web.config 中设置了“tester1”,然后开发人员为其本地 SQL 服务器设置了别名,这是图像:

    【讨论】:

    • 谢谢,请参阅我的编辑,它解释了为什么这对我们的情况没有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多