2
2
// The .NET Foundation licenses this file to you under the MIT license.
3
3
4
4
using System . CommandLine ;
5
+ using Microsoft . Build . Construction ;
6
+ using Microsoft . Build . Execution ;
5
7
using Microsoft . DotNet . Cli ;
6
8
using Microsoft . DotNet . Cli . Sln . Internal ;
7
9
using Microsoft . DotNet . Cli . Utils ;
8
10
using Microsoft . DotNet . Tools . Common ;
11
+ using Microsoft . Extensions . EnvironmentAbstractions ;
9
12
using Microsoft . VisualStudio . SolutionPersistence ;
10
13
using Microsoft . VisualStudio . SolutionPersistence . Model ;
11
14
@@ -44,7 +47,7 @@ public override int Execute()
44
47
RemoveProjectsAsync ( solutionFileFullPath , fullProjectPaths , CancellationToken . None ) . Wait ( ) ;
45
48
return 0 ;
46
49
}
47
- catch ( Exception ex )
50
+ catch ( Exception ex ) when ( ex is not GracefulException )
48
51
{
49
52
throw new GracefulException ( ex . Message , ex ) ;
50
53
}
@@ -55,9 +58,14 @@ private async Task RemoveProjectsAsync(string solutionFileFullPath, IEnumerable<
55
58
ISolutionSerializer serializer = SlnCommandParser . GetSolutionSerializer ( solutionFileFullPath ) ;
56
59
SolutionModel solution = await serializer . OpenAsync ( solutionFileFullPath , cancellationToken ) ;
57
60
58
- foreach ( var project in projectPaths )
61
+ foreach ( var projectPath in projectPaths )
59
62
{
60
- SolutionProjectModel projectModel = solution . FindProject ( project ) ;
63
+ // Open project instance to see if it is a valid project
64
+ ProjectRootElement projectRootElement = ProjectRootElement . Open ( projectPath ) ;
65
+ ProjectInstance projectInstance = new ProjectInstance ( projectRootElement ) ;
66
+ string projectInstanceId = projectInstance . GetProjectId ( ) ;
67
+
68
+ SolutionProjectModel ? projectModel = ( SolutionProjectModel ? ) solution . FindItemById ( new Guid ( projectInstanceId ) ) ;
61
69
solution . RemoveProject ( projectModel ) ;
62
70
}
63
71
0 commit comments