代码之家  ›  专栏  ›  技术社区  ›  Brad Leach

如何管理每个开发人员的配置设置

  •  3
  • Brad Leach  · 技术社区  · 17 年前

    在.NET项目中,假设您有一个配置设置(如连接字符串)存储在app.config文件中,这对于您的团队中的每个开发人员都是不同的(他们可能使用本地SQL Server或特定的服务器实例,或使用远程服务器等)。

    如何构造解决方案,使每个开发人员都可以有自己的开发“首选项”(即未签入源代码管理),但提供签入源代码管理的默认连接字符串(从而为生成过程或新开发人员提供正确的默认值)。


    编辑:可以 file “由@jonathon建议的方法不知何故与 connectionStrings 部分?
    5 回复  |  直到 17 年前
        1
  •  4
  •   FlySwat    17 年前

    可以用本地文件覆盖AppSettings:

    <appSettings file="localoveride.config"/>
    

    这允许每个开发人员保留自己的本地设置。

    至于连接字符串,在一个完美的世界中,所有开发人员都应该连接到一个测试数据库,而不是运行每个SQL Server。

    但是,我发现最好在源代码管理中保留名为web.config.prd的文件,并将其用于构建部署。如果有人修改web.config,他们还必须将更改添加到.prd文件…那里没有良好的自动化:(

        2
  •  3
  •   Scott Muc    17 年前

    编辑:是否可以建议“文件”方法 被@jonathon用在 ConnectionStrings部分?

    或者,您可以在已签入的配置文件中具有多个连接字符串,并使用appsettings键来确定要使用哪个连接字符串。为此,我的代码库中包含以下内容:

    public class ConnectionString
    {
        public static string Default
        {
            get 
            { 
                if (string.IsNullOrEmpty(ConfigurationManager.AppSettings["DefaultConnectionStringName"]))
                    throw new ApplicationException("DefaultConnectionStringName must be set in the appSettings");
    
                return GetByName(ConfigurationManager.AppSettings["DefaultConnectionStringName"]);
            }
        }
    
        public static string GetByName(string dsn)
        {
            return ConfigurationManager.ConnectionStrings[dsn].ConnectionString;
        }
    }
    
        3
  •  0
  •   Scott Muc    17 年前

    我总是为我的配置文件制作模板。

    作为一个例子,我使用nant来构建我的项目。我签入了一个名为local.properties.xml.template的文件。如果local.properties.xml不存在,我的nant构建将警告开发人员。该文件将包含特定于工作站的设置。模板将被签入源代码管理,但实际配置不会。

        4
  •  0
  •   DevelopingChris    17 年前

    我用的是非常古老的设计,很有效。

    • /测试配置
    • /产品配置
    • /App.CONFIG

    然后在我的nant脚本中,我有一个复制当前构建环境加上app.config的任务,并将其复制到app.config。

    这很糟糕,但是你不能在提供者和ConfigurationManager之间进行欺骗,比如说提供者查看“dev”或“prod”连接字符串,只有3个命名的连接字符串。

    任务:

    <target name="copyconfigs" depends="clean">
      <foreach item="File" property="filename" unless="${string::get-length(ConfigPrefix) == 0}">
       <in>
         <items>
           <include name="**/${ConfigPrefix}App.config" />
           <include name="**/${ConfigPrefix}connectionstrings.config" />
           <include name="**/${ConfigPrefix}web.config" />
         </items>
       </in>
       <do>
        <copy overwrite="true" file="${filename}" tofile="${string::replace(filename, ConfigPrefix,'')}" />
       </do>
      </foreach></target>
    
        5
  •  0
  •   FlySwat    17 年前

    @jonathon建议的“file”方法是否可以与connectionStrings部分一起使用?

    没有,但是没有什么能阻止您将connectionString存储为appsettings密钥。

    推荐文章