Skip to content

Instantly share code, notes, and snippets.

@regalialong
Last active November 24, 2024 07:43
Show Gist options
  • Select an option

  • Save regalialong/bd0bc2adff4ada3067fb534a62cb5238 to your computer and use it in GitHub Desktop.

Select an option

Save regalialong/bd0bc2adff4ada3067fb534a62cb5238 to your computer and use it in GitHub Desktop.
VRCX Linux Rider dev notes

Here's my notes on getting a Linux Rider dev env for VRCX.

Setup your prefix like this:

  • Ensure you run at least Wine 9.0
  • Ensure binfmt works (run a Windows binary per ./yourbinary.exe)
  • Install corefonts (winetricks corefonts) into your prefix (else CEF dies)
  • Install .NET 8 Desktop Runtime into your prefix

For the actual meat and potatos:

In your Rider settings, under the "Build, Execution, Deployment > Hot Reload", disable all the options related to Hot Reloading under General settings:

If you don't do this, starting the app will exception due to it not liking the Startup Hook assembly name:

0504:err:eventlog:ReportEventW L"Description: The process was terminated due to an unhandled exception.\n"
0504:err:eventlog:ReportEventW L"Exception Info: System.ArgumentException: The startup hook simple assembly name '/home/USER/.local/share/JetBrains/Toolbox/apps/rider/lib/ReSharperHost/JetBrains.Microsoft.Extensions.DotNetDeltaApplier.dll' is invalid. It must be a valid assembly name and it may not contain directory separ"...

In the Run settings, set the following environment variables:

  • Set DOTNET_ROOT and DOTNET_ROOT_X64 to "C:\Program Files\dotnet"

For your convenience, the entire string for this is: DOTNET_ROOT="C:\Program Files\dotnet";DOTNET_ROOT_X64="C:\Program Files\dotnet""

If you don't set the roots, it'll try to find the runtime in /usr/share/dotnet/, which will not include hostfxr.dll required for framework dependent apps. This miraculously somehow even sticks when you ask Rider to unset all system variables, which evedently isn't broken in functionality since Wine fails to find DISPLAY.

At this point, you're on par with the Windows side:

  • Build the project, create the bin/x64/Debug/html directory
  • Build the HTML side of VRCX by running npm run prod in html/
  • Copy the resulting contents of html/dist/ directory into bin/x64/Debug/html

Assuming no higher being hates you today, you should be able to run VRCX within Rider since Rider generates a script that runs the built binary directly and binfmt passes it to Wine.

A side effect of VRCX not being a native dotnet application is that you won't be able to debug the app across Wine boundaries, I'm not sure if that's fixable. VRCX will never be native due to using WinForms, so you'll have to make due.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment