Udostępnij za pośrednictwem


Wbudowany w program MSBuild zadań

Zadania MSBuild są zwykle tworzone przez skompilowanie klasy, który implementuje ITask interfejsu.Aby uzyskać więcej informacji, zobacz Program MSBuild zadań.

W.NET Framework w wersji 4 można utworzyć zadania inline w pliku projektu.Nie masz tworzenie oddzielnych zestawów do hosta zadania.Dzięki temu łatwiejsze do śledzenia kodu źródłowego i łatwiejsze do wdrożenia zadania.Kod źródłowy jest zintegrowany w skrypcie.

Struktura zadania Inline

To zadanie wbudowany jest zawarty w UsingTask element.Zadanie inline i UsingTask element, który go zawiera zazwyczaj są zawarte w pliku .targets i importowane do innych plików projektów, zgodnie z wymaganiami.Oto zadanie podstawowe wbudowanej.Należy zauważyć, że nie robi nic.

<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 w przykładzie ma trzy atrybuty, które opisują zadania i inline factory zadanie kompiluje.

  • TaskName Atrybut nazwy zadania, w tym przypadku DoNothing.

  • TaskFactory Atrybut nazwy klasy, która implementuje inline factory zadania.

  • AssemblyFile Atrybut podaje lokalizację inline factory zadania.Alternatywnie, można użyć AssemblyName atrybut, aby określić pełną nazwę klasy factory inline zadania, która zazwyczaj znajduje się w globalna pamięć podręczna zestawów (GAC).

Pozostałe elementy DoNothing zadania są puste i ilustrują kolejność i struktura zadania wbudowanej.Przykład bardziej wydajny jest przedstawiony w dalszej części tego tematu.

  • ParameterGroup Element jest opcjonalne.Po określeniu deklaruje parametrów zadania.Aby uzyskać więcej informacji na temat parametrów wejściowych i wyjściowych zobacz "Wejściowych i parametrów wyjściowych" w dalszej części tego tematu.

  • Task Element opisuje i zawiera kod źródłowy zadania.

  • Reference Element określa odwołania do zestawów .NET, które są używane w kodzie.Jest to równoważne Dodawanie odwołania do projektu w Visual Studio.Include Atrybut określa ścieżka odwołanie zestawu.

  • Using Element zawiera listę nazw, który chcesz uzyskać dostęp.Przypomina to Using instrukcja w Visual C#.Namespace Atrybut określa obszar nazw, aby uwzględnić.

Referencei Using elementy są niezależne od języka.Wbudowane zadania mogą być napisane w jednym z obsługiwanych języków .NET CodeDom, na przykład Visual Basic, Visual C# i JScript.

[!UWAGA]

Elementy zawarte przez Task elementu są specyficzne dla fabryki zadania, w tym przypadku kod fabryki zadania.

Dd722601.collapse_all(pl-pl,VS.110).gifElement kodu

Ostatni element podrzędny pojawił się w Task jest element Code element.Code Element zawiera lub lokalizuje kod, który ma zostać skompilowany do zadania.Umieścić w Code element zależy od tego, jaki chcesz napisać zadanie.

Language Atrybut określa język, w którym jest napisany kod.Dopuszczalne wartości to cs dla języka C#, vb dla języka Visual Basic i js dla języka JScript.

Type Atrybut określa typ kod, który znajduje się w Code element.

  • Jeśli wartość Type jest klasy, a następnie Code element zawiera kod klasy, która wynika z ITask interfejsu.

  • Jeśli wartość Type jest Metoda, a następnie kod definiuje zastępująca Execute metoda ITask interfejsu.

  • Jeśli wartość Type jest Fragment, a następnie kod definiuje zawartość Execute metoda, ale nie podpis lub return instrukcji.

Sam kod pojawia się zwykle między <![CDATA[ znacznika i ]]> znacznika.Ponieważ kod znajduje się w sekcji CDATA, nie trzeba martwić się o ucieczce znaki zastrzeżone, na przykład, "<" lub ">".

Alternatywnie, można użyć Source atrybut Code element, aby określić lokalizację pliku zawierającego kod dla danego zadania.Kod w pliku źródłowym musi być typu, który jest określony przez Type atrybut.Jeśli Source atrybut jest obecny, domyślna wartość Type jest klasy.Jeśli Source jest nieobecny, wartością domyślną jest Fragment.

[!UWAGA]

Podczas definiowania klasy zadań w pliku źródłowym, nazwa klasy musi zgodzić się z TaskName atrybut odpowiadającego UsingTask element.

Witaj świecie

Oto bardziej niezawodne zadanie inline.Wyświetla zadania HelloWorld "Hello, world!" na urządzenie domyślne rejestrowanie błędów, który jest zazwyczaj konsoli systemu lub programu Visual Studio produkcji okna.Reference Element w przykładzie jest włączone tylko na ilustracji.

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

Można zapisać w pliku o nazwie HelloWorld.targets, zadanie HelloWorld i następnie wywołać ją z projektu następująco.

<Project ToolsVersion="4.0" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="HelloWorld.targets" />
  <Target Name="Hello">
    <HelloWorld />
  </Target>
</Project>

Dane wejściowe i parametry wyjściowe

Elementy podrzędne są parametry zadania inline ParameterGroup element.Każdy parametr ma nazwę elementu, który definiuje ją.W poniższym kodzie zdefiniowano parametr Text.

<ParameterGroup>
    <Text />
</ParameterGroup>

Parametry mogą mieć jeden lub więcej z tych atrybutów:

  • Requiredjest opcjonalny atrybut, który jest false domyślnie.Jeśli true, a następnie parametr jest wymagana i musi być wartości przed wywołaniem zadania.

  • ParameterTypejest opcjonalny atrybut, który jest System.String domyślnie.Może on być ustawiony na dowolny typ w pełni kwalifikowana, to element lub wartości, które mogą być konwertowane do i z ciągu znaków przy użyciu System.Convert.ChangeType.(Innymi słowy, dowolnego typu, mogą być przekazywane do i z zadania zewnętrznego.)

  • Outputjest opcjonalny atrybut, który jest false domyślnie.Jeśli true, a następnie parametr musi być danej wartości przed powrotem z metody Execute.

Na przykład:

<ParameterGroup>
    <Expression Required="true" />
      <Files ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
    <Tally ParameterType="System.Int32" Output="true" />
</ParameterGroup>

definiuje te trzy parametry:

  • Expressionjest wymagany parametr wejściowy typu System.String.

  • Filesjest parametrem wejściowym listy wymaganego elementu.

  • Tallyjest parametrem wyjściowym typu System.Int32.

Jeśli Code element ma Type atrybut Fragment lub Metoda, a następnie właściwości są tworzone automatycznie dla każdego parametru.W przeciwnym razie właściwości musi być jawnie zadeklarowane w kodzie źródłowym zadanie i musi dokładnie odpowiadać definicji ich parametrów.

Przykład

Następujące zadanie inline zamienia każde wystąpienie tokenu w danym pliku danej wartości.

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

Zobacz też

Zadania

Instruktaż: Tworzenie zadania Inline

Koncepcje

Program MSBuild zadań