当我最近升级一个项目时,我发现了这个问题,并且不知道是怎么回事,所以我在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>
3条答案
按热度按时间tpxzln5u1#
来自文档:
默认情况下,可以为空的注解和警告上下文是disabled的。这意味着现有代码在编译时不会进行更改,也不会生成任何新警告。从.NET 6开始,新项目在所有项目模板中都包含
<Nullable>enable</Nullable>
元素。因此,对.NET 6和相应语言版本的唯一更新将不会有帮助,您需要选择加入,例如通过添加到.csproj:
ldfqzlk82#
我的建议是:代码库应该已经在使用C#8或更高版本-因为在C#的早期版本上不支持可空引用类型。
要检查它,右键单击项目,转到属性并检查语言版本。我猜您当前的语言版本从7.3或其他版本开始。
7uhlpewt3#
在内部添加
<Nullable>enable</Nullable>
在.csproj文件中
例如: