Udostępnij za pośrednictwem


Wskazówki: tworzenie zadania wbudowanego

MSBuild zadań są zwykle tworzone przez skompilowanie klasy, która implementuje ITask interfejsu.Począwszy od.NET Framework w wersji 4, można utworzyć zadania wbudowane w pliku projektu.Nie trzeba utworzyć osobne zestawu do hosta zadania.Aby uzyskać więcej informacji, zobacz Zadania wbudowane programu MSBuild.

W tym instruktażu pokazano, jak utworzyć i uruchomić zadania te wbudowane:

  • Zadanie nie ma wejściowego lub wyjściowego parametrów.

  • Zadania, które ma jeden parametr wejściowy i bez parametrów wyjściowych.

  • Zadanie, które ma dwa parametry wejściowe i parametry jeden wyjściowy, który zwraca wartość właściwości MSBuild.

  • Zadania, które ma dwa parametry wejściowe i dane wyjściowe jednego parametru, zwracające element MSBuild.

Aby utworzyć i uruchomić zadania, należy użyć programu Visual Studio i Programu Visual Studio w oknie wiersza polecenia, w następujący sposób:

  • Tworzenie pliku projektu programu MSBuild przy użyciu programu Visual Studio.

  • Modyfikowanie pliku projektu programu Visual Studio, aby utworzyć zadanie wbudowanej.

  • Użyj W oknie wiersza polecenia do budowania projektu i przejrzeć wyniki.

Tworzenie i modyfikowanie projektu programu MSBuild

System projektu programu Visual Studio jest oparty na MSBuild.W związku z tym można utworzyć plik projektu kompilacji przy użyciu programu Visual Studio.W tej sekcji można utworzyć plik projektu Visual C#.(Można utworzyć plik projektu Visual Basic.W kontekście niniejszego samouczka różnica między plikami dwóch projektów jest niewielki.)

Do tworzenia i modyfikowania pliku projektu

  1. W programie Visual Studio na pliku menu, kliknij przycisk Nowy , a następnie kliknij przycisk projektu.

  2. W Nowy projekt okno dialogowe, wybierz opcję Visual C# typu projektu, a następnie wybierz Aplikacji Windows Forms szablonu.W Nazwa wpisz InlineTasks.Type a lokalizację dla roztworu, na przykład, D:\.Zapewnić, że Utwórz katalog rozwiązania jest zaznaczone, Dodaj, aby kontrola źródła jest wyczyszczone, i Nazwa rozwiązania jest InlineTasks.

    Kliknij przycisk OK do utworzenia pliku projektu.

  3. W Solution Explorer, kliknij prawym przyciskiem myszy węzeł projektu InlineTasks, a następnie kliknij przycisk Projektu Unload.

  4. Ponownie kliknij prawym przyciskiem myszy węzeł projektu, a następnie kliknij przycisk Edytuj InlineTasks.csproj.

    Plik projektu pojawi się w edytorze kodu.

Dodawanie zadania Hello podstawowe

Teraz Dodaj do pliku projektu podstawowe zadania, którym jest wyświetlany komunikat "Hello, world!" Także dodać domyślny cel TestBuild do wywołania zadania.

Aby dodać zadanie podstawowe powitania

  1. W katalogu głównym Project węzła, zmiana DefaultTargets atrybutu do TestBuild.Wynikowy Project węzeł powinien wyglądać w tym przykładzie:

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

  2. Dodaj następujące zadanie wbudowane i docelowego pliku projektu tuż przed </Project> tag.

    <UsingTask TaskName="Hello" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
      <ParameterGroup />
      <Task>
        <Code Type="Fragment" Language="cs">
          Log.LogMessage("Hello, world!", MessageImportance.High);
        </Code>
      </Task>
    </UsingTask>
    <Target Name="TestBuild">
      <Hello />
    </Target>
    
  3. Zapisz plik projektu.

Kod ten tworzy zadanie wbudowany, o nazwie Hello i nie ma parametrów, odwołania, lub Using instrukcji.Zadanie powitania zawiera tylko jeden wiersz kodu, który wyświetla komunikat hello na domyślne urządzenie rejestrowania, zwykle w oknie konsoli.

Uruchomione zadania powitania

Uruchom program MSBuild za pomocą W oknie wiersza polecenia do konstruowania zadań Hello oraz docelowego TestBuild, która wywołuje go przetworzyć.

