以下代码在 Windows 上本地编译,但在 Linux docker 容器中失败。两者都使用 .NET 8 SDK。 request.SearchText 属性是字符串类型?.
var searches = request.SearchText?.Split([',',' ',';','\n'],
StringSplitOptions.TrimEntries |
StringSplitOptions.RemoveEmptyEntries).ToList() ?? [];
在 docker Linux 中收到此错误:
error CS0121: The call is ambiguous between the following methods or
properties: 'string.Split(char[]?, StringSplitOptions)' and
'string.Split(string?, StringSplitOptions)' [/src/....]
它似乎无法解析为相同的字符串。与 Windows 上一样,拆分重载。 显式声明数组的类型将修复编译错误:
char[]? separator = [',',' ',';','\n'];
var searches = request.SearchText?
.Split(separator, StringSplitOptions.TrimEntries |
StringSplitOptions.RemoveEmptyEntries)
.ToList() ?? [];
为什么编译器无法解析为linux上的同一个string.Split函数? 注意:这是一个大型项目的一部分,因此可能还有其他变量在起作用。
项目文件中的net8.0。 8.0.304 已本地安装。 docker 构建使用 8.0.201-jammy-sdk。
这是 SDK
8.0.200
版本中的错误。如果您将其安装在 Windows 计算机上并使用 global.json
固定版本并禁用前滚(在终端中使用 dotnet --version
进行验证):
{
"sdk": {
"version": "8.0.200",
"rollForward": "Disable"
}
}
您将得到相同的错误(在我的机器上重现),但更新到更高版本的 SDK 将修复它(使用
8.0.304
和 8.0.401
检查)。所以需要将容器镜像更新到更高版本。