Aracılığıyla paylaş


Satır içi görev oluşturma

MSBuild görevleri genellikle arabirimini uygulayan ITask bir sınıf derlenerek oluşturulur. .NET Framework sürüm 4'den başlayarak proje dosyasında satır içi görevler oluşturabilirsiniz. Görevi barındırmak için ayrı bir derleme oluşturmanız gerekmez. Daha fazla bilgi için bkz . Satır içi görevler.

Bu kılavuzda şu satır içi görevlerin nasıl oluşturulacağı ve çalıştıracağı gösterilmektedir:

  • Giriş veya çıkış parametresi olmayan bir görev.

  • Bir giriş parametresi olan ve çıkış parametresi olmayan bir görev.

  • İki giriş parametresi olan bir görev ve msBuild özelliği döndüren bir çıkış parametresi.

  • İki giriş parametresi olan bir görev ve bir MSBuild öğesi döndüren bir çıkış parametresi.

Görevleri oluşturmak ve çalıştırmak için Visual Studio'yu ve Visual Studio Komut İstemi Penceresi'ni aşağıdaki gibi kullanın:

  1. Visual Studio kullanarak bir MSBuild proje dosyası oluşturun.

  2. Satır içi görevi oluşturmak için Visual Studio'daki proje dosyasını değiştirin.

  3. Projeyi oluşturmak ve sonuçları incelemek için Komut İstemi Penceresi'ni kullanın.

MSBuild projesi oluşturma ve değiştirme

Visual Studio proje sistemi MSBuild'i temel alır. Bu nedenle, Visual Studio kullanarak bir derleme projesi dosyası oluşturabilirsiniz. Bu bölümde, bir Visual C# proje dosyası oluşturun. (Bunun yerine bir Visual Basic proje dosyası oluşturabilirsiniz. Bu öğretici bağlamında, iki proje dosyası arasındaki fark küçük olur.)

Proje dosyası oluşturmak ve değiştirmek için

  1. Visual Studio'da C# Windows Forms Uygulaması şablonunu kullanarak yeni bir proje oluşturun. Ad kutusuna InlineTasks yazın. Çözüm için bir Konum yazın; örneğin, D:\. Çözüm için dizin oluştur'un seçili olduğundan, Kaynak Denetimine Ekle'nin temizlendiğinden ve Çözüm Adı'nın InlineTasks olduğundan emin olun.

  2. Proje dosyasını oluşturmak için Tamam'a tıklayın.

  3. Çözüm Gezgini InlineTasks proje düğümüne sağ tıklayın ve ardından Projeyi Kaldır'a tıklayın.

  4. Proje düğümüne yeniden sağ tıklayın ve ardından InlineTasks.csproj Dosyasını Düzenle'ye tıklayın.

    Proje dosyası kod düzenleyicisinde görüntülenir.

Temel bir Hello görevi ekleme

Şimdi proje dosyasına "Merhaba, dünya!" iletisini görüntüleyen temel bir görev ekleyin Ayrıca, görevi çağırmak için varsayılan bir TestBuild hedefi ekleyin.

Temel bir Hello görevi eklemek için

  1. Kök Project düğümde özniteliğini DefaultTargets olarak TestBuilddeğiştirin. Sonuçta elde edilen düğüm şu örneğe Project benzemelidir:

    <Project ToolsVersion="4.0" DefaultTargets="TestBuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    
  2. Aşağıdaki satır içi görevi ekleyin ve etiketin hemen önüne proje dosyasına hedefleyin </Project> .

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

    Bu kod Hello adlı ve parametresi, başvurusu veya Using yönergesi olmayan bir satır içi görev oluşturur. Hello görevi, varsayılan günlük cihazında (genellikle konsol penceresi) bir merhaba iletisi görüntüleyen yalnızca bir kod satırı içerir.

Merhaba görevini çalıştırma

Hello görevini oluşturmak ve çağıran TestBuild hedefini işlemek için Komut İstemi Penceresi'ni kullanarak MSBuild'i çalıştırın.

Hello görevini çalıştırmak için
  1. Başlat'a tıklayın, Tüm Programlar'a tıklayın ve Visual Studio Araçları klasörünü bulun ve Visual Studio Komut İstemi'ne tıklayın.

  2. Komut İstemi Penceresinde proje dosyasını içeren klasörü bulun; bu örnekte D:\InlineTasks\InlineTasks\.

  3. Komut anahtarları olmadan msbuild yazın ve Enter tuşuna basın. Varsayılan olarak, bu InlineTasks.csproj dosyasını oluşturur ve Hello görevini çağıran varsayılan hedef TestBuild'i işler.

  4. Komut İstemi Penceresinde çıkışı inceleyin. Şu satırı görmeniz gerekir:

    Hello, world!

    Dekont

    Merhaba iletisini görmüyorsanız, proje dosyasını yeniden kaydetmeyi deneyin ve ardından Hello görevini çalıştırın.

    Kod düzenleyicisi ile Komut İstemi Penceresi arasında geçiş yaparak proje dosyasını değiştirebilir ve sonuçları hızla görebilirsiniz.

