我需要Microsoft.NETCore.Platforms和Microsoft.NETCore.Runtime吗?

时间:2016-05-27 08:11:54

标签: .net asp.net-core asp.net-core-mvc .net-core project.json

在新的ASP.NET Core RC2类库中,我有以下project.json文件,我试图按照How to trim your package dependencies上的文档进行操作。

{
  "dependencies": {
    "Microsoft.AspNetCore.Mvc.Abstractions": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Mvc.Core": "1.0.0-rc2-final",
    "Microsoft.Extensions.Caching.Abstractions": "1.0.0-rc2-final",
    "Newtonsoft.Json": "8.0.3"
  },

  "frameworks": {
    "netstandard1.5": {
      "dependencies": {
        "Microsoft.NETCore.Platforms": "1.0.1-rc2-24027",
        "Microsoft.NETCore.Runtime": "1.0.2-rc2-24027",
        "System.Xml.XDocument": "4.0.11-rc2-24027"
      },
      "imports": "dnxcore50"
    },
    "net461": {
      "frameworkAssemblies": {
        "System.ServiceModel": "",
        "System.Xml": "",
        "System.Xml.Linq": ""
      }
    }
  }
}

当我尝试删除Microsoft.NETCore.PlatformsMicrosoft.NETCore.Runtime时,一切仍然有效。这可能是因为Microsoft依赖项也指定了这些。这些依赖关系是什么?我应该明确并保留它们吗?

1 个答案:

答案 0 :(得分:9)

这些包的目的是什么:

  • Microsoft.NETCore.Platforms本质上只是一个指定runtime identifiers(RID)的json文件。当需要部署特定于平台的代码时(例如,特殊编译的CoreCLR或平台特定的压缩或加密库),使用这些ID(例如osx.10.10-x64win7-x86)。它形成了一种允许更通用的平台模式的树(例如linux,后来是rhel的父项,后者又是特定支持的版本rhel-7.1-x64的父项。因此,当有人构建NuGet时,您可以添加一个artifiact,就像部署在所有Linux机器上的程序集(例如,针对标准linux apis进行P / Invoke)或特定的Linux发行版(例如使用特殊的RedHat功能)。

  • Microsoft.NETCore.Runtime是一个棘手的故事。它用于为您的平台查找正确的运行时。

你应该保留它们:既然你没有直接使用它们,那么明确地添加这些依赖项并不会给我的理解带来任何好处。