diff --git a/eng/Versions.props b/eng/Versions.props
index 3f1c9d0102f..a9a08670fa3 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -3,7 +3,7 @@
13
3
- 4
+ 5
$(MajorVersion).$(MinorVersion).$(PatchVersion)
preview.1
net8.0
diff --git a/eng/pipelines/azure-pipelines-unofficial.yml b/eng/pipelines/azure-pipelines-unofficial.yml
index 910bd23d3bf..890115d9db4 100644
--- a/eng/pipelines/azure-pipelines-unofficial.yml
+++ b/eng/pipelines/azure-pipelines-unofficial.yml
@@ -334,7 +334,11 @@ extends:
enableMicrobuild: false
enablePublishUsingPipelines: false
enablePublishBuildAssets: false
- enablePublishBuildArtifacts: true
+ # WinGet and Homebrew jobs only consume previously-built CLI archives;
+ # they don't run the repo build, so artifacts/log/$(_BuildConfig) is
+ # never created. Leaving this 'true' makes the 1ES Publish Logs output
+ # fail because its targetPath doesn't exist.
+ enablePublishBuildArtifacts: false
enableTelemetry: true
workspace:
clean: all
diff --git a/eng/pipelines/azure-pipelines.yml b/eng/pipelines/azure-pipelines.yml
index ad0824a1d13..9657ce37517 100644
--- a/eng/pipelines/azure-pipelines.yml
+++ b/eng/pipelines/azure-pipelines.yml
@@ -449,7 +449,11 @@ extends:
enableMicrobuild: false
enablePublishUsingPipelines: false
enablePublishBuildAssets: false
- enablePublishBuildArtifacts: true
+ # WinGet and Homebrew jobs only consume previously-built CLI archives;
+ # they don't run the repo build, so artifacts/log/$(_BuildConfig) is
+ # never created. Leaving this 'true' makes the 1ES Publish Logs output
+ # fail because its targetPath doesn't exist.
+ enablePublishBuildArtifacts: false
enableTelemetry: true
workspace:
clean: all
diff --git a/src/Aspire.Cli/DotNet/DotNetCliRunner.cs b/src/Aspire.Cli/DotNet/DotNetCliRunner.cs
index 50520d8b070..608ae882950 100644
--- a/src/Aspire.Cli/DotNet/DotNetCliRunner.cs
+++ b/src/Aspire.Cli/DotNet/DotNetCliRunner.cs
@@ -77,11 +77,6 @@ internal sealed class DotNetCliRunner(
private const int MaxSearchRetries = 3;
private static readonly TimeSpan[] s_searchRetryDelays = [TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2)];
- private string GetMsBuildServerValue()
- {
- return configuration["DOTNET_CLI_USE_MSBUILD_SERVER"] ?? "true";
- }
-
internal static string GetBackchannelSocketPath()
{
return CliPathHelper.CreateUnixDomainSocketPath("cli.sock");
@@ -520,12 +515,6 @@ public async Task RunAsync(FileInfo projectFile, bool watch, bool noBuild,
// We copy the dictionary here because we don't want to mutate the input.
var finalEnv = env?.ToDictionary() ?? new Dictionary();
- // Inject DOTNET_CLI_USE_MSBUILD_SERVER when noBuild == false
- if (!noBuild)
- {
- finalEnv["DOTNET_CLI_USE_MSBUILD_SERVER"] = GetMsBuildServerValue();
- }
-
// Check if update notifications are disabled and set version check environment variable
if (!features.IsFeatureEnabled(KnownFeatures.UpdateNotificationsEnabled, defaultValue: true))
{
@@ -808,15 +797,9 @@ public async Task BuildAsync(FileInfo projectFilePath, bool noRestore, Proc
string[] cliArgs = ["build", noRestoreSwitch, projectFilePath.FullName];
cliArgs = [.. cliArgs.Where(arg => !string.IsNullOrWhiteSpace(arg))];
- // Always inject DOTNET_CLI_USE_MSBUILD_SERVER for apphost builds
- var env = new Dictionary
- {
- ["DOTNET_CLI_USE_MSBUILD_SERVER"] = GetMsBuildServerValue()
- };
-
return await ExecuteAsync(
args: cliArgs,
- env: env,
+ env: null,
projectFile: projectFilePath,
workingDirectory: projectFilePath.Directory!,
backchannelCompletionSource: null,
diff --git a/src/Aspire.Dashboard/Model/Interaction/InputViewModel.cs b/src/Aspire.Dashboard/Model/Interaction/InputViewModel.cs
index 0dda8bfd8e9..acb7a2b9d81 100644
--- a/src/Aspire.Dashboard/Model/Interaction/InputViewModel.cs
+++ b/src/Aspire.Dashboard/Model/Interaction/InputViewModel.cs
@@ -17,24 +17,9 @@ public InputViewModel(InteractionInput input)
public void SetInput(InteractionInput input)
{
- string value;
- if (Input == null)
- {
- value = input.Value;
- }
- else
- {
- // Only overwrite the local value if the input was loading and is no longer loading (update could have come from server)
- // This avoids changes in local values being overwritten by a dynamic server update.
- if (Input.Loading && !input.Loading)
- {
- value = input.Value;
- }
- else
- {
- value = Input.Value;
- }
- }
+ var value = Input is null || ShouldUseIncomingValue(Input, input)
+ ? input.Value
+ : Input.Value;
input.Value = value;
Input = input;
@@ -137,4 +122,11 @@ private static bool OptionsEqual(List> existing, List
{
Assert.NotNull(env);
- Assert.True(env.ContainsKey("DOTNET_CLI_USE_MSBUILD_SERVER"));
- Assert.Equal("true", env["DOTNET_CLI_USE_MSBUILD_SERVER"]);
+ Assert.False(env.ContainsKey("DOTNET_CLI_USE_MSBUILD_SERVER"));
},
0);
@@ -123,14 +122,13 @@ public async Task RestoreAsyncRunsDotnetRestoreCommand()
}
[Fact]
- public async Task BuildAsyncUsesConfigurationValueForDotnetCliUseMsBuildServer()
+ public async Task BuildAsyncDoesNotInjectConfiguredDotnetCliUseMsBuildServer()
{
using var workspace = TemporaryWorkspace.Create(outputHelper);
var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
var services = CliTestHelper.CreateServiceCollection(workspace, outputHelper);
- // Add a configuration value that overrides the default
services.AddSingleton(sp =>
{
var configBuilder = new ConfigurationBuilder();
@@ -151,8 +149,7 @@ public async Task BuildAsyncUsesConfigurationValueForDotnetCliUseMsBuildServer()
(args, env, _, _) =>
{
Assert.NotNull(env);
- Assert.True(env.ContainsKey("DOTNET_CLI_USE_MSBUILD_SERVER"));
- Assert.Equal("false", env["DOTNET_CLI_USE_MSBUILD_SERVER"]);
+ Assert.False(env.ContainsKey("DOTNET_CLI_USE_MSBUILD_SERVER"));
},
0);
@@ -220,7 +217,7 @@ public async Task BuildAsyncDoesNotIncludeNoRestoreFlagWhenNoRestoreIsFalse()
}
[Fact]
- public async Task RunAsyncInjectsDotnetCliUseMsBuildServerWhenNoBuildIsFalse()
+ public async Task RunAsyncDoesNotInjectDotnetCliUseMsBuildServerWhenNoBuildIsFalse()
{
using var workspace = TemporaryWorkspace.Create(outputHelper);
var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
@@ -238,15 +235,14 @@ public async Task RunAsyncInjectsDotnetCliUseMsBuildServerWhenNoBuildIsFalse()
(args, env, _, _) =>
{
Assert.NotNull(env);
- Assert.True(env.ContainsKey("DOTNET_CLI_USE_MSBUILD_SERVER"));
- Assert.Equal("true", env["DOTNET_CLI_USE_MSBUILD_SERVER"]);
+ Assert.False(env.ContainsKey("DOTNET_CLI_USE_MSBUILD_SERVER"));
},
0);
var exitCode = await runner.RunAsync(
projectFile: projectFile,
watch: false,
- noBuild: false, // This should inject the environment variable
+ noBuild: false,
noRestore: false,
args: ["--operation", "inspect"],
env: new Dictionary(),
@@ -317,8 +313,7 @@ public async Task RunAsyncPreservesExistingEnvironmentVariables()
(args, env, _, _) =>
{
Assert.NotNull(env);
- Assert.True(env.ContainsKey("DOTNET_CLI_USE_MSBUILD_SERVER"));
- Assert.Equal("true", env["DOTNET_CLI_USE_MSBUILD_SERVER"]);
+ Assert.False(env.ContainsKey("DOTNET_CLI_USE_MSBUILD_SERVER"));
// Verify existing environment variable is preserved
Assert.True(env.ContainsKey("EXISTING_VAR"));
Assert.Equal("existing_value", env["EXISTING_VAR"]);
diff --git a/tests/Aspire.Dashboard.Tests/Model/InputViewModelTests.cs b/tests/Aspire.Dashboard.Tests/Model/InputViewModelTests.cs
index d001afa8dd0..54022be2e1a 100644
--- a/tests/Aspire.Dashboard.Tests/Model/InputViewModelTests.cs
+++ b/tests/Aspire.Dashboard.Tests/Model/InputViewModelTests.cs
@@ -259,4 +259,54 @@ public void ChoiceVersion_NotIncrementedWhenOptionsUnchanged()
Assert.Equal(initialVersion, viewModel.ChoiceVersion);
}
+
+ [Fact]
+ public void SetInput_DisabledInputUsesIncomingValue()
+ {
+ var input = new InteractionInput
+ {
+ Label = "Location",
+ InputType = InputType.Choice,
+ Placeholder = "Select a location",
+ Disabled = true
+ };
+ var viewModel = new InputViewModel(input);
+
+ var updatedInput = new InteractionInput
+ {
+ Label = "Location",
+ InputType = InputType.Choice,
+ Placeholder = "Select a location",
+ Disabled = true,
+ Value = "westus"
+ };
+ updatedInput.Options.Add("westus", "West US");
+
+ viewModel.SetInput(updatedInput);
+
+ Assert.Equal("westus", viewModel.Value);
+ }
+
+ [Fact]
+ public void SetInput_EnabledInputPreservesLocalValue()
+ {
+ var input = new InteractionInput
+ {
+ Label = "Name",
+ InputType = InputType.Text,
+ Value = "local"
+ };
+ var viewModel = new InputViewModel(input);
+
+ var updatedInput = new InteractionInput
+ {
+ Label = "Name",
+ InputType = InputType.Text,
+ Value = "server"
+ };
+
+ viewModel.SetInput(updatedInput);
+
+ Assert.Equal("local", viewModel.Value);
+ }
}
diff --git a/tests/Shared/RepoTesting/Aspire.RepoTesting.targets b/tests/Shared/RepoTesting/Aspire.RepoTesting.targets
index f6f470526c6..678b1c058f6 100644
--- a/tests/Shared/RepoTesting/Aspire.RepoTesting.targets
+++ b/tests/Shared/RepoTesting/Aspire.RepoTesting.targets
@@ -33,7 +33,7 @@
`AspireProjectOrPackageReference` - maps to projects in `src/` or `src/Components/`
-->
-
+
@@ -165,6 +165,6 @@
$(MajorVersion).$(MinorVersion).$(PatchVersion)
-
+
diff --git a/tests/Shared/RepoTesting/Directory.Packages.Helix.props b/tests/Shared/RepoTesting/Directory.Packages.Helix.props
index 792db8dcdcd..b10dcf7cd59 100644
--- a/tests/Shared/RepoTesting/Directory.Packages.Helix.props
+++ b/tests/Shared/RepoTesting/Directory.Packages.Helix.props
@@ -3,81 +3,81 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+