使用 Roslyn 编译 C# 项目时,如何避免完全重新编译?

Posted

技术标签:

【中文标题】使用 Roslyn 编译 C# 项目时,如何避免完全重新编译?【英文标题】:How can I avoid a full recompile when compiling a C# project with Roslyn? 【发布时间】:2014-11-01 04:05:07 【问题描述】:

我在我的一个 C# 项目中使用 Roslyn 生成一些代码。目前 Roslyn 会拿下整个项目,从头开始编译,然后吐出我想要的代码。这需要完全重新编译,这有点慢。当 Visual Studio 编译一个项目时,它不会每次都从头开始,它会做一些聪明的事情,只重新编译已更改的部分。有没有办法用 Roslyn 做到这一点?

【问题讨论】:

“增量构建”是您要查找的术语。 C# 从未支持增量构建。 您错过了一些关键信息。 Visual Studio 本身并不聪明,而是依靠 MSBuild 引擎来查看哪些项目已经是最新的。这部分也不在罗斯林。 【参考方案1】:

我可能错了,因为我不确定 Roslyn,但您可以将 Roslyn 代码分离到另一个解决方案中,并为您自己的代码提供一个单独的解决方案。

之后,您可以简单地构建随时变化的解决方案。

【讨论】:

【参考方案2】:

Visual Studio(在即将发布的版本中)使用 Roslyn 编译代码(到 IL)。对于一个非增量且从未增量的项目。

【讨论】:

我知道即将到来的 VS 使用了 Roslyn。我知道 VS 不进行增量编译。现在我很好奇为什么根据我的经验,“干净”的重新构建比常规构建需要更长的时间。可能是因为我正在处理许多必须重新复制到输出目录的图像资产。 当 MSBuild 进行重建时,如果我们看到构建的结果是最新的,我们将尝试避免重建 projects,通过通常的时间戳检查 la Makefiles .但是一旦文件被修改,我们就会重建整个项目,以及它的所有下游依赖项。

以上是关于使用 Roslyn 编译 C# 项目时,如何避免完全重新编译?的主要内容,如果未能解决你的问题,请参考以下文章

初步了解到C#编译器Roslyn是一个开源的,但是却不知道如何安装Roslyn,希望懂的大神说明一下

Roslyn:如何将多个项目的编译合并为 1 个单独的编译?

“避免在编译器热路径中分配”Roslyn 编码约定

微软开源C#编译器

在 .net 核心中为 Roslyn 动态选择引用

Roslyn 如何使用 MSBuild Copy 复制文件