Aracılığıyla paylaş


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

t9883dzc.collapse_all(tr-tr,VS.110).gifDescription

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.

t9883dzc.collapse_all(tr-tr,VS.110).gifKod

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

t9883dzc.collapse_all(tr-tr,VS.110).gifDescription

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.

t9883dzc.collapse_all(tr-tr,VS.110).gifKod

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

t9883dzc.collapse_all(tr-tr,VS.110).gifDescription

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.

t9883dzc.collapse_all(tr-tr,VS.110).gifKod

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

t9883dzc.collapse_all(tr-tr,VS.110).gifDescription

Aşağıdaki örnek, önceki örnek görev SimpleTask3 çağrılırken bir proje dosyasını gösterir.

t9883dzc.collapse_all(tr-tr,VS.110).gifKod

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

Ayrıca bkz.

Diğer Kaynaklar

MSBuild görevi başvurusu

MSBuild görevi başvurusu