Sdílet prostřednictvím


Nástroj MSBuild vložené úkoly

MSBuild úkoly jsou obvykle vytvořený kompilací třídy, která implementuje ITask rozhraní.Další informace naleznete v tématu Nástroj MSBuild úkoly.

Rozhraní.NET Framework verze 4 můžete vytvořit úkoly vložený v souboru projektu.Není třeba vytvořit samostatné sestavení hostitele úkolu.To usnadňuje ke sledování zdrojový kód a snadněji nasadit úkolu.Zdrojový kód je integrována do skriptu.

Struktura úkolu vloženého

K úkolu vloženého obsaženého UsingTask prvku.Vložené úkolu a UsingTask element, který obsahuje 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="4.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.v4.0.dll" >
    <ParameterGroup />
    <Task>
      <Reference Include="" />
      <Using Namespace="" />
      <Code Type="Fragment" Language="cs">
      </Code>
    </Task>
  </UsingTask>
</Project>

UsingTask Element v příkladu má tři atributy, které popisují úlohy a vložené továrny úloh, který jej zkompiluje.

  • TaskName Atribut názvy úkolů, v tomto případě DoNothing.

  • TaskFactory Názvy atributů třídy, která implementuje továrny úloh vložené.

  • AssemblyFile Atribut poskytuje umístění vložených továrny úloh.Alternativně můžete použít AssemblyName atribut určit plně kvalifikovaný název třídy factory úkol vložený, která je obvykle umístěn v globální mezipaměť sestavení (GAC) (GAC).

Zbývající prvky DoNothing úloh jsou prázdné a si osvětlíme pořadí a struktura úkolu vloženého.Robustnější příkladu jsou uvedeny dále v tomto tématu.

  • Prvek ParameterGroup je volitelný.Při zadání deklaruje parametry úlohy.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 Popisuje element a obsahuje zdrojový kód úlohy.

  • Reference Element určuje odkazy na sestavení .NET, které používáte ve vašem kódu.To je ekvivalentní přidání odkazu na projekt v aplikaci Visual Studio.Include Atribut určuje cestu k odkazované sestavení.

  • Using Element 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 jsou prvky jazyka volbu.Vložené úkoly mohou být napsány v některém z podporovaných jazycích .NET CodeDom, Visual Basic, Visual C# a JScript.

[!POZNÁMKA]

Prvky obsažené Task prvku, které jsou specifické pro továrny úloh, v tomto případě kód továrny úloh.

Dd722601.collapse_all(cs-cz,VS.110).gifPrvek kódu

Poslední podřízený prvek zobrazí uvnitř Task prvek 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 zápisu úkolu.

Language Atribut určuje jazyk, ve kterém je napsán kód.Přijatelné hodnoty jsou cs pro jazyk C# vb v jazyce Visual Basic a js pro jazyk JScript.

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á je odvozena z ITask rozhraní.

  • Pokud hodnota Type je metody, pak kód definuje přepsání Execute metoda ITask rozhraní.

  • Pokud hodnota Type je Fragment, kód definuje obsah a potom Execute metoda, ale není podpis nebo return prohlášení.

Samotný kód se obvykle zobrazí mezi <![CDATA[ značku a ]]> značky.Protože kód je v oddílu CDATA, se nemusíte obávat uvozovací znaky vyhrazené znaky, například "<" nebo ">".

Alternativně můžete použít Source atribut Code prvek umístění souboru, který obsahuje kód úlohy.Kód ve zdrojovém souboru musí být typu, který je určen Type atribut.Pokud Source atribut, je výchozí hodnota Type je třídy.Pokud Source je přítomen, výchozí hodnota je Fragment.

[!POZNÁMKA]

Při definování třídy úloh ve zdrojovém souboru, název třídy musí souhlasit s TaskName odpovídající atribut UsingTask prvku.

Dobrý den

Zde je robustnější vložené úkolu.Úkol HelloWorld se zobrazí "Hello, world!" na výchozí protokolování chyb zařízení, která je obvykle systémové konzoly nebo Visual Studio výstup okna.Reference Element v příkladu je zahrnuta pouze pro ilustraci.

<Project ToolsVersion="4.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 úkol HelloWorld uložit do souboru s názvem HelloWorld.targets a potom jej takto vyvolat z projektu.

<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ý jej definuje.Následující kód definuje parametr Text.

<ParameterGroup>
    <Text />
</ParameterGroup>

Parametry mohou mít jednu nebo více z těchto atributů:

  • RequiredVolitelný atribut, který je false ve výchozím nastavení.Pokud true, parametr je vyžadován a musí mít hodnotu před voláním úkolu.

  • ParameterTypeVolitelný atribut, který je System.String ve výchozím nastavení.Může být nastavena na plně kvalifikovaný typ, je položka nebo hodnotu, která může být převedena 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ší úkol.)

  • OutputVolitelný atribut, který je false ve výchozím nastavení.Pokud true, pak parametr musí být uvedeny hodnoty 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 vyžadován vstupní parametr typu System.String.

  • Filesje vstupní parametr požadované položky seznamu.

  • Tallyje výstupní parametr typu System.Int32.

Pokud Code prvek má Type atribut Fragment nebo metody, pak vlastnosti jsou automaticky vytvoř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 danou hodnotu.

<Project xmlns='https://schemas.microsoft.com/developer/msbuild/2003' ToolsVersion="4.0">

  <UsingTask TaskName="TokenReplace" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.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ázorný postup: Vytvoření úkolu aplikace Inline

Koncepty

Nástroj MSBuild úkoly