根据C#8公告视频,可以为整个项目启用“空引用类型”功能。
但是如何为项目启用它?我没有发现在项目属性窗口中的任何新的合适的选项在Visual Studio 2019预览版。
.csproj
如果将C#语言版本更改为8.0 ,可以为“旧版”项目启用它吗?
Answers:
在Visual Studio 16.2中(从预览1开始),属性名称更改Nullable
为更简单,并且与命令行参数对齐。
<PropertyGroup>
...
<Nullable>enable</Nullable>
<LangVersion>8.0</LangVersion>
</PropertyGroup>
请注意,如果您要定位netcoreapp3.0
或更高版本,则无需指定LangVersion
8,因为这是.NET Core 3中的默认设置。
对于较旧的Visual Studio版本:
NullableContextOptions
为enable
NullableReferenceTypes
为true
NullableContextOptions
仍然需要。
enable
表示“启用新的C#8.0设置,其中默认情况下类型不能为空”。 disable
意思是“用旧的方法将每种类型都设为可空值。”
LangVersion
并Nullable
为其添加了和属性,.csproj
并且运行良好。该项目也有ToolsVersion="15.0"
。
请注意,此设置在VS 2019预览1和预览2之间进行了更改。使用预览2或3时,您需要在.csproj
:
<PropertyGroup>
<LangVersion>8.0</LangVersion>
<NullableContextOptions>enable</NullableContextOptions>
</PropertyGroup>
因此,<NullableReferenceTypes>
早先的答案中提到的内容(当我最初于2019年2月4日撰写此答案时,已标记为已接受的答案)在撰写答案时是正确的,但不再被认可。
除了@DrewNoakes接受的答案外,请注意,可以通过在包含您的文件的文件夹中添加一个名为的文件来一次为所有项目设置nullable属性。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预览版1的解决方案:
要为.NET Core项目启用Nullable引用类型功能,请NullableReferenceTypes
向.csproj
文件添加属性,如下所示:
<PropertyGroup>
...
<NullableReferenceTypes>true</NullableReferenceTypes>
<LangVersion>8.0</LangVersion>
</PropertyGroup>
正如@JulienCouvreur在有关https://github.com/dotnet/project-system/issues/4058的注释中引用的那样,“旧”项目系统尚不支持新属性。但是将在C#8.0发布之前受支持。
net472
?您如何/在何处找到该设置?该参考将非常有用。我发现很多事情不太如图所示的视频作品
您询问了旧.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中进行编辑。对于这些你需要的是(在相同PropertyGroup
的TargetFramework
或TargetFrameworks
):
<PropertyGroup>
<LangVersion>8.0</LangVersion>
<Nullable>enable</Nullable>
</PropertyGroup>
.NET Framework项目的默认值为C#7.3,即使使用,也不会获得C#8.0 <LangVersion>latest</LangVersion>
。您必须将语言版本显式设置为8.0。请参阅我对以下问题的回答:C#8是否支持.NET Framework?更多细节。