混淆了project.json

时间:2015-07-19 14:04:22

标签: asp.net-core visual-studio-2015

在project.json文件中我们有一个依赖项部分,然后我们还有一个框架部分,在每个框架下可以有更多的依赖项。 我很困惑为什么有时依赖关系需要在框架部分和其他时间进入主依赖关系部分?

例如在我的几个项目中,我在dnxcore50下有依赖项,但是当我从nuget升级它时,它将升级后的版本放在主依赖项部分中,并在框架部分下留下旧版本的较低版本。

一般来说,我发现很容易出错并在VS 2015中为一个或另一个框架获得奇怪的依赖解析错误,并且很难弄清楚导致错误的原因。我有时会在一个项目中添加一个依赖项,并导致另一个项目中出现错误,其中包含链中多个包中的类型或解决基本基本类型的问题。

似乎VS 2015模板可能会将它们放在不同的地方与使用nuget添加引用时相比,或者因为我使用的是beta5,VS中的工具有点不同步。

是否有关于何时将依赖项放在主要依赖项部分和特定于框架的部分下的指导?

1 个答案:

答案 0 :(得分:8)

您可以执行特定于框架的依赖项的原因是某些程序包不支持所有框架。

最常见的情况是NuGet包不支持CoreCLR(尚未)。有些人更喜欢在该框架上使用替代品,而不是不支持它。因此,在桌面CLR(dnx451)上,它们使用一个NuGet包,而在CoreCLR上,它们使用另一个。

具体的例子是dnu。在桌面CLR上运行时,它使用System.Net.Http。但是,在CoreCLR上,它使用Microsoft.Net.Http.Clienthttps://github.com/aspnet/dnx/blob/dev/src/Microsoft.Framework.PackageManager/project.json#L29

您可能还会在上面的文件中注意到我们使用了dependenciesframeworkAssemblies。这是您使用不同目标的不同包的另一个原因。 frameworkAssemblies来自GAC,它仅适用于桌面CLR。

因此,规则是:当您拥有将由程序包支持的所有框架使用的包时,使用顶级依赖项属性。