Vložené úlohy nástroje MSBuild
Nástroj MSBuild úkoly jsou obvykle vytvořeno zkompilováním třídu, která implementuje ITask rozhraní.Další informace naleznete v tématu Úlohy nástroje MSBuild.
Spuštění v rozhraní.NET Framework verze 4, můžete vytvořit úkoly vložené v souboru projektu.Nemusíte vytvářet samostatné sestavení hostitele úkolu.Díky tomu můžete sledovat zdrojového kódu jednodušší a snadnější úkol.Zdrojový kód je integrována do skriptu.
Struktura úkolu vložené
Zvládnout úkol aplikace vložený UsingTask prvku.Úkol vložený a UsingTask element, který obsahuje, je obvykle součástí souboru TARGETS a importovat do jiných souborů projektu podle potřeby.Zde je úloha základního textu.Všimněte si, že neprovede žádnou akci.
<Project ToolsVersion="12.0" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<!-- This simple inline task does nothing. -->
<UsingTask
TaskName="DoNothing"
TaskFactory="CodeTaskFactory"
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v12.0.dll" >
<ParameterGroup />
<Task>
<Reference Include="" />
<Using Namespace="" />
<Code Type="Fragment" Language="cs">
</Code>
</Task>
</UsingTask>
</Project>
UsingTask Prvek v příkladu má tři atributy, které popisují úlohy a továrny úloh vložené, který jej zkompiluje.
TaskName Atribut názvy úkolů, v tomto případě DoNothing.
TaskFactory Atribut název třídy, která implementuje továrny úloh vložené.
AssemblyFile Atribut poskytuje umístění továrny úloh vložené.Alternativně lze použít AssemblyName atribut k určení plně kvalifikovaný název třídy vložené úkol rodiny, která se obvykle nachází v globální mezipaměť sestavení (GAC) (GAC).
Zbývající prvky DoNothing úkolu jsou prázdné a jsou k dispozici pro ilustraci pořadí a struktura úkolu vložené.Robustnější příklad je zobrazen dále v tomto tématu.
Prvek ParameterGroup je volitelný.Při zadání deklaruje parametry pro daný úkol.Další informace o vstupních a výstupních parametrů naleznete v tématu "Vstupní a výstupní parametry" dále v tomto tématu.
Task Prvek popisuje a obsahuje zdrojový kód úlohy.
Reference Prvek určuje odkazy na sestavení .NET, které používáte ve vašem kódu.Jedná se o ekvivalent k přidání odkazu na projekt v aplikaci Visual Studio.Include Atribut určuje cestu k odkazované sestavení.
Using Prvek obsahuje obory názvů, které chcete získat přístup.Podobá se to Using prohlášení v jazyce Visual C#.Namespace Atribut určuje obor názvů, který chcete zahrnout.
Referencea Using prvky jsou bez ohledu na jazyk.Vložené úkoly mohou být napsány v některém z podporovaných jazyků .NET CodeDom, například Visual Basic nebo Visual C#.
[!POZNÁMKA]
Prvků obsažených Task prvku, které jsou specifické pro továrny úloh, v tomto případě kód továrny úloh.
Prvek kódu
Poslední podřízený prvek zobrazit v rámci Task prvkem je Code prvku.Code Obsahuje prvek nebo vyhledá kód, který má být zkompilován do úkolu.Umístit do Code prvku závisí na způsob psaní úkolu.
Language Atribut určuje jazyk, ve kterém je napsán kód.Platné hodnoty jsou cs pro jazyk C#, vb v jazyce Visual Basic.
Type Atribut určuje typ kódu, který se nachází v Code prvku.
Pokud hodnota Type je třídy, pak Code prvek obsahuje kód pro třídu, která pochází z ITask rozhraní.
Pokud hodnota Type je Metoda, pak kód definuje přepsanou Execute metoda ITask rozhraní.
Pokud hodnota Type je Fragment, kód definuje obsah a pak Execute metoda, ale není podpis nebo return prohlášení.
Samotného kódu se obvykle objeví mezi <![CDATA[ značku a ]]> značky.Vzhledem k tomu, že kód je v oddíl CDATA, nemusíte starat o úniku vyhrazené znaky, například "<"nebo">".
Alternativně lze použít Source atribut Code prvek, který chcete určit umístění souboru, který obsahuje kód pro daný úkol.Kód ve zdrojovém souboru musí být typu, který je určen Type atribut.Pokud Source je atribut zadán, výchozí hodnota Type je třídy.Pokud Source je k dispozici, výchozí hodnota je Fragment.
[!POZNÁMKA]
Při definování třídy úloh ve zdrojovém souboru, musíte přijmout název třídy TaskName atribut odpovídající UsingTask prvek.
Dobrý den
Zde je více robustní úkol vložený.Úkol HelloWorld se zobrazí "Hello, world!" v zařízení výchozí protokolování chyb, což je obvykle systémové konzoly nebo Visual Studio výstup okno.Reference Element v příkladu je zahrnuta pouze pro ilustraci.
<Project ToolsVersion="12.0" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<!-- This simple inline task displays "Hello, world!" -->
<UsingTask
TaskName="HelloWorld"
TaskFactory="CodeTaskFactory"
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
<ParameterGroup />
<Task>
<Reference Include="System.Xml.dll"/>
<Using Namespace="System"/>
<Using Namespace="System.IO"/>
<Code Type="Fragment" Language="cs">
<![CDATA[
// Display "Hello, world!"
Log.LogError("Hello, world!");
]]>
</Code>
</Task>
</UsingTask>
</Project>
Může uložit úkol HelloWorld v souboru s názvem HelloWorld.targets a potom jej vyvolat z projektu takto.
<Project ToolsVersion="4.0" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="HelloWorld.targets" />
<Target Name="Hello">
<HelloWorld />
</Target>
</Project>
Vstupní a výstupní parametry
Podřízené prvky jsou vložené parametry úlohy ParameterGroup prvku.Každý parametr název prvku, který definuje.Následující kód definuje parametr Text.
<ParameterGroup>
<Text />
</ParameterGroup>
Parametry mohou mít jednu nebo více z těchto atributů:
Requiredje volitelný atribut, který je false ve výchozím nastavení.Pokud true, pak parametr je vyžadován a musí být uvedeny hodnoty před voláním úkolu.
ParameterTypeje volitelný atribut, který je System.String ve výchozím nastavení.Může být nastavena na plně kvalifikovaný typ, který zbožím nebo hodnoty, které lze převést do a z řetězce pomocí System.Convert.ChangeType. (Jinými slovy, libovolný typ, který může být předán do a z vnějšího úkolu.)
Outputje volitelný atribut, který je false ve výchozím nastavení.Pokud true, pak tento parametr musí mít hodnotu před návratem z metody Execute.
Příklad:
<ParameterGroup>
<Expression Required="true" />
<Files ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
<Tally ParameterType="System.Int32" Output="true" />
</ParameterGroup>
definuje tyto tři parametry:
Expressionje povinný vstupní parametr typu System.String.
Filesje vstupní parametr seznam požadovaného zboží.
Tallyje výstupní parametr typu System.Int32.
Pokud Code prvek má Type atribut Fragment nebo Metoda, pak vlastnosti jsou automaticky vytvářeny pro každý parametr.Jinak vlastnosti musí být explicitně deklarovány ve zdrojovém kódu úkol a musí přesně odpovídat jejich definice parametru.
Příklad
Následující úkol vložený nahradí všechny výskyty token v daném souboru s danou hodnotou.
<Project xmlns='https://schemas.microsoft.com/developer/msbuild/2003' ToolsVersion="12.0">
<UsingTask TaskName="TokenReplace" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v12.0.dll">
<ParameterGroup>
<Path ParameterType="System.String" Required="true" />
<Token ParameterType="System.String" Required="true" />
<Replacement ParameterType="System.String" Required="true" />
</ParameterGroup>
<Task>
<Code Type="Fragment" Language="cs"><![CDATA[
string content = File.ReadAllText(Path);
content = content.Replace(Token, Replacement);
File.WriteAllText(Path, content);
]]></Code>
</Task>
</UsingTask>
<Target Name='Demo' >
<TokenReplace Path="C:\Project\Target.config" Token="$MyToken$" Replacement="MyValue"/>
</Target>
</Project>
Viz také
Úkoly
Návod: Vytvoření vložené úlohy