إنشاء تطبيق WPF (WPF)

تطبيقات Windows Presentation Foundation (WPF) يمكن بناءها كملفات تنفيذية .NET Framework (.exe) مكتبات (.dll) أو تركيبة من كلا النوعين من التجميعات . هذا الموضوع مبدئياً يوضح كيفية إنشاء تطبيقات WPF بسيطة من موجه الأوامر، قبل إظهار كيفية رفع WPF لتوسعة من Microsoft build engine (MSBuild) لإنشاء تطبيقات أكثر تعقيداً. ينتهي هذا الموضوع عن طريق توفير مناقشة تفصيلية لخطوات المفتاح في عملية الانشاء MSBuild .

يشتمل هذا الموضوع على الأقسام التالية.

  • إنشاء تطبيق WPF باستخدام ترجمة سطر الأوامر
  • إنشاء تطبيق WPF باستخدام MSBuild
  • ملفات Project MSBuild لـ WPF
  • إنشاء مشروع MSBuild لـ WPF باستخدام Visual Studio
  • إنشاء مشروع MSBuild لـ WPF
  • خط إنشاء Windows Presentation Foundation
  • دعم البناء التزايدي
  • موضوعات ذات صلة

إنشاء تطبيق WPF باستخدام ترجمة سطر الأوامر

تطبيق WPF المكتوب بشكل كامل في التعليمات البرمجية (لا توجد العلامات) يمكن انشاءه ببرنامج التحويل البرمجي لسطر الأوامر. على سبيل المثال، ضع في الاعتبار التطبيق المستقل#C WPF الذي يتضمن ملفات مصدر التعليمات البرمجية التالية:

  • ملف تعريف تطبيق (app.cs).

  • إطار (mainwindow.cs).

هذا التطبيق يمكن أن يتم إنشاؤه باستخدام برنامج التحويل البرمجي #C و csc.exe ، من موجه الأوامر، كما في المثال التالي:

csc.exe
  /out:WPFApplication.exe
  /target:winexe 
  app.cs mainwindow.cs 
  /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\presentationframework.dll" 
  /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\windowsbase.dll" 
  /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\presentationcore.dll"

. في هذا المثال:

  • المعلم /out يقوم بتعيين اسم التجميع القابل للتنفيذ (WPFApplication.exe) الذي تم انشاؤه.

  • إن معلم /target يقوم بتحديد نوع التجميع الذي تم تحويله برمجيًا ( Microsoft Windows القابل للتنفيذ).

  • ملفات مصدر التعليمات البرمجية #C التي تشكل التطبيق (app.cs و mainwindow.cs)

  • معلم /reference الذي يعرّف التجميعات المشار إليها التي تقوم بتطبيق الأنواع المستخدمة بواسطة التطبيق.

يمكن استخدام التحويل البرمجي لسطر الأوامر لإنشاء التطبيقات بتعقيد أكثر على الرغم من أن المحول البرمجي لا يعتمد تطبيقات WPF التي تتضمن مصدر التعليمات البرمجية Extensible Application Markup Language (XAML) . علاوة على ذلك، التحويل البرمجي لسطر الأمر لا يعتمد نطاق كامل لمتطلبات البنية لتطبيقات WPF النموذجية، بما فيها إدارة تكوين و جيل بيان ClickOnce . لدعم هذه و متطلبات الانشاء الأكثر تعقيداً الأخرى ، WPF يتكامل مع وبمتد لــ MSBuild.

ملاحظةملاحظة

للحصول على مزيد من المعلومات حول التحويل البرمجي لسطر الأوامر ، انظر إنشاء سطر الأوامر باستخدام csc.exe أو الإنشاء من سطر الأوامر (Visual Basic).

إنشاء تطبيق WPF باستخدام MSBuild

MSBuild هي تقنية قوية ، قابلة للتوسعة التي تم تقديمها معNET Framewor.. أساس تقنية MSBuild يتم تطبيقها عبر التجميعات التي تم وصفها في الجدول التالي

المجموعة

الوصف

Microsoft.Build.Engine.dll

يقرأ و يقوم بمعالجة ملفات مشروع MSBuild .

Microsoft.Build.Tasks.dll

