Visual Studio 治疗警告为错误与/警告为错误

zi8p0yeb  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(245)
class Program
{
    static void Main(string[] args)
    {
        int unused = 3;
    }
}

如果我加上:

<TreatWarningsAsErrors>false</TreatWarningsAsErrors>

添加到 *.csproj文件,那么每次我试图编译这个程序时,编译都会失败,因为未使用变量警告被提升为错误。这与在Visual Studio IDE中将“Project〉Properties”下的“Treat Warnings as errors”选项设置为“All”是一样的。
相反,如果我编译如下:

msbuild /warnaserror

第一次构建将失败,但仍会生成二进制文件,因此,后续的每个构建都将通过。
msbuild命令行参数和msbuild属性之间是否存在我不理解的区别?
另外,我假设msbuild命令行参数不是简单地传递给csc.exe,因为如果这样做:

csc.exe -warnaserror Program.cs

不生成可执行文件,生成总是失败。

ie3xauqp

ie3xauqp1#

您是对的,msbuild命令行参数不是简单地传递给csc.exe,特别是/warnaserror。
虽然在msbuild和csc中没有找到描述/warnaserror关系的有效文档,但是msbuild选项中的warnaserror和csc选项中的warnaserror还是有区别的。
在msbuild中:对它的描述是:当一个警告被视为错误时,目标将继续执行,就像它是一个警告一样,但是整个构建将失败。(我们可以通过msbuild /help看到)。
但在C#编译(csc)中:这句话是:任何通常报告为警告的消息都将报告为错误,并且生成过程将停止(不生成输出文件)。
当我们第一次构建项目时,如果我们使用msbuild /warnaserror,错误将被“CoreCompile”目标识别并显示,屏幕截图如下:x1c 0d1x是的,构建失败。但如上所述,目标将继续执行时using /warnaserror in msbuild,这导致输出.exe文件在obj文件夹,然后在bin文件夹。
但是对于/p:TreatWarningsAsErrors=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:TreatWarningsAsErrors=true seems to work as calling the /warnaserror in CSC工作。

我认为这就是[/warnaserror in msbuild]和[/p:TreatWarningsAsErrors=true and csc -warnaserror]之间的区别。希望它能帮助您解决问题。

此外:如果你确实想把警告当作错误处理,并且不想输出它,我建议你使用/p:TreatWarningsAsErrors=true。如果由于某些特殊原因,你需要在把警告当作错误处理时输出,你可以选择/warnaserror。
期待您的回复。

相关问题