Browse Source

Merge pull request #15516 from abpframework/cli-nolayers-blazor-wasm

Cli: Support Blazor WASM option (single-layer)
pull/15565/head
Gizem Mutu Kurt 3 years ago
committed by GitHub
parent
commit
f213b9132f
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs
  2. 13
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/AppNoLayersMigrateDatabaseChangeStep.cs
  3. 57
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/AppNoLayersMoveProjectsStep.cs
  4. 50
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ChangeThemeStep.cs
  5. 44
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppNoLayersTemplateBase.cs
  6. 17
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs

3
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs

@ -417,7 +417,8 @@ public abstract class ProjectCreationCommandBase
protected async Task RunBundleForBlazorWasmOrMauiBlazorTemplateAsync(ProjectBuildArgs projectArgs)
{
if (AppTemplateBase.IsAppTemplate(projectArgs.TemplateName) && projectArgs.UiFramework is UiFramework.Blazor or UiFramework.MauiBlazor)
if ((AppTemplateBase.IsAppTemplate(projectArgs.TemplateName) || AppNoLayersTemplateBase.IsAppNoLayersTemplate(projectArgs.TemplateName))
&& projectArgs.UiFramework is UiFramework.Blazor or UiFramework.MauiBlazor)
{
var isWebassembly = projectArgs.UiFramework == UiFramework.Blazor;
var message = isWebassembly ? "Generating bundles for Blazor Wasm" : "Generating bundles for MAUI Blazor";

13
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/AppNoLayersMigrateDatabaseChangeStep.cs

@ -0,0 +1,13 @@
using System;
using System.Linq;
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps;
public class AppNoLayersMigrateDatabaseChangeStep : ProjectBuildPipelineStep
{
public override void Execute(ProjectBuildContext context)
{
var file = context.Files.FirstOrDefault(file => file.Name.EndsWith("/migrate-database.ps1"));
file?.SetContent(file.Content.Replace("MyCompanyName.MyProjectName", "MyCompanyName.MyProjectName.Host"));
}
}

57
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/AppNoLayersMoveProjectsStep.cs

@ -0,0 +1,57 @@
using System;
using System.Linq;
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps;
public class AppNoLayersMoveProjectsStep : ProjectBuildPipelineStep
{
public override void Execute(ProjectBuildContext context)
{
MoveFiles(context, "/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client",
"/aspnet-core/MyCompanyName.MyProjectName.Blazor");
MoveFiles(context, "/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server",
"/aspnet-core/MyCompanyName.MyProjectName.Host");
MoveFiles(context, "/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Shared",
"/aspnet-core/MyCompanyName.MyProjectName.Contracts");
ModifySolutionFile(context, "MyCompanyName.MyProjectName.Blazor.WebAssembly\\Client\\MyCompanyName.MyProjectName.Blazor.csproj",
"MyCompanyName.MyProjectName.Blazor\\MyCompanyName.MyProjectName.Blazor.csproj");
ModifySolutionFile(context, "MyCompanyName.MyProjectName.Blazor.WebAssembly\\Server\\MyCompanyName.MyProjectName.Host.csproj",
"MyCompanyName.MyProjectName.Host\\MyCompanyName.MyProjectName.Host.csproj");
ModifySolutionFile(context, "MyCompanyName.MyProjectName.Blazor.WebAssembly\\Server.Mongo\\MyCompanyName.MyProjectName.Host.csproj",
"MyCompanyName.MyProjectName.Host\\MyCompanyName.MyProjectName.Host.csproj");
ModifySolutionFile(context, "MyCompanyName.MyProjectName.Blazor.WebAssembly\\Shared\\MyCompanyName.MyProjectName.Contracts.csproj",
"MyCompanyName.MyProjectName.Contracts\\MyCompanyName.MyProjectName.Contracts.csproj");
ModifyProjectFiles(context, "..\\Shared\\MyCompanyName.MyProjectName.Blazor.WebAssembly.Shared.csproj",
"..\\MyCompanyName.MyProjectName.Contracts\\MyCompanyName.MyProjectName.Contracts.csproj");
ModifyProjectFiles(context, "..\\Client\\MyCompanyName.MyProjectName.Blazor.WebAssembly.Client.csproj",
"..\\MyCompanyName.MyProjectName.Blazor\\MyCompanyName.MyProjectName.Blazor.csproj");
}
public void MoveFiles(ProjectBuildContext context, string projectFolder, string newProjectFolder)
{
var fileEntries = context.Files.Where(file => file.Name.StartsWith(projectFolder));
foreach (var fileEntry in fileEntries)
{
fileEntry.SetName(fileEntry.Name.ReplaceFirst(projectFolder, newProjectFolder));
}
}
public void ModifySolutionFile(ProjectBuildContext context, string pathInSlnFile, string newPathInSlnFile)
{
var slnFile = context.Files.First(file => file.Name.EndsWith(".sln"));
slnFile.SetContent(slnFile.Content.Replace($"\"{pathInSlnFile}\"", $"\"{newPathInSlnFile}\""));
}
public void ModifyProjectFiles(ProjectBuildContext context, string oldContent, string newContent)
{
var projectFiles = context.Files.Where(file => file.Name.EndsWith(".csproj"));
foreach (var projectFile in projectFiles)
{
projectFile.SetContent(projectFile.Content.Replace(oldContent, newContent));
}
}
}

50
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ChangeThemeStep.cs

@ -73,6 +73,31 @@ public class ChangeThemeStep : ProjectBuildPipelineStep
$"Volo.Abp.AspNetCore.Components.Web.{defaultThemeName}Theme.Components",
"Volo.Abp.AspNetCore.Components.Web.BasicTheme.Themes.Basic"
);
ReplacePackageReferenceWithProjectReference(
context,
"/MyCompanyName.MyProjectName.Host/MyCompanyName.MyProjectName.Host.csproj",
$"Volo.Abp.AspNetCore.Mvc.UI.Theme.{defaultThemeName}",
@"..\..\..\..\..\modules\basic-theme\src\Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic\Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.csproj"
);
ChangeNamespaceAndKeyword(
context,
"/MyCompanyName.MyProjectName.Host/MyProjectNameServerModule.cs",
$"Volo.Abp.AspNetCore.Mvc.UI.Theme.{defaultThemeName}.Bundling",
"Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Bundling",
$"{defaultThemeName}ThemeBundles.Styles.Global",
"BasicThemeBundles.Styles.Global"
);
ChangeNamespaceAndKeyword(
context,
"/MyCompanyName.MyProjectName.Host/MyProjectNameServerModule.cs",
$"Volo.Abp.AspNetCore.Mvc.UI.Theme.{defaultThemeName}",
"Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic",
$"AbpAspNetCoreMvcUi{defaultThemeName}ThemeModule",
"AbpAspNetCoreMvcUiBasicThemeModule"
);
#endregion
@ -174,6 +199,31 @@ public class ChangeThemeStep : ProjectBuildPipelineStep
"Volo.Abp.AspNetCore.Components.WebAssembly.LeptonXTheme",
"Volo.Abp.AspNetCore.Components.WebAssembly.LeptonTheme"
);
ReplacePackageReferenceWithProjectReference(
context,
"/MyCompanyName.MyProjectName.Host/MyCompanyName.MyProjectName.Host.csproj",
"Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonX",
@"..\..\..\..\..\lepton-theme\src\Volo.Abp.AspNetCore.Mvc.UI.Theme.Lepton\Volo.Abp.AspNetCore.Mvc.UI.Theme.Lepton.csproj"
);
ChangeNamespaceAndKeyword(
context,
"/MyCompanyName.MyProjectName.Host/MyProjectNameServerModule.cs",
"Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonX.Bundling",
"Volo.Abp.AspNetCore.Mvc.UI.Theme.Lepton.Bundling",
"LeptonXThemeBundles.Styles.Global",
"LeptonThemeBundles.Styles.Global"
);
ChangeNamespaceAndKeyword(
context,
"/MyCompanyName.MyProjectName.Host/MyProjectNameServerModule.cs",
"Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonX",
"Volo.Abp.AspNetCore.Mvc.UI.Theme.Lepton",
"AbpAspNetCoreMvcUiLeptonXThemeModule",
"AbpAspNetCoreMvcUiLeptonThemeModule"
);
#endregion

