Каталог идентификаторов сред выполнения в .NET

RID — это сокращение от Runtime IDentifier (идентификатор среды выполнения). Идентификаторы RID служат для идентификации целевых платформ, на которых выполняется приложение. Они используются пакетами .NET для представления ресурсов, специфичных для платформы, в пакетах NuGet. Некоторые примеры идентификаторов RID: linux-x64, ubuntu.14.04-x64, win7-x64 или osx.10.12-x64. Для пакетов с собственными зависимостями они указывают, на каких платформах можно восстановить пакет.

Один идентификатор RID можно задать в элементе <RuntimeIdentifier> вашего файла проекта. Несколько идентификаторов RID можно определить в виде списка, разделенного точкой с запятой, в элементе <RuntimeIdentifiers> файла проекта. Они также используются с помощью параметра --runtime со следующими командами интерфейса командной строки .NET:

Идентификаторы RID, представляющие отдельные операционные системы, обычно имеют следующий формат: [os].[version]-[architecture]-[additional qualifiers], где:

  • [os] — это моникер платформы или операционной системы. Например, ubuntu.

  • [version] — это версия операционной системы в виде номера, разделенного точкой (.). Например, 15.10.

    • Это не должен быть коммерческий номер версии, так как такой номер часто представляет отдельные версии операционной системы с различными контактными зонами API.
  • [architecture] — это архитектура процессора. Например, x86, x64, arm или arm64.

  • [additional qualifiers] дополнительно дифференцируют разные платформы. Например, aot.

Схема RID

Схема RID или резервная схема среды выполнения — это список идентификаторов RID, которые совместимы друг с другом. Идентификаторы RID определены в пакете Microsoft.NETCore.Platforms. Список поддерживаемых идентификаторов RID и схема RID содержатся в файле runtime.json, который находится в репозитории dotnet/runtime. В этом файле можно увидеть, что все идентификаторы RID, кроме основного, содержат оператор "#import". Эти операторы указывают совместимые RID.

Когда NuGet восстанавливает пакеты, он пытается найти точное совпадение для указанной среды выполнения. Если его не удается найти, NuGet проходит схему до тех пор, пока не найдет ближайшую совместимую систему в соответствии со схемой RID.

Ниже приведена запись для идентификатора RID osx.10.12-x64:

"osx.10.12-x64": {
    "#import": [ "osx.10.12", "osx.10.11-x64" ]
}

Приведенный выше идентификатор RID указывает, что osx.10.12-x64 импортирует osx.10.11-x64. Таким образом, когда NuGet восстанавливает пакеты, он пытается найти точное совпадение osx.10.12-x64 в пакете. Если NuGet не удается найти определенную среду выполнения, он может восстановить пакеты, указывающие osx.10.11-x64 среды выполнения, например.

В следующем примере показан немного больший граф RID, который также определен в файле runtime.json :

    win7-x64    win7-x86
       |   \   /    |
       |   win7     |
       |     |      |
    win-x64  |  win-x86
          \  |  /
            win
             |
            any

Все идентификаторы RID в конечном итоге сопоставляются с корневым идентификатором RID any.

При работе с идентификаторами RID следует учитывать некоторые моменты:

  • Не пытайтесь анализировать идентификаторы RID для получения частей компонента.
  • Не следует создавать идентификаторы RID программным способом.
  • Используйте только те идентификаторы RID, которые уже определены для платформы.
  • Идентификаторы RID должны указываться точно. Предположения недопустимы.

Использование идентификаторов RID

Для использования идентификаторов RID необходимо знать, какие идентификаторы RID существуют. В платформу регулярно добавляются новые идентификаторы. Последнюю и полную версию см. в файле runtime.json в репозитории dotnet/runtime.

Идентификаторы RID, не привязанные к определенной версии или дистрибутиву ОС, являются предпочтительным выбором, особенно при работе с несколькими дистрибутивами Linux, так как большинство идентификаторов RID дистрибутива сопоставлены с идентификаторами RID, не зависящими от дистрибутива.

Ниже представлена небольшая выборка наиболее распространенных RID, используемых для каждой ОС.

Идентификаторы RID для Windows

