diff --git a/src/Aspire.Cli/Projects/ProjectLocator.cs b/src/Aspire.Cli/Projects/ProjectLocator.cs index 3f202ed818d..903a6aa446f 100644 --- a/src/Aspire.Cli/Projects/ProjectLocator.cs +++ b/src/Aspire.Cli/Projects/ProjectLocator.cs @@ -325,6 +325,7 @@ await Parallel.ForEachAsync(appHostFiles, parallelOptions, async (candidateFile, throw new ProjectLocatorException(ErrorStrings.ProjectFileDoesntExist); } + var supportedProjectFileExtensions = new HashSet(StringComparer.OrdinalIgnoreCase) { ".csproj", ".fsproj", ".vbproj" }; // Handle explicit apphost.cs files if (projectFile.Name.Equals("apphost.cs", StringComparison.OrdinalIgnoreCase)) { @@ -345,8 +346,8 @@ await Parallel.ForEachAsync(appHostFiles, parallelOptions, async (candidateFile, throw new ProjectLocatorException(ErrorStrings.ProjectFileDoesntExist); } } - // Handle .csproj files - else if (projectFile.Extension.Equals(".csproj", StringComparison.OrdinalIgnoreCase)) + // Handle .cs|fs|vbproj files + else if (supportedProjectFileExtensions.Contains(projectFile.Extension)) { logger.LogDebug("Using project file {ProjectFile}", projectFile.FullName); return projectFile; diff --git a/tests/Aspire.Cli.Tests/Projects/ProjectLocatorTests.cs b/tests/Aspire.Cli.Tests/Projects/ProjectLocatorTests.cs index 99b120a63a6..d66feaf3255 100644 --- a/tests/Aspire.Cli.Tests/Projects/ProjectLocatorTests.cs +++ b/tests/Aspire.Cli.Tests/Projects/ProjectLocatorTests.cs @@ -244,12 +244,15 @@ public async Task UseOrFindAppHostProjectFileThrowsIfNoProjectWasFound() Assert.Equal("No project file found.", ex.Message); } - [Fact] - public async Task UseOrFindAppHostProjectFileReturnsExplicitProjectIfExistsAndProvided() + [Theory] + [InlineData(".csproj")] + [InlineData(".fsproj")] + [InlineData(".vbproj")] + public async Task UseOrFindAppHostProjectFileReturnsExplicitProjectIfExistsAndProvided(string projectFileExtension) { var logger = NullLogger.Instance; using var workspace = TemporaryWorkspace.Create(outputHelper); - var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj")); + var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, $"AppHost{projectFileExtension}")); await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file."); var runner = new TestDotNetCliRunner(); @@ -1170,3 +1173,4 @@ public async Task FindExecutableProjectsAsync_FindsMultipleExecutableProjects() Assert.Contains(executableProjects, p => p.FullName == winExeFile.FullName); } } +