Browse Source

feat: 调整cli

main-cli
Hanpaopao 2 years ago
parent
commit
9fed40a438
  1. 1011
      aspnet-core/Lion.AbpPro.All.sln
  2. 22
      aspnet-core/Lion.AbpPro.Cli.sln
  3. 2
      aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion.AbpPro.Cli.Core.csproj
  4. 51
      aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/AbpProCliCoreModule.cs
  5. 9
      aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Args/CommandOptions.cs
  6. 24
      aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Auth/GithubTokenAuthService.cs
  7. 14
      aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Auth/ITokenAuthService.cs
  8. 12
      aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/CliPaths.cs
  9. 4
      aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/CliService.cs
  10. 144
      aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/CreateCommand.cs
  11. 46
      aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/LoginCommand.cs
  12. 172
      aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/NewCommand.cs
  13. 75
      aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Github/GithubClient.cs
  14. 25
      aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Github/IGithubClient.cs
  15. 30
      aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Options/AbpProCliBusinessOptions.cs
  16. 1
      aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/SourceCode/ISourceCodeManager.cs
  17. 58
      aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/SourceCode/SourceCodeManager.cs
  18. 37
      aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Utils/ProcessHelper.cs
  19. 3
      aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/Lion.AbpPro.HttpApi.Host.csproj
  20. 292
      aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/Pages/Login.cshtml
  21. 202
      aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/Pages/Monitor.cshtml
  22. 2
      aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/appsettings.json
  23. 0
      templates/pro-module/Delete-BIN-OBJ-Folders.bat
  24. 0
      templates/pro-module/Directory.Build.Lion.targets
  25. 0
      templates/pro-module/Directory.Build.Microsoft.targets
  26. 0
      templates/pro-module/Directory.Build.Volo.targets
  27. 0
      templates/pro-module/Directory.Build.targets
  28. 0
      templates/pro-module/MyCompanyName.MyProjectName.MyModuleName.sln
  29. 0
      templates/pro-module/NuGet.Config
  30. 0
      templates/pro-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/Controllers/HomeController.cs
  31. 0
      templates/pro-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/EntityFrameworkCore/MyModuleNameHttpApiHostMigrationsDbContext.cs
  32. 0
      templates/pro-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/EntityFrameworkCore/MyModuleNameHttpApiHostMigrationsDbContextFactory.cs
  33. 0
      templates/pro-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/FodyWeavers.xml
  34. 0
      templates/pro-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/FodyWeavers.xsd
  35. 0
      templates/pro-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/GlobalUsings.cs
  36. 0
      templates/pro-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host.csproj
  37. 0
      templates/pro-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/MyModuleNameHttpApiHostModule.cs
  38. 0
      templates/pro-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/Program.cs
  39. 0
      templates/pro-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/Properties/launchSettings.json
  40. 0
      templates/pro-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/appsettings.json
  41. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts/FodyWeavers.xml
  42. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts/FodyWeavers.xsd
  43. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts/GlobalUsings.cs
  44. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts.csproj
  45. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts/MyModuleNameApplicationContractsModule.cs
  46. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts/Permissions/MyModuleNamePermissionDefinitionProvider.cs
  47. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts/Permissions/MyModuleNamePermissions.cs
  48. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application/FodyWeavers.xml
  49. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application/FodyWeavers.xsd
  50. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application/GlobalUsings.cs
  51. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application/MyCompanyName.MyProjectName.MyModuleName.Application.csproj
  52. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application/MyModuleNameAppService.cs
  53. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application/MyModuleNameApplicationAutoMapperProfile.cs
  54. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application/MyModuleNameApplicationModule.cs
  55. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/FodyWeavers.xml
  56. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/FodyWeavers.xsd
  57. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/GlobalUsings.cs
  58. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/ar.json
  59. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/cs.json
  60. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/de-DE.json
  61. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/en-GB.json
  62. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/en.json
  63. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/es.json
  64. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/fr.json
  65. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/hu.json
  66. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/nl.json
  67. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/pl-PL.json
  68. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/pt-BR.json
  69. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/sl.json
  70. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/tr.json
  71. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/vi.json
  72. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/zh-Hans.json
  73. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/zh-Hant.json
  74. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleNameResource.cs
  75. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared.csproj
  76. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/MyModuleNameConsts.cs
  77. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/MyModuleNameDomainSharedModule.cs
  78. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/MyModuleNameErrorCodes.cs
  79. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/FodyWeavers.xml
  80. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/FodyWeavers.xsd
  81. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/GlobalUsings.cs
  82. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/MyCompanyName.MyProjectName.MyModuleName.Domain.csproj
  83. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/MyModuleNameDbProperties.cs
  84. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/MyModuleNameDomainAutoMapperProfile.cs
  85. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/MyModuleNameDomainModule.cs
  86. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/MyModuleNameDomainService.cs
  87. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/Settings/MyModuleNameSettingDefinitionProvider.cs
  88. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/Settings/MyModuleNameSettings.cs
  89. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/EntityFrameworkCore/IMyModuleNameDbContext.cs
  90. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/EntityFrameworkCore/MyModuleNameDbContext.cs
  91. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/EntityFrameworkCore/MyModuleNameDbContextModelCreatingExtensions.cs
  92. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/EntityFrameworkCore/MyModuleNameEntityFrameworkCoreModule.cs
  93. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/EntityFrameworkCore/MyModuleNameModelBuilderConfigurationOptions.cs
  94. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/FodyWeavers.xml
  95. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/FodyWeavers.xsd
  96. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/GlobalUsings.cs
  97. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore.csproj
  98. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Client/FodyWeavers.xml
  99. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Client/FodyWeavers.xsd
  100. 0
      templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Client/GlobalUsings.cs

1011
aspnet-core/Lion.AbpPro.All.sln

File diff suppressed because it is too large

22
aspnet-core/Lion.AbpPro.Cli.sln

