O processo de transformação de modelo de texto
O processo de transformação do modelo de texto usa um arquivo de modelo de texto como a entrada e gera um novo arquivo de texto como a saída. Por exemplo, você pode usar modelos de texto para gerar código Visual Basic ou C# ou gerar um relatório HTML.
Três componentes participam desse processo: o mecanismo, o host e os processadores de diretiva. O mecanismo controla o processo. Ele interage com o host e o processador de diretiva para produzir o arquivo de saída. O host fornece qualquer interação com o ambiente, como localizar arquivos e assemblies. O processador de diretiva adiciona funcionalidade, como ler dados de um arquivo XML ou de um banco de dados.
O processo de transformação do modelo de texto é executado em duas etapas. Primeiro, o mecanismo cria uma classe temporária, que é conhecida como a classe de transformação gerada. Essa classe contém o código gerado pelas diretivas e blocos de controle. Depois disso, o mecanismo compila e executa a classe de transformação gerada para produzir o arquivo de saída.
Componentes
Componente | Descrição | Personalizável (Sim/Não) |
---|---|---|
Mecanismo | O componente do mecanismo controla o processo de transformação do modelo de texto | Não. |
Host | O host é a interface entre o mecanismo e o ambiente do usuário. O Visual Studio é um host do processo de transformação de texto. | Sim. Você pode gravar um host personalizado. |
Processadores de diretivas | Processadores de diretivas são classes que lidam com diretivas em modelos de texto. Você pode usar diretivas para fornecer dados a um modelo de texto de uma fonte de entrada. | Sim. Você pode escrever processadores de diretriz personalizados |
O mecanismo
O mecanismo recebe o modelo como uma cadeia de caracteres do host, que manipula todos os arquivos usados no processo de transformação. Em seguida, o mecanismo solicita que o host localize todos os processadores de diretiva personalizados e outros aspectos do ambiente. Em seguida, o mecanismo compila e executa a classe de transformação gerada. O mecanismo retorna o texto gerado para o host, que normalmente salva o texto em um arquivo.
O host
O host é responsável por qualquer coisa relacionada ao ambiente fora do processo de transformação, incluindo o seguinte:
Localizar arquivos de texto e binários solicitados pelo mecanismo ou por um processador de diretiva. O host pode pesquisar em diretórios e no cache de assembly global para localizar assemblies. O host pode localizar o código do processador de diretiva personalizada para o mecanismo. O host também pode localizar e ler arquivos de texto e retornar seu conteúdo como cadeias de caracteres.
Fornecer listas de assemblies padrão e namespaces que são usados pelo mecanismo para criar a classe de transformação gerada.
Fornecer o domínio do aplicativo que é usado quando o mecanismo compila e executa a classe de transformação gerada. Um domínio de aplicativo separado é usado para proteger o aplicativo host contra erros no código do modelo.
Gravar o arquivo de saída gerado.
Definir a extensão padrão para o arquivo de saída gerado.
Tratar erros de transformação do modelo de texto. Por exemplo, o host pode exibir os erros na interface do usuário ou gravá-los em um arquivo. (No Visual Studio, os erros são exibidos na janela Mensagem de Erro.)
Fornecer um valor de parâmetro necessário se um usuário tiver chamado uma diretiva sem fornecer um valor. O processador de diretiva pode especificar o nome da diretiva e o parâmetro e solicitar que o host forneça um valor padrão, se houver.
Diretivas e processadores de diretivas
Uma diretiva é um comando no modelo de texto. Ele fornece parâmetros para o processo de geração. Normalmente, as diretivas definem a origem e o tipo do modelo ou outra entrada e a extensão de nome do arquivo de saída.
Um processador de diretiva pode processar uma ou mais diretivas. Ao transformar um modelo, você deve ter instalado um processador de diretiva que possa lidar com as diretivas em seu modelo.
As diretivas funcionam adicionando código à classe de transformação gerada. Você chama diretivas de um modelo de texto e o mecanismo processa todas as chamadas de diretiva quando ele cria a classe de transformação gerada. Depois de chamar uma diretiva com sucesso, o resto do código escrito no modelo de texto poderá confiar na funcionalidade que a diretiva fornece. Por exemplo, você pode fazer a seguinte chamada para a diretiva import
em seu modelo:
<#@ import namespace="System.Text" #>
O processador de diretiva padrão converte isso em uma instrução using
na classe de transformação gerada. Em seguida, você pode usar a classe StringBuilder
no restante do código de modelo sem qualificá-la como System.Text.StringBuilder
.