From e1fc8bd25e5b579616ddb8ac386e7b477999e6bd Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 13 Apr 2021 13:47:24 +0300 Subject: [PATCH 1/5] Cli add-module: Detect package version when adding Npm packages for MVC applications resolves https://github.com/abpframework/abp/issues/8572 --- .../ProjectNpmPackageAdder.cs | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs index a0ee3b463a..f495ee6d50 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using System.Xml; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; +using Newtonsoft.Json.Linq; using Volo.Abp.Cli.Args; using Volo.Abp.Cli.Commands; using Volo.Abp.Cli.Commands.Services; @@ -113,6 +114,12 @@ namespace Volo.Abp.Cli.ProjectModification Logger.LogInformation($"Installing '{npmPackage.Name}' package to the project '{packageJsonFilePath}'..."); + if (version == null) + { + TryDetectAbpVersion(Path.Combine(directory, "package.json"), ref version); + } + Console.WriteLine(version); + var versionPostfix = version != null ? $"@{version}" : string.Empty; using (DirectoryHelper.ChangeCurrentDirectory(directory)) @@ -132,6 +139,30 @@ namespace Volo.Abp.Cli.ProjectModification return Task.CompletedTask; } + private void TryDetectAbpVersion(string packageJsonFile, ref string version) + { + var packageJsonFileContent = File.ReadAllText(packageJsonFile); + + var packageJsonObject = JObject.Parse(packageJsonFileContent); + var dependenciesObject = (JObject) packageJsonObject["dependencies"]; + + if (dependenciesObject == null) + { + return; + } + + var packages = dependenciesObject.Children(); + + foreach (var package in packages) + { + if (package.Name.StartsWith("@abp/") || package.Name.StartsWith("@volo/")) + { + version = package.Value.ToString(); + return; + } + } + } + private async Task FindNpmPackageInfoAsync(string packageName) { From 9f367104c575185c5f80c6dc73dff9a1da1f1726 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 13 Apr 2021 13:48:36 +0300 Subject: [PATCH 2/5] Update ProjectNpmPackageAdder.cs --- .../Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs index f495ee6d50..0d42df0381 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs @@ -118,7 +118,6 @@ namespace Volo.Abp.Cli.ProjectModification { TryDetectAbpVersion(Path.Combine(directory, "package.json"), ref version); } - Console.WriteLine(version); var versionPostfix = version != null ? $"@{version}" : string.Empty; From 287a9696449ebcb70874e7e7db99b8b6547915d1 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 13 Apr 2021 14:36:26 +0300 Subject: [PATCH 3/5] 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 7cc0423892..57adc5dd9b 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 @@ namespace Volo.Abp.Cli.ProjectModification 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 4e66954dcc..3b5e695203 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 @@ namespace Volo.Abp.Cli.ProjectModification 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 @@ namespace Volo.Abp.Cli.ProjectModification 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 @@ namespace Volo.Abp.Cli.ProjectModification } } - 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 @@ namespace Volo.Abp.Cli.ProjectModification 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 @@ namespace Volo.Abp.Cli.ProjectModification ? 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 @@ namespace Volo.Abp.Cli.ProjectModification } } + 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)) From c58c62d85f2077c7e8364abe7c2a5ff0c5ee997c Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Wed, 14 Apr 2021 03:01:13 +0300 Subject: [PATCH 4/5] refactor DetectAbpVersion #8572 --- .../ProjectNpmPackageAdder.cs | 61 ++++++++++++------- 1 file changed, 39 insertions(+), 22 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs index 0d42df0381..3c283319ac 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs @@ -43,7 +43,8 @@ namespace Volo.Abp.Cli.ProjectModification Logger = NullLogger.Instance; } - public async Task AddAngularPackageAsync(string directory, string npmPackageName, string version = null, bool withSourceCode = false) + public async Task AddAngularPackageAsync(string directory, string npmPackageName, string version = null, + bool withSourceCode = false) { await AddAngularPackageAsync( directory, @@ -53,7 +54,8 @@ namespace Volo.Abp.Cli.ProjectModification ); } - public async Task AddAngularPackageAsync(string directory, NpmPackageInfo npmPackage, string version = null, bool withSourceCode = false) + public async Task AddAngularPackageAsync(string directory, NpmPackageInfo npmPackage, string version = null, + bool withSourceCode = false) { var packageJsonFilePath = Path.Combine(directory, "package.json"); if (!File.Exists(packageJsonFilePath)) @@ -86,9 +88,11 @@ namespace Volo.Abp.Cli.ProjectModification } } - protected virtual async Task DownloadAngularSourceCode(string angularDirectory, NpmPackageInfo package, string version = null) + protected virtual async Task DownloadAngularSourceCode(string angularDirectory, NpmPackageInfo package, + string version = null) { - var targetFolder = Path.Combine(angularDirectory, "projects", package.Name.RemovePreFix("@").Replace("/","-")); + var targetFolder = Path.Combine(angularDirectory, "projects", + package.Name.RemovePreFix("@").Replace("/", "-")); if (Directory.Exists(targetFolder)) { @@ -102,7 +106,8 @@ namespace Volo.Abp.Cli.ProjectModification ); } - public Task AddMvcPackageAsync(string directory, NpmPackageInfo npmPackage, string version = null, bool skipGulpCommand = false) + public Task AddMvcPackageAsync(string directory, NpmPackageInfo npmPackage, string version = null, + bool skipGulpCommand = false) { var packageJsonFilePath = Path.Combine(directory, "package.json"); if (!File.Exists(packageJsonFilePath) || @@ -116,7 +121,7 @@ namespace Volo.Abp.Cli.ProjectModification if (version == null) { - TryDetectAbpVersion(Path.Combine(directory, "package.json"), ref version); + version = DetectAbpVersionOrNull(Path.Combine(directory, "package.json")); } var versionPostfix = version != null ? $"@{version}" : string.Empty; @@ -138,33 +143,45 @@ namespace Volo.Abp.Cli.ProjectModification return Task.CompletedTask; } - private void TryDetectAbpVersion(string packageJsonFile, ref string version) + private string DetectAbpVersionOrNull(string packageJsonFile) { - var packageJsonFileContent = File.ReadAllText(packageJsonFile); - - var packageJsonObject = JObject.Parse(packageJsonFileContent); - var dependenciesObject = (JObject) packageJsonObject["dependencies"]; - - if (dependenciesObject == null) + if (string.IsNullOrEmpty(packageJsonFile) || + !File.Exists(packageJsonFile)) { - return; + return null; } - var packages = dependenciesObject.Children(); - - foreach (var package in packages) + try { - if (package.Name.StartsWith("@abp/") || package.Name.StartsWith("@volo/")) + var packageJsonFileContent = File.ReadAllText(packageJsonFile); + var packageJsonObject = JObject.Parse(packageJsonFileContent); + var dependenciesObject = (JObject) packageJsonObject["dependencies"]; + + if (dependenciesObject == null) { - version = package.Value.ToString(); - return; + return null; + } + + var packages = dependenciesObject.Children(); + + foreach (var package in packages) + { + if (package.Name.StartsWith("@abp/") || package.Name.StartsWith("@volo/")) + { + return package.Value.ToString(); + } } } + catch (Exception ex) + { + Logger.LogWarning("Cannot detect ABP package version. " + ex.Message); + } + + return null; } private async Task FindNpmPackageInfoAsync(string packageName) { - var url = $"{CliUrls.WwwAbpIo}api/app/npmPackage/byName/?name=" + packageName; var client = _cliHttpClientFactory.CreateClient(); @@ -185,4 +202,4 @@ namespace Volo.Abp.Cli.ProjectModification } } } -} +} \ No newline at end of file From a36fe74269866cc6f94cddda37fdccb402b44839 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Wed, 14 Apr 2021 03:20:34 +0300 Subject: [PATCH 5/5] refactor BlazorProjectTypeChecker #8573 --- .../Cli/ProjectModification/ProjectFinder.cs | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) 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 57adc5dd9b..6c41fa3330 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 @@ -51,10 +51,16 @@ namespace Volo.Abp.Cli.ProjectModification return FindProjectEndsWith(projectFiles, assemblyNames, ".Blazor"); case NuGetPackageTarget.BlazorWebAssembly: var BlazorWebAssemblyTargetProject = FindProjectEndsWith(projectFiles, assemblyNames, ".Blazor"); - return BlazorWebAssemblyTargetProject != null && !BlazorProjectTypeChecker.IsBlazorServerProject(BlazorWebAssemblyTargetProject) ? BlazorWebAssemblyTargetProject : null; + return BlazorWebAssemblyTargetProject != null && + !BlazorProjectTypeChecker.IsBlazorServerProject(BlazorWebAssemblyTargetProject) + ? BlazorWebAssemblyTargetProject + : null; case NuGetPackageTarget.BlazorServer: var BlazorServerTargetProject = FindProjectEndsWith(projectFiles, assemblyNames, ".Blazor"); - return BlazorServerTargetProject != null && BlazorProjectTypeChecker.IsBlazorServerProject(BlazorServerTargetProject) ? BlazorServerTargetProject : null; + return BlazorServerTargetProject != null && + BlazorProjectTypeChecker.IsBlazorServerProject(BlazorServerTargetProject) + ? BlazorServerTargetProject + : null; default: return null; } @@ -95,7 +101,9 @@ namespace Volo.Abp.Cli.ProjectModification } project = FindProjectEndsWith(projectFiles, assemblyNames, ".Blazor"); - if (project != null && BlazorProjectTypeChecker.IsBlazorServerProject(project)) + if (project != null && + File.Exists(project) && + BlazorProjectTypeChecker.IsBlazorServerProject(project)) { projects.Add(project); } @@ -126,8 +134,8 @@ namespace Volo.Abp.Cli.ProjectModification for (var i = 0; i < assemblyNames.Length; i++) { var assemblyName = assemblyNames[i]; - if(assemblyName.EndsWith(postfix, StringComparison.OrdinalIgnoreCase) && - (excludePostfix == null || !assemblyName.EndsWith(excludePostfix))) + if (assemblyName.EndsWith(postfix, StringComparison.OrdinalIgnoreCase) && + (excludePostfix == null || !assemblyName.EndsWith(excludePostfix))) { return projectFiles[i]; } @@ -171,4 +179,4 @@ namespace Volo.Abp.Cli.ProjectModification return projectFolders.ToArray(); } } -} +} \ No newline at end of file