godot
godot copied to clipboard
Crash when trying to open C# project with .NET installed in non-standard location (but in PATH)
Godot version
Godot Engine v4.0.beta1.mono.official (4ba934bf3d1e697d8f332b5e8cfd694cdf49a7ba)
System information
Arch Linux, Vulkan, GTX 1050
Issue description
When attempting to open a C# project on godot 4 beta mono I get the following error
Godot Engine v4.0.beta1.mono.official.4ba934bf3 - https://godotengine.org
Vulkan API 1.2.0 - Using Vulkan Device #0: NVIDIA - NVIDIA GeForce GTX 1050
ERROR: The host fxr folder does not exist: /usr/share/dotnet/host/fxr
at: try_get_path_from_dotnet_root (modules/mono/editor/hostfxr_resolver.cpp:323)
ERROR: .NET: One of the dependent libraries is missing. Typically when the `hostfxr`, `hostpolicy` or `coreclr` dynamic libraries are not present in the expected locations.
at: find_hostfxr (modules/mono/mono_gd/gd_mono.cpp:126)
ERROR: .NET: Failed to load hostfxr
at: initialize (modules/mono/mono_gd/gd_mono.cpp:397)
Project is missing: /home/zekiah/Downloads/godot-reflection/project.godot
Project is missing: /home/zekiah/Downloads/Liblast-main/liblast/Game/project.godot
Editing project: /home/zekiah/Documents/MandemTerritory
Godot Engine v4.0.beta1.mono.official.4ba934bf3 - https://godotengine.org
Vulkan API 1.2.0 - Using Vulkan Device #0: NVIDIA - NVIDIA GeForce GTX 1050
ERROR: The host fxr folder does not exist: /usr/share/dotnet/host/fxr
at: try_get_path_from_dotnet_root (modules/mono/editor/hostfxr_resolver.cpp:323)
ERROR: .NET: One of the dependent libraries is missing. Typically when the `hostfxr`, `hostpolicy` or `coreclr` dynamic libraries are not present in the expected locations.
at: find_hostfxr (modules/mono/mono_gd/gd_mono.cpp:126)
ERROR: .NET: Failed to load hostfxr
at: initialize (modules/mono/mono_gd/gd_mono.cpp:397)
WARNING: FBX file import is enabled in the project settings, but no FBX2glTF path is configured in the editor settings. FBX files will not be imported.
at: _editor_init (modules/gltf/register_types.cpp:99)
================================================================
handle_crash: Program crashed with signal 11
Engine version: Godot Engine v4.0.beta1.mono.official (4ba934bf3d1e697d8f332b5e8cfd694cdf49a7ba)
Dumping the backtrace. Please include this when reporting the bug to the project developer.
[1] /usr/lib/libc.so.6(+0x38a00) [0x7f4122a92a00] (??:0)
-- END OF BACKTRACE --
================================================================
I do have dotnet installed, evident as when I run,
❯ dotnet --list-sdks
6.0.302 [/home/zekiah/dotnet/sdk]
7.0.100-preview.6.22352.1 [/home/zekiah/dotnet/sdk]
❯ dotnet --list-runtimes
Microsoft.AspNetCore.App 6.0.7 [/home/zekiah/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 7.0.0-preview.6.22330.3 [/home/zekiah/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 6.0.7 [/home/zekiah/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 7.0.0-preview.6.22324.4 [/home/zekiah/dotnet/shared/Microsoft.NETCore.App]
, you can see everything is installed as expected, when I run which dotnet
, I get /home/zekiah/dotnet/dotnet
, I suspect this may be an issue as godot is only seeming to look in ERROR: The host fxr folder does not exist: /usr/share/dotnet/host/fxr
for dotnet. When searching within /home/zekiah/dotnet/dotnet
, the host/fxr
dir does exist there.
Steps to reproduce
- Install dotnet via the install scripts, or some other method that does not result in the dotnet directory not being located in /usr/share/dotnet/
Minimal reproduction project
No response
Godot should also be looking at the location of the dotnet executable in PATH
but I'm not seeing it in the error. Can you check if /home/zekiah/dotnet
is in the PATH
environment variable?
Also, do the /etc/dotnet/install_location
or /etc/dotnet/install_location_x64
files exist for you?
You can also try setting the DOTNET_ROOT
environment variable to /home/zekiah/dotnet
and see if that fixes it for you as a workaround.
Also, do the
/etc/dotnet/install_location
or/etc/dotnet/install_location_x64
files exist for you? You can also try setting theDOTNET_ROOT
environment variable to/home/zekiah/dotnet
and see if that fixes it for you as a workaround.
Nor /etc/dotnet/install_location_x64
, or /etc/dotnet/install_location
seem to exist for me,
❯ /etc/dotnet/install_location
zsh: no such file or directory: /etc/dotnet/install_location
❯ /etc/dotnet/install_location_x64
zsh: no such file or directory: /etc/dotnet/install_location_x64
However, setting DOTNET_ROOT
to the path of the dotnet excutable seems to at least allow me to run the editor and open a C# project, even if it still complains about The host fxr folder does not exist: /usr/share/dotnet/host/fxr
❯ DOTNET_ROOT=$(which dotnet) ./Godot_v4.0-beta1_mono_linux.x86_64
Godot Engine v4.0.beta1.mono.official.4ba934bf3 - https://godotengine.org
Vulkan API 1.2.0 - Using Vulkan Device #0: NVIDIA - NVIDIA GeForce GTX 1050
ERROR: The host fxr folder does not exist: /usr/share/dotnet/host/fxr
Similar problem on Windows 11, my fiancée has the game close instantly and running from command prompt yields ".NET: Failed to load hostfxr" as the only output. She does have .NET 7 installed in the standard location, and hostfxr.dll definitely exists in the right folder. I'm building the game with v4.0.rc2.mono.official [d2699dc7a].
@Anixias Would you be able to open the game from a terminal with the --verbose
flag? It may contain more useful information to help us figure out what went wrong.
An exported game should contain the hostfxr.dll in the data folder, if you move the game binary make sure to move the data folder with it. Perhaps you run into https://github.com/godotengine/godot/issues/72159.
I'll give it a shot when I can. That seems like it could be the issue I'm facing, although the same PCK works on my own computer.
This is all it says. This is on another friend's PC running Windows 10.
EDIT: I didn't see your text about the data folder, thought it was a dump from the export process and didn't realize it needed to be included with the application.... I assumed all data was in the PCK file. So sorry!
I've had this hostfxr problem (v4.0.stable.mono.official [92bee43ad]) and solved it, though I suspect it can have many different causes. In my case I could run the project from the editor, but if I exported the project and tried to run the exported .exe, I get
ERROR: .NET: Failed to load hostfxr
at: (modules/mono/mono_gd/gd_mono.cpp:399)
It sounds like @Zekiah-A is having the problem in the editor (?), while @Anixias has the problem when launching an exported game (like me).
Godot 4.0 beta 16 introduced Initial .NET 7 support, and Anixias mentions "She does have .NET 7 installed". However, I see that initial .NET 7 support "does not change the target framework the godot assemblies, instead it just allows the godot editor to run using the latest .NET version installed on the machine (including .NET 7).". Perhaps the editor runs because it can run on .net 7, but the project doesn't build correctly because it targets .net 6 and .net 6 is not installed? I've not looked into this .net 7 support, so that is just a suggestion shooting from the hip and may not be the cause.
The cause of my Failed to load hostfxr
is a silent issue with MSBuild that comes into play when I export. i.e. there's nothing wrong with the .net environment, rather it's the .exe that was exported that is bad.
There's two ways to know this is happening, firstly the "Publishing .NET project..." step is skipped during export - the export is suspiciously fast and this I don't see this progress-bar dialog (I do still see the other progress-bar dialog)
Secondly, the editor is missing the MSBuild panel, I see:
But in a working project it looks like this:
In my case, the trigger was that my .sln file didn't have the same file name as the Assembly Name
in Project Settings→ General→ Dotnet→ Project (more on that later).
So I assume Godot couldn't find the .sln file, silently switched into some sort of "not a dotnet project" mode and so didn't do a complete build when exporting the project. I presume the reason the project was running fine in the editor is I had been developing the c# parts in a different IDE (vs2022) which meant the assemblies were already compiled and present somewhere that Godot was expecting.
So if an exported file quits with ERROR: .NET: Failed to load hostfxr
, and the .net6 runtime is confirmed to be installed, check also whether Godot was building the .net part of it during export - I'm guessing there are more scenarios than mine which will trigger this.
In my specific case, the settings don't allow me to specify a .sln (only a solution directory, in my case the parent directory), and don't make it clear that the solution file must stay named the same as the Assembly Name
(I thought keeping both the csproj name and the csproj's assembly name the same would have been sufficient), but the main issue is that you don't know when the dotnet settings have failed, weird errors just start to appear days later - I've had a similar but different issue caused by silent failure in the dotnet project settings here.
In in the meantime I can now keep an eye on whether the MSBuild panel exists
Try this:
wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
chmod 777 dotnet-install.sh
./dotnet-install.sh --channel 7.0
export PATH="$PATH:$HOME/.dotnet"
Use microsoft script to install dotnet. It works fine.
Try this:
wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh chmod 777 dotnet-install.sh ./dotnet-install.sh --channel 7.0 export PATH="$PATH:$HOME/.dotnet"
Use microsoft script to install dotnet. It works fine.
How do I point godot to the right folder? I have installed with your commands but still have the same problem