مهمة الكتابة
توفر "المهام" تعليمات برمجية يتم تشغيلها أثناء عملية البناء. يتم تضمين المهام في الأهداف. مكتبة المهام النموذجية هو المضمنة مع MSBuild، ويمكنك أيضا إنشاء المهام الخاصة بك. ل المزيد المعلومات الخاصة بالمكتبة المهام التي تم تضمينها في MSBuild، راجع مرجع MSBuild المهام.
المهام
تضمين أمثلة للمهام النسخ ، وقم بنسخ ملف واحد أو أكثر، MakeDir ، الذي ينشئ دليلاً، و Csc ، وتجميع #Visual Cملفات تعليمات برمجية المصدر. كل مهمة هو كفئة.NET تطبيق ITaskالواجهة، التي هو في تجميع Microsoft.بنية.Framework.dll.
هناك الثاني من الطرق يمكنك استخدم عند تنفيذ مهمة:
تطبيق ITaskالواجهة مباشرة.
اشتقاق الفئة من فئة المساعد، Task، التي هو في تجميع Microsoft.بنية.Utilities.dll. ITask بتنفيذ المهام ويوفر الافتراضي تطبيقات بعض الأعضاء ITask. بالإضافة إلى ذلك، يتم تسجيل هو أسهل.
في كلتا الحالتين، يجب عليك إضافة إلى الفئة أسلوباً يسمى Execute، أي هو الطريقة التي هو تسمى عند تشغيل مهمة. يأخذ هذا الأسلوب بدون معلمات و إرجاع Booleanالقيمة: trueإذا نجحت مهمة أوfalseإذا فشلت. يظهر المثال التالي مهمة التي لا يوجد إجراء و بإرجاع true.
using System;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
namespace MyTasks
{
public class SimpleTask : Task
{
public override bool Execute()
{
return true;
}
}
}
تشغيل ملف مشروع التالي لهذه مهمة:
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="MyTarget">
<SimpleTask />
</Target>
</Project>
عند تشغيل المهام، يمكنهم أيضا استلام الإدخالات من ملف مشروع إذا قمت بإنشاء.NET خصائص على الفئة مهمة. MSBuildقم بتعيين هذه الخصائص مباشرة قبل استدعاء مهمة'sExecuteأسلوب. إلى إنشاء خاصية سلسلة، استخدم رمز المهمة مثل:
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; }
}
}
}
ملف مشروع التالي لتشغيل هذه مهمة ويقوم بتعيين MyPropertyإلى القيمة:
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="MyTarget">
<SimpleTask MyProperty="Value for MyProperty" />
</Target>
</Project>
تسجيل المهام
إذا كان مشروع هو الانتقال إلى تشغيل المهمة، MSBuildعليك معرفة كيفية بحث تجميع الذي يحتوي على فئة. في مهمة يتم مسجَّل المهام باستخدام عنصر UsingTask (MSBuild).
MSBuildالملف Microsoft.عام.Tasks هو ملف مشروع الذي يحتوي على قائمة من UsingTaskالعناصر التي بتسجيل الجميع المهام التي يتم توفيرها مع MSBuild. Th هو الملف هو المضمنة تلقائياً عند إنشاء كل مشروع. في حالة مسجَّل مهمة التي تم تسجيلها في Microsoft.عام.Tasks أيضا في ملف مشروع الحالي، ملف مشروع الحالي الأولوية؛ بمعنى، يمكنك يمنع مهمة افتراضي الخاص بك المهمة التي لها نفس الاسم.
تلميح |
---|
يمكنك مشاهدة قائمة بالمهام التي يتم توفيرها مع MSBuildبعرض محتويات Microsoft.عام.Tasks. |
رفع أحداث من مهمة
إذا كانت مهمة مشتقة من Taskفئة المساعد، يمكنك استخدام أي من الأساليب التالية للمساعدة تشغيل Taskالفئة إلى رفع الأحداث التي سيتم حظر وعرضها بواسطة أي loggers المسجل:
public override bool Execute()
{
Log.LogError("messageResource1", "1", "2", "3");
Log.LogWarning("messageResource2");
Log.LogMessage(BuildEventImportance.High, "messageResource3");
...
}
إذا كانت مهمة يطبق ITaskيمكن مازال يمكنك رفع هذه الأحداث مباشرة، لكن يجب استخدام واجهة IBuildEngine. يظهر المثال التالي مهمة التي تقوم بتنفيذ ITask ورفع حدث مخصص:
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;
}
}
طلب "مهمة معلمات" أن التعيين
يمكنك وضع علامة على بعض خصائص مهمة المرغوبة“ ” حيث يجب أن أي ملف مشروع الذي يقوم بتشغيل مهمة بتعيين قيم لهذه الخصائص أو فشل الإنشاء. يطبق the [Required] سمة إلى the .NET خاصية في your مهمة كـ follows:
private string requiredProperty;
[Required]
public string RequiredProperty
{
get { return requiredProperty; }
set { requiredProperty = value; }
}
The [Required] سمة هو defined بواسطة RequiredAttribute في the Microsoft.Build.Framework مساحة الاسم.
المثال
الوصف
This following #Visual C فئة demonstrates a مهمة deriving من the Task helper فئة. This مهمة إرجاع true, indicating that it succeeded.
الرمز
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;
}
}
}
المثال
الوصف
This following #Visual C فئة demonstrates a مهمة implementing the ITask واجهة. This مهمة إرجاع true, indicating that it succeeded.
الرمز
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;
}
}
}
المثال
الوصف
This #Visual C فئة demonstrates a مهمة that derives من the Task helper فئة. It has a مطلوب سلسلة خاصية, و raises an حدث that هو displayed بواسطة الجميع مسجَّل loggers.
الرمز
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;
}
}
}
المثال
الوصف
The following مثال shows a ملف مشروع invoking the السابق مثال مهمة, SimpleTask3.
الرمز
<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>