. 系列文章

Web.Config Transformation详解,这部分内容比较简单,关键是用没有用过的问题,所以这里希望帮助大家实践一下。


一 概述:

在VS2010中引入在Config 文件中使用XML DOCUMENT TRANSFORM,这一个特性就是帮助你Web.config能方便的从部署配置文件转化到产品配置文件。协助Web.Config Transformation这两个功能就是web.debug.config, web.release.config等.这些文件的最后都会匹配到MSBuild中的配置文件去。

其实是在web.debug.config和web.release.config来写一些描述文件,再通过Transformation Engine来转化。

在Transformation Engine 执行下面任务

首先是识别Locator属性是否设置,来判断是否使用XML转换,接着就是从原配置的XML文件中获得相应节点,再从转换的XML文件中招到适合Transform的值相匹配的节点,然后将他们转化到指定的XML配置文件。在转化中主要依赖的是Transform的attribute.


二:实践


基础部分:

要使用XML-Document-Transform engine就要先引用XML-Document-Transform 命名空间,如果在你的Conifg文件中引用这个命名空间,你就能在本Web.config中使用转换描述。

要使用XML-Document-Transform engine就要先引用XML-Document-Transform 命名空间,如果在你的Conifg文件中引用这个命名空间,你就能在本Web.config中使用转换描述。

下面是在web.release.config中使用

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

接下来是使用Locator,Locator是代表一组表达式,主要是基于 XPath的,通过配置Locator来查找Web.Config.并做相应的事情。

1 :locator属性

下面有个表,来详细列举locator的语法

(1)Match;

这里你需要就是在你直接匹配的属性名。

<connectionStrings>
  <add name="Northwind" connectionString="connection string detail"
    providerName="System.Data.SqlClient" 
    xdt:Transform="Replace" 
    xdt:Locator="Match(name)" />
</connectionStrings>

Engine会再你的Web.config中找到匹配name为Norhwind的就用上面的配置文件图替换。

(2)Condition
基于XPath,在Locator中应用有逻辑性的判断表达式。

<connectionStrings>
  <add name="Northwind" 
    connectionString="connection string detail" 
    providerName="System.Data.SqlClient" 
    xdt:Transform="Replace" 
    xdt:Locator="Condition(@name=’Northwind or @providerName=' System.Data.SqlClient')" />
</connectionStrings>

上面就是Name属性匹配‘Norhwind’的或providerName匹配System.Data.SqlClient的配置文件节点都会被替换。

(3)XPath
这个就是直接写XPath,http://www.w3.org/TR/xpath,这里是XPath的标准

<location path="c:\MySite\Admin" >
  <system.web xdt:Transform="Replace" xdt:Locator="XPath(//system.web)">
     
  </system.web>
<location>

这里你会发现,这里可以写一些列的表达式。

2: Transform 属性

(1) Replace
表示所有匹配的节点都是替换

<assemblies xdt:Transform="Replace">
  <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>

其实这里描述文件时web.release.config,将要替换的文件时Web.config .

(2) Remove

删除第一匹配的元素。

<assemblies xdt:Transform="Remove">
</assemblies>

(3)RemoveAll

删除所有匹配的元素

<connectionStrings> 
  <add xdt:Transform="RemoveAll"/>
</connectionStrings>

(4)Insert

插入从父节点中插入,(authorization中插入<deny users="*" />)

<authorization>
  <deny users="*" xdt:Transform="Insert"/>
</authorization>

(5)SetAttributes

直接设置Attributes

<compilation 
    batch="false"
    xdt:Transform="SetAttributes(batch)">
</compilation>

(6)RemoveAttributes
删除出Attributes

<compilation xdt:Transform="RemoveAttributes(debug,batch)">
</compilation>

(7)InsertAfter (XPath)
通过匹配 XPath的表达式的,找到节点,并子节点后面插入 XML

<authorization>
  <deny users="AName" xdt:Transform="InsertAfter(/configuration/system.web/authorization/ allow[@roles='Admins']") />
</authorization>

(8)InsertBefore (XPath)
通过匹配 XPath的表达式的,找到节点,并子节点前面插入 XML

<authorization>
  <allow roles=" Admins" xdt:Transform="InsertBefore(/configuration/system.web/authorization/ deny[@users='*'])" />
</authorization>

(9)XSLT (filePath)

可以在外部定义 XSLT文件,来替换Web.cofig文件。

<appSettings xdt:Transform="XSLT(V:\MyProject\appSettings.xslt)">
</appSettings>

实践;

(1)在VS2010中创建一新的asp.web Application项目中,
(2)在configuration 这设置中选中Configuration mannager,新建一个解决方案配置文件,名为Staging,并输入节点原素。

这里如果你不创建新的Config,你可以使用默认的Web.config.

(3)在Solution Explorer中创建Web.Staging.config 。

这个就是我之前提到的描述文件,在里面写描述通过XML Docuemnt Transform,官方也成 Transform  file.

现在在你的ConnnectStrings中 添加一个ConnectString元素。

<connectionStrings>
  <add name="developmentDB" connectionString="Server=DevBox; Database=development; User Id=<user>; password=<password>" providerName="System.Data.SqlClient" />
</connectionStrings>

其中<user>是代表零时的标记。

(4)应用Transform和 Locator属性,当让你首先要引用XML-Document-Transform命名空间,

<connectionStrings>
  <add name="personalDB" connectionString="Server=DevBox; Database=personal; User Id=admin; password=PersonalPassword"
providerName="System.Data.SqlClient" xdt:Transform="Replace" xdt:Locator="Match(name)" />
</connectionStrings>

