gpt4 book ai didi

c# - CSharpCodeProvider 编译性能

转载 作者:IT王子 更新时间:2023-10-29 04:50:31 24 4
gpt4 key购买 nike

CompileAssemblyFromDom 是否比 CompileAssemblyFromSource 快?

应该因为它可能会绕过编译器前端。

最佳答案

CompileAssemblyFromDom 编译成 .cs 文件,然后通过普通的 C# 编译器运行。

例子:

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();
}
}
}

它显示了一个(现在不存在的)临时文件中的错误:

) expected - c:\Documents and Settings\jacob\Local Settings\Temp\x59n9yb-.0.cs:17

; expected - c:\Documents and Settings\jacob\Local Settings\Temp\x59n9yb-.0.cs:17

Invalid expression term ')' - c:\Documents and Settings\jacob\Local Settings\Tem p\x59n9yb-.0.cs:17

所以我猜答案是否定的

关于c# - CSharpCodeProvider 编译性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4612/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com