Laut dem C # 8-Ankündigungsvideo kann die Funktion "Nullable Reference Types" für das gesamte Projekt aktiviert werden.
Aber wie kann man es für das Projekt aktivieren? Ich habe keine neue geeignete Option im Fenster Projekteigenschaften in Visual Studio 2019 Vorschau 1 gefunden.
Kann es für "Legacy" .csproj
-Projekte aktiviert werden, wenn die C # -Sprachenversion auf 8.0 geändert wird?
NullableContextOptions
noch.enable
bedeutet "Aktivieren Sie die neue C # 8.0-Einstellung, bei der Typen standardmäßig nicht nullwertfähig sind".disable
bedeutet "mach es auf die alte Art und Weise, wo jeder Typ nullbar ist."LangVersion
undNullable
Eigenschaften hinzugefügt ,.csproj
und es funktioniert einwandfrei. Das Projekt hatToolsVersion="15.0"
auch.Beachten Sie, dass sich diese Einstellung zwischen VS 2019 Vorschau 1 und Vorschau 2 geändert hat. Bei Vorschau 2 oder 3 benötigen Sie diese Einstellung in
.csproj
:<PropertyGroup> <LangVersion>8.0</LangVersion> <NullableContextOptions>enable</NullableContextOptions> </PropertyGroup>
Die
<NullableReferenceTypes>
in der früheren Antwort erwähnte (die, als ich diese Antwort ursprünglich am 4. Februar 2019 schrieb, als akzeptierte Antwort markiert war) war zum Zeitpunkt der Erstellung der Antwort korrekt, wird jedoch nicht mehr erkannt.quelle
enable
,disable
,safeonly
etc.): github.com/dotnet/roslyn/blob/master/docs/features/...Beachten Sie, dass zusätzlich zu der von @DrewNoakes akzeptierten Antwort die Eigenschaft nullable für alle Projekte gleichzeitig festgelegt werden kann, indem Sie eine Datei hinzufügen, die
Directory.Build.props
in dem Ordner aufgerufen wird , der Ihre.sln
Datei enthält .Definieren Sie Ihre
Directory.Build.props
Datei einfach so:Sie müssen Visual Studio neu starten, damit dies wirksam wird.
Mehr über
Directory.Build.props
quelle
Für Visual Studio 2019 Preview 2 & 3 siehe Ian Griffiths Antwort
Lösung für Visual Studio 2019 Vorschau 1 :
Um die Funktion "Nullable Referenztypen" für das .NET Core-Projekt zu aktivieren, fügen Sie
NullableReferenceTypes
der.csproj
Datei folgende Eigenschaften hinzu :<PropertyGroup> ... <NullableReferenceTypes>true</NullableReferenceTypes> <LangVersion>8.0</LangVersion> </PropertyGroup>
Da in den Kommentaren zu https://github.com/dotnet/project-system/issues/4058 auf @JulienCouvreur verwiesen wird, wird die neue Eigenschaft im "alten" Projektsystem noch nicht unterstützt. Wird jedoch vor der Veröffentlichung von C # 8.0 unterstützt.
quelle
net472
? Wie / wo haben Sie diese Einstellung übrigens gefunden? Diese Referenz wäre sehr nützlich. Ich habe viele Dinge gefunden, die nicht ganz funktionieren, wie im Video gezeigtLegacy-csproj-Format
Sie haben nach dem Legacy-
.csproj
Format gefragt . Öffnen Sie die Projektdatei in einem Texteditor und nehmen Sie folgende Änderungen vor:Hinzufügen / Ändern
<LangVersion>8.0</LangVersion>
in den AbschnittenDebug
undRelease
PropertyGroup:<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <LangVersion>preview</LangVersion>
Aktivieren der Unterstützung für Nullable - Referenztypen durch Zugabe
<Nullable>enable</Nullable>
zu dem HauptPropertyGroup
:Getestet mit einer .NET WinForms-App unter Verwendung der Syntax von C # 8 und nullbaren Referenztypen in Visual Studio 2019 v16.2.0 Vorschau 3.
Projektdateien im SDK-Stil
Projekte im SDK-Stil sind viel einfacher und können in Visual Studio bearbeitet werden. Für diese benötigen Sie lediglich (im selben
PropertyGroup
wieTargetFramework
oderTargetFrameworks
):<PropertyGroup> <LangVersion>8.0</LangVersion> <Nullable>enable</Nullable> </PropertyGroup>
Anmerkungen
.NET Core 3.x-Projekte zielen standardmäßig auf C # 8 ab , sodass Sie das
LangVersion
für diese Projekte nicht angeben müssen .Die Standardeinstellung für .NET Framework-Projekte ist C # 7.3, und Sie erhalten C # 8.0 auch mit nicht
<LangVersion>latest</LangVersion>
. Sie müssen die Sprachversion explizit auf 8.0 einstellen. Bitte beziehen Sie sich auf meine Antwort auf die Frage Unterstützt C # 8 .NET Framework? für mehr Details.quelle
Es ist erwähnenswert, dass dies mittlerweile auch eine exponierte Einstellung auf der Eigenschaftenseite eines Projekts ist:
Zumindest in VS2019 16.6+
quelle