Aby uruchomić zadanie powitania

  1. Kliknij przycisk uruchomić, kliknij przycisk Wszystkie programy, a następnie zlokalizuj Visual Studio Tools folder i kliknij przycisk wiersza polecenia usługi programu Visual Studio.

  2. W W oknie wiersza polecenia, zlokalizuj folder zawierający plik projektu, w tym przypadku D:\InlineTasks\InlineTasks\.

  3. Typ msbuild bez przełączników polecenia, a następnie naciśnij klawisz ENTER.Domyślnie to tworzy plik InlineTasks.csproj i przetwarza domyślne docelowego TestBuild, która wywołuje zadania Hello.

  4. Przeanalizuj wyjście w W oknie wiersza polecenia.Powinno pojawić się ten wiersz:

    Hello, world!

    [!UWAGA]

    Jeśli nie widzisz wiadomości powitania, spróbuj ponownie zapisać plik projektu, a następnie uruchomić zadanie powitania.

Przez przemian Edytor kodu i W oknie wiersza polecenia, można zmienić pliku projektu i szybko zobaczyć wyniki.

Definiowanie zadań Echo

Tworzenie zadania wbudowany, który akceptuje parametr typu string i wyświetla ciąg na domyślny, rejestrowanie urządzenia.

Aby zdefiniować zadanie Echo

  1. W edytorze kodu należy zastąpić zadań w powitalnych i TestBuild docelowych przy użyciu następującego kodu.

    <UsingTask TaskName="Echo" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
      <ParameterGroup>
        <Text Required="true" />
      </ParameterGroup>
      <Task>
        <Code Type="Fragment" Language="cs">
          Log.LogMessage(Text, MessageImportance.High);
        </Code>
      </Task>
    </UsingTask>
    <Target Name="TestBuild">
      <Echo Text="Greetings!" />
    </Target>
    
  2. W W oknie wiersza polecenia, typ msbuild bez przełączników polecenia, a następnie naciśnij klawisz ENTER.Domyślnie to procesy domyślne docelowego TestBuild, która wywołuje zadania Echo.

  3. Przeanalizuj wyjście w W oknie wiersza polecenia.Powinno pojawić się ten wiersz:

    Greetings!

Ten kod zawiera definicję zadania wbudowany, o nazwie Echo i ma tylko jeden wymaganego parametru wejściowego tekstu.Domyślnie są parametry typu System.String.Wartość parametru tekstu jest ustawiona, gdy docelowe TestBuild wywołuje zadania Echo.

Definiowanie zadań Sumator

Tworzenie zadania wbudowany, który dodaje dwa parametry całkowitą i emituje ich sumę jako właściwość MSBuild.

Aby zdefiniować zadanie Sumator

  1. W edytorze kodu należy zastąpić Echo zadań i TestBuild docelowych przy użyciu następującego kodu.

    <UsingTask TaskName="Adder" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
      <ParameterGroup>
        <A ParameterType="System.Int32" Required="true" />
        <B ParameterType="System.Int32" Required="true" />
        <C ParameterType="System.Int32" Output="true" />
      </ParameterGroup>
      <Task>
        <Code Type="Fragment" Language="cs">
          C = A + B;
        </Code>
      </Task>
    </UsingTask>  
    <Target Name="TestBuild">
      <Adder A="4" B="5">
        <Output PropertyName="Sum" TaskParameter="C" />
      </Adder>
      <Message Text="The sum is $(Sum)" Importance="High" />
    </Target>
    
  2. W W oknie wiersza polecenia, typ msbuild bez przełączników polecenia, a następnie naciśnij klawisz ENTER.Domyślnie to procesy domyślne docelowego TestBuild, która wywołuje zadania Echo.

  3. Przeanalizuj wyjście w W oknie wiersza polecenia.Powinno pojawić się ten wiersz:

    The sum is 9

Ten kod zawiera definicję zadania wbudowany, o nazwie śmiercionośna i ma dwa wymagane parametry wejściowe całkowitą, A i B, oraz całkowitą jeden parametr, C. wyjściaZadanie śmiercionośna dodaje dwa parametry wejściowe i zwraca sumę w parametr wyjściowy.Suma jest emitowany jako właściwość MSBuild Sum.Wartości parametrów wejściowych są ustawione, gdy docelowe TestBuild wywołuje zadania śmiercionośna.

