diff --git a/src/Dotnet.Watch/Watch.Aspire/Host/AspireHostLauncher.cs b/src/Dotnet.Watch/Watch.Aspire/Host/AspireHostLauncher.cs index facbff0e88f7..84c991188aed 100644 --- a/src/Dotnet.Watch/Watch.Aspire/Host/AspireHostLauncher.cs +++ b/src/Dotnet.Watch/Watch.Aspire/Host/AspireHostLauncher.cs @@ -43,7 +43,7 @@ internal sealed class AspireHostLauncher( launchProfileName: noLaunchProfile ? Optional.NoValue : launchProfile); } - internal ProjectOptions GetProjectOptions() + protected override ProjectOptions GetProjectOptions() { var commandArguments = new List() { @@ -75,6 +75,8 @@ internal ProjectOptions GetProjectOptions() }; } + internal ProjectOptions GetHostProjectOptions() => GetProjectOptions(); + public override async Task LaunchAsync(CancellationToken cancellationToken) { return await LaunchWatcherAsync( diff --git a/src/Dotnet.Watch/Watch.Aspire/Server/AspireWatcherLauncher.cs b/src/Dotnet.Watch/Watch.Aspire/Server/AspireWatcherLauncher.cs index ea8f75b1e53b..c0da9e8e66ac 100644 --- a/src/Dotnet.Watch/Watch.Aspire/Server/AspireWatcherLauncher.cs +++ b/src/Dotnet.Watch/Watch.Aspire/Server/AspireWatcherLauncher.cs @@ -28,7 +28,7 @@ protected async Task LaunchWatcherAsync( ProcessRunner = new ProcessRunner(EnvironmentOptions.GetProcessCleanupTimeout()), Options = GlobalOptions, EnvironmentOptions = EnvironmentOptions, - MainProjectOptions = null, + MainProjectOptions = GetProjectOptions(), BuildArguments = [], RootProjects = rootProjects, BrowserRefreshServerFactory = new BrowserRefreshServerFactory(), @@ -50,4 +50,6 @@ protected async Task LaunchWatcherAsync( return 0; } + + protected virtual ProjectOptions? GetProjectOptions() => null; } diff --git a/test/Microsoft.DotNet.HotReload.Watch.Aspire.Tests/AspireHostLauncherTests.cs b/test/Microsoft.DotNet.HotReload.Watch.Aspire.Tests/AspireHostLauncherTests.cs index 0718b7205d0b..94abac0ac2ca 100644 --- a/test/Microsoft.DotNet.HotReload.Watch.Aspire.Tests/AspireHostLauncherTests.cs +++ b/test/Microsoft.DotNet.HotReload.Watch.Aspire.Tests/AspireHostLauncherTests.cs @@ -44,7 +44,7 @@ public void GetProjectOptions_ProjectFile_UsesProjectFlag() { var launcher = CreateLauncher("myapp.csproj"); - var options = launcher.GetProjectOptions(); + var options = launcher.GetHostProjectOptions()!; AssertCommonProperties(options, launcher); Assert.False(options.LaunchProfileName.HasValue); @@ -56,7 +56,7 @@ public void GetProjectOptions_EntryPointFile_UsesFileFlag() { var launcher = CreateLauncher("Program.cs"); - var options = launcher.GetProjectOptions(); + var options = launcher.GetHostProjectOptions()!; AssertCommonProperties(options, launcher); Assert.False(options.LaunchProfileName.HasValue); @@ -68,7 +68,7 @@ public void GetProjectOptions_WithLaunchProfile_AddsLaunchProfileArguments() { var launcher = CreateLauncher("myapp.csproj", launchProfileName: "MyProfile"); - var options = launcher.GetProjectOptions(); + var options = launcher.GetHostProjectOptions()!; AssertCommonProperties(options, launcher); Assert.True(options.LaunchProfileName.HasValue); @@ -81,7 +81,7 @@ public void GetProjectOptions_NoLaunchProfile_AddsNoLaunchProfileFlag() { var launcher = CreateLauncher("myapp.csproj", launchProfileName: Optional.NoValue); - var options = launcher.GetProjectOptions(); + var options = launcher.GetHostProjectOptions()!; AssertCommonProperties(options, launcher); Assert.False(options.LaunchProfileName.HasValue); @@ -94,7 +94,7 @@ public void GetProjectOptions_NullLaunchProfile_UsesDefault() // null value (HasValue=true) means use default launch profile - no --launch-profile or --no-launch-profile flag var launcher = CreateLauncher("myapp.csproj", launchProfileName: (string?)null); - var options = launcher.GetProjectOptions(); + var options = launcher.GetHostProjectOptions()!; AssertCommonProperties(options, launcher); Assert.True(options.LaunchProfileName.HasValue); @@ -107,7 +107,7 @@ public void GetProjectOptions_WithApplicationArguments_AppendsArguments() { var launcher = CreateLauncher("myapp.csproj", launchProfileName: "Profile", applicationArguments: ["arg1", "arg2"]); - var options = launcher.GetProjectOptions(); + var options = launcher.GetHostProjectOptions()!; AssertCommonProperties(options, launcher); Assert.True(options.LaunchProfileName.HasValue); @@ -120,7 +120,7 @@ public void GetProjectOptions_SetsCustomWorkingDirectory() { var launcher = CreateLauncher("myapp.csproj", workingDirectory: "/custom/path"); - var options = launcher.GetProjectOptions(); + var options = launcher.GetHostProjectOptions()!; AssertCommonProperties(options, launcher); Assert.Equal("/custom/path", options.WorkingDirectory); @@ -131,7 +131,7 @@ public void GetProjectOptions_EntryPointFile_WithLaunchProfileAndArguments() { var launcher = CreateLauncher("Program.cs", launchProfileName: "Dev", applicationArguments: ["--port", "8080"]); - var options = launcher.GetProjectOptions(); + var options = launcher.GetHostProjectOptions()!; AssertCommonProperties(options, launcher); Assert.True(options.LaunchProfileName.HasValue); @@ -144,7 +144,7 @@ public void GetProjectOptions_NoLaunchProfile_WithApplicationArguments() { var launcher = CreateLauncher("myapp.csproj", launchProfileName: Optional.NoValue, applicationArguments: ["--urls", "http://localhost:5000"]); - var options = launcher.GetProjectOptions(); + var options = launcher.GetHostProjectOptions(); AssertCommonProperties(options, launcher); Assert.False(options.LaunchProfileName.HasValue); diff --git a/test/Microsoft.DotNet.HotReload.Watch.Aspire.Tests/AspireLauncherTests.cs b/test/Microsoft.DotNet.HotReload.Watch.Aspire.Tests/AspireLauncherTests.cs index 7e30a869bbaf..e909805befd2 100644 --- a/test/Microsoft.DotNet.HotReload.Watch.Aspire.Tests/AspireLauncherTests.cs +++ b/test/Microsoft.DotNet.HotReload.Watch.Aspire.Tests/AspireLauncherTests.cs @@ -42,6 +42,7 @@ public async Task Host() host.Start(testAsset, ["--entrypoint", projectPath]); await host.WaitUntilOutputContains(MessageDescriptor.WaitingForChanges); + await host.WaitUntilOutputContains("Started"); } [PlatformSpecificFact(TestPlatforms.Windows | TestPlatforms.Linux)] // https://github.com/dotnet/sdk/issues/53061