يقوم بتنفيذ الوظائف الشائعة لكافة مشروعات MSBuild بما في ذلك استدعاء المحول البرمجي لسطر الأوامر (على سبيل المثال، csc.exe لـ #C vbc.exe لـ Visual Basic).

Microsoft.Build.Utilities.dll

تقوم بالكشف عن فئات الأداة المساعدة التي تقوم بتوسيع MSBuild مع وظيفة الإنشاء المخصصة .

Microsoft.Build.Framework.dll

يطبق الواجهات التي تعرّف كيفية تفاعل وظيفة MSBuild مع مشغل MSBuild .

Microsoft.Build.Conversion.dll

يدعم التحويل من Microsoft Visual Studio .NET 2002 القديمة و تنسيق ملف المشروع Microsoft Visual Studio .NET 2003 إلى تنسيق ملف المشروعMicrosoft Visual Studio 2005 MSBuild

ملاحظةملاحظة

للحصول على مزيد من المعلومات حول تجميعات MSBuild ، راجع مرجع MSBuild.

ملفات Project MSBuild لـ WPF

التجميعات التي تشكل MSBuild يشار لها كمشغل MSBuild . لإنشاء تطبيقات ، مشغل MSBuild عادةً يتطلب المعلومات التالية:

  • مراجع ملف مصدر لتعليمات برمجية .

  • مراجع تجميعات اعتمادية .

  • تفاصيل التكوين.

  • متطلبات الانشاء.

لكي تتم معالجته بواسطة MSBuild ، يتم حزم هذه المعلومات في ملفات XML التي تتوافق مع مخطط MSBuild المخصص (راجع مرجع مخطط ملف Project MSBuild). بعض الملفات تعرف باسم ملفات المشروع MSBuild . يكون التالي ملف مشروع MSBuild لاصدار خاص بتطبيق WPF الذي قمنا ببناءه سابقاً باستخدام محول برمجي لسطر أوامر بالإضافة إلى ملفات مصدر التعليمات البرمجية Extensible Application Markup Language (XAML) .

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
     <PropertyGroup>
         <AssemblyName>WPFApplication</AssemblyName>
         <OutputType>winexe</OutputType>
     </PropertyGroup>
     <ItemGroup>
         <Reference Include="System" />
         <Reference Include="WindowsBase" />
         <Reference Include="PresentationCore" />
         <Reference Include="PresentationFramework" />
     </ItemGroup>
     <ItemGroup>
         <ApplicationDefinition Include="App.xaml" />
         <Compile Include="App.xaml.cs" />
         <Page Include="MainWindow.xaml" />
         <Compile Include="MainWindow.xaml.cs" />
     </ItemGroup>
     <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
     <Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" />
</Project>

يحتوي هذا المثال على العناصر المشتركة لمعظم ملفات المشروع MSBuild ، بما في ذلك علامةProject الخصائص، و العناصر و أهدافو المهام .

عنصر المشروع

كما هو محدد بواسطة مخطط ملف مشروع MSBuild ، ملف المشروع MSBuild هو ملف XML بــ Project كعنصر المستوى الأعلى:

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

العنصر Project هو المكان الذي فيه يبدأ المشغل MSBuild بمعالجة ملف المشروع. لتحديد إصدار MSBuild الذي يستهدفه ملف المشروع MSBuild , يتم توفير تعريف مساحة الاسم XML المناسبة.

Properties

الخصائص هي متغيرات مستخدمة لكلا من تكوين مشروعات MSBuild و توفير معلومات خاصة بالبناء لمشغل MSBuild . يتم تضمين الخصائص داخل عناصر PropertyGroup ، كما هو موضح في المثال التالي

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
     <PropertyGroup>
         <AssemblyName>WPFApplication</AssemblyName>
         <OutputType>winexe</OutputType>
     </PropertyGroup>
     ...
</Project>

بعض الخصائص، مثل AssemblyName و OutputType ، شائعة لكافة أنواع التطبيقات ويتم وصفها في خصائص المشروع MSBuild الشائعة. خصائص MSBuild المحددة لــ WPF مسرودة في الجدول التالي.

الخصائص

الوصف

OutputType

تقوم بتحديد نوع التجميع الذي يتم إنشاءه و هي واحدة من القيم التالية:

  • winexe: تقوم ببناء ملفات قابلة للتنفيذ (.exe). تطبيقات مستقلة و تطبيقات XBAP يتم تكوينها مع ذلك النوع من الإخراج .

  • library: تقوم بإنشاء مكتبة تجميعات (.dll). يتم تكوين التجميعات المشتركة ومكتبات عناصر التحكم المخصصة بذلك النوع من الإخراج .

HostInBrowser

تقوم بتحديد ما إذا كان تطبيق WPF تتم استضافته في مستعرض وهي إحدى القيم التالية:

  • true: تقوم بإنشاءXBAP ، والذي يتضمن تجميع التطبيق الرئيسي (.exe) بيان النشر ( applicationName.xbap ) ، و بيان نشر ( applicationName . exe.manifest).

  • false: يقوم بإنشاء تطبيق مستقل .

إذا كان HostInBrowser هو true ، فإن OutputType يجب أن يكون winexe.

Install

تحديد ما إذا كان XBAPمثبت تشغيل العميل. Installيمكن أن تكون أماtrueأوfalse، و له القيمة المقابلHostInBrowser.

GenerateManifests

يقوم بتحديد ما إذا كان التطبيق المستقل يمكن نشره باستخدام نشر ClickOnce ، و هو واحد من القيم التالية:

  • true: يقوم بإنشاء التطبيق الرئيسي القابل للتنفيذ ، بيان النشر (. applicationName .application ) ، و بيان التطبيق ( applicationName . exe.manifest).

  • false: يقوم بإنشاء فقط الملف القابل للتنفيذ (.exe).

GenerateManifests يُستخدم فقط عندماInstall يحتوي على القيمةtrue.

UICulture

تحدد الاعدادات المحلية و التي لها ستم إنشاء التجميع. عند التحديد ، الملفات المعرفة كـعناصر المشروع Resource و الموارد الخاصة باللغة يتم ترجمتها في تجميع القمر صناعي من أجل الإعدادات المحلية المطلوبة. المحتوى حيادي اللغة على الناحية الأخرى، يتم ترجمته برمجياً في التجميع الرئيسي. افتراضياً، لا تكون التطبيقات مترجمة وبالتالي يتم تضمين ملفات الموارد في التجميع الرئيسي.

ملاحظةملاحظة
عند تعيين UICulture ، يجب تحديد لغة المورد المحايدة باستخدام NeutralResourcesLanguageAttribute.يجب إضافة هذه السمة إلى ملف AssemblyInfo الخاص بتطبيق WPF .

العنصر

تكون العناصر مدخلات MSBuild التي تتم معالجتها بواسطة مشغل MSBuild أثناء عملية الإنشاء. يتم تضمين العناصر داخل عنصر ItemGroup .

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
     ...
     <ItemGroup>
         <Reference Include="System" />
         <Reference Include="WindowsBase" />
         <Reference Include="PresentationCore" />
         <Reference Include="PresentationFramework" />
     </ItemGroup>
     <ItemGroup>
         <ApplicationDefinition Include="App.xaml" />
         <Compile Include="App.xaml.cs" />
         <Page Include="MainWindow.xaml" />
         <Compile Include="MainWindow.xaml.cs" />
     </ItemGroup>
     ...
</Project>

يمكن تكوين نوع عنصر ما باستخدام بيانات التعريف؛ في المثال السابق، يتم تكوين مراجع تجميع ك Referenceعناصر، والتعليمات البرمجية المصدر الملفات التي تم تكوينها ك Compileعناصر. Reference and Compile items are common to all NET Framewor. applications and are described further in عناصر مشروع MSBuild الشائعة.

عناصر WPF - المختصة لها MSBuild يتم سردها في الجدول التالي.

الخصائص

الوصف

ApplicationDefinition

يعرف XAMLترميز ملف الذي يحتوي على تعريف تطبيق ( XAMLترميز ملف العنصر الجذر الخاص به هو Application). ApplicationDefinitionهو mوatory عندInstallistrueوOutputTypeiswinexe. التطبيق WPF وبالتالي مشروع MSBuild يمكن أن يكون لديه ApplicationDefinition واحد .

Page

يعرف XAMLعلامات الملف محتواه هو محولها في تنسيق ثنائي، وتم محولها برمجياً في عنصر تجميع. Pageعادة ما يتم تنفيذ عناصر في التزامن مع تعليمات برمجية-behفيd فئة.

عناصر Page الأكثر شيوعاً هي ملفات XAML حيث عناصر المستوى الأعلى واحد من الإجراءات التالية:

Resource

يعرّف ملف مورد الذي يتم تحويله برمجياً إلى تجميع تطبيق. كما ذكر سابقاً، عمليات UICulture عناصر Resource .

Content

يعرّف ملف محتوى الذي يتم توزيعه مع أحد التطبيقات. بيانات التعريف التي تصف ملف المحتوى يتم ترجمتها إلى التطبيق (باستخدام AssemblyAssociatedContentFileAttribute).

SplashScreen

يعرّف ملف صورة الذي يُستخدم لإطار بدء التشغيل الخاص بالتطبيق. ينشئ التجميع PresentationBuildTasks تعليمات برمجية في App.g.cs أو Application.g.vb الذي ينشئ مثيل SplashScreen ويعرضها أثناء تحميل التطبيق . هذا العنصر يتوفر بدء في Visual Studio 2008 SP1.

الأهداف

يقوم باستهداف كيفية انشاء المشروعات و استنادها إلى كلا من الخصائص والعناصر. تطبيق WPF يجب أن يحتوي على هدف مختص باللغة و هدف مختص بــ WPF-.

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
     ...
     <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
     <Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" />
</Project>

أهداف هي ملفات مفصولة تنتهي بملحق .targets. ملفات الهدف التي يتم تضمينها بــ NET Framewor. يتم تثبيتها في الموقع التالي:

%WINDIR%\Microsoft.NET\Framework\vX.X.X

ينشئ الهدف الخاص بلغة معينة خاصة مصدر تعليمات برمجية خاص بلغة معينة. الهدف الخاص بلغة معينة لــ #C هو Microsoft.CSharp.targets Microsoft.VisualBasic.targets لـ Visual Basic كل من هذه الأهداف يتم اشتقاقها من و تقوم بتوسيع الهدف Microsoft.Common.targets الذي ينفذ مجمعة عمل البناء الشائع, الغير معتمد على اللغة. للحصول على مزيد من المعلومات حول أهداف MSBuild الخاصة بلغة معينة و الشائعة ، راجع ملفات .Targets MSBuild.

عمل الانشاء الخاص بـWPF يتم تنفيذه بواسطة الهدف Microsoft.WinFX.targets. يشتمل هذا العمل على التحويل البرمجي للعلامات XAML ، بيان الجيل لـتطبيقات XBAP ، ومعالجة ملفات محتوى و مورد WPF .

المهام

المهمة هي الفئة التي تقوم بتنفيذ اجراء بيان معين . يتم تجميع واحدة أو أكثر من المهام من قبل الأهداف لتعريف عملية إنشاء; عندما يقوم MSBuild بمعالجة هدف ، يقوم بتنفيذ المهام التي تم احتواءها بواسطة الهدف. يتم تنفيذ المهام التي يتم استخدامها بواسطة الأهداف العامة و الخاصة بلغة معينة عن طريق التجميع Microsoft.Build.Tasks والمهام الخاصة بـ WPF يتم تنفيذها بواسطة التجميع PresentationBuildTasks.

أهداف توفر الدعم لإنشاء كافة تطبيقات WPF القياسية. من الممكن أيضاً استخدام تركيبات بديلة من المهام لتطبيق سلوك بناء مخصص. على سبيل المثال، مهمة MSBuild GetWinFXPathالتالية يتم استخدامها للكشف عن المسار الأصلي لوقت تشغيل NET Framewor. الذي يعتمد على ما إذا كان يتم تنفيذ المهمة على معالج 64 بت:

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
     <UsingTask 
         TaskName="Microsoft.Build.Tasks.Windows.GetWinFXPath" 
         AssemblyFile="C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationBuildTasks.dll" />
     <Target Name="GetWinFXPathTask">
         <GetWinFXPath
             WinFXNativePath="c:\DOTNet3Native" 
             WinFXWowPath="c:\DOTNet3WowNative" />
     </Target>
     <Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" />
</Project>

للحصول على مزيد من المعلومات حول مهام MSBuild الشائعة، راجع مرجع MSBuild المهام.

نماذج مشروع Windows Presentation Foundation MSBuild

عدة تطوير برامج Windows (SDK) يتضمن عدة ملفات أمثلة مشروع MSBuild للأنواع الأكثر شيوعاً من تطبيقات WPF :

إنشاء مشروع MSBuild لـ WPF باستخدام Visual Studio

Visual Studio تقوم تلقائياً بإنشاء ملفات مشروعMSBuild عندما يتم انشاء تطبيقاتWPF جديدة باستخدام قوالب المشروعVisual Studio . على سبيل المثال، قالب مشروع التطبيق WPF يقوم بإنشاء ملف المشروع التالي (بالنسبة لـ #C):

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>9.0.20726</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{E0EA3EBA-718C-4122-B20C-EB97B7DC6604}</ProjectGuid>
    <OutputType>WinExe</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>WpfApplication1</RootNamespace>
    <AssemblyName>WpfApplication1</AssemblyName>
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <ProjectTypeGuids>
      {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};
      {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
    </ProjectTypeGuids>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Core">
      <RequiredTargetFramework>3.5</RequiredTargetFramework>
    </Reference>
    <Reference Include="System.Xml.Linq">
      <RequiredTargetFramework>3.5</RequiredTargetFramework>
    </Reference>
    <Reference Include="System.Data.DataSetExtensions">
      <RequiredTargetFramework>3.5</RequiredTargetFramework>
    </Reference>
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
    <Reference Include="WindowsBase" />
    <Reference Include="PresentationCore" />
    <Reference Include="PresentationFramework" />
  </ItemGroup>
  <ItemGroup>
    <ApplicationDefinition Include="App.xaml">
      <Generator>MSBuild:Compile</Generator>
      <SubType>Designer</SubType>
    </ApplicationDefinition>
    <Page Include="Window1.xaml">
      <Generator>MSBuild:Compile</Generator>
      <SubType>Designer</SubType>
    </Page>
    <Compile Include="App.xaml.cs">
      <DependentUpon>App.xaml</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
    <Compile Include="Window1.xaml.cs">
      <DependentUpon>Window1.xaml</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Properties\AssemblyInfo.cs">
      <SubType>Code</SubType>
    </Compile>
    <Compile Include="Properties\Resources.Designer.cs">
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
      <DependentUpon>Resources.resx</DependentUpon>
    </Compile>
    <Compile Include="Properties\Settings.Designer.cs">
      <AutoGen>True</AutoGen>
      <DependentUpon>Settings.settings</DependentUpon>
      <DesignTimeSharedInput>True</DesignTimeSharedInput>
    </Compile>
    <EmbeddedResource Include="Properties\Resources.resx">
      <Generator>ResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
      <SubType>Designer</SubType>
    </EmbeddedResource>
    <None Include="Properties\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
    </None>
    <AppDesigner Include="Properties\" />
  </ItemGroup>
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
</Project>

اسم ملحق ملف المشروع MSBuild الذي تم انشاؤه يدمج لغة مصدر التعليمات البرمجية :

  • بالنسبة لمشاريع #C ، الملحق هو .csproj.

  • بالنسبة لمشاريع Visual Basic ، الملحق هو .**.**vbproj.

ملف المشروع أكبر من الأمثلة السابقة و الذي هو جزئياً نتيجة لعدة خصائص إضافية. ومع ذلك، فإن المعلومات الإضافية هي خاصة بـ Visual Studio وتتضمن ما يلي:

  • تكوينات المشاريع

  • تكوين البناء

  • اقتران ملف مصدر التعليمات البرمجية .

  • خاصية المشروع الافتراضي ، الموارد وإدارة الإعدادات.

تكوينات المشاريع

تتضمن تفاصيل تكوين المشروع معرف فريد للمشروع أو معرف فريد لنوع المشروع والبيانات المتنوعة لتعريف .NET Framework و إصدار Visual Studio:

<Project 
  ToolsVersion="3.5"
  DefaultTargets="Build"
  xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ProductVersion>9.0.20726</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{E0EA3EBA-718C-4122-B20C-EB97B7DC6604}</ProjectGuid>
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
    <ProjectTypeGuids>
      {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};
      {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
    </ProjectTypeGuids>
  </PropertyGroup>
  ...
</Project>

تكوين البناء

مشروع Visual Studio الافتراضي يحتوي على اثنين من تكوينات البناء: Debug و Release (راجع إنشاء تكوينات). في ملف مشروع MSBuild ، يتم تكوين هذه باستخدام الخصائص:

<Project ... >
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">
      Debug
    </Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <OutputType>WinExe</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>WpfApplication1</RootNamespace>
    <AssemblyName>WpfApplication1</AssemblyName>
    <FileAlignment>512</FileAlignment>
    <WarningLevel>4</WarningLevel>
    ...
  </PropertyGroup>
  ...
</Project>

تم تحديد تكوين البناء الحالي بواسطة خاصية Configuration :

<Project ... >
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">
      Debug
    </Configuration>
    ...
  </PropertyGroup>
  ...
</Project>

اقتران ملف مصدر التعليمات البرمجية .

Visual Studio يحافظ على الاقتران بين ملفات مصدر التعليمات البرمجية ذات الصلة, مثل العلامات والتعليمات البرمجية - خلف ملفات. يسمح هذا لـVisual Studio بتمثيل الاقتران في اطار Visual Studio Solution Explorer :

لقطة شاشة لـ Solution Explorer

يتم إجراء الاقتران بين ملفات مصدر التعليمات البرمجية ذات الصلة باستخدام بيانات التعريف DependentUpon و SubType :

<Project ... >
  ...
  <ItemGroup>
    <ApplicationDefinition Include="App.xaml">
      <Generator>MSBuild:Compile</Generator>
      <SubType>Designer</SubType>
    </ApplicationDefinition>
    <Page Include="Window1.xaml">
      <Generator>MSBuild:Compile</Generator>
      <SubType>Designer</SubType>
    </Page>
    <Compile Include="App.xaml.cs">
      <DependentUpon>App.xaml</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
    <Compile Include="Window1.xaml.cs">
      <DependentUpon>Window1.xaml</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
  </ItemGroup>
  ...
</Project>

في هذا المشروع ، App.xaml (العلامات) يتم اقترانها بـ App.xaml.cs (التعليمات البرمجية الخلفية) و Window1.xaml (العلامات) مقترن بـWindow1.xaml.cs (التعليمات البرمجية الخلفية).

خاصية المشروع الافتراضي ، الموارد وإدارة الإعدادات.

Visual Studio يسمح لك بشكل مرئي بتحرير خصائص مشروعVisual Studio . معظم هذه تؤثر على عملية الإنشاء و يتم تخزينها في Visual Studio-المدارة و ملف المشروع Visual Studio . قوالب مشروع Windows Presentation Foundation (WPF) أيضًا تقوم بإنشاء ملفات لتوفير اعدادات مكتوبة بقوة و دعم الموارد . يتم عرض الكل في الشكل التالي:

لقطة شاشة لـ Solution Explorer

هذه تتم إدارتها من قبل ملف مشروع MSBuild باستخدام الإجراءات التالية:

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
  ...
  <ItemGroup>
    <Compile Include="Properties\AssemblyInfo.cs">
      <SubType>Code</SubType>
    </Compile>
    <Compile Include="Properties\Resources.Designer.cs">
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
      <DependentUpon>Resources.resx</DependentUpon>
    </Compile>
    <Compile Include="Properties\Settings.Designer.cs">
      <AutoGen>True</AutoGen>
      <DependentUpon>Settings.settings</DependentUpon>
      <DesignTimeSharedInput>True</DesignTimeSharedInput>
    </Compile>
    <EmbeddedResource Include="Properties\Resources.resx">
      <Generator>ResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
      <SubType>Designer</SubType>
    </EmbeddedResource>
    <None Include="Properties\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
    </None>
    <AppDesigner Include="Properties\" />
  </ItemGroup>
  ...
</Project>

إنشاء مشروع MSBuild لـ WPF

مشاريع MSBuild يمكن بناءها من إما موجه الأوامر أوVisual Studio.

إنشاء مشروع MSBuild لـ WPF من موجه الأوامر

مشاريع MSBuild يمكن أن يتم بناءها عن طريق استدعاءmsbuild.exe إما من موجه أوامرWindows أو موجه أوامرعدة تطوير برامج Windows (SDK) .

بناء مشروع

لإنشاء MSBuild ، تقوم بتنفيذ msbuild.exe ، تمرير اسم ملف مشروع MSBuild المراد:

msbuild.exe msbuildprojectfile.proj

إنشاء مشروع خاص بلغة معينة منشأ بواسطة Visual Studio

ملفات مشروع MSBuild الخاصة بلغة معينة التي تم إنشاؤها بواسطة Visual Studio:

  • يحتوي على ملحق ملف ذي صلة (.csproj ، .vbproj).

  • تتضمن هدف خاص بلغة معينة (Microsoft.CSharp.targets , Microsoft.VisualBasic.targets).

يوضح التالي كيفية إنشاء مشروع #C من موجه الأوامر:

msbuild.exe VSGeneratedProjectFileForCSharp.csproj

يوضح التالي كيفية إنشاء مشروع Visual Basic من موجه الأوامر:

msbuild.exe VSGeneratedProjectFileForVisualBasic.vbproj

إنشاء حل منشأ بواسطة Visual Studio

سيقوم msbuild.exe أيضاً بإنشاء ملفات الحلول (.sln) التي تم إنشاؤها بواسطة Visual Studio:

msbuild.exe VSGeneratedSolutionFile.sln

إنشاء مشروع MSBuild لـ WPF في Visual Studio

إذا كنت تستخدم Visual Studio ، لا تحتاج لبناء المشاريع الخاصة بك والحلول من موجه الأوامر; Visual Studio يسمح لك بالقيام بكلا من الإجراءين من IDE.

إنشاء مشروع في Visual Studio

لإنشاء مشروع في Visual Studio ، انقر بزر الماوس الأيمن فوق المشروع في إطار مستكشف الحلول و قم باختيار إنشاء.

إنشاء حل في Visual Studio

لإنشاء حل ، نفذ أحد الإجرائين التاليين:

  • اضغط F6 لبناء الحل.

  • اضغط على المفتاح F5 لمتابعة الخطأ في الحل.

  • بنية اختيار | بنية حل.

  • يصحح باختيار | يبدأ التصحيح.

  • يصحح باختيار | يبدأ دون تصحيح.

إجراء أي من هذه المشاريع أو الحلول يسبب Visual Studio لتنفيذ msbuild.exe لإنشاء ملفات MSBuild المناسبة.

خط إنشاء Windows Presentation Foundation

عندما يتم انشاء المشروع WPF التركيبة من الخاص باللغة المعينة و الأهداف الخاصة بــ WPF-المعينة يتم استدعاءها. المعالجة لتنفيذ هذه الأهداف يسمى أنابيب البناء و يتم توضيح الخطوات الأساسية بواسطة الشكل التالي.

عملية بناء WPF

تم توضيح هذة الخطوات بشكل أكثر تفصيلاً في الأجزاء التالية.

تهيئات ما قبل الانشاء

قبل الإنشاء ، MSBuild يحدد موقع الأدوات الهامة والمكتبات متضمناً ما يلي:

  • NET Framewor.

  • دلائل Windows SDK .

  • موقع تجميعات مرجع WPF .

  • خاصية لمسارات بحث التجميع.

دليل التجميع مرجع (%ProgramFiles%\Reference Assemblies\Microsoft\Framework\v3.0\) هو الموقع الأول يتم فيها البحث عن التجميعات. أثناء هذه الخطوة ، معالجة الإنشاء تقوم أيضاً بتهيئة الخصائص و مجموعات العناصر المختلفة كما تقوم بإجراء أي عمل تنظيف مطلوب.

حل المراجع

عملية الانشاء تحدد موقع و تربط التجميعات المطلوبة لإنشاء مشروع التطبيق. منطق هذا موجود في مهمة ResolveAssemblyReference . كافة التجميعات التي تم تعريفها كـ Reference في ملف المشروع متوفرة إلى المهام مع المعلومات حول مسارات البحث وبيانات التعريف على التجميعات المثبتة بالفعل على النظام. تقوم المهمة بالبحث عن التجميعات و استخدام بيانات تعريف التجميع الذي تم تثبيتها لتصفية تجميعات WPF الأساسية التي لا تحتاج إلى الظهور في بيان المخرجات. يتم هذا بتجنب المعلومات المكررة في بيان ClickOnce. على سبيل المثال، منذ امكن اعتبار PresentationFramework.dll ممثل تطبيق مبني على ومن أجل WPF و فضلاً عن هذا منذ وجود كافة تجميعات WPF في نفس الموقع على كل جهاز له NET Framewor. مثبتة، ليس هناك حاجة لتضمين كافة المعلومات الموجودة على كافة تجميعات مرجع NET Framewor. في البيان.

التحويل البرمجي للعلامات — تمرير 1

في هذه الخطوة، ملفات XAML يتم تحليلها و تحويلها برمجياً بحيث لا يقوم وقت التشغيل بقضاء الوقت في تحليل XML و التحقق من صحة قيم الخاصية . ملف XAML المترجم يتم تمييزه بحيث, وقت التشغيل، تحميله يجب أن يكون أسرع بكثير من تحميل ملف XAML .

أثناء هذه الخطوة ، الأنشطة التالية تحدث عند كل ملف XAML الذي هو عنصر انشاء Page :

  1. ملف XAML يتم تحليله بواسطة برنامج التحويل البرمجي للعلامات.

  2. يتم انشاء تمثيل مترجم من أجل ذلك XAML و نسخها إلى مجلد obj\Release .

  3. تمثيل CodeDOM لفئة جزئية جديدة تم إنشاؤها و نسخها إلى مجلد obj\Release.

بالإضافة إلى ذلك، يتم إنشاء ملف التعليمات البرمجية الخاصة باللغة لكل ملف XAML . على سبيل المثال، بالنسبة لصفحة Page1.xaml في مشروع Visual Basic أو Page1.g.vb يتم إنشاءها; للحصول على صفحة Page1.xaml في مشروع #C ،يتم إنشاء Page1.g.cs. ".g" في اسم الملف يشير إلى إن الملف تم انشاءه بالتعليمات البرمجية التي يحتوي على تعريف فئة جزئية للعنصر ذي المستوى الأعلى من ملف العلامات (مثل Page أو Window). يتم تعريف الفئة بمعدل partial في #C ( Extends في Visual Basic) للإشارة إلى وجود تعريف آخر للفئة في أي مكان آخر ، عادةً في التعليمات البرمجية الخلفية للملف Page1.xaml.cs.

تمتد فئة جزئية من الفئة الأساسية المناسبة (مثل Page لصفحة) و تقوم بتنفيذ واجهة System.Windows.Markup.IComponentConnector . واجهة IComponentConnector تحتوي على أساليب لتهيئة مكون والاتصال بالاسماء و الأحداث على عناصر في المحتوى الخاص بها. و بالتالي ،ملف التعليمات البرمجية المنشأ يحتوي على تطبيق الأسلوب كما يلي:

public void InitializeComponent() {
    if (_contentLoaded) {
        return;
    }
    _contentLoaded = true;
    System.Uri resourceLocater = 
        new System.Uri(
            "window1.xaml", 
            System.UriKind.RelativeOrAbsolute);
    System.Windows.Application.LoadComponent(this, resourceLocater);
}

بشكل افتراضي، يتم تشغيل التحويل البرمجي للعلامات في نفس AppDomain كمشغل MSBuild . يوفر هذا مكاسب الأداء الهامة. هذا السلوك يمكن أن يتم تبديله بخاصية AlwaysCompileMarkupFilesInSeparateDomain . ويكون لهذا ميزة تؤدي إلى إلغاء تحميل كافة تجميعات المرجع بواسطة إلغاء تحميل AppDomain منفصلة.

التحويل البرمجي للعلامات — تمرير 2

XAMLيتم تصنيف الصفحات في أثناء المرور 1 ل " ليس كلها تصنيف ترميز. XAMLالملفات التي قمت بتعريفها محلياً اكتب مراجع (يشير إلى أنواع المعرفة في تعليمات برمجية في مكان آخر في نفس مشروع) هي المستثناة من التحويل البرمجي في هذا الوقت. وهذا لأن هذه الأنواع المعرفة محلياً موجودة فقط في مصدر ولم يتم تحويلها برمجياً بعد . من أجل تحديد ذلك، يستخدم المحلل اللغوي الأساليب البحثية التي تتضمن البحث عن عناصر مثل x:Name في ملف العلامات. عندما تم العثور عى مثيل ، يتم تأجيل ذلك التحويل البرمجي لملف العلامة حتى تتم ترجمة ملفات التعليمات البرمجية ، و التي بعدها, ترجمة العلامة الثاني تقوم بتمرير العمليات هذه الملفات.

تصنيف ملف

عملية التصنيع بوضع ملفات الإخراج في مجموعات موارد أخرى تعتمد تشغيل التي applicati تشغيل سيتم وضعها في تجميع. في تطبيق nonlocalized نموذجية، الجميع ملفات بيانات وضع كـ Resourceتوضع الرئيسي كـ sembly (تنفيذي أو مكتبة). عند تعيين UICulture في المشروع ، كافة الملفات XAML المترجمة و تلك الموارد التي تم تعليمها بشكل خاص كخاصة بلغة معينة توضع في تجميع مورد القمر الصناعي . علاوة على ذلك، يتم وضع كافة الموارد حيادية اللغة في التجميع الرئيسي. يتم إجراء هذا التحديد في هذه الخطوة من عملية الإنشاء.

اجراءات الانشاء ApplicationDefinition ، Page ، و Resource في ملف المشروع يمكن تعزيزها ببيانات التعريف Localizable (القيم المقبولة هي true و false) ، التي تحدد ما إذا كان الملف هو خاص بلغة معينة أو محايد اللغة .

الترجمة الأساسية

تتضمن خطوة الترجمة الأساسية ترجمة ملفات التعليمات البرمجية . وهذا هو orchestrated بمنطق في اللغة-معينة تستهدف ملفات Microsoft.CSharp.targets و Microsoft.VisualBasic.targets. في حالة تحديد heurهوtics التي مسار مفرد من برنامج التحويل البرمجي للعلامات هو كافية، ثم تجميع الرئيسي هو التي تم إنشاؤها. ومع ذلك، إذا كان واحد أو أكثر من ملفات XAML الموجودة في المشروع لها مراجع إلى أنواع معرّفة محلياً ثم يتم إنشاء ملف .dll مؤقت لذلك فتجميعات التطبيق النهائية يمكن إنشاؤها بعد اكتمال ترجمة العلامات الخاصة بالمسار الثاني.

جيل البيان

في نهاية عملية الإنشاء ، بعد استعداد كافة تجميعات التطبيقات و ملفات المحتوى ، فإن بيانات ClickOnce للتطبيق يتم إنشاءها.

ملف بيان النشر يقوم بوصف طراز النشر: الإصدار الحالي ، سلوك التحديث وهوية الناشر بطول التوقيع الرقمي. هذا البيان يهدف إلى أن يكتبها المسؤولين الذين يقومون بمعالجة النشر. ملحق الملف هو .xbap (بالنسبة لــ تطبيقات مستعرض XBAP (XBAP)) و .application للتطبيقات المثبتة. السابق يتم تمليته بواسطة خاصية المشروع HostInBrowserو كنتيجة يقوم البيان بتعريف التطبيق كمستعرض مستضاف.

بيان التطبيق (. الملف exe.manifest) يصف تجميعات التطبيق و المكتبات التابعة ويسرد الأذونات المطلوبة من قبل التطبيق. يهدف هذا الملف إلى أن يتم كتابته بواسطة مطور التطبيق. من أجل تشغيل تطبيق ClickOnce ، يقوم المستخدم بفتح ملف بيان النشر الخاص بالتطبيق .

يتم إنشاء ملفات بيان تلك دوماً من أجل تطبيقات XBAP. للتطبيقات المثبتة ، لا يتم إنشائها ما لم يتم تحديد الخاصية GenerateManifests في ملف المشروع بالقيمة true.

تطبيقات XBAP تقوم بالحصول على اثنين من الأذونات الإضافية عبر و أعلى هذه الأذونات المعينة إلى تطبيقات منطقة الإنترنت النموذجية: WebBrowserPermission وMediaPermission WPF يقوم بإنشاء نظام يقوم بتعريف هذه الأذونات في بيان التطبيق.

دعم البناء التزايدي

نظام الانشاء WPF يوفر دعم للبنيات التزايدية. إنه الذكاء حول الكشف عن التغييرات التي تم إجراؤها على العلامات أو التعليمات البرمجية كما أنه يقوم بالتحويل البرمجي لهذة النتائج المتأثرة بالتغيير فقط. تستخدم تقنية البناء التزايدي الملفات التالية:

  • ملف _MarkupCompiler.Cache $ ( AssemblyName) للمحافظة على حالة المحول البرمجي الحالي.

  • ملف _MarkupCompiler.lref $ ( AssemblyName) للتخزين المؤقت لملفات XAML بالمراجع إلى الأنواع المعرفة محلياً.

التالي مجموعة من القواعد التي تحكم البناء التزايدي :

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

  • يجب أن يكون آلية بناء تزايدي cognizant إن صفحة XAML إما تقوم بتعريف فئة أو تستخدم بعض الفئات.

  • إذا كانت تتغير ادخالات Reference لذا فقم اعادة ترجمة جميع الصفحات برمجياً .

  • إذا تغير ملف التعليمات البرمجية ، قم بإعادة ترجمة كافة الصفحات بمراجع نوع معرفة محلياً.

  • إذا كان ملف XAML يتغير:

    • إذا XAML تم تعريفه كـ Page في المشروع: إذا كان XAML لا يتضمن مراجع نوع معرفة محلياً ، قم بإعادة ترجمة ذلك XAML بالإضافة إلى كافة صفحات XAML بمراجع المحلية; إذا كان XAML يحتوي على مراجع محلية ، قم بإعادة ترجمة كافة صفحات XAML بالمراجع المحلية.

    • إذا XAML تم تعريفه كـ ApplicationDefinition في المشروع: قم بإعادة ترجمة كافة صفحات XAML (السبب: كل XAML يحتوي على مرجع إلى نوعApplication قد يكون قد تم تغييره).

  • إذا كان ملف المشروع يقوم بتعريف ملف التعليمات البرمجية كـتعريف التطبيق بدلاً من ملف XAML :

    • تحقق إذا كانت قيمة ApplicationClassName في ملف المشروع تغيرت (هل يوجد نوع تطبيق جديد ؟). إذا كان الأمر كذلك، قم بإعادة ترجمة التطبيق بالكامل .

    • وإلا، فقم بإعادة ترجمة كافة صفحات XAMLبالمراجع المحلية .

  • إذا كان ملف مشروع يتغير: قم بتطبيق كافة القواعد السابقة ثم راجع ما يحتاج إليه لإعادة ترجمته . التغييرات للخصائص التالية تقوم بتشغيل اعادة ترجمة كاملة : AssemblyName و IntermediateOutputPath وRootNamespace و HostInBrowser.

سيناريوهات اعادة الترجمة التالية تكون ممكنة:

  • يتم اعادة ترجمة التطبيق بالكامل.

  • فقط ملفات XAML التي تم تعريفها محلياً على نوع مراجع يتم اعادة ترجمتها.

  • لا شيء يتم اعادة ترجمته (إذا لم يتم تغيير أي شيء في المشروع).

راجع أيضًا:

المبادئ

نشر أحد تطبيقات WPF (WPF)

حزمة ال URIفى WPF

موارد التطبيق WPF و المحتوى و الملفات البيانات

موارد أخرى

مرجع MSBuild البنية الأساسية لعرض برامج العروض التقديمية الخاصة بـ Windows