Dado un proyecto .Net C#, quiero verificar si la compilación contiene advertencias. Al ejecutar el comando
dotnet build -consoleloggerparameters:"Summary;Verbosity=normal" -m -p:"WarnLevel=5;EnforceCodeStyleInBuild=true" -t:"clean,build"obtengo el resultado esperado
Build succeeded. 2 Warning(s) 0 Error(s)Pero el código de salida es 0, entonces, ¿cómo sé si esa compilación contiene advertencias?
Creé un script de shell para jugar
#!/bin/bash dotnet build -consoleloggerparameters:"Summary;Verbosity=normal" -m -p:"WarnLevel=5;EnforceCodeStyleInBuild=true" -t:"clean,build" if [ $? -eq 0 ] then echo ">>> Success" else echo ">>> Contains warnings or errors" fi readpero, ¿cómo puedo extender el script para verificar una compilación exitosa con advertencias? Las canalizaciones de CI configuradas deberían pasar, pero quiero marcarlas como inestables si ocurrieron advertencias.
Me gustaría evitar la magia Regex si es posible.
Editar:
No quiero agregar el indicador -warnaserror porque entonces las canalizaciones de CI fallarán y no podrá saber si se produjeron errores de compilación o si el estilo del código es simplemente incorrecto.
Lo que puede hacer es simplemente agregar /WarnAsError a su compilación dotnet.
Código de ejemplo:
using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); int x = 0; } } }Salida de la compilación dotnet:
dotnet build Microsoft (R) Build Engine version 16.10.0+4242f381a for .NET Copyright (C) Microsoft Corporation. All rights reserved. Determining projects to restore... All projects are up-to-date for restore. Program.cs(10,17): warning CS0219: The variable 'x' is assigned but its value is never used [ConsoleApp1.csproj] ConsoleApp1 -> ConsoleApp1.dll Build succeeded. \Program.cs(10,17): warning CS0219: The variable 'x' is assigned but its value is never used [ConsoleApp1.csproj] 1 Warning(s) 0 Error(s) Time Elapsed 00:00:00.79Salida de dotnet build /WarnAsError:
dotnet build /WarnAsError Microsoft (R) Build Engine version 16.10.0+4242f381a for .NET Copyright (C) Microsoft Corporation. All rights reserved. Determining projects to restore... Restored ConsoleApp1.csproj (in 60 ms). Program.cs(10,17): error CS0219: The variable 'x' is assigned but its value is never used [ConsoleApp1.csproj] ConsoleApp1 -> ConsoleApp1.dll Build FAILED. Program.cs(10,17): error CS0219: The variable 'x' is assigned but its value is never used [ConsoleApp1.csproj] 0 Warning(s) 1 Error(s) Time Elapsed 00:00:01.00EDITAR: OP solicitó no fallar en la compilación tras la advertencia.
Algo que puede intentar es hacer que las advertencias se escriban en un archivo y luego contar el número de líneas en ese archivo.
Ejemplo:
Tomé el código anterior y agregué varias variables:
int a = 0; int b = 0; int c = 0; int d = 0; int e = 0;Ahora, cuando compilo, recibo 5 advertencias. Ahora agregué esto a mi compilación dotnet:
$warningsFile = "SomeFile.log" dotnet build -fl1 "/flp1:logFile=$warningsFile;warningsonly"Luego, simplemente puedo contar el número de líneas en ese archivo. Usando powershell:
gc $warningsFile | Measure-Object -LineResultados en:
Lines Words Characters Property ----- ----- ---------- -------- 5No estoy seguro de si esto funcionará en todos los casos, pero al menos le dirá si recibió advertencias o no. Espero que esto te ayude