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 元素:
<a></a>
<a>複制</a>
轉換檔案的根元素必須在其開始标記中指定 XML-Document-Transform 命名空間,如前面的示例所示。 Locator 和 Transform 元素本身不會在部署的 Web.config 檔案中重制。
下面各節提供有關要在轉換檔案中使用的文法的參考資訊。
Locator 特性文法
下面每一節說明一個 Locator 特性的文法。
指定一個 XPath 表達式,該表達式會追加到目前元素的 XPath 表達式。 選擇了與組合 XPath 表達式比對的元素。
下面的示例示範如何選擇其 name 特性值為 oldname 的連接配接字元串元素,或其值為 oldprovider 的 providerName 特性。 在部署的 Web.config 檔案中,所選元素将替換為在轉換檔案中指定的元素。
作為指定的 Condition 表達式的結果應用于開發 Web.config 檔案的有效 XPath 表達式如下所示:
configuration/connectionStrings[@name='AWLT' or @providerName='System.Data.SqlClient']
此表達式是将目前元素 (configuration/connectionStrings) 的隐式 XPath 條件與顯式指定的表達式組合起來的結果。
選擇針對指定的一個或多個特性具有比對值的一個或多個元素。 如果指定了多個特性名稱,則将僅選擇與所有指定特性比對的元素。
下面的示例示範如何選擇連接配接字元串 add 元素,該元素在開發 Web.config 檔案的 name 特性中具有 AWLT。 在部署的 Web.config 檔案中,所選元素将替換為在轉換檔案中指定的 add 元素。
将所選的一個或多個元素替換為在轉換檔案中指定的元素。 有關如何使用 Replace 關鍵字的示例,請參見 Locator 特性的示例。
指定應用于開發 Web.config 檔案的絕對 XPath 表達式。 (與 Condition 不同,所指定的表達式不追加到與目前元素對應的隐式 XPath 表達式。)
下面的示例示範如何選擇與前面的 Condition 關鍵字示例中所選元素相同的元素。
Transform 特性文法
下面每一節說明一個 Transform 特性的文法。
将轉換檔案中定義的元素作為所選的一個或多個元素的同級進行添加。 該新元素被添加到任何集合的末尾。
下面的示例示範如何選擇開發 Web.config 檔案中的所有連接配接字元串。 在部署的 Web.config 檔案中,指定的連接配接字元串将添加到集合的末尾。
将轉換 XML 中定義的元素直接插入到由指定 XPath 表達式選擇的元素之前。 該 XPath 表達式必須是一個絕對表達式,因為它作為一個整體應用于開發 Web.config 檔案,而不隻是追加到目前元素的隐式 XPath 表達式中。
下面的示例示範如何選擇拒絕所有使用者通路的 deny 元素,然後在它之前插入為管理者授予通路權限的 allow 元素。
将轉換 XML 中定義的元素直接插入到由指定 XPath 表達式選擇的元素之後。 該 XPath 表達式必須是一個絕對表達式,因為它作為一個整體應用于開發 Web.config 檔案,而不是追加到目前元素的隐式 XPath 表達式中。
下面的示例示範如何���擇為管理者授予通路權限的 allow 元素,然後在它之後插入拒絕指定使用者的通路的 deny 元素。
移除標明元素。 如果選擇了多個元素,則移除第一個元素。
下面的示例示範如何選擇開發 Web.config 檔案中的所有連接配接字元串 add 元素。 在部署的 Web.config 檔案中,将僅移除第一個連接配接字元串元素。
移除標明的一個或多個元素。
下面的示例示範如何選擇開發 Web.config 檔案中的所有連接配接字元串。 在部署的 Web.config 檔案中,将移除所有元素。
從所選元素移除指定的特性。
下面的示例示範如何選擇開發 Web.config 檔案中的所有 compilation 元素。 (由于配置檔案中隻能有一個 compilation 元素,是以不必指定 Locator 特性。)在部署的 Web.config 檔案中,将從 compilation 元素移除 debug 和 batch 特性。
将所選元素的特性設定為指定的值。 Replace 轉換特性将替換整個元素,包括其所有特性。 相反,SetAttributes 特性使您能夠按原樣保留元素而隻更改所選特性。
下面的示例示範如何選擇開發 Web.config 檔案中的所有 compilation 元素。 (由于配置檔案中隻能有一個 compilation 元素,是以不必指定 Locator 特性。)在部署的 Web.config 檔案中,compilation 元素的 batch 特性的值設定為 false。
将 XSLT 檔案應用于所選元素。
下面的示例示範如何選擇 appSettings 元素并指定在 appSettings.xslt 檔案中定義的轉換。
省略 Locator 特性
Locator 特性是可選的。 如果未指定 Locator 特性,要更改的元素将由為其指定 Transform 特性的元素隐式指定。 在下面的示例中,将替換整個 system.web 元素,因為未指定任何 Locator 特性來訓示其他方面。
對獨立元素使用 Transform 和 Locator 特性
不必在與 Locator 元素相同的元素中設定 Transform 特性。 可以在父元素上指定 Locator 元素,以選擇要使用其子元素的元素。 然後可以在子元素中指定 Transform 特性來将更改應用于子元素。
下面的示例示範如何使用 Locator 特性為指定路徑選擇 location 元素。 但是,隻有所選 location 元素的子元素才能進行轉換。
如果在同一進制素或子元素中指定 Locator 特性但未指定 Transform 特性,則不會進行任何更改。
說明
父元素上的 Transform 特性會影響子元素,即使沒有為子元素指定任何 Transform 也是如此。 例如,如果将特性 xdt:Transform="Replace" 放在 system.web 元素中,則 system.web 元素的所有子元素将替換為轉換檔案中的内容。
本文轉自黃聰部落格園部落格,原文連結http://www.cnblogs.com/huangcong/archive/2010/11/24/1886420.html,如需轉載請自行聯系原作者