.net 启用可为空的功能不起作用

ix0qys7i  于 2022-12-14  发布在  .NET
关注(0)|答案(3)|浏览(177)

当我最近升级一个项目时,我发现了这个问题,并且不知道是怎么回事,所以我在Visual Studio 2022中用一个非常简单的控制台模板启动器应用程序重现了它。
假设我从一个控制台应用模板创建了一个应用程序,并将其设置为dotnet 3.1 core,它具有以下main方法:

internal class Program
{
    static void Main(string[] args)
    {
        var person = new personModel();
        person.name = "Test";
        Console.WriteLine(person.name);
    }
}

这个模型在另一个文件里

internal class personModel
{
    public string status { get; set; }
    public string name { get; set; }
}

所以,我现在将项目更新到.NET 6,这应该会启用空状态分析和变量注解,并且我现在预期会收到关于我声明的两个字符串的警告。
但是,如果我将csproj文件更改为以下内容:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>

</Project>

应用程序仍然会在0警告下构建。我也没有看到任何奇怪的行。好吧,所以我手动启用它:<nullable>enable</nullable>但是我仍然在任何地方完全没有警告的情况下构建和运行。为什么这个特性会没有效果呢?

编辑

看起来我对我所做的有点太不清楚了。我尝试的最后一件事是添加<nullable>enable</nullable>,使csproj文件看起来像这样:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
      <nullable>enable</nullable>
  </PropertyGroup>

</Project>
tpxzln5u

tpxzln5u1#

来自文档:
默认情况下,可以为空的注解和警告上下文是disabled的。这意味着现有代码在编译时不会进行更改,也不会生成任何新警告。从.NET 6开始,新项目在所有项目模板中都包含<Nullable>enable</Nullable>元素。
因此,对.NET 6和相应语言版本的唯一更新将不会有帮助,您需要选择加入,例如通过添加到.csproj:

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

ldfqzlk82#

我的建议是:代码库应该已经在使用C#8或更高版本-因为在C#的早期版本上不支持可空引用类型。
要检查它,右键单击项目,转到属性并检查语言版本。我猜您当前的语言版本从7.3或其他版本开始。

7uhlpewt

7uhlpewt3#

在内部添加<Nullable>enable</Nullable>

<PropertyGroup><PropertyGroup>

在.csproj文件中
例如:

<PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <Nullable>enable</Nullable>
</PropertyGroup>

相关问题