根据 C # 8公告视频,“可空引用类型”特性可以为整个项目启用。
但是如何为项目启用它呢?在 VisualStudio2019Preview 1的“项目属性”窗口中,我没有找到任何新的合适选项。
如果 C # 语言版本更改为8.0,是否可以为“遗留”.csproj项目启用?
.csproj
有关 VisualStudio2019预览2 & 3,请参见 Ian Griffiths 的回答。
VisualStudio2019 预览1 强 >解决方案:
若要为.NET Core 项目启用 Nullable Reference Types 特性,请向 .csproj文件中添加 NullableReferenceTypes属性,如下所示:
NullableReferenceTypes
<PropertyGroup> ... <NullableReferenceTypes>true</NullableReferenceTypes> <LangVersion>8.0</LangVersion> </PropertyGroup>
正如@JulienCouvreur 在关于 https://github.com/dotnet/project-system/issues/4058的评论中提到的那样,新属性在“旧”项目系统中还不支持,但在 C # 8.0发布之前将得到支持。
请注意,此设置在 VS2019预览版1和预览版2之间更改。预览2或3,你需要在你的 .csproj:
<PropertyGroup> <LangVersion>8.0</LangVersion> <NullableContextOptions>enable</NullableContextOptions> </PropertyGroup>
早期答案中提到的 <NullableReferenceTypes>(当我最初在2019年2月4日写这个答案时,它已经被标记为接受的答案)在写这个答案时是正确的,但它不再被认可。
<NullableReferenceTypes>
在 Visual Studio 16.2(从预览1开始)中,属性名改为 Nullable,这样更简单,并且与命令行参数保持一致。
Nullable
将以下属性添加到 .csproj文件中。
<PropertyGroup> <Nullable>enable</Nullable> <LangVersion>8.0</LangVersion> </PropertyGroup>
如果您的目标是 netcoreapp3.0或更高版本,则不需要指定 LangVersion来启用可为空的引用类型。
netcoreapp3.0
LangVersion
或者,如果你喜欢使用 GUI,打开 ProjectProperties UI,搜索 无效并选择你想要的选项:
对于较旧的 VisualStudio 版本:
NullableContextOptions
enable
true
您询问了遗留的 .csproj格式。在文本编辑器中打开项目文件并进行以下更改:
在 Debug和 Release PropertyGroup 部分添加/更改 <LangVersion>8.0</LangVersion>:
Debug
Release
<LangVersion>8.0</LangVersion>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <LangVersion>preview</LangVersion>
通过将 <Nullable>enable</Nullable>添加到主 PropertyGroup,支持可空引用类型:
<Nullable>enable</Nullable>
PropertyGroup
<PropertyGroup> <Nullable>enable</Nullable>
测试了一个。NET WinForms 应用程序在 Visual Studio 2019 v16.2.0 Preview 3中使用 C # 8和可空引用类型语法。
SDK 样式的项目要简单得多,并且可以在 VisualStudio 中编辑。对于这些你所需要的是(在相同的 PropertyGroup作为 TargetFramework或 TargetFrameworks) :
TargetFramework
TargetFrameworks
<PropertyGroup> <LangVersion>8.0</LangVersion> <Nullable>enable</Nullable> </PropertyGroup>
NET Core 3.x 项目的目标是 C # 8 默认情况下,因此不需要为这些项目指定 LangVersion。
的默认值。NET Framework 项目是 C # 7.3,即使使用 <LangVersion>latest</LangVersion>也得不到 C # 8.0。必须显式地将语言版本设置为8.0。详情请参阅我对问题 C # 8支持.NET Framework 吗?的回答。
<LangVersion>latest</LangVersion>
除了@DrewNoakes 接受的答案之外,请注意,可以通过在包含 .sln文件的文件夹中添加一个名为 Directory.Build.props的文件来为 一次性完成所有项目设置可空属性。
.sln
Directory.Build.props
只需像这样定义 Directory.Build.props文件:
<Project> <PropertyGroup> <Nullable>enable</Nullable> </PropertyGroup> </Project>
需要重新启动 VisualStudio 才能生效。
更多关于 Directory.Build.props的资料。
值得注意的是,到目前为止,这也是项目属性页面中的一个公开设置:
至少在 VS2019中是16.6 + 。