سؤال

هو CompileAssemblyFromDom أسرع من CompileAssemblyFromSource?

ذلك يجب أن كما أنه يفترض أن يتجاوز مترجم الأمامية.

هل كانت مفيدة؟

المحلول

CompileAssemblyFromDom برمجيا إلى ملف .cs الملف ثم تشغيل العادي C# compiler.

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.CSharp;
using System.CodeDom;
using System.IO;
using System.CodeDom.Compiler;
using System.Reflection;

namespace CodeDomQuestion
{
    class Program
    {

        private static void Main(string[] args)
        {
            Program p = new Program();
            p.dotest("C:\\fs.exe");
        }

        public void dotest(string outputname)
        {
            CSharpCodeProvider cscProvider = new CSharpCodeProvider();
            CompilerParameters cp = new CompilerParameters();
            cp.MainClass = null;
            cp.GenerateExecutable = true;
            cp.OutputAssembly = outputname;

            CodeNamespace ns = new CodeNamespace("StackOverflowd");

            CodeTypeDeclaration type = new CodeTypeDeclaration();
            type.IsClass = true;
            type.Name = "MainClass";
            type.TypeAttributes = TypeAttributes.Public;

            ns.Types.Add(type);

            CodeMemberMethod cmm = new CodeMemberMethod();
            cmm.Attributes = MemberAttributes.Static;
            cmm.Name = "Main";
            cmm.Statements.Add(new CodeSnippetExpression("System.Console.WriteLine('f'zxcvv)"));
            type.Members.Add(cmm);

            CodeCompileUnit ccu = new CodeCompileUnit();
            ccu.Namespaces.Add(ns);

            CompilerResults results = cscProvider.CompileAssemblyFromDom(cp, ccu);

            foreach (CompilerError err in results.Errors)
                Console.WriteLine(err.ErrorText + " - " + err.FileName + ":" + err.Line);

            Console.WriteLine();
        }
    }
}

مما يدل أخطاء في (الآن غير موجود) ملف temp:

) المتوقع - c:\Documents and Settings\يعقوب\Local Settings emp\x59n9yb-.0.cs:17

;من المتوقع - c:\Documents and Settings\يعقوب\Local Settings emp\x59n9yb-.0.cs:17

صالح التعبير مصطلح ')' - c:\Documents and Settings\يعقوب\إعدادات المحلية em p\x59n9yb-.0.cs:17

لذا أعتقد أن الجواب هو "لا"

نصائح أخرى

لقد حاولت العثور في نهاية المطاف مترجم الدعوة في وقت سابق تخليت.هناك عدد لا بأس به من طبقات من واجهات فصول افتراضية على صبري.

لا أعتقد المصدر قارئ جزء من المترجم ينتهي مع شجرة DOM, ولكن حدسي أود أن أتفق معك.العمل اللازمة لتحويل دوم IL يجب أن تكون أقل بكثير من القراءة C# كود المصدر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top