有人能建议一个管理多个web.config文件的好方法吗?
例如,我有一个开发web.config,我在我的localmachine上使用名为“localWeb.config”,然后我用于生产名为“prodWeb.config”。我保留了.config扩展名,因此没有人可以从Web服务器访问它们。
localWeb.config例如有一个连接字符串到开发数据库,而prodWeb.config有一个到生产数据库。
目前,我正在使用postbuild事件将localWeb.config或prodWeb.config的内容复制到web.config。这很有效,但我想知道是否有人知道更好的方法。
答案 0 :(得分:3)
您可以查看此CodeCarnage page中列出的方法是否更符合您的需求。它利用configsource属性指向DB和APP设置,每个设置都由环境分隔。这可能允许您在web.config中保留一致的内容,并在其他配置文件中保留特定于环境的“东西”。
答案 1 :(得分:2)
以下是一些任务 使用该工具完成:
创建包含内容,配置和SQL的包 用于部署或共享的数据库 和其他人。
使用该程序包作为版本应用程序或创建备份的方法。
添加参数以替换连接字符串或其他值 安装包时的文件。
使非管理员能够部署软件包并精确控制它们 访问。
- 醇>
同步或迁移运行IIS 6.0和IIS的站点和服务器 7.0。
答案 2 :(得分:1)
我保留一个配置文件并在运行时使用逻辑来检测要使用的配置子集。如果主机名是“prodsrvr- *”,那么我使用生产服务器配置,包括数据库连接等。如果主机名是“test- *”,那么我使用测试配置数据。等等。
编辑:这里有一些代码可以完成我所描述的内容。public static string GetConnString()
{
string connString = ConfigurationSettings.AppSettings[GetConfigKey("database")];
return connString;
}
public static string GetConfigKey(string baseKey)
{
string str = baseKey;
if (Dns.GetHostName().StartsWith("dinoch"))
{
str = str + "-dev";
}
else if (Dns.GetHostName().StartsWith("prodsrvr"))
{
str = str + "-prod";
}
return str;
}
<configuration>
<appSettings>
<add key="database-dev" value="server=(local)\vsdotnet;database=ASPXAPPS;Integrated Security=SSPI" />
<add key="database-prod" value="server=(local)\vsdotnet;database=ASPXAPPS;Integrated Security=SSPI" />
</appSettings>
</configuration>
我使用一个简单的StartsWith(),其中一些“魔术字符串”是硬编码的。
为了避免这种情况,我可以想象在web.config文件中定义一个正则表达式的后缀。其中,如果regex1与主机名匹配,则使用suffix1。如果是regex2,那么使用suffix2。等等。您只需加载地图一次,然后只需加载一个foreach()枚举正则表达式并返回它们是否与主机名匹配。
或者,您可能希望使用不同的标准,以区分prod和dev与测试服务器,而不是主机名。这取决于你。
答案 3 :(得分:1)
这将继续是一个黑客,直到asp.net 4到达http://www.asp.net/learn/whitepapers/aspnet40/#_Toc223325501