使用Visual Studio 2015更新3,我创建了一个可移植的类库。然后我将其切换到目标.NET Standard。
所以project.json文件基本上看起来像这样:
"dependencies": {
"Microsoft.NETCore.Portable.Compatibility": "1.0.1",
"NETStandard.Library": "1.6.1"
},
"frameworks": {
"netstandard1.3": {
}
}
在创建的Class1.cs中,我添加了一个使用Linq的Any()方法的简单方法:
static void foo()
{
var x = new string[] { "hello", "world", };
var q = x.Any(s => s.Contains("m"));
}
一切都很好。
现在,我希望这个库能够引用具有PCL配置文件的nuget包,即尚未更新为netstandard的配置文件。我的理解是我需要在project.json文件的“frameworks”部分中使用“imports”部分。所以,我补充一点:
"frameworks": {
"netstandard1.3": {
"imports": ".NETPortable,Version=v4.6,Profile=Profile151"
}
}
不做任何其他更改。
现在构建失败了:
错误CS1061'string []'不包含'Any'的定义,也没有扩展方法'Any'接受类型'string []'的第一个参数可以找到(你是否缺少using指令或程序集参考?)
似乎只是说我们可以接受配置文件151 PCL,构建已经丢失了System.Linq。
更改为netstandard 1.2或1.4或1.5似乎没有任何区别。
将“导入”值更改为其他PCL配置文件似乎并不重要。
将“进口”值更改为另一种形式,例如“portable-net45 + win8 + wp8 + wpa81”,似乎并不重要。
将“导入”值更改为“fubar” 会导致关于无效框架的其他错误,正如人们所期望的那样。
有人知道为什么会这样吗?
答案 0 :(得分:2)
我相信您需要导入的格式为portable-win8+wpa81+wp8+net45
等。不是完整的TFM,因为您已经详细说明了。它还需要一个数组,因此您可以指定多个数组。
此外,虽然csproj + project.json“应该”在VS 2015中工作,但可能存在错误....这些错误无法修复。
我强烈建议使用最新的VS 2017 RC并创建一个新的.NET标准类库。然后,您可以使用<PackageTargetFallback>
指定所需的后备TFM(由;
分隔)