مشاركة عبر


استخدام CodeDOM

يوفر CodeDOM الأنواع التي تمثل العديد من الأنواع عام من عناصر تعليمات برمجية المصدر. يمكنك تصميم برنامج يقوم بإنشاء مصدر بيانات تعليمات برمجية نموذج باستخدام عناصر تعليمات برمجية DOM برسم كائن تجميع. This كائن graph can be rendered كـ المصدر تعليمات برمجية using a CodeDOM تعليمات برمجية generator for a supported programming اللغة. The CodeDOM can also be used إلى يحول برمجياً المصدر تعليمات برمجية في a ثنائي تجميع.

Some عام uses for the CodeDOM تضمين:

  • Templated إنشاء التعليمة البرمجية: generating تعليمات برمجية for ASP.NET, XML ويب الخدمات العميل proxies, تعليمات برمجية معالجات, designers, أو غير ذلك تعليمات برمجية-emitting mechanisms.

  • ديناميكي compilation: supporting تعليمات برمجية compilation في مفرد أو multiple languages.

إنشاء? a CodeDOM Graph

The System.CodeDom مساحة الاسم provides فئات for representing the logical بنية of المصدر تعليمات برمجية, independent of اللغة بناء الجملة.

The بنية of a CodeDOM Graph

The بنية of a CodeDOM graph هو مثل a شجرة of حاويات. The الأعلى-most, أو جذر, حاوية of each compilable CodeDOM graph هو a CodeCompileUnit. Every عنصر of your المصدر تعليمات برمجية model must be linked في the graph through a خاصية of a CodeObject in the graph.

إنشاء? a المصدر تعليمات برمجية Model for a نموذج Hello World برنامج

The following معاينة provides an مثال of how إلى بنية a CodeDOM كائن graph that represents the تعليمات برمجية for a simple Hello World تطبيق. For the إكمال المصدر تعليمات برمجية for this تعليمات برمجية مثال, see the System.CodeDom.Compiler.CodeDomProvider موضوع.

Creating a يحول برمجياً unit

The CodeDOM defines an كائن called a CodeCompileUnit, which can مرجع a CodeDOM كائن graph that نماذج the المصدر تعليمات برمجية إلى يحول برمجياً. A CodeCompileUnit has خصائص for storing مراجع إلى السمات, مساحات الاسم, و تجميعات.

The CodeDom providers that derive من the CodeDomProvider فئة contain وظائف that عملية the كائن graph مشار إليها بواسطة a CodeCompileUnit.

إلى إنشاء an كائن graph for a simple تطبيق, you must assemble the المصدر تعليمات برمجية model و مرجع it من a CodeCompileUnit.

You can إنشاء a جديد يحول برمجياً unit مع the بناء الجملة demonstrated في this مثال:

Dim compileUnit As New CodeCompileUnit()
CodeCompileUnit compileUnit = new CodeCompileUnit();

A CodeSnippetCompileUnit can contain a مقطع of المصدر تعليمات برمجية that هو already في the الهدف اللغة, but cannot be rendered إلى another اللغة.

Defining a مساحة الاسم

إلى define a مساحة الاسم, إنشاء a CodeNamespace و تعيين a اسم for it using the appropriate الدالة الإنشائية أو بواسطة إعداد its اسم خاصية.

Dim samples As New CodeNamespace("Samples")
CodeNamespace samples = new CodeNamespace("Samples");

Importing a مساحة الاسم

إلى إضافة a مساحة الاسم توجيه استيراد إلى the مساحة الاسم, إضافة a CodeNamespaceImport that indicates the مساحة الاسم إلى استيراد إلى the CodeNamespace.Imports مجموعة.

The following تعليمات برمجية adds an استيراد for the النظام مساحة الاسم إلى the Imports مجموعة of a CodeNamespace named samples:

samples.Imports.Add( New CodeNamespaceImport("System") )
samples.Imports.Add( new CodeNamespaceImport("System") );

إضافة ارتباطات عناصر تعليمات برمجية في كائن الرسم البياني

يجب ربط الجميع عناصر تعليمات برمجية التي تشكل رسم بياني CodeDOM إلى CodeCompileUnitهو العنصر الجذر في شجرة بسلسلة من المراجع بين العناصر التي تمت الإشارة إليها مباشرة من خصائص الكائن الجذر للرسم البياني. التعيين كائن إلى خاصية كائن حاوية لتأسيس مرجع من كائن حاوية.

