用于 Web 应用程序项目部署的 Web.config 转换语法

简介:
Web.config 文件通常包括根据应用程序的运行环境而必须不同的设置。   例如,在部署 Web.config 文件时,您可能必须更改数据库连接字符串或禁用调试。   对于 Web 应用程序项目,ASP.NET 提供了一些工具,用于自动完成在部署这些项目时更改(转换)Web.config 文件的过程。   对于要部署到的每个环境,您将创建一个转换文件,该文件仅指定原始 Web.config 文件和适用于该环境的已部署 Web.config 文件之间的差异。

转换文件是一个 XML 文件,该文件指定在部署 Web.config 文件时应如何更改该文件。 转换操作通过使用在 XML-Document-Transform 命名空间(映射到 xdt 前缀)中定义的 XML 特性来指定。 XML-Document-Transform 命名空间定义两个特性:Locator 和 Transform Locator 特性指定要以某种方式更改的 Web.config 元素或一组元素。 Transform 特性指定要对 Locator 特性所查找的元素执行哪些操作。

下面的示例演示了转换文件的内容,该转换文件将更改连接字符串并替换 customErrors 元素:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="MyDB"
connectionString="value for the deployed Web.config file"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
<system.web>
<customErrors defaultRedirect="GenericError.htm"
mode="RemoteOnly" xdt:Transform="Replace">
<error statusCode="500" redirect="InternalError.htm"/>
</customErrors>
</system.web>
</configuration>

转换文件的根元素必须在其开始标记中指定 XML-Document-Transform 命名空间,如前面的示例所示。 Locator 和 Transform 元素本身不会在部署的 Web.config 文件中重现。

下面各节提供有关要在转换文件中使用的语法的参考信息。

Locator 特性语法

下面每一节说明一个 Locator 特性的语法。

条件

指定一个 XPath 表达式,该表达式会追加到当前元素的 XPath 表达式。 选择了与组合 XPath 表达式匹配的元素。

语法

Locator="Condition(XPath expression)"

示例

下面的示例演示如何选择其 name 特性值为 oldname 的连接字符串元素,或其值为 oldprovider 的 providerName 特性。 在部署的 Web.config 文件中,所选元素将替换为在转换文件中指定的元素。

<configuration xmlns:xdt="...">
<connectionStrings>
<add name="AWLT" connectionString="newstring"
providerName="newprovider"
xdt:Transform="Replace"
xdt:Locator="Condition(@name='oldname'
or @providerName='oldprovider')" />
</connectionStrings>
</configuration>

作为指定的 Condition 表达式的结果应用于开发 Web.config 文件的有效 XPath 表达式如下所示:

configuration/connectionStrings[@name='AWLT' or @providerName='System.Data.SqlClient']

此表达式是将当前元素 (configuration/connectionStrings) 的隐式 XPath 条件与显式指定的表达式组合起来的结果。

Match

选择针对指定的一个或多个特性具有匹配值的一个或多个元素。 如果指定了多个特性名称,则将仅选择与所有指定特性匹配的元素。

语法

Locator="Match(comma-delimited list of one or more attribute names)"

示例

下面的示例演示如何选择连接字符串 add 元素,该元素在开发 Web.config 文件的 name 特性中具有 AWLT 在部署的 Web.config 文件中,所选元素将替换为在转换文件中指定的 add 元素。

<configuration xmlns:xdt="...">
<connectionStrings>
<add name="AWLT" connectionString="newstring"
providerName="newprovider"
xdt:Transform="Replace"
xdt:Locator="Match(name)" />
</connectionStrings>
</configuration>

Replace

将所选的一个或多个元素替换为在转换文件中指定的元素。 有关如何使用 Replace 关键字的示例,请参见 Locator 特性的示例。

语法

Transform="Replace"

XPath

指定应用于开发 Web.config 文件的绝对 XPath 表达式。 (与 Condition 不同,所指定的表达式不追加到与当前元素对应的隐式 XPath 表达式。)

语法

Locator="XPath(XPath expression)"

示例

下面的示例演示如何选择与前面的 Condition 关键字示例中所选元素相同的元素。

<configuration xmlns:xdt="...">
<connectionStrings>
<add name="AWLT" connectionString="newstring"
providerName="newprovider"
xdt:Transform="Replace"
xdt:Locator="XPath(configuration/connectionStrings[@name='AWLT'
or @providerName='System.Data.SqlClient'])" />
</connectionStrings>
</configuration>
Transform 特性语法

下面每一节说明一个 Transform 特性的语法。

Insert

将转换文件中定义的元素作为所选的一个或多个元素的同级进行添加。 该新元素被添加到任何集合的末尾。

语法

Transform="Insert"

示例

下面的示例演示如何选择开发 Web.config 文件中的所有连接字符串。 在部署的 Web.config 文件中,指定的连接字符串将添加到集合的末尾。