@ -0,0 +1,22 @@

Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.Cli.Core", "frameworks\src\Lion.AbpPro.Cli.Core\Lion.AbpPro.Cli.Core.csproj", "{56FE9DC1-E625-4A05-A96A-8DA4CB79B0B5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.Cli", "frameworks\src\Lion.AbpPro.Cli\Lion.AbpPro.Cli.csproj", "{AA8325D9-C342-4AA0-A324-BF696D70B6CF}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{56FE9DC1-E625-4A05-A96A-8DA4CB79B0B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{56FE9DC1-E625-4A05-A96A-8DA4CB79B0B5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{56FE9DC1-E625-4A05-A96A-8DA4CB79B0B5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{56FE9DC1-E625-4A05-A96A-8DA4CB79B0B5}.Release|Any CPU.Build.0 = Release|Any CPU
{AA8325D9-C342-4AA0-A324-BF696D70B6CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AA8325D9-C342-4AA0-A324-BF696D70B6CF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AA8325D9-C342-4AA0-A324-BF696D70B6CF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AA8325D9-C342-4AA0-A324-BF696D70B6CF}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

2
aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion.AbpPro.Cli.Core.csproj

@ -9,7 +9,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection" />
<PackageReference Include="Microsoft.Extensions.Http" /> <PackageReference Include="Microsoft.Extensions.Http" />
<PackageReference Include="Octokit" /> <PackageReference Include="Octokit" Version="14.0.0"/>
<PackageReference Include="Polly" /> <PackageReference Include="Polly" />
<PackageReference Include="Volo.Abp.Ddd.Domain" /> <PackageReference Include="Volo.Abp.Ddd.Domain" />
<PackageReference Include="Volo.Abp.Autofac" /> <PackageReference Include="Volo.Abp.Autofac" />

51
aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/AbpProCliCoreModule.cs

@ -9,6 +9,8 @@ public class AbpProCliCoreModule : AbpModule
{ {
Configure<AbpCliOptions>(options => { options.Commands[HelpCommand.Name] = typeof(HelpCommand); }); Configure<AbpCliOptions>(options => { options.Commands[HelpCommand.Name] = typeof(HelpCommand); });
Configure<AbpCliOptions>(options => { options.Commands[NewCommand.Name] = typeof(NewCommand); }); Configure<AbpCliOptions>(options => { options.Commands[NewCommand.Name] = typeof(NewCommand); });
Configure<AbpCliOptions>(options => { options.Commands[LoginCommand.Name] = typeof(LoginCommand); });
Configure<AbpCliOptions>(options => { options.Commands[CreateCommand.Name] = typeof(CreateCommand); });
Configure<Options.AbpProCliOptions>(options => Configure<Options.AbpProCliOptions>(options =>
{ {
@ -17,16 +19,16 @@ public class AbpProCliCoreModule : AbpModule
options.Token = "abp-vnext-proghp_47vqiabp-vnext-provNkHKJguOJkdHvnxUabp-vnext-protij7Qbdn1Qy3fUabp-vnext-pro"; options.Token = "abp-vnext-proghp_47vqiabp-vnext-provNkHKJguOJkdHvnxUabp-vnext-protij7Qbdn1Qy3fUabp-vnext-pro";
options.Templates = new List<AbpProTemplateOptions>() options.Templates = new List<AbpProTemplateOptions>()
{ {
new AbpProTemplateOptions("abp-vnext-pro", "pro", "源码版本", true) new AbpProTemplateOptions("pro", "pro", "源码版本", true)
{ {
ExcludeFiles = "templates,docs,.github,LICENSE,Readme.md", ExcludeFiles = "templates,docs,.github,LICENSE,.idea,Lion.AbpPro.Cli.sln,Lion.AbpPro.Cli.sln.DotSettings.user",
ReplaceSuffix = ".sln,.csproj,.cs,.cshtml,.json,.ci,.yml,.yaml,.nswag,.DotSettings,.env,Directory.Build.Lion.targets", ReplaceSuffix = ".sln,.csproj,.cs,.cshtml,.json,.ci,.yml,.yaml,.nswag,.DotSettings,.env,Directory.Build.Lion.targets",
OldCompanyName = "Lion", OldCompanyName = "Lion",
OldProjectName = "AbpPro" OldProjectName = "AbpPro"
}, },
new AbpProTemplateOptions("abp-vnext-pro-nuget-all", "pro.all", "Nuget完整版本") new AbpProTemplateOptions("pro-nuget", "pro-nuget", "Nuget完整版本")
{ {
//ExcludeFiles = "aspnet-core,vben28,abp-vnext-pro-nuget-module,abp-vnext-pro-nuget-simplify,docs,.github,LICENSE,Readme.md", ExcludeFiles = "aspnet-core,pro-module,docs,.github,LICENSE,.idea,Lion.AbpPro.Cli.sln,Lion.AbpPro.Cli.sln.DotSettings.user",
ReplaceSuffix = ".sln,.csproj,.cs,.cshtml,.json,.ci,.yml,.yaml,.nswag,.DotSettings,.env,Directory.Build.Lion.targets", ReplaceSuffix = ".sln,.csproj,.cs,.cshtml,.json,.ci,.yml,.yaml,.nswag,.DotSettings,.env,Directory.Build.Lion.targets",
OldCompanyName = "MyCompanyName", OldCompanyName = "MyCompanyName",
OldProjectName = "MyProjectName" OldProjectName = "MyProjectName"
@ -39,24 +41,51 @@ public class AbpProCliCoreModule : AbpModule
// OldProjectName = "MyProjectName" // OldProjectName = "MyProjectName"
// }, // },
new AbpProTemplateOptions("abp-vnext-pro-nuget-module", "pro.module", "模块") new AbpProTemplateOptions("pro-module", "pro-module", "模块")
{ {
//ExcludeFiles = "aspnet-core,vben28,abp-vnext-pro-nuget-all,abp-vnext-pro-nuget-simplify,docs,.github,LICENSE,Readme.md", ExcludeFiles = "aspnet-core,vben28,abp-nuget,docs,.github,LICENSE,.idea,Lion.AbpPro.Cli.sln,Lion.AbpPro.Cli.sln.DotSettings.user",
ReplaceSuffix = ".sln,.csproj,.cs,.cshtml,.json,.ci,.yml,.yaml,.nswag,.DotSettings,.env,Directory.Build.Lion.targets", ReplaceSuffix = ".sln,.csproj,.cs,.cshtml,.json,.ci,.yml,.yaml,.nswag,.DotSettings,.env,Directory.Build.Lion.targets",
OldCompanyName = "MyCompanyName", OldCompanyName = "MyCompanyName",
OldProjectName = "MyProjectName", OldProjectName = "MyProjectName",
OldModuleName = "MyModuleName", OldModuleName = "MyModuleName",
}, }
new AbpProTemplateOptions("abp-vnext-pro-business", "local", "local") };
});
Configure<Options.AbpProCliBusinessOptions>(options =>
{
options.Owner = "abp-vnext-pro";
options.RepositoryId = "abp";
options.Templates = new List<AbpProTemplateOptions>()
{
new AbpProTemplateOptions("source", "source", "商业版本源码版本")
{ {
//ExcludeFiles = "aspnet-core,vben28,abp-vnext-pro-nuget-module,abp-vnext-pro-nuget-simplify,docs,.github,LICENSE,Readme.md", ExcludeFiles = ".github,LICENSE,Readme.md",
ReplaceSuffix = ".sln,.csproj,.cs,.cshtml,.json,.ci,.yml,.yaml,.nswag,.DotSettings,.env,Directory.Build.Lion.targets", ReplaceSuffix = ".sln,.csproj,.cs,.cshtml,.json,.ci,.yml,.yaml,.nswag,.DotSettings,.env,Directory.Build.Lion.targets",
OldCompanyName = "Lion", OldCompanyName = "Lion",
OldProjectName = "AbpPro" OldProjectName = "AbpPro",
OldModuleName = "",
},
new AbpProTemplateOptions("nuget", "nuget", "商业版本nuget版本")
{
ExcludeFiles = ".github,LICENSE,Readme.md,aspnet-core,.idea,gateways,MyCompanyName.MyProjectName.Gateways.sln,MyCompanyName.MyProjectName.Gateways.sln.DotSettings.user",
ReplaceSuffix = ".sln,.csproj,.cs,.cshtml,.json,.ci,.yml,.yaml,.nswag,.DotSettings,.env,Directory.Build.Lion.targets,.sln.DotSettings.user",
OldCompanyName = "MyCompanyName",
OldProjectName = "MyProjectName",
OldModuleName = "",
},
new AbpProTemplateOptions("nuget-gateways", "nuget", "商业版本nuget版本")
{
ExcludeFiles = ".github,LICENSE,Readme.md,aspnet-core,.idea,MyCompanyName.MyProjectName.sln,MyCompanyName.MyProjectName.sln.DotSettings.user",
ReplaceSuffix = ".sln,.csproj,.cs,.cshtml,.json,.ci,.yml,.yaml,.nswag,.DotSettings,.env,Directory.Build.Lion.targets,.sln.DotSettings.user",
OldCompanyName = "MyCompanyName",
OldProjectName = "MyProjectName",
OldModuleName = "",
}, },
}; };
}); });
context.Services.AddHttpClient(); context.Services.AddHttpClient();
} }
} }

9
aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Args/CommandOptions.cs

@ -65,4 +65,13 @@ public static class CommandOptions
public const string Short = "v"; public const string Short = "v";
public const string Long = "version"; public const string Long = "version";
} }
/// <summary>
/// 版本
/// </summary>
public static class Token
{
public const string Short = "token";
public const string Long = "token";
}
} }

24
aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Auth/GithubTokenAuthService.cs

@ -0,0 +1,24 @@
namespace Lion.AbpPro.Cli.Auth;
public class GithubTokenAuthService : ITokenAuthService, ITransientDependency
{
public async Task SetAsync(string token)
{
if (token.IsNullOrWhiteSpace())
{
throw new UserFriendlyException("token不能为空");
}
if (!Directory.Exists(CliPaths.Root))
{
Directory.CreateDirectory(CliPaths.Root);
}
await File.WriteAllTextAsync(CliPaths.AccessToken, token, Encoding.UTF8);
}
public async Task<string> GetAsync()
{
return await File.ReadAllTextAsync(CliPaths.AccessToken);
}
}

