diff --git a/src/SmallSharp.Build/MonitorActiveDocument.cs b/src/SmallSharp.Build/MonitorActiveDocument.cs index 2dc673e..57ac744 100644 --- a/src/SmallSharp.Build/MonitorActiveDocument.cs +++ b/src/SmallSharp.Build/MonitorActiveDocument.cs @@ -21,19 +21,26 @@ public override bool Execute() if (LaunchProfiles == null || UserFile == null || FlagFile == null) return true; - if (BuildEngine4.GetRegisteredTaskObject(nameof(ActiveDocumentMonitor), RegisteredTaskObjectLifetime.AppDomain) is not ActiveDocumentMonitor monitor) + try { - if (WindowsInterop.GetServiceProvider() is IServiceProvider services) + if (BuildEngine4.GetRegisteredTaskObject(nameof(ActiveDocumentMonitor), RegisteredTaskObjectLifetime.AppDomain) is not ActiveDocumentMonitor monitor) { - BuildEngine4.RegisterTaskObject(nameof(ActiveDocumentMonitor), - new ActiveDocumentMonitor(LaunchProfiles, UserFile, FlagFile, services), - RegisteredTaskObjectLifetime.AppDomain, false); + if (WindowsInterop.GetServiceProvider() is IServiceProvider services) + { + BuildEngine4.RegisterTaskObject(nameof(ActiveDocumentMonitor), + new ActiveDocumentMonitor(LaunchProfiles, UserFile, FlagFile, services), + RegisteredTaskObjectLifetime.AppDomain, false); + } + } + else + { + // NOTE: this means we only support ONE project/launchProfiles per IDE. + monitor.Refresh(LaunchProfiles, UserFile, FlagFile); } } - else + catch (Exception e) { - // NOTE: this means we only support ONE project/launchProfiles per IDE. - monitor.Refresh(LaunchProfiles, UserFile, FlagFile); + Log.LogWarning($"Failed to start active document monitoring: {e}"); } return true; diff --git a/src/SmallSharp.Build/WindowsInterop.cs b/src/SmallSharp.Build/WindowsInterop.cs index 147fbec..4b77cc4 100644 --- a/src/SmallSharp.Build/WindowsInterop.cs +++ b/src/SmallSharp.Build/WindowsInterop.cs @@ -29,7 +29,7 @@ public static void EnsureOpened(string filePath, TimeSpan delay = default) dte.ExecuteCommand("File.OpenFile", filePath); } - catch + catch { Debug.Fail($"Failed to open {filePath}."); } @@ -43,11 +43,20 @@ public static void EnsureOpened(string filePath, TimeSpan delay = default) if (delay != default) Thread.Sleep(delay); - var dte = GetDTE(); - if (dte == null) - return null; + try + { - return new OleServiceProvider(dte); + var dte = GetDTE(); + if (dte == null) + return null; + + return new OleServiceProvider(dte); + } + catch + { + Debug.Fail("Failed to get IDE service provider."); + return null; + } } static EnvDTE.DTE? GetDTE()