<configuration xmlns:xdt="...">
<connectionStrings>
<add name="AWLT" connectionString="newstring"
providerName="newprovider"
xdt:Transform="Insert" />
</connectionStrings>
</configuration>

InsertBefore

将转换 XML 中定义的元素直接插入到由指定 XPath 表达式选择的元素之前。 该 XPath 表达式必须是一个绝对表达式,因为它作为一个整体应用于开发 Web.config 文件,而不只是追加到当前元素的隐式 XPath 表达式中。

语法

Transform="InsertBefore(XPath expression)"

示例

下面的示例演示如何选择拒绝所有用户访问的 deny 元素,然后在它之前插入为管理员授予访问权限的 allow 元素。

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

InsertAfter

将转换 XML 中定义的元素直接插入到由指定 XPath 表达式选择的元素之后。 该 XPath 表达式必须是一个绝对表达式,因为它作为一个整体应用于开发 Web.config 文件,而不是追加到当前元素的隐式 XPath 表达式中。

语法

Transform="InsertAfter(XPath expression)"

示例

下面的示例演示如何���择为管理员授予访问权限的 allow 元素,然后在它之后插入拒绝指定用户的访问的 deny 元素。

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

Remove

移除选定元素。 如果选择了多个元素,则移除第一个元素。

语法

Transform="Remove"

示例

下面的示例演示如何选择开发 Web.config 文件中的所有连接字符串 add 元素。 在部署的 Web.config 文件中,将仅移除第一个连接字符串元素。

<configuration xmlns:xdt="...">
<connectionStrings>
<add xdt:Transform="Remove" />
</connectionStrings>
</configuration>

RemoveAll

移除选定的一个或多个元素。

语法

Transform="RemoveAll"

示例

下面的示例演示如何选择开发 Web.config 文件中的所有连接字符串。 在部署的 Web.config 文件中,将移除所有元素。

<configuration xmlns:xdt="...">
<connectionStrings>
<add xdt:Transform="RemoveAll" />
</connectionStrings>
</configuration>

RemoveAttributes

从所选元素移除指定的特性。

语法

Transform="RemoveAttributes(comma-delimited list of one or more attribute names)"

示例

下面的示例演示如何选择开发 Web.config 文件中的所有 compilation 元素。 (由于配置文件中只能有一个 compilation 元素,因此不必指定 Locator 特性。)在部署的 Web.config 文件中,将从 compilation 元素移除 debug 和 batch 特性。

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

SetAttributes

将所选元素的特性设置为指定的值。 Replace 转换特性将替换整个元素,包括其所有特性。 相反,SetAttributes 特性使您能够按原样保留元素而只更改所选特性。

语法

Transform="SetAttributes(comma-delimited list of one or more attribute names)"

示例

下面的示例演示如何选择开发 Web.config 文件中的所有 compilation 元素。 (由于配置文件中只能有一个 compilation 元素,因此不必指定 Locator 特性。)在部署的 Web.config 文件中,compilation 元素的 batch 特性的值设置为 false

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

XSLT

将 XSLT 文件应用于所选元素。

语法

Transform="XSLT(file path)"

示例

下面的示例演示如何选择 appSettings 元素并指定在 appSettings.xslt 文件中定义的转换。

<configuration xmlns:xdt="...">
<appSettings
xdt:Transform="XSLT(C:\MyProject\appSettings.xslt)" />
</appSettings>
</configuration>
省略 Locator 特性

Locator 特性是可选的。 如果未指定 Locator 特性,要更改的元素将由为其指定 Transform 特性的元素隐式指定。 在下面的示例中,将替换整个 system.web 元素,因为未指定任何 Locator 特性来指示其他方面。

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.web xdt:Transform="Replace">
<customErrors defaultRedirect="GenericError.htm"
mode="RemoteOnly">
<error statusCode="500" redirect="InternalError.htm"/>
</customErrors>
</system.web>
</configuration>
对独立元素使用 Transform 和 Locator 特性

不必在与 Locator 元素相同的元素中设置 Transform 特性。 可以在父元素上指定 Locator 元素,以选择要使用其子元素的元素。 然后可以在子元素中指定 Transform 特性来将更改应用于子元素。

下面的示例演示如何使用 Locator 特性为指定路径选择 location 元素。 但是,只有所选 location 元素的子元素才能进行转换。

<configuration xmlns:xdt="...">
<location path="C:\MySite\Admin" xdt:Locator="Match(path)">
<system.web>
<pages viewStateEncryptionMode="Always"
xdt:Transform="SetAttributes(viewStateEncryptionMode)" />
</system.web>
</location>
</configuration>

如果在同一元素或子元素中指定 Locator 特性但未指定 Transform 特性,则不会进行任何更改。

说明 说明

父元素上的 Transform 特性会影响子元素,即使没有为子元素指定任何 Transform 也是如此。 例如,如果将特性 xdt:Transform="Replace" 放在 system.web 元素中,则 system.web 元素的所有子元素将替换为转换文件中的内容。





