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

时间:2008-08-21 04:59:54

标签: .net configuration-files

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

如何构建解决方案,以便每个开发人员都可以拥有自己的开发“首选项”(即不检查源代码管理),但提供一个检查到源代码管理中的默认连接字符串(从而为一个提供正确的默认值)构建过程或新开发人员。)

<小时/> 编辑:@Jonathon建议的“file”方法是否可以与connectionStrings部分一起使用?

5 个答案:

答案 0 :(得分:4)

可以使用本地文件覆盖AppSettings:

<appSettings file="localoveride.config"/>

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

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

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

答案 1 :(得分:3)

  

编辑:可以建议“文件”方法   由@Jonathon以某种方式使用   connectionStrings部分?

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

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;
    }
}

答案 2 :(得分:0)

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

作为一个例子,我使用NAnt来构建我的项目。我有一个名为local.properties.xml.template的文件。如果local.properties.xml不存在,我的NAnt构建将警告开发人员。该文件内部将是工作站特定的设置。模板将被检入源代码控制,但实际的配置不会。

答案 3 :(得分:0)

我使用了相当古老的设计。

  • / _ Test__app.config
  • / _ Prod__app.config
  • /app.config

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

令人讨厌,但你不能介绍提供者和ConfigurationManager来欺骗它,通过说提供者查看“dev”或“prod”连接字符串并且只有3个命名连接字符串。

nant task:

<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>

答案 4 :(得分:0)

  

@Jonathon建议的“文件”方法能否以某种方式与connectionStrings部分一起使用?

不,但没有什么可以阻止您将ConnectionString存储为AppSettings键。