根据 C# 8 公告视频 可以为整个项目启用“可空引用类型”功能。
但是如何为项目启用它?我在 Visual Studio 2019 Preview 1 的“项目属性”窗口中没有找到任何新的合适选项。
如果 C# 语言版本更改为 8.0,是否可以为 'legacy'
.csproj
项目启用?
要为项目中的所有代码启用可空引用类型,请将以下内容添加到其
.csproj
文件中:
<PropertyGroup>
<Nullable>enable</Nullable>
</PropertyGroup>
或者打开项目属性 UI,搜索 nullable 并选择您想要的选项:
Directory.Build.props
文件中。您也可以使用这样的文件来指定跨多个项目的其他属性。
如果您的目标是早于
netcoreapp3.0
的 .NET 版本,您还需要将 LangVersion
设置为 8 或更高,因为 C# 8 中添加了可空引用类型:
<PropertyGroup>
<Nullable>enable</Nullable>
<LangVersion>8.0</LangVersion>
</PropertyGroup>
对于较旧的 Visual Studio 版本:
NullableReferenceTypes
设置为true
。NullableContextOptions
为enable
。Nullable
如上。请注意,此设置在 VS 2019 预览版 1 和预览版 2 之间发生了变化。对于预览版 2 或 3,您需要在您的
.csproj
:
<PropertyGroup>
<LangVersion>8.0</LangVersion>
<NullableContextOptions>enable</NullableContextOptions>
</PropertyGroup>
前面的答案中提到的
<NullableReferenceTypes>
(当我最初在2019年2月4日写这个答案时,它被标记为已接受的答案)在写答案时是正确的,但它不再被识别。
除了@DrewNoakes 接受的答案外,请注意,可以通过在包含您的Directory.Build.props
文件的文件夹中添加一个名为
.sln
的文件,一次性为所有项目设置可空属性。只需像这样定义您的
Directory.Build.props
文件:
<Project>
<PropertyGroup>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
您需要重新启动 Visual Studio 才能生效。更多关于.
对于 Visual Studio 2019 Preview 2 和 3,请参阅Ian Griffiths 的回答。
Visual Studio 2019 的解决方案Preview 1:
要为 .NET Core 项目启用可空引用类型功能,请将NullableReferenceTypes
属性添加到
.csproj
文件,如下所示:
<PropertyGroup>
...
<NullableReferenceTypes>true</NullableReferenceTypes>
<LangVersion>8.0</LangVersion>
</PropertyGroup>
https://github.com/dotnet/project-system/issues/4058 的评论中提到的,“旧”项目系统尚不支持新属性,但在 C# 8.0 之前将支持释放。
.csproj
格式。在文本编辑器中打开项目文件并进行以下更改:
<LangVersion>8.0</LangVersion>
和
Debug
PropertyGroup部分添加/更改
Release
:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<LangVersion>preview</LangVersion>
<Nullable>enable</Nullable>
添加到主
PropertyGroup
:来启用对可空引用类型的支持
<PropertyGroup>
<Nullable>enable</Nullable>
PropertyGroup
或
TargetFramework
相同的
TargetFrameworks
):
<PropertyGroup>
<LangVersion>8.0</LangVersion>
<Nullable>enable</Nullable>
</PropertyGroup>
,因此您无需为这些项目指定LangVersion
。
<LangVersion>latest</LangVersion>
也不会获得 C# 8.0。您必须将语言版本明确设置为 8.0。请参阅我对问题C# 8 支持.NET Framework 吗? 的回答以获取更多详细信息。