diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/ProjectBuildContextExtensions.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/ProjectBuildContextExtensions.cs
index e793c77011..80fb6db058 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/ProjectBuildContextExtensions.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/ProjectBuildContextExtensions.cs
@@ -16,5 +16,10 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building
return file;
}
+
+ public static FileEntry FindFile(this ProjectBuildContext context, string filePath)
+ {
+ return context.Files.FirstOrDefault(f => f.Name == filePath);
+ }
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveProjectFromSolutionStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveProjectFromSolutionStep.cs
index 7b48c780f1..6026ea96ca 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveProjectFromSolutionStep.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveProjectFromSolutionStep.cs
@@ -7,8 +7,8 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
public class RemoveProjectFromSolutionStep : ProjectBuildPipelineStep
{
private readonly string _projectName;
- private readonly string _solutionFilePath;
- private readonly string _projectFolderPath;
+ private string _solutionFilePath;
+ private string _projectFolderPath;
private string ProjectNameWithQuotes => $"\"{_projectName}\"";
@@ -18,12 +18,14 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
string projectFolderPath = null)
{
_projectName = projectName;
- _solutionFilePath = solutionFilePath ?? "/aspnet-core/MyCompanyName.MyProjectName.sln";
- _projectFolderPath = projectFolderPath ?? ("/aspnet-core/src/" + projectName);
+ _solutionFilePath = solutionFilePath;
+ _projectFolderPath = projectFolderPath;
}
public override void Execute(ProjectBuildContext context)
{
+ SetSolutionAndProjectPathsIfNull(context);
+
new RemoveFolderStep(_projectFolderPath).Execute(context);
var solutionFile = context.GetFile(_solutionFilePath);
solutionFile.NormalizeLineEndings();
@@ -75,5 +77,20 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
return null;
}
+
+ private void SetSolutionAndProjectPathsIfNull(ProjectBuildContext context)
+ {
+
+ if (_solutionFilePath == null)
+ {
+ _solutionFilePath = context.FindFile("/aspnet-core/MyCompanyName.MyProjectName.sln")?.Name ??
+ context.FindFile("/MyCompanyName.MyProjectName.sln").Name;
+ }
+ if (_projectFolderPath == null)
+ {
+ _projectFolderPath = context.FindFile("/aspnet-core/src/" + _projectName.EnsureEndsWith('/'))?.Name ??
+ context.FindFile("/src/" + _projectName.EnsureEndsWith('/')).Name;
+ }
+ }
}
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/TemplateProjectBuildPipelineBuilder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/TemplateProjectBuildPipelineBuilder.cs
index 31c8f216b4..7642a7d697 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/TemplateProjectBuildPipelineBuilder.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/TemplateProjectBuildPipelineBuilder.cs
@@ -1,5 +1,6 @@
using Volo.Abp.Cli.ProjectBuilding.Building.Steps;
using Volo.Abp.Cli.ProjectBuilding.Templates.App;
+using Volo.Abp.Cli.ProjectBuilding.Templates.Microservice;
using Volo.Abp.Cli.ProjectBuilding.Templates.MvcModule;
namespace Volo.Abp.Cli.ProjectBuilding.Building
@@ -25,6 +26,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building
pipeline.Steps.Add(new SolutionRenameStep());
if (context.Template.Name == AppProTemplate.TemplateName ||
+ context.Template.Name == MicroserviceProTemplate.TemplateName ||
context.Template.Name == ModuleProTemplate.TemplateName)
{
pipeline.Steps.Add(new LicenseCodeReplaceStep()); // todo: move to custom steps?
@@ -37,7 +39,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building
}
if ((context.BuildArgs.UiFramework == UiFramework.Mvc || context.BuildArgs.UiFramework == UiFramework.Blazor)
- && context.BuildArgs.MobileApp == MobileApp.None)
+ && context.BuildArgs.MobileApp == MobileApp.None && context.Template.Name != MicroserviceProTemplate.TemplateName)
{
pipeline.Steps.Add(new RemoveRootFolderStep());
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateInfoProvider.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateInfoProvider.cs
index 2aefcfd1a9..b9308dd707 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateInfoProvider.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateInfoProvider.cs
@@ -8,6 +8,7 @@ using Volo.Abp.Cli.Http;
using Volo.Abp.Cli.ProjectBuilding.Building;
using Volo.Abp.Cli.ProjectBuilding.Templates.App;
using Volo.Abp.Cli.ProjectBuilding.Templates.Console;
+using Volo.Abp.Cli.ProjectBuilding.Templates.Microservice;
using Volo.Abp.Cli.ProjectBuilding.Templates.MvcModule;
using Volo.Abp.Cli.ProjectBuilding.Templates.Wpf;
using Volo.Abp.DependencyInjection;
@@ -49,6 +50,8 @@ namespace Volo.Abp.Cli.ProjectBuilding
return new AppTemplate();
case AppProTemplate.TemplateName:
return new AppProTemplate();
+ case MicroserviceProTemplate.TemplateName:
+ return new MicroserviceProTemplate();
case ModuleTemplate.TemplateName:
return new ModuleTemplate();
case ModuleProTemplate.TemplateName:
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Microservice/MicroserviceProTemplate.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Microservice/MicroserviceProTemplate.cs
new file mode 100644
index 0000000000..aef7ffec3b
--- /dev/null
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Microservice/MicroserviceProTemplate.cs
@@ -0,0 +1,16 @@
+namespace Volo.Abp.Cli.ProjectBuilding.Templates.Microservice
+{
+ public class MicroserviceProTemplate : MicroserviceTemplateBase
+ {
+ ///
+ /// "microservice-pro".
+ ///
+ public const string TemplateName = "microservice-pro";
+
+ public MicroserviceProTemplate()
+ : base(TemplateName)
+ {
+ DocumentUrl = null; // todo: set this
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Microservice/MicroserviceTemplateBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Microservice/MicroserviceTemplateBase.cs
new file mode 100644
index 0000000000..13bfe3433e
--- /dev/null
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Microservice/MicroserviceTemplateBase.cs
@@ -0,0 +1,74 @@
+using System.Collections.Generic;
+using JetBrains.Annotations;
+using Volo.Abp.Cli.ProjectBuilding.Building;
+using Volo.Abp.Cli.ProjectBuilding.Building.Steps;
+
+namespace Volo.Abp.Cli.ProjectBuilding.Templates.Microservice
+{
+ public abstract class MicroserviceTemplateBase : TemplateInfo
+ {
+ protected MicroserviceTemplateBase([NotNull] string name)
+ : base(name)
+ {
+ }
+
+ public override IEnumerable GetCustomSteps(ProjectBuildContext context)
+ {
+ var steps = new List();
+
+ DeleteUnrelatedProjects(context, steps);
+ RandomizeStringEncryption(context, steps);
+ UpdateNuGetConfig(context, steps);
+
+ return steps;
+ }
+
+ private static void DeleteUnrelatedProjects(ProjectBuildContext context, List steps)
+ {
+ switch (context.BuildArgs.UiFramework)
+ {
+ case UiFramework.None:
+ steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web"));
+ steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.WebGateway"));
+ steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Blazor"));
+ steps.Add(new RemoveFolderStep("/angular"));
+ break;
+
+ case UiFramework.Angular:
+ steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web"));
+ steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.WebGateway"));
+ steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Blazor"));
+ break;
+
+
+ case UiFramework.Blazor:
+ steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web"));
+ steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.WebGateway"));
+ steps.Add(new RemoveFolderStep("/angular"));
+ break;
+
+ case UiFramework.Mvc:
+ case UiFramework.NotSpecified:
+ steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Blazor"));
+ steps.Add(new RemoveFolderStep("/angular"));
+ break;
+ }
+
+ if (!context.BuildArgs.PublicWebSite)
+ {
+ steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.PublicWeb"));
+ steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.PublicWebGateway"));
+ }
+ }
+
+ private static void RandomizeStringEncryption(ProjectBuildContext context, List steps)
+ {
+ steps.Add(new RandomizeStringEncryptionStep());
+ }
+
+ private static void UpdateNuGetConfig(ProjectBuildContext context, List steps)
+ {
+ steps.Add(new UpdateNuGetConfigStep("/NuGet.Config"));
+ }
+ }
+}