.NET - ArchWiki

Jump to content

# .NET

From ArchWiki

.NET (previously named .NET Core) is a FOSS software framework from Microsoft for C#, Visual Basic, and F#. It is designed to be cross-platform, modular and apt for modern applications, as opposed to its predecessor, the .NET Framework.

## Installation

If you only want to run .NET managed applications, install the dotnet-runtime package.

To build apps with .NET, install dotnet-sdk as well.

Microsoft recommends using Visual Studio Code , their Electron-based IDE, to build & debug .NET apps.

Tip: Add `~/.dotnet/tools` to `PATH`, otherwise dotnet tools will not work from shell.

### Install multiple versions manually

You can install multiple versions of the .NET SDK or runtime side by side by using the dotnet-install.sh script provided by the .NET Foundation. You can find the documentation of the script here.

For instance, this command would install the latest version found in the "current" channel in `/usr/share/dotnet`:

    # ./dotnet-install.sh --install-dir /usr/share/dotnet -channel Current -version latest

You may want to simulate the installation first by using the `-Dryrun` flag.

Once installed, you can verify the SDKs available:

    $ dotnet --list-sdks

    2.2.108 [/usr/share/dotnet/sdk]
    3.0.103 [/usr/share/dotnet/sdk]

    $ dotnet --version

    3.0.103

### Uninstall manually installed version

You may want to remove outdated versions installed with `dotnet-install.sh`. The automated .NET Uninstall Tool does still not support Linux, so the desinstallation has to be done manually.

    $ dotnet --list-sdks

    5.0.100 [/usr/share/dotnet/sdk]
    5.0.102 [/usr/share/dotnet/sdk]

Desinstallation of the sdk:

    $ SDK_VERSION="5.0.100"
    $ DOTNET_UNINSTALL_PATH="/usr/share/dotnet"
    # rm -rf $DOTNET_UNINSTALL_PATH/sdk/$SDK_VERSION

Using `dotnet-install.sh` also dotnet host and shared packages are getting installed, which may have to get removed additionally depending on the release.

Complete deinstallation of the .NET Version (sdk, host, shared):

    $ SDK_VERSION="5.0.100"
    $ DOTNET_VERSION="5.0.0"
    $ DOTNET_UNINSTALL_PATH="/usr/share/dotnet"
    # rm -rf $DOTNET_UNINSTALL_PATH/sdk/$SDK_VERSION
    # rm -rf $DOTNET_UNINSTALL_PATH/shared/Microsoft.NETCore.App/$DOTNET_VERSION
    # rm -rf $DOTNET_UNINSTALL_PATH/shared/Microsoft.AspNetCore.All/$DOTNET_VERSION
    # rm -rf $DOTNET_UNINSTALL_PATH/shared/Microsoft.AspNetCore.App/$DOTNET_VERSION
    # rm -rf $DOTNET_UNINSTALL_PATH/host/fxr/$DOTNET_VERSION

### Install multiple versions via AUR

Some of the AUR dotnet packages are made to be installed alongside each other. Only one host package (dotnet-host-binAUR or dotnet-host) is needed containing the command-line tool and you can install any of the available SDKs and Runtimes (latest packages of all major versions) next to it. List of compatible packages:

- dotnet-host-binAUR, dotnet-runtime-binAUR, aspnet-runtime-binAUR, dotnet-sdk-binAUR
- dotnet-host-previewAUR[broken link: package not found], dotnet-runtime-previewAUR[broken link: package not found], aspnet-runtime-previewAUR[broken link: package not found], dotnet-sdk-previewAUR[broken link: package not found]
- dotnet-runtime-3.0AUR, aspnet-runtime-3.0AUR, dotnet-sdk-3.0AUR,
- dotnet-runtime-2.2AUR, aspnet-runtime-2.2AUR, dotnet-sdk-2.2AUR, dotnet-sdk-2.2-vs2017AUR
- dotnet-runtime-2.1AUR, aspnet-runtime-2.1AUR, dotnet-sdk-2.1AUR

### Install PowerShell Core

You can install PowerShell Core as a "global" tool also [1] [2]

    # dotnet tool install --global PowerShell

to update to the current version

    # dotnet tool update --global PowerShell

## Telemetry

Telemetry is enabled by default but can be disabled by setting environment variable `DOTNET_CLI_TELEMETRY_OPTOUT=1`.

## Tab-Completion

All dotnet programs that use `System.CommandLine.Parser` to parse their arguments have auto-complete support. Enabling it just requires adding a few lines to your `.bashrc` / `.zshrc` file, as described in their documentation. Instructions for standalone binaries are here.

## Troubleshooting

### It was not possible to find any compatible framework version

If you get the following error when you try to run a newly created project, you no longer need to set a `DOTNET_ROOT` variable as described in the solutions of various GitHub issues. Arch's dotnet package (as of 3.1) installs it to the Microsoft recommended location of `/usr/share/dotnet`.

    $ dotnet run

    It was not possible to find any compatible framework version
    The framework 'Microsoft.AspNetCore.App', version '3.1.0' was not found.
      - No frameworks were found.

    You can resolve the problem by installing the specified framework and/or SDK.

    The specified framework can be found at:
      - https://aka.ms/dotnet-core-applaunch?framework=Microsoft.AspNetCore.App&framework_version=3.1.0&arch=x64&rid=arch-x64

This is caused because the runtime is shipped as a separate package in Arch. You just need to make sure you have the aspnet-runtime package installed as well.

### "the required library libhostfxr.so could not be found" error

Some of the dotnet SDK tools (for example libman, dotnet-watch etc.) may expect you to have the environment variable `DOTNET_ROOT` pre-configured. If it is not, an error like this one could be observed: [3]

    A fatal error occurred, the required library libhostfxr.so could not be found.
    If this is a self-contained application, that library should exist in [/home/my_user/.dotnet/tools/.store/microsoft.web.librarymanager.cli/1.0.172/microsoft.web.librarymanager.cli/1.0.172/tools/netcoreapp2.1/any/].
    If this is a framework-dependent application, install the runtime in the default location [/usr/share/dotnet] or use the DOTNET_ROOT environment variable to specify the runtime location.

The workaround is to manually export `DOTNET_ROOT` in your shell:

    ~/.bashrc

    export DOTNET_ROOT=/opt/dotnet

### Error MSB4019: The imported project "/usr/share/dotnet/sdk/.../Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.Common.targets" was not found. Confirm that the expression in the Import declaration ... is correct, and that the file exists on disk.

This happens after an update. The currently running shell / login session is storing environment variables for the dotnet SDK version different from one installed. Restarting the shell or logging in again should fix this.

### SDK specified could not be found

This is believed to caused by a conflict between the Mono and MSBuild SDK libs and the dotnet ones. To fix this export the path manually in your shell (replacing the version number as necessary) e.g:

    ~/.bashrc

    export MSBuildSDKsPath=$( echo /usr/share/dotnet/sdk/3.*/Sdks );

## See also

- .NET homepage
- The .NET Foundation
- .NET API Browser

Category:

- Frameworks

Hidden category:

- Pages with broken package links