为什么添加 "imports" 到 project.json 会破坏这个?
Why does adding an "imports" to project.json break this?
使用 Visual Studio 2015 更新 3,我创建了一个可移植的 class 库。然后我将其切换到目标 .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' 的定义,并且找不到接受类型 'string[]' 的第一个参数的扩展方法 'Any'(您是否缺少using 指令还是程序集引用?)
似乎只是说我们可以接受配置文件 151 PCL,构建已丢失 System.Linq。
更改为 netstandard 1.2 或 1.4 或 1.5 似乎没有什么区别。
将 "imports" 值更改为其他 PCL 配置文件似乎并不重要。
将 "imports" 值更改为其他形式,例如 "portable-net45+win8+wp8+wpa81",似乎并不重要。
将 "imports" 值更改为 "fubar" 确实会 导致有关无效框架的额外错误,正如人们所预料的那样。
有人知道为什么会这样吗?
我相信您需要采用 portable-win8+wpa81+wp8+net45
等形式的导入。而不是您拼写的完整 TFM。它还需要一个数组,因此您可以指定多个。
此外,虽然 csproj + project.json "supposed" 可以在 VS 2015 中工作,但可能存在错误....无法修复。
我强烈建议使用最新的 VS 2017 RC 并创建一个新的 .NET 标准 Class 库。然后您可以使用 <PackageTargetFallback>
指定您需要的后备 TFM(由 ;
分隔)
使用 Visual Studio 2015 更新 3,我创建了一个可移植的 class 库。然后我将其切换到目标 .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' 的定义,并且找不到接受类型 'string[]' 的第一个参数的扩展方法 'Any'(您是否缺少using 指令还是程序集引用?)
似乎只是说我们可以接受配置文件 151 PCL,构建已丢失 System.Linq。
更改为 netstandard 1.2 或 1.4 或 1.5 似乎没有什么区别。
将 "imports" 值更改为其他 PCL 配置文件似乎并不重要。
将 "imports" 值更改为其他形式,例如 "portable-net45+win8+wp8+wpa81",似乎并不重要。
将 "imports" 值更改为 "fubar" 确实会 导致有关无效框架的额外错误,正如人们所预料的那样。
有人知道为什么会这样吗?
我相信您需要采用 portable-win8+wpa81+wp8+net45
等形式的导入。而不是您拼写的完整 TFM。它还需要一个数组,因此您可以指定多个。
此外,虽然 csproj + project.json "supposed" 可以在 VS 2015 中工作,但可能存在错误....无法修复。
我强烈建议使用最新的 VS 2017 RC 并创建一个新的 .NET 标准 Class 库。然后您可以使用 <PackageTargetFallback>
指定您需要的后备 TFM(由 ;
分隔)