WriteCodeFragment-Aufgabe

Generiert eine temporäre Codedatei aus dem angegebenen generierten Codefragment. Die Datei wird nicht gelöscht.

Parameter

In der folgenden Tabelle werden die Parameter der WriteCodeFragment -Aufgabe beschrieben.

Parameter Beschreibung
AssemblyAttributes Optionaler ITaskItem[]-Parameter

Beschreibung der Attribute, die geschrieben werden sollen. Der Wert des Elements „Include“ ist der vollständige Typname des Attributs, z.B. „System.AssemblyVersionAttribute“.

Jeder Metadatentyp stellt das Name/Wert-Paar eines Parameters dar. Es wird davon ausgegangen, dass Parameter in MSBuild 17.6 und früher vom Typ „String“ sind. In MSBuild 17.7 und höher können Sie aber auch andere Typen als „String“ verwenden, die Teil von „mscorlib“ sind. Sie können beispielsweise die booleschen Werte „true“ und „false“, ganze Zahlen, Enumerationen und Gleitkommatypen verwenden. Der Typ wird automatisch aus der Syntax abgeleitet. Geben Sie für einen Typ, der nicht in „mscorlib“ ist, den Typ für den Parameter an, indem Sie Metadatenwerte der Form „{parameter}_TypeName“ angeben.

Einige Attribute lassen nur positionelle Konstruktorargumente zu. Sie können solche Argumente allerdings in jedem Attribut verwenden. Um positionelle Konstruktorattribute festzulegen, verwenden Sie Metadatennamen ähnlich wie „_Parameter1“, „_Parameter2“ usw. Ein Parameterindex kann nicht übersprungen werden.

In MSBuild 17.7 oder höher können Sie auch Metadaten der Form „{parameter}_IsLiteral“ angeben, um die Aufgabe anzuweisen, den Parameterwerttext unverändert zu interpretieren, ohne umschließende Anführungszeichen zu verwenden (wie standardmäßig für Zeichenfolgenwerte).
Language Erforderlicher String-Parameter.

Gibt die Programmiersprache des zu generierenden Codes an.

Language kann jede Sprache sein, für die ein CodeDom-Anbieter verfügbar ist, z. B. „C#“ oder „VisualBasic“. Die ausgegebene Datei verfügt dann über das standardmäßige Suffix für diese Sprache.
OutputDirectory Optionaler ITaskItem-Parameter.

Gibt den Zielordner für den generierten Code an. In der Regel ist dies der Zwischenordner.
OutputFile Optionaler ITaskItem-Ausgabeparameter.

Gibt den Pfad der Datei an, die generiert wurde. Wenn dieser Parameter mithilfe eines Dateinamens festgelegt wird, wird dem Dateinamen der Zielordner vorangestellt. Wenn er mithilfe eines Stamms festgelegt wird, wird der Zielordner ignoriert.

Wenn dieser Parameter nicht festgelegt wird, ist der Name der Ausgabedatei der Zielordner, eine willkürliche Datei und das standardmäßige Suffix für die angegebene Sprache.

Hinweise

Zusätzlich zu den in der Tabelle aufgeführten Parametern erbt dieser Task Parameter von der TaskExtension-Klasse, die selbst von der Task-Klasse erbt. Eine Liste mit diesen zusätzlichen Parametern und ihren Beschreibungen finden Sie unter TaskExtension-Basisklasse.

Diese Aufgabe wird normalerweise nicht direkt im Benutzercode verwendet.

Generieren von Attributen auf Assemblyebene

In MSBuild 17.7 und höher wurde diese Aufgabe aktualisiert, um eine größere Vielfalt von Parametertypen für Attribute auf Assemblyebene zu unterstützen. MSBuild 17.6 und frühere Versionen unterstützten nur „String“ als Parametertyp für Attribute auf Assemblyebene. In MSBuild 17.7 und höher können Sie beliebige .NET-Assemblyattribute erstellen, nicht nur solche, deren Parameter Zeichenfolgentypen sind, wie in früheren Versionen von MSBuild.

Um beispielsweise das Attribut „CLSCompliant(true)“ auf Assemblyebene zu definieren, das einen booleschen Parameter verwendet, können Sie die folgende Syntax verwenden:

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

Der generierte Code hängt von der Zielsprache ab. Für C# würde er folgendermaßen lauten:

[assembly: System.CLSCompliantAttribute(true)]

Typen, die in „mscorlib“ definiert sind, werden automatisch abgeleitet, im vorherigen Beispiel z. B. „Boolesch“. Sie können Metadaten der Form „{parameter}_TypeName“ definieren, um Typen anzugeben, die nicht abgeleitet werden können.

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

Der in C# generierte Code lautet wie folgt:

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

Für kompliziertere Parameterwerte können Sie „{parameter}_IsLiteral“ verwenden.

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

Im vorherigen Beispiel wird das folgende Assemblyattribut in C# erzeugt:

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

Sie können jede beliebige Syntax verwenden, die normalerweise in einer Attributdeklaration in der Sprache des Projekts zulässig wäre. Für einen Arrayparameter können Sie Code wie den folgenden verwenden:

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

Wenn Sie „IsLiteral“ verwenden, wird die Syntax vom entsprechenden Compiler interpretiert und ist daher sprachspezifisch. In Situationen, in denen mehrere Sprachen die gleichen MSBuild-Import- und/oder Projektdateien verwenden, müssen Sie möglicherweise eine bedingte Syntax verwenden, um sicherzustellen, dass der Code mit der entsprechenden projektspezifischen Sprache kompiliert wird.

Hinweis

Die in diesem Abschnitt beschriebene Syntax (_TypeName und _IsLiteral Suffixe) wird in F# nicht unterstützt.

Beispiel

Ein typischer Anwendungsfall für die WriteCodeFragment Aufgabe befindet sich in einem Ziel, das eine Datei generiert, die ein Attribut auf Assemblyebene definiert und dem Build hinzufügt. Mit AssemblyAttribute definierter Definition können Sie die WriteCodeFragment Aufgabe wie im folgenden Code aufrufen.

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

Es OutputFile wird ein bestimmter Dateiname angegeben. Wenn nicht angegeben, wird ein Dateiname zufällig generiert. Um die generierte Datei zum Build hinzuzufügen, wird die Compile Elementliste auch als Ausgabe angegeben. Die Datei wird auch der FileWrites Elementliste hinzugefügt, sodass sie beim Ausführen des Clean Ziels gelöscht wird.

Siehe auch