14
aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Auth/ITokenAuthService.cs

@ -0,0 +1,14 @@
namespace Lion.AbpPro.Cli.Auth;
public interface ITokenAuthService
{
/// <summary>
/// 设置token
/// </summary>
Task SetAsync(string token);
/// <summary>
/// 获取token
/// </summary>
Task<string> GetAsync();
}

12
aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/CliPaths.cs

@ -3,8 +3,14 @@
public class CliPaths public class CliPaths
{ {
public static string Log => Path.Combine(AbpRootPath, "logs"); public static string Log => Path.Combine(AbpRootPath, "logs");
public static string Root => Path.Combine(AbpRootPath, "cli");
public static string TemplateCache => Path.Combine(AbpRootPath, "templates");
public static string AccessToken => Path.Combine(AbpRootPath, "cli", "access-token.bin");
public static string Output => Path.Combine(AbpRootPath, "cli", "code", "output");
public static string Source => Path.Combine(AbpRootPath, "cli", "code", "source");
public static string TemplateCache => Path.Combine(AbpRootPath, "templates");
public static readonly string AbpRootPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".abp.pro"); public static readonly string AbpRootPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".abp.pro");
} }

4
aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/CliService.cs

@ -20,7 +20,7 @@ public class CliService : DomainService
public async Task RunAsync(string[] args) public async Task RunAsync(string[] args)
{ {
Logger.LogInformation("ABP Pro CLI (https://https://doc.cncore.club/)"); Logger.LogInformation("ABP Pro CLI (http://doc.cncore.club/)");
Logger.LogInformation("请输入 lion.abp help 查看所有命令"); Logger.LogInformation("请输入 lion.abp help 查看所有命令");
try try
{ {
@ -30,7 +30,7 @@ public class CliService : DomainService
catch (Exception ex) catch (Exception ex)
{ {
Logger.LogException(ex); Logger.LogError(ex.Message);
} }
} }

144
aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/CreateCommand.cs

@ -0,0 +1,144 @@
using Lion.AbpPro.Cli.Auth;
namespace Lion.AbpPro.Cli.Commands;
public class CreateCommand : IConsoleCommand, ITransientDependency
{
public const string Name = "create";
private readonly ILogger<CreateCommand> _logger;
private readonly ITokenAuthService _tokenAuthService;
private readonly Options.AbpProCliBusinessOptions _cliOptions;
private readonly IGithubClient _githubClient;
private readonly ISourceCodeManager _sourceCodeManager;
public CreateCommand(ILogger<CreateCommand> logger, ITokenAuthService tokenAuthService, IOptions<AbpProCliBusinessOptions> cliOptions, IGithubClient githubClient, ISourceCodeManager sourceCodeManager)
{
_logger = logger;
_tokenAuthService = tokenAuthService;
_githubClient = githubClient;
_sourceCodeManager = sourceCodeManager;
_cliOptions = cliOptions.Value;
}
public async Task ExecuteAsync(CommandLineArgs commandLineArgs)
{
_logger.LogInformation($"开始创建模板......");
#region 参数判断
// 判断是否输入token
var token = await _tokenAuthService.GetAsync();
if (token.IsNullOrWhiteSpace())
{
_logger.LogError("请登录cli, lion.abp login -token 你的token");
return;
}
// 检查模板是否正确
var template = commandLineArgs.Options.GetOrNull(CommandOptions.Template.Short, CommandOptions.Template.Long);
var allTemplates = _cliOptions.Templates.Select(e => e.Key).JoinAsString("|");
if (template.IsNullOrWhiteSpace())
{
_logger.LogError($"请输入模板名称,lion.abp create -t 模板名称({allTemplates})");
GetUsageInfo();
return;
}
var templateOptions = _cliOptions.Templates.FirstOrDefault(e => e.Key == template);
if (templateOptions == null)
{
_logger.LogError($"模板类型不正确,lion.abp create -t 模板名称({allTemplates})");
GetUsageInfo();
return;
}
//校验是否输入公司名称
var companyName = commandLineArgs.Options.GetOrNull(CommandOptions.Company.Short, CommandOptions.Company.Long);
if (companyName.IsNullOrWhiteSpace())
{
_logger.LogError("请输入公司名称lion.abp create -c 公司名称");
GetUsageInfo();
return;
}
//校验是否输入项目名称
var projectName = commandLineArgs.Options.GetOrNull(CommandOptions.Project.Short, CommandOptions.Project.Long);
if (projectName.IsNullOrWhiteSpace())
{
_logger.LogError("请输入公司名称lion.abp create -p 项目名称");
GetUsageInfo();
return;
}
var version = commandLineArgs.Options.GetOrNull(CommandOptions.Version.Short, CommandOptions.Version.Long);
#endregion
// 获取release信息
Release release = null;
if (version.IsNullOrWhiteSpace())
{
release = await _githubClient.GetLatestVersionAsync(_cliOptions.Owner, _cliOptions.RepositoryId, token);
version = release.TagName;
}
else
{
release = await _githubClient.CheckVersionAsync(_cliOptions.Owner, _cliOptions.RepositoryId, token, version);
}
// 下载源码
var localFilePath = Path.Combine(CliPaths.Source, $"{_cliOptions.RepositoryId}-{release.TagName}.zip");
if (!Directory.Exists(CliPaths.Source))
{
Directory.CreateDirectory(CliPaths.Source);
}
if (!File.Exists(localFilePath))
{
_logger.LogInformation("正在从github下载源码......");
await _githubClient.DownloadAsync(release.ZipballUrl, localFilePath, token);
_logger.LogInformation("github源码下载完成.");
}
// 解压源码
var extractPath = _sourceCodeManager.ExtractProjectZip(localFilePath, _cliOptions.RepositoryId, version);
var contentPath = templateOptions.Name == "source" ? Path.Combine(extractPath, _cliOptions.RepositoryId) : Path.Combine(extractPath, _cliOptions.RepositoryId, "templates", templateOptions.Name);
// 复制源码到输出目录
var destOutput = Path.Combine(CliPaths.Output, $"{companyName}-{projectName}-{version}");
DirectoryAndFileHelper.CopyFolder(contentPath, destOutput, templateOptions.ExcludeFiles);
ReplaceHelper.ReplaceTemplates(
destOutput,
templateOptions.OldCompanyName,
templateOptions.OldProjectName,
templateOptions.OldModuleName,
companyName,
projectName,
string.Empty,
templateOptions.ReplaceSuffix,
version);
_logger.LogInformation($"创建模板成功,请查阅----->: {destOutput}");
ProcessHelper.OpenExplorer(destOutput);
}
public void GetUsageInfo()
{
var sb = new StringBuilder();
sb.AppendLine("");
sb.AppendLine("Usage:");
sb.AppendLine(" lion.abp create");
sb.AppendLine("lion.abp create -t 模板名称(source | nuget) -c 公司名称 -p 项目名称");
_logger.LogInformation(sb.ToString());
}
public string GetShortDescription()
{
return "创建商业版本项目:lion.abp create -t 模板名称(source | nuget) -c 公司名称 -p 项目名称";
}
}

46
aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/LoginCommand.cs

@ -0,0 +1,46 @@
using Lion.AbpPro.Cli.Auth;
namespace Lion.AbpPro.Cli.Commands;
public class LoginCommand : IConsoleCommand, ITransientDependency
{
public const string Name = "login";
private readonly ILogger<LoginCommand> _logger;
private readonly ITokenAuthService _tokenAuthService;
public LoginCommand(ILogger<LoginCommand> logger, ITokenAuthService tokenAuthService)
{
_logger = logger;
_tokenAuthService = tokenAuthService;
}
public async Task ExecuteAsync(CommandLineArgs commandLineArgs)
{
// 获取参数
var token = commandLineArgs.Options.GetOrNull(CommandOptions.Token.Short, CommandOptions.Token.Long);
if (token.IsNullOrWhiteSpace())
{
_logger.LogError("请输入token,完成命令:lion.abp login -token 你的token");
}
// 保存token
await _tokenAuthService.SetAsync(token);
_logger.LogInformation("恭喜你设置token成功.");
}
public void GetUsageInfo()
{
var sb = new StringBuilder();
sb.AppendLine("");
sb.AppendLine("Usage:");
sb.AppendLine(" lion.abp login");
sb.AppendLine("");
sb.AppendLine("请在github上创建token(经典),然后当作此命令的参数.");
_logger.LogInformation(sb.ToString());
}
public string GetShortDescription()
{
return "登录: lion.abp login -token 你的token(请联系管理员)";
}
}

172
aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/NewCommand.cs

@ -8,175 +8,147 @@ public class NewCommand : IConsoleCommand, ITransientDependency
private readonly IServiceScopeFactory _serviceScopeFactory; private readonly IServiceScopeFactory _serviceScopeFactory;
private readonly Options.AbpProCliOptions _cliOptions; private readonly Options.AbpProCliOptions _cliOptions;
private readonly ISourceCodeManager _sourceCodeManager; private readonly ISourceCodeManager _sourceCodeManager;
private readonly IGithubClient _githubClient;
public NewCommand( public NewCommand(
IOptions<AbpCliOptions> abpCliOptions, IOptions<AbpCliOptions> abpCliOptions,
ILogger<NewCommand> logger, ILogger<NewCommand> logger,
IServiceScopeFactory serviceScopeFactory, IServiceScopeFactory serviceScopeFactory,
IOptions<Options.AbpProCliOptions> options, IOptions<Options.AbpProCliOptions> options,
ISourceCodeManager sourceCodeManager) ISourceCodeManager sourceCodeManager,
IGithubClient githubClient)
{ {
_logger = logger; _logger = logger;
_serviceScopeFactory = serviceScopeFactory; _serviceScopeFactory = serviceScopeFactory;
_sourceCodeManager = sourceCodeManager; _sourceCodeManager = sourceCodeManager;
_githubClient = githubClient;
_cliOptions = options.Value; _cliOptions = options.Value;
_abpCliOptions = abpCliOptions.Value; _abpCliOptions = abpCliOptions.Value;
} }
public async Task ExecuteAsync(CommandLineArgs commandLineArgs) public async Task ExecuteAsync(CommandLineArgs commandLineArgs)
{ {
#region 参数获取 _logger.LogInformation($"开始创建模板......");
#region 参数判断
var context = new SourceCodeContext();
// 检查模板是否正确 // 检查模板是否正确
var template = commandLineArgs.Options.GetOrNull(CommandOptions.Template.Short, CommandOptions.Template.Long); var template = commandLineArgs.Options.GetOrNull(CommandOptions.Template.Short, CommandOptions.Template.Long);
var allTemplates = _cliOptions.Templates.Select(e => e.Key).JoinAsString("|");
if (template.IsNullOrWhiteSpace()) if (template.IsNullOrWhiteSpace())
{ {
_logger.LogError("请输入模板名称"); _logger.LogError($"请输入模板名称,lion.abp create -t 模板名称({allTemplates})");
GetUsageInfo(); GetUsageInfo();
return; return;
} }
var templateOptions = _cliOptions.Templates.FirstOrDefault(e => e.Name == template); var templateOptions = _cliOptions.Templates.FirstOrDefault(e => e.Key == template);
if (templateOptions == null) if (templateOptions == null)
{ {
_logger.LogError("模板类型不正确"); _logger.LogError($"模板类型不正确,lion.abp create -t 模板名称({allTemplates})");
GetUsageInfo(); GetUsageInfo();
return; return;
} }
context.RepositoryId = _cliOptions.RepositoryId;
context.Token = _cliOptions.DecryptToken;
context.Owner = _cliOptions.Owner;
context.TemplateName = templateOptions.Name;
context.TemplateKey = templateOptions.Key;
context.IsSource = templateOptions.IsSource;
context.ExcludeFiles = templateOptions.ExcludeFiles;
context.ReplaceSuffix = templateOptions.ReplaceSuffix;
context.OldCompanyName = templateOptions.OldCompanyName;
context.OldProjectName = templateOptions.OldProjectName;
context.OldModuleName = templateOptions.OldModuleName;
// if (commandLineArgs.Target.IsNullOrWhiteSpace())
// {
// GetUsageInfo();
// return;
// }
//校验是否输入公司名称 //校验是否输入公司名称
context.CompanyName = commandLineArgs.Options.GetOrNull(CommandOptions.Company.Short, CommandOptions.Company.Long); var companyName = commandLineArgs.Options.GetOrNull(CommandOptions.Company.Short, CommandOptions.Company.Long);
if (context.CompanyName.IsNullOrWhiteSpace()) if (companyName.IsNullOrWhiteSpace())
{ {
_logger.LogError("请输入公司名称"); _logger.LogError("请输入公司名称lion.abp create -c 公司名称");
GetUsageInfo(); GetUsageInfo();
return; return;
} }
//校验是否输入项目名称 //校验是否输入项目名称
context.ProjectName = commandLineArgs.Options.GetOrNull(CommandOptions.Project.Short, CommandOptions.Project.Long); var projectName = commandLineArgs.Options.GetOrNull(CommandOptions.Project.Short, CommandOptions.Project.Long);
if (context.ProjectName.IsNullOrWhiteSpace()) if (projectName.IsNullOrWhiteSpace())
{ {
_logger.LogError("请输入项目名称"); _logger.LogError("请输入公司名称lion.abp create -p 项目名称");
GetUsageInfo(); GetUsageInfo();
return; return;
} }
//校验是否输入项目名称 //校验是否输入模块名称
context.ModuleName = commandLineArgs.Options.GetOrNull(CommandOptions.Module.Short, CommandOptions.Module.Long); var moduleName = commandLineArgs.Options.GetOrNull(CommandOptions.Module.Short, CommandOptions.Module.Long);
if (context.TemplateKey == "abp-vnext-pro-nuget-module" && context.ModuleName.IsNullOrWhiteSpace()) if (templateOptions.Key == "pro-module" && moduleName.IsNullOrWhiteSpace())
{ {
_logger.LogError("请输入模块名称"); _logger.LogError("请输入公司名称lion.abp create -m 模块名称");
GetUsageInfo(); GetUsageInfo();
return; return;
} }
var outputFolder = commandLineArgs.Options.GetOrNull(CommandOptions.OutputFolder.Short, CommandOptions.OutputFolder.Long); var version = commandLineArgs.Options.GetOrNull(CommandOptions.Version.Short, CommandOptions.Version.Long);
outputFolder = outputFolder != null ? Path.GetFullPath(outputFolder) : Directory.GetCurrentDirectory(); #endregion
context.OutputFolder = outputFolder; // 获取release信息
Release release = null;
if (_cliOptions.Templates.FirstOrDefault(e => e.Name == template) != null && template =="local") if (version.IsNullOrWhiteSpace())
{ {
var source = commandLineArgs.Options.GetOrNull(CommandOptions.Source.Short, CommandOptions.Source.Long); release = await _githubClient.GetLatestVersionAsync(_cliOptions.Owner, _cliOptions.RepositoryId, _cliOptions.DecryptToken);
context.TemplateFolder = source; version = release.TagName;
if (context.TemplateFolder.IsNullOrWhiteSpace())
{
Console.WriteLine("请输入源码地址");
Console.WriteLine("示例: lion.abp new -t local -c 公司名称 -p 项目名称 -s C:\\Users\\Code -o C:\\Users\\output");
return;
}
if (context.OutputFolder.IsNullOrWhiteSpace())
{
Console.WriteLine("请输入输出地址");
Console.WriteLine("示例: lion.abp new -t local -c 公司名称 -p 项目名称 -s C:\\Users\\Code -o C:\\Users\\output");
return;
}
_sourceCodeManager.ReplaceLocalTemplates(context);
} }
else else
{ {
//版本 release = await _githubClient.CheckVersionAsync(_cliOptions.Owner, _cliOptions.RepositoryId, _cliOptions.DecryptToken, version);
var version = commandLineArgs.Options.GetOrNull(CommandOptions.Version.Short, CommandOptions.Version.Long); }
#endregion
// 获取源码 // 下载源码
context.TemplateFile = await _sourceCodeManager.GetAsync(version); var localFilePath = Path.Combine(CliPaths.Source, $"{_cliOptions.RepositoryId}-{release.TagName}.zip");
// 解压 if (!Directory.Exists(CliPaths.Source))
_sourceCodeManager.ExtractProjectZip(context); {
Directory.CreateDirectory(CliPaths.Source);
}
// 替换模板 if (!File.Exists(localFilePath))
_sourceCodeManager.ReplaceTemplates(context); {
_logger.LogInformation("正在从github下载源码......");
await _githubClient.DownloadAsync(_cliOptions.Owner, _cliOptions.RepositoryId, version, localFilePath);
_logger.LogInformation("github源码下载完成.");
} }
// 解压源码
var extractPath = _sourceCodeManager.ExtractProjectZip(localFilePath, _cliOptions.RepositoryId, version);
// 打开文件夹 var contentPath = templateOptions.Name == "pro" ? Path.Combine(extractPath, _cliOptions.RepositoryId) : Path.Combine(extractPath, _cliOptions.RepositoryId, "templates", templateOptions.Name);
Process.Start("explorer.exe", context.OutputFolder); // 复制源码到输出目录
var destOutput = Path.Combine(CliPaths.Output, $"{companyName}-{projectName}-{version}");
if (templateOptions.Key == "pro-module")
{
destOutput = Path.Combine(CliPaths.Output, $"{companyName}-{projectName}-{moduleName}-{version}");
}
DirectoryAndFileHelper.CopyFolder(contentPath, destOutput, templateOptions.ExcludeFiles);
ReplaceHelper.ReplaceTemplates(
destOutput,
templateOptions.OldCompanyName,
templateOptions.OldProjectName,
templateOptions.OldModuleName,
companyName,
projectName,
moduleName,
templateOptions.ReplaceSuffix,
version);
_logger.LogInformation($"创建模板成功,请查阅----->: {destOutput}");
ProcessHelper.OpenExplorer(destOutput);
} }
public void GetUsageInfo() public void GetUsageInfo()
{ {
var sb = new StringBuilder(); var sb = new StringBuilder();
sb.AppendLine("");
sb.AppendLine("查看命令帮助:"); sb.AppendLine("Usage:");
sb.AppendLine(" lion.abp help"); sb.AppendLine(" lion.abp new");
sb.AppendLine("命令列表:"); sb.AppendLine("lion.abp new -t 模板名称 -c 公司名称 -p 项目名称 -m 模块名称(创建模块才需要此参数)");
foreach (var command in _abpCliOptions.Commands.ToArray())
{
string shortDescription;
using (var scope = _serviceScopeFactory.CreateScope())
{
shortDescription = ((IConsoleCommand)scope.ServiceProvider
.GetRequiredService(command.Value)).GetShortDescription();
}
sb.Append(" > ");
sb.Append(command.Key);
sb.Append(string.IsNullOrWhiteSpace(shortDescription) ? "" : ":");
sb.Append(" ");
sb.AppendLine(shortDescription);
}
_logger.LogInformation(sb.ToString()); _logger.LogInformation(sb.ToString());
} }
public string GetShortDescription() public string GetShortDescription()
{ {
var message = Environment.NewLine; return "创建开源版本项目:lion.abp new -t 模板名称 -c 公司名称 -p 项目名称 -m 模块名称(创建模块才需要此参数)";
message += $" > lion.abp new -t pro -c 公司名称 -p 项目名称 -v 版本(默认LastRelease) -o 默认当前控制台执行目录";
message += Environment.NewLine;
message += $" > lion.abp new -t pro.all -c 公司名称 -p 项目名称 -v 版本(默认LastRelease) -o 默认当前控制台执行目录";
// message += Environment.NewLine;
// message += $" > lion.abp new -t pro.simplify -c 公司名称 -p 项目名称 -v 版本(默认LastRelease) -o 默认当前控制台执行目录";
message += Environment.NewLine;
message += $" > lion.abp new -t pro.module-c 公司名称 -p 项目名称 -v 版本(默认LastRelease) -o 默认当前控制台执行目录";
return message;
} }
} }

