sdk: .NET Core executables fail if .NET Core is not installed in default location
From @natemcmaster on Friday, April 20, 2018 7:07:14 PM
Steps to reproduce
Download .NET Core CLI to $env:USERPROFILE/.dotnet/x64 and install a global tool
$env:PATH="$env:USERPROFILE/.dotnet/x64;$env:PATH"
dotnet-install.ps1 -Version 2.1.300-preview3-008646 -InstallDir $env:USERPROFILE/.dotnet/x64
dotnet-install.ps1 -Runtime aspnetcore -Version 2.1.0-preview2-final -InstallDir $env:USERPROFILE/.dotnet/x64
dotnet tool install -g dotnet-serve
dotnet-serve
Expected behavior
The generated shim dotnet-serve.exe should find and use the dotnet on PATH to launch the global tool.
Actual behavior
If no .NET Core is installed in C:\Program Files\dotnet
PS > dotnet-serve
A fatal error occurred, the required library hostfxr.dll could not be found.
If this is a self-contained application, that library should exist in [C:\Users\namc\.dotnet\tools\.store\dotnet-serve\0.3.0\dotnet-serve\0.3.0\tools\netcoreapp2.1\any\].
If this is a framework-dependent application, install the runtime in the default location [C:\Program Files\dotnet] or use the DOTNET_ROOT environment variable to specify the runtime location.
If .NET Core is installed in C:\Program Files\dotnet
, but doesn’t have the right shared framework version
PS> $env:COREHOST_TRACE=1
PS> dotnet-serve
Tracing enabled
--- Invoked apphost [version: 2.1.0-rc1-26419-02, commit hash: 515f580aa000600da03e81537396d2253b16fa12] main = {
C:\Users\namc\.dotnet\tools\dotnet-serve.exe
}
The managed DLL bound to this executable is: '.store\dotnet-serve\0.3.0\dotnet-serve\0.3.0\tools\netcoreapp2.1\any\dotnet-serve.dll'
Using default installation location [C:\Program Files\dotnet] as runtime location.
Reading fx resolver directory=[C:\Program Files\dotnet\host\fxr]
Considering fxr version=[2.0.5]...
Considering fxr version=[2.0.6]...
Considering fxr version=[2.0.7]...
Detected latest fxr version=[C:\Program Files\dotnet\host\fxr\2.0.7]...
Resolved fxr [C:\Program Files\dotnet\host\fxr\2.0.7\hostfxr.dll]...
Loaded library from C:\Program Files\dotnet\host\fxr\2.0.7\hostfxr.dll
Probed for and did not resolve library symbol ????????????
The required library C:\Program Files\dotnet\host\fxr\2.0.7\hostfxr.dll does not support relative app dll paths.
Environment data
dotnet --info
output:
.NET Core SDK (reflecting any global.json):
Version: 2.1.300-preview3-008646
Commit: 8e01912b36
Runtime Environment:
OS Name: Windows
OS Version: 10.0.16299
OS Platform: Windows
RID: win10-x64
Base Path: C:\Users\namc\.dotnet\x64\sdk\2.1.300-preview3-008646\
Host (useful for support):
Version: 2.1.0-rc1-26419-02
Commit: 515f580aa0
.NET Core SDKs installed:
2.1.4 [C:\Users\namc\.dotnet\x64\sdk]
2.1.100 [C:\Program Files\dotnet\sdk]
2.1.105 [C:\Users\namc\.dotnet\x64\sdk]
2.1.300-preview2-008530 [C:\Users\namc\.dotnet\x64\sdk]
2.1.300-preview3-008646 [C:\Users\namc\.dotnet\x64\sdk]
.NET Core runtimes installed:
Microsoft.AspNetCore.All 2.1.0-preview2-30478 [C:\Users\namc\.dotnet\x64\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.0-preview2-final [C:\Users\namc\.dotnet\x64\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.0-rc1-30613 [C:\Users\namc\.dotnet\x64\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.0-preview2-final [C:\Users\namc\.dotnet\x64\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.0-rc1-30613 [C:\Users\namc\.dotnet\x64\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 1.1.5 [C:\Users\namc\.dotnet\x64\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.0.7 [C:\Users\namc\.dotnet\x64\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.0.7 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.0-preview2-26406-04 [C:\Users\namc\.dotnet\x64\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.0-rc1-26419-02 [C:\Users\namc\.dotnet\x64\shared\Microsoft.NETCore.App]
To install additional .NET Core runtimes or SDKs:
https://aka.ms/dotnet-download
Copied from original issue: dotnet/cli#9114
About this issue
- Original URL
- State: open
- Created 5 years ago
- Reactions: 5
- Comments: 54
@voronoipotato I’ve been using the following successfully for VS Online:
From @KallDrexx on Thursday, October 17, 2019 1:33:55 PM
I just want to add an anecdote I encountered that caused me a huge amount of confusion, and no amount of
dotnet install
docs helped because I never randotnet install
.I work at a bank and we don’t have admin access to our machines. To not have to deal with the pain that it is getting someone to install .net core 3.0 for me I downloaded the binaries, placed them in
c:\users\<name>\dotnet
, and added that to my path. I have been successfully doing .net core 2.2 and 3.0 development that way for a while (due to Rider not needing admin to install).However, I downloaded Linqpad6 (which is a .net core 3.0 application) and it would not run. Running the executable would do absolutely nothing, and trying to
dotnet Linqpad6.exe
would give an error abouthostpolicy.dll
not being found (and no mention of any environment variables).After a back and forth with the Linqpad dev I ended up doing a really round about testing that finally gave me the error above about the
DOTNET_ROOT
environment variable not being set. Setting this fixed all my issues.So my point is, this has the potential to really cause confusion for downloaded .net core precompiled binaries and it’s actually very hard to find out that the solution is
DOTNET_ROOT
.At a minimum I believe that if
DOTNET_ROOT
is not set then all executions ofdotnet
cli should give a warning about this not being set.From @grantzvolsky on Thursday, August 22, 2019 1:17:31 PM
For those using the snap package, the
libhostfxr.so
error can be fixed as follows.Complete configuration for Ubuntu development: /etc/profile.d/04-dotnet-cli-tools.sh
From @natemcmaster on Tuesday, May 21, 2019 3:30:26 AM
Try changing this line to include
readlink
, which follow the symlink to the actual location of dotnet.From @tmds on Monday, July 2, 2018 4:39:52 AM
This finds dotnet on PATH and determines DOTNET_ROOT based on that: