在.NET项目中,假设您有一个配置设置 - 比如连接字符串 - 存储在app.config文件中,这对于团队中的每个开发人员来说都是不同的(他们可能使用本地SQL Server,或者特定服务器实例,或使用远程服务器等)。
如何构建解决方案,以便每个开发人员都可以拥有自己的开发“首选项”(即不检查源代码管理),但提供一个检查到源代码管理中的默认连接字符串(从而为一个提供正确的默认值)构建过程或新开发人员。)
<小时/> 编辑:@Jonathon建议的“
file
”方法是否可以与connectionStrings
部分一起使用?
答案 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)
我使用了相当古老的设计。
然后在我的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键。