15
A
回答
7
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();
}
}
}
,其示出了在(不存在現在)臨時文件錯誤:
)預期 - C:\ Documents和Settings \雅各布\本地設置的\ Temp \ x59n9yb- .0.cs:17
;預期 - c:\ Documents and Settings \ jacob \ Local Settings \ Temp \ x59n9yb-.0.cs:17
無效的表達式')' - c:\ Documents and Settings \ jacob \ Local Settings \ Tem p \ x59n9yb-.0.cs:17
所以我想答案是 「不」
0
我試過早些時候發現最終的編譯器調用,我放棄了。爲了我的耐心,有相當多的接口層和虛擬類。
我不認爲編譯器的源代碼閱讀器部分以DOM樹結束,但直觀上我會同意你的看法。將DOM轉換爲IL所需的工作應該遠遠少於閱讀C#源代碼。
相關問題
- 1. CSharpCodeProvider無法編譯功能,但Visual Studio編譯的功能相同
- 2. 使用CSharpCodeProvider編譯字符串
- 3. 使用CSharpCodeProvider編譯部分類
- 4. 編譯性能
- 5. Drools規則編譯性能
- 6. 使用CSharpCodeProvider進行C#運行時編譯
- 7. csharpcodeprovider在將程序集添加到gac時無法編譯
- 8. 當沒有錯誤時,CSharpCodeProvider不會返回編譯器警告
- 9. 如何使用CSharpCodeProvider類運行C#4.0編譯器?
- 10. 性能:編程vs外部編譯
- 11. C#編譯智能編譯
- 12. VC++的編譯時間和性能
- 13. ASP.net性能和編譯查詢
- 14. 編譯表達式樹的性能
- 15. Linq編譯查詢和性能問題
- 16. 編譯代碼的IronPython導入性能
- 17. 編譯Perl以提高性能
- 18. 球拍互動與編譯性能
- 19. 高性能屬性訪問和可能的動態編譯
- 20. CSharpCodeProvider混淆
- 21. CSharpCodeProvider'找不到元數據文件'使用Mono編譯插件代碼
- 22. 不能編譯鏽
- 23. 鐺不能編譯
- 24. 不能編譯C++
- 25. 不能編譯QtCreator
- 26. 未能編譯curlpp
- 27. CSharpCodeProvider - 可濫用嗎?
- 28. 生成使用CSharpCodeProvider
- 29. CsharpCodeProvider內存泄漏
- 30. CSharpCodeProvider符合接口
絕對正確的,儘管令人失望。 CodeDOM被轉換爲C#文本,保存到臨時文件,然後調用C#編譯器(用C++開發)。我不知道Mono是否是這種情況,但不幸的是,CodeDOM實際上比直接編寫C#要慢。 – 2009-11-20 16:15:12