75
aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Github/GithubClient.cs

@ -0,0 +1,75 @@
using FileMode = System.IO.FileMode;
namespace Lion.AbpPro.Cli.Github;
public class GithubClient : IGithubClient, ITransientDependency
{
private readonly IHttpClientFactory _httpClientFactory;
public GithubClient(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}
protected virtual GitHubClient GetGitHubClient(string repositoryId, string token)
{
return new GitHubClient(new ProductHeaderValue("OctokitApp"))
{
// 匿名访问,api会限流,所以需要设置访问令牌
Credentials = new Credentials(token)
};
}
public async Task<Release> GetLatestVersionAsync(string owner, string repositoryId, string token)
{
var github = GetGitHubClient(repositoryId, token);
var release = await github.Repository.Release.GetLatest(owner, repositoryId);
if (release == null)
{
throw new Exception($"没有找到Release,请联系仓库管理员.");
}
return release;
}
public async Task<Release> CheckVersionAsync(string owner, string repositoryId, string token, string version)
{
var github = GetGitHubClient(repositoryId, token);
var release = await github.Repository.Release.Get(owner, repositoryId, version);
if (release == null)
{
throw new UserFriendlyException($"版本{version}不存在.");
}
return release;
}
public async Task DownloadAsync(string url, string localFilePath, string token)
{
using var httpClient = _httpClientFactory.CreateClient();
// 添加 GitHub 认证头
httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("OctokitApp");
httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Token", token);
// 下载文件
var response = await httpClient.GetAsync(url);
response.EnsureSuccessStatusCode();
// 保存到本地
await using var fileStream = new FileStream(localFilePath, FileMode.Create, FileAccess.Write);
await response.Content.CopyToAsync(fileStream);
}
/// <summary>
/// 下载源码
/// </summary>
public async Task DownloadAsync(string owner, string repositoryId, string version, string localFilePath)
{
var httpClient = _httpClientFactory.CreateClient();
var uri = new Uri($"https://github.com/{owner}/{repositoryId}/archive/refs/tags/{version}.zip");
var response = await httpClient.GetAsync(uri);
// 保存到本地
await using var fileStream = new FileStream(localFilePath, FileMode.Create, FileAccess.Write);
await response.Content.CopyToAsync(fileStream);
}
}

