WriteCodeFragment – úloha
Vygeneruje dočasný soubor kódu ze zadaného vygenerovaného fragmentu kódu. Neodstraní soubor.
Parametry
Následující tabulka popisuje parametry WriteCodeFragment
úlohy.
Parametr | Popis |
---|---|
AssemblyAttributes |
Volitelný ITaskItem[] parametr.Popis atributů k zápisu Hodnota položky Include je úplný název typu atributu, System.AssemblyVersionAttribute například .Všechna metadata jsou dvojicí name-value parametru. Parametry jsou předpokládat, že jsou typu String v MSBuild 17.6 a starší, ale v MSBuild 17.7 a novější, můžete také použít jiné typy, než String jsou součástí mscorlib . Můžete například použít true logické false hodnoty, celá čísla, výčty a typy s plovoucí desetinou čárkou. Typ se automaticky odvodí ze syntaxe. Pro typ, který není v mscorlib , zadejte typ parametru zadáním hodnot metadat ve formuláři {parameter}_TypeName .Některé atributy umožňují pouze argumenty pozičního konstruktoru. Tyto argumenty však můžete použít v libovolném atributu. Chcete-li nastavit poziční konstruktor atributy, použijte názvy metadat, které se podobají _Parameter1 , _Parameter2 a tak dále. Index parametrů nelze přeskočit.V MSBuildu 17.7 nebo novějším můžete také zadat metadata formuláře {parameter}_IsLiteral a dát úkolu pokyn, aby interpretoval text hodnoty parametru tak, jak je, bez uvozovek (stejně jako ve výchozím případě pro řetězcové hodnoty). |
Language |
Požadovaný parametr String .Určuje jazyk kódu, který se má vygenerovat. Language může být libovolný jazyk, pro který je k dispozici poskytovatel CodeDom, například "C#" nebo "VisualBasic". Vygenerovaný soubor bude mít výchozí příponu názvu souboru pro tento jazyk. |
OutputDirectory |
Volitelný ITaskItem parametr. Určuje cílovou složku pro vygenerovaný kód, obvykle zprostředkující složku. |
OutputFile |
Volitelný ITaskItem výstupní parametr. Určuje cestu k vygenerovanému souboru. Pokud je tento parametr nastaven pomocí názvu souboru, cílová složka se před názvem souboru. Pokud je nastavená pomocí kořenového adresáře, cílová složka se ignoruje. Pokud tento parametr není nastavený, název výstupního souboru je cílová složka, libovolný název souboru a výchozí přípona názvu souboru pro zadaný jazyk. |
Poznámky
Kromě parametrů, které jsou uvedeny v tabulce, tento úkol dědí parametry z TaskExtension třídy, která sama dědí z Task třídy. Seznam těchto dalších parametrů a jejich popisů naleznete v tématu TaskExtension základní třída.
Tento úkol se obvykle nepoužívá přímo v uživatelském kódu.
Generování atributů na úrovni sestavení
V MSBuildu 17.7 a novějších byl tento úkol aktualizován tak, aby podporoval větší škálu typů parametrů pro atributy na úrovni sestavení. NÁSTROJ MSBuild 17.6 a starší podporuje pouze String
jako typ parametru pro atributy na úrovni sestavení. S MSBuild 17.7 a novějším můžete sestavit libovolný atribut sestavení .NET, nejen ty, jejichž parametry byly typy řetězců, stejně jako v dřívějších verzích NÁSTROJE MSBuild.
Pokud chcete například definovat atribut CLSCompliant(true)
na úrovni sestavení , který používá logický parametr, můžete použít následující syntaxi:
<ItemGroup>
<AssemblyAttribute Include="System.CLSCompliantAttribute">
<_Parameter1>true</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
Vygenerovaný kód závisí na cílovém jazyce. V jazyce C# by to bylo takto:
[assembly: System.CLSCompliantAttribute(true)]
Typy definované v mscorlib
tomto příkladu se automaticky odvozují, například logická hodnota v předchozím příkladu. Můžete definovat metadata formuláře {parameter}_TypeName
k určení typů, které nelze odvodit.
<ItemGroup>
<AssemblyAttribute Include="Microsoft.Owin.OwinStartup">
<_Parameter1>Microsoft.Examples.Startup</_Parameter1>
<_Parameter1_TypeName>System.Type</_Parameter1_TypeName>
</AssemblyAttribute>
</ItemGroup>
Kód vygenerovaný v jazyce C# je následující:
[assembly: Microsoft.Owin.OwinStartup(typeof(Microsoft.Examples.Startup))]
Pro složitější hodnoty parametrů můžete použít {parameter}_IsLiteral
.
<ItemGroup>
<AssemblyAttribute Include="NUnit.Framework.Parallelizable">
<_Parameter1>NUnit.Framework.ParallelScope.Fixtures</_Parameter1>
<_Parameter1_IsLiteral>true</_Parameter1_IsLiteral>
</AssemblyAttribute>
</ItemGroup>
Předchozí příklad vytvoří následující atribut sestavení v jazyce C#:
[assembly: NUnit.Framework.Parallelizable(NUnit.Framework.ParallelScope.Fixtures)]
Můžete použít libovolnou syntaxi, která by normálně byla povolena v deklaraci atributu v jazyce projektu. Pro parametr pole můžete použít kód podobný tomuto:
<ItemGroup>
<AssemblyAttribute Include="TestAttribute">
<_Parameter1>new int[] { 1, 3, 5 } /* odd numbers */</_Parameter1>
<_Parameter1_IsLiteral>true</_Parameter1_IsLiteral>
</AssemblyAttribute>
</ItemGroup>
Při použití IsLiteral
je syntaxe interpretována příslušným kompilátorem, a proto je specifická pro jazyk. Pokud máte situace, kdy více jazyků sdílí stejné soubory importu NÁSTROJE MSBuild nebo soubory projektu, možná budete muset použít podmíněnou syntaxi, abyste zajistili, že se kód zkompiluje s příslušným jazykem specifickým pro projekt.
Poznámka:
Syntaxe popsaná v této části (_TypeName
a _IsLiteral
přípony) není v jazyce F# podporovaná.
Příklad
Typický případ použití úlohy WriteCodeFragment
je v cíli, který vygeneruje soubor, který definuje atribut na úrovni sestavení a přidá ho do sestavení. S definovaným AssemblyAttribute
kódem WriteCodeFragment
můžete úlohu vyvolat jako v následujícím kódu.
<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>
Je OutputFile
zadán konkrétní název souboru, pokud není zadaný, název souboru se náhodně vygeneruje. Pokud chcete do sestavení přidat vygenerovaný soubor, Compile
zobrazí se jako výstup seznam položek. Soubor se také přidá do FileWrites
seznamu položek, aby se po spuštění cíle odstranil Clean
.