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:
- Installations of shared frameworks with multiple architectures
- 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:
- Add plan for x64 emulation designs#217
- https://github.com/dotnet/designs/blob/main/accepted/2021/install-location-per-architecture.md
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 defaultDOTNET_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.