Fix running on macos via .app

This commit is contained in:
Matthew Parker [SSW]
2025-11-16 17:09:40 +10:00
parent 19eff28835
commit e2d4f041ab
2 changed files with 38 additions and 7 deletions

View File

@@ -0,0 +1,36 @@
using System.Diagnostics;
using Microsoft.Build.Locator;
namespace SharpIDE.Application.Features.Build;
public static class SharpIdeMsbuildLocator
{
public static void Register()
{
if (OperatingSystem.IsMacOS())
{
FixMacosPath();
}
// Use latest version - https://github.com/microsoft/MSBuildLocator/issues/81
var instance = MSBuildLocator.QueryVisualStudioInstances().MaxBy(s => s.Version);
if (instance is null) throw new InvalidOperationException("No MSBuild instances found");
MSBuildLocator.RegisterInstance(instance);
}
// https://github.com/microsoft/MSBuildLocator/issues/361
private static void FixMacosPath()
{
var processStartInfo = new ProcessStartInfo
{
FileName = "/bin/zsh",
ArgumentList = { "-l", "-c", "printenv PATH" },
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
};
using var process = Process.Start(processStartInfo);
var output = process!.StandardOutput.ReadToEnd().Trim();
process.WaitForExit();
Environment.SetEnvironmentVariable("PATH", output, EnvironmentVariableTarget.Process);
}
}

View File

@@ -1,8 +1,6 @@
using Godot;
using Microsoft.Build.Locator;
using Microsoft.Extensions.Hosting;
using SharpIDE.Application.Features.Events;
using SharpIDE.Application.Features.FilePersistence;
using SharpIDE.Application.Features.Build;
using SharpIDE.Godot.Features.IdeSettings;
using SharpIDE.Godot.Features.SlnPicker;
@@ -26,10 +24,7 @@ public partial class IdeWindow : Control
GD.Print("IdeWindow _Ready called");
ResourceLoader.LoadThreadedRequest(SlnPickerScenePath);
ResourceLoader.LoadThreadedRequest(IdeRootScenePath);
// Use latest version - https://github.com/microsoft/MSBuildLocator/issues/81
var instance = MSBuildLocator.QueryVisualStudioInstances().MaxBy(s => s.Version);
if (instance is null) throw new InvalidOperationException("No MSBuild instances found");
MSBuildLocator.RegisterInstance(instance);
SharpIdeMsbuildLocator.Register();
GodotOtelExtensions.AddServiceDefaults();
Singletons.AppState = AppStateLoader.LoadAppStateFromConfigFile();
//GetWindow().SetMinSize(new Vector2I(1152, 648));