Condividi tramite


Attività WriteCodeFragment

Genera un file di codice temporaneo usando il frammento di codice generato specificato. Non elimina il file.

Parametri

Nella tabella che segue vengono descritti i parametri dell'attività WriteCodeFragment.

Parametro Descrizione
AssemblyAttributes Parametro ITaskItem[] facoltativo.

Descrizione degli attributi da scrivere. Il valore dell'elemento Include è il nome completo del tipo dell'attributo, System.AssemblyVersionAttributead esempio .

Ogni metadato è la coppia nome-valore di un parametro. Si presuppone che i parametri siano di tipo String in MSBuild 17.6 e versioni precedenti, ma in MSBuild 17.7 e versioni successive è anche possibile usare tipi diversi da String quelli di mscorlib. Ad esempio, è possibile usare true valori false booleani, numeri interi, enumerazioni e tipi a virgola mobile. Il tipo viene dedotto automaticamente dalla sintassi. Per un tipo diverso da mscorlib, specificare il tipo per il parametro specificando i valori dei metadati nel formato {parameter}_TypeName.

Alcuni attributi consentono solo gli argomenti posizionali del costruttore. Tuttavia, è possibile usare tali argomenti in qualsiasi attributo. Per impostare gli attributi del costruttore posizionale, usare nomi di metadati simili a _Parameter1, _Parameter2e così via. Non è possibile ignorare un indice di parametro.

In MSBuild 17.7 o versione successiva è anche possibile specificare i metadati del modulo {parameter}_IsLiteral per indicare all'attività di interpretare il testo del valore del parametro così com'è, senza racchiudere tra virgolette (come avviee nel caso predefinito per i valori stringa).
Language Parametro String obbligatorio.

Specifica il linguaggio del codice da generare.

Language può essere qualsiasi linguaggio per il quale è disponibile un provider CodeDom, ad esempio "C#" o "VisualBasic". Il file generato avrà l'estensione del nome file predefinita per tale lingua.
OutputDirectory Parametro ITaskItem facoltativo.

Specifica la cartella di destinazione per il codice generato, di solito la cartella intermedia.
OutputFile Parametro di output ITaskItem facoltativo.

Specifica il percorso del file generato. Se questo parametro viene impostato usando un nome di file, la cartella di destinazione viene anteposta al nome del file. Se è impostato usando una radice, la cartella di destinazione viene ignorata.

Se questo parametro non è impostato, il nome del file di output è la cartella di destinazione, un nome di file arbitrario e l'estensione del nome file predefinita per la lingua specificata.

Osservazioni:

Oltre a usare i parametri elencati nella tabella, questa attività eredita i parametri dalla classe TaskExtension che a sua volta eredita dalla classe Task. Per un elenco di questi parametri aggiuntivi e le rispettive descrizioni, vedere TaskExtension Base Class.

Questa attività non viene in genere usata direttamente nel codice utente.

Generare attributi a livello di assembly

In MSBuild 17.7 e versioni successive questa attività è stata aggiornata per supportare un'ampia gamma di tipi di parametri per gli attributi a livello di assembly. MSBuild 17.6 e versioni precedenti supportate solo String come tipo di parametro per gli attributi a livello di assembly. Con MSBuild 17.7 e versioni successive, è possibile costruire qualsiasi attributo assembly .NET, non solo quelli i cui parametri erano tipi stringa, come nelle versioni precedenti di MSBuild.

Ad esempio, per definire l'attributo CLSCompliant(true)a livello di assembly , che usa un parametro booleano, è possibile usare la sintassi seguente:

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

Il codice generato dipende dalla lingua di destinazione. Per C#, sarà il seguente:

[assembly: System.CLSCompliantAttribute(true)]

I tipi definiti in mscorlib vengono dedotti automaticamente, ad esempio booleani nell'esempio precedente. È possibile definire i metadati del modulo {parameter}_TypeName per specificare i tipi che non possono essere dedotti.

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

Il codice generato in C# è il seguente:

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

Per valori di parametri più complessi, è possibile usare .{parameter}_IsLiteral

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

L'esempio precedente produce l'attributo assembly seguente in C#:

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

È possibile usare qualsiasi sintassi normalmente consentita in una dichiarazione di attributo nel linguaggio del progetto. Per un parametro di matrice, è possibile usare codice simile al seguente:

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

Quando si usa IsLiteral, la sintassi viene interpretata dal compilatore appropriato ed è quindi specifica del linguaggio. In situazioni in cui più linguaggio condividono gli stessi file di importazione e/o file di progetto di MSBuild, potrebbe essere necessario usare la sintassi condizionale per assicurarsi che il codice venga compilato con il linguaggio specifico del progetto pertinente.

Nota

La sintassi descritta in questa sezione (_TypeName e _IsLiteral suffissi) non è supportata in F#.

Esempio

Un caso d'uso tipico per l'attività WriteCodeFragment si trova in una destinazione che genera un file che definisce un attributo a livello di assembly e lo aggiunge alla compilazione. Con AssemblyAttribute definito, è possibile richiamare l'attività WriteCodeFragment come nel codice seguente.

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

Viene OutputFile assegnato un nome file specifico; se non specificato, viene generato un nome file in modo casuale. Inoltre, per aggiungere il file generato alla compilazione, l'elenco Compile di elementi viene fornito come output. Il file viene aggiunto anche all'elenco FileWrites di elementi, in modo che venga eliminato quando viene eseguita la Clean destinazione.

Vedi anche