Skip to content

Commit ebf2226

Browse files
yreynhoutJamesNK
andauthored
Support for .fsproj, .vbproj project files next to .csproj (#12087)
Co-authored-by: James Newton-King <[email protected]>
1 parent efc6d94 commit ebf2226

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

src/Aspire.Cli/Projects/ProjectLocator.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ internal interface IProjectLocator
2222

2323
internal sealed class ProjectLocator(ILogger<ProjectLocator> logger, IDotNetCliRunner runner, CliExecutionContext executionContext, IInteractionService interactionService, IConfigurationService configurationService, AspireCliTelemetry telemetry, IFeatures features) : IProjectLocator
2424
{
25+
private static readonly HashSet<string> s_supportedProjectFileExtensions = new HashSet<string>(StringComparer.OrdinalIgnoreCase) { ".csproj", ".fsproj", ".vbproj" };
26+
2527
public async Task<List<FileInfo>> FindAppHostProjectFilesAsync(string searchDirectory, CancellationToken cancellationToken)
2628
{
2729
var allCandidates = await FindAppHostProjectFilesAsync(new DirectoryInfo(searchDirectory), cancellationToken);
@@ -345,8 +347,8 @@ await Parallel.ForEachAsync(appHostFiles, parallelOptions, async (candidateFile,
345347
throw new ProjectLocatorException(ErrorStrings.ProjectFileDoesntExist);
346348
}
347349
}
348-
// Handle .csproj files
349-
else if (projectFile.Extension.Equals(".csproj", StringComparison.OrdinalIgnoreCase))
350+
// Handle .cs|fs|vbproj files
351+
else if (s_supportedProjectFileExtensions.Contains(projectFile.Extension))
350352
{
351353
logger.LogDebug("Using project file {ProjectFile}", projectFile.FullName);
352354
return projectFile;

tests/Aspire.Cli.Tests/Projects/ProjectLocatorTests.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -244,12 +244,15 @@ public async Task UseOrFindAppHostProjectFileThrowsIfNoProjectWasFound()
244244
Assert.Equal("No project file found.", ex.Message);
245245
}
246246

247-
[Fact]
248-
public async Task UseOrFindAppHostProjectFileReturnsExplicitProjectIfExistsAndProvided()
247+
[Theory]
248+
[InlineData(".csproj")]
249+
[InlineData(".fsproj")]
250+
[InlineData(".vbproj")]
251+
public async Task UseOrFindAppHostProjectFileReturnsExplicitProjectIfExistsAndProvided(string projectFileExtension)
249252
{
250253
var logger = NullLogger<ProjectLocator>.Instance;
251254
using var workspace = TemporaryWorkspace.Create(outputHelper);
252-
var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, "AppHost.csproj"));
255+
var projectFile = new FileInfo(Path.Combine(workspace.WorkspaceRoot.FullName, $"AppHost{projectFileExtension}"));
253256
await File.WriteAllTextAsync(projectFile.FullName, "Not a real project file.");
254257

255258
var runner = new TestDotNetCliRunner();
@@ -1170,3 +1173,4 @@ public async Task FindExecutableProjectsAsync_FindsMultipleExecutableProjects()
11701173
Assert.Contains(executableProjects, p => p.FullName == winExeFile.FullName);
11711174
}
11721175
}
1176+

0 commit comments

Comments
 (0)