diff --git a/src/Cli/dotnet/Commands/Workload/Restore/WorkloadRestoreCommand.cs b/src/Cli/dotnet/Commands/Workload/Restore/WorkloadRestoreCommand.cs index 969d6a8e0938..f8318ae44713 100644 --- a/src/Cli/dotnet/Commands/Workload/Restore/WorkloadRestoreCommand.cs +++ b/src/Cli/dotnet/Commands/Workload/Restore/WorkloadRestoreCommand.cs @@ -118,13 +118,16 @@ internal static List DiscoverAllProjects(string currentDirectory, var projectFiles = new List(); if (slnOrProjectArgument == null || !slnOrProjectArgument.Any()) { - slnFiles = [.. SlnFileFactory.ListSolutionFilesInDirectory(currentDirectory, false)]; + slnFiles = [.. SlnFileFactory.ListSolutionFilesInDirectory(currentDirectory, includeSolutionFilterFiles: true)]; projectFiles.AddRange(Directory.GetFiles(currentDirectory, "*.*proj")); } else { slnFiles = [.. slnOrProjectArgument - .Where(s => Path.GetExtension(s).Equals(".sln", StringComparison.OrdinalIgnoreCase) || Path.GetExtension(s).Equals(".slnx", StringComparison.OrdinalIgnoreCase)) + .Where(s => + Path.GetExtension(s).Equals(".sln", StringComparison.OrdinalIgnoreCase) || + Path.GetExtension(s).Equals(".slnx", StringComparison.OrdinalIgnoreCase) || + Path.GetExtension(s).Equals(".slnf", StringComparison.OrdinalIgnoreCase)) .Select(Path.GetFullPath)]; projectFiles = [.. slnOrProjectArgument .Where(s => Path.GetExtension(s).EndsWith("proj", StringComparison.OrdinalIgnoreCase)) diff --git a/test/dotnet.Tests/CommandTests/Workload/Restore/GivenDotnetWorkloadRestore.cs b/test/dotnet.Tests/CommandTests/Workload/Restore/GivenDotnetWorkloadRestore.cs index a9f7bf394278..d729c6c4914b 100644 --- a/test/dotnet.Tests/CommandTests/Workload/Restore/GivenDotnetWorkloadRestore.cs +++ b/test/dotnet.Tests/CommandTests/Workload/Restore/GivenDotnetWorkloadRestore.cs @@ -12,6 +12,7 @@ public GivenDotnetWorkloadRestore() public static string DcProjAssetName = "SolutionWithAppAndDcProj"; public static string TransitiveReferenceNoWorkloadsAssetName = "ProjectWithEsProjReference"; + public static string SlnfAssetName = "TestAppWithSlnfFiles"; [TestMethod] public void ProjectsThatDoNotSupportWorkloadsAreNotInspected() @@ -84,6 +85,28 @@ public void VersionOptionShouldNotConflictWithSkipManifestUpdate() result.StdErr.Should().NotContain("--skip-manifest-update"); } + [TestMethod] + public void WorkloadRestoreSupportsSolutionFilterInput() + { + if (IsRunningInContainer()) + { + // Skipping test in a Helix container environment due to read-only DOTNET_ROOT, which causes workload restore to fail when writing workload metadata. + return; + } + + var projectPath = + TestAssetsManager + .CopyTestAsset(SlnfAssetName) + .WithSource() + .Path; + + new DotnetWorkloadCommand(Log, "restore", "App.slnf") + .WithWorkingDirectory(projectPath) + .Execute() + .Should() + .Pass(); + } + private bool IsRunningInContainer() { if (!File.Exists("/.dockerenv"))