44
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppNoLayersTemplateBase.cs

@ -29,15 +29,19 @@ public abstract class AppNoLayersTemplateBase : AppTemplateBase
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Mvc.Mongo"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Host.Mongo"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Blazor.Server.Mongo"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.Mongo", projectFolderPath: "/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo"));
break;
case DatabaseProvider.MongoDb:
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Mvc"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Host"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Blazor.Server"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Blazor.WebAssembly.Server", projectFolderPath: "/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server"));
steps.Add(new MoveFolderStep("/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo", "/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server"));
steps.Add(new ProjectRenameStep("MyCompanyName.MyProjectName.Mvc.Mongo", "MyCompanyName.MyProjectName.Mvc"));
steps.Add(new ProjectRenameStep("MyCompanyName.MyProjectName.Host.Mongo", "MyCompanyName.MyProjectName.Host"));
steps.Add(new ProjectRenameStep("MyCompanyName.MyProjectName.Blazor.Server.Mongo", "MyCompanyName.MyProjectName.Blazor.Server"));
steps.Add(new ProjectRenameStep("MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.Mongo", "MyCompanyName.MyProjectName.Blazor.WebAssembly.Server"));
break;
}
@ -49,6 +53,7 @@ public abstract class AppNoLayersTemplateBase : AppTemplateBase
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Mvc"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Blazor.Server"));
steps.Add(new ProjectRenameStep("MyCompanyName.MyProjectName.Host", "MyCompanyName.MyProjectName"));
RemoveBlazorWasmProjects(steps);
break;
case UiFramework.None:
@ -56,13 +61,33 @@ public abstract class AppNoLayersTemplateBase : AppTemplateBase
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Mvc"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Blazor.Server"));
steps.Add(new ProjectRenameStep("MyCompanyName.MyProjectName.Host", "MyCompanyName.MyProjectName"));
RemoveBlazorWasmProjects(steps);
break;
case UiFramework.Blazor:
steps.Add(new RemoveFolderStep("/angular"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Mvc"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Blazor.Server"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Host"));
steps.Add(new ProjectRenameStep("MyCompanyName.MyProjectName.Blazor.WebAssembly.Server",
"MyCompanyName.MyProjectName.Host"));
steps.Add(new ProjectRenameStep("MyCompanyName.MyProjectName.Blazor.WebAssembly.Client",
"MyCompanyName.MyProjectName.Blazor"));
steps.Add(new ProjectRenameStep("MyCompanyName.MyProjectName.Blazor.WebAssembly.Shared",
"MyCompanyName.MyProjectName.Contracts"));
steps.Add(new AppNoLayersMoveProjectsStep());
steps.Add(new AppNoLayersMigrateDatabaseChangeStep());
steps.Add(new RemoveFolderStep("/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly"));
break;
case UiFramework.BlazorServer:
steps.Add(new RemoveFolderStep("/angular"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Mvc"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Host"));
steps.Add(new ProjectRenameStep("MyCompanyName.MyProjectName.Blazor.Server", "MyCompanyName.MyProjectName"));
RemoveBlazorWasmProjects(steps);
break;
case UiFramework.NotSpecified:
@ -71,11 +96,11 @@ public abstract class AppNoLayersTemplateBase : AppTemplateBase
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Host"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Blazor.Server"));
steps.Add(new ProjectRenameStep("MyCompanyName.MyProjectName.Mvc", "MyCompanyName.MyProjectName"));
RemoveBlazorWasmProjects(steps);
break;
case UiFramework.Blazor:
throw new AbpException("app-nolayers doesn't support blazor wasm.");
break;
default:
throw new AbpException("Unkown UI framework: " + context.BuildArgs.UiFramework);
}
steps.Add(new RemoveFolderStep("/aspnet-core/MyCompanyName.MyProjectName/Migrations"));
@ -94,6 +119,17 @@ public abstract class AppNoLayersTemplateBase : AppTemplateBase
return steps;
}
private static void RemoveBlazorWasmProjects(List<ProjectBuildPipelineStep> steps)
{
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Blazor.WebAssembly.Server",
projectFolderPath: "/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Blazor.WebAssembly.Client",
projectFolderPath: "/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Blazor.WebAssembly.Shared",
projectFolderPath: "/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Shared"));
steps.Add(new RemoveFolderStep("/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly"));
}
protected void ConfigureDockerFiles(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps)
{
switch (context.BuildArgs.UiFramework)

17
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs

@ -216,7 +216,7 @@ public abstract class AppTemplateBase : TemplateInfo
RemoveThemeLogoFolders(context, steps);
if (IsDefaultThemeForTemplate(context.BuildArgs.Theme.Value))
if (IsDefaultThemeForTemplate(context.BuildArgs))
{
return;
}
@ -238,15 +238,17 @@ public abstract class AppTemplateBase : TemplateInfo
}
}
private static bool IsDefaultThemeForTemplate(Theme theme)
private static bool IsDefaultThemeForTemplate(ProjectBuildArgs args)
{
var defaultThemesForTemplates = new[]
var templateThemes = new Dictionary<string, Theme>
{
AppTemplate.DefaultTheme, AppProTemplate.DefaultTheme,
AppNoLayersTemplate.DefaultTheme, AppNoLayersProTemplate.DefaultTheme
{ AppTemplate.TemplateName, AppTemplate.DefaultTheme },
{ AppProTemplate.TemplateName, AppProTemplate.DefaultTheme },
{ AppNoLayersTemplate.TemplateName, AppNoLayersTemplate.DefaultTheme },
{ AppNoLayersProTemplate.TemplateName, AppNoLayersProTemplate.DefaultTheme }
};
return defaultThemesForTemplates.Any(defaultTheme => defaultTheme == theme);
return templateThemes.TryGetValue(args.TemplateName!, out var templateTheme) && templateTheme == args.Theme;
}
private static void RemoveLeptonXThemePackagesFromPackageJsonFiles(List<ProjectBuildPipelineStep> steps, bool isProTemplate, UiFramework uiFramework)
@ -584,7 +586,8 @@ public abstract class AppTemplateBase : TemplateInfo
"https://localhost:44306",
"https://localhost:44307",
"https://localhost:44308",
"https://localhost:44309"
"https://localhost:44309",
"https://localhost:44310"
}
)
);

Loading…
Cancel
Save