I have an Ubuntu 18.04 x64 Linux server running a bunch of .NET Core applications. All of them are published as self-contained applications and .NET Core versions vary between 2.1, 3.1 and 5.0. I don't have .NET Core runtime (let alone SDK) installed on the machine and do not want to install it.
I want to run tools such as dotnet-sos, dotnet-dump and dotnet-gcdump for a .NET Core 3.1 self-contained application. The linked pages provide direct download links for them, e.g. https://aka.ms/dotnet-sos/linux-x64. However, when I run the downloaded dotnet-sos tool it fails with
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 [/var/tmp/.net/MY_USERNAME/dotnet-sos/mrdxw5vu.czm/].
If this is a framework-dependent application, install the runtime in the global location [/usr/share/dotnet] or use the DOTNET_ROOT environment variable to specify the runtime location or register the runtime location in [/etc/dotnet/install_location].
The .NET Core runtime can be found at:
- https://aka.ms/dotnet-core-applaunch?missing_runtime=true&arch=x64&rid=ubuntu.18.04-x64
This happens even if the current working directory is my .NET application directory, which contains
libhostfxr.so. The error implies that running the tool for a self-contained application should be possible, but the file indeed does not exist in /var/tmp/.net/MY_USERNAME/dotnet-sos/mrdxw5vu.czm/. If I manually copy that file to the above directory it then fails with
It was not possible to find any compatible framework version
The framework 'Microsoft.NETCore.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.NETCore.App&framework_version=3.1.0&arch=x64&rid=ubuntu.18.04-x64
How do I run such tools without installing the .NET runtime machine-wide? I can easily download the binaries from https://dotnet.microsoft.com/download/dotnet/thank-you/runtime-3.1.14-linux-x64-binaries but where do I put them for the tool to find them?
Turns out the .NET SDK can be extracted to any directory and then used to install and run
dotnet-dumpanddotnet-gcdumplike this:(I did not manage to get SOS working in LLDB, however. "Installing" it works just as above, but it fails to load in LLDB.)