25
aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Github/IGithubClient.cs

@ -0,0 +1,25 @@
namespace Lion.AbpPro.Cli.Github;
public interface IGithubClient
{
/// <summary>
/// 获取最后一个版本
/// </summary>
Task<Release> GetLatestVersionAsync(string owner,string repositoryId,string token);
/// <summary>
/// 检查版本是否存在
/// </summary>
Task<Release> CheckVersionAsync(string owner, string repositoryId,string token, string version);
/// <summary>
/// 下载源码
/// </summary>
Task DownloadAsync(string url, string localFilePath, string token);
/// <summary>
/// 下载源码
/// public 仓库使用
/// </summary>
Task DownloadAsync(string owner, string repositoryId, string version, string localFilePath);
}

30
aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Options/AbpProCliBusinessOptions.cs

@ -0,0 +1,30 @@
namespace Lion.AbpPro.Cli.Options;
public class AbpProCliBusinessOptions
{
/// <summary>
/// 仓库拥有者
/// </summary>
public string Owner { get; set; }
/// <summary>
/// 仓库Id
/// </summary>
public string RepositoryId { get; set; }
/// <summary>
/// Github Token
/// </summary>
public string Token { get; set; }
/// <summary>
/// 解密 Github Token
/// </summary>
public string DecryptToken => Token;
/// <summary>
/// 模板信息
/// </summary>
public List<AbpProTemplateOptions> Templates { get; set; }
}

1
aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/SourceCode/ISourceCodeManager.cs

