根据C# 8 公告视频,可以为整个项目启用“可空引用类型”功能。
但是如何为项目启用它呢?我在 Visual Studio 2019 Preview 1 的“项目属性”窗口中没有找到任何新的合适选项。
.csproj
如果 C# 语言版本更改为 8.0,是否可以为“遗留”项目启用它?
根据C# 8 公告视频,可以为整个项目启用“可空引用类型”功能。
但是如何为项目启用它呢?我在 Visual Studio 2019 Preview 1 的“项目属性”窗口中没有找到任何新的合适选项。
.csproj
如果 C# 语言版本更改为 8.0,是否可以为“遗留”项目启用它?
在 Visual Studio 16.2(从预览版 1 开始)中,属性名称更改为Nullable
,这更简单并且与命令行参数对齐。
将以下属性添加到您的.csproj
文件中。
<PropertyGroup>
<Nullable>enable</Nullable>
<LangVersion>8.0</LangVersion>
</PropertyGroup>
如果您的目标是netcoreapp3.0
或更高版本,则无需指定 aLangVersion
即可启用可为空的引用类型。
对于较旧的 Visual Studio 版本:
NullableContextOptions
为enable
.NullableReferenceTypes
为true
.请注意,此设置在 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 项目启用 Nullable Reference Types 功能,请将NullableReferenceTypes
属性添加到.csproj
文件中,如下所示:
<PropertyGroup>
...
<NullableReferenceTypes>true</NullableReferenceTypes>
<LangVersion>8.0</LangVersion>
</PropertyGroup>
正如@JulienCouvreur 在关于https://github.com/dotnet/project-system/issues/4058的评论中所引用的那样,“旧”项目系统尚不支持新属性,但将在 C# 8.0 发布之前支持。
您询问了传统.csproj
格式。在文本编辑器中打开项目文件并进行以下更改:
<LangVersion>8.0</LangVersion>
在Debug
和Release
PropertyGroup 部分中添加/更改:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<LangVersion>preview</LangVersion>
<Nullable>enable</Nullable>
通过添加到 main启用对可为空的引用类型的支持PropertyGroup
:
<PropertyGroup>
<Nullable>enable</Nullable>
在 Visual Studio 2019 v16.2.0 Preview 3 中使用 C# 8 和可为空的引用类型语法使用 .NET WinForms 应用进行测试。
SDK 风格的项目要简单得多,并且可以在 Visual Studio 中进行编辑。对于这些,您只需要(与orPropertyGroup
相同):TargetFramework
TargetFrameworks
<PropertyGroup>
<LangVersion>8.0</LangVersion>
<Nullable>enable</Nullable>
</PropertyGroup>
.NET Core 3.x 项目默认以C# 8 为目标,因此您无需LangVersion
为这些项目指定 .NET Core 3.x 项目。
.NET Framework 项目的默认值为 C# 7.3,即使使用<LangVersion>latest</LangVersion>
. 您必须将语言版本显式设置为 8.0。请参阅我对C# 8 是否支持 .NET Framework的问题的回答。更多细节。