在project.json 文件中,我们有一个依赖项部分,然后我们还有一个框架部分,其中每个框架下可以有更多依赖项。
我很困惑为什么有时依赖项需要放在框架部分而有时需要放在主要依赖项部分?
例如,在我的几个项目中,我在 dnxcore50 下有依赖项,但是当我从 nuget 升级它们时,它会将升级后的版本放在主要依赖项部分中,并在框架部分下保留旧版本的较低版本。
一般来说,我发现在 VS 2015 中对于一个或另一个框架很容易犯错误并出现奇怪的依赖关系解析错误,并且很难找出导致错误的原因。我曾经有过这样的情况:我在一个项目中添加了依赖项,这会导致另一个项目中出现错误,其类型在链中的多个包中找到,或者在解决基本原始类型时出现问题。
看起来 VS 2015 模板可能会将它们放在不同的位置,而当您使用 nuget 添加引用时,或者可能因为我使用的是 beta5,VS 中的工具有点不同步。
对于何时将依赖项放在主要依赖项部分中以及何时将依赖项放在框架特定部分下,是否有任何指导?
您可以执行特定于框架的依赖项的原因是某些包不支持所有框架。
最常见的情况是 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 https://github.com/aspnet/dnx/blob/dev/src/Microsoft.Framework.PackageManager/project.json#L29
您可能还注意到在上面的文件中我们使用dependencies
and frameworkAssemblies
。这是您要使用来自不同目标的不同包的另一个原因。frameworkAssemblies
来自 GAC,它仅适用于桌面 CLR。
因此,规则是:当您的包将由您打包支持的所有框架使用时,请使用顶级依赖项属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)