Yankı görevini tanımlama

Bir dize parametresi kabul eden ve dizeyi varsayılan günlük cihazında görüntüleyen bir satır içi görev oluşturun.

Yankı görevini tanımlamak için

  1. Kod düzenleyicisinde, aşağıdaki kodu kullanarak Hello görevini ve TestBuild hedefini değiştirin.

    <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(MessageImportance.High, Text);
        </Code>
      </Task>
    </UsingTask>
    <Target Name="TestBuild">
      <Echo Text="Greetings!" />
    </Target>
    
  2. Komut İstemi Penceresi'nde, komut anahtarları olmadan msbuild yazın ve Enter tuşuna basın. Varsayılan olarak, bu, Echo görevini çağıran varsayılan hedef TestBuild'i işler.

  3. Komut İstemi Penceresinde çıkışı inceleyin. Şu satırı görmeniz gerekir:

    Greetings!

    Bu kod, Echo adlı ve yalnızca bir gerekli giriş parametresi text olan bir satır içi görevi tanımlar. Varsayılan olarak, parametreler System.String türündedir. TestBuild hedefi Echo görevini çağırdığında Text parametresinin değeri ayarlanır.

Ekleyici görevini tanımlama

İki tamsayı parametresi ekleyen ve toplamlarını MSBuild özelliği olarak yayan bir satır içi görev oluşturun.

Ekleyici görevini tanımlamak için

  1. Kod düzenleyicisinde, aşağıdaki kodu kullanarak Echo görevini ve TestBuild hedefini değiştirin.

    <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. Komut İstemi Penceresi'nde, komut anahtarları olmadan msbuild yazın ve Enter tuşuna basın. Varsayılan olarak, bu, Echo görevini çağıran varsayılan hedef TestBuild'i işler.

  3. Komut İstemi Penceresinde çıkışı inceleyin. Şu satırı görmeniz gerekir:

    The sum is 9

    Bu kod, Adder adlı ve iki gerekli tamsayı giriş parametresi olan A ve B ile bir tamsayı çıkış parametresi olan C satır içi görevi tanımlar. Ekleyici görevi iki giriş parametresini ekler ve çıkış parametresindeki toplamı döndürür. Toplam, MSBuild özelliği Sumolarak gösterilir. TestBuild hedefi Adder görevini çağırdığında giriş parametrelerinin değerleri ayarlanır.

RegX görevini tanımlama

Öğe grubunu ve normal ifadeyi kabul eden ve ifadeyle eşleşen dosya içeriğine sahip tüm öğelerin listesini döndüren bir satır içi görev oluşturun.

RegX görevini tanımlamak için

  1. Kod düzenleyicisinde, aşağıdaki kodu kullanarak Adder görevini ve TestBuild hedefini değiştirin.

    <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. Komut İstemi Penceresi'nde, komut anahtarları olmadan msbuild yazın ve Enter tuşuna basın. Varsayılan olarak, bu, RegX görevini çağıran varsayılan hedef TestBuild'i işler.

  3. Komut İstemi Penceresinde çıkışı inceleyin. Şu satırları görmeniz gerekir:

    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
    

    Bu kod, RegX adlı ve şu üç parametreye sahip bir satır içi görevi tanımlar:

  • Expression , eşleştirilecek normal ifade olan bir değere sahip gerekli bir dize giriş parametresidir. Bu örnekte, ifade "public" veya "protected" sözcükleriyle eşleşir.

  • Files , eşleşme için aranacak dosyaların listesi olan bir değere sahip gerekli bir öğe listesi giriş parametresidir. Bu örnekte, Files proje kaynak dosyalarının listelendiği öğeye ayarlanır Compile .

  • Result , normal ifadeyle eşleşen içeriği olan dosyaların listesi olan bir değere sahip bir çıkış parametresidir.

    TestBuild hedefi RegX görevini çağırdığında giriş parametrelerinin değeri ayarlanır. RegX görevi her dosyayı okur ve normal ifadeyle eşleşen dosyaların listesini döndürür. Bu liste, MSBuild öğesi MatchedFilesolarak Result yayılan çıkış parametresi olarak döndürülür.

Ayrılmış karakterleri işleme

MSBuild ayrıştırıcısı satır içi görevleri XML olarak işler. XML'de ayrılmış anlamı olan karakterler (örneğin, "<" ve ">"), .NET kaynak kodu değil XML gibi algılanıp işlenir. gibi Files.Length > 0kod ifadelerine ayrılmış karakterleri eklemek için öğesini yazarak Code içeriğinin bir CDATA ifadesinde bulunmasını sağlayın:

<Code Type="Fragment" Language="cs">
 <![CDATA[

 if (Files.Length > 0)
 {
     // Your code goes here.
 }
 ]]>
</Code>