为什么`dotnet msbuild`会在第一次运行时失败并显示警告,然后在第二次成功运行?

时间:2019-07-16 18:23:41

标签: c# visual-studio-code ubuntu-18.04 .net-core-2.2

我正在加入一个新的团队,以前从未使用过.NET,但是我遇到的问题是我什至不知道如何开始诊断。

基本上,我需要构建项目,并且在VisualStudio Code终端上使用了以下命令:

dotnet msbuild -restore -target:build -p:VisualStudioVersion=16

在第一次运行时,编译器抱怨以下错误:

  • 尾随逗号
  • 在大括号之前加上大括号
  • 类型名称冲突
  • 以文字字符串作为参数
  • 拥有可弃场的类,但场类型实际上不是可弃的

由于我想首先解决警告,因此我此时并未尝试运行该应用程序。

我再次运行命令(dotnet msbuild -restore -target:build -p:VisualStudioVersion=16),它进行了编译,但未产生任何警告。

任何对.NET有更多了解的人都能向我介绍为什么会发生这种情况吗?

1 个答案:

答案 0 :(得分:5)

  

为什么dotnet msbuild在第一次运行时失败并显示警告,然后第二次成功运行?

一个基本问题是,您将情况描述为真实情况的相反。 MSBuild没有 not “警告失败”。它成功并显示警告。该项目已成功构建,因此成功。

一旦您对工具如何工作的心理模型是正确的,诊断问题就会容易得多。

  

我再次运行该命令,它进行了编译,但未产生任何警告。

否,它没有再次编译。相反,它什么都没做。构建已经成功构建的项目无济于事。该项目已经建立。

您说您要构建它,它已经构建了,所以我们完成了。 MSBuild应该足够聪明,不会重做已经完成的工作。它不是完美的,但是在不浪费时间重新做工作方面做得很好。

如果要强制从头开始重建项目,包括进行所有分析,通常应使用

/target:Rebuild

不是

/target:Build

如果您希望在不进行重建的情况下将项目恢复为预先构建的状态,通常会这样做

/target:Clean
  

我遇到了一个我什至不知道如何开始诊断的问题。

那么今天将是阅读项目文件,学习其工作原理以及阅读msbuild文档的好日子:

https://docs.microsoft.com/en-us/visualstudio/msbuild/walkthrough-using-msbuild?view=vs-2019

现在您知道如何开始对其进行诊断:在使用该工具之前,请先阅读项目文件和工具文档