之后,你要在你的Solution Explorer上选择并创建一个Package,

再将包重新使用  VS打开:

这样Tranformation engine就会执行,你就可以向上面基础部分说的那些特性一点一点测试。

(5)关闭使用XML-Document-Tranformation engine,你可以在Staging.config中创建一个<UseTransforms >元素


总结(Summarize)


ASP.NET 4.0中这个特性,主要能帮助大家的应用程序中的配置文件能从Debug平缓的转换到发布配置文件,而所以想的要从开发到产品的发布的转化,这只是其中的一部分,总的看这里主要就写一个描述文件,而描述文件如何和目标文件关联的,就是使用的Transform和Locator这两个属性来控制,再通过XML-Document-Tranformation engine来将他们粘合在一起。

Transform和Locator都做下面这些事情:
Transform :

Replacing a node

Inserting a node

Delete a node

Removing Attributes

Setting Attributes

Locator;

Match on value of a node’s attribute

Exact XPath of where to find a node

A condition match to find a node

最后别忘记, 他们是xdt扩展元素: xdt:Transform



参考
www.msdn.com
http://weblogs.asp.net/gunnarpeipman/archive/2009/06/16/visual-studio-2010-web-config-transforms.aspx
http://weblogs.asp.net/gunnarpeipman/archive/2009/06/16/visual-studio-2010-web-config-transforms.aspx


希望大家能有帮助!请多指点。

worksguo
www.cnblogs.com/worksguo

ASP.NET 4.0 新特性--Web.Config Transformation(原创)相关推荐

  1. 精进不休 .NET 4.0 (2) - asp.net 4.0 新特性之url路由

    [索引页] [源码下载] 精进不休 .NET 4.0 (2) - asp.net 4.0 新特性之url路由, 自定义CacheProvider, 新增的表达式<%: expression %& ...

  2. .NET2.0和microsoft新知识体系-ASP.NET 2.0新特性

    ASP.NET技术从1.0版本升级到1.1变化不是很大.然而,从ASP.NET 1.x升级到2.0,却不是件轻而易举的事情.ASP.NET 2.0技术增加了大量方便.实用的新特性.图1-1所示列举了A ...

  3. asp.net 2.0中加密web.config

    可以使用受保护配置来加密 Web 应用程序配置文件(如 Web.config 文件)中的敏感信息(包括用户名和密码.数据库连接字符串和加密密钥).对配置信息进行加密后,即使攻击者获取了对配置文件的访问 ...

  4. asp.net 4.0 新特性(翻译)

    原文地址:http://geekswithblogs.net/ranganh/archive/2009/08/14/whatrsquos-new-in-asp.net-4.0.aspx Visual ...

  5. ASP.NET 2.0新特性视频教程下载

    这里是下载页面 这是Framework 2.0下面新特性的系统视频讲座,英文的,说话讲得很清楚音质不错,英文好的朋友有福了.包含以下这些主题: 数据访问 MasterPage与站点导航 成员与角色 用 ...

  6. asp.net 2.0 中引用Web.config内的连接字符串的方法

    Web.config内容:<appSettings> //<add   key="SocutDataLink"   value="路径"/&g ...

  7. 返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API

    返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API 原文:返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 ...

  8. ASP.NET2.0里的web.config配置接口API(转)

    ASP.NET2.0里的配置接口API ASP.NET2.0里的配置API接口函数允许我们读/写配置文件----包括对web.config和machine.config的读写.您可以读写您自己应用程序 ...

  9. [WCF 4.0新特性] 默认终结点

    很多WCF的初学者是从之前的Web服务上转移过来的,他们非常怀念.asmx Web服务无配置的服务寄宿方式.你只需要在定义Web服务的时候再表示服务操作的方法上应用WebMethodAttribute ...

最新文章

  1. 阿里巴巴开源限流降级神器Sentinel大规模生产级应用实践
  2. 阿里达摩院再造AI抗疫技术:20秒判读CT影像,识别准确率达96%,河南率先启用...
  3. 8.2.1.3 Range Optimization
  4. 必备技能,conda创建python虚拟环境,完美管理项目
  5. 欧拉路径(Euler_Path)和欧拉回路(Euler_Loop)
  6. [uoj24]缩紧优化
  7. java 程序的初始化顺序是怎样的?
  8. LeetCode 346. 数据流中的移动平均值(队列)
  9. java中怎么从键盘读取字符_java键盘读取字符
  10. javaScript 中 call 函数的用法说明
  11. Mac 下配置XAMPP
  12. YIi 数据操作备注
  13. 聊聊 Java 面试的一些坑
  14. Vue:vue组件生命周期
  15. Reacvt-Native 图片下载使用介绍
  16. CSDN个人主页下如何添加微信公众号?
  17. 2016年不可错过的21个深度学习视频、教程和课程
  18. 微信公众号、小程序和企业微信申请流程
  19. odoo使用word中的MERGEFIELD合并域和python包mailmerge来生成word文档
  20. 图像检测与处理技术在汽车牌照中的运用

热门文章

  1. Python - while语句和if语句 的 用法 及 代码
  2. 建立ghost备份后,找不到gho文件
  3. eclipse中动态web项目快捷方式设置
  4. Python_note8 程序设计方法学+Python第三方库安装+os库
  5. 用进化算法来优化SVM的参数C和Gamma——利用SCOOP库进行分布式加速计算
  6. throw和throw ex的区别
  7. 移动端开发框架Zepto.js
  8. UOJ.311.[UNR#2]积劳成疾(DP)
  9. 链表倒置 (不额外开辟另一块空间)
  10. 程序员的自我修养三目标文件里有什么