Here are some thoughts on how to make dotnet toolchain more user friendly on different OS's.
Note: These are simply proposals. Feel free to consider or discard them.
-
A tool that can be downloaded on any OS by a user which lets them express their intent of use. Based on the intent specified, the tool does all the necessary installation such as:
- installing the right runtime, or
- installing the right SDK, or
- installing the right IDE's (vscode and/or addons, unity, xamarin).
-
After this installation, the DFCE also runs through a diagnostic flow to ensure that the user will actually be able to perform those intents on this setup. This is where the Dotnet Doctor tool comes in.
-
Responsibilities of DFCE
- Collect user intent
- Keep track of environment variables and notify the user if they have gotten unintentionally modified by some other tool.
- Check the .bashrc, .bash_profile files on ubuntu, and other files for other OS's
- Keep track of integrity of the installation sites (folders) and inform if there is any mismatch in file signatures.
- To enable quick actions such as "upgrade/downgrade" of runtimes/sdks/ide's.
- Suggestion to remove a version of dotnet if it's not being used (atleast once in 6 months).
- Based on the learnt intent of the user, with the DFCE, this tool attempts to create projects behind the scenes (temp folders) and execute them end-to-end.
- Examples:
- Dotnet console project
- The tool creates a new dotnet project and runs it. Then checks if the output to the console was "Hello world!" or not.
- Blazor server project
- The tool creates a new blazorserver project and runs it in a headless browser. Then checks the outputs of the console (both in the shell and in the headless browser) to detect any failures.
- Xamarin Android development
- The tool first looks for android dependencies, environment variables, Java SDK configuration, emulators/devices are usable etc.
- Mono tools and Xamarin IDE are functioning as expected.
- Then it checks if the hello world equivalent works as well
- Dotnet console project
- Examples:
The reason to have the DFCE and DD is :
- to be assured that the right bits are present on the system.
- to catch installation errors early on and not when developers start working on the application they want to build.
- For example, building a wpf project is not supported on ubuntu as of today.
- Know right away whether a particular setup configuration can help achieve the intent of the user. If not, what steps could be taken.
- Adding deterministic flow to configuration reduces anxiety of whether a configuration will work or not, on not just our machines, but also in docker, or in cloud VPS/VMs or iot devices and wherever dotnet can reach - also addresses the "I don't want to mess with this machine" problem.
- Ability to export configuration (configuration.json, for example) and replicate the exact setup on a remote machine with simply the configuration.json and the DFCE.
- An application consumer or application developer
- End-User intents
- Install a particular runtime for a particular application.
- We don't want the user to be concerned with which package manager is being used.
- Install a particular runtime for a particular application.
- Developer intents
- Install a particular sdk.
- Create a WPF application
- Create a BlazorServer application etc.
- A state representing all the dotnet runtimes, sdks, IDE's settings installed globally or locally on the disk.