c#版本:7.2
我的MS构建版本:未知(如果有人可以告诉我如何在我的机器上找到它(
我的Visual Studio版本:Visual Studio Professional 2019
我要将其归结至最低限度,所以请忽略代码的简单性。
public bool IsNull<T>(T thing)
{
return thing is null;
}
在Visual Studio 2019中,这很好并且编译。
我可以像这样称呼它
IsNull(0); //thats an int
它会编译和返回false,因为INT永远不会为空。我很高兴,一切都很好。
但是,我的构建服务器并不高兴。它正在使用MSBUILD v15.5.180.51428,并引发了一个编译器错误
错误CS0403:无法将null转换为type parameter" tvalue",因为它可能是不可删除的值类型。考虑使用"默认(TVAlue("
使用VS2017
,这也发生在同事机器上已记录了此"修复/更改"。
中有什么版本的msbuild可用谢谢
这确实是一个错误。在那里使用的模式是C#8.0模式,当语言版本设置为7.2时,不应编译。不过,这已经在我们的代码库中进行了报告和修复。它将在VS2019 Update 2随附的MSBUILD中提供。
- https://github.com/dotnet/roslyn/issues/34678
编辑:这是VS 2019中的编译器错误 - 此功能仅在C#8中,并且从VS 2019 Update 1中使用,您需要启用C#8以摆脱此消息。<<<<<<<<<<<<<</p>
这是编译器中已经进行的更改 - 您至少需要Visual Studio 2019工具(MSBUILD 16(来构建此代码。
这是在VS 2019的此PR中实现的:递归模式(18(:允许使用开放类型作为输入的恒定模式(尽管我的印象是需要为此启用C#8但显然不是(。