一种Webconfig自动化升级方法

1、方法功能

使用本方法,可以将开发环境最新版本的web.config结构与生产环境环境的config融合,而不用考虑两个config的版本差异值是多少。使用一种标记的方式,在开发环境webconfig上标记哪些节点的哪些属性需要保留为生产环境对应的值,而这种标记不影响开发环境web.config的使用。

2、适用范围

1、将开发环境的webconfig更新到生产环境,不再需要手动改配置值;

2、在多个生产环境中,使用同一份开发环境的webconfig,可转换得到适合本生产环境的最终config;

3、设计依赖

本方法有两个依赖:灵活的xml处理指令标记与逻辑固定的指令解释器,扩展在于指令标记而不是解释器。

3.1灵活的xml处理指令标记

开发环境的webconfig中,在希望保存原有配置值的元素之上写上处理指令,目标为"merge"。对于集合下相同名称的的元素,使用by来指示唯一标识的属性名称是什么,像appSettings下的元素,by="key";使用attr来指示需要保留原有配置值的属性名称,缺省为全部属性,可以写单个,多个中间半角逗号分隔。以下红色部分就是merge指令,它的存在不会影响到开发环境中webconfig本身的正确性。

<appSettings>
  <add key="useLocalIPAdress" value="false"/>

  <!--通过节点的key属性来合并value-->
  <?merge by="key" attr="value"?>
  <add key="localIPAdress" value="192.168.1.99" />

  <!--通过节点的key属性来合并所有属性-->
  <?merge by="key"?>
  <add key="useProxy" value="true" />
</appSettings>
<!--通过节点名称来合并account,password,sex,age-->
<?merge attr="account,password,sex,age" ?>
<admin account="admin" password="123456" sex="男" age="18" enable="true" />

3.2固定的指令解释器

解释器的功能是将带有指令的config当作xml解析,遍历所有元素,如果元素之上存在"merge"指令,则解析指令的数据内容,通过by的值或自身的节点名称,从旧的config中读取相配的节点,按照attr描述,进行将旧config的值复制过来,最终得到一份融合后的xml数据,转存为web.config文件即可。由于功能单一与逻辑固定,解释器本身不需要进行更新,合并xml大体方法如下:

/// <summary>
/// 将valueXml的值与markXml的结构合并
/// 返回得到的新的xml
/// </summary>
/// <param name="valueXml">带有值的xml</param>
/// <param name="markXml">带有标记的xml</param>
/// <returns></returns>
public static string MergeXml(string valueXml, string markXml)
{
    var valueDoc = XDocument.Parse(valueXml);
    var markDoc = XDocument.Parse(markXml);
    var markElements = markDoc.Descendants().ToArray();

    foreach (var markElement in markElements)
    {
        var mergeMark = markElement.GetMergeMark();
        if (mergeMark == null)
        {
            continue;
        }

        if (string.IsNullOrEmpty(mergeMark.By) == false)
        {
            var byAttr = markElement.Attribute(mergeMark.By);
            var xPath = markElement.GetAbsoluteXPath(byAttr);
            valueDoc.XPathSelectElement(xPath).CopyAttrValuesTo(markElement, mergeMark.Attr);
        }
        else
        {
            var xPath = markElement.GetAbsoluteXPath();
            valueDoc.XPathSelectElement(xPath).CopyAttrValuesTo(markElement, mergeMark.Attr);
        }
    }
    return markDoc.ToString();
}

为了简单,我做了一下文件右键菜单关联,人工更新web.config更方便:

4、项目与下载

https://github.com/xljiulang/ConfigMerge

时间: 2024-11-03 11:29:09

一种Webconfig自动化升级方法的相关文章

MySQL 升级方法指南大全

MySQL 升级方法指南大全 http://blog.sina.com.cn/s/blog_5a8b8eb80100ld7a.html 通常,从一个发布版本升级到另一个版本时,我们建议按照顺序来升级版本.例如,想要升级 MySQL 3.23 时,先升级到 MySQL 4.0,而不是直接升级到 MySQL 4.1 或 MySQL 5.0. 如果都是比较新的版本的升级可以参考下面的文章, MySQL数据库的版本更新很快,新的特性也随之不断的更新,更主要的是解决了很多影响我们应用的BUG,为了让我们的

MySQL&nbsp;升级方法指南大全

原文:MySQL 升级方法指南大全 通常,从一个发布版本升级到另一个版本时,我们建议按照顺序来升级版本.例如,想要升级 MySQL 3.23 时,先升级到 MySQL 4.0,而不是直接升级到 MySQL 4.1 或 MySQL 5.0. 如果都是比较新的版本的升级可以参考下面的文章, MySQL数据库的版本更新很快,新的特性也随之不断的更新,更主要的是解决了很多影响我们应用的BUG,为了让我们的MySQL变得更美好,我们有必要去给它升级,尽管你会说它现在已经跑得很好很稳定完全够用了.下面我们来

