繁体   English   中英

asp.net管理多个web.config文件

[英]asp.net managing multiple web.config files

谁能建议一种管理多个web.config文件的好方法?

例如,我有一个在本地计算机上使用的开发web.config,名为“ localWeb.config”,然后在生产环境中使用了一个名为“ prodWeb.config”的产品。 我保留.config扩展名,因此没有人可以从Web服务器访问它们。

例如,localWeb.config将具有一个到开发数据库的连接字符串,而prodWeb.config将具有一个到生产数据库的连接字符串。

当前,我正在使用一个postbuild事件,该事件会将localWeb.config或prodWeb.config的内容复制到web.config。 这很好用,但是我想知道是否有人知道更好的方法。

您可以看到此CodeCarnage 上概述的方法是否更适合您的需求。 它利用configsource属性指向数据库和APP设置,每个设置均由环境分隔。 这也许可以让您将一致的内容保留在web.config中,并将特定于环境的“内容”保留在其他配置文件中。

查看Web部署工具

以下是使用该工具完成的一些任务:

  1. 创建一个包含内容,配置和SQL数据库的程序包,以进行部署或与他人共享。

  2. 使用该软件包作为对应用程序进行版本控制或创建备份的方法。

  3. 添加参数以在安装软件包期间替换文件中的连接字符串或其他值。

  4. 使非管理员可以部署程序包并精细地控制其访问。

  5. 同步或迁移运行IIS 6.0和IIS 7.0的站点和服务器。

我保留一个配置文件,并在运行时使用逻辑来检测要使用的配置子集。 如果主机名是“ 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与主机名匹配,则使用后缀1。 如果是regex2,则使用后缀2。 等等,您只需加载一次地图,然后将其加载到forreg()中,即可通过正则表达式进行枚举,并在它们与主机名匹配时返回。

或者,也许您要使用其他标准来区分prod和dev与测试服务器(主机名除外)之间的区别。 由你决定。

在asp.net 4到达http://www.asp.net/learn/whitepapers/aspnet40/#_Toc223325501之前,这将一直是黑客

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM