我正在将一个简单的库(没有deps)移植到netstandard1.0
。对你们来说可能很容易,但是当我在一个简单的类lib上定位netstandard1.0
时,我无法理解为什么会出现这个构建错误。
CS1061'tring'不包含'Any'的定义,也没有扩展方法'Any'接受'string'类型的第一个参数(你是否缺少using指令或汇编引用?)MyProject。 .NETStandard,Version = v1.0
所以,似乎抱怨Any
方法;我推测的Linq库的扩展方法部分。 AFAIK,Linq是1.0的NETStandard.Libary元数据包的一部分。
有问题的代码:
var numberString= "1234";
var isAllDigits = numberString.Any(t => !char.IsDigit((t))
我的project.json
:
{
"dependencies": {
"NETStandard.Library": "1.6.0"
},
"frameworks": {
"netstandard1.0": { }
}
}
将我的project.json更改为netstandard.1.2
可以解决它,但是如果Linq的东西存在于1.0并且应该能够编译..?
此外,便携性工具运行良好,并表示我的目标也可以低至netstandard1.0
。
所以:
如何在创建定位netstandard1.0的库时不支持System.Linq
v.4.3.0?
答案 0 :(得分:1)
由于.net核心的一个想法是保持库尽可能小,所以linq和许多扩展方法都在一个额外的包中。
尝试安装Install-Package System.Linq。
我想指出的另一件事是非常有用的工具Reverse Package Search,它允许您搜索类并找到相应的.net核心包。非常有助于移植到.net核心。
答案 1 :(得分:0)
这是隐藏的一点。查看.NET标准矩阵here和string.Any的MSDN文章。
版本信息
- 通用Windows平台:自8开始提供
- .NET Framework:自3.5起可用
- 可移植类库:受支持:可移植.NET平台
- Silverlight:自2.0起可用
- Windows Phone Silverlight:自7.0起可用
- Windows Phone:自8.1开始
注意最新一点。由于.NET Standard需要在所有支持的平台上运行,因此它也必须在Windows Phone 8.1上运行。但是要以Windows 8.1为目标,您需要最低的.NET Standard 1.2。因此,如果要使用此方法,则无法定位netstandard1.0
。
您可以使用#if
预处理程序指令将其删除,以用于.NET Standard< 1.2并使用其他功能,或者自己实现(即通过Regex
)。
答案 2 :(得分:0)
好的,最后得到netstandard1.0
我的库支持,包括System.Linq
作为依赖。
我做了以下步骤:
NETStandard.Library
上的dep,并在project.json
在3.降级期间,我终于得到了一个使用netstandard1.0
支持的设置,System.Linq
从4.3.0
一直降级为4.0.0
。
4.3.0不起作用
4.1.0不起作用
4.0.0确实有效。
https://www.nuget.org/packages/System.Linq/4.1.0 https://www.nuget.org/packages/System.Linq/4.0.0