Como especificar o equivalente de / features: strict (de csc.exe) ao msbuild.exe ou no arquivo .csproj?
Considere esta classe C # simples (e ruim):
using System;
namespace N
{
static class C
{
static void M(DateTime d)
{
if (d == null)
Console.WriteLine("Yes");
else
Console.WriteLine("No");
}
static void L(object o)
{
if (o is Nullable)
Console.WriteLine("Yes");
else
Console.WriteLine("No");
}
}
}
Ambos os métodosM
eL
problemas sérios.
NoM
, perguntamos se um valor da estrutura não anulávelDateTime
é igual a null por meio do==
operador (que existe desdeDateTime
sobrecargasoperator ==
) Isso sempre cai, e o compilador pode dizer em tempo de compilação, portanto, temos uma ramificação ("Yes"
) inacessível.
NoN
perguntamos seo
é uma instância dostatic class Nullable
que nunca pode ser o caso (observe, a classe estáticaNullable
não é o mesmo que o structNullable<>
) Novamente, este é um erro do desenvolvedor, e o"Yes"
declaração está inacessível.
Queremos um aviso em tempo de compilação (ou "aviso como erro") nesses casos, certo?
Como parece, por meio do acúmulo gradual de erros e / ou omissões no compilador C # antigo usado no C # 1.0 a 5.0, os avisos de tempo de compilação esperados não apareceram no compilador antigo. Felizmente, agora temos o Roslyn / C # 6.0 / Visual Studio 2015 e esperamos receber um aviso. Mas não, devido ao desejo de não emitir avisos de Roslyn de que, quando não estão presentes no compilador antigo (compatibilidade com versões anteriores?), Essas situações ainda não são avisadas.
No entanto, se você compilar a partir da linha de comando, comcsc.exe
, você pode usar:
csc.exe /features:strict ... ...
e você receberá os avisos que deseja!/features:strict
fazcsc.exe
inclua avisos de que o antigo compilador de C # "fogot".
Como especifico o equivalente a/features:strict
paramsbuild.exe
linha de comandoou no.csproj
Arquivo?
Às vezes, por exemplo quando temos XAML em nosso projeto de compilação, não é fácil usarcsc.exe
diretamente, temos que usar um.csproj
arquivar e compilar atravésmsbuild.exe
.