本文转自黄聪博客园博客,原文链接http://www.cnblogs.com/huangcong/archive/2010/11/24/1886420.html,如需转载请自行联系原作者

相关文章
|
10月前
|
JSON 人工智能 前端开发
用markdown语法制作一个好看的网址导航页面(markdown-web-nav)
这是一篇关于创建网址导航页面的工具分享文章。作者介绍了从手动编写HTML代码到开发可视化工具 *markdown-web-nav* 的历程,旨在简化网址管理与导航页面生成的过程。该工具支持新增、编辑和删除网址数据,通过导入/导出JSON文件、实时预览Markdown效果以及一键复制等功能,让用户轻松制作美观的网站导航页面。文章还提供了详细的操作步骤及常见问题解答,如还原数据、获取网站图标链接等,适合不同技术水平的用户使用。
517 28
【Azure 应用服务】Web App Service 中的 应用程序配置(Application Setting) 怎么获取key vault中的值
【Azure 应用服务】Web App Service 中的 应用程序配置(Application Setting) 怎么获取key vault中的值
200 0
|
设计模式 前端开发 数据库
深入理解MVC设计模式:构建高效Web应用程序的基石
【7月更文挑战第4天】在软件工程领域,设计模式是解决常见问题的一系列经过验证的方法。其中,Model-View-Controller(MVC)设计模式自诞生以来,便成为了构建用户界面,特别是Web应用程序的黄金标准。MVC通过将应用程序逻辑分离为三个核心组件,提高了代码的可维护性、可扩展性和重用性。本文将深入探讨MVC设计模式的原理,并通过一个简单的代码示例展示其应用。
502 0
|
弹性计算 算法 安全
视觉智能开放平台产品使用合集之在Web应用和WinForm应用程序中调用API时,出现Web端能够成功调用而WinForm端调用失败,是什么原因
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
161 0
|
前端开发 程序员
【前端web入门第二天】01 html语法实现列表与表格_合并单元格
本文介绍了HTML中的列表与表格的使用方法。列表包括无序列表(`&lt;ul&gt;`嵌套`&lt;li&gt;`)、有序列表(`&lt;ol&gt;`嵌套`&lt;li&gt;`)和定义列表(`&lt;dl&gt;`嵌套`&lt;dt&gt;`和`&lt;dd&gt;`)。
336 20
|
前端开发 程序员 C++
【前端web入门第一天】01 开发环境、HTML基本语法文本标签
本文档详细介绍了HTML文本标签的基础知识。首先指导如何准备开发环境,包括安装VSCode及常用插件;接着全面解析HTML的基本结构与标签语法,涵盖从基本骨架搭建到注释的使用,以及标题、段落、换行和平行线、文本格式化等标签的具体应用,适合初学者循序渐进地掌握HTML。
271 3
|
安全 前端开发 PHP
PHP与现代Web开发:构建高效和可扩展的应用程序
【8月更文挑战第29天】在这篇文章中,我们将深入探讨PHP如何适应现代Web开发的需求。我们将通过实际案例分析,揭示PHP的核心优势,并展示如何利用这些优势来构建高性能、可扩展的Web应用。文章不仅提供理论知识,还包括具体的代码示例,旨在帮助开发者更好地理解和运用PHP解决实际问题。
|
监控 测试技术 持续交付
Web2py 项目部署也太让人头疼了吧!但掌握这些,你就能轻松搞定自动化部署!
【8月更文挑战第31天】在现代软件开发中,高效的项目部署至关重要。针对 Web2py 框架,自动化部署不仅提升开发效率,还减少了人为错误。首先需设置版本控制、服务器环境及配置管理;其次利用 CI/CD 工具(如 Jenkins)实现自动构建、测试与部署;再者采用 Docker 容器化技术确保跨环境一致性;最后部署监控与日志记录工具保障系统稳定性。通过这些步骤,可显著优化 Web2py 项目的部署流程。例如,使用 Fabric 可简化部署脚本编写,实现服务器代码更新、依赖安装及服务重启等操作自动化。
149 2
|
安全 编译器 PHP
PHP 8 的新特性与优化——构建更高效的Web应用程序
PHP 8 是最新的PHP版本,它引入了一系列令人激动的新特性和优化,为开发者提供了更多的工具和功能来构建高效的Web应用程序。本文将介绍PHP 8的一些重要特性,包括 JIT 编译器、新的数据结构、类型系统改进以及错误处理的增强。我们还将探讨如何利用这些新特性和优化,提升Web应用程序的性能和可维护性。
176 27
|
存储 监控 安全
如何构建安全的Web应用程序:全方位指南
【7月更文挑战第28天】构建安全的Web应用程序是一个持续的过程,需要贯穿于整个应用程序的生命周期中。通过规划阶段的安全设计、开发阶段的安全措施实施、测试阶段的漏洞发现与修复以及部署与运维阶段的持续监控与维护,可以显著提高Web应用程序的安全性。希望本文的全方位指南能够为您在构建安全的Web应用程序方面提供有益的参考。