【问题标题】:confused about dependencies in project.json对 project.json 中的依赖关系感到困惑
【发布时间】:2015-10-08 17:21:39
【问题描述】:

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

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

一般来说,我发现在 VS 2015 中对于一个或另一个框架很容易犯错误并得到奇怪的依赖解析错误,而且很难找出导致错误的原因。我曾经在一个项目中添加依赖项,这会导致另一个项目中出现错误,在链中的多个包中找到类型或解决基本原始类型的问题。

看起来 VS 2015 模板可能会将它们放在不同的位置,而不是当您使用 nuget 添加引用时,或者可能是因为我使用的是 beta5,VS 中的工具有点不同步。

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

【问题讨论】:

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


    【解决方案1】:

    你可以做框架特定依赖的原因是一些包不支持所有的框架。

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

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

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

    因此,规则是:当你的包将被你包支持的所有框架使用时,使用顶级依赖属性。

    【讨论】:

    • 这对我有一些帮助,但我仍然不清楚如何决定在哪里放置一些依赖项。当我在 VS 中创建一个类库项目时,它会放置诸如“System.Collections”:“4.0.10-beta-22816”、“System.Linq”:“4.0.0-beta-22816”、“System.Threading”之类的内容: "4.0.10-beta-22816", "Microsoft.CSharp": "4.0.0-beta-22816" 在 dnxcore50 依赖项下。从 beta4 升级到 beta5 并删除了 dnx451 框架后,我遇到了错误。然后我升级了一些 nugets 并将 "System.Collections": "4.0.10-beta-23019" 放在主要依赖项中,并将旧的放在 dnxcore50 等所有这些包中
    • 第 3 方包对我来说似乎很清楚,但对于 System 和 Microsoft 命名空间包中的东西,它们应该去哪里却令人困惑
    • 根据您的解释进行更多实验后,我正在设法解决错误。似乎 System.stuff 的包应该只在 dnxcore50 下添加,然后如果发生 dnx451 错误,您必须在 dnx451 下添加相应的框架程序集。
    • 谢谢!我能够将 dnx451 添加回我的所有项目,并通过将依赖项放在正确的位置来解决错误。你的建议也解决了这个问题stackoverflow.com/questions/31234888/…
    猜你喜欢
    • 2012-08-19
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 2020-12-20
    • 2015-05-09
    相关资源
    最近更新 更多