WriteCodeFragment (tâche)

Génère un fichier de code temporaire à partir du fragment de code généré spécifié. Ne supprime pas le fichier.

Paramètres

Le tableau ci-dessous décrit les paramètres de la tâche WriteCodeFragment .

Paramètre Description
AssemblyAttributes Paramètre ITaskItem[] facultatif.

Description des attributs à écrire. La valeur Include de l’élément correspond au nom de type complet de l’attribut, par exemple, System.AssemblyVersionAttribute.

Chaque métadonnée correspond à la paire nom-valeur d’un paramètre. Les paramètres sont supposés être de type String dans MSBuild 17.6 et versions antérieures, mais dans MSBuild 17.7 et versions ultérieures, vous pouvez également utiliser d’autres types que String qui font partie de mscorlib. Par exemple, vous pouvez utiliser des valeurs booléennes true et false, des entiers, des énumérations et des types à virgule flottante. Le type est automatiquement déduit de la syntaxe. Pour un type qui n’est pas dans mscorlib, spécifiez le type du paramètre en fournissant des valeurs de métadonnées dans le formulaire {parameter}_TypeName.

Certains attributs autorisent uniquement les arguments de constructeur. Toutefois, vous pouvez utiliser ces arguments dans n’importe quel attribut. Pour définir des attributs de constructeur positionnel, utilisez les noms de métadonnées qui ressemblent à _Parameter1, _Parameter2, etc. Vous ne pouvez pas ignorer un index de paramètre.

Dans MSBuild 17.7 ou version ultérieure, vous pouvez également spécifier les métadonnées du formulaire {parameter}_IsLiteral pour indiquer à la tâche d’interpréter le texte de la valeur de paramètre tel quel, sans l’entourer de guillemets (comme dans le cas par défaut pour les valeurs de chaîne).
Language Paramètre String requis.

Spécifie le langage du code à générer.

Language peut être n’importe quel langage disposant d’un fournisseur CodeDom, par exemple, « C# » ou « VisualBasic ». Le fichier émis porte l’extension de nom de fichier par défaut du langage en question.
OutputDirectory Paramètre ITaskItem facultatif.

Spécifie le dossier de destination du code généré, en général le dossier intermédiaire.
OutputFile Paramètre de sortie ITaskItem facultatif.

Spécifie le chemin du fichier qui a été généré. Si ce paramètre est défini à l’aide d’un nom de fichier, le dossier de destination est ajouté devant le nom de fichier. S’il est défini à l’aide d’une racine, le dossier de destination est ignoré.

Si ce paramètre n’est pas défini, le nom du fichier de sortie est constitué du nom du dossier de destination, d’un nom de fichier arbitraire et de l’extension de nom de fichier par défaut du langage spécifié.

Remarques

En plus des paramètres répertoriés dans le tableau, cette tâche comprend des paramètres qu’elle hérite de la classe TaskExtension, qui elle-même hérite de la classe Task. Pour obtenir la liste de ces paramètres supplémentaires et leurs descriptions, consultez Classe de base TaskExtension.

Cette tâche n’est normalement pas utilisée directement dans le code utilisateur.

Générer des attributs au niveau de l’assembly

Dans MSBuild 17.7 et versions ultérieures, cette tâche a été mise à jour pour prendre en charge une plus grande variété de types de paramètres pour les attributs au niveau de l’assembly. MSBuild 17.6 et versions antérieures prennent en charge uniquement String en tant que type de paramètre pour les attributs au niveau de l’assembly. Avec MSBuild 17.7 et versions ultérieures, vous pouvez construire n’importe quel attribut d’assembly .NET, pas seulement ceux dont les paramètres étaient des types de chaînes, comme dans les versions antérieures de MSBuild.

Par exemple, pour définir l’attribut au niveau de l’assembly CLSCompliant(true), qui utilise un paramètre booléen, vous pouvez utiliser la syntaxe suivante :

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

Le code généré dépend de la langue cible. Pour C#, il se présente comme suit :

[assembly: System.CLSCompliantAttribute(true)]

Les types définis dans mscorlib sont automatiquement déduits, tels que les booléens dans l’exemple précédent. Vous pouvez définir des métadonnées du formulaire {parameter}_TypeName pour spécifier les types qui ne peuvent pas être déduits.

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

Le code généré en C# est le suivant :

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

Pour les valeurs de paramètres plus complexes, vous pouvez utiliser {parameter}_IsLiteral.

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

L’exemple précédent produit l’attribut d’assembly suivant en C# :

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

Vous pouvez utiliser n’importe quelle syntaxe normalement autorisée dans une déclaration d’attribut dans le langage du projet. Pour un paramètre de tableau, vous pouvez utiliser du code comme suit :

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

Lorsque vous utilisez IsLiteral, la syntaxe est interprétée par le compilateur approprié et est donc propre au langage. Si vous avez des situations où plusieurs langues partagent les mêmes fichiers d’importation MSBuild et/ou fichiers projet, vous devrez peut-être utiliser la syntaxe conditionnelle pour vous assurer que le code est compilé avec le langage spécifique au projet approprié.

Remarque

La syntaxe décrite dans cette section (_TypeName et _IsLiteral suffixes) n’est pas prise en charge dans F#.

Exemple

Un cas d’usage classique pour la tâche se trouve dans une cible qui génère un fichier qui définit un attribut au niveau de l’assembly WriteCodeFragment et l’ajoute à la build. Avec AssemblyAttribute défini, vous pouvez appeler la WriteCodeFragment tâche comme dans le code suivant.

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

Il OutputFile reçoit un nom de fichier spécifique ; s’il n’est pas spécifié, un nom de fichier est généré de façon aléatoire. En outre, pour ajouter le fichier généré à la build, la Compile liste d’éléments est donnée en tant que sortie. Le fichier est également ajouté à la FileWrites liste d’éléments afin qu’il soit supprimé lors de l’exécution de la Clean cible.

Voir aussi