如何为整个项目启用C#8.0的可空引用类型功能
根据“可空引用类型”功能可以为整个项目启用 但是如何为项目启用它呢?我在Visual Studio 2019预览1的“项目属性”窗口中未找到任何新的适当选项如何为整个项目启用C#8.0的可空引用类型功能,c#,visual-studio,visual-studio-2019,c#-8.0,nullable-reference-types,C#,Visual Studio,Visual Studio 2019,C# 8.0,Nullable Reference Types,根据“可空引用类型”功能可以为整个项目启用 但是如何为项目启用它呢?我在Visual Studio 2019预览1的“项目属性”窗口中未找到任何新的适当选项 如果C语言版本更改为8.0,是否可以为“遗留”的.csproj项目启用它?对于Visual Studio 2019预览版2和3,请参见Ian Griffiths的答案。 Visual Studio 2019的解决方案预览1: 要为.NET核心项目启用可空引用类型功能,请将NullableReferenceTypes属性添加到.csproj文
如果C语言版本更改为8.0,是否可以为“遗留”的.csproj项目启用它?对于Visual Studio 2019预览版2和3,请参见Ian Griffiths的答案。 Visual Studio 2019的解决方案预览1: 要为.NET核心项目启用可空引用类型功能,请将
NullableReferenceTypes
属性添加到.csproj
文件,如下所示:
...
真的
8
正如@JulienCouvreur在有关的评论中所引用的,新属性在“旧”项目系统中尚不受支持,但在C#8.0发布之前将受支持。请注意,此设置在VS 2019预览1和预览2之间更改。使用preview 2或preview 3,您需要在
.csproj
中使用此选项:
8
使可能
早期答案中提到的
(我最初在2019年2月4日编写此答案时,已将其标记为已接受答案)在编写答案时是正确的,但已不再被识别。在Visual Studio 16.2(预览版1)中,属性名称更改为可为null
,它更简单,并且与命令行参数一致
将以下属性添加到.csproj
文件中
使可能
8
如果您的目标是netcoreapp3.0
或更高版本,则无需指定LangVersion
即可启用可为空的引用类型
对于较旧的Visual Studio版本:
- 从16.0预览版2到16.1,将
设置为NullableContextOptions
启用
- 在16.0预览版1中,将
设置为NullableReferenceTypes
true
.csproj
格式。在文本编辑器中打开项目文件并进行以下更改:
Debug
和Release
属性组部分中添加/更改8.0
:
预览
启用
添加到主属性组
,启用对可为空引用类型的支持:
使可能
SDK样式的项目文件 SDK样式的项目要简单得多,并且可以在VisualStudio中编辑。对于这些,您所需要的是(在与
TargetFramework
或TargetFrameworks
相同的PropertyGroup
中):
8
使可能
笔记
- .NET Core 3.x项目以C#8为目标,因此不需要为这些项目指定
LangVersion
- NET Framework项目的默认值为C#7.3,即使使用
,也无法获得C#8.0。必须将语言版本显式设置为8.0。详情请参阅我对问题的回答最新版本
.sln
文件的文件夹中添加名为Directory.Build.props
的文件,一次为所有项目设置可空属性
只需像这样定义目录.Build.props
文件:
使可能
您需要重新启动Visual Studio才能生效
更多关于。值得注意的是,到目前为止,这也是项目属性页中的一个公开设置:
至少在VS2019 16.6+。您是否尝试将目标框架更改为
net472
?顺便问一下,你是如何/在哪里找到那个环境的?这一参考将非常有用。如图所示,我发现很多东西都不太管用video@PanagiotisKanavos,这个标签是由Mads Torgersen在YouTube上的评论中提出的。Mads Torgersen是我在原始问题中链接的视频的作者。这个属性在“旧”项目中还不受支持。有关此选项可用值的更多信息会跟踪此问题(启用
、禁用
、仅安全
等):在最近的版本中是否再次更改此选项?在预览版4.2中,这似乎不适用于我,因为Visual studio 6.2已简化为(请参见接受的答案),我只是在VS2019/16.1.1中尝试了这一点,但它似乎没有起到任何作用。为了测试它,我在其中一个类中加入了#nullable enable,然后我可以看到关于null对象的警告。@LarrySmith抱歉,这个更改是在16.2P1中进行的。我已经更新了我的答案。在16.1.1中,您仍然需要NullableContextOptions
。请注意,布尔逻辑可能有点不直观:enable
表示“启用新的C#8.0设置,其中类型默认不可为null”<代码>禁用意味着“在每种类型都可以为空的情况下,按照旧方法进行操作”。我还必须从旧的“15,0”中更新和16.0,然后才能处理旧的非SDK项目,即使它们已通过VS 16.3 RTM的属性GUI正确升级到framework 4.8。只有C#8语言版本受到尊重,没有任何额外的项目文件编辑。@TonyWall我很好奇你为什么需要它。我刚刚在VS16.3.7中创建了一个新的.NET Framework控制台应用程序(即非SDK风格的项目),在.csproj
中添加了LangVersion
和Nullable
属性,效果很好。该项目也有ToolsVersion=“15.0”
。但不适用于旧式csproj。