Merge pull request #6530 from mikkelbu/gracefully-report-invalid-projects
Gracefully report invalid project when added via sln-add
This commit is contained in:
commit
760bdf8f75
3 changed files with 44 additions and 1 deletions
|
@ -101,6 +101,7 @@ namespace Microsoft.DotNet.Tools
|
||||||
public const string MoreThanOneProjectInDirectory = "Found more than one project in `{0}`. Please specify which one to use.";
|
public const string MoreThanOneProjectInDirectory = "Found more than one project in `{0}`. Please specify which one to use.";
|
||||||
public const string FoundInvalidProject = "Found a project `{0}` but it is invalid.";
|
public const string FoundInvalidProject = "Found a project `{0}` but it is invalid.";
|
||||||
public const string InvalidProject = "Invalid project `{0}`.";
|
public const string InvalidProject = "Invalid project `{0}`.";
|
||||||
|
public const string InvalidProjectWithExceptionMessage = "Invalid project `{0}`. {1}";
|
||||||
|
|
||||||
/// Solution
|
/// Solution
|
||||||
public const string CouldNotFindSolutionIn = "Specified solution file {0} does not exist, or there is no solution file in the directory.";
|
public const string CouldNotFindSolutionIn = "Specified solution file {0} does not exist, or there is no solution file in the directory.";
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
using Microsoft.Build.Construction;
|
using Microsoft.Build.Construction;
|
||||||
using Microsoft.Build.Evaluation;
|
using Microsoft.Build.Evaluation;
|
||||||
|
using Microsoft.Build.Exceptions;
|
||||||
using Microsoft.Build.Execution;
|
using Microsoft.Build.Execution;
|
||||||
using Microsoft.DotNet.Cli.Sln.Internal;
|
using Microsoft.DotNet.Cli.Sln.Internal;
|
||||||
using Microsoft.DotNet.Cli.Utils;
|
using Microsoft.DotNet.Cli.Utils;
|
||||||
|
@ -36,7 +37,19 @@ namespace Microsoft.DotNet.Tools.Common
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var projectInstance = new ProjectInstance(fullProjectPath);
|
ProjectInstance projectInstance = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
projectInstance = new ProjectInstance(fullProjectPath);
|
||||||
|
}
|
||||||
|
catch (InvalidProjectFileException e)
|
||||||
|
{
|
||||||
|
Reporter.Error.WriteLine(string.Format(
|
||||||
|
CommonLocalizableStrings.InvalidProjectWithExceptionMessage,
|
||||||
|
fullProjectPath,
|
||||||
|
e.Message));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var slnProject = new SlnProject
|
var slnProject = new SlnProject
|
||||||
{
|
{
|
||||||
|
|
|
@ -480,6 +480,35 @@ EndGlobal
|
||||||
cmd.StdErr.Should().BeEmpty();
|
cmd.StdErr.Should().BeEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[InlineData("TestAppWithSlnAndCsprojFiles")]
|
||||||
|
[InlineData("TestAppWithSlnAndCsprojProjectGuidFiles")]
|
||||||
|
[InlineData("TestAppWithEmptySln")]
|
||||||
|
public void WhenInvalidProjectIsPassedItDoesNotGetAdded(string testAsset)
|
||||||
|
{
|
||||||
|
var projectDirectory = TestAssets
|
||||||
|
.Get(testAsset)
|
||||||
|
.CreateInstance()
|
||||||
|
.WithSourceFiles()
|
||||||
|
.Root
|
||||||
|
.FullName;
|
||||||
|
|
||||||
|
var projectToAdd = "Lib/Library.cs";
|
||||||
|
var projectPath = Path.Combine("Lib", "Library.cs");
|
||||||
|
var slnFile = SlnFile.Read(Path.Combine(projectDirectory, "App.sln"));
|
||||||
|
var expectedNumberOfProjects = slnFile.Projects.Count();
|
||||||
|
|
||||||
|
var cmd = new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.ExecuteWithCapturedOutput($"sln App.sln add {projectToAdd}");
|
||||||
|
cmd.Should().Pass();
|
||||||
|
cmd.StdOut.Should().BeEmpty();
|
||||||
|
cmd.StdErr.Should().Match("Invalid project `*`. The project file could not be loaded.*");
|
||||||
|
|
||||||
|
slnFile = SlnFile.Read(Path.Combine(projectDirectory, "App.sln"));
|
||||||
|
slnFile.Projects.Count().Should().Be(expectedNumberOfProjects);
|
||||||
|
}
|
||||||
|
|
||||||
[Theory]
|
[Theory]
|
||||||
[InlineData("TestAppWithSlnAndCsprojFiles")]
|
[InlineData("TestAppWithSlnAndCsprojFiles")]
|
||||||
[InlineData("TestAppWithSlnAndCsprojProjectGuidFiles")]
|
[InlineData("TestAppWithSlnAndCsprojProjectGuidFiles")]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue