我有一个包含网站项目(以及其他项目类型)的解决方案文件。它使用发布配置文件进行部署,并且我试图将整个内容移至TFS(2015)以自动化构建和部署过程。如上所述here我无法管理构建配置,因为它是一个网站项目,因此无法使用Web.config Transformation feature。
我想执行某种转换,也许是作为构建步骤。我可以手动创建和维护web.release.config文件,但不知道如何手动转换它。是否存在XLST文件以将其转换为Visual Studio之外(例如,cmd构建步骤以调用XSLT处理器)?
附录:转换为Web项目肯定会解决问题,但不是我的解决方案,因为这需要远程承包商参与我们的代码库 - TFS构建级解决方案是我唯一要找的东西。
答案 0 :(得分:0)
正如@MrHinsh在评论中提到的那样,建议创建Web应用程序项目而不是Web站点项目,因为Web站点项目默认情况下没有web.release.config文件,而Web应用程序项目具有。< / p>
要使用变量值替换文件中的标记,可以在构建定义中添加Replace Tokens任务。
答案 1 :(得分:0)
由于我的实际转换相对简单,我开发了这个XSL转换:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes"/>
<xsl:variable name="xformPath">web.Prod.config</xsl:variable>
<xsl:variable name="xform" select="document($xformPath)"></xsl:variable>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template name="output-transform">
<xsl:param name="xformNode" />
<xsl:variable name="key" select="@key" />
<xsl:choose>
<xsl:when test="$xformNode">
<xsl:copy-of select="$xformNode" />
</xsl:when>
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="/configuration/appSettings/add">
<xsl:variable name="key" select="@key" />
<xsl:call-template name="output-transform">
<xsl:with-param name="xformNode" select="$xform/configuration/appSettings/add[@key=$key]" />
</xsl:call-template>
</xsl:template>
<xsl:template match="/configuration/connectionStrings/add">
<xsl:variable name="name" select="@name" />
<xsl:call-template name="output-transform">
<xsl:with-param name="xformNode" select="$xform/configuration/connectionStrings/add[@name=$name]" />
</xsl:call-template>
</xsl:template>
<xsl:template match="/configuration/system.web/customErrors">
<xsl:call-template name="output-transform">
<xsl:with-param name="xformNode" select="$xform/configuration/system.web/customErrors" />
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>
这有一些明显的缺点,
system.web/compilation@debug
更改为false
但我丢失了所有system.web/compilation/assemblies
条目我打算在Visual Studio Build步骤和Copy Files步骤之间的命令行步骤中添加它,并调用msxsl.exe或Saxon的HE转换引擎。