diff --git a/src/BuiltInTools/HotReloadAgent/HotReloadAgent.cs b/src/BuiltInTools/HotReloadAgent/HotReloadAgent.cs index f64180144078..61af429cfd25 100644 --- a/src/BuiltInTools/HotReloadAgent/HotReloadAgent.cs +++ b/src/BuiltInTools/HotReloadAgent/HotReloadAgent.cs @@ -297,8 +297,12 @@ public void ApplyStaticAssetUpdate(RuntimeStaticAssetUpdate update) /// public static void ClearHotReloadEnvironmentVariables(Type startupHookType) { - Environment.SetEnvironmentVariable(AgentEnvironmentVariables.DotNetStartupHooks, - RemoveCurrentAssembly(startupHookType, Environment.GetEnvironmentVariable(AgentEnvironmentVariables.DotNetStartupHooks)!)); + var startupHooks = Environment.GetEnvironmentVariable(AgentEnvironmentVariables.DotNetStartupHooks); + if (!string.IsNullOrEmpty(startupHooks)) + { + Environment.SetEnvironmentVariable(AgentEnvironmentVariables.DotNetStartupHooks, + RemoveCurrentAssembly(startupHookType, startupHooks)); + } Environment.SetEnvironmentVariable(AgentEnvironmentVariables.DotNetWatchHotReloadNamedPipeName, null); Environment.SetEnvironmentVariable(AgentEnvironmentVariables.HotReloadDeltaClientLogMessages, null); @@ -307,10 +311,7 @@ public static void ClearHotReloadEnvironmentVariables(Type startupHookType) // internal for testing internal static string RemoveCurrentAssembly(Type startupHookType, string environment) { - if (environment is "") - { - return environment; - } + Debug.Assert(!string.IsNullOrEmpty(environment), $"{nameof(environment)} must be set"); var comparison = Path.DirectorySeparatorChar == '\\' ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal; diff --git a/test/Microsoft.Extensions.DotNetDeltaApplier.Tests/HotReloadAgentTest.cs b/test/Microsoft.Extensions.DotNetDeltaApplier.Tests/HotReloadAgentTest.cs index ce3644bd4e6a..7125d426fcdc 100644 --- a/test/Microsoft.Extensions.DotNetDeltaApplier.Tests/HotReloadAgentTest.cs +++ b/test/Microsoft.Extensions.DotNetDeltaApplier.Tests/HotReloadAgentTest.cs @@ -9,6 +9,24 @@ namespace Microsoft.DotNet.Watch.UnitTests { public class HotReloadAgentTest { + [Fact] + public void ClearHotReloadEnvironmentVariables_DoesNotThrow_WhenStartupHooksNotSet() + { + // Ensure DOTNET_STARTUP_HOOKS is not set + var original = Environment.GetEnvironmentVariable("DOTNET_STARTUP_HOOKS"); + try + { + Environment.SetEnvironmentVariable("DOTNET_STARTUP_HOOKS", null); + + // Should not throw NullReferenceException + HotReloadAgent.ClearHotReloadEnvironmentVariables(typeof(StartupHook)); + } + finally + { + Environment.SetEnvironmentVariable("DOTNET_STARTUP_HOOKS", original); + } + } + [Fact] public void ClearHotReloadEnvironmentVariables_ClearsStartupHook() {