热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ASP.NET4.0新特性Web.ConfigTransformation(原创)

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


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&#61;"http://schemas.microsoft.com/XML-Document-Transform">


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

1 &#xff1a;locator属性

下面有个表&#xff0c;来详细列举locator的语法

&#xff08;1&#xff09;Match;

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

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


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

&#xff08;2&#xff09;Condition
基于XPath,在Locator中应用有逻辑性的判断表达式。

<connectionStrings>
  
<add name&#61;"Northwind" 
    connectionString
&#61;"connection string detail" 
    providerName
&#61;"System.Data.SqlClient" 
    xdt:Transform
&#61;"Replace" 
    xdt:Locator
&#61;"Condition(&#64;name&#61;’Northwind or &#64;providerName&#61;&#39; System.Data.SqlClient&#39;)" />
connectionStrings>


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

&#xff08;3&#xff09;XPath
这个就是直接写XPath,http://www.w3.org/TR/xpath,这里是XPath的标准

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


这里你会发现&#xff0c;这里可以写一些列的表达式。

2&#xff1a; Transform 属性

&#xff08;1&#xff09; Replace
表示所有匹配的节点都是替换

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


其实这里描述文件时web.release.config&#xff0c;将要替换的文件时Web.config .

(2) Remove

删除第一匹配的元素。

<assemblies xdt:Transform&#61;"Remove">
assemblies>

 

(3)RemoveAll

删除所有匹配的元素

 

<connectionStrings> 
  
<add xdt:Transform&#61;"RemoveAll"/>
connectionStrings>


&#xff08;4&#xff09;Insert

插入从父节点中插入&#xff0c;&#xff08;authorization中插入&#xff09;

 

<authorization>
  
<deny users&#61;"*" xdt:Transform&#61;"Insert"/>
authorization>

 
&#xff08;5&#xff09;SetAttributes

直接设置Attributes

<compilation 
    
batch&#61;"false"
    xdt:Transform
&#61;"SetAttributes(batch)">
compilation>


(6)RemoveAttributes
删除出Attributes

<compilation xdt:Transform&#61;"RemoveAttributes(debug,batch)">
compilation>

 

 

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

<authorization>
  
<deny users&#61;"AName" xdt:Transform&#61;"InsertAfter(/configuration/system.web/authorization/ allow[&#64;roles&#61;&#39;Admins&#39;]"/>
authorization>

&#xff08;8&#xff09;InsertBefore (XPath)
通过匹配 XPath的表达式的&#xff0c;找到节点&#xff0c;并子节点前面插入 XML

 


<authorization>
  
<allow roles&#61;" Admins" xdt:Transform&#61;"InsertBefore(/configuration/system.web/authorization/ deny[&#64;users&#61;&#39;*&#39;])" />
authorization>


&#xff08;9&#xff09;XSLT (filePath)

可以在外部定义 XSLT文件&#xff0c;来替换Web.cofig文件。

<appSettings xdt:Transform&#61;"XSLT(V:\MyProject\appSettings.xslt)">
appSettings>

 

 

实践;

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



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

&#xff08;3&#xff09;在Solution Explorer中创建Web.Staging.config 。




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

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

 

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

其中是代表零时的标记。


&#xff08;4&#xff09;应用Transform和 Locator属性&#xff0c;当让你首先要引用XML-Document-Transform命名空间&#xff0c;

 

 

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


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




再将包重新使用  VS打开&#xff1a;





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

&#xff08;5&#xff09;关闭使用XML-Document-Tranformation engine,你可以在Staging.config中创建一个元素

 


 

总结&#xff08;Summarize&#xff09;

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

Transform和Locator都做下面这些事情&#xff1a;
Transform &#xff1a;

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扩展元素&#xff1a; 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



希望大家能有帮助&#xff01;请多指点。

worksguo
www.cnblogs.com/worksguo



推荐阅读
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有