web.config和app.config机器

我们在不同的办公室有多个开发团队,他们需要不同的值来完成项目web.configapp.config文件中的大量配置设置。

我们希望通过一组合理的默认值来保存这些配置文件,以便通过检查trunk / master分支,您可以在不需要为配置文件进行挖掘的情况下工作。

从历史上看,我们使用了Subversion,特别是TortoiseSVN,这为管理本地更改提供了一个简单的方法:我们只是将这些文件添加到TortoiseSVN的自动ignore-on-commit更改列表中。 这样可以防止意外检查这些文件,因为您需要专门选择它们以将它们包括在签入中(并且可以确保检查重大更改,而不是本地配置噪音)。 这种方法的主要缺点是配置文件总是看起来“改变了”,所以不可能一目了然知道你是否有任何本地更改。

我们希望切换到Git,并试图找出最佳方法。

首先,其他StackOverflow答案中已经有了:

选项1:检入xxx.sample文件并.gitignore实际的配置文件 :例如,在此答案中建议使用此选项。 我看到的主要问题是,配置文件的更改很容易被遗忘,有两个不同点:提交者可能很容易错过他们需要添加到.sample文件中的.sample ,而消费者(尤其是持续集成服务器)可以很容易错过他们需要将.sample文件合并到本地配置文件中的更改。 所以基本上,这似乎不是一个很好的解决方案。

选项2:有一个签入的xxx.defaults文件和一个.gitignored xxx.local配置文件,它覆盖它定义的任何设置 :这是提供了,例如,在这里。 问题在于我们正在与标准的.Net配置提供商合作 - 当Mirosoft已经完成所有工作时,我真的不希望我们实施全新的设置加载框架。 有谁知道一种方法来获取app.config和web.config文件来引用可选的本地覆盖文件?

选项3:让开发人员保留本地分支机构,然后让他们始终检查樱桃选择或重新分配的主分支,以总是绕过/避免不必要的提交在其本地分支 :这是作为一个可能的工作流程提供的,虽然我在更改跟踪(检查所有内容)方面了解其清洁度,它会在每次签入时引入大量所需的开销; 这是一个主要的痛苦!

选项4:检入配置文件,但标记为--assume-unchanged :这是作为可能的选项提供的; 据我所知,它与TortoiseSVN中的ignore-on-commit更改列表的精神非常相似,除非您在提交过程中不能看到这些“隐藏”的已更改文件; 例如,TortoiseGit确实显示带有“更改”图标叠加层的文件,但在提交对话框中,该文件完全不显示。 这似乎有点可怕,再次很容易忘记检查更改。

鉴于这些选项,我已经找到了所有这些选项,我真的希望有一种方法可以选择性地将本地配置文件“包含”到/通过签入的app.config / web.config文件中,然后使用选项2 ; 有没有人知道一种方法来做到这一点,或其他选项,我错过了? (我很想尝试一下自定义的Xml合并预构建步骤......)

我应该早些提到,我们仍然在VS2008上,所以配置转换不可用。


更新:(删除,显然是错误的)

更新2:我删除了我以前的更新并回答,这是愚蠢的/没有工作。 我没有意识到,在“我们”合并之后,另一个方向上的下一个合并将这些文件的“原始”版本带回(覆盖本地分支的更改)。 如果您有兴趣,请参阅编辑记录。 这个问题与以往一样开放。


我想建议你看看ConfigGen。 我们在所有项目中都使用它,它为所有开发人员以及我们所有的环境都带来了奇迹。 它基本上运行了一个电子表格,该电子表格指出了计算机名称和输出配置文件,然后对模板App.Config或Web.Config进行标记,并将电子表格中的值替换为它。 在项目中添加一个简单的预构建步骤以运行configgen,在构建开始之前,您将为您的机器定制一个配置文件。 它也支持默认设置。

看看网站,让自己的头脑,但我绝对可以担保。

编辑 :值得注意的是,你可以忽略所有的Web.config和App.config文件(按照.git)。 但是您确实需要将您的模板和电子表格添加到回购。 此外,我确信有一个更新的方式,可能包括一个电子表格的XML替换,它有自己的编辑器,使它非常适合DVCS的。

编辑2 :也请看看丹尼尔的帖子在这里:https://stackoverflow.com/a/8082937/186184。 他给出了一个非常清晰的模板和电子表格示例,以及如何在解决方案中使用它。


您是否考虑过内容过滤器驱动程序?

内容过滤器dfriver

这意味着,在每个git checkout ,涂抹脚本会根据以下内容生成实际的配置文件:

  • 配置模板文件(带有配置值占位符,如@@A_PARAM_VALUE@@
  • 配置值文件之一(每个开发人员可以保持版本化他/她自己的配置文件值)
  • 这避免了任何合并问题和gitignore设置:每个“配置值文件”是不同的,并保持独立。
    这也与pms1969的答案中提到的ConfigGen等其他配置生成解决方案兼容。


    我会看看这个答案,以便Dan在部署环境之间管理复杂的Web.Config文件,以获得潜在的解决方案。 我使用mercurial并使用相同的过程来检入一个通用的web.config文件,并使用web转换来更改configSource的位置以指向我的部署特定的东西。

    使用此路由的优点是它完全内置于框架中,不需要额外的代码,并且可以与Web部署配合使用。

    在web.config中检查:

    <?xml version="1.0"?>
    <configuration>
      <!-- snip -->
      <connectionStrings configSource="config/connectionStrings.config" />
    </configuration>
    

    检查web.debug.config:

    <?xml version="1.0"?>
    <configuration>
      <connectionStrings
          configSource="config/dev.connectionStrings.config"
          xdt:Transform="Replace(configSource)" />
    </configuration>
    

    我有一个config/connectionStrings.config检入了默认值,但是开发服务器config/dev.connectionStrings.config没有签入,并且在新部署中没有替换它。

    链接地址: http://www.djcxy.com/p/42589.html

    上一篇: web.config and app.config machine

    下一篇: Read connection string from web.config