TreatWarningsAsErrors VS / warnaserror将

问题描述 投票:0回答:1
class Program
{
    static void Main(string[] args)
    {
        int unused = 3;
    }
}

如果我添加:

<TreatWarningsAsErrors>false</TreatWarningsAsErrors>

对于* .csproj文件,每次我尝试编译此程序时,构建都会失败,因为未使用的变量警告会被提升为错误。这与在Visual Studio IDE中将“项目>属性”下的“将警告视为错误”选项设置为“全部”相同。

相反,如果我编译如下:

msbuild /warnaserror

构建将在第一次失败,但仍将生成二进制文件,因此,每个后续构建都将通过。

有没有区别msbuild命令行参数和msbuild属性我不明白?

另外,我假设msbuild命令行参数不是简单地传递给csc.exe,因为如果我这样做:

csc.exe -warnaserror Program.cs

不会生成可执行文件,并且构建始终失败。

c# visual-studio msbuild roslyn
1个回答
1
投票

你是对的,msbuild命令行参数不是简单地传递给csc.exe,特别是对于/ warnaserror。

虽然没有找到描述msbuild和css中/warnaserror之间关系的有效文档。 msbuild选项中的warnaserror与csc选项中的warnaserror之间存在差异。

在msbuild中:它的描述是:当警告被视为错误时,目标将继续执行,就好像它是一个警告,但整体构建将失败。 (我们可以通过msbuild / help看到它)。

但是在C#compile(csc)中:remark是:通常被报告为警告的任何消息都被报告为错误,并且构建过程被暂停(没有构建输出文件)。

当我们第一次构建项目时,如果我们使用msbuild / warnaserror。该错误将由“CoreCompile”目标进行重新整理和显示,屏幕截图如下:enter image description here是的,构建失败。但如上所述,目标将继续执行using /warnaserror in msbuild,这导致.exe文件的输出在obj文件夹中,然后在bin文件夹中。

但对/p:TreatWarningsAsErros=true来说,如果我们第一次使用它来构建。构建将像在msbuild中使用/ warnaserror一样失败,但是difference is the message should be /target:exe /warnaserror+ /utf8output instead of /target:exe /utf8output.

这表明当using /warnaserror in msbuild时,它不起作为/warnaserror in CSC。相反,/p:TreatWarningsAsErros=true seems to work as calling the /warnaserror in CSC

我认为这是[msbuild中的/ warnaserror]和[/ p:TreatWarningsAsErros = true和csc -warnaserror]之间的区别。希望它有助于解决您的问题。

另外:如果您确实希望将警告视为错误而不想输出它。我建议你使用/ p:TreatWarningsAsErrors = true。如果由于某些特殊原因,在将警告视为错误时需要输出,您可以选择/ warnaserror。

期待你的回复。

© www.soinside.com 2019 - 2024. All rights reserved.