关于命令行编译器和MSBuild的一些混淆

本文关键字:MSBuild 命令行 编译器 | 更新日期: 2023-09-27 18:36:21

C# CSC.exe

如果我们给它一个 C# 文件,一个 .CS ,它是否能够编译它并说例如代码第 12 行缺少";"?在我的程序后面的形式 - 即Java RCP应用程序,我可以在电子表格中显示这些编译错误

MSBuild怎么样?这是否能够显示与我之前的示例相同的编译错误?

关于命令行编译器和MSBuild的一些混淆

MSBuild 视为一个美化的make或更像ANT的东西 - 它是一种用于描述编译/构建任务的语言。使用 MSBuild 生成 c# 程序时,实际上是在编译部分使用 csc.exe

假设这是你的代码(程序.cs):

namespace MyCustomBuild
{
     class Program
     {
         static void Main(string[] args)
         {
             System.Console.WriteLine("Hello World")
         }
     }
}

您可以调用csc program.cs并接收以下输出

Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Copyright (C) Microsoft Corporation. All rights reserved.
program.cs(7,52): error CS1002: ; expected

或者,您可以使用 msbuild 来获得完全相同的结果! 以下是build.msbuild的内容

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="Default">
     <Csc Sources="program.cs"/> 
  </Target>
</Project>

然后,可以使用不同级别的详细程度调用 msbuild 文件,如下所示。

msbuild build.msbuild /verbosity:quietmsbuild build.msbuild /verbosity:minimal

Microsoft (R) Build Engine Version 4.0.30319.1
[Microsoft .NET Framework, Version 4.0.30319.269]
Copyright (C) Microsoft Corporation 2007. All rights reserved.
program.cs(7,52): error CS1002: ; expected [<filePath>'build.msbuild]

msbuild build.msbuild /verbosity:normal

Microsoft (R) Build Engine Version 4.0.30319.1
[Microsoft .NET Framework, Version 4.0.30319.269]
Copyright (C) Microsoft Corporation 2007. All rights reserved.
Build started 6/6/2012 12:13:00 PM.
Project "<filePath>'build.msbuild" on node 1 (default targets).
Default:
  C:'Windows'Microsoft.NET'Framework'v4.0.30319'Csc.exe /out:program.exe program.cs
program.cs(7,52): error CS1002: ; expected [<filePath>'build.msbuild]
Done Building Project "<filePath>'build.msbuild" (default targets) -- FAILED.
Build FAILED.
"<filePath>'build.msbuild" (default target) (1) ->
(Default target) -> 
  program.cs(7,52): error CS1002: ; expected ["<filePath>'build.msbuild]
    0 Warning(s)
    1 Error(s)
Time Elapsed 00:00:00.28

其余两个详细级别是详细的和诊断性的,如果需要,它们会提供更多信息。 我不确定您想要为电子表格提供多少信息,但希望其中之一对您有用。