Перечислены только распространенные значения. Последнюю и полную версию см. в файле runtime.json в репозитории dotnet/runtime.

  • Windows, не зависит от версии
    • win-x64
    • win-x86
    • win-arm
    • win-arm64
  • Windows 7 или Windows Server 2008 R2
    • win7-x64
    • win7-x86
  • Windows 8.1 или Windows Server 2012 R2
    • win81-x64
    • win81-x86
    • win81-arm
  • Windows 11 / Windows Server 2022 / Windows 10 / Windows Server 2016
    • win10-x64
    • win10-x86
    • win10-arm
    • win10-arm64

Идентификаторы RID отсутствуютwin11; используйте win10 идентификаторы RID для Windows 11. Дополнительные сведения см. в статье Зависимости и требования для .NET.

Идентификаторы RID для Linux

Перечислены только распространенные значения. Последнюю и полную версию см. в файле runtime.json в репозитории dotnet/runtime. Устройства с дистрибутивами, не перечисленными ниже, могут работать с одним из идентификаторов RID, не зависящих от дистрибутива. Например, для устройств Raspberry Pi с дистрибутивом Linux, которого нет в списке, можно использовать linux-arm.

  • Linux, не зависит от дистрибутива
    • linux-x64 (большинство дистрибутивов для компьютеров, например CentOS, Debian, Fedora, Ubuntu и производные от них);
    • linux-musl-x64 (упрощенные дистрибутивы, которые используют musl, например Alpine Linux);
    • linux-arm (Дистрибутивы Linux, работающие на arm, например Raspbian в Raspberry Pi Model 2+)
    • linux-arm64 (Дистрибутивы Linux, работающие на 64-разрядной платформе Arm, например Ubuntu Server 64-разрядной версии в Raspberry Pi Model 3+)
  • Red Hat Enterprise Linux
    • rhel-x64 (заменен на linux-x64 для RHEL новее версии 6);
    • rhel.6-x64
  • Tizen
    • tizen
    • tizen.4.0.0
    • tizen.5.0.0

Дополнительные сведения см. в статье Зависимости и требования для .NET.

Относительные идентификаторы macOS

Относительные идентификаторы macOS используют старую фирменную символику "OSX". Перечислены только распространенные значения. Последнюю и полную версию см. в файле runtime.json в репозитории dotnet/runtime.

  • macOS, не зависит от версии
    • osx-x64 (минимальная версия — macOS 10.12 Sierra).
  • macOS 10.10 Yosemite
    • osx.10.10-x64
  • macOS 10.11 El Capitan:
    • osx.10.11-x64
  • macOS 10.12 Sierra
    • osx.10.12-x64
  • macOS 10.13 High Sierra
    • osx.10.13-x64
  • macOS 10.14 Mojave
    • osx.10.14-x64
  • macOS 10.15 Catalina
    • osx.10.15-x64
  • macOS 11.0 Big Sur
    • osx.11.0-x64
    • osx.11.0-arm64
  • macOS 12 Monterey
    • osx.12-x64
    • osx.12-arm64

Дополнительные сведения см. в статье Зависимости и требования для .NET.

Идентификаторы RID iOS

Перечислены только распространенные значения. Последнюю и полную версию см. в файле runtime.json в репозитории dotnet/runtime.

  • iOS, а не версия
    • ios-arm64
  • iOS 10
    • ios.10-arm64
  • iOS 11
    • ios.11-arm64
  • iOS 12
    • ios.12-arm64
  • iOS 13
    • ios.13-arm64
  • iOS 14
    • ios.14-arm64
  • iOS 15
    • ios.15-arm64

Идентификаторы RID для Android

Перечислены только распространенные значения. Последнюю и полную версию см. в файле runtime.json в репозитории dotnet/runtime.

  • Android, а не версия
    • android-arm64
  • Android 21
    • android.21-arm64
  • Android 22
    • android.22-arm64
  • Android 23
    • android.23-arm64
  • Android 24
    • android.24-arm64
  • Android 25
    • android.25-arm64
  • Android 26
    • android.26-arm64
  • Android 27
    • android.27-arm64
  • Android 28
    • android.28-arm64
  • Android 29
    • android.29-arm64
  • Android 30
    • android.30-arm64
  • Android 31
    • android.31-arm64
  • Android 32
    • android.32-arm64

См. также