Einführung
Betrachten Sie diese einfach (und schlecht) Klasse C#:Wie wird das Äquivalent von/features: strict (von csc.exe) zu msbuild.exe oder in der .csproj-Datei angegeben?
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");
}
}
}
Beide Methoden M
und L
ernsthafte Probleme haben.
In M
, fragen wir, ob ein Wert der Nicht-Nullable-Struktur DateTime
auf null über den angehobenen ==
Operator gleich ist (die seit DateTime
Überlastungen existiert operator ==
). Dies ist immer der Fall, und der Compiler kann zur Kompilierungszeit sagen, dass wir einen Zweig ("Yes"
) haben, der nicht erreichbar ist.
In N
wir fragen, ob o
eine Instanz der static class Nullable
ist das nie der Fall sein kann (Anmerkung, die statische Klasse Nullable
ist nicht das gleiche wie die Struktur Nullable<>
). Auch dies ist ein Entwicklerfehler, und die "Yes"
-Anweisung ist nicht erreichbar.
Wir wollen eine Kompilierung-Warnung (oder "Warnung als Fehler") in diesen Fällen, richtig?
Wie es scheint, durch allmähliche Anhäufung von Compiler-Fehlern und/oder Auslassungen im alten C# -Compiler, der für C# 1.0 bis 5.0 verwendet wurde, die erwarteten Kompilierungswarnungen nicht mit dem alten Compiler angezeigt werden. Zum Glück haben wir jetzt Roslyn/C# 6.0/Visual Studio 2015 und erwarten eine Warnung. Aber nein, wegen des Wunsches, keine Warnungen von Roslyn auszusenden, die bei dem alten Compiler nicht vorhanden waren (Rückwärtskompatibilität?), Wird diesen Situationen immer noch nicht gewarnt.
Wenn Sie jedoch über die Befehlszeile zu kompilieren, mit csc.exe
, können Sie verwenden:
csc.exe /features:strict ... ...
und Sie werden die Warnungen Sie erhalten! /features:strict
macht csc.exe
Warnungen enthalten, dass der alte C# -Compiler "fogot".
Meine Frage
Wie gebe ich das Äquivalent von /features:strict
-msbuild.exe
Befehlszeile oder in der .csproj
-Datei?
Manchmal, z.B. Wenn wir XAML in unserem Build-Projekt haben, ist es nicht einfach, csc.exe
direkt zu verwenden, wir müssen eine .csproj
Datei verwenden und kompilieren durch msbuild.exe
. in csproj Datei
Wo ist '/ Features: strict' dokumentiert? Nicht auf https://msdn.microsoft.com/en-us/library/6ds95cz0.aspx ... –
@KrisVandermotten Eine gute Frage. Ich weiß es nicht. Sie können selbst überprüfen, ob es funktioniert. Ich glaube, ich entdeckte das Feature, als ich zu einem Roslyn-Forum oder Roslyn Change Request geführt wurde, als ich das googelte. Ich erinnere mich nicht genau, wo das war. –