Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为整个项目启用C#8.0的可空引用类型功能_C#_Visual Studio_Visual Studio 2019_C# 8.0_Nullable Reference Types - Fatal编程技术网

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

如何为整个项目启用C#8.0的可空引用类型功能,c#,visual-studio,visual-studio-2019,c#-8.0,nullable-reference-types,C#,Visual Studio,Visual Studio 2019,C# 8.0,Nullable Reference Types,根据“可空引用类型”功能可以为整个项目启用 但是如何为项目启用它呢?我在Visual Studio 2019预览1的“项目属性”窗口中未找到任何新的适当选项 如果C语言版本更改为8.0,是否可以为“遗留”的.csproj项目启用它?对于Visual Studio 2019预览版2和3,请参见Ian Griffiths的答案。 Visual Studio 2019的解决方案预览1: 要为.NET核心项目启用可空引用类型功能,请将NullableReferenceTypes属性添加到.csproj文

根据“可空引用类型”功能可以为整个项目启用

但是如何为项目启用它呢?我在Visual Studio 2019预览1的“项目属性”窗口中未找到任何新的适当选项


如果C语言版本更改为8.0,是否可以为“遗留”的.csproj项目启用它?

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

Visual Studio 2019的解决方案预览1:

要为.NET核心项目启用可空引用类型功能,请将
NullableReferenceTypes
属性添加到
.csproj
文件,如下所示:


...
真的
8


正如@JulienCouvreur在有关的评论中所引用的,新属性在“旧”项目系统中尚不受支持,但在C#8.0发布之前将受支持。

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


8
使可能
早期答案中提到的
(我最初在2019年2月4日编写此答案时,已将其标记为已接受答案)在编写答案时是正确的,但已不再被识别。

在Visual Studio 16.2(预览版1)中,属性名称更改为
可为null
,它更简单,并且与命令行参数一致

将以下属性添加到
.csproj
文件中


使可能
8
如果您的目标是
netcoreapp3.0
或更高版本,则无需指定
LangVersion
即可启用可为空的引用类型


对于较旧的Visual Studio版本:

  • 从16.0预览版2到16.1,将
    NullableContextOptions
    设置为
    启用
  • 在16.0预览版1中,将
    NullableReferenceTypes
    设置为
    true
传统csproj格式 您询问了遗留的
.csproj
格式。在文本编辑器中打开项目文件并进行以下更改:

  • Debug
    Release
    属性组部分中添加/更改
    8.0

    
    预览
    
  • 通过将
    启用
    添加到主
    属性组
    ,启用对可为空引用类型的支持:

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


    SDK样式的项目文件 SDK样式的项目要简单得多,并且可以在VisualStudio中编辑。对于这些,您所需要的是(在与
    TargetFramework
    TargetFrameworks
    相同的
    PropertyGroup
    中):

    
    8
    使可能
    

    笔记
    • .NET Core 3.x项目以C#8为目标,因此不需要为这些项目指定
      LangVersion

    • NET Framework项目的默认值为C#7.3,即使使用
      最新版本
      ,也无法获得C#8.0。必须将语言版本显式设置为8.0。详情请参阅我对问题的回答


    除了@DrewNoakes接受的答案之外,请注意,可以通过在包含
    .sln
    文件的文件夹中添加名为
    Directory.Build.props
    的文件,一次为所有项目设置可空属性

    只需像这样定义
    目录.Build.props
    文件:

    
    使可能
    
    您需要重新启动Visual Studio才能生效


    更多关于。

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


    至少在VS2019 16.6+。

    您是否尝试将目标框架更改为
    net472
    ?顺便问一下,你是如何/在哪里找到那个环境的?这一参考将非常有用。如图所示,我发现很多东西都不太管用video@PanagiotisKanavos,这个标签是由Mads Torgersen在YouTube上的评论中提出的。Mads Torgersen是我在原始问题中链接的视频的作者。这个属性在“旧”项目中还不受支持。有关此选项可用值的更多信息会跟踪此问题(
    启用
    禁用
    仅安全
    等):在最近的版本中是否再次更改此选项?在预览版4.2中,这似乎不适用于我,因为Visual studio 6.2已简化为(请参见接受的答案),我只是在VS2019/16.1.1中尝试了这一点,但它似乎没有起到任何作用。为了测试它,我在其中一个类中加入了#nullable enable,然后我可以看到关于null对象的警告。@LarrySmith抱歉,这个更改是在16.2P1中进行的。我已经更新了我的答案。在16.1.1中,您仍然需要
    NullableContextOptions
    。请注意,布尔逻辑可能有点不直观:
    enable
    表示“启用新的C#8.0设置,其中类型默认不可为null”<代码>禁用意味着“在每种类型都可以为空的情况下,按照旧方法进行操作”。我还必须从旧的“15,0”中更新和16.0,然后才能处理旧的非SDK项目,即使它们已通过VS 16.3 RTM的属性GUI正确升级到framework 4.8。只有C#8语言版本受到尊重,没有任何额外的项目文件编辑。@TonyWall我很好奇你为什么需要它。我刚刚在VS16.3.7中创建了一个新的.NET Framework控制台应用程序(即非SDK风格的项目),在
    .csproj
    中添加了
    LangVersion
    Nullable
    属性,效果很好。该项目也有
    ToolsVersion=“15.0”
    。但不适用于旧式csproj。