@ -13,6 +13,7 @@ public interface ISourceCodeManager
/// </summary> /// </summary>
void ExtractProjectZip(SourceCodeContext context); void ExtractProjectZip(SourceCodeContext context);
string ExtractProjectZip(string zipPath, string repositoryId, string version);
/// <summary> /// <summary>
/// 替换 /// 替换
/// </summary> /// </summary>

58
aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/SourceCode/SourceCodeManager.cs

@ -1,3 +1,5 @@
using System.IO.Compression;
namespace Lion.AbpPro.Cli.SourceCode; namespace Lion.AbpPro.Cli.SourceCode;
public class SourceCodeManager : ITransientDependency, ISourceCodeManager public class SourceCodeManager : ITransientDependency, ISourceCodeManager
@ -94,6 +96,28 @@ public class SourceCodeManager : ITransientDependency, ISourceCodeManager
context.ExtractProjectPath = Path.Combine(CliPaths.TemplateCache, _cliOptions.RepositoryId + "-" + context.TemplateFile.Version); context.ExtractProjectPath = Path.Combine(CliPaths.TemplateCache, _cliOptions.RepositoryId + "-" + context.TemplateFile.Version);
} }
public string ExtractProjectZip(string zipPath, string repositoryId, string version)
{
var targetPath = Path.Combine(Path.GetDirectoryName(zipPath), repositoryId + "-" + version);
try
{
if (Directory.Exists(targetPath)) return targetPath;
System.IO.Compression.ZipFile.ExtractToDirectory(zipPath, targetPath, Encoding.UTF8, true);
var directoryName = Path.Combine(targetPath, Directory.GetDirectories(targetPath).First());
Directory.Move(directoryName, Path.Combine(targetPath, repositoryId));
return Path.Combine(targetPath, repositoryId);
}
catch (Exception e)
{
_logger.LogError($"解压文件失败: {e.Message}");
}
return targetPath;
}
public void MoveTemplate(SourceCodeContext context) public void MoveTemplate(SourceCodeContext context)
{ {
// var codePath= Path.Combine(context.OutputFolder, context.CompanyName + "." + context.ProjectName); // var codePath= Path.Combine(context.OutputFolder, context.CompanyName + "." + context.ProjectName);
@ -152,17 +176,39 @@ public class SourceCodeManager : ITransientDependency, ISourceCodeManager
DirectoryHelper.DeleteIfExists(context.ExtractProjectPath, true); DirectoryHelper.DeleteIfExists(context.ExtractProjectPath, true);
} }
} }
public void ReplaceTemplates(
string sourcePath,
string oldCompanyName,
string oldProjectName,
string oldModuleName,
string companyName,
string projectName,
string moduleName,
string replaceSuffix,
string version)
{
ReplaceHelper.ReplaceTemplates(
sourcePath,
oldCompanyName,
oldProjectName,
oldModuleName,
companyName,
projectName,
moduleName,
replaceSuffix,
version);
}
public void ReplaceLocalTemplates(SourceCodeContext context) public void ReplaceLocalTemplates(SourceCodeContext context)
{ {
try try
{ {
DirectoryHelper.DeleteIfExists(context.OutputFolder, true); DirectoryHelper.DeleteIfExists(context.OutputFolder, true);
DirectoryAndFileHelper.CopyFolder(context.TemplateFolder, context.OutputFolder, context.ExcludeFiles); DirectoryAndFileHelper.CopyFolder(context.TemplateFolder, context.OutputFolder, context.ExcludeFiles);
ReplaceHelper.ReplaceTemplates( ReplaceHelper.ReplaceTemplates(
context.OutputFolder, context.OutputFolder,
context.OldCompanyName, context.OldCompanyName,
@ -185,7 +231,7 @@ public class SourceCodeManager : ITransientDependency, ISourceCodeManager
// } // }
// //
// context.OutputFolder = Path.Combine(context.OutputFolder, context.CompanyName + "." + context.ProjectName); // context.OutputFolder = Path.Combine(context.OutputFolder, context.CompanyName + "." + context.ProjectName);
// DirectoryAndFileHelper.CopyFolder(context.TemplateFolder, context.OutputFolder, context.ExcludeFiles); // DirectoryAndFileHelper.CopyFolder(context.TemplateFolder, context.OutputFolder, context.ExcludeFiles);
_logger.LogInformation($"OutputFolder:{context.OutputFolder}"); _logger.LogInformation($"OutputFolder:{context.OutputFolder}");

37
aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Utils/ProcessHelper.cs

@ -0,0 +1,37 @@
namespace Lion.AbpPro.Cli.Utils;
public static class ProcessHelper
{
public static void OpenExplorer(string path)
{
try
{
if (string.IsNullOrWhiteSpace(path)) return;
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
Process.Start("explorer.exe", path);
}
else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
{
// macOS 系统使用 open 命令打开文件夹
var startInfo = new ProcessStartInfo
{
FileName = "open",
Arguments = path,
UseShellExecute = false,
CreateNoWindow = true
};
using (var process = new Process())
{
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();
}
}
}
catch (Exception e)
{
// ignore
}
}
}

3
aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/Lion.AbpPro.HttpApi.Host.csproj

@ -65,7 +65,4 @@
<Content Remove="$(UserProfile)\.nuget\packages\*\*\contentFiles\any\*\*.abppkg*.json" /> <Content Remove="$(UserProfile)\.nuget\packages\*\*\contentFiles\any\*\*.abppkg*.json" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<_ContentIncludedByDefault Remove="wwwroot\files\a.txt" />
</ItemGroup>
</Project> </Project>

292
aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/Pages/Login.cshtml

@ -2,157 +2,173 @@
@model Lion.AbpPro.Pages.Login @model Lion.AbpPro.Pages.Login
@{ @{
Layout = null; Layout = null;
} }
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<title>后台服务登录</title> <title>后台服务登录</title>
<link href="../wwwroot/libs/bootstrap/css/bootstrap.min.css" rel="stylesheet"/> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
</head> </head>
<body> <body>
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col-md-offset-3 col-md-6"> <div class="col-md-offset-3 col-md-6">
<form class="form-horizontal" method="post"> <form class="form-horizontal" method="post">
@Html.AntiForgeryToken() @Html.AntiForgeryToken()
<span class="heading">后台服务登录</span> <span class="heading">后台服务登录</span>
<div class="form-group"> <div class="form-group">
<input type="text" class="form-control" name="userName" placeholder="用户名"> <input type="text" class="form-control" name="userName" placeholder="用户名">
</div>
<div class="form-group help">
<input type="password" class="form-control" name="password" placeholder="密码">
</div>
<div class="form-group">
<button type="submit" class="btn btn-default">登录</button>
</div>
</form>
</div> </div>
<div class="form-group help">
<input type="password" class="form-control" name="password" placeholder="密码">
</div>
<div class="form-group">
<button type="submit" class="btn btn-default">登录</button>
</div>
</form>
</div> </div>
</div>
</div> </div>
</body> </body>
</html> </html>
<style> <style>
.row { .row {
width: 800 px; width: 800px;
height: auto; height: auto;
margin: auto; margin: auto;
box-sizing: border-box; box-sizing: border-box;
transform: translate(0, 50%); transform: translate(0, 50%);
} }
.form-horizontal {
background: #fff; .form-horizontal {
padding-bottom: 40px; background: #fff;
border-radius: 15px; padding-bottom: 40px;
text-align: center; border-radius: 15px;
} text-align: center;
.form-horizontal .heading { }
display: block;
font-size: 35px; .form-horizontal .heading {
font-weight: 700; display: block;
padding: 35px 0; font-size: 35px;
border-bottom: 1px solid #f0f0f0; font-weight: 700;
margin-bottom: 30px; padding: 35px 0;
} border-bottom: 1px solid #f0f0f0;
.form-horizontal .form-group { margin-bottom: 30px;
padding: 0 40px; }
margin: 0 0 25px 0;
position: relative; .form-horizontal .form-group {
} padding: 0 40px;
.form-horizontal .form-control { margin: 0 0 25px 0;
background: #f0f0f0; position: relative;
border: none; }
border-radius: 20px;
box-shadow: none; .form-horizontal .form-control {
padding: 0 20px 0 45px; background: #f0f0f0;
height: 40px; border: none;
transition: all 0.3s ease 0s; border-radius: 20px;
} box-shadow: none;
.form-horizontal .form-control:focus { padding: 0 20px 0 45px;
background: #e0e0e0; height: 40px;
box-shadow: none; transition: all 0.3s ease 0s;
outline: 0 none; }
}
.form-horizontal .form-group i { .form-horizontal .form-control:focus {
position: absolute; background: #e0e0e0;
top: 12px; box-shadow: none;
left: 60px; outline: 0 none;
font-size: 17px; }
color: #c8c8c8;
transition: all 0.5s ease 0s; .form-horizontal .form-group i {
} position: absolute;
.form-horizontal .form-control:focus + i { top: 12px;
color: #00b4ef; left: 60px;
} font-size: 17px;
.form-horizontal .fa-question-circle { color: #c8c8c8;
display: inline-block; transition: all 0.5s ease 0s;
position: absolute; }
top: 12px;
right: 60px; .form-horizontal .form-control:focus + i {
font-size: 20px; color: #00b4ef;
color: #808080; }
transition: all 0.5s ease 0s;
} .form-horizontal .fa-question-circle {
.form-horizontal .fa-question-circle:hover { display: inline-block;
color: #000; position: absolute;
} top: 12px;
.form-horizontal .main-checkbox { right: 60px;
float: left; font-size: 20px;
width: 20px; color: #808080;
height: 20px; transition: all 0.5s ease 0s;
background: #11a3fc; }
border-radius: 50%;
position: relative; .form-horizontal .fa-question-circle:hover {
margin: 5px 0 0 5px; color: #000;
border: 1px solid #11a3fc; }
}
.form-horizontal .main-checkbox label { .form-horizontal .main-checkbox {
width: 20px; float: left;
height: 20px; width: 20px;
position: absolute; height: 20px;
top: 0; background: #11a3fc;
left: 0; border-radius: 50%;
cursor: pointer; position: relative;
} margin: 5px 0 0 5px;
.form-horizontal .main-checkbox label:after { border: 1px solid #11a3fc;
content: ""; }
width: 10px;
height: 5px; .form-horizontal .main-checkbox label {
position: absolute; width: 20px;
top: 5px; height: 20px;
left: 4px; position: absolute;
border: 3px solid #fff; top: 0;
border-top: none; left: 0;
border-right: none; cursor: pointer;
background: transparent; }
opacity: 0;
-webkit-transform: rotate(-45deg); .form-horizontal .main-checkbox label:after {
transform: rotate(-45deg); content: "";
} width: 10px;
.form-horizontal .main-checkbox input[type="checkbox"] { height: 5px;
visibility: hidden; position: absolute;
} top: 5px;
.form-horizontal .main-checkbox input[type="checkbox"]:checked + label:after { left: 4px;
opacity: 1; border: 3px solid #fff;
} border-top: none;
.form-horizontal .text { border-right: none;
float: left; background: transparent;
margin-left: 7px; opacity: 0;
line-height: 20px; -webkit-transform: rotate(-45deg);
padding-top: 5px; transform: rotate(-45deg);
text-transform: capitalize; }
}
.form-horizontal .btn { .form-horizontal .main-checkbox input[type="checkbox"] {
text-align: center; visibility: hidden;
font-size: 14px; }
color: #fff;
background: #00b4ef; .form-horizontal .main-checkbox input[type="checkbox"]:checked + label:after {
border-radius: 30px; opacity: 1;
padding: 10px 25px; }
border: none;
text-transform: capitalize; .form-horizontal .text {
transition: all 0.5s ease 0s; float: left;
} margin-left: 7px;
line-height: 20px;
padding-top: 5px;
text-transform: capitalize;
}
.form-horizontal .btn {
text-align: center;
font-size: 14px;
color: #fff;
background: #00b4ef;
border-radius: 30px;
padding: 10px 25px;
border: none;
text-transform: capitalize;
transition: all 0.5s ease 0s;
}
</style> </style>

202
aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/Pages/Monitor.cshtml

@ -14,12 +14,12 @@
<meta charset="UTF-8"/> <meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/> <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link href="../wwwroot/libs/bootstrap/css/bootstrap.min.css" rel="stylesheet"/> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
<title>后端服务</title> <title>后端服务</title>
</head> </head>
<body> <body>
<div class="container projects"> <div class="container projects ">
<div class="projects-header page-header"> <div class="projects-header page-header">
<h2>后端服务列表</h2> <h2>后端服务列表</h2>
@* <p>这些项目或者是对Bootstrap进行了有益的补充,或者是基于Bootstrap开发的</p> *@ @* <p>这些项目或者是对Bootstrap进行了有益的补充,或者是基于Bootstrap开发的</p> *@
@ -89,96 +89,116 @@
</div> </div>
</div> </div>
</div> </div>
</body> </body>
</html> </html>
<style> <style>
*:before, *:before,
*:after { *:after {
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
box-sizing: border-box; box-sizing: border-box;
} }
.container {
width: 1170 px; .container {
padding-right: 15 px; width: 1170px;
padding-left: 15 px; padding-right: 15px;
margin-right: auto; padding-left: 15px;
margin-left: auto; margin-right: auto;
} margin-left: auto;
.projects-header { }
width: 60%;
text-align: center; .projects-header {
font-weight: 200; width: 60%;
display: block; text-align: center;
margin: 60 px auto 40 px !important; font-weight: 200;
} display: block;
.page-header { margin: 60px auto 40px !important;
padding-bottom: 9px; }
margin: 40px auto;
border-bottom: 1 px solid #eee; .page-header {
} padding-bottom: 9px;
.projects-header h2 { margin: 40px auto;
font-size: 42px; border-bottom: 1px solid #eee;
letter-spacing: -1px; }
}
h2 { .projects-header h2 {
margin-top: 20 px; font-size: 42px;
margin-bottom: 10 px; letter-spacing: -1px;
font-weight: 500; }
line-height: 1.1;
color: inherit; h2 {
/* text-align: center; */ margin-top: 20px;
} margin-bottom: 10px;
p { font-weight: 500;
margin: 0 0 10 px; line-height: 1.1;
} color: inherit;
.row { /* text-align: center; */
margin-right: -15 px; }
margin-left: -15 px;
} p {
.col-lg-3 { margin: 0 0 10px;
width: 25%; }
}
.projects .thumbnail { .row {
display: block; margin-right: -15px;
margin-right: auto; margin-left: -15px;
margin-left: auto; }
text-align: center;
margin-bottom: 30 px; .col-lg-3 {
border-radius: 0; width: 25%;
} }
.thumbnail {
display: block; .projects .thumbnail {
padding: 4px; display: block;
line-height: 1.42857143; margin-right: auto;
background-color: #fff; margin-left: auto;
border: 1 px solid #ddd; text-align: center;
.transition(border 0.2s ease-in-out); margin-bottom: 30px;
} border-radius: 0;
a { }
color: #337ab7;
text-decoration: none; .thumbnail {
background-color: transparent; display: block;
} padding: 4px;
.projects .thumbnail img { line-height: 1.42857143;
max-width: 100%; background-color: #fff;
height: auto; border: 1px solid #ddd;
}
.thumbnail a > img, .
.thumbnail > img {
margin-right: auto; transition(border 0.2 s ease-in-out);
margin-left: auto; }
}
img { a {
vertical-align: middle; color: #337ab7;
} text-decoration: none;
/* .projects .thumbnail .caption { background-color: transparent;
overflow-y: hidden; }
color: #555;
} */ .projects .thumbnail img {
.caption { max-width: 100%;
padding: 9px; height: auto;
overflow-y: hidden; }
color: #555;
} .thumbnail a > img,
.thumbnail > img {
margin-right: auto;
margin-left: auto;
}
img {
vertical-align: middle;
}
/* .projects .thumbnail .caption {
overflow-y: hidden;
color: #555;
} */
.caption {
padding: 9px;
overflow-y: hidden;
color: #555;
}
</style> </style>

2
aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/appsettings.json

@ -34,7 +34,7 @@
"CorsOrigins": "https://*.AbpPro.com,http://localhost:4200,http://localhost:3100" "CorsOrigins": "https://*.AbpPro.com,http://localhost:4200,http://localhost:3100"
}, },
"ConnectionStrings": { "ConnectionStrings": {
"Default": "Data Source=localhost;Port=3306;Database=LionAbpPro9;uid=root;pwd=1q2w3E*;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true" "Default": "Data Source=localhost;Port=3306;Database=LionAbpProDemo9;uid=root;pwd=1q2w3E*;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true"
}, },
"Hangfire": { "Hangfire": {
"Redis": { "Redis": {

0
templates/abp-vnext-pro-nuget-all/aspnet-core/Delete-BIN-OBJ-Folders.bat → templates/pro-module/Delete-BIN-OBJ-Folders.bat

0
templates/abp-vnext-pro-nuget-module/Directory.Build.Lion.targets → templates/pro-module/Directory.Build.Lion.targets

0
templates/abp-vnext-pro-nuget-all/aspnet-core/Directory.Build.Microsoft.targets → templates/pro-module/Directory.Build.Microsoft.targets

0
templates/abp-vnext-pro-nuget-all/aspnet-core/Directory.Build.Volo.targets → templates/pro-module/Directory.Build.Volo.targets

0
templates/abp-vnext-pro-nuget-all/aspnet-core/Directory.Build.targets → templates/pro-module/Directory.Build.targets

0
templates/abp-vnext-pro-nuget-module/MyCompanyName.MyProjectName.MyModuleName.sln → templates/pro-module/MyCompanyName.MyProjectName.MyModuleName.sln

0
templates/abp-vnext-pro-nuget-all/aspnet-core/NuGet.Config → templates/pro-module/NuGet.Config

0
templates/abp-vnext-pro-nuget-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/Controllers/HomeController.cs → templates/pro-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/Controllers/HomeController.cs

0
templates/abp-vnext-pro-nuget-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/EntityFrameworkCore/MyModuleNameHttpApiHostMigrationsDbContext.cs → templates/pro-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/EntityFrameworkCore/MyModuleNameHttpApiHostMigrationsDbContext.cs

0
templates/abp-vnext-pro-nuget-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/EntityFrameworkCore/MyModuleNameHttpApiHostMigrationsDbContextFactory.cs → templates/pro-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/EntityFrameworkCore/MyModuleNameHttpApiHostMigrationsDbContextFactory.cs

0
templates/abp-vnext-pro-nuget-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/FodyWeavers.xml → templates/pro-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/FodyWeavers.xml

0
templates/abp-vnext-pro-nuget-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/FodyWeavers.xsd → templates/pro-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/FodyWeavers.xsd

0
templates/abp-vnext-pro-nuget-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/GlobalUsings.cs → templates/pro-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/GlobalUsings.cs

0
templates/abp-vnext-pro-nuget-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host.csproj → templates/pro-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host.csproj

0
templates/abp-vnext-pro-nuget-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/MyModuleNameHttpApiHostModule.cs → templates/pro-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/MyModuleNameHttpApiHostModule.cs

0
templates/abp-vnext-pro-nuget-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/Program.cs → templates/pro-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/Program.cs

0
templates/abp-vnext-pro-nuget-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/Properties/launchSettings.json → templates/pro-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/Properties/launchSettings.json

0
templates/abp-vnext-pro-nuget-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/appsettings.json → templates/pro-module/host/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host/appsettings.json

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts/FodyWeavers.xml → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts/FodyWeavers.xml

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts/FodyWeavers.xsd → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts/FodyWeavers.xsd

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts/GlobalUsings.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts/GlobalUsings.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts.csproj → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts.csproj

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts/MyModuleNameApplicationContractsModule.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts/MyModuleNameApplicationContractsModule.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts/Permissions/MyModuleNamePermissionDefinitionProvider.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts/Permissions/MyModuleNamePermissionDefinitionProvider.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts/Permissions/MyModuleNamePermissions.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application.Contracts/Permissions/MyModuleNamePermissions.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Application/FodyWeavers.xml → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application/FodyWeavers.xml

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Application/FodyWeavers.xsd → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application/FodyWeavers.xsd

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Application/GlobalUsings.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application/GlobalUsings.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Application/MyCompanyName.MyProjectName.MyModuleName.Application.csproj → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application/MyCompanyName.MyProjectName.MyModuleName.Application.csproj

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Application/MyModuleNameAppService.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application/MyModuleNameAppService.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Application/MyModuleNameApplicationAutoMapperProfile.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application/MyModuleNameApplicationAutoMapperProfile.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Application/MyModuleNameApplicationModule.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Application/MyModuleNameApplicationModule.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/FodyWeavers.xml → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/FodyWeavers.xml

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/FodyWeavers.xsd → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/FodyWeavers.xsd

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/GlobalUsings.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/GlobalUsings.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/ar.json → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/ar.json

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/cs.json → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/cs.json

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/de-DE.json → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/de-DE.json

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/en-GB.json → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/en-GB.json

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/en.json → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/en.json

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/es.json → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/es.json

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/fr.json → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/fr.json

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/hu.json → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/hu.json

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/nl.json → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/nl.json

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/pl-PL.json → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/pl-PL.json

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/pt-BR.json → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/pt-BR.json

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/sl.json → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/sl.json

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/tr.json → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/tr.json

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/vi.json → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/vi.json

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/zh-Hans.json → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/zh-Hans.json

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/zh-Hant.json → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleName/zh-Hant.json

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleNameResource.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/Localization/MyModuleNameResource.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared.csproj → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared.csproj

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/MyModuleNameConsts.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/MyModuleNameConsts.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/MyModuleNameDomainSharedModule.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/MyModuleNameDomainSharedModule.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/MyModuleNameErrorCodes.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain.Shared/MyModuleNameErrorCodes.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/FodyWeavers.xml → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/FodyWeavers.xml

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/FodyWeavers.xsd → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/FodyWeavers.xsd

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/GlobalUsings.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/GlobalUsings.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/MyCompanyName.MyProjectName.MyModuleName.Domain.csproj → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/MyCompanyName.MyProjectName.MyModuleName.Domain.csproj

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/MyModuleNameDbProperties.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/MyModuleNameDbProperties.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/MyModuleNameDomainAutoMapperProfile.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/MyModuleNameDomainAutoMapperProfile.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/MyModuleNameDomainModule.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/MyModuleNameDomainModule.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/MyModuleNameDomainService.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/MyModuleNameDomainService.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/Settings/MyModuleNameSettingDefinitionProvider.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/Settings/MyModuleNameSettingDefinitionProvider.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/Settings/MyModuleNameSettings.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.Domain/Settings/MyModuleNameSettings.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/EntityFrameworkCore/IMyModuleNameDbContext.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/EntityFrameworkCore/IMyModuleNameDbContext.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/EntityFrameworkCore/MyModuleNameDbContext.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/EntityFrameworkCore/MyModuleNameDbContext.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/EntityFrameworkCore/MyModuleNameDbContextModelCreatingExtensions.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/EntityFrameworkCore/MyModuleNameDbContextModelCreatingExtensions.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/EntityFrameworkCore/MyModuleNameEntityFrameworkCoreModule.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/EntityFrameworkCore/MyModuleNameEntityFrameworkCoreModule.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/EntityFrameworkCore/MyModuleNameModelBuilderConfigurationOptions.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/EntityFrameworkCore/MyModuleNameModelBuilderConfigurationOptions.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/FodyWeavers.xml → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/FodyWeavers.xml

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/FodyWeavers.xsd → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/FodyWeavers.xsd

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/GlobalUsings.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/GlobalUsings.cs

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore.csproj → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore/MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore.csproj

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Client/FodyWeavers.xml → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Client/FodyWeavers.xml

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Client/FodyWeavers.xsd → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Client/FodyWeavers.xsd

0
templates/abp-vnext-pro-nuget-module/src/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Client/GlobalUsings.cs → templates/pro-module/src/MyCompanyName.MyProjectName.MyModuleName.HttpApi.Client/GlobalUsings.cs

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save