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="https://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="https://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 Hashimi 和Chuck England 刚完成一个小小的VsiX,叫做SlowCheetah XML 转换.
在这个截屏中,我创建了一个简单的操控台应用程序,创建了一个基本的app.config,然后右击选择“添加转换”。获取一个app.debug.config和app.release.config。你可以任意创建或命名,比如app.testing.config等等。
举例说,我的操控台应用程序有一个基本的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="https://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="https://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和团队知道你的想法把。
希望你们喜欢!