【问题标题】:CSharpCodeProvider, progress info while compilingCSharpCodeProvider,编译时的进度信息
【发布时间】:2016-05-26 08:18:41
【问题描述】:

我从随机大小的数据在内存中生成一些代码。这可以生成类似 15K 的类,甚至更多。代码存储在一个 List 中,我与 CSharpCodeProvider 类中的 CompileAssemblyFromSource 方法一起使用。

问题是,在编译时,我想要一份进度报告,或者可能是正在发生的事情的输出。目前,我的应用程序只是坐在那里等待 5 或 10 分钟。

有没有办法知道这需要多少时间,或者看看发生了什么。也许是另一个想法?我希望答案不仅仅是一条消息,说这个过程可能需要几分钟。

【问题讨论】:

  • 将 async/await 与 Task.Run 和 msdn.microsoft.com/en-us/library/…一起使用
  • 不可能。您唯一的机会是将源代码拆分为多个文件并分别编译它们。这可以让你倒数文件。使用 15K 类,您将有很多拆分代码的方法:)
  • 我喜欢这个主意。这就像在 C 中一样,我将单独编译 list 中的每个字符串,并将它们全部链接以创建一个 DLL。但是,我不确定如何以编程方式做到这一点。 CSharpCodeProvider 只能直接编译成 dll。

标签: c# codedom csharpcodeprovider compileassemblyfromsource


【解决方案1】:

据我所知,没有办法在 CodeDOM 或新的 Roslyn 编译器中报告编译进度。我认为支持这是一个合理的请求,因此您可能需要考虑在 the Roslyn repo 提出功能请求。

与此同时,您可以根据猜测报告进度。您可以根据输入进行猜测(您现在正在编译 m 千字节的代码,而编译 n 千字节通常需要 t秒,因此您希望它花费 t / n · m 秒)或基于上次编译,或两者兼而有之。

(我还考虑将每个文件编译成一个单独的网络模块,然后将它们组合成一个程序集。这将允许您在每个文件编译后报告进度。但我认为这样做太复杂了,不值得获取进度报告。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    相关资源
    最近更新 更多