但是如何为项目启用此功能呢?我在Visual Studio 2019 Preview 1的项目属性窗口中没有找到任何新的适当选项。
如果将C#语言版本更改为8.0,它是否可以为“传统”的
.csproj
项目启用?.csproj
项目启用?要为项目中的所有代码启用可空引用类型,请将以下内容添加到其.csproj
文件中:
<PropertyGroup>
<Nullable>enable</Nullable>
</PropertyGroup>
或者打开项目属性用户界面,搜索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日撰写此答案时,已被标记为被接受的答案)是正确的,但它现在不再被认可。
enable
,disable
,safeonly
等):https://github.com/dotnet/roslyn/blob/master/docs/features/nullable-reference-types.md#setting-project-level-nullable-context - Sergey V.sln
文件的文件夹中添加名为 Directory.Build.props
的文件来为所有项目同时设置可空属性。
只需像这样定义您的 Directory.Build.props
文件:
<Project>
<PropertyGroup>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
为使更改生效,您需要重新启动 Visual Studio。
有关Directory.Build.props
的更多信息。
<PropertyGroup>
...
<NullableReferenceTypes>true</NullableReferenceTypes>
<LangVersion>8.0</LangVersion>
</PropertyGroup>
net472
吗?顺便问一下,你是在哪里找到这个设置的呢?那个参考资料会非常有用。我发现很多东西在视频中展示的并不完全适用。 - Panagiotis Kanavos您询问了有关传统 .csproj
格式的问题。在文本编辑器中打开项目文件并进行以下更改:
Add/change <LangVersion>8.0</LangVersion>
in the Debug
and Release
PropertyGroup sections:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<LangVersion>preview</LangVersion>
Enable support for nullable reference types by adding <Nullable>enable</Nullable>
to the main PropertyGroup
:
<PropertyGroup>
<Nullable>enable</Nullable>
使用Visual Studio 2019 v16.2.0 Preview 3测试了一个使用C# 8和可空引用类型语法的.NET WinForms应用程序。
SDK风格的项目更加简单,可以在Visual Studio中进行编辑。对于这些项目,您所需要的是(在同一个PropertyGroup
中作为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?”。
enable
表示“启用新的 C# 8.0 设置,使类型默认为非空”。disable
表示“以旧有方式处理,即每种类型都可为空。” - Ryan LundyLangVersion
和Nullable
属性添加到.csproj
中,它可以正常工作。该项目还具有ToolsVersion="15.0"
。 - Drew Noakes