Definiowanie zadań RegX

Należy utworzyć zadanie wbudowany, która akceptuje grupę towarów i wyrażenie regularne i zwraca listę wszystkich elementów, które mają zawartość pliku, który pasuje do wyrażenia.

Aby zdefiniować zadanie RegX

  1. W edytorze kodu należy zastąpić zadania śmiercionośna i TestBuild docelowych przy użyciu następującego kodu.

    <UsingTask TaskName="RegX" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
      <ParameterGroup>
        <Expression Required="true" />
        <Files ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
        <Result ParameterType="Microsoft.Build.Framework.ITaskItem[]" Output="true" />
      </ParameterGroup>
      <Task>
        <Using Namespace="System.Text.RegularExpressions"/>
        <Code Type="Fragment" Language="cs">
    <![CDATA[
          if (Files.Length > 0)
          {
            Result = new TaskItem[Files.Length];
            for (int i = 0; i < Files.Length; i++)
            {
              ITaskItem item = Files[i];
              string path = item.GetMetadata("FullPath");
              using(StreamReader rdr = File.OpenText(path))
              {
                if (Regex.Match(rdr.ReadToEnd(), Expression).Success)
                {
                  Result[i] = new TaskItem(item.ItemSpec);
                }
              }
            }
          }
    ]]>
        </Code>
      </Task>
    </UsingTask>  
    <Target Name="TestBuild">
      <RegX Expression="public|protected" Files="@(Compile)">
        <Output ItemName="MatchedFiles" TaskParameter="Result" />
      </RegX>
      <Message Text="Input files: @(Compile)" Importance="High" />
      <Message Text="Matched files: @(MatchedFiles)" Importance="High" />
    </Target>
    
  2. W W oknie wiersza polecenia, typ msbuild bez przełączników polecenia, a następnie naciśnij klawisz ENTER.Domyślnie to procesy domyślne docelowego TestBuild, która wywołuje zadania RegX.

  3. Przeanalizuj wyjście w W oknie wiersza polecenia.Należy wyświetlić te wiersze:

    Input files: Form1.cs;Form1.Designer.cs;Program.cs;Properties\AssemblyInfo.cs;Properties\Resources.Designer.cs;Properties\Settings.Designer.cs

    Matched files: Form1.cs;Form1.Designer.cs;Properties\Settings.Designer.cs

Ten kod zawiera definicję zadania wbudowany, o nazwie RegX i ma te trzy parametry:

  • Expressionjest wymagany ciąg parametr wejściowy, który ma wartość wyrażenia regularnego, które mają być dopasowywane.W tym przykładzie wyrażenie pasuje do słowa "publiczny" lub "chronione".

  • Filesjest parametr wejściowy wymaganego elementu listy, który ma wartość, która jest lista plików, które mają być wyszukiwane dopasowanie.W tym przykładzie Files jest ustawiona na skompilować element, który zawiera listę plików źródłowych projektu.

  • Resultto parametr wyjściowy, który ma wartość, która jest lista plików zawartości, które odpowiadają wyrażenia regularnego.

Wartości parametrów wejściowych są ustawione, gdy docelowe TestBuild wywołuje zadania RegX.Zadanie RegX odczytuje każdy plik i zwraca listę plików, które odpowiadają wyrażenia regularnego.Wykaz ten jest zwracany jako Result parametr wyjściowy, który jest emitowany jako element MSBuild MatchedFiles.

Obsługa znaki zarezerwowane.

MSBuild parser przetwarza wbudowane zadania w formacie XML.Znaki, które zostały zarezerwowane znaczenie w języku XML, na przykład, "<" i ">", są wykryte i traktowane tak, jakby były one XML, a nie.Kod źródłowy netto.Aby uwzględnić znaki zastrzeżone w kodzie wyrażeń takich jak Files.Length > 0, zapis Code elementu tak, aby jego zawartość są zawarte w wyrażeniu CDATA w następujący sposób:

<Code Type="Fragment" Language="cs">

<![CDATA[

// Your code goes here.

]]>

</Code>

Zobacz też

Koncepcje

Zadania wbudowane programu MSBuild

Zadania programu MSBuild

Obiekty docelowe w programie MSBuild