我一直在GitHub上查看NuGet3的代码,我在https://github.com/NuGet/NuGet3/blob/a5bc907d36ddaa8d4fa6c499e50d7ebf8993ed39/src/NuGet.Client/ManagedCodeConventions.cs中看到了与NuGet包中预期文件夹结构相关的几个文件夹模式。但是,我很难找到这些的例子 - 特别是rid和tfm值。
我怎样才能知道rid和tfm的所有可能值?我知道他们的意思是运行时标识符和目标框架Moniker,但我真的不知道如何处理它。
我见过的文档似乎从未直接或详尽地处理过该主题。
答案 0 :(得分:1)
目标框架目前在NuGet源代码中进行了硬编码。虽然NuGet website中记录了一些目标框架,但有许多目标框架没有记录在那里。因此,当Jeff R已经提到找到目标框架的最佳方法时,目前要查看NuGet源代码。
对于其中一些框架(例如wp = WindowsPhone),NuGet也有short identifiers。
Microsoft定义的运行时标识符可在Microsoft.NETCore.Platforms NuGet package中找到。在这个NuGet包中是一个带有运行时标识符的runtime.json文件:
{
"runtimes": {
"base": {
},
"any": {
"#import": [ "base" ]
},
"win": {
"#import": [ "any" ]
},
"win-x86": {
"#import": [ "win" ]
},
"win-x64": {
"#import": [ "win" ]
},
"win7": {
"#import": [ "win" ]
},
"win7-x86": {
"#import": [ "win7", "win-x86" ]
},
"win7-x64": {
"#import": [ "win7", "win-x64" ]
},
"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-arm": {
"#import": [ "win10", "win81-arm" ]
},
"aot": {
"#import": [ "any" ]
},
"win-aot": {
"#import": [ "win", "aot" ]
},
"win-x86-aot": {
"#import": [ "win-aot", "win-x86" ]
},
"win-x64-aot": {
"#import": [ "win-aot", "win-x64" ]
},
"win7-aot": {
"#import": [ "win-aot", "win7" ]
},
"win7-x86-aot": {
"#import": [ "win7-aot", "win7-x86" ]
},
"win7-x64-aot": {
"#import": [ "win7-aot", "win7-x64" ]
},
"win8-aot": {
"#import": [ "win8", "win7-aot" ]
},
"win8-x86-aot": {
"#import": [ "win8-aot", "win8-x86", "win7-x86-aot" ]
},
"win8-x64-aot": {
"#import": [ "win8-aot", "win8-x64", "win7-x64-aot" ]
},
"win8-arm-aot": {
"#import": [ "win8-aot", "win8-arm" ]
},
"win81-aot": {
"#import": [ "win81", "win8-aot" ]
},
"win81-x86-aot": {
"#import": [ "win81-aot", "win81-x86", "win8-x86-aot" ]
},
"win81-x64-aot": {
"#import": [ "win81-aot", "win81-x64", "win8-x64-aot" ]
},
"win81-arm-aot": {
"#import": [ "win81-aot", "win81-arm", "win8-arm-aot" ]
},
"win10-aot": {
"#import": [ "win10", "win81-aot" ]
},
"win10-x86-aot": {
"#import": [ "win10-aot", "win10-x86", "win81-x86-aot" ]
},
"win10-x64-aot": {
"#import": [ "win10-aot", "win10-x64", "win81-x64-aot" ]
},
"win10-arm-aot": {
"#import": [ "win10-aot", "win10-arm", "win81-arm-aot" ]
}
}
}
答案 1 :(得分:0)
我花了一些时间来查看文档并查看代码。大部分答案来自代码。
TargetFrameworkMoniker / tfm是使用FrameworkConstants.cs中FrameworkIdentifiers中的一个常量构造的。它是一个框架标识符,加上最后连接的版本。一些例子包括:
在上面链接的代码中可以找到其他人。
对于运行时标识符,它们由某种操作系统标识符和体系结构组成。因此,在JsonRuntimeFormatTests.cs中,您可以找到一些示例。
这些包括:
这些信息帮助我构建了一个使用runtimes文件夹的NuGet包,因为我很难知道可能的值是什么。我希望它可以帮助别人。