3

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

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


编辑:file@Jonathon 建议的“”方法可以与该connectionStrings部分一起使用吗?

4

5 回答 5

4

AppSettings 可以用本地文件覆盖:

<appSettings file="localoveride.config"/>

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

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

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

于 2008-08-21T05:05:24.370 回答
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;
    }
}
于 2008-08-21T05:42:28.433 回答
0

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

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

于 2008-08-21T05:02:51.040 回答
0

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

  • /_Test__app.config
  • /_Prod__app.config
  • /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>
于 2008-08-21T05:04:44.327 回答
0

@Jonathon 建议的“文件”方法可以与 connectionStrings 部分一起使用吗?

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

于 2008-08-21T05:33:47.017 回答