3

我一直在 GitHub 上查看 NuGet3 的代码,我在https://github.com/NuGet/NuGet3/blob/a5bc907d36ddaa8d4fa6c499e50d7ebf8993ed39/src/NuGet.Client/ManagedCodeConventions.cs中看到了与预期文件夹结构相关的几个文件夹模式NuGet 包。但是,我很难找到这些示例 - 特别是 rid 和 tfm 值。

我如何知道 rid 和 tfm 的所有可能值?我知道它们的意思是运行时标识符和目标框架名称,但我真的不知道该怎么做。

我见过的文档似乎从未直接或详尽地处理过该主题。

4

2 回答 2

1

目标框架目前在 NuGet 源代码中进行了硬编码。虽然NuGet 网站上记录了一些目标框架,但其中没有记录许多目标框架。因此,正如 Jeff R 已经提到的,目前查找目标框架的最佳方法是查看 NuGet 源代码。

NuGet 还为其中一些框架提供了简短的标识符(例如 wp = WindowsPhone)。

Microsoft 定义的运行时标识符可在Microsoft.NETCore.Platforms NuGet 包中找到。在这个 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" ]
        }
    }
 }
于 2015-10-24T12:24:55.433 回答
0

我花了一些时间查看文档并查看代码。这个答案大部分来自代码。

TargetFrameworkMoniker / tfm 是使用 FrameworkConstants.cs 中FrameworkIdentifiers中的常量之一构造的。它是一个框架标识符,加上最后连接的版本。一些例子包括:

  • net451 (.NET 4.5.1)
  • dotnet(最新的 .NET / 可移植类库的“当前”标签)
  • uap10.0(通用 Windows 应用程序,版本 10,截至本文的最新版本)
  • 本机(用于使用 NuGet 打包的 C/C++ 代码。如果您打算使用这个,还可以查看 CoApp)
  • 单触
  • MonoAndroid
  • Xamarin.iOS

加上您可以在上面链接的代码中找到的其他内容。

对于运行时标识符,它们由某种操作系统标识符和架构组成。因此,在JsonRuntimeFormatTests.cs中您可以找到一些示例。

这些包括:

  • win8-x86
  • win10-x64
  • win10臂
  • ETC

这些信息帮助我构建了一个使用运行时文件夹的 NuGet 包,因为我一直在努力了解可能的值是什么。我希望它可以帮助别人。

于 2015-10-01T15:03:52.197 回答