From 287a9696449ebcb70874e7e7db99b8b6547915d1 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 13 Apr 2021 14:36:26 +0300 Subject: [PATCH] Cli add-module: Use MVC package for blazor-server application when module doesn't have a blazor package resolves https://github.com/abpframework/abp/issues/8573 --- .../Cli/ProjectModification/ProjectFinder.cs | 6 +++++ .../SolutionModuleAdder.cs | 25 ++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectFinder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectFinder.cs index 7cc04238924..57adc5dd9b7 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectFinder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectFinder.cs @@ -94,6 +94,12 @@ public static string[] FindNpmTargetProjectFile(string[] projectFiles) projects.Add(project); } + project = FindProjectEndsWith(projectFiles, assemblyNames, ".Blazor"); + if (project != null && BlazorProjectTypeChecker.IsBlazorServerProject(project)) + { + projects.Add(project); + } + return projects.ToArray(); } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs index 4e66954dccf..3b5e695203e 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs @@ -189,6 +189,7 @@ private async Task RemoveUnnecessaryProjectsAsync(string solutionDirectory, Modu var moduleDirectory = Path.Combine(solutionDirectory, "modules", module.Name); var moduleSolutionFile = Directory.GetFiles(moduleDirectory, "*.sln", SearchOption.TopDirectoryOnly).First(); var isProjectTiered = await IsProjectTiered(projectFiles); + var webPackagesWillBeAddedToBlazorServerProject = false; var blazorProject = projectFiles.FirstOrDefault(p => p.EndsWith(".Blazor.csproj")); if (blazorProject == null) @@ -205,6 +206,8 @@ private async Task RemoveUnnecessaryProjectsAsync(string solutionDirectory, Modu if (isBlazorServer) { await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.BlazorWebAssembly, isProjectTiered); + + webPackagesWillBeAddedToBlazorServerProject = module.NugetPackages.All(np=> np.Target != NuGetPackageTarget.BlazorServer && np.TieredTarget != NuGetPackageTarget.BlazorServer); } else { @@ -212,7 +215,7 @@ private async Task RemoveUnnecessaryProjectsAsync(string solutionDirectory, Modu } } - if (!projectFiles.Any(p => p.EndsWith(".Web.csproj"))) + if (!projectFiles.Any(p => p.EndsWith(".Web.csproj")) && !webPackagesWillBeAddedToBlazorServerProject) { await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.Web, isProjectTiered); } @@ -459,6 +462,8 @@ await SolutionFileModifier.RemoveProjectFromSolutionFileAsync(moduleSolutionFile private async Task AddNugetAndNpmReferences(ModuleWithMastersInfo module, string[] projectFiles, bool useDotnetCliToInstall) { + var webPackagesWillBeAddedToBlazorServerProject = SouldWebPackagesBeAddedToBlazorServerProject(module, projectFiles); + foreach (var nugetPackage in module.NugetPackages) { var nugetTarget = @@ -466,6 +471,11 @@ await IsProjectTiered(projectFiles) && nugetPackage.TieredTarget != NuGetPackage ? nugetPackage.TieredTarget : nugetPackage.Target; + if (webPackagesWillBeAddedToBlazorServerProject && nugetTarget == NuGetPackageTarget.Web) + { + nugetTarget = NuGetPackageTarget.BlazorServer; + } + var targetProjectFile = ProjectFinder.FindNuGetTargetProjectFile(projectFiles, nugetTarget); if (targetProjectFile == null) { @@ -501,6 +511,19 @@ await IsProjectTiered(projectFiles) && nugetPackage.TieredTarget != NuGetPackage } } + private static bool SouldWebPackagesBeAddedToBlazorServerProject(ModuleWithMastersInfo module, string[] projectFiles) + { + var blazorProject = projectFiles.FirstOrDefault(p => p.EndsWith(".Blazor.csproj")); + + if (blazorProject == null) + { + return false; + } + + var isBlazorServerProject = BlazorProjectTypeChecker.IsBlazorServerProject(blazorProject); + return isBlazorServerProject && module.NugetPackages.All(np => np.Target != NuGetPackageTarget.BlazorServer && np.TieredTarget != NuGetPackageTarget.BlazorServer); + } + protected void ModifyDbContext(string[] projectFiles, ModuleInfo module, bool skipDbMigrations = false) { if (string.IsNullOrWhiteSpace(module.EfCoreConfigureMethodName))