Compartilhar via


Sintaxe de transformação Web.config para implantação de projeto de aplicativo Web

Web. config arquivos normalmente incluem configurações que devem ser diferentes dependendo do que o ambiente do aplicativo está sendo executado no. Por exemplo, talvez você precise alterar um banco de dadosdecadeia de conexão ou desabilitardepuração quando você implantar um arquivo de Web. config. Para projetos deaplicativo Web, ASP.NET fornece ferramentas para automatizam o processo de alteração (transformação) arquivos do Web. config quando eles são implantados. Para cada ambiente que você deseja implantar , você criar um arquivo de transformação que especifica que somente as diferenças entre o arquivo Web. config e o arquivo. config de Webimplantado para esse ambiente.

Um arquivo de transformação é um arquivo XML que especifica como o arquivo Web. config deve ser alterado quando ele for implantado. Ações de transformação são especificadas usando atributos XML que são definidos na XML-Document-Transform namespace, que é mapeado para o xdt prefixo. O XML-Document-Transform namespace define dois atributos: Locator and Transform. O deLocatoratributo Especifica o elemento do Web. config ou um conjunto de elementos que você deseja alterar, de alguma maneira. O Transform atributo Especifica o que você deseja para os elementos que o Locator atributo localiza.

O exemplo a seguir mostra o conteúdo de um arquivo de transformação que altera a cadeia de conexão e substitui a customErrors elemento:

<?xml version="1.0"?>
<configuration xmlns:xdt="https://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>

O elemento raiz de um arquivo de transformação deve especificar o XML-Document-Transformonamespace em sua marca de abertura, conforme mostrado no exemplo anterior. O Locator e Transform próprios elementos não são reproduzidos no implantado Web. config arquivo.

Esta seções a seguir fornecem informações de referência sobre a sintaxe para usar em arquivos de transformação.

Sintaxe de atributo do localizador

Cada uma das seções a seguir explica a sintaxe para uma Locatordeatributo.

Condition

Especifica uma expressão XPath que é acrescentada à expressão do XPath do elemento atual. Elementos que coincidam com a expressão XPath combinada são selecionados.

Syntax

Locator="Condition(XPath expression)"

Example

O exemplo a seguir mostra como selecionar elementos de cadeia de conexão cujo nameo valor doatributo é oldname ou um providerNameatributo cujo valor é oldprovider. No Web. config arquivo implantado, os elementos selecionados são substituídos com o elemento que está especificado no arquivo de transformação.

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

A expressão XPath eficaz que é aplicada para o arquivo do desenvolvimento Web. config como resultado de especificado Condition a expressão é o seguinte:

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

Essa expressão é um resultado de combinar a condição de XPath implícita para o elemento atual (configuration/connectionStrings) com a expressão a ser especificada explicitamente.

Match

Seleciona o elemento ou elementos que tem um valor para o atributo de especificado ou atributos. Se vários nomes de atributo forem especificados, apenas os elementos que correspondam a todos os atributos especificados são selecionados.

Syntax

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

Example

O exemplo a seguir mostra como selecionar a cadeia de conexãoadd elemento que tenha AWLT na namedeatributo no desenvolvimento Web. config arquivo. No Web. config arquivo implantado, o elemento selecionado é substituído com o add elemento que é especificado no arquivo de transformação.

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

XPath

Especifica uma expressão XPath absoluta que é aplicada para o arquivo do desenvolvimento Web. config. (Ao contrário de Condition, a expressão que você especificar não é acrescentada a expressão XPath implícito que corresponde ao elemento atual.)

Syntax

Locator="XPath(XPath expression)"

Example

O exemplo a seguir mostra como selecionar os mesmos elementos que são selecionados pelo exemplo anterior para o Condition palavra-chave.

<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>

Sintaxe de atributo de transformação

Cada uma das seções a seguir explica a sintaxe para uma Transformdeatributo.

Replace

Substitui o elemento ou elementos selecionados com o elemento que está especificado no arquivo de transformação. Para obter um exemplo de como usar o Replaceapalavra-chave, consulte os exemplos para o Locator atributos.

Syntax

Transform="Replace"

Insert

Adiciona o elemento que é definido no arquivo de transformação como um irmão para o elemento ou elementos selecionados. O novo elemento é adicionado no final de qualquer coleção.

Syntax

Transform="Insert"

Example

O exemplo a seguir mostra como selecionar as seqüências de conexão no arquivo desenvolvimento Web. config. No Web. config arquivo implantado, cadeia de conexão especificada é adicionada ao final da coleção.

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

