diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs index 42bc75c864..c62e386321 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs @@ -40,6 +40,7 @@ namespace Volo.Abp.Cli.Commands await SolutionModuleAdder.AddAsync( GetSolutionFile(commandLineArgs), commandLineArgs.Target, + commandLineArgs.Options.GetOrNull(Options.StartupProject.Short, Options.StartupProject.Long), skipDbMigrations ); } @@ -58,11 +59,13 @@ namespace Volo.Abp.Cli.Commands sb.AppendLine("Options:"); sb.AppendLine(" -s|--solution Specify the solution file explicitly."); sb.AppendLine(" --skip-db-migrations Specify if a new migration will be added or not."); + sb.AppendLine(" sp|startup-project Relative path to the project folder of the startup project. Default value is the current folder."); sb.AppendLine(""); sb.AppendLine("Examples:"); sb.AppendLine(" abp add-module Volo.Blogging Adds the module to the current solution."); sb.AppendLine(" abp add-module Volo.Blogging -s Acme.BookStore Adds the module to the given solution."); sb.AppendLine(" abp add-module Volo.Blogging -s Acme.BookStore --skip-db-migrations false Adds the module to the given solution but doesn't create a database migration."); + sb.AppendLine(@" abp add-module Volo.Blogging -s Acme.BookStore -sp src\Acme.BookStore.Web\Acme.BookStore.Web.csproj Adds the module to the given solution and specify migration startup project."); sb.AppendLine(""); return sb.ToString(); @@ -79,8 +82,8 @@ namespace Volo.Abp.Cli.Commands { var providedSolutionFile = PathHelper.NormalizePath( commandLineArgs.Options.GetOrNull( - AddPackageCommand.Options.Project.Short, - AddPackageCommand.Options.Project.Long + Options.Solution.Short, + Options.Solution.Long ) ); @@ -127,6 +130,12 @@ namespace Volo.Abp.Cli.Commands { public const string Skip = "skip-db-migrations"; } + + public static class StartupProject + { + public const string Short = "sp"; + public const string Long = "startup-project"; + } } } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationAdder.cs index d3c324431b..cc4d3f74a9 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationAdder.cs @@ -8,22 +8,22 @@ namespace Volo.Abp.Cli.ProjectModification { public class EfCoreMigrationAdder : ITransientDependency { - public void AddMigration(string csprojFile, string module, bool updateDatabase = true) + public void AddMigration(string csprojFile, string module, string startupProject, bool updateDatabase = true) { var moduleName = ParseModuleName(module); var migrationName = "Added_" + moduleName + "_Module" + GetUniquePostFix(); - CmdHelper.RunCmd("cd \"" + Path.GetDirectoryName(csprojFile) + "\" & dotnet ef migrations add " + migrationName); + CmdHelper.RunCmd("cd \"" + Path.GetDirectoryName(csprojFile) + "\" & dotnet ef migrations add " + migrationName + GetStartupProjectOption(startupProject)); if (updateDatabase) { - UpdateDatabase(csprojFile); + UpdateDatabase(csprojFile, startupProject); } } - protected void UpdateDatabase(string csprojFile) + protected void UpdateDatabase(string csprojFile, string startupProject) { - CmdHelper.RunCmd("cd \"" + Path.GetDirectoryName(csprojFile) + "\" & dotnet ef database update"); + CmdHelper.RunCmd("cd \"" + Path.GetDirectoryName(csprojFile) + "\" & dotnet ef database update" + GetStartupProjectOption(startupProject)); } protected virtual string ParseModuleName(string fullModuleName) @@ -42,5 +42,10 @@ namespace Volo.Abp.Cli.ProjectModification { return "_" + new Random().Next(1,99999); } + + protected virtual string GetStartupProjectOption(string startupProject) + { + return startupProject.IsNullOrWhiteSpace() ? "" : $" -s {startupProject}"; + } } } 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 4366470cfe..22e063a8ae 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 @@ -47,6 +47,7 @@ namespace Volo.Abp.Cli.ProjectModification public virtual async Task AddAsync( [NotNull] string solutionFile, [NotNull] string moduleName, + string startupProject, bool skipDbMigrations = false) { Check.NotNull(solutionFile, nameof(solutionFile)); @@ -91,10 +92,10 @@ namespace Volo.Abp.Cli.ProjectModification } } - ModifyDbContext(projectFiles, module, skipDbMigrations); + ModifyDbContext(projectFiles, module, startupProject, skipDbMigrations); } - protected void ModifyDbContext(string[] projectFiles, ModuleInfo module, bool skipDbMigrations = false) + protected void ModifyDbContext(string[] projectFiles, ModuleInfo module, string startupProject, bool skipDbMigrations = false) { if (string.IsNullOrWhiteSpace(module.EfCoreConfigureMethodName)) { @@ -122,7 +123,7 @@ namespace Volo.Abp.Cli.ProjectModification if (!skipDbMigrations) { - EfCoreMigrationAdder.AddMigration(dbMigrationsProject, module.Name); + EfCoreMigrationAdder.AddMigration(dbMigrationsProject, module.Name, startupProject); } }