Geração de código em um processo de compilação
Você pode chamar a transformação de texto como parte do processo de compilação de um Visual Studio solução. Você pode usar isso para garantir que os arquivos gerados a partir dos modelos sejam atualizados antes que eles são compilados. Isso lhe permite evitar uma situação na qual o usuário esqueceu de clique Transformar todos os modelos de antes de compilar o projeto ou verificar no código. Transformação de texto, as tarefas podem ser executadas por Visual Studio ou MSBuild e em um servidor de compilação.
Incluindo tarefas de transformação de texto em arquivos de projeto
Instalar o SDK de modelagem e visualização
Para ativar tarefas de compilação no computador de desenvolvimento, instale o SDK de modelagem e de visualização de Visual Studio.
Para ativar tarefas de compilação em um servidor de compilação, consulte Transformação de texto em um servidor de compilação.
Edite o arquivo de projeto
Para chamar a transformação de texto, você precisa editar o arquivo que define o seu projeto. Essas propriedades não podem ser editadas no editor de propriedades do projeto. Portanto, você deve fechar o projeto e editá-lo como um arquivo de texto.
Para editar o texto do arquivo de projeto
No Solution Explorer, clique com o botão direito do projeto e clique em Unload Project.
Clique novamente com o botão direito do projeto e clique em Editar projeto.
O texto do arquivo do projeto aparece no editor XML.
Para reabrir o projeto quando terminar de editar
Feche o editor de XML.
No Solution Explorer, clique com o botão direito do projeto e clique em Reload Project.
Importar os destinos de transformação de texto
As tarefas de criação de transformação de texto são definidas em um único arquivo. Você deve importá-lo após os destinos padrão de C# ou Visual Basic.
Para importar os destinos de transformação de texto
Procure o arquivo uma linha semelhante a uma das seguintes linhas:
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- ou -
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
Após essa linha, insira a importação de modelagem de texto:
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets" />
Definir propriedades de controle como a compilação é executada.
Insira o texto a seguir no arquivo de projeto. Consulte as seções a seguir para outras propriedades que podem ser inseridas neste grupo de propriedade.
<PropertyGroup>
<TransformOnBuild>true</TransformOnBuild>
<!-- Other properties can be inserted here -->
</PropertyGroup>
TransformOnBuildfaz com que todos os modelos do projeto a ser executado quando você constrói o projeto.
Invocar a transformação
Transformando todos os modelos em uma compilação de projeto
Se você incluir a propriedade a seguir no arquivo de projeto, todos os modelos de texto no projeto serão executados sempre que o projeto é construído, sujeito ao recurso de compilação incremental.
<TransformOnBuild>true</TransformOnBuild>
Você pode chamar transforma ou pressionando F5 no Visual Studio, ou usando o MSBuild. Por exemplo:
msbuild myproject.csproj
Se você omitir TransformOnBuild ou em conjunto para modelos falsos, não será transformado como parte automática da compilação do projeto.
Adicionando caminhos de referência
Você pode adicionar ao conjunto de caminhos em que o host procura em assemblies referenciados nos modelos. Por exemplo:
<ItemGroup>
<!-- Add VS\...\PublicAssemblies to the list of places
to look for assemblies used by templates. -->
<T4ReferencePath Include="$(VsIdePath)PublicAssemblies\" />
</ItemGroup>
Transformando modelos específicos
Você pode transformar os arquivos especificados, chamando o Transform de tarefas com o msbuild utilitário. Esta tarefa não depende da TransformOnBuild propriedade e ele não compila os arquivos de projeto. Você deve importar o arquivo de destinos de modelagem de texto conforme descrito na seção anterior.
Por exemplo, para transformar um arquivo específico:
msbuild myproj.proj /t:Transform /p:TransformFile=MyTemplate.tt
Você também pode usar caracteres curinga na TransformFile parâmetro. Por exemplo, este comando transforma todos os arquivos de .tt sob a pasta GeneratedCode:
msbuild dsl.csproj /t:Transform /p:TransformFile="GeneratedCode\**\*.tt"
Incremental Build
Por padrão, o Gerenciador de compilação tenta evitar a execução de um modelo se seu arquivo de saída está atualizado. Para fazer isso, ele monitora o sistema de arquivos para ver quais arquivos são lidos pelo código de modelo. Em ocasiões subseqüentes, ele compara as datas de modificação desses arquivos com a data do arquivo de saída. Ele executa o modelo, se o arquivo de entrada foi modificado mais recentemente que o arquivo de saída. O modelo também é executado se não houver nenhuma informação sobre as execuções anteriores deste modelo.
O resultado é que o arquivo de saída será regenerado se for mais antiga do que qualquer um dos seguintes arquivos:
O arquivo de modelo de texto
Arquivos que são especificadas na <#@include#> diretivas
Arquivos que são lidos pelo código no modelo
Arquivos incluídos ou lido por um processador de diretriz usado no modelo
Se você desejar certificar-se de que todos os modelos são executados em cada compilação, insira esta propriedade:
<TransformOutOfDateOnly>false</TransformOutOfDateOnly>
Controle de origem
Não há nenhuma integração interna específica com um sistema de controle de origem. No entanto, você pode adicionar suas próprias extensões, por exemplo, para fazer check-out e check-in de um arquivo gerado.
Por padrão, a tarefa de transformação de texto evita sobrescrever um arquivo que está marcado como leitura somente, e quando esse arquivo for encontrado, um erro é registrado na Visual Studio a lista de erros e a tarefa falhar.
Para especificar que arquivos somente leitura devem ser substituídos, insira esta propriedade:
<OverwriteReadOnlyOuputFiles>true</OverwriteReadOnlyOuputFiles>
A menos que você personaliza a etapa de pós-processamento, um aviso será registrado na lista de erros quando um arquivo é substituído.
Personalizando o processo de compilação
Você pode personalizar o processo de compilação, por exemplo, fazer check-out de arquivos que tenham sido substituídos. São fornecidos dois pontos de personalização que são chamados de antes e após a transformação.
Para definir esses pontos, defina as propriedades $(BeforeTransform) e $(AfterTransform).
Por exemplo:
<PropertyGroup>
<BeforeTransform>CustomPreTransform</BeforeTransform>
<AfterTransform>CustomPostTransform;$(AfterTransform)</AfterTransform>
</PropertyGroup>
<Target Name="CustomPreTransform">
<Message Text="In CustomPreTransform..." Importance="High" />
</Target>
<Target Name="CustomPostTransform">
<Message Text="In CustomPostTransform..." Importance="High" />
</Target>
Em AfterTransform, você pode consultar as listas a seguir:
GeneratedFiles - uma lista de arquivos gravados pelo processo. Para os arquivos que sobrescreveu arquivos existentes de somente leitura, %(GeneratedFiles.ReadOnlyFileOverwritten) será true. Esses arquivos podem ser verificados fora de controle de origem.
NonGeneratedFiles - uma lista de arquivos somente leitura que não foram substituídos.
Usando estas listas, você pode, por exemplo, confira arquivos substituídos.
Transformação de texto em um servidor de compilação
Se o seu servidor de compilação é executada em um computador no qual Visual Studio não é instalado, você deve copiar os arquivos a seguir para o computador de construção de um computador no qual SDK do Visual Studio está instalado:
\Arquivos de Programas\Microsoft Visual Studio SDK\VisualStudioIntegration\Common\Assemblies\v4.0\ de 2010
Microsoft.VisualStudio.TextTemplating.10.0.dll
Microsoft.VisualStudio.TextTemplating.interfaces.10.0.dll
Microsoft.VisualStudio.TextTemplating.VSHost.10.0.dll
\Program Files\MSBuild\Microsoft\VisualStudio\TextTemplating\v10.0\
- Microsoft.VisualStudio.TextTemplating.SDK.host.10.0.dll
\Arquivos de Programas\Microsoft 10.0\Common7\IDE\PublicAssemblies\ de Visual Studio
- Microsoft.VisualStudio.TextTemplating.Modeling.10.0.dll
Para obter mais informações, consulte Criar e trabalhar com um controlador de compilação.