Reloaded-II icon indicating copy to clipboard operation
Reloaded-II copied to clipboard

.NET 10 - Blocked by Linux Support

Open dreamsyntax opened this issue 1 month ago • 10 comments

  • Minimal upgrade to test out .NET 10
  • Upgrade CI to latest actions, bump node 14 to node 20 to match other R-II mod repo
  • Does not update the Template

--

Windows tested ✔️ Linux - ❌ - unable to add new games - breaks on attempting to invoke the FileDialog image

dreamsyntax avatar Nov 14 '25 21:11 dreamsyntax

image Build from artifacts seems to function as expected, but CI also reports an error which has me stumped. NET 9 isn't defined in R-II CLI csproj anywhere..

build Assets file 'D:\a\Reloaded-II\Reloaded-II\source\Reloaded.Mod.Installer.Cli\obj\project.assets.json' doesn't have a target for 'net9.0-windows'. Ensure that restore has run and that you have included 'net9.0-windows' in the TargetFrameworks for your project.

dreamsyntax avatar Nov 14 '25 22:11 dreamsyntax

Just search 9.0 in all files. Maybe there's an override somewhere, like in build script.

Sewer56 avatar Nov 14 '25 22:11 Sewer56

Just search 9.0 in all files. Maybe there's an override somewhere, like in build script.

"Hmph too easy"

Oops, didn't check the ps1 scripts.

dreamsyntax avatar Nov 14 '25 22:11 dreamsyntax

Holding off on this until .NET 10 is better supported in wine.

dreamsyntax avatar Nov 15 '25 01:11 dreamsyntax

Linux exclusive error thrown on clicking the + button / "Add an application"

Exception:
Unable to cast object of type 'Ookii.Dialogs.Wpf.Interop.FileSaveDialogRCW' to type 'Ookii.Dialogs.Wpf.Interop.NativeFileSaveDialog'.
Stacktrace:
   at Ookii.Dialogs.Wpf.VistaSaveFileDialog.CreateFileDialog()
   at Ookii.Dialogs.Wpf.VistaFileDialog.RunFileDialog(IntPtr hwndOwner)
   at Ookii.Dialogs.Wpf.VistaFileDialog.ShowDialog(IntPtr owner)
   at Ookii.Dialogs.Wpf.VistaFileDialog.ShowDialog(Window owner)
   at Ookii.Dialogs.Wpf.VistaFileDialog.ShowDialog()
   at Reloaded.Mod.Launcher.Lib.Commands.Application.AddApplicationCommand.SelectEXEFile()
   at Reloaded.Mod.Launcher.Lib.Commands.Application.AddApplicationCommand.ExecuteAsync(Object parameter)
   at Reloaded.Mod.Launcher.Lib.Commands.Application.AddApplicationCommand.Execute(Object parameter)
   at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__124_0(Object state)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   at System.Windows.Window.ShowHelper(Object booleanBox)
   at System.Windows.Window.Show()
   at System.Windows.Window.ShowDialog()
   at Reloaded.Mod.Launcher.App.OnStartup(Object sender, StartupEventArgs e)
   at System.Windows.Application.<.ctor>b__1_0(Object unused)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
   at System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   at System.Windows.Application.RunDispatcher(Object ignore)
   at System.Windows.Application.RunInternal(Window window)
   at Reloaded.Mod.Launcher.App.Main()

dreamsyntax avatar Nov 15 '25 17:11 dreamsyntax

Going to look into this cast, since Ookii dialogs library is deprecated and unlikely to fix this themselves.

dreamsyntax avatar Nov 19 '25 23:11 dreamsyntax

Option two is removing Ookii dialogs completely I guess, and using the new native net 8.0+ versions instead. I don't think Ookii will be updating this, and I suspect wine won't consider it an issue.

You don't have filesystem access to the files (not even Explorer does), and open dialog will error on selection while selecting an encrypted Xbox Store exe.

Microsoft, WTF. lol

dreamsyntax avatar Nov 23 '25 18:11 dreamsyntax

I'd be more concerned about subtle bugs elsewhere, which we don't quite know about yet.

After all, a runtime upgrade broke this, not Proton.

So something runtime related was/is amiss.

Sewer56 avatar Nov 23 '25 18:11 Sewer56

Created wine bug report https://bugs.winehq.org/show_bug.cgi?id=59041

dreamsyntax avatar Nov 25 '25 07:11 dreamsyntax

Rebased. Will be using this build extensively on Windows. Wine has resolved the bug above in 11.0-rc Will still need to wait for Proton 11 to be common before merging this, but for testing on Windows its fine.

dreamsyntax avatar Dec 16 '25 20:12 dreamsyntax