C# win/any运行时在.NETCore中意味着什么
我正在构建一个C#.NET核心应用程序,它的目标是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
net452
框架。发布时,我可以指定一个运行时(--runtime),如果我没有指定它使用的任何运行时win7-x64
(我假设这是因为我的机器正在运行)。但是,我也可以手动指定运行时,它似乎接受我给它的任何字符串。然而,这似乎表明win
和any
都是有效的
更新:我没有任何好的答案,所以我要澄清我的问题并增加一笔赏金。我也在ASP.NET核心论坛上询问过,但没有得到回应
win7-x32
,我的代码是否也会在64位Windows操作系统上运行win7
,它将生成什么,它将生成32位版本还是64位版本any
RID做什么?我了解如何在多个平台上使用可移植部署,但独立部署(使用RIDany
构建)如何在Linux和Windows上工作?我是不是误解了这一点blah
,我预期会出现一个错误。相反,我的应用程序构建在bin/Release/blah
目录中。它只是默认为其他运行时吗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 ofwin7-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 ofblah
,我预期会出现一个错误。相反,我的应用程序构建在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)