NuGet - RID和TFM示例

时间:2015-09-21 15:42:09

标签: nuget runtime-identifier

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

我怎样才能知道rid和tfm的所有可能值?我知道他们的意思是运行时标识符和目标框架Moniker,但我真的不知道如何处理它。

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

2 个答案:

答案 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中的一个常量构造的。它是一个框架标识符,加上最后连接的版本。一些例子包括:

  • net451(.NET 4.5.1)
  • dotnet(最新.NET /便携式类库的“当前”标记)
  • uap10.0(通用Windows应用程序,版本10,最新版本)
  • native(对于使用NuGet打包的C / C ++代码。如果您打算使用此代码,请查看CoApp)
  • MonoTouch的
  • MonoAndroid
  • Xamarin.iOS

在上面链接的代码中可以找到其他人。

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

这些包括:

  • win8的86
  • win10-64
  • win10臂

这些信息帮助我构建了一个使用runtimes文件夹的NuGet包,因为我很难知道可能的值是什么。我希望它可以帮助别人。