SlowCheetah—Web.config转换语法现可推广到任意XML配置文件


原文发表地址 SlowCheetah – Web.config Transformation Syntax now generalized for any XML configuration file

原文发表时间 2011 8-23 8:49 AM

我去年写了一篇博文叫做如果你用Xcopy那你就错了,里面还包含了一个我在Mix10的讲话,展示如何用Web Deploy部署网站的视频。一个不为人们所知的功能叫做Web.config转换。你一看到就会马上想要一个通用解决方案的。

首先,摘自之前那篇博文:

你可以在web.config上右键,点击“添加配置转换”。你会得到一个web.debug.config和一个web.release.config。如果你喜欢,你也可以创建一个web.whatever.config。只要名称和配置资料一致就可以了。这些文件只是你想做的变更,并不是完全的web.config拷贝。

你可能会想你要用XSLT来转换web.config,他们用起来直觉上是对的,但其实很繁复。

这里有两个转换,一种用的是XSLT,另一种用XML文件转换语句/命名空间。在XSLT中可以有多种方法,但你采用了通用的想法。XSLT是一种广义树转换语言,而这个部署是常见场景特定子集中最优化的。最酷的部分是每个XDT转换是一个.NET插件,所以你可以自己制作。

   1: <?xml version="1.0" ?>
   2: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
   3: version="1.0">
   4: <xsl:template match="@*|node()">
   5: <xsl:copy> 
   6:  
   7: <xsl:apply-templates select="@*|node()"/>
   8: </xsl:copy>
   9: </xsl:template>
  10: <xsl:template match="/configuration/appSettings">
  11: <xsl:copy>
  12: <xsl:apply-templates select="node()|@*"/>
  13: <xsl:element name="add">
  14: <xsl:attribute 
  15: name="key">NewSetting</xsl:attribute>
  16: <xsl:attribute name="value">New 
  17: Setting Value</xsl:attribute>
  18: </xsl:element>
  19: </xsl:copy>
  20: </xsl:template>
  21: </xsl:stylesheet>

或通过部署转换做同样的事:

   1: <configuration 
   2: xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
   3: <appSettings>
   4: <add name="NewSetting" value="New 
   5: Setting Value" xdt:Transform="Insert"/>
   6: </appSettings>
   7: </configuration>

这种配置文件转换其实很有用,是作为通用解决方案的首要功能需求。人们想要转换他们的app.config,或者XML文件作为他们构建的一部分。此外,目前的系统只是将转换作为公共进程的一部分,人们宁可要“F5”上的转换或者构建上的转换。所以,我的团队成员Sayed Ibrahim HashimiChuck England 刚完成一个小小的VsiX,叫做SlowCheetah XML 转换.

在这个截屏中,我创建了一个简单的操控台应用程序,创建了一个基本的app.config,然后右击选择“添加转换”。获取一个app.debug.config和app.release.config。你可以任意创建或命名,比如app.testing.config等等。

clip_image002

举例说,我的操控台应用程序有一个基本的app.config文件:

   1: <?xml version="1.0" encoding="utf-8" ?>
   2: <configuration >
   3: <appSettings>
   4: <add key="appName" value="Something"/>
   5: <add key="url" value="http://hanselman.com/"/>
   6: <add key="email" value="awesome@hanselman.com" 
   7: />
   8: </appSettings>
   9: </configuration>

这里的转换是把我开发时配置的一个值转换成一个调试值(或者测试,实行等等)。你可以为连接字符串,应用密匙,编译设置或XML中任意内容及配置文件来做这个转换。

   1: <?xml version="1.0" encoding="utf-8" ?>
   2: <configuration 
   3: xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
   4: <appSettings>
   5: <add key="appName" value="Demo-debug" 
   6: xdt:Transform="Replace" xdt:Locator="Match(key)"/>
   7: <add key="email" value="debug@contoso.com" 
   8: xdt:Transform="Replace" xdt:Locator="Match(key)"/>
   9: </appSettings>
  10: </configuration>

注意到转换=“替换?”那可以是替换,或者插入等等。有多种选择。ShowCheetah XML 转换Add-In还添加了“预览转换”右键菜单,使这些编写更容易。

最智能的是这些都是实际存在的。所有的功能都安装在%LOCALAPPDATA%\Microsoft\MSBuild\SlowCheetah\v1\,在标准MSBuild.targets文件中存在。你无需插件就可以在构建服务器上安装,只要复制文件或用源代码迁入,将他们与你的项目或MSBuild文件关联。它会像自定义目标一样通过工具添加到你的项目文件中:

   1: <Import 
   2: Project="$(LOCALAPPDATA)\Microsoft\MSBuild\SlowCheetah\v1\Microsoft.Transforms.targets" 
   3: Condition="Exists('$(LOCALAPPDATA)\Microsoft\MSBuild\SlowCheetah\v1\Microsoft.Transforms.targets')" 
   4: />

在创建目标和添加的菜单项目间,你会发现:

· 添加的桌面项目工具创建XDT转换

· 可转换能力

· 基于创建配置的桌面项目的app.config

· 基于创建配置的任何输出文件夹XML文件

· 添加的工具支持预览XDT转换

· 对于web项目你可以轻松的在打包/发布时转换其他XML文件

如果这很有用,而且你在Sayed的博客上或是VSGallery上的SlowCheetah项目网页使用过,那就让Sayed和团队知道你的想法把。

希望你们喜欢!


Comments (0)

Skip to main content