如何为整个项目启用 C# 8.0 的 Nullable Reference Types 特性

问题描述 投票:0回答:6

根据 C# 8 公告视频 可以为整个项目启用“可空引用类型”功能。

但是如何为项目启用它?我在 Visual Studio 2019 Preview 1 的“项目属性”窗口中没有找到任何新的合适选项。

如果 C# 语言版本更改为 8.0,是否可以为 'legacy'

.csproj
项目启用?

c# visual-studio visual-studio-2019 c#-8.0 nullable-reference-types
6个回答
161
投票

要为项目中的所有代码启用可空引用类型,请将以下内容添加到其

.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 版本:

  • 您必须至少使用 VS 16.0
  • 在16.0预览1中,将
    NullableReferenceTypes
    设置为
    true
  • 从16.0预览版2到16.1,设置
    NullableContextOptions
    enable
  • 从16.2预览版1开始,使用
    Nullable
    如上。

36
投票

请注意,此设置在 VS 2019 预览版 1 和预览版 2 之间发生了变化。对于预览版 2 或 3,您需要在您的

.csproj
:

<PropertyGroup>
  <LangVersion>8.0</LangVersion>
  <NullableContextOptions>enable</NullableContextOptions>
</PropertyGroup>

前面的答案中提到的

<NullableReferenceTypes>
(当我最初在2019年2月4日写这个答案时,它被标记为已接受的答案)在写答案时是正确的,但它不再被识别。


27
投票

除了@DrewNoakes 接受的答案外,请注意,可以通过在包含您的Directory.Build.props文件的文件夹中添加一个名为

.sln
的文件,一次性为
所有项目设置可空属性。

只需像这样定义您的

Directory.Build.props

文件:

<Project> <PropertyGroup> <Nullable>enable</Nullable> </PropertyGroup> </Project>
您需要重新启动 Visual Studio 才能生效。

更多关于

Directory.Build.props

.
    


23
投票
值得注意的是,到目前为止,这也是项目属性页面中的公开设置:

至少在 VS2019 16.6+.


12
投票

对于 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>


正如@JulienCouvreur 在关于

https://github.com/dotnet/project-system/issues/4058 的评论中提到的,“旧”项目系统尚不支持新属性,但在 C# 8.0 之前将支持释放。


10
投票
旧版 csproj 格式

您询问了遗留

.csproj

 格式。在文本编辑器中打开项目文件并进行以下更改:

  1. <LangVersion>8.0</LangVersion>

    Debug
    PropertyGroup部分添加/更改
    Release

    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <LangVersion>preview</LangVersion>
    
    
  2. 通过将

    <Nullable>enable</Nullable>

     添加到主 
    PropertyGroup
    :
    来启用对可空引用类型的支持

    <PropertyGroup> <Nullable>enable</Nullable>
    
    
在 Visual Studio 2019 v16.2.0 Preview 3 中使用 C# 8 和可空引用类型语法使用 .NET WinForms 应用程序进行测试。


SDK 风格的项目文件

SDK 风格的项目要简单得多,并且可以在 Visual Studio 中进行编辑。对于这些,您只需要(与

PropertyGroup

TargetFramework
相同的
TargetFrameworks
):

<PropertyGroup> <LangVersion>8.0</LangVersion> <Nullable>enable</Nullable> </PropertyGroup>


注意事项

© www.soinside.com 2019 - 2024. All rights reserved.