VMware虚拟化三种备份和恢复方法的对比分析

服务器虚拟化,尤其是VMware形式的服务器虚拟化使IT人员获益良多,这么说一点也不为过.据我们所见,服务器虚拟化能解决服务器扩张.资源消耗.服务器扩张.能源消耗.高可用性等相关问题.服务器虚拟化也使我们有更多的时间解决其它的迫切问题,如企业资源预案升级.存储项目再三迁移或者为什么我的青蛙总不回家的问题.尽管VMware提供封装技术和抽象技术,使我们受益匪浅,但数据保护领域发生的基本变革也带来了各项挑战.即使出现了VMware虚拟化,备份人员依然是牢骚最多的IT人员.最大的挑战在于保证数据的一致

linux系统和应用程序升级方法

当我们使用linux一段时间以后,自然不会满足总是在没有任何变化的系统中工作,而是渴望能象在windows系统中一样,不断对自己的linux进行升级.另一方面,linux本身就是一个开放的系统,每天都会有新的软件出现,linux发行套件和内核也在不断更新.在这样的情况下,学会对linux (包括系统本身和各种软件)进行升级就显得非常迫切了. 在Linux环境下,升级的对象可以是一般的软件,可以是编译器,也可以是系统的内核,甚至是系统本身.下面,虫虫就分别讲讲对不同对象的升级的方法. 1. 升级一

电脑主板BIOS刷新升级方法集合

什么是BIOS?BIOS是英文"Basic Input Output System"的缩略词,直译就是"基本输入Output系统".它是一组固化到计算机内主板上一个ROM芯片上的程序,保存着计算机最重要的基本输入输出的程序.开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息. 其主要功能是为计算机提供最底层的.最直接的硬件设置和控制.更直观的说,它是主板上一个正方形,或者长方形的芯片,芯片里存着电脑最基本的输出输入的程序,这个程序在开机时按F2.

基于串口通信的DSP应用程序在线升级方法

转载内容,源地址http://www.qiytech.com/jiejuefangan/gongyekz/922.html 摘  要:为解决特殊场合DSP程序升级困难的问题,以TMS320F28035为例,介绍了一种基于串口通信的适合于TMS320C2000系列DSP实现程序更新的在线升级方法.描述了该在线升级方法的基本思想和实现步骤,给出了关键部分的程序代码.实验证明,该方法简单可靠,可用于嵌入式设备软件程序的升级更新中. 关键词: 在线升级: DSP:串口通信: Flash TMS320C2

《我叫MT》橙卡技能升级方法一览

有很多玩家在新版本更新后对于<我叫MT>的橙卡技能怎样升级很困惑,今天小编带来一篇详细的橙卡升级攻略: 绿云应用的小编提示你:橙卡不在副本掉落,获得的方法是通过紫卡升级而成的.橙卡是目前最强的英雄. 首先要介绍一下橙卡的主动技能: 1.每张橙卡分为3种天赋,每种天赋带有3种被动技能,例如:方砖的飓风雪.天外陨石.秘法飞弹;沐丝的神圣治疗.抚慰伤害.灵魂诅咒等等.目前开放的是MT.方砖.沐丝三张橙色卡牌(以后版本会逐渐开放其他的英雄) 2.橙卡的主动技能为10级,没有副本可以产出技能,只能通过技

经典:浅谈以太坊智能合约的设计模式与升级方法

目录 1. 最佳实践 2. 实用设计案例 2.1 控制器合约与数据合约: 1->1 2.2 控制器合约与数据合约: 1->N 2.3 控制器合约与数据合约: N->1 2.4 控制器合约与数据合约: N->N 2.5 总结 3. 升级 3.1 控制器合约升级,数据合约不升级 3.2 控制器合约不升级,数据合约升级 3.3 控制器合约升级,数据合约升级 4. 数据迁移 4.1 硬编码迁移法 4.2 硬拷贝迁移法 4.3 默克尔树迁移法 以太坊EVM是当前区块链行业应用最为广泛的虚拟机

结合Scikit-learn介绍几种常用的特征选择方法

作者:Edwin Jarvis 特征选择(排序)对于数据科学家.机器学习从业者来说非常重要.好的特征选择能够提升模型的性能,更能帮助我们理解数据的特点.底层结构,这对进一步改善模型.算法都有着重要作用. 特征选择主要有两个功能: 减少特征数量.降维,使模型泛化能力更强,减少过拟合 增强对特征和特征值之间的理解 拿到数据集,一个特征选择方法,往往很难同时完成这两个目的.通常情况下,我们经常不管三七二十一,选择一种自己最熟悉或者最方便的特征选择方法(往往目的是降维,而忽略了对特征和数据理解的目的).