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:
Visual Studio kullanarak bir MSBuild proje dosyası oluşturun.
Satır içi görevi oluşturmak için Visual Studio'daki proje dosyasını değiştirin.
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
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.Proje dosyasını oluşturmak için Tamam'a tıklayın.
Çözüm Gezgini InlineTasks proje düğümüne sağ tıklayın ve ardından Projeyi Kaldır'a tıklayın.
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
Kök
Project
düğümde özniteliğiniDefaultTargets
olarakTestBuild
değiştirin. Sonuçta elde edilen düğüm şu örneğeProject
benzemelidir:<Project ToolsVersion="4.0" DefaultTargets="TestBuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
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>
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
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.
Komut İstemi Penceresinde proje dosyasını içeren klasörü bulun; bu örnekte D:\InlineTasks\InlineTasks\.
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.
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
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>
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.
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
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>
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.
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
Sum
olarak 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
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>
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.
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ırCompile
.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
MatchedFiles
olarakResult
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 > 0
kod 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>