Görev yazma
Görevler oluşturma işlemi sırasında çalıştırılan kod sağlar. Görevleri, hedefleri içinde yer alır. Sık kullanılan görevler içeren bir kitaplık ile birlikte MSBuild, ve kendi görevlerini de oluşturabilirsiniz. İçerdiği görevler kitaplığı hakkında daha fazla bilgi için MSBuild, bkz: MSBuild görevi başvurusu.
Görevler
Görevleri örnekleri arasında kopya, bir veya daha fazla dosya kopyalar MakeDir, bir dizin oluşturur ve Csc, hangi derlerken Visual C# kaynak kodu dosyaları. Her görev olarak uygulanan bir.Uygulayan net sınıf ITask Microsoft.Build.Framework.dll derlemede tanımlı arabirim.
Bir görevi uygularken kullanabileceğiniz iki yaklaşım vardır:
Implement ITask doğrudan arabirim.
Sınıfınızın yardımcı sınıfından türer Task, Microsoft.Build.Utilities.dll derlemede tanımlı. Görev ITask uygulayan ve bazı ITask üyeleri varsayılan uygulamaları sağlar. Ayrıca, günlük daha kolaydır.
Her iki durumda da adlı bir yöntem Sınıfınıza eklemeniz gerekir Execute, görev çalıştırıldığında çağrılır yöntemi olduğu. Bu yöntem, herhangi bir parametre alır ve verir bir Boolean değeri: true görev başarılı ise veya false ve başarısız olduğunda. Aşağıdaki örnek, herhangi bir eylem yapmaz ve döndüren bir görev gösterir true.
using System;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
namespace MyTasks
{
public class SimpleTask : Task
{
public override bool Execute()
{
return true;
}
}
}
Bu görevi aşağıdaki proje dosyasını çalıştırır:
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="MyTarget">
<SimpleTask />
</Target>
</Project>
Görevleri çalıştırmak, oluşturursanız, bunlar da giriş proje dosyasından alabilirsiniz.net özellikleri görev sınıfı. MSBuildGörevin hemen çağırmadan önce bu özellikleri ayarlar Execute yöntemi. Bir dize özelliği oluşturmak için görev kodu aşağıdaki gibi kullanın:
using System;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
namespace MyTasks
{
public class SimpleTask : Task
{
public override bool Execute()
{
return true;
}
private string myProperty;
public string MyProperty
{
get { return myProperty; }
set { myProperty = value; }
}
}
}
Bu görev ve ayarlar dosyasını çalıştırır aşağıdaki proje MyProperty verilen değer:
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="MyTarget">
<SimpleTask MyProperty="Value for MyProperty" />
</Target>
</Project>
Görevleri kaydediliyor
Bir görevi çalıştırmak için bir proje alınacaksa MSBuild görev sınıfını içeren derleme bulma bilmeniz gerekir. Görevleri kullanarak kayıtlı UsingTask öğesi (MSBuild).
MSBuild Microsoft.Common.Tasks dosyasıdır listesini içeren bir project dosyası UsingTask ile sağlanan tüm görevleri kaydettiremiyor öğeleri MSBuild. Bu dosya otomatik olarak her proje oluştururken bulunur. Microsoft.Common.Tasks içinde kayıtlı bir görev geçerli proje dosyasında kayıtlı ise, geçerli proje dosyası önceliklidir; diğer bir deyişle, aynı ada sahip kendi görev varsayılan görevle kılabilirsiniz.
İpucu
İle sağlanan görev listesini görebilirsiniz MSBuild Microsoft.Common.Tasks içeriğini görüntüleyerek.
Görevden olaylarını tetiklemeye yönelik
Sizin göreviniz türetildiği, Task yardımcı sınıfı kullanabileceğiniz aşağıdaki yardımcı yöntemlerden herhangi birini Task yakalandı ve herhangi bir kayıtlı loggers tarafından görüntülenen olaylar yükseltmek için sınıf:
public override bool Execute()
{
Log.LogError("messageResource1", "1", "2", "3");
Log.LogWarning("messageResource2");
Log.LogMessage(MessageImportance.High, "messageResource3");
...
}
Sizin göreviniz kullanılıyorsa, ITask doğrudan, bu tür olayların hala yükseltebilirsiniz ancak IBuildEngine arabirimi kullanmanız gerekir. Aşağıdaki örnek, ITask uygulayan ve özel bir olayı harekete geçiren bir görev gösterir:
public class SimpleTask : ITask
{
private IBuildEngine buildEngine;
public IBuildEngine BuildEngine
{
get{ return buildEngine; }
set{ buildEngine = value; }
}
public override bool Execute()
{
TaskEventArgs taskEvent =
new TaskEventArgs(BuildEventCategory.Custom,
BuildEventImportance.High, "Important Message",
"SimpleTask");
BuildEngine.LogBuildEvent(taskEvent);
return true;
}
}
Ayarlanacak gerektiren görev parametreleri
Böylece görevin çalıştırdığı herhangi bir proje dosyasını bu özelliklere iliþkin deðerleri ayarlamak gerekir veya oluşturma işlemi başarısız olur, belirli görev özellikleri "gerekli" olarak işaretleyebilirsiniz. Uygulama [Required] için öznitelik.Görev özelliği gibi net:
private string requiredProperty;
[Required]
public string RequiredProperty
{
get { return requiredProperty; }
set { requiredProperty = value; }
}
[Required] Özniteliği tarafından tanımlanan RequiredAttribute , Microsoft.Build.Framework ad.
Örnek
Description
Bu aşağıdaki Visual C# sınıfı gösterir den türeyen bir görev Task yardımcı sınıfı. Bu görev verir true, onu başarılı olduğunu gösteren.
Kod
using System;
using Microsoft.Build.Utilities;
namespace SimpleTask1
{
public class SimpleTask1: Task
{
public override bool Execute()
{
// This is where the task would presumably do its work.
return true;
}
}
}
Örnek
Description
Bu aşağıdaki Visual C# sınıfı gösteren bir görev yürüten ITask arabirimi. Bu görev verir true, onu başarılı olduğunu gösteren.
Kod
using System;
using Microsoft.Build.Framework;
namespace SimpleTask2
{
public class SimpleTask2: ITask
{
//When implementing the ITask interface, it is necessary to
//implement a BuildEngine property of type
//Microsoft.Build.Framework.IBuildEngine. This is done for
//you if you derive from the Task class.
private IBuildEngine buildEngine;
public IBuildEngine BuildEngine
{
get
{
return buildEngine;
}
set
{
buildEngine = value;
}
}
// When implementing the ITask interface, it is necessary to
// implement a HostObject property of type Object.
// This is done for you if you derive from the Task class.
private Object hostObject;
public Object HostObject
{
get
{
return hostObject;
}
set
{
hostObject = value;
}
}
public bool Execute()
{
// This is where the task would presumably do its work.
return true;
}
}
}
Örnek
Description
Bu Visual C# sınıfın türetildiği bir görev gösterir Task yardımcı sınıfı. Zorunlu dize özelliği vardır ve tüm kayıtlı loggers tarafından görüntülenen olay yükseltir.
Kod
using System;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
namespace SimpleTask3
{
public class SimpleTask3 : Task
{
private string myProperty;
// The [Required] attribute indicates a required property.
// If a project file invokes this task without passing a value
// to this property, the build will fail immediately.
[Required]
public string MyProperty
{
get
{
return myProperty;
}
set
{
myProperty = value;
}
}
public override bool Execute()
{
// Log a high-importance comment
Log.LogMessage(MessageImportance.High,
"The task was passed \"" + myProperty + "\".");
return true;
}
}
}
Örnek
Description
Aşağıdaki örnek, önceki örnek görev SimpleTask3 çağrılırken bir proje dosyasını gösterir.
Kod
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="SimpleTask3.SimpleTask3"
AssemblyFile="SimpleTask3\bin\debug\simpletask3.dll"/>
<Target Name="MyTarget">
<SimpleTask3 MyProperty="Hello!"/>
</Target>
</Project>