为什么在project.json中添加“imports”会破坏它?

时间:2017-01-28 02:30:35

标签: c# .net-standard project.json

使用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” 会导致关于无效框架的其他错误,正如人们所期望的那样。

有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

我相信您需要导入的格式为portable-win8+wpa81+wp8+net45等。不是完整的TFM,因为您已经详细说明了。它还需要一个数组,因此您可以指定多个数组。

此外,虽然csproj + project.json“应该”在VS 2015中工作,但可能存在错误....这些错误无法修复。

我强烈建议使用最新的VS 2017 RC并创建一个新的.NET标准类库。然后,您可以使用<PackageTargetFallback>指定所需的后备TFM(由;分隔)

相关问题