‏‫MSBuild موضعي المهام

عادة ما يتم تاريخ الإنشاء المهام ‏‫MSBuild بواسطة التحويل البرمجي لفئة التي تطبق ITaskالواجهة. لمزيد من المعلومات، راجع مهام ‏‫MSBuild.

في إطار عمل.NET الإصدار 4، يمكنك إنشاء مهام موضعي في ملف مشروع. ليس لديك إلى إنشاء تجميع منفصل لاستضافة مهمة. وهذا يسهل إلى الاحتفاظ بمقطع صوتي تعليمات برمجية المصدر وأسهل إلى نشر مهمة. تعليمات برمجية المصدر هو المتكاملة في برنامج نصي.

البنية للمهام موضعي

مهمة عمل مضمنة هو يحتويها عنصر UsingTask. موضعي مهمة و UsingTaskعادة يتم تضمينها في ملف.targets العنصر الذي يحتوي عليه واستيرادها إلى ملفات مشروع الأخرى كما هو مطلوب. هنا هو مهمة أساسية مضمنة. لاحظ أن يفعل شيئا.

<Project ToolsVersion="4.0" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
  <!-- This simple inline task does nothing. -->
  <UsingTask
    TaskName="DoNothing"
    TaskFactory="CodeTaskFactory"
    AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
    <ParameterGroup />
    <Task>
      <Reference Include="" />
      <Using Namespace="" />
      <Code Type="Fragment" Language="cs">
      </Code>
    </Task>
  </UsingTask>
</Project>

UsingTaskعنصر في المثال السمات الثلاث التي تصف مهمة موضعي المصنع مهمة تجميع it.

  • TaskNameسمة أسماء مهمة، في هذه الحالة، من DoNothing.

  • TaskFactoryأسماء سمة فئة التي تطبق موضعي المهام المصنع.

  • AssemblyFileيعطي سمة الالموقع موضعي المهام المصنع. بدلاً من ذلك، يمكنك استخدام AssemblyNameسمة لتحديد اسم مؤهل بشكل كامل موضعي المهام فئة المصنع، الذي يوجد عادة في ذاكرة التخزين المؤقتة للتجميع العمومي (GAC).

العناصر المتبقية للمهمة DoNothing فارغ ويتم توفيرها لتوضيح ترتيب وبنية المهام المضمنة. A المزيد قوة مثال هو presented later في this موضوع.

  • The ParameterGroup عنصر هو اختياري. When specified, it declares the معلمات for the مهمة. For المزيد معلومات حول إدخال و إخراج معلمات, see "إدخال و إخراج معلمات" later في this موضوع.

  • The Task عنصر describes و يحتوي على the مهمة المصدر تعليمات برمجية.

  • The Reference عنصر specifies مراجع إلى the .NET تجميعات that you are using في your تعليمات برمجية. This هو equivalent إلى إضافة a مرجع إلى a مشروع في ‏‫Visual Studio. The Include سمة specifies the مسار of the مشار إليها تجميع.

  • The Using عنصر lists the مساحات الاسم that you want إلى الوصول. This resembles the Using كشف في Visual C#. The Namespace سمة specifies the مساحة الاسم إلى تضمين.

Reference و Using عناصر are اللغة-agnostic. موضعي tasks can be written في أي واحد of the supported .NET CodeDom languages, for مثال, Visual أساسى, Visual C#, و JScript.

ملاحظة

عناصر contained بواسطة the Task عنصر are specific إلى the مهمة factory, في this حالة, the تعليمات برمجية مهمة factory.

تعليمات برمجية عنصر

The أخير فرع عنصر إلى appear within the Task عنصر هو the Code عنصر. Codeيحتوي على عنصر أو تحديد موقع تعليمات برمجية الذي تريد أن يتم التحويل البرمجي في مهمة. ما تضعه في Codeعنصر يعتمد تشغيل كيفية إلى كتابة مهمة.

Languageتحدد سمة اللغة الذي تعليمات برمجية هو مكتوبة. قيم المقبولة هي cs C# و VB Visual أساسى و js ل JScript.

Typeتحدد سمة النوع من تعليمات برمجية التي هو الموجودة Codeالعنصر.

  • إذا كانت القيمة ثم Typeهو فئة Codeعنصر يحتوي على تعليمات برمجية لفئة مشتقة من ITaskواجهة.

  • إذا القيمة Typeهو الأسلوب، ثم تعليمات برمجية تعرف يمنع Executeطريقة ITaskالواجهة.

  • إذا القيمة Typeهو التجزئة، ثم تعليمات برمجية تعرف المحتويات Executeالأسلوب، ولكن لا توقيع أو returnالعبارة.

تعليمات برمجية نفسه يظهر بين <![CDATA[العلامة ]]>العلامة. لأن تعليمات برمجية هو في مقطع CDATA، لم يكن لديك إلى القلق بشأن escaping أحرف محجوزة، على سبيل المثال، "<" او">".

