我正在加入一个新的工作团队,以前从未使用过 .NET,但我遇到了一个我什至不知道如何开始诊断的问题。
基本上,我需要构建项目,我在VisualStudio Code
终端上使用以下命令来执行此操作:
dotnet msbuild -restore -target:build -p:VisualStudioVersion=16
在第一次运行时,编译器抱怨错误如下:
- 尾随逗号
- 右大括号前面有空行
- 类型名称冲突
- 文本字符串作为参数
- 类拥有可支配字段,但字段类型实际上不是一次性的
此时我没有尝试运行应用程序,因为我想先解决警告。
我再次运行命令(dotnet msbuild -restore -target:build -p:VisualStudioVersion=16
),它进行了编译,没有产生任何警告。
任何对 .NET 有更多了解的人都能给我一些关于为什么会发生这种情况的见解吗?
为什么
dotnet msbuild
第一次运行时会失败并显示警告,然后在第二次成功运行?
根本的问题是,你把情况描述为与实际情况相反的情况。 MSBuild并没有"失败并发出警告"。它成功了,但发出了警告。该项目已成功构建,因此成功了。
一旦你对工具如何工作的心理模型是正确的,诊断问题就会容易得多。
我再次运行该命令,它在没有产生任何警告的情况下进行了编译。
不,它没有再次进行编译。相反,它什么也没做。 构建一个已经成功构建的项目没有任何作用;项目已生成。
你说你想要它建成,它已经建成了,所以我们完成了。MSBuild 应该足够聪明,不会重做已经完成的工作;它并不完美,但它做得很好,不会浪费你的时间重做工作。
如果要强制项目从头开始重建,包括执行所有分析,通常使用
/target:Rebuild
不
/target:Build
如果要在不进行重新生成的情况下将项目恢复到预生成状态,通常可以
/target:Clean
我遇到了一个问题,我什至不知道如何开始诊断。
那么今天将是阅读项目文件并了解其工作原理以及阅读 msbuild 文档的好日子:
https://learn.microsoft.com/en-us/visualstudio/msbuild/walkthrough-using-msbuild?view=vs-2019
现在您知道如何开始诊断它:在使用该工具之前,请阅读项目文件和工具文档。