The following statement adds the samples CodeNamespace to the Namespaces collection property of the root CodeCompileUnit.

compileUnit.Namespaces.Add( samples )
compileUnit.Namespaces.Add( samples );

تعريف نوع

إلى فئة، تقوم بتعريف بنية أو واجهة استخدام CodeDOM، التعداد إنشاء جديد CodeTypeDeclaration، وعين له اسم. يوضح المثال التالي هذا التحميل الزائد construcإلىr استخدام إلى تعيين اسم خاصية :

Dim class1 As New CodeTypeDeclaration("Class1")
CodeTypeDeclaration class1 = new CodeTypeDeclaration("Class1");

لإضافة نوع إلى مساحة اسم، قم بإضافة CodeTypeDeclarationالذي يمثل نوع إضافة إلى مساحة الاسم أنواع مجموعة من CodeNamespace.

يلي مثال يوضح كيفية إضافة فئة يسمى class1إلى باسم CodeNamespace samples:

samples.Types.Add(class1)
samples.Types.Add(class1);

إضافة الأعضاء الفئة إلى فئة

System.CodeDomمساحة الاسم يوفر العديد من العناصر التي يمكن أن تستخدم إلى تمثل الأعضاء الفئة. يمكن تمت الإضافة كل عضو من الأعضاء الفئة إلى الأعضاء مجموعة CodeTypeDeclaration.

تعريف رمز يؤشر الإدخال أسلوب لملحق تنفيذي

إذا كنت تقوم بإنشاء تعليمات برمجية لبرنامج تنفيذي، من الضروري الإشارة إلى يؤشر إدخال برنامج عن طريق إنشاء CodeEntryPointMethodلتمثيل أسلوب في البرنامج الذي يجب أن يبدأ التنفيذ.

يوضح المثال التالي كيفية تعريف يؤشر الإدخال الأسلوب الذي يحتوي على CodeMethodInvokeExpressionيستدعي النظام.Console.WriteLine لطباعة "مرحبا World!":

Dim start As New CodeEntryPointMethod()
Dim cs1 As New CodeMethodInvokeExpression( _
    New CodeTypeReferenceExpression("System.Console"), _
    "WriteLine", _
    New CodePrimitiveExpression("Hello World!") )
start.Statements.Add(cs1)  
CodeEntryPointMethod start = new CodeEntryPointMethod();
CodeMethodInvokeExpression cs1 = new CodeMethodInvokeExpression( 
    new CodeTypeReferenceExpression("System.Console"), 
    "WriteLine", new CodePrimitiveExpression("Hello World!") );
start.Statements.Add(cs1);  

The following كشف adds the إدخال يؤشر أسلوب named Start إلى the الأعضاء مجموعة of class1:

class1.Members.Add( start )
class1.Members.Add( start );

Now the CodeCompileUnit named CompileUnit يحتوي على the CodeDOM graph for a simple Hello World برنامج. For معلومات تشغيل generating و جاري التحويل البرمجي تعليمات برمجية من a CodeDOM graph, see Generating المصدر تعليمات برمجية و جاري التحويل البرمجي a برنامج من a CodeDOM Graph.

المزيد معلومات تشغيل إنشاء? a CodeDOM graph

The CodeDOM supports the many عام أنواع of تعليمات برمجية عناصر found في programming languages that دعم the وقت تشغيل اللغة العامة. The CodeDOM was not designed إلى provide عناصر إلى represent الجميع possible programming اللغة features. تعليمات برمجية that cannot be represented بسهولة مع CodeDOM عناصر can be encapsulated في a CodeSnippetExpression, a CodeSnippetStatement, a CodeSnippetTypeMember, أو a CodeSnippetCompileUnit. However, قصاصات cannot be translated إلى لغات غير ذلك automatically بواسطة the CodeDOM.

For documentation for the each of the CodeDOM أنواع, see the مرجع documentation for the System.CodeDom مساحة الاسم.

For a quick مخطط إلى بحث the CodeDOM عنصر that represents a specific نوع of تعليمات برمجية عنصر, see the مرجع سريع codeDOM.