بدلاً من ذلك، يمكنك استخدام Sourceالسمة الخاصة Codeالعنصر لتحديد الالموقع ملف الذي يحتوي على تعليمات برمجية للمهمة. التعليمة البرمجية في المصدر ملف يجب أن تكون من النوع المحدد بواسطة Typeالسمة. إذا Sourceسمة موجوداً، الافتراضي القيمة Typeهو فئة. إذا Sourceهو عدم تقديم الافتراضي القيمة هو التجزئة.

ملاحظة

عند تعريف الفئة مهمة في المصدر ملف، يجب أن يوافق اسم الفئة مع العنصر UsingTaskTaskName سمة للتابع لها.

شبكة الترحيب

هنا هو مهمة مضمنة أكثر فعالية. dهوplays مهمة HelloWorld "مرحبا، العالم!" تشغيل جهاز تسجيل الأخطاء الافتراضية، التي هو عادة وحدة تحكم النظام أو الإطار إخراج Studio Vهوual . Referenceعنصر في المثال هو المضمنة فقط للتوضيح.

<Project ToolsVersion="4.0" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
  <!-- This simple inline task displays "Hello, world!" -->
  <UsingTask
    TaskName="HelloWorld"
    TaskFactory="CodeTaskFactory"
    AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
    <ParameterGroup />
    <Task>
      <Reference Include="System.Xml.dll"/>
      <Using Namespace="System"/>
      <Using Namespace="System.IO"/>
      <Code Type="Fragment" Language="cs">
<![CDATA[
// Display "Hello, world!"
Log.LogError("Hello, world!");
]]>
      </Code>
    </Task>
  </UsingTask>
</Project>

يمكنك حفظ مهمة HelloWorld في ملف الذي يسمى HelloWorld.targets، ومن ثم استدعاء من مشروع كالتالي.

<Project ToolsVersion="4.0" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="HelloWorld.targets" />
  <Target Name="Hello">
    <HelloWorld />
  </Target>
</Project>

و إخراج معلمات إدخال

موضعي المعلمات مهمة هي العناصر التابعة ParameterGroupالعنصر. تأخذ كل معلمة اسم العنصر الذي يحدد ذلك. التعليمة البرمجية التالية بتعريف معلمة Text.

<ParameterGroup>

<Text />

</ParameterGroup>

معلمات قد يكون واحد أو المزيد هذه السمات:

  • Requiredهو السمة الاختيارية تلك هوخطأ بشكل افتراضي. إذا كان صحيحاً ، ثم معلمة هو المطلوبة والتي يجب أن تكون القيمة معطاة قبل استدعاء مهمة.

  • ParameterTypeهو السمة الاختيارية تلك هوالنظام.سلسلة بشكل افتراضي. قد يتم تعيين إلى أي نوع المؤهل بالكامل هو عنصر أو القيمة يمكن تحويلها إلى و من سلسلة باستخدام النظام.محول.ChangeType. (أي نوع في كلمات غير ذلك، يمكن أن يمرر إلى و من مهمة خارجية.)

  • Outputهو السمة الاختيارية تلك هوخطأ بشكل افتراضي. إذا كان صحيحاً ، ثم معلمة يجب أن تكون القيمة معطاة قبل الخروج من أسلوب التنفيذ.

على سبيل المثال،

<ParameterGroup>

<Expression Required="true" />

<Files ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />

<Tally ParameterType="System.Int32" Output="true" />

</ParameterGroup>

تعرف هذه المعلمات الثلاث:

  • Expressionهو معلمة إدخال مطلوب من النوع النظام.سلسلة.

  • Filesهو lهوt عنصر مطلوب إدخال معلمة.

  • Tallyمعلمة إخراج نوع النظام.Int32.

إذا Codeعنصر Typeسمة من التجزئة أو أسلوب ، ثم الخصائص يتم إنشاؤها تلقائياً لكل معلمة. وإلا، خصائص يجب تعريف بوضوح في تعليمات برمجية المصدر للمهمة، ويجب أن تتوافق مع ملفات تعريف المعلمات الخاصة بها.

المثال

مهمة التالية مضمنة باستبدال كل تواجد لرمز مميز في الملف المحدد بالقيمة.

<Project xmlns='https://schemas.microsoft.com/developer/msbuild/2003' ToolsVersion="4.0">

  <UsingTask TaskName="TokenReplace" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
    <ParameterGroup>
      <Path ParameterType="System.String" Required="true" />
      <Token ParameterType="System.String" Required="true" />
      <Replacement ParameterType="System.String" Required="true" />
    </ParameterGroup>
    <Task>
      <Code Type="Fragment" Language="cs"><![CDATA[
string content = File.ReadAllText(Path);
content = content.Replace(Token, Replacement);
File.WriteAllText(Path, content);

]]></Code>
    </Task>
  </UsingTask>

  <Target Name='Demo' >
    <TokenReplace Path="C:\Project\Target.config" Token="$MyToken$" Replacement="MyValue"/>
  </Target>
</Project>

راجع أيضًا:

المهام

الإرشادات التفصيلية: قم بإنشاء المهام موضعي

المبادئ

مهام ‏‫MSBuild