@ -135,24 +135,25 @@ namespace Volo.Abp.Cli.ProjectModification
private ModuleWithMastersInfo RemoveIncompatiblePackages ( ModuleWithMastersInfo module , string version )
{
module . NugetPackages . RemoveAll ( np = > IsPackageInCompatible ( np , version ) ) ;
module . NugetPackages . RemoveAll ( np = > IsPackageInCompatible ( np . MinVersion , np . MaxVersion , version ) ) ;
module . NpmPackages . RemoveAll ( np = > IsPackageInCompatible ( np . MinVersion , np . MaxVersion , version ) ) ;
return module ;
}
private bool IsPackageInCompatible ( NugetPackageInfo package , string version )
private bool IsPackageInCompatible ( string minVersion , string maxVersion , string version )
{
try
{
if ( ! string . IsNullOrWhiteSpace ( package . M inVersion) )
if ( ! string . IsNullOrWhiteSpace ( m inVersion) )
{
if ( SemanticVersion . Parse ( package . M inVersion) > SemanticVersion . Parse ( version ) )
if ( SemanticVersion . Parse ( m inVersion) > SemanticVersion . Parse ( version ) )
{
return true ;
}
}
if ( ! string . IsNullOrWhiteSpace ( package . M axVersion) )
if ( ! string . IsNullOrWhiteSpace ( m axVersion) )
{
if ( SemanticVersion . Parse ( package . M axVersion) < SemanticVersion . Parse ( version ) )
if ( SemanticVersion . Parse ( m axVersion) < SemanticVersion . Parse ( version ) )
{
return true ;
}
@ -186,6 +187,7 @@ namespace Volo.Abp.Cli.ProjectModification
private async Task RemoveUnnecessaryProjectsAsync ( string solutionDirectory , ModuleWithMastersInfo module ,
string [ ] projectFiles )
{
var projectsToRemove = new List < string > ( ) ;
var moduleDirectory = Path . Combine ( solutionDirectory , "modules" , module . Name ) ;
var moduleSolutionFile = Directory . GetFiles ( moduleDirectory , "*.sln" , SearchOption . TopDirectoryOnly ) . First ( ) ;
var isProjectTiered = await IsProjectTiered ( projectFiles ) ;
@ -194,10 +196,10 @@ namespace Volo.Abp.Cli.ProjectModification
var blazorProject = projectFiles . FirstOrDefault ( p = > p . EndsWith ( ".Blazor.csproj" ) ) ;
if ( blazorProject = = null )
{
await RemoveProjectByTarget ( module , moduleSolutionFi le, NuGetPackageTarget . Blazor , isProjectTiered ) ;
await RemoveProjectByTarget ( module , moduleSolutionFi le, NuGetPackageTarget . BlazorServer , isProjectTiered ) ;
await RemoveProjectByTarget ( module , moduleSolutionFi le, NuGetPackageTarget . BlazorWebAssembly , isProjectTiered ) ;
await RemoveProjectByPostFix ( module , moduleSolutionFile , "src" , ".Blazor" ) ;
projectsToRemove . AddRange ( await FindProjectsToRemoveByTarget ( modu le, NuGetPackageTarget . Blazor , isProjectTiered ) ) ;
projectsToRemove . AddRange ( await FindProjectsToRemoveByTarget ( modu le, NuGetPackageTarget . BlazorServer , isProjectTiered ) ) ;
projectsToRemove . AddRange ( await FindProjectsToRemoveByTarget ( modu le, NuGetPackageTarget . BlazorWebAssembly , isProjectTiered ) ) ;
projectsToRemove . AddRange ( await FindProjectsToRemoveByPostFix ( moduleDirectory , "src" , ".Blazor" ) ) ;
}
else
{
@ -205,39 +207,58 @@ namespace Volo.Abp.Cli.ProjectModification
if ( isBlazorServer )
{
await RemoveProjectByTarget ( module , moduleSolutionFi le, NuGetPackageTarget . BlazorWebAssembly , isProjectTiered ) ;
projectsToRemove . AddRange ( await FindProjectsToRemoveByTarget ( modu le, NuGetPackageTarget . BlazorWebAssembly , isProjectTiered ) ) ;
webPackagesWillBeAddedToBlazorServerProject = module . NugetPackages . All ( np = > np . Target ! = NuGetPackageTarget . BlazorServer & & np . TieredTarget ! = NuGetPackageTarget . BlazorServer ) ;
}
else
{
await RemoveProjectByTarget ( module , moduleSolutionFi le, NuGetPackageTarget . BlazorServer , isProjectTiered ) ;
projectsToRemove . AddRange ( await FindProjectsToRemoveByTarget ( modu le, NuGetPackageTarget . BlazorServer , isProjectTiered ) ) ;
}
}
if ( ! projectFiles . Any ( p = > p . EndsWith ( ".Web.csproj" ) ) & & ! webPackagesWillBeAddedToBlazorServerProject )
{
await RemoveProjectByTarget ( module , moduleSolutionFi le, NuGetPackageTarget . Web , isProjectTiered ) ;
projectsToRemove . AddRange ( await FindProjectsToRemoveByTarget ( modu le, NuGetPackageTarget . Web , isProjectTiered ) ) ;
}
if ( ! projectFiles . Any ( p = > p . EndsWith ( ".MongoDB.csproj" ) ) )
{
await RemoveProjectByTarget ( module , moduleSolutionFi le, NuGetPackageTarget . MongoDB , isProjectTiered ) ;
await RemoveProjectByPostFix ( module , moduleSolutionFile , "test" , ".MongoDB.Tests" ) ;
projectsToRemove . AddRange ( await FindProjectsToRemoveByTarget ( modu le, NuGetPackageTarget . MongoDB , isProjectTiered ) ) ;
projectsToRemove . AddRange ( await FindProjectsToRemoveByPostFix ( moduleDirectory , "test" , ".MongoDB.Tests" ) ) ;
}
if ( ! projectFiles . Any ( p = > p . EndsWith ( ".EntityFrameworkCore.csproj" ) ) )
{
await RemoveProjectByTarget ( module , moduleSolutionFi le, NuGetPackageTarget . EntityFrameworkCore , isProjectTiered ) ;
await RemoveProjectByPostFix ( module , moduleSolutionFile , "test" , ".EntityFrameworkCore.Tests" ) ;
await RemoveProjectByPostFix ( module , moduleSolutionFile , "test" , ".Application.Tests" ) ;
projectsToRemove . AddRange ( await FindProjectsToRemoveByTarget ( modu le, NuGetPackageTarget . EntityFrameworkCore , isProjectTiered ) ) ;
projectsToRemove . AddRange ( await FindProjectsToRemoveByPostFix ( moduleDirectory , "test" , ".EntityFrameworkCore.Tests" ) ) ;
projectsToRemove . AddRange ( await FindProjectsToRemoveByPostFix ( moduleDirectory , "test" , ".Application.Tests" ) ) ;
ChangeDomainTestReferenceToMongoDB ( module , moduleSolutionFile ) ;
}
foreach ( var projectToRemove in projectsToRemove )
{
if ( IsReferencedByAnotherModuleProject ( moduleDirectory , projectsToRemove , projectToRemove ) )
{
continue ;
}
RemoveProjectFromSolutionAsync ( moduleSolutionFile , projectToRemove ) ;
}
}
private async Task RemoveProjectByTarget ( ModuleWithMastersInfo module , string moduleSolutionFile ,
private bool IsReferencedByAnotherModuleProject ( string moduleDirectory , List < string > projectsToRemove , string projectToRemove )
{
var moduleProjects = Directory . GetFiles ( moduleDirectory , "*.csproj" , SearchOption . AllDirectories ) ;
var projectsToKeep = moduleProjects . Where ( mp = > ! projectsToRemove . Contains ( Path . GetFileName ( mp ) . RemovePostFix ( ".csproj" ) ) ) . ToList ( ) ;
return projectsToKeep . Select ( File . ReadAllText ) . Any ( content = > content . Contains ( $"\" { projectToRemove } \ "" ) ) ;
}
private async Task < List < string > > FindProjectsToRemoveByTarget ( ModuleWithMastersInfo module ,
NuGetPackageTarget target , bool isTieredProject )
{
var projectsToRemove = new List < string > ( ) ;
var packages = module . NugetPackages . Where ( n = >
( isTieredProject & & n . TieredTarget ! = NuGetPackageTarget . Undefined
? n . TieredTarget
@ -251,37 +272,42 @@ namespace Volo.Abp.Cli.ProjectModification
continue ;
}
await SolutionFileModifier . RemoveProjectFromSolutionFileAsync ( moduleSolutionFile , package . Name ) ;
var projectPath = Path . Combine ( Path . GetDirectoryName ( moduleSolutionFile ) , "src" , package . Name ) ;
if ( Directory . Exists ( projectPath ) )
{
Directory . Delete ( projectPath , true ) ;
}
projectsToRemove . Add ( package . Name ) ;
}
return projectsToRemove ;
}
private async Task RemoveProjectByPostFix ( ModuleWithMastersInfo module , string moduleSolutionFile , string targetFolder ,
private async Task < List < string > > FindProjectsToRemoveByPostFix ( string moduleDirectory , string targetFolder ,
string postFix )
{
var srcPath = Path . Combine ( Path . GetDirectoryName ( moduleSolutionFile ) , targetFolder ) ;
var projectsToRemove = new List < string > ( ) ;
var srcPath = Path . Combine ( moduleDirectory , targetFolder ) ;
if ( ! Directory . Exists ( srcPath ) )
{
return ;
return projectsToRemove ;
}
var projectFolderPaths = Directory . GetDirectories ( srcPath ) . Where ( d = > d . EndsWith ( postFix ) ) . ToList ( ) ;
foreach ( var projectFolderPath in projectFolderPaths )
{
await SolutionFileModifier . RemoveProjectFromSolutionFileAsync ( moduleSolutionFile , new DirectoryInfo ( projectFolderPath ) . Name ) ;
projectsToRemove . Add ( new DirectoryInfo ( projectFolderPath ) . Name ) ;
}
return projectsToRemove ;
}
private async Task RemoveProjectFromSolutionAsync ( string moduleSolutionFile , string projectName )
{
await SolutionFileModifier . RemoveProjectFromSolutionFileAsync ( moduleSolutionFile , projectName ) ;
var projectFolderPath = Path . Combine ( Path . GetDirectoryName ( moduleSolutionFile ) , "src" , projectName ) ;
if ( Directory . Exists ( projectFolderPath ) )
{
Directory . Delete ( projectFolderPath , true ) ;
}
}
}
private void ChangeDomainTestReferenceToMongoDB ( ModuleWithMastersInfo module , string moduleSolutionFile )