Как указать эквивалент / 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
.