MSBUILD 如何调用 CSC.exe?

How MSBUILD calls CSC.exe?

我想知道如何 msbuild.exe 执行 C# 应用程序。

当我在 google 中搜索时,我了解到 csc.exe、PE 文件、JIT、IL 文件。 msbuild.exe 内部调用 csc.exe 来编译 C# 应用程序。所以我在反射器中打开了csc.exe。但是没有来自 msbuild 的调用 csc.exe。那么msbuild如何调用csc.exe?

对 csc.exe 的调用包含在相应的 .targets1 脚本中。
MSBuild.exe 本身不知道是哪种语言编译器(c#, vb, ...) 您正在定位。这是由 solution/project 及其引用决定的。

对 csc.exe 的实际调用应位于 .NET Framework 文件夹中的 Microsoft.MSBuild.Tasks.dll。

1 对于 C#,它是 Microsoft.CSharp.targets

尽管 EXE 确实是库(与 DLL 一样,EXE 是 PE 文件),但它们几乎总是通过创建带有命令行参数的单独进程来调用。 命令行参数传递给 EXE 的 "main" 函数,通常作为字符串数组。你可以通过 Reflector 找到 csc 的主要功能。

但是,您可能想知道 msbuild 为特定构建传递给 csc 的内容。在那种情况下,只需使用 msbuild 的冗长开关:

msbuild MyProject.csproj /target:rebuild /verbosity:diag

参见Obtaining Build Logs with MSBuild