Tarefa WriteCodeFragment

Gera um arquivo de código temporário do fragmento de código gerado especificado. Não exclui o arquivo.

Parâmetros

A tabela a seguir descreve os parâmetros da tarefa WriteCodeFragment.

Parâmetro Descrição
AssemblyAttributes Parâmetro opcional ITaskItem[].

Descrição dos atributos para gravação. O item valor Include é o nome completo do tipo de atributo, por exemplo, System.AssemblyVersionAttribute.

Cada metadado é o par nome-valor de um parâmetro. Presume-se que os parâmetros sejam do tipo String no MSBuild 17.6 e anteriores, mas no MSBuild 17.7 e posterior, você também pode usar tipos diferentes do String que fazem parte do mscorlib. Por exemplo, você pode usar valores boolianos true e false, inteiros, enumerações e tipos de ponto flutuante. O tipo é inferido automaticamente a partir da sintaxe. Para um tipo que não esteja em mscorlib, especifique o tipo do parâmetro fornecendo valores de metadados no formulário {parameter}_TypeName.

Alguns atributos só permitem argumentos posicionais de construtor. No entanto, você pode usar esses argumentos em qualquer atributo. Para definir atributos de construtor posicionais, use nomes de metadados que se assemelhem a _Parameter1, _Parameter2, e assim por diante. Um índice de parâmetro não pode ser ignorado.

No MSBuild 17.7 ou posterior, você também pode especificar metadados do formulário {parameter}_IsLiteral para instruir a tarefa a interpretar o texto do valor do parâmetro como está, sem colocar aspas (como é feito no caso padrão para valores de cadeia de caracteres).
Language Parâmetro String obrigatório.

Especifica a linguagem do código a ser gerado.

Language pode ser qualquer idioma para o qual um provedor CodeDom esteja disponível, por exemplo, "C#" ou "VisualBasic". O arquivo emitido terá a extensão de nome de arquivo padrão para esse idioma.
OutputDirectory Parâmetro ITaskItem opcional.

Especifica a pasta de destino para o código gerado, geralmente a pasta intermediária.
OutputFile Parâmetro de saída ITaskItem opcional.

Especifica o caminho do arquivo que foi gerado. Se esse parâmetro for definido usando um nome de arquivo, a pasta de destino será anexada ao nome do arquivo. Se for definido usando uma raiz, a pasta de destino será ignorada.

Se esse parâmetro não for definido, o nome do arquivo de saída será a pasta de destino, um nome de arquivo arbitrário e a extensão de nome de arquivo padrão para a linguagem especificada.

Comentários

Além de ter os parâmetros listados acima, essa tarefa herda parâmetros da classe TaskExtension, que herda da classe Task. Para obter uma lista desses parâmetros adicionais e suas descrições, confira Classe base TaskExtension.

Essa tarefa normalmente não é usada diretamente no código do usuário.

Gerar atributos em nível de montagem

No MSBuild 17.7 e posterior, essa tarefa foi atualizada para dar suporte a uma variedade maior de tipos de parâmetros para atributos em nível de assembly. O MSBuild 17.6 e anteriores suportavam apenas String como um tipo de parâmetro para atributos em nível de assembly. Com o MSBuild 17.7 e posteriores, você pode construir qualquer atributo de assembly do .NET, não apenas aqueles cujos parâmetros eram do tipo de cadeia de caracteres, como nas versões anteriores do MSBuild.

Por exemplo, para definir o atributo CLSCompliant(true) em nível de assembly, que usa um parâmetro booliano, você pode usar a seguinte sintaxe:

<ItemGroup>
    <AssemblyAttribute Include="System.CLSCompliantAttribute">
        <_Parameter1>true</_Parameter1>
    </AssemblyAttribute>
</ItemGroup>

O código gerado depende da linguagem de destino. Para o C#, seria o seguinte:

[assembly: System.CLSCompliantAttribute(true)]

Os tipos definidos em mscorlib são inferidos automaticamente, como Booliano no exemplo anterior. Você pode definir metadados do formulário {parameter}_TypeName para especificar tipos que não podem ser inferidos.

<ItemGroup>
    <AssemblyAttribute Include="Microsoft.Owin.OwinStartup">
        <_Parameter1>Microsoft.Examples.Startup</_Parameter1>
        <_Parameter1_TypeName>System.Type</_Parameter1_TypeName>
    </AssemblyAttribute>
</ItemGroup>

O código gerado em C# é o seguinte:

[assembly: Microsoft.Owin.OwinStartup(typeof(Microsoft.Examples.Startup))]

Para valores de parâmetros mais complicados, você pode usar o {parameter}_IsLiteral.

<ItemGroup>
    <AssemblyAttribute Include="NUnit.Framework.Parallelizable">
        <_Parameter1>NUnit.Framework.ParallelScope.Fixtures</_Parameter1>
        <_Parameter1_IsLiteral>true</_Parameter1_IsLiteral>
    </AssemblyAttribute>
</ItemGroup>

O exemplo anterior produz o seguinte atributo de assembly em C#:

[assembly: NUnit.Framework.Parallelizable(NUnit.Framework.ParallelScope.Fixtures)]

Você pode usar qualquer sintaxe que normalmente seria permitida em uma declaração de atributo na linguagem do projeto. Para um parâmetro de matriz, você pode usar um código como o seguinte:

<ItemGroup>
  <AssemblyAttribute Include="TestAttribute">
    <_Parameter1>new int[] { 1, 3, 5 } /* odd numbers */</_Parameter1>
    <_Parameter1_IsLiteral>true</_Parameter1_IsLiteral>
  </AssemblyAttribute>
</ItemGroup>

Quando você usa IsLiteral, a sintaxe é interpretada pelo compilador apropriado e, portanto, é específica da linguagem. Se houver situações em que mais de uma linguagem de programação compartilhe os mesmos arquivos de importação do MSBuild e/ou arquivos de projeto, talvez seja necessário usar a sintaxe condicional para garantir que o código seja compilado com a linguagem específica do projeto relevante.

Observação

A sintaxe descrita nesta seção (_TypeName e _IsLiteral sufixos) não é suportada em F#.

Exemplo

Um caso de uso típico para a WriteCodeFragment tarefa está em um destino que gera um arquivo que define um atributo de nível de assembly e o adiciona à compilação. Com AssemblyAttribute definido, você pode invocar a WriteCodeFragment tarefa como no código a seguir.

<Target Name="AddAssemblyVersion" BeforeTargets="Build">
  <ItemGroup>
     <AssemblyAttribute Include="AssemblyVersion">
       <_Parameter1>1.2.3.4</_Parameter1>
     </AssemblyAttribute>
  </ItemGroup>
  <WriteCodeFragment AssemblyAttributes="@(AssemblyAttribute)"
                     Language="C#"
                     OutputDirectory="$(IntermediateOutputPath)"
                     OutputFile="AssemblyVersion.cs">
    <Output TaskParameter="OutputFile" ItemName="Compile" />
    <Output TaskParameter="OutputFile" ItemName="FileWrites" />
  </WriteCodeFragment>
</Target>

O OutputFile é dado um nome de arquivo específico, se não for especificado, um nome de arquivo é gerado aleatoriamente. Além disso, para adicionar o arquivo gerado à compilação, a lista de Compile itens é fornecida como uma saída. O arquivo também é adicionado à lista de itens, para que seja excluído FileWrites quando o Clean destino for executado.

Confira também