How to enable Nullable Reference Types feature of C# 8.0 for the whole project
Solution 1:
In Visual Studio 16.2 (from preview 1) the property name is changed to Nullable
, which is simpler and aligns with the command line argument.
Add the following properties to your .csproj
file.
<PropertyGroup>
<Nullable>enable</Nullable>
<LangVersion>8.0</LangVersion>
</PropertyGroup>
If you're targeting netcoreapp3.0
or later, you don't need to specify a LangVersion
to enable nullable reference types.
For older Visual Studio versions:
- From 16.0 preview 2 to 16.1, set
NullableContextOptions
toenable
. - In 16.0 preview 1, set
NullableReferenceTypes
totrue
.
Solution 2:
Note that this setting is changed between VS 2019 preview 1 and preview 2. With preview 2 or 3, you need this in your .csproj
:
<PropertyGroup>
<LangVersion>8.0</LangVersion>
<NullableContextOptions>enable</NullableContextOptions>
</PropertyGroup>
The <NullableReferenceTypes>
mentioned in the earlier answer (which, when I originally wrote this answer on 4th Feb 2019, had been marked as the accepted answer) was correct at the time that answer was written, but it is no longer recognized.
Solution 3:
In addition to @DrewNoakes accepted answer, note that the nullable property can be set for all projects at once by adding a file called Directory.Build.props
in the folder that contains your .sln
file.
Just define your Directory.Build.props
file like this:
<Project>
<PropertyGroup>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
You will need to restart Visual Studio for this to take effect.
More about Directory.Build.props
.
Solution 4:
Worth noting that, by now, this is also an exposed setting in a project's Properties page:
At least in VS2019 16.6+.
Solution 5:
For Visual Studio 2019 Preview 2 & 3, see Ian Griffiths's answer.
Solution for Visual Studio 2019 Preview 1:
To enable Nullable Reference Types feature for the .NET Core project, add NullableReferenceTypes
property to the .csproj
file like this:
<PropertyGroup>
...
<NullableReferenceTypes>true</NullableReferenceTypes>
<LangVersion>8.0</LangVersion>
</PropertyGroup>
As @JulienCouvreur referenced in comments regarding to https://github.com/dotnet/project-system/issues/4058, the new property is not yet supported in 'old' project system, but will be supported before C# 8.0 released.