InsertBefore

Insere o elemento que está definido na transformação XML antes do elemento selecionado pela expressão XPath especificada. A expressão XPath deve ser uma expressão absoluta, porque ela é aplicada para o arquivo do desenvolvimento Web. config como um todo; ele não é acrescentado apenas a expressão XPath de implícita do elemento atual.

Syntax

Transform="InsertBefore(XPath expression)"

Example

O exemplo a seguir mostra como selecionar o deny elemento que nega o acesso a todos os usuários e, em seguida, insere um allow elemento antes que concede acesso aos administradores.

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

InsertAfter

Insere o elemento que está definido na transformação XML diretamente após o elemento selecionado pela expressão XPath especificada. A expressão XPath deve ser uma expressão absoluta, porque ela é aplicada para o arquivo do desenvolvimento Web. config como um todo; ele não é acrescentado à expressão XPath de implícita do elemento atual.

Syntax

Transform="InsertAfter(XPath expression)"

Example

O exemplo a seguir mostra como selecionar o allow elemento que concede acesso a administradores e insere um deny elemento depois que nega acesso a um usuáriodo especificado.

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

Remove

Remove o elemento selecionado. Se vários elementos forem selecionados, remove o primeiro elemento.

Syntax

Transform="Remove"

Example

O exemplo a seguir mostra como selecionar todas as cadeia de conexão add elementos no desenvolvimento Web. config arquivo. No Web. config arquivo implantado, somente o primeiro elemento da cadeia de conexão será removido.

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

RemoveAll

Remove o elemento ou elementos selecionados.

Syntax

Transform="RemoveAll"

Example

O exemplo a seguir mostra como selecionar as seqüências de conexão no arquivo desenvolvimento Web. config. No Web. config arquivo implantado, todos os elementos são removidos.

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

RemoveAttributes

Remove especificado a atributos de elementos selecionados.

Syntax

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

Example

O exemplo a seguir mostra como selecionar todos os compilation elementos no desenvolvimento Web. config arquivo. (Pois pode haver apenas um compilation o elemento no arquivo de configuração , você não precisará especificar um Locator atributo.) No Web. config arquivo implantado, o debug e batch atributos são removidos da compilation elemento.

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

SetAttributes

Define os atributos de elementos selecionados para os valores especificados. O Replace de transformação atributo substitui um elemento inteiro, incluindo todos os atributos. Em contraste, o SetAttributes atributo permite que você deixe o elemento como está, mas alterar atributos selecionados.

Syntax

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

Example

O exemplo a seguir mostra como selecionar todos os compilation elementos no desenvolvimento Web. config arquivo. (Pois pode haver apenas um compilation o elemento no arquivo de configuração , você não precisará especificar um Locator atributo.) No implantado Web. config arquivo, o valor da compilation do elemento batch atributo está definido como false.

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

Omitindo os Atributosdo localizador

Locatoratributos são opcionais. Se você não especificar um Locator atributo, o elemento a ser alterada está implicitamente especificada pelo elemento que o Transform atributo é especificado de loop for No exemplo a seguir, todo o system.web elemento é substituído porque nenhum Locator atributo é especificado para indicar o contrário.

<?xml version="1.0"?>
<configuration xmlns:xdt="https://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>

Usando a transformação e o localizador de Atributos em elementos separados

A Transformnão tematributo a ser definida no mesmo elemento como um Locator elemento. Você pode especificar um Locator o elemento em um elemento pai para selecionar elementos cujos elementos filho que você deseja trabalhar. Você pode especificar um Transformdeatributo em um elemento filho na ordem para aplicar uma alteração para os filhos.

O exemplo a seguir mostra como usar o Locatordeatributo para selecionar location elementos para o caminho de especificado. No entanto, apenas os elementos que são filhos do selecionado location elementos são transformados.

<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>

Se você especificar um Locator atributo , mas você não especifica um Transform atributo no mesmo elemento ou em um elemento filho , nenhuma alteração será feita.

Dica

A Transformdeatributo em um elemento pai pode afetar o filho elementos mesmo se nenhum Transform é especificado para eles.Por exemplo, se você colocar o atributo xdt:Transform="Replace" na system.web elemento, todos os elementos que são filhos da system.web elemento são substituídos com o conteúdo do arquivo de transformação.

Consulte também

Conceitos

Visão geral sobre implantação de projetos de aplicativo da Web do ASP.NET

Passo a passo: Implantando um projeto de aplicativo Web usando um pacote de implantação da Web (parte 1 de 4)