Como especificar o equivalente de / features: strict (de csc.exe) ao msbuild.exe ou no arquivo .csproj?

Introdução

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".

Minha pergunta

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.

questionAnswers(1)

yourAnswerToTheQuestion