Обучение
Схема обучения
Создание распределенных приложений с помощью .NET Aspire - Training
Узнайте, как создавать наблюдаемые, готовые к работе рабочие приложения с помощью .NET Aspire.
Этот браузер больше не поддерживается.
Выполните обновление до Microsoft Edge, чтобы воспользоваться новейшими функциями, обновлениями для системы безопасности и технической поддержкой.
RID является коротким для идентификатора среды выполнения. Идентификаторы RID служат для идентификации целевых платформ, на которых выполняется приложение.
Они используются пакетами .NET для представления ресурсов, специфичных для платформы, в пакетах NuGet. Ниже приведены примеры идентификаторов RID: linux-x64
, win-x64
или osx-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, которые совместимы друг с другом.
Эти ИДЕНТИФИКАТОРы определяются в PortableRuntimeIdentifierGraph.json в репозитории dotnet/runtime
. В этом файле можно увидеть, что все идентификаторы RID, кроме основного, содержат оператор "#import"
. Эти операторы указывают совместимые RID.
До .NET 8 в файл runtime.json, расположенный в репозитории, регулярно добавляются определенные версии и идентификаторы идентификаторов дистрибутиваdotnet/runtime
. Этот граф больше не обновляется и существует в качестве варианта обратной совместимости. Разработчики должны использовать идентификаторы RID, не относящиеся к версии и не относящиеся к дистрибутивам.
Когда NuGet восстанавливает пакеты, он пытается найти точное совпадение для указанной среды выполнения. Если его не удается найти, NuGet проходит схему до тех пор, пока не найдет ближайшую совместимую систему в соответствии со схемой RID.
Ниже приведена запись для идентификатора RID osx-x64
:
"osx-x64": {
"#import": [ "osx", "unix-x64" ]
}
Приведенный выше идентификатор RID указывает, что osx-x64
импортирует unix-x64
. Поэтому при восстановлении пакетов NuGet пытается найти точное совпадение osx-x64
в пакете. Если NuGet не удается найти определенную среду выполнения, он может восстановить пакеты, указывающие unix-x64
среды выполнения, например.
В следующем примере показана немного большая схема RID, которая также указана в файле runtime.json:
linux-arm64 linux-arm32
| \ / |
| linux |
| | |
unix-arm64 | unix-x64
\ | /
unix
|
any
Кроме того, с помощью средства RidGraph можно легко визуализировать граф RID (или любое подмножество графа).
Все идентификаторы RID в конечном итоге сопоставляются с корневым идентификатором RID any
.
При работе с идентификаторами RID следует учитывать некоторые моменты:
Не пытайтесь анализировать идентификаторы RID для получения частей компонента.
Используйте только те идентификаторы RID, которые уже определены для платформы.
Идентификаторы RID должны указываться точно. Предположения недопустимы.
Не создавайте идентификаторы RID программным способом, если это не обязательно.
Некоторые приложения должны вычислить идентификаторы RID программным способом. В этом случае вычисляемый идентификатор должен точно соответствовать каталогу, в том числе в регистре. Идентификаторы с разными регистрами могут вызвать проблемы, если операционная система учитывает регистр, например Linux, так как это значение часто используется при создании таких путей вывода. Например, рассмотрим настраиваемый мастер публикации в Visual Studio, который использует сведения из диспетчера конфигурации решения и свойств проекта. Если конфигурация решения передает недопустимое значение, например ARM64
вместо arm64
этого, это может привести к недопустимому параметру RID, например win-ARM64
.
Для использования идентификаторов RID необходимо знать, какие идентификаторы RID существуют. Последние и полные версии см . в PortableRuntimeIdentifierGraph.json в репозитории dotnet/runtime
.
Идентификаторы, которые считаются "переносимыми", то есть не привязаны к определенной версии или дистрибутиву ОС, являются рекомендуемым вариантом. Это означает, что переносимые идентификаторы должны использоваться как для создания приложения для конкретной платформы, так и для создания пакета NuGet с ресурсами, зависящими от RID.
Начиная с .NET 8, поведение пакета SDK для .NET и среды выполнения по умолчанию заключается только в том, чтобы рассмотреть только неконверсивные и неразумные идентификаторы RID. При восстановлении и сборке пакет SDK использует меньший переносимый граф RID. Возвращает RuntimeInformation.RuntimeIdentifier платформу, для которой была создана среда выполнения. Во время выполнения .NET находит ресурсы, относящиеся к RID, с помощью известного набора переносимых ИДЕНТИФИКАТОРов. При создании приложения с ресурсами, зависящими от RID, которые могут игнорироваться во время выполнения, пакет SDK выдает предупреждение: NETSDK1206.
Платформа .NET больше не пытается обеспечить поддержку первого класса для разрешения зависимостей, относящихся к версии или распространению ОС. Если приложению или пакету необходимо загрузить разные ресурсы на основе версии ос или дистрибутива, он должен реализовать логику для условной загрузки ресурсов.
Чтобы получить сведения о платформе, используйте System.OperatingSystem API. В Windows и macOS Environment.OSVersion возвращается версия операционной системы. В Linux может быть версия ядра— чтобы получить имя дистрибутива Linux и сведения о версии, рекомендуемый подход — считывать файл /etc/os-release .
.NET предоставляет различные точки расширения для настройки логики загрузки, например , NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver), AssemblyLoadContext.ResolvingUnmanagedDllAssemblyLoadContext.Resolvingи AppDomain.AssemblyResolve. Их можно использовать для загрузки ресурса, соответствующего текущей платформе.
Ниже представлена небольшая выборка наиболее распространенных RID, используемых для каждой ОС. Последние и полные версии см . в PortableRuntimeIdentifierGraph.json в репозитории dotnet/runtime
.
win-x64
win-x86
win-arm64
Дополнительные сведения см. в разделе "Установка .NET" в Windows.
linux-x64
(Большинство дистрибутивов настольных компьютеров, таких как CentOS Stream, Debian, Fedora, Ubuntu и производные)linux-musl-x64
(упрощенные дистрибутивы, которые используют musl, например Alpine Linux);linux-musl-arm64
(Используется для создания образов Docker для 64-разрядных образов Arm версии 8 и минималистических базовых образов)linux-arm
(Дистрибутивы Linux, работающие в Arm, например Raspbian в Raspberry Pi Model 2+)linux-arm64
(Дистрибутивы Linux, работающие на 64-разрядной платформе Arm, например Ubuntu Server 64-разрядной версии в Raspberry Pi Model 3+)linux-bionic-arm64
(Дистрибутивы с помощью бионика Android libc, например Termux)linux-loongarch64
(Дистрибутивы Linux, работающие в LoongArch64)Дополнительные сведения см. в статье Зависимости и требования для .NET.
Относительные идентификаторы macOS используют старую фирменную символику "OSX".
osx-x64
(минимальная версия — macOS 10.12 Sierra).osx-arm64
Дополнительные сведения см. в статье Зависимости и требования для .NET.
ios-arm64
iossimulator-arm64
iossimulator-x64
android-arm64
android-arm
android-x64
android-x86
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Обучение
Схема обучения
Создание распределенных приложений с помощью .NET Aspire - Training
Узнайте, как создавать наблюдаемые, готовые к работе рабочие приложения с помощью .NET Aspire.