Visual Studio 如何为整个项目启用C# 8.0的可为空引用类型功能

z6psavjg  于 2022-12-04  发布在  C#
关注(0)|答案(6)|浏览(317)

根据C# 8 announcement video,可以为整个项目启用“可空引用类型”特性。
但是如何为项目启用它呢?我在Visual Studio 2019 Preview 1的项目属性窗口中没有找到任何新的合适选项。
如果C#语言版本更改为8.0,是否可以为“旧版”.csproj项目启用该功能?

b1zrtrql

b1zrtrql1#

在Visual Studio 16.2中(从预览1开始),属性名称会变更为Nullable,这个名称比较简单,而且与命令列参数一致。
将以下属性添加到.csproj文件中。

<PropertyGroup>
  <Nullable>enable</Nullable>
  <LangVersion>8.0</LangVersion>
</PropertyGroup>

如果您的目标是netcoreapp3.0或更高版本,则不需要指定LangVersion来启用可为空的引用类型。
或者,如果您喜欢使用GUI,请打开“项目属性”UI,搜索 nullable 并选择所需得选项:

对于较早的Visual Studio版本:

  • 从16.0预览2到16.1,将NullableContextOptions设置为enable
  • 在16.0预览1中,将NullableReferenceTypes设置为true
weylhg0b

weylhg0b2#

请注意,此设置在VS 2019 preview 1和preview 2之间更改。对于preview 2或preview 3,您需要在.csproj中使用此设置:

<PropertyGroup>
  <LangVersion>8.0</LangVersion>
  <NullableContextOptions>enable</NullableContextOptions>
</PropertyGroup>

之前的答案中提到的<NullableReferenceTypes>(我最初在2019年2月4日写下此答案时,已标记为可接受的答案)在写下该答案时是正确的,但不再被识别。

xhv8bpkk

xhv8bpkk3#

除了@DrewNoakes接受的答案外,请注意,可以通过在包含.sln文件的文件夹中添加一个名为Directory.Build.props的文件,一次为所有项目设置nullable属性。
只需像这样定义Directory.Build.props文件:

<Project>

  <PropertyGroup>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>

您需要重新启动Visual Studio,此操作才能生效。
关于Directory.Build.props的更多信息。

lskq00tm

lskq00tm4#

值得注意的是,到目前为止,这也是项目的“属性”页中公开的设置:

至少在VS2019中为16.6+。

kxkpmulp

kxkpmulp5#

对于Visual Studio 2019 * 预览版2和3,请参阅Ian Griffiths的答案。*

适用于Visual Studio 2019的解决方案***预览版1***:
若要启用.NET核心项目的可为Null的指涉型别功能,请将NullableReferenceTypes属性加入.csproj档案,如下所示:

<PropertyGroup>
  ...
  <NullableReferenceTypes>true</NullableReferenceTypes>
  <LangVersion>8.0</LangVersion>
</PropertyGroup>

正如在关于https://github.com/dotnet/project-system/issues/4058的注解中引用的@JulienCouvreur,新属性在“旧”项目系统中尚不受支持,但在C# 8.0发布之前将受支持。

r7s23pms

r7s23pms6#

旧版csproj格式

您询问了有关旧版.csproj的问题。请在文本编辑器中打开项目文件,并进行以下更改:
1.在DebugRelease PropertyGroup区段中加入/变更<LangVersion>8.0</LangVersion>

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <LangVersion>preview</LangVersion>

1.通过将<Nullable>enable</Nullable>添加到主PropertyGroup来启用对可空引用类型的支持:

<PropertyGroup>
    <Nullable>enable</Nullable>

在Visual Studio 2019 v16.2.0 Preview 3中使用C# 8和可空引用类型语法与.NET WinForms应用程序进行测试。

SDK样式的项目文件

SDK风格的项目要简单得多,并且可以在Visual Studio中编辑。对于这些项目,您只需要(在与TargetFrameworkTargetFrameworks相同的PropertyGroup中):

<PropertyGroup>
    <LangVersion>8.0</LangVersion>
    <Nullable>enable</Nullable>
  </PropertyGroup>

备注

  • .NET Core 3.x项目面向C# 8 by default,因此您无需为这些项目指定LangVersion
  • .NET Framework项目的默认值是C# 7.3,即使使用<LangVersion>latest</LangVersion>也无法获得C# 8.0。您必须显式地将语言版本设置为8.0。有关更多详细信息,请参阅我对问题Does C# 8 support the .NET Framework?的回答。

相关问题