根据新的名为“可空引用类型”的C#8.0功能的发布,可以为整个项目启用它。 (此处提到:https://youtu.be/VdC0aoa7ung?t=137) 但是如何为项目启用它?在Visual Studio 2019 Preview 1的“项目属性”窗口中找不到任何新的适当选项。如果C#语言版本更改为8.0,可以为“ .NET Framework”旧项目启用该选项吗?
答案 0 :(得分:21)
请注意,此设置在VS 2019预览1和预览2之间进行了更改。使用预览2或3,您需要在.csproj
中进行此设置:
<PropertyGroup>
<LangVersion>8.0</LangVersion>
<NullableContextOptions>enable</NullableContextOptions>
</PropertyGroup>
因此,早先的答案中提到的<NullableReferenceTypes>
(在我最初于2019年2月4日撰写此答案时,已被标记为接受的答案)在撰写答案时是正确的,但这是不再被识别。
答案 1 :(得分:7)
对于Visual Studio 2019 P 评论2和3 ,请参阅Ian Griffiths的答案
Visual Studio 2019解决方案 预览1 :
要为.NET Core项目启用可空引用类型功能,请向NullableReferenceTypes
文件中添加.csproj
属性,如下所示:
<PropertyGroup>
...
<NullableReferenceTypes>true</NullableReferenceTypes>
<LangVersion>8.0</LangVersion>
</PropertyGroup>
UPD:
正如@JulienCouvreur在有关https://github.com/dotnet/project-system/issues/4058的注释中所引用的那样,“旧”项目系统尚不支持新属性。但是将在C#8.0发布之前得到支持。
答案 2 :(得分:3)
在Visual Studio 16.1中,属性名称更改为Nullable
,它更简单并且与命令行参数对齐。
<PropertyGroup>
...
<Nullable>enable</Nullable>
<LangVersion>8.0</LangVersion>
</PropertyGroup>
答案 3 :(得分:3)
答案 4 :(得分:1)
除了接受@DrewNoakes接受的答案外,请注意,可以通过在包含您的{{1的文件夹中添加一个名为Directory.Build.props
的文件,一次为所有项目设置空值属性 }}文件。
只需这样定义您的.sln
文件:
Directory.Build.props
您需要重新启动Visual Studio才能生效。
的更多信息答案 5 :(得分:0)
您询问了旧版.csproj
格式。通过手动进行以下更改,我已经能够在Visual Studio 2019(v16.2.0 Preview 3)中使用C#8编译.NET WinForms应用程序:
向<LangVersion>preview</LangVersion>
和8.0
PropertyGroup部分添加Debug
(或Release
):
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<LangVersion>preview</LangVersion>
通过将<Nullable>enable</Nullable>
添加到主要PropertyGroup
中来启用对可为空的引用类型的支持:
<PropertyGroup>
<Nullable>enable</Nullable>
使用此配置,可为空的引用类型将编译而不会发出警告或错误。
如果删除<Nullable>enable</Nullable>
,则项目会编译,但编译器会警告“ CS8632:可为空的引用类型的注释只能在“ #nullable”上下文中的代码中使用。”
如果需要更多信息,请参考我对问题Does C# 8 support the .NET Framework?的回答。
SDK样式的项目要简单得多,并且可以在Visual Studio中进行编辑。对于这些,您需要做的就是(与PropertyGroup
或TargetFramework
位于同一TargetFrameworks
中)
<PropertyGroup>
<LangVersion>8.0</LangVersion>
<Nullable>enable</Nullable>
</PropertyGroup>
在两种情况下,一旦C#8退出预览,您可能都想使用<LangVersion>latest</LangVersion>
-有关更多信息,请参见MSDN上的C# language versioning。