diff --git a/src/Microsoft.Tye.Core/ProjectReader.cs b/src/Microsoft.Tye.Core/ProjectReader.cs index af5076c5..e2203c4d 100644 --- a/src/Microsoft.Tye.Core/ProjectReader.cs +++ b/src/Microsoft.Tye.Core/ProjectReader.cs @@ -73,6 +73,11 @@ namespace Microsoft.Tye throw new ArgumentNullException(nameof(project)); } + if (!Directory.Exists(project.ProjectFile.DirectoryName)) + { + throw new CommandException($"Failed to locate directory: '{project.ProjectFile.DirectoryName}'."); + } + EnsureMSBuildRegistered(output, project.ProjectFile); EvaluateProject(output, project); diff --git a/test/E2ETest/ApplicationFactoryTests.cs b/test/E2ETest/ApplicationFactoryTests.cs index 88ab1b7d..b32f7261 100644 --- a/test/E2ETest/ApplicationFactoryTests.cs +++ b/test/E2ETest/ApplicationFactoryTests.cs @@ -107,5 +107,19 @@ services: Assert.Equal("redis2", ((ContainerServiceBuilder)redisService).Image); } + + [Fact] + public async Task WrongProjectPathProducesCorrectErrorMessage() + { + using var projectDirectory = TestHelpers.CopyTestProjectDirectory("frontend-backend"); + var projectFile = new FileInfo(Path.Combine(projectDirectory.DirectoryPath, "tye-wrong-projectpath.yaml")); + var outputContext = new OutputContext(_sink, Verbosity.Debug); + + var exception = await Assert.ThrowsAsync(async () => + await ApplicationFactory.CreateAsync(outputContext, projectFile)); + + var wrongProjectPath = Path.Combine(projectDirectory.DirectoryPath, "backend1"); + Assert.Equal($"Failed to locate directory: '{wrongProjectPath}'.", exception.Message); + } } } diff --git a/test/E2ETest/testassets/projects/frontend-backend/tye-wrong-projectpath.yaml b/test/E2ETest/testassets/projects/frontend-backend/tye-wrong-projectpath.yaml new file mode 100644 index 00000000..0ff65ceb --- /dev/null +++ b/test/E2ETest/testassets/projects/frontend-backend/tye-wrong-projectpath.yaml @@ -0,0 +1,8 @@ +# tye application configuration file +# read all about it at https://github.com/dotnet/tye +name: frontend-backend +services: +- name: backend + project: backend1/backend.csproj +- name: frontend + project: frontend/frontend.csproj