C# win/any运行时在.NETCore中意味着什么

C# win/any运行时在.NETCore中意味着什么,c#,.net,.net-core,runtime-identifier,C#,.net,.net Core,Runtime Identifier,我正在构建一个C#.NET核心应用程序,它的目标是net452框架。发布时,我可以指定一个运行时(--runtime),如果我没有指定它使用的任何运行时win7-x64(我假设这是因为我的机器正在运行)。但是,我也可以手动指定运行时,它似乎接受我给它的任何字符串。然而,这似乎表明win和any都是有效的 更新:我没有任何好的答案,所以我要澄清我的问题并增加一笔赏金。我也在ASP.NET核心论坛上询问过,但没有得到回应 如果我指定了一个RID ofwin7-x32,我的代码是否也会在64位Wind

我正在构建一个C#.NET核心应用程序,它的目标是
net452
框架。发布时,我可以指定一个运行时(--runtime),如果我没有指定它使用的任何运行时
win7-x64
(我假设这是因为我的机器正在运行)。但是,我也可以手动指定运行时,它似乎接受我给它的任何字符串。然而,这似乎表明
win
any
都是有效的

更新:我没有任何好的答案,所以我要澄清我的问题并增加一笔赏金。我也在ASP.NET核心论坛上询问过,但没有得到回应

  • 如果我指定了一个RID of
    win7-x32
    ,我的代码是否也会在64位Windows操作系统上运行

  • 如果我指定了一个RID的
    win7
    ,它将生成什么,它将生成32位版本还是64位版本

  • 如果我指定一个摆脱win7,我的程序会在Windows 8、8.1或10中运行吗

  • any
    RID做什么?我了解如何在多个平台上使用可移植部署,但独立部署(使用RID
    any
    构建)如何在Linux和Windows上工作?我是不是误解了这一点

  • 如果我指定了一个RID of
    blah
    ,我预期会出现一个错误。相反,我的应用程序构建在
    bin/Release/blah
    目录中。它只是默认为其他运行时吗

  • 我相信OP中的链接提供了所有必要的信息

    第一件事

    什么是RID?

    RID是运行时标识符的缩写。RID用于识别将运行应用程序或资产(即程序集)的目标操作系统

    需要注意的是,RID实际上是不透明的字符串。这意味着它们必须与使用它们的操作完全匹配

    这也被引述自

    RID是标识平台的不透明字符串。RID通过“导入”其他RID与其他RID建立关系。这样,RID就是兼容RID的有向图

    最佳RID考虑部分RID图: 这可以可视化为有向图,如下所示:

    win7-x64    win7-x86
       |   \   /    |
       |   win7     |
       |     |      |
    win-x64  |  win-x86
          \  |  /
            win
             |
            any
    
    因此,在评估win7-x64时,最佳RID为:
    win7-x64
    win7
    win-x64
    win
    any
    在评估
    win-x64
    win-x64
    win
    any
    注意
    win7
    在前面
    win-x64
    ,因为导入之前出现了
    win7
    win-x64
    按文档顺序排列

    也就是说,引用

    如果使用此文件,您会注意到一些RID中有一个“#import”语句。这些语句是兼容性语句。这意味着,其中包含导入的RID的RID可以成为恢复该RID的包的目标

    仅提取相关部分

    1) 如果我指定了一个RID of
    win7-x32
    ,我的代码是否也会在64位Windows操作系统上运行

    2) 如果我指定一个win7的RID,它将生成什么,它将生成32位版本还是64位版本

    它将构建一个可以在两个平台上运行的通用版本。请参阅上面的可视化

    3) 如果我指定摆脱win7,我的程序会在Windows 8、8.1或10中运行吗

    对。基于引用版本的导入

    "win8": {
        "#import": [ "win7" ]
    },
    "win8-x86": {
        "#import": [ "win8", "win7-x86" ]
    },
    "win8-x64": {
        "#import": [ "win8", "win7-x64" ]
    },
    "win8-arm": {
        "#import": [ "win8" ]
    },
    
    "win81": {
        "#import": [ "win8" ]
    },
    "win81-x86": {
        "#import": [ "win81", "win8-x86" ]
    },
    "win81-x64": {
        "#import": [ "win81", "win8-x64" ]
    },
    "win81-arm": {
        "#import": [ "win81", "win8-arm" ]
    },
    
    "win10": {
        "#import": [ "win81" ]
    },
    "win10-x86": {
        "#import": [ "win10", "win81-x86" ]
    },
    "win10-x64": {
        "#import": [ "win10", "win81-x64" ]
    },
    
    4)
    any
    RID做什么

    这意味着构建与受支持平台的任何兼容,并且它可以成为恢复任何RID包的目标

    5) 如果我指定了一个RID of
    blah
    ,我预期会出现一个错误。相反,我的应用程序构建在
    bin/Release/blah目录中。它只是默认为其他运行时吗

    引用表格文件:

    所有RID最终映射回根
    any
    RID

    最后,再次从文档中注意

    虽然它们看起来很容易使用,但也有一些特殊的东西 关于在使用RID时必须牢记的RID:

    • 它们是不透明字符串,应被视为黑盒
      • 您不应该以编程方式构造RID
    • 您需要使用已经为平台定义的RID,并且 文件显示,
    • RID确实需要明确,所以不要 从实际RID值中假设任何内容;请参考这个 文档以确定给定平台需要哪些RID

    RID与.NET Core一起用于解决对包的依赖关系。此解决依赖关系的过程的根是您的项目,您使用一个或多个RID显式标记该项目。在生成项目时,可以指示要针对哪个RID进行生成

    RID是在兼容性树林中定义的,其中树中的任何节点都表示可以支持其所有子级的执行环境。每一根树根都是这样一棵树的根

    以下是RID兼容性树的示例:

    win10-x64
    |- win10
    |  `- win81
    |     `- win8
    |        `- win7
    |           `- win
    |              `- any
    |                 `- base
    `- win81-x64
       |- win81 (already included above)
       `- win8-x64
          |- win8 (already included above)
          `- win7-x64
             |- win7 (already included above)
             `- win-x64
                `- win (already included above)
    
    RID兼容性树的完整图形定义如下:

    如果需要,包可以为每个RID提供不同的实现。在构建时,如果我依赖于该包,那么构建过程将选择最接近树根的实现。如果树不包含包提供的任何RID,则构建将失败

    有一种特殊的包称为“运行时包”。运行时包包含可由主机操作系统直接加载和执行的本机二进制文件。因此,这些软件包只提供具体操作系统版本的实现,例如:“win7-x64”,但不提供“win7”或“win-x64”,也不提供“ubuntu.16.04-x64”,但不提供“ubuntu.16.04”、“ubun”
    "win8": {
        "#import": [ "win7" ]
    },
    "win8-x86": {
        "#import": [ "win8", "win7-x86" ]
    },
    "win8-x64": {
        "#import": [ "win8", "win7-x64" ]
    },
    "win8-arm": {
        "#import": [ "win8" ]
    },
    
    "win81": {
        "#import": [ "win8" ]
    },
    "win81-x86": {
        "#import": [ "win81", "win8-x86" ]
    },
    "win81-x64": {
        "#import": [ "win81", "win8-x64" ]
    },
    "win81-arm": {
        "#import": [ "win81", "win8-arm" ]
    },
    
    "win10": {
        "#import": [ "win81" ]
    },
    "win10-x86": {
        "#import": [ "win10", "win81-x86" ]
    },
    "win10-x64": {
        "#import": [ "win10", "win81-x64" ]
    },
    
    win10-x64
    |- win10
    |  `- win81
    |     `- win8
    |        `- win7
    |           `- win
    |              `- any
    |                 `- base
    `- win81-x64
       |- win81 (already included above)
       `- win8-x64
          |- win8 (already included above)
          `- win7-x64
             |- win7 (already included above)
             `- win-x64
                `- win (already included above)