Skip to content

Runtime support for multi-architecture installations #50798

Closed

Description

The fundamental architectural difference here is that some platforms provide support for multiple architectures, e.g. they run ARM natively, but provide an emulator for amd64.

There are a couple areas we need provide support for:

  1. Installations of shared frameworks with multiple architectures
  2. Deployment of standalone apps with multiple architectures

There are two OSes we want to focus on: Windows and Mac OS.

We now have proposed designs for the shared framework/global install of .NET:

Work items:

  • Agree on the path format for the architecture-specific default install locations.
  • Embed the default install location for each different architecture into the apphost.
  • Add a mechanism into the apphost to retrieve the OS architecture in which the process is running.
  • Extend the global install location config file (macOS and Linux)
    • Add support for downlevel apphost compat: installers should keep the first line of the config file as is, while adding architecture-specific lines.
    • Add logic for picking up the correct installation (search for the arch-prefixed line matching the current architecture and fallback to the non-prefixed line if none was found).
  • Modify apphost to pick the correct arch-specific DOTNET_ROOT_ARCH env variable first and fallback to the default DOTNET_ROOT if it wasn't found.
  • Add multi-arch support for self-registered installations using Windows Registry.
  • Include all architectures in commands line dotnet --info - Host should inform user about other installed archs on the system #51101
  • Include all architectures in errors about missing runtime/framework - Host should inform user about different archs when failing to find framework #51102
  • Extend test infra to easily mock the OS and architecture so that testing can be done anywhere.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    • Status

      No status

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions