Как указать эквивалент / features: строгий (из csc.exe) для msbuild.exe или в файле .csproj?

Вступление

Рассмотрим этот простой (и плохой) класс C #:

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");
    }

  }
}

Оба методаM а такжеL есть серьезные проблемы.

ВMмы спрашиваем, является ли значение необнуляемой структурыDateTime равно нулю через поднял== оператор (который существует сDateTime перегрузкиoperator ==). Это всегда падает, и компилятор может сказать во время компиляции, поэтому у нас есть ветвь ("Yes") который недоступен.

ВN мы спрашиваем, еслиo является примеромstatic class Nullable что никогда не может быть так (обратите внимание, статический классNullable не то же самое, что структураNullable<>). Опять же, это ошибка разработчика, и"Yes" Заявление недоступно.

Мы хотим, чтобы предупреждение во время компиляции (или «предупреждение как ошибка») в этих случаях, верно?

Как представляется, из-за постепенного накопления ошибок и / или пропусков компилятора в старом компиляторе C #, который использовался для C # 1.0–5.0, ожидаемые предупреждения во время компиляции не появлялись со старым компилятором. К счастью, сейчас у нас есть Roslyn / C # 6.0 / Visual Studio 2015, и мы ожидаем получить предупреждение. Но нет, из-за желания не выдавать предупреждения от Roslyn о том, что там, где нет старого компилятора (обратная совместимость?), Эти ситуации все еще не предупреждены.

Однако, если вы компилируете из командной строки, сcsc.exe, ты можешь использовать:

csc.exe /features:strict ... ...

и вы получите предупреждения, которые вы хотите!/features:strict маркиcsc.exe включают предупреждения о том, что старый компилятор C # "fogot".

Мой вопрос

Как мне указать эквивалент/features:strict вmsbuild.exe командная строкаили же в.csproj файл?

Иногда, например когда в нашем проекте сборки есть XAML, его нелегко использоватьcsc.exe напрямую, мы должны использовать.csproj файл и скомпилировать черезmsbuild.exe.

Ответы на вопрос(1)

Ваш ответ на вопрос