diff --git a/aspnet-core/Lion.AbpPro.All.sln b/aspnet-core/Lion.AbpPro.All.sln
new file mode 100644
index 00000000..a0851906
--- /dev/null
+++ b/aspnet-core/Lion.AbpPro.All.sln
@@ -0,0 +1,1076 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31410.414
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.Domain", "services\src\Lion.AbpPro.Domain\Lion.AbpPro.Domain.csproj", "{554AD327-6DBA-4F8F-96F8-81CE7A0C863F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.Application", "services\src\Lion.AbpPro.Application\Lion.AbpPro.Application.csproj", "{1A94A50E-06DC-43C1-80B5-B662820EC3EB}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.EntityFrameworkCore", "services\src\Lion.AbpPro.EntityFrameworkCore\Lion.AbpPro.EntityFrameworkCore.csproj", "{C956DD76-69C8-4A9C-83EA-D17DF83340FD}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{CA9AC87F-097E-4F15-8393-4BC07735A5B0}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{04DBDB01-70F4-4E06-B468-8F87850B22BE}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.Application.Tests", "services\test\Lion.AbpPro.Application.Tests\Lion.AbpPro.Application.Tests.csproj", "{50B2631D-129C-47B3-A587-029CCD6099BC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.Domain.Shared", "services\src\Lion.AbpPro.Domain.Shared\Lion.AbpPro.Domain.Shared.csproj", "{42F719ED-8413-4895-B5B4-5AB56079BC66}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.Application.Contracts", "services\src\Lion.AbpPro.Application.Contracts\Lion.AbpPro.Application.Contracts.csproj", "{520659C8-C734-4298-A3DA-B539DB9DFC0B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.HttpApi", "services\src\Lion.AbpPro.HttpApi\Lion.AbpPro.HttpApi.csproj", "{4164BDF7-F527-4E85-9CE6-E3C2D7426A27}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.HttpApi.Client", "services\src\Lion.AbpPro.HttpApi.Client\Lion.AbpPro.HttpApi.Client.csproj", "{3B5A0094-670D-4BB1-BFDD-61B88A8773DC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.EntityFrameworkCore.Tests", "services\test\Lion.AbpPro.EntityFrameworkCore.Tests\Lion.AbpPro.EntityFrameworkCore.Tests.csproj", "{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.TestBase", "services\test\Lion.AbpPro.TestBase\Lion.AbpPro.TestBase.csproj", "{91853F21-9CD9-4132-BC29-A7D5D84FFFE7}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.Domain.Tests", "services\test\Lion.AbpPro.Domain.Tests\Lion.AbpPro.Domain.Tests.csproj", "{E512F4D9-9375-480F-A2F6-A46509F9D824}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.HttpApi.Client.ConsoleTestApp", "services\test\Lion.AbpPro.HttpApi.Client.ConsoleTestApp\Lion.AbpPro.HttpApi.Client.ConsoleTestApp.csproj", "{EF480016-9127-4916-8735-D2466BDBC582}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.DbMigrator", "services\src\Lion.AbpPro.DbMigrator\Lion.AbpPro.DbMigrator.csproj", "{AA94D832-1CCC-4715-95A9-A483F23A1A5D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "services", "services", "{2C861ADD-76E9-4B3B-8A3C-638EBB67D683}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "0.Solution Items", "0.Solution Items", "{2C4A6DB8-8D9E-42E6-B7C3-1EDB7B3DE22E}"
+ ProjectSection(SolutionItems) = preProject
+ global.json = global.json
+ NuGet.Config = NuGet.Config
+ Directory.Build.Microsoft.targets = Directory.Build.Microsoft.targets
+ Directory.Build.targets = Directory.Build.targets
+ Directory.Build.Volo.targets = Directory.Build.Volo.targets
+ ..\Readme.md = ..\Readme.md
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{F8A8EB2A-2D4B-464F-9A13-F8F7B6A8FAA3}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "frameworks", "frameworks", "{CC2EBB07-A070-4158-AB37-A0C0BBAEA9F5}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NotificationManagement", "NotificationManagement", "{EB2B8705-18E7-49E1-A565-93A6DE5570D5}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{E28AECBD-2904-477C-9817-C67312330A41}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{120FE15B-3E5C-4BFF-B874-F09235C9E1ED}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.NotificationManagement.Domain.Shared", "modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.Domain.Shared\Lion.AbpPro.NotificationManagement.Domain.Shared.csproj", "{3E69D96A-F923-4AC4-8430-9AAB84B6A3FE}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.NotificationManagement.Domain", "modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.Domain\Lion.AbpPro.NotificationManagement.Domain.csproj", "{F475DD35-9F27-43FF-9D96-365661ADC3C6}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.NotificationManagement.Application.Contracts", "modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.Application.Contracts\Lion.AbpPro.NotificationManagement.Application.Contracts.csproj", "{34B5BCF2-95C0-4136-AC9E-FC80D8ACBD1C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.NotificationManagement.Application", "modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.Application\Lion.AbpPro.NotificationManagement.Application.csproj", "{4ADEEE7D-7886-4F85-BAA2-CCEE6E30EBFD}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.NotificationManagement.EntityFrameworkCore", "modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.EntityFrameworkCore\Lion.AbpPro.NotificationManagement.EntityFrameworkCore.csproj", "{10DF0925-A1EE-4B1C-AAF6-249C6D02424C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.NotificationManagement.HttpApi", "modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.HttpApi\Lion.AbpPro.NotificationManagement.HttpApi.csproj", "{0880AA9C-0E45-43B3-B02A-093736CDD961}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.NotificationManagement.HttpApi.Client", "modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.HttpApi.Client\Lion.AbpPro.NotificationManagement.HttpApi.Client.csproj", "{B3554E2E-7150-482F-A08F-DCB8BD166FED}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.NotificationManagement.Application.Tests", "modules\NotificationManagement\test\Lion.AbpPro.NotificationManagement.Application.Tests\Lion.AbpPro.NotificationManagement.Application.Tests.csproj", "{22A3A359-C6F4-4540-A61F-C8E94A73C95E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.NotificationManagement.Domain.Tests", "modules\NotificationManagement\test\Lion.AbpPro.NotificationManagement.Domain.Tests\Lion.AbpPro.NotificationManagement.Domain.Tests.csproj", "{FCE5BD62-F7C7-45EA-80DE-B4880C4A84C6}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.NotificationManagement.EntityFrameworkCore.Tests", "modules\NotificationManagement\test\Lion.AbpPro.NotificationManagement.EntityFrameworkCore.Tests\Lion.AbpPro.NotificationManagement.EntityFrameworkCore.Tests.csproj", "{19A921F2-1587-4E94-A023-B81956874DAB}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.NotificationManagement.TestBase", "modules\NotificationManagement\test\Lion.AbpPro.NotificationManagement.TestBase\Lion.AbpPro.NotificationManagement.TestBase.csproj", "{91A3257D-0D1A-479D-8F3C-DBB1944802FE}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DataDictionaryManagement", "DataDictionaryManagement", "{9C53260A-6F4B-4106-98B0-EDCC10BB3E1A}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{D1CFD035-1562-42CF-A96A-0E2EA8D92E80}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{E76E35FC-B62E-48D5-A7AF-79375CFD20BD}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.DataDictionaryManagement.Application", "modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.Application\Lion.AbpPro.DataDictionaryManagement.Application.csproj", "{5E6550EA-D878-455C-8EF7-5382661C1D52}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.DataDictionaryManagement.Application.Contracts", "modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.Application.Contracts\Lion.AbpPro.DataDictionaryManagement.Application.Contracts.csproj", "{14CDCC5A-006A-41EC-8B48-F3EFAC842432}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.DataDictionaryManagement.Domain", "modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.Domain\Lion.AbpPro.DataDictionaryManagement.Domain.csproj", "{11C6A285-8BC0-44C9-9FAB-F93462C75ABC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.DataDictionaryManagement.Domain.Shared", "modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.Domain.Shared\Lion.AbpPro.DataDictionaryManagement.Domain.Shared.csproj", "{C7EB7304-CADD-4F09-84AC-43123406B28F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore", "modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore\Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore.csproj", "{DE15C716-E1C3-4FC3-B976-7EA06EBF23F5}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.DataDictionaryManagement.HttpApi", "modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.HttpApi\Lion.AbpPro.DataDictionaryManagement.HttpApi.csproj", "{430D3AF9-DCCF-4B6F-BFAF-1ECC2F0594A2}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.DataDictionaryManagement.HttpApi.Client", "modules\DataDictionaryManagement\src\Lion.AbpPro.DataDictionaryManagement.HttpApi.Client\Lion.AbpPro.DataDictionaryManagement.HttpApi.Client.csproj", "{CC104C76-0CC6-453E-A49D-C4995B6EB72B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.DataDictionaryManagement.Application.Tests", "modules\DataDictionaryManagement\test\Lion.AbpPro.DataDictionaryManagement.Application.Tests\Lion.AbpPro.DataDictionaryManagement.Application.Tests.csproj", "{13AF64F3-8962-4568-A0E1-833CCA1922D5}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.DataDictionaryManagement.Domain.Tests", "modules\DataDictionaryManagement\test\Lion.AbpPro.DataDictionaryManagement.Domain.Tests\Lion.AbpPro.DataDictionaryManagement.Domain.Tests.csproj", "{F9FADD90-8634-4B03-AC44-9F6C80B30E73}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore.Tests", "modules\DataDictionaryManagement\test\Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore.Tests\Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore.Tests.csproj", "{8BC28722-20CC-41BD-B183-4E33E94CA2A7}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.DataDictionaryManagement.TestBase", "modules\DataDictionaryManagement\test\Lion.AbpPro.DataDictionaryManagement.TestBase\Lion.AbpPro.DataDictionaryManagement.TestBase.csproj", "{6A398750-D7D8-43DC-8DF8-AA65C5766154}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "host", "host", "{5AACD0EE-F2B2-49F6-868F-8FE08D7243C0}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.DataDictionaryManagement.HttpApi.Host", "modules\DataDictionaryManagement\host\Lion.AbpPro.DataDictionaryManagement.HttpApi.Host\Lion.AbpPro.DataDictionaryManagement.HttpApi.Host.csproj", "{8D196E3D-6F95-4793-B948-79669AF09017}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "host", "host", "{8C1B8C6C-C518-4290-B070-622CCA6004DA}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.HttpApi.Host", "services\host\Lion.AbpPro.HttpApi.Host\Lion.AbpPro.HttpApi.Host.csproj", "{FB20372D-6C96-4733-9AAC-12522F15CAA6}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "shared", "shared", "{6434E3F2-B352-4B30-839A-88C2BA166D96}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.Shared.Hosting.Microservices", "shared\Lion.AbpPro.Shared.Hosting.Microservices\Lion.AbpPro.Shared.Hosting.Microservices.csproj", "{A091AE9B-3A1E-49AC-9AD5-D29310512A3D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.Shared.Hosting.Gateways", "shared\Lion.AbpPro.Shared.Hosting.Gateways\Lion.AbpPro.Shared.Hosting.Gateways.csproj", "{C018EFF9-579E-43B3-9181-543BE95E2E03}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "gateways", "gateways", "{5C304CBC-F30D-413C-A0AF-8B6814A2D4A3}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.WebGateway", "gateways\Lion.AbpPro.WebGateway\Lion.AbpPro.WebGateway.csproj", "{D9108313-8D05-4F5F-9AA0-B443EC3374B6}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FileManagement", "FileManagement", "{F604F9BE-CAAB-4D94-8989-22DE4D966C7A}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "host", "host", "{C188A1F4-9601-42E5-9A0A-B282E13EAC41}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{2CC8E555-AA80-4D7A-B606-0821E6754187}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{40BF21CB-4520-45A6-A588-5FFB95BAC87C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.FileManagement.Domain.Shared", "modules\FileManagement\src\Lion.AbpPro.FileManagement.Domain.Shared\Lion.AbpPro.FileManagement.Domain.Shared.csproj", "{866B0894-2B50-484E-BE7E-F221956557F3}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.FileManagement.Application", "modules\FileManagement\src\Lion.AbpPro.FileManagement.Application\Lion.AbpPro.FileManagement.Application.csproj", "{E7B2B79A-09D3-4B7D-83A1-F6DE57E8584B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.FileManagement.Application.Contracts", "modules\FileManagement\src\Lion.AbpPro.FileManagement.Application.Contracts\Lion.AbpPro.FileManagement.Application.Contracts.csproj", "{3B5E4384-9E08-46A6-B526-DF198823D7C8}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.FileManagement.Domain", "modules\FileManagement\src\Lion.AbpPro.FileManagement.Domain\Lion.AbpPro.FileManagement.Domain.csproj", "{23BCC55E-3D30-4E4E-8489-15A5894EE480}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.FileManagement.EntityFrameworkCore", "modules\FileManagement\src\Lion.AbpPro.FileManagement.EntityFrameworkCore\Lion.AbpPro.FileManagement.EntityFrameworkCore.csproj", "{81B29ECF-F004-4DC6-9126-2E45B02C2DFE}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.FileManagement.HttpApi", "modules\FileManagement\src\Lion.AbpPro.FileManagement.HttpApi\Lion.AbpPro.FileManagement.HttpApi.csproj", "{65270240-0157-423A-9115-EAE2992E2FE7}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.FileManagement.HttpApi.Client", "modules\FileManagement\src\Lion.AbpPro.FileManagement.HttpApi.Client\Lion.AbpPro.FileManagement.HttpApi.Client.csproj", "{72C8D8FA-9B61-415F-8FAF-08BC7BD13E9C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.FileManagement.Application.Tests", "modules\FileManagement\test\Lion.AbpPro.FileManagement.Application.Tests\Lion.AbpPro.FileManagement.Application.Tests.csproj", "{E6D3F0F8-0683-4A00-8459-C9C4C65D825D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.FileManagement.Domain.Tests", "modules\FileManagement\test\Lion.AbpPro.FileManagement.Domain.Tests\Lion.AbpPro.FileManagement.Domain.Tests.csproj", "{C912E1E7-4F8F-4ADB-BB27-D40B1903FED0}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.FileManagement.EntityFrameworkCore.Tests", "modules\FileManagement\test\Lion.AbpPro.FileManagement.EntityFrameworkCore.Tests\Lion.AbpPro.FileManagement.EntityFrameworkCore.Tests.csproj", "{80E12564-E2B3-4307-B40E-20E24BF02916}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.FileManagement.TestBase", "modules\FileManagement\test\Lion.AbpPro.FileManagement.TestBase\Lion.AbpPro.FileManagement.TestBase.csproj", "{78589964-923E-4803-9B74-183487C3ED0F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.FileManagement.HttpApi.Host", "modules\FileManagement\host\Lion.AbpPro.FileManagement.HttpApi.Host\Lion.AbpPro.FileManagement.HttpApi.Host.csproj", "{831CD22A-AC6E-4515-AB24-8C96B34C717F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lion.AbpPro.FreeSqlRepository", "services\src\Lion.AbpPro.FreeSqlRepository\Lion.AbpPro.FreeSqlRepository.csproj", "{27C7A0E6-4C2E-4AFF-9DE7-1F526DDC0D18}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.FreeSqlRepository.Tests", "services\test\Lion.AbpPro.FreeSqlRepository.Tests\Lion.AbpPro.FreeSqlRepository.Tests.csproj", "{7971DF5A-B001-4751-8F40-D7752C612BF1}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "host", "host", "{7FF93622-971D-4B30-A5FC-72D729D26E29}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.NotificationManagement.HttpApi.Host", "modules\NotificationManagement\host\Lion.AbpPro.NotificationManagement.HttpApi.Host\Lion.AbpPro.NotificationManagement.HttpApi.Host.csproj", "{FA5E029F-1826-4C1E-8AED-6FA5C3362A3A}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BasicManagement", "BasicManagement", "{C2FE6BA0-3DE5-403F-A91F-BCB9ADA5B068}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "host", "host", "{4E6D558B-CA6D-4133-8701-FDC6F245DA37}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{AF419621-2F14-45CE-AF1B-B688E1B21BCB}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{6464122A-1DC2-45E8-B599-4B5C32FBC85B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.BasicManagement.HttpApi.Client", "modules\BasicManagement\src\Lion.AbpPro.BasicManagement.HttpApi.Client\Lion.AbpPro.BasicManagement.HttpApi.Client.csproj", "{97EE641B-69AB-40A6-B20B-4A7FD3B2681E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.BasicManagement.HttpApi", "modules\BasicManagement\src\Lion.AbpPro.BasicManagement.HttpApi\Lion.AbpPro.BasicManagement.HttpApi.csproj", "{0EE57014-A75A-4E54-97B6-785C2F874EA4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.BasicManagement.EntityFrameworkCore", "modules\BasicManagement\src\Lion.AbpPro.BasicManagement.EntityFrameworkCore\Lion.AbpPro.BasicManagement.EntityFrameworkCore.csproj", "{4F5841EB-A0C9-4E89-AA02-376F2190F68D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.BasicManagement.Domain.Shared", "modules\BasicManagement\src\Lion.AbpPro.BasicManagement.Domain.Shared\Lion.AbpPro.BasicManagement.Domain.Shared.csproj", "{C4E1B96F-7905-48ED-AD72-98F5983E65A5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.BasicManagement.Domain", "modules\BasicManagement\src\Lion.AbpPro.BasicManagement.Domain\Lion.AbpPro.BasicManagement.Domain.csproj", "{95385FBA-53E4-4144-B6FE-B5561081B9F9}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.BasicManagement.Application.Contracts", "modules\BasicManagement\src\Lion.AbpPro.BasicManagement.Application.Contracts\Lion.AbpPro.BasicManagement.Application.Contracts.csproj", "{4D808FF7-C204-40F1-881D-21B27D8D290E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.BasicManagement.Application", "modules\BasicManagement\src\Lion.AbpPro.BasicManagement.Application\Lion.AbpPro.BasicManagement.Application.csproj", "{354E0590-F6B2-43F5-A563-F543C498F3EA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.BasicManagement.TestBase", "modules\BasicManagement\test\Lion.AbpPro.BasicManagement.TestBase\Lion.AbpPro.BasicManagement.TestBase.csproj", "{47F2E236-E6BE-4F52-8389-5CF03BDC9B78}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.BasicManagement.EntityFrameworkCore.Tests", "modules\BasicManagement\test\Lion.AbpPro.BasicManagement.EntityFrameworkCore.Tests\Lion.AbpPro.BasicManagement.EntityFrameworkCore.Tests.csproj", "{9ECCC0EC-CC5A-4E49-96BE-3F2B15CCD94D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.BasicManagement.Domain.Tests", "modules\BasicManagement\test\Lion.AbpPro.BasicManagement.Domain.Tests\Lion.AbpPro.BasicManagement.Domain.Tests.csproj", "{2BACB63E-2830-4371-AEBB-E8089E3EB316}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.BasicManagement.Application.Tests", "modules\BasicManagement\test\Lion.AbpPro.BasicManagement.Application.Tests\Lion.AbpPro.BasicManagement.Application.Tests.csproj", "{19A28EF9-A5AE-4EC5-851C-D2547E5FE29C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.BasicManagement.HttpApi.Host", "modules\BasicManagement\host\Lion.AbpPro.BasicManagement.HttpApi.Host\Lion.AbpPro.BasicManagement.HttpApi.Host.csproj", "{26765303-B9D8-457B-915C-ED869CEEB210}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.Core", "frameworks\src\Lion.AbpPro.Core\Lion.AbpPro.Core.csproj", "{F22611C1-0DAE-408D-B034-7005906536F6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.Localization", "frameworks\src\Lion.AbpPro.Localization\Lion.AbpPro.Localization.csproj", "{EF7D01D6-9F90-4E24-B134-BA13E9965D78}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.CAP", "frameworks\src\Lion.AbpPro.CAP\Lion.AbpPro.CAP.csproj", "{D1A86DB0-DABB-47B6-BC71-C49318AF5534}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{7BE85EBC-99AD-4CDE-957E-4BDD087FC4E3}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{EFC415F8-872F-4C7E-8645-31A51481BCFC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.Localization.Tests", "frameworks\test\Lion.AbpPro.Localization.Tests\Lion.AbpPro.Localization.Tests.csproj", "{800A02FA-EA70-4492-9A93-13C820692F1D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.Core.Tests", "frameworks\test\Lion.AbpPro.Core.Tests\Lion.AbpPro.Core.Tests.csproj", "{A7206D58-8107-4BB9-8962-30C845ACB6DC}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "LanguageManagement", "LanguageManagement", "{073D8348-DDEE-42EE-B34B-888A68FA296D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "host", "host", "{ED9C412B-0D49-46A3-B11F-669D2DC4A4EB}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{2F21DF25-C489-4BCD-8460-41BF0500E17F}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{3FE23400-A323-46ED-A7F4-30BFF8916D64}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.LanguageManagement.Domain.Shared", "modules\LanguageManagement\src\Lion.AbpPro.LanguageManagement.Domain.Shared\Lion.AbpPro.LanguageManagement.Domain.Shared.csproj", "{42812354-1C2C-45C0-91FE-056851CFA835}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.LanguageManagement.Domain", "modules\LanguageManagement\src\Lion.AbpPro.LanguageManagement.Domain\Lion.AbpPro.LanguageManagement.Domain.csproj", "{7491214D-0335-47F2-9AE8-92A68CA0EA75}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.LanguageManagement.EntityFrameworkCore", "modules\LanguageManagement\src\Lion.AbpPro.LanguageManagement.EntityFrameworkCore\Lion.AbpPro.LanguageManagement.EntityFrameworkCore.csproj", "{451999B4-0BE6-4ADD-9B8F-5905AEF63D94}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.LanguageManagement.Application.Contracts", "modules\LanguageManagement\src\Lion.AbpPro.LanguageManagement.Application.Contracts\Lion.AbpPro.LanguageManagement.Application.Contracts.csproj", "{84592572-EC8B-49A3-8F42-83438F0CEE97}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.LanguageManagement.Application", "modules\LanguageManagement\src\Lion.AbpPro.LanguageManagement.Application\Lion.AbpPro.LanguageManagement.Application.csproj", "{4AA19933-C5EE-47BC-8AC7-688D02117F69}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.LanguageManagement.HttpApi", "modules\LanguageManagement\src\Lion.AbpPro.LanguageManagement.HttpApi\Lion.AbpPro.LanguageManagement.HttpApi.csproj", "{E63AA900-9DF1-4E11-9D36-6F325F3BCB11}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.LanguageManagement.HttpApi.Client", "modules\LanguageManagement\src\Lion.AbpPro.LanguageManagement.HttpApi.Client\Lion.AbpPro.LanguageManagement.HttpApi.Client.csproj", "{626C3566-C5D5-4A1C-B9BB-A766C1608B86}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.LanguageManagement.HttpApi.Host", "modules\LanguageManagement\host\Lion.AbpPro.LanguageManagement.HttpApi.Host\Lion.AbpPro.LanguageManagement.HttpApi.Host.csproj", "{25A9FE86-420E-4B21-A1D4-6BFE76E79790}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.LanguageManagement.TestBase", "modules\LanguageManagement\test\Lion.AbpPro.LanguageManagement.TestBase\Lion.AbpPro.LanguageManagement.TestBase.csproj", "{C662D24D-4EB6-425E-B63B-CAD944ABF689}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.LanguageManagement.Domain.Tests", "modules\LanguageManagement\test\Lion.AbpPro.LanguageManagement.Domain.Tests\Lion.AbpPro.LanguageManagement.Domain.Tests.csproj", "{8872921C-5BF9-4B4C-B882-6AF8CC78D2CF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.LanguageManagement.EntityFrameworkCore.Tests", "modules\LanguageManagement\test\Lion.AbpPro.LanguageManagement.EntityFrameworkCore.Tests\Lion.AbpPro.LanguageManagement.EntityFrameworkCore.Tests.csproj", "{E5994C85-C1C2-44F3-BF10-3277CA6CF2C9}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.LanguageManagement.Application.Tests", "modules\LanguageManagement\test\Lion.AbpPro.LanguageManagement.Application.Tests\Lion.AbpPro.LanguageManagement.Application.Tests.csproj", "{15852D6F-4110-4B98-B89D-5747777E8908}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.CAP.EntityFrameworkCore", "frameworks\src\Lion.AbpPro.CAP.EntityFrameworkCore\Lion.AbpPro.CAP.EntityFrameworkCore.csproj", "{68C902A2-A604-4F3A-879D-37941C00C7A9}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.Cli.Core", "frameworks\src\Lion.AbpPro.Cli.Core\Lion.AbpPro.Cli.Core.csproj", "{8D5BD955-FFDC-4895-927F-624C42B64A92}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.Cli", "frameworks\src\Lion.AbpPro.Cli\Lion.AbpPro.Cli.csproj", "{B7A68103-D527-421F-8247-5D169A7F8931}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "templates", "templates", "{E57C6A28-1879-4E83-9B0D-E665824A1F4B}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "module", "module", "{9FC0330B-FD17-49B8-AC45-C2D10D2BDC16}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{94048D54-F513-4557-A8DF-F00F6A60FF5B}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "host", "host", "{7AF66531-6B7B-4F27-BDEF-308FD9C2E286}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{634E34FF-58F4-4FE9-BE51-3B8F6BD9CA70}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.MyModuleName.Domain.Shared", "..\templates\abp-vnext-pro-nuget-module\src\MyCompanyName.MyProjectName.MyModuleName.Domain.Shared\MyCompanyName.MyProjectName.MyModuleName.Domain.Shared.csproj", "{8C9756D3-DAA3-4D94-A365-8A890411887F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.MyModuleName.Domain", "..\templates\abp-vnext-pro-nuget-module\src\MyCompanyName.MyProjectName.MyModuleName.Domain\MyCompanyName.MyProjectName.MyModuleName.Domain.csproj", "{4FBAB41E-7F2E-4488-81AF-74D2D8C8DDBA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore", "..\templates\abp-vnext-pro-nuget-module\src\MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore\MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore.csproj", "{96AF0729-9782-4AEE-8641-85C91CA4DF09}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.MyModuleName.Application.Contracts", "..\templates\abp-vnext-pro-nuget-module\src\MyCompanyName.MyProjectName.MyModuleName.Application.Contracts\MyCompanyName.MyProjectName.MyModuleName.Application.Contracts.csproj", "{6C51D48F-E06F-4B8B-A322-F8A8035C1591}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.MyModuleName.Application", "..\templates\abp-vnext-pro-nuget-module\src\MyCompanyName.MyProjectName.MyModuleName.Application\MyCompanyName.MyProjectName.MyModuleName.Application.csproj", "{890F07CE-345B-4380-BBE4-AD3AF6658100}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.MyModuleName.HttpApi", "..\templates\abp-vnext-pro-nuget-module\src\MyCompanyName.MyProjectName.MyModuleName.HttpApi\MyCompanyName.MyProjectName.MyModuleName.HttpApi.csproj", "{C039423D-85FF-42A8-86D5-DC0EA1376DBE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.MyModuleName.HttpApi.Client", "..\templates\abp-vnext-pro-nuget-module\src\MyCompanyName.MyProjectName.MyModuleName.HttpApi.Client\MyCompanyName.MyProjectName.MyModuleName.HttpApi.Client.csproj", "{A4E1DBD3-1961-48DD-B9F9-46EB12BDC51E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.MyModuleName.TestBase", "..\templates\abp-vnext-pro-nuget-module\test\MyCompanyName.MyProjectName.MyModuleName.TestBase\MyCompanyName.MyProjectName.MyModuleName.TestBase.csproj", "{11E67260-BD8D-4D68-88C4-CD1B9AB217E1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore.Tests", "..\templates\abp-vnext-pro-nuget-module\test\MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore.Tests\MyCompanyName.MyProjectName.MyModuleName.EntityFrameworkCore.Tests.csproj", "{36B5EFBF-DB54-45D4-84F2-1FF794CD8B60}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.MyModuleName.Domain.Tests", "..\templates\abp-vnext-pro-nuget-module\test\MyCompanyName.MyProjectName.MyModuleName.Domain.Tests\MyCompanyName.MyProjectName.MyModuleName.Domain.Tests.csproj", "{71B2D69D-C193-4EF9-AF84-70105B653DF0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.MyModuleName.Application.Tests", "..\templates\abp-vnext-pro-nuget-module\test\MyCompanyName.MyProjectName.MyModuleName.Application.Tests\MyCompanyName.MyProjectName.MyModuleName.Application.Tests.csproj", "{F779A92C-38ED-4301-8899-6C3FE63DFD72}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host", "..\templates\abp-vnext-pro-nuget-module\host\MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host\MyCompanyName.MyProjectName.MyModuleName.HttpApi.Host.csproj", "{4A970FA4-1C4F-426C-A0DC-0E36B1BA0FDE}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "simplify", "simplify", "{43CB54D7-3511-40F4-BC70-9A34E09D7A62}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "all", "all", "{6A40770E-9DE1-4F15-80E8-8FCA090A749C}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "aspnet-core", "aspnet-core", "{7B757E2D-B5A1-4BFE-9BB2-93CD04E4B28B}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{C7AEB4C8-BAE7-4A19-B96E-011FA56ED6A5}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{18E9B97A-3897-4DA8-810E-4435A777ABA7}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "host", "host", "{09CFDF18-4924-44D4-A987-EB9713787FF8}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "aspnet-core", "aspnet-core", "{11801334-CC4A-45F3-BD38-793D4F9D4D4F}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{AF8A0F3B-B346-466C-87F7-F2405E6158FE}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "host", "host", "{EA151482-0987-49E0-96A8-2CD876BC8B6E}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{15456C15-58A1-45F6-BBA7-53504210B30D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.Domain.Shared", "..\templates\abp-vnext-pro-nuget-all\aspnet-core\src\MyCompanyName.MyProjectName.Domain.Shared\MyCompanyName.MyProjectName.Domain.Shared.csproj", "{DBA4F8DB-A309-40D2-B8DD-7B1621458789}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.Domain", "..\templates\abp-vnext-pro-nuget-all\aspnet-core\src\MyCompanyName.MyProjectName.Domain\MyCompanyName.MyProjectName.Domain.csproj", "{E414691C-2B2A-4D5A-BBDA-0B5A3D85B5D1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.EntityFrameworkCore", "..\templates\abp-vnext-pro-nuget-all\aspnet-core\src\MyCompanyName.MyProjectName.EntityFrameworkCore\MyCompanyName.MyProjectName.EntityFrameworkCore.csproj", "{F7C5D48A-ABE7-4E90-B6EB-272DB46F475B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.DbMigrator", "..\templates\abp-vnext-pro-nuget-all\aspnet-core\src\MyCompanyName.MyProjectName.DbMigrator\MyCompanyName.MyProjectName.DbMigrator.csproj", "{7FA842E4-4A08-40BE-9713-5C768C7A669C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.Application", "..\templates\abp-vnext-pro-nuget-all\aspnet-core\src\MyCompanyName.MyProjectName.Application\MyCompanyName.MyProjectName.Application.csproj", "{231A8A2B-469C-4470-BE6C-E93AEE49DC70}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.Application.Contracts", "..\templates\abp-vnext-pro-nuget-all\aspnet-core\src\MyCompanyName.MyProjectName.Application.Contracts\MyCompanyName.MyProjectName.Application.Contracts.csproj", "{3F42B596-9CB9-43CB-A2F2-E28FC8C8BC20}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.FreeSqlRepository", "..\templates\abp-vnext-pro-nuget-all\aspnet-core\src\MyCompanyName.MyProjectName.FreeSqlRepository\MyCompanyName.MyProjectName.FreeSqlRepository.csproj", "{E746B1CA-0357-4BC5-868F-98581EFD1085}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.HttpApi", "..\templates\abp-vnext-pro-nuget-all\aspnet-core\src\MyCompanyName.MyProjectName.HttpApi\MyCompanyName.MyProjectName.HttpApi.csproj", "{87F1CA5F-4C4B-40A2-8188-DA040D2146D2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.HttpApi.Client", "..\templates\abp-vnext-pro-nuget-all\aspnet-core\src\MyCompanyName.MyProjectName.HttpApi.Client\MyCompanyName.MyProjectName.HttpApi.Client.csproj", "{45662575-99E5-42F5-98BC-5CDC4B66AD62}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.TestBase", "..\templates\abp-vnext-pro-nuget-all\aspnet-core\test\MyCompanyName.MyProjectName.TestBase\MyCompanyName.MyProjectName.TestBase.csproj", "{75907746-5BE0-4B42-9846-625758FD8146}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp", "..\templates\abp-vnext-pro-nuget-all\aspnet-core\test\MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp\MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj", "{41A0191C-D1E1-4DDF-A4F5-A47C7C20A3AA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.EntityFrameworkCore.Tests", "..\templates\abp-vnext-pro-nuget-all\aspnet-core\test\MyCompanyName.MyProjectName.EntityFrameworkCore.Tests\MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj", "{F6EEBE46-4F72-401F-B3FF-3B18CE617478}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.Domain.Tests", "..\templates\abp-vnext-pro-nuget-all\aspnet-core\test\MyCompanyName.MyProjectName.Domain.Tests\MyCompanyName.MyProjectName.Domain.Tests.csproj", "{EA034B8C-9CF1-498D-AC74-FF2F039FE37A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.Application.Tests", "..\templates\abp-vnext-pro-nuget-all\aspnet-core\test\MyCompanyName.MyProjectName.Application.Tests\MyCompanyName.MyProjectName.Application.Tests.csproj", "{87F0ECFB-144F-499E-995E-F2B61DC20015}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.HttpApi.Host", "..\templates\abp-vnext-pro-nuget-all\aspnet-core\host\MyCompanyName.MyProjectName.HttpApi.Host\MyCompanyName.MyProjectName.HttpApi.Host.csproj", "{67B45B2E-9682-417D-964B-30DBCE4321CE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.Domain.Shared", "..\templates\abp-vnext-pro-nuget-simplify\aspnet-core\services\src\MyCompanyName.MyProjectName.Domain.Shared\MyCompanyName.MyProjectName.Domain.Shared.csproj", "{F4F5C1F7-28F3-4297-ACD7-DBB6E6F89E68}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.Domain", "..\templates\abp-vnext-pro-nuget-simplify\aspnet-core\services\src\MyCompanyName.MyProjectName.Domain\MyCompanyName.MyProjectName.Domain.csproj", "{504A06C9-2A3D-4456-8F61-DCB35C6F93F3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.EntityFrameworkCore", "..\templates\abp-vnext-pro-nuget-simplify\aspnet-core\services\src\MyCompanyName.MyProjectName.EntityFrameworkCore\MyCompanyName.MyProjectName.EntityFrameworkCore.csproj", "{07982F9D-F65B-4FDA-8CF6-1D0A9EAA32B8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.DbMigrator", "..\templates\abp-vnext-pro-nuget-simplify\aspnet-core\services\src\MyCompanyName.MyProjectName.DbMigrator\MyCompanyName.MyProjectName.DbMigrator.csproj", "{9749B052-5F3D-4442-9B2E-9EC798457DB5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.Application", "..\templates\abp-vnext-pro-nuget-simplify\aspnet-core\services\src\MyCompanyName.MyProjectName.Application\MyCompanyName.MyProjectName.Application.csproj", "{2161EFEA-7654-4810-85A0-18293825FFBC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.Application.Contracts", "..\templates\abp-vnext-pro-nuget-simplify\aspnet-core\services\src\MyCompanyName.MyProjectName.Application.Contracts\MyCompanyName.MyProjectName.Application.Contracts.csproj", "{4E4856BA-A71F-4753-A497-6F3D197BB455}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.FreeSqlRepository", "..\templates\abp-vnext-pro-nuget-simplify\aspnet-core\services\src\MyCompanyName.MyProjectName.FreeSqlRepository\MyCompanyName.MyProjectName.FreeSqlRepository.csproj", "{ABA5A546-28DB-4E54-987D-D828B2F79B9D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.HttpApi", "..\templates\abp-vnext-pro-nuget-simplify\aspnet-core\services\src\MyCompanyName.MyProjectName.HttpApi\MyCompanyName.MyProjectName.HttpApi.csproj", "{50E73D29-F11D-4CBD-8A85-CC34F4DE8C31}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.HttpApi.Client", "..\templates\abp-vnext-pro-nuget-simplify\aspnet-core\services\src\MyCompanyName.MyProjectName.HttpApi.Client\MyCompanyName.MyProjectName.HttpApi.Client.csproj", "{B66BDD25-49B8-4823-A678-93BC081D65ED}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.WebGateway", "..\templates\abp-vnext-pro-nuget-simplify\aspnet-core\gateways\MyCompanyName.MyProjectName.WebGateway\MyCompanyName.MyProjectName.WebGateway.csproj", "{5B9EC1B8-DA44-4747-9806-A0F34CDE388B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.HttpApi.Host", "..\templates\abp-vnext-pro-nuget-simplify\aspnet-core\services\host\MyCompanyName.MyProjectName.HttpApi.Host\MyCompanyName.MyProjectName.HttpApi.Host.csproj", "{04635BE3-67F0-4AB6-BB68-607E73040F07}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.TestBase", "..\templates\abp-vnext-pro-nuget-simplify\aspnet-core\services\test\MyCompanyName.MyProjectName.TestBase\MyCompanyName.MyProjectName.TestBase.csproj", "{75DE5DA1-8EDA-42EE-8570-169713ECB9CD}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp", "..\templates\abp-vnext-pro-nuget-simplify\aspnet-core\services\test\MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp\MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj", "{AF943646-1D48-492D-8C7A-48606F7B36B0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.EntityFrameworkCore.Tests", "..\templates\abp-vnext-pro-nuget-simplify\aspnet-core\services\test\MyCompanyName.MyProjectName.EntityFrameworkCore.Tests\MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj", "{80125670-3650-4E72-A172-CA852FE5C98D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.Domain.Tests", "..\templates\abp-vnext-pro-nuget-simplify\aspnet-core\services\test\MyCompanyName.MyProjectName.Domain.Tests\MyCompanyName.MyProjectName.Domain.Tests.csproj", "{4C8B284F-A216-4812-912F-7CC6F428CDF6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.Application.Tests", "..\templates\abp-vnext-pro-nuget-simplify\aspnet-core\services\test\MyCompanyName.MyProjectName.Application.Tests\MyCompanyName.MyProjectName.Application.Tests.csproj", "{2DDC4639-710D-4B9C-98E0-03288184B37C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lion.AbpPro.Core.Cli.Tests", "frameworks\test\Lion.AbpPro.Core.Cli.Tests\Lion.AbpPro.Core.Cli.Tests.csproj", "{9B65C2C8-E94E-46FD-9841-70DFAE5C85E9}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {50B2631D-129C-47B3-A587-029CCD6099BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {50B2631D-129C-47B3-A587-029CCD6099BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {50B2631D-129C-47B3-A587-029CCD6099BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {50B2631D-129C-47B3-A587-029CCD6099BC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {42F719ED-8413-4895-B5B4-5AB56079BC66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {42F719ED-8413-4895-B5B4-5AB56079BC66}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {42F719ED-8413-4895-B5B4-5AB56079BC66}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {42F719ED-8413-4895-B5B4-5AB56079BC66}.Release|Any CPU.Build.0 = Release|Any CPU
+ {520659C8-C734-4298-A3DA-B539DB9DFC0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {520659C8-C734-4298-A3DA-B539DB9DFC0B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {520659C8-C734-4298-A3DA-B539DB9DFC0B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {520659C8-C734-4298-A3DA-B539DB9DFC0B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Release|Any CPU.Build.0 = Release|Any CPU
+ {91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E512F4D9-9375-480F-A2F6-A46509F9D824}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E512F4D9-9375-480F-A2F6-A46509F9D824}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E512F4D9-9375-480F-A2F6-A46509F9D824}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E512F4D9-9375-480F-A2F6-A46509F9D824}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EF480016-9127-4916-8735-D2466BDBC582}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EF480016-9127-4916-8735-D2466BDBC582}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EF480016-9127-4916-8735-D2466BDBC582}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EF480016-9127-4916-8735-D2466BDBC582}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3E69D96A-F923-4AC4-8430-9AAB84B6A3FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3E69D96A-F923-4AC4-8430-9AAB84B6A3FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3E69D96A-F923-4AC4-8430-9AAB84B6A3FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3E69D96A-F923-4AC4-8430-9AAB84B6A3FE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F475DD35-9F27-43FF-9D96-365661ADC3C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F475DD35-9F27-43FF-9D96-365661ADC3C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F475DD35-9F27-43FF-9D96-365661ADC3C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F475DD35-9F27-43FF-9D96-365661ADC3C6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {34B5BCF2-95C0-4136-AC9E-FC80D8ACBD1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {34B5BCF2-95C0-4136-AC9E-FC80D8ACBD1C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {34B5BCF2-95C0-4136-AC9E-FC80D8ACBD1C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {34B5BCF2-95C0-4136-AC9E-FC80D8ACBD1C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4ADEEE7D-7886-4F85-BAA2-CCEE6E30EBFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4ADEEE7D-7886-4F85-BAA2-CCEE6E30EBFD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4ADEEE7D-7886-4F85-BAA2-CCEE6E30EBFD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4ADEEE7D-7886-4F85-BAA2-CCEE6E30EBFD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {10DF0925-A1EE-4B1C-AAF6-249C6D02424C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {10DF0925-A1EE-4B1C-AAF6-249C6D02424C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {10DF0925-A1EE-4B1C-AAF6-249C6D02424C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {10DF0925-A1EE-4B1C-AAF6-249C6D02424C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0880AA9C-0E45-43B3-B02A-093736CDD961}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0880AA9C-0E45-43B3-B02A-093736CDD961}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0880AA9C-0E45-43B3-B02A-093736CDD961}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0880AA9C-0E45-43B3-B02A-093736CDD961}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B3554E2E-7150-482F-A08F-DCB8BD166FED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B3554E2E-7150-482F-A08F-DCB8BD166FED}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B3554E2E-7150-482F-A08F-DCB8BD166FED}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B3554E2E-7150-482F-A08F-DCB8BD166FED}.Release|Any CPU.Build.0 = Release|Any CPU
+ {22A3A359-C6F4-4540-A61F-C8E94A73C95E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {22A3A359-C6F4-4540-A61F-C8E94A73C95E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {22A3A359-C6F4-4540-A61F-C8E94A73C95E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {22A3A359-C6F4-4540-A61F-C8E94A73C95E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FCE5BD62-F7C7-45EA-80DE-B4880C4A84C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FCE5BD62-F7C7-45EA-80DE-B4880C4A84C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FCE5BD62-F7C7-45EA-80DE-B4880C4A84C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FCE5BD62-F7C7-45EA-80DE-B4880C4A84C6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {19A921F2-1587-4E94-A023-B81956874DAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {19A921F2-1587-4E94-A023-B81956874DAB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {19A921F2-1587-4E94-A023-B81956874DAB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {19A921F2-1587-4E94-A023-B81956874DAB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {91A3257D-0D1A-479D-8F3C-DBB1944802FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {91A3257D-0D1A-479D-8F3C-DBB1944802FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {91A3257D-0D1A-479D-8F3C-DBB1944802FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {91A3257D-0D1A-479D-8F3C-DBB1944802FE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5E6550EA-D878-455C-8EF7-5382661C1D52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5E6550EA-D878-455C-8EF7-5382661C1D52}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5E6550EA-D878-455C-8EF7-5382661C1D52}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5E6550EA-D878-455C-8EF7-5382661C1D52}.Release|Any CPU.Build.0 = Release|Any CPU
+ {14CDCC5A-006A-41EC-8B48-F3EFAC842432}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {14CDCC5A-006A-41EC-8B48-F3EFAC842432}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {14CDCC5A-006A-41EC-8B48-F3EFAC842432}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {14CDCC5A-006A-41EC-8B48-F3EFAC842432}.Release|Any CPU.Build.0 = Release|Any CPU
+ {11C6A285-8BC0-44C9-9FAB-F93462C75ABC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {11C6A285-8BC0-44C9-9FAB-F93462C75ABC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {11C6A285-8BC0-44C9-9FAB-F93462C75ABC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {11C6A285-8BC0-44C9-9FAB-F93462C75ABC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C7EB7304-CADD-4F09-84AC-43123406B28F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C7EB7304-CADD-4F09-84AC-43123406B28F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C7EB7304-CADD-4F09-84AC-43123406B28F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C7EB7304-CADD-4F09-84AC-43123406B28F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DE15C716-E1C3-4FC3-B976-7EA06EBF23F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DE15C716-E1C3-4FC3-B976-7EA06EBF23F5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DE15C716-E1C3-4FC3-B976-7EA06EBF23F5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DE15C716-E1C3-4FC3-B976-7EA06EBF23F5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {430D3AF9-DCCF-4B6F-BFAF-1ECC2F0594A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {430D3AF9-DCCF-4B6F-BFAF-1ECC2F0594A2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {430D3AF9-DCCF-4B6F-BFAF-1ECC2F0594A2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {430D3AF9-DCCF-4B6F-BFAF-1ECC2F0594A2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CC104C76-0CC6-453E-A49D-C4995B6EB72B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CC104C76-0CC6-453E-A49D-C4995B6EB72B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CC104C76-0CC6-453E-A49D-C4995B6EB72B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CC104C76-0CC6-453E-A49D-C4995B6EB72B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {13AF64F3-8962-4568-A0E1-833CCA1922D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {13AF64F3-8962-4568-A0E1-833CCA1922D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {13AF64F3-8962-4568-A0E1-833CCA1922D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {13AF64F3-8962-4568-A0E1-833CCA1922D5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F9FADD90-8634-4B03-AC44-9F6C80B30E73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F9FADD90-8634-4B03-AC44-9F6C80B30E73}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F9FADD90-8634-4B03-AC44-9F6C80B30E73}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F9FADD90-8634-4B03-AC44-9F6C80B30E73}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8BC28722-20CC-41BD-B183-4E33E94CA2A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8BC28722-20CC-41BD-B183-4E33E94CA2A7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8BC28722-20CC-41BD-B183-4E33E94CA2A7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8BC28722-20CC-41BD-B183-4E33E94CA2A7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6A398750-D7D8-43DC-8DF8-AA65C5766154}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6A398750-D7D8-43DC-8DF8-AA65C5766154}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6A398750-D7D8-43DC-8DF8-AA65C5766154}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6A398750-D7D8-43DC-8DF8-AA65C5766154}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8D196E3D-6F95-4793-B948-79669AF09017}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8D196E3D-6F95-4793-B948-79669AF09017}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8D196E3D-6F95-4793-B948-79669AF09017}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8D196E3D-6F95-4793-B948-79669AF09017}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FB20372D-6C96-4733-9AAC-12522F15CAA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FB20372D-6C96-4733-9AAC-12522F15CAA6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FB20372D-6C96-4733-9AAC-12522F15CAA6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FB20372D-6C96-4733-9AAC-12522F15CAA6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A091AE9B-3A1E-49AC-9AD5-D29310512A3D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A091AE9B-3A1E-49AC-9AD5-D29310512A3D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A091AE9B-3A1E-49AC-9AD5-D29310512A3D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A091AE9B-3A1E-49AC-9AD5-D29310512A3D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C018EFF9-579E-43B3-9181-543BE95E2E03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C018EFF9-579E-43B3-9181-543BE95E2E03}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C018EFF9-579E-43B3-9181-543BE95E2E03}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C018EFF9-579E-43B3-9181-543BE95E2E03}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D9108313-8D05-4F5F-9AA0-B443EC3374B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D9108313-8D05-4F5F-9AA0-B443EC3374B6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D9108313-8D05-4F5F-9AA0-B443EC3374B6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D9108313-8D05-4F5F-9AA0-B443EC3374B6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {866B0894-2B50-484E-BE7E-F221956557F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {866B0894-2B50-484E-BE7E-F221956557F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {866B0894-2B50-484E-BE7E-F221956557F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {866B0894-2B50-484E-BE7E-F221956557F3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E7B2B79A-09D3-4B7D-83A1-F6DE57E8584B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E7B2B79A-09D3-4B7D-83A1-F6DE57E8584B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E7B2B79A-09D3-4B7D-83A1-F6DE57E8584B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E7B2B79A-09D3-4B7D-83A1-F6DE57E8584B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3B5E4384-9E08-46A6-B526-DF198823D7C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3B5E4384-9E08-46A6-B526-DF198823D7C8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3B5E4384-9E08-46A6-B526-DF198823D7C8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3B5E4384-9E08-46A6-B526-DF198823D7C8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {23BCC55E-3D30-4E4E-8489-15A5894EE480}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {23BCC55E-3D30-4E4E-8489-15A5894EE480}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {23BCC55E-3D30-4E4E-8489-15A5894EE480}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {23BCC55E-3D30-4E4E-8489-15A5894EE480}.Release|Any CPU.Build.0 = Release|Any CPU
+ {81B29ECF-F004-4DC6-9126-2E45B02C2DFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {81B29ECF-F004-4DC6-9126-2E45B02C2DFE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {81B29ECF-F004-4DC6-9126-2E45B02C2DFE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {81B29ECF-F004-4DC6-9126-2E45B02C2DFE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {65270240-0157-423A-9115-EAE2992E2FE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {65270240-0157-423A-9115-EAE2992E2FE7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {65270240-0157-423A-9115-EAE2992E2FE7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {65270240-0157-423A-9115-EAE2992E2FE7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {72C8D8FA-9B61-415F-8FAF-08BC7BD13E9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {72C8D8FA-9B61-415F-8FAF-08BC7BD13E9C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {72C8D8FA-9B61-415F-8FAF-08BC7BD13E9C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {72C8D8FA-9B61-415F-8FAF-08BC7BD13E9C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E6D3F0F8-0683-4A00-8459-C9C4C65D825D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E6D3F0F8-0683-4A00-8459-C9C4C65D825D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E6D3F0F8-0683-4A00-8459-C9C4C65D825D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E6D3F0F8-0683-4A00-8459-C9C4C65D825D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C912E1E7-4F8F-4ADB-BB27-D40B1903FED0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C912E1E7-4F8F-4ADB-BB27-D40B1903FED0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C912E1E7-4F8F-4ADB-BB27-D40B1903FED0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C912E1E7-4F8F-4ADB-BB27-D40B1903FED0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {80E12564-E2B3-4307-B40E-20E24BF02916}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {80E12564-E2B3-4307-B40E-20E24BF02916}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {80E12564-E2B3-4307-B40E-20E24BF02916}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {80E12564-E2B3-4307-B40E-20E24BF02916}.Release|Any CPU.Build.0 = Release|Any CPU
+ {78589964-923E-4803-9B74-183487C3ED0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {78589964-923E-4803-9B74-183487C3ED0F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {78589964-923E-4803-9B74-183487C3ED0F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {78589964-923E-4803-9B74-183487C3ED0F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {831CD22A-AC6E-4515-AB24-8C96B34C717F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {831CD22A-AC6E-4515-AB24-8C96B34C717F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {831CD22A-AC6E-4515-AB24-8C96B34C717F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {831CD22A-AC6E-4515-AB24-8C96B34C717F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {27C7A0E6-4C2E-4AFF-9DE7-1F526DDC0D18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {27C7A0E6-4C2E-4AFF-9DE7-1F526DDC0D18}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {27C7A0E6-4C2E-4AFF-9DE7-1F526DDC0D18}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {27C7A0E6-4C2E-4AFF-9DE7-1F526DDC0D18}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7971DF5A-B001-4751-8F40-D7752C612BF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7971DF5A-B001-4751-8F40-D7752C612BF1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7971DF5A-B001-4751-8F40-D7752C612BF1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7971DF5A-B001-4751-8F40-D7752C612BF1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FA5E029F-1826-4C1E-8AED-6FA5C3362A3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FA5E029F-1826-4C1E-8AED-6FA5C3362A3A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FA5E029F-1826-4C1E-8AED-6FA5C3362A3A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FA5E029F-1826-4C1E-8AED-6FA5C3362A3A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {97EE641B-69AB-40A6-B20B-4A7FD3B2681E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {97EE641B-69AB-40A6-B20B-4A7FD3B2681E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {97EE641B-69AB-40A6-B20B-4A7FD3B2681E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {97EE641B-69AB-40A6-B20B-4A7FD3B2681E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0EE57014-A75A-4E54-97B6-785C2F874EA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0EE57014-A75A-4E54-97B6-785C2F874EA4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0EE57014-A75A-4E54-97B6-785C2F874EA4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0EE57014-A75A-4E54-97B6-785C2F874EA4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4F5841EB-A0C9-4E89-AA02-376F2190F68D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4F5841EB-A0C9-4E89-AA02-376F2190F68D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4F5841EB-A0C9-4E89-AA02-376F2190F68D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4F5841EB-A0C9-4E89-AA02-376F2190F68D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C4E1B96F-7905-48ED-AD72-98F5983E65A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C4E1B96F-7905-48ED-AD72-98F5983E65A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C4E1B96F-7905-48ED-AD72-98F5983E65A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C4E1B96F-7905-48ED-AD72-98F5983E65A5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {95385FBA-53E4-4144-B6FE-B5561081B9F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {95385FBA-53E4-4144-B6FE-B5561081B9F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {95385FBA-53E4-4144-B6FE-B5561081B9F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {95385FBA-53E4-4144-B6FE-B5561081B9F9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4D808FF7-C204-40F1-881D-21B27D8D290E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4D808FF7-C204-40F1-881D-21B27D8D290E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4D808FF7-C204-40F1-881D-21B27D8D290E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4D808FF7-C204-40F1-881D-21B27D8D290E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {354E0590-F6B2-43F5-A563-F543C498F3EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {354E0590-F6B2-43F5-A563-F543C498F3EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {354E0590-F6B2-43F5-A563-F543C498F3EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {354E0590-F6B2-43F5-A563-F543C498F3EA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {47F2E236-E6BE-4F52-8389-5CF03BDC9B78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {47F2E236-E6BE-4F52-8389-5CF03BDC9B78}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {47F2E236-E6BE-4F52-8389-5CF03BDC9B78}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {47F2E236-E6BE-4F52-8389-5CF03BDC9B78}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9ECCC0EC-CC5A-4E49-96BE-3F2B15CCD94D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9ECCC0EC-CC5A-4E49-96BE-3F2B15CCD94D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9ECCC0EC-CC5A-4E49-96BE-3F2B15CCD94D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9ECCC0EC-CC5A-4E49-96BE-3F2B15CCD94D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2BACB63E-2830-4371-AEBB-E8089E3EB316}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2BACB63E-2830-4371-AEBB-E8089E3EB316}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2BACB63E-2830-4371-AEBB-E8089E3EB316}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2BACB63E-2830-4371-AEBB-E8089E3EB316}.Release|Any CPU.Build.0 = Release|Any CPU
+ {19A28EF9-A5AE-4EC5-851C-D2547E5FE29C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {19A28EF9-A5AE-4EC5-851C-D2547E5FE29C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {19A28EF9-A5AE-4EC5-851C-D2547E5FE29C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {19A28EF9-A5AE-4EC5-851C-D2547E5FE29C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {26765303-B9D8-457B-915C-ED869CEEB210}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {26765303-B9D8-457B-915C-ED869CEEB210}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {26765303-B9D8-457B-915C-ED869CEEB210}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {26765303-B9D8-457B-915C-ED869CEEB210}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F22611C1-0DAE-408D-B034-7005906536F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F22611C1-0DAE-408D-B034-7005906536F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F22611C1-0DAE-408D-B034-7005906536F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F22611C1-0DAE-408D-B034-7005906536F6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EF7D01D6-9F90-4E24-B134-BA13E9965D78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EF7D01D6-9F90-4E24-B134-BA13E9965D78}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EF7D01D6-9F90-4E24-B134-BA13E9965D78}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EF7D01D6-9F90-4E24-B134-BA13E9965D78}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D1A86DB0-DABB-47B6-BC71-C49318AF5534}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D1A86DB0-DABB-47B6-BC71-C49318AF5534}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D1A86DB0-DABB-47B6-BC71-C49318AF5534}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D1A86DB0-DABB-47B6-BC71-C49318AF5534}.Release|Any CPU.Build.0 = Release|Any CPU
+ {800A02FA-EA70-4492-9A93-13C820692F1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {800A02FA-EA70-4492-9A93-13C820692F1D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {800A02FA-EA70-4492-9A93-13C820692F1D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {800A02FA-EA70-4492-9A93-13C820692F1D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A7206D58-8107-4BB9-8962-30C845ACB6DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A7206D58-8107-4BB9-8962-30C845ACB6DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A7206D58-8107-4BB9-8962-30C845ACB6DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A7206D58-8107-4BB9-8962-30C845ACB6DC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {42812354-1C2C-45C0-91FE-056851CFA835}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {42812354-1C2C-45C0-91FE-056851CFA835}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {42812354-1C2C-45C0-91FE-056851CFA835}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {42812354-1C2C-45C0-91FE-056851CFA835}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7491214D-0335-47F2-9AE8-92A68CA0EA75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7491214D-0335-47F2-9AE8-92A68CA0EA75}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7491214D-0335-47F2-9AE8-92A68CA0EA75}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7491214D-0335-47F2-9AE8-92A68CA0EA75}.Release|Any CPU.Build.0 = Release|Any CPU
+ {451999B4-0BE6-4ADD-9B8F-5905AEF63D94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {451999B4-0BE6-4ADD-9B8F-5905AEF63D94}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {451999B4-0BE6-4ADD-9B8F-5905AEF63D94}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {451999B4-0BE6-4ADD-9B8F-5905AEF63D94}.Release|Any CPU.Build.0 = Release|Any CPU
+ {84592572-EC8B-49A3-8F42-83438F0CEE97}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {84592572-EC8B-49A3-8F42-83438F0CEE97}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {84592572-EC8B-49A3-8F42-83438F0CEE97}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {84592572-EC8B-49A3-8F42-83438F0CEE97}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4AA19933-C5EE-47BC-8AC7-688D02117F69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4AA19933-C5EE-47BC-8AC7-688D02117F69}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4AA19933-C5EE-47BC-8AC7-688D02117F69}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4AA19933-C5EE-47BC-8AC7-688D02117F69}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E63AA900-9DF1-4E11-9D36-6F325F3BCB11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E63AA900-9DF1-4E11-9D36-6F325F3BCB11}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E63AA900-9DF1-4E11-9D36-6F325F3BCB11}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E63AA900-9DF1-4E11-9D36-6F325F3BCB11}.Release|Any CPU.Build.0 = Release|Any CPU
+ {626C3566-C5D5-4A1C-B9BB-A766C1608B86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {626C3566-C5D5-4A1C-B9BB-A766C1608B86}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {626C3566-C5D5-4A1C-B9BB-A766C1608B86}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {626C3566-C5D5-4A1C-B9BB-A766C1608B86}.Release|Any CPU.Build.0 = Release|Any CPU
+ {25A9FE86-420E-4B21-A1D4-6BFE76E79790}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {25A9FE86-420E-4B21-A1D4-6BFE76E79790}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {25A9FE86-420E-4B21-A1D4-6BFE76E79790}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {25A9FE86-420E-4B21-A1D4-6BFE76E79790}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C662D24D-4EB6-425E-B63B-CAD944ABF689}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C662D24D-4EB6-425E-B63B-CAD944ABF689}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C662D24D-4EB6-425E-B63B-CAD944ABF689}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C662D24D-4EB6-425E-B63B-CAD944ABF689}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8872921C-5BF9-4B4C-B882-6AF8CC78D2CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8872921C-5BF9-4B4C-B882-6AF8CC78D2CF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8872921C-5BF9-4B4C-B882-6AF8CC78D2CF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8872921C-5BF9-4B4C-B882-6AF8CC78D2CF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E5994C85-C1C2-44F3-BF10-3277CA6CF2C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E5994C85-C1C2-44F3-BF10-3277CA6CF2C9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E5994C85-C1C2-44F3-BF10-3277CA6CF2C9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E5994C85-C1C2-44F3-BF10-3277CA6CF2C9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {15852D6F-4110-4B98-B89D-5747777E8908}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {15852D6F-4110-4B98-B89D-5747777E8908}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {15852D6F-4110-4B98-B89D-5747777E8908}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {15852D6F-4110-4B98-B89D-5747777E8908}.Release|Any CPU.Build.0 = Release|Any CPU
+ {68C902A2-A604-4F3A-879D-37941C00C7A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {68C902A2-A604-4F3A-879D-37941C00C7A9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {68C902A2-A604-4F3A-879D-37941C00C7A9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {68C902A2-A604-4F3A-879D-37941C00C7A9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8D5BD955-FFDC-4895-927F-624C42B64A92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8D5BD955-FFDC-4895-927F-624C42B64A92}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8D5BD955-FFDC-4895-927F-624C42B64A92}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8D5BD955-FFDC-4895-927F-624C42B64A92}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B7A68103-D527-421F-8247-5D169A7F8931}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B7A68103-D527-421F-8247-5D169A7F8931}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B7A68103-D527-421F-8247-5D169A7F8931}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B7A68103-D527-421F-8247-5D169A7F8931}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8C9756D3-DAA3-4D94-A365-8A890411887F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8C9756D3-DAA3-4D94-A365-8A890411887F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8C9756D3-DAA3-4D94-A365-8A890411887F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8C9756D3-DAA3-4D94-A365-8A890411887F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4FBAB41E-7F2E-4488-81AF-74D2D8C8DDBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4FBAB41E-7F2E-4488-81AF-74D2D8C8DDBA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4FBAB41E-7F2E-4488-81AF-74D2D8C8DDBA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4FBAB41E-7F2E-4488-81AF-74D2D8C8DDBA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {96AF0729-9782-4AEE-8641-85C91CA4DF09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {96AF0729-9782-4AEE-8641-85C91CA4DF09}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {96AF0729-9782-4AEE-8641-85C91CA4DF09}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {96AF0729-9782-4AEE-8641-85C91CA4DF09}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6C51D48F-E06F-4B8B-A322-F8A8035C1591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6C51D48F-E06F-4B8B-A322-F8A8035C1591}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6C51D48F-E06F-4B8B-A322-F8A8035C1591}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6C51D48F-E06F-4B8B-A322-F8A8035C1591}.Release|Any CPU.Build.0 = Release|Any CPU
+ {890F07CE-345B-4380-BBE4-AD3AF6658100}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {890F07CE-345B-4380-BBE4-AD3AF6658100}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {890F07CE-345B-4380-BBE4-AD3AF6658100}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {890F07CE-345B-4380-BBE4-AD3AF6658100}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C039423D-85FF-42A8-86D5-DC0EA1376DBE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C039423D-85FF-42A8-86D5-DC0EA1376DBE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C039423D-85FF-42A8-86D5-DC0EA1376DBE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C039423D-85FF-42A8-86D5-DC0EA1376DBE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A4E1DBD3-1961-48DD-B9F9-46EB12BDC51E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A4E1DBD3-1961-48DD-B9F9-46EB12BDC51E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A4E1DBD3-1961-48DD-B9F9-46EB12BDC51E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A4E1DBD3-1961-48DD-B9F9-46EB12BDC51E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {11E67260-BD8D-4D68-88C4-CD1B9AB217E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {11E67260-BD8D-4D68-88C4-CD1B9AB217E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {11E67260-BD8D-4D68-88C4-CD1B9AB217E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {11E67260-BD8D-4D68-88C4-CD1B9AB217E1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {36B5EFBF-DB54-45D4-84F2-1FF794CD8B60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {36B5EFBF-DB54-45D4-84F2-1FF794CD8B60}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {36B5EFBF-DB54-45D4-84F2-1FF794CD8B60}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {36B5EFBF-DB54-45D4-84F2-1FF794CD8B60}.Release|Any CPU.Build.0 = Release|Any CPU
+ {71B2D69D-C193-4EF9-AF84-70105B653DF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {71B2D69D-C193-4EF9-AF84-70105B653DF0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {71B2D69D-C193-4EF9-AF84-70105B653DF0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {71B2D69D-C193-4EF9-AF84-70105B653DF0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F779A92C-38ED-4301-8899-6C3FE63DFD72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F779A92C-38ED-4301-8899-6C3FE63DFD72}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F779A92C-38ED-4301-8899-6C3FE63DFD72}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F779A92C-38ED-4301-8899-6C3FE63DFD72}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4A970FA4-1C4F-426C-A0DC-0E36B1BA0FDE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4A970FA4-1C4F-426C-A0DC-0E36B1BA0FDE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4A970FA4-1C4F-426C-A0DC-0E36B1BA0FDE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4A970FA4-1C4F-426C-A0DC-0E36B1BA0FDE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DBA4F8DB-A309-40D2-B8DD-7B1621458789}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DBA4F8DB-A309-40D2-B8DD-7B1621458789}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DBA4F8DB-A309-40D2-B8DD-7B1621458789}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DBA4F8DB-A309-40D2-B8DD-7B1621458789}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E414691C-2B2A-4D5A-BBDA-0B5A3D85B5D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E414691C-2B2A-4D5A-BBDA-0B5A3D85B5D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E414691C-2B2A-4D5A-BBDA-0B5A3D85B5D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E414691C-2B2A-4D5A-BBDA-0B5A3D85B5D1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F7C5D48A-ABE7-4E90-B6EB-272DB46F475B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F7C5D48A-ABE7-4E90-B6EB-272DB46F475B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F7C5D48A-ABE7-4E90-B6EB-272DB46F475B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F7C5D48A-ABE7-4E90-B6EB-272DB46F475B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7FA842E4-4A08-40BE-9713-5C768C7A669C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7FA842E4-4A08-40BE-9713-5C768C7A669C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7FA842E4-4A08-40BE-9713-5C768C7A669C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7FA842E4-4A08-40BE-9713-5C768C7A669C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {231A8A2B-469C-4470-BE6C-E93AEE49DC70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {231A8A2B-469C-4470-BE6C-E93AEE49DC70}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {231A8A2B-469C-4470-BE6C-E93AEE49DC70}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {231A8A2B-469C-4470-BE6C-E93AEE49DC70}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3F42B596-9CB9-43CB-A2F2-E28FC8C8BC20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3F42B596-9CB9-43CB-A2F2-E28FC8C8BC20}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3F42B596-9CB9-43CB-A2F2-E28FC8C8BC20}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3F42B596-9CB9-43CB-A2F2-E28FC8C8BC20}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E746B1CA-0357-4BC5-868F-98581EFD1085}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E746B1CA-0357-4BC5-868F-98581EFD1085}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E746B1CA-0357-4BC5-868F-98581EFD1085}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E746B1CA-0357-4BC5-868F-98581EFD1085}.Release|Any CPU.Build.0 = Release|Any CPU
+ {87F1CA5F-4C4B-40A2-8188-DA040D2146D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {87F1CA5F-4C4B-40A2-8188-DA040D2146D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {87F1CA5F-4C4B-40A2-8188-DA040D2146D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {87F1CA5F-4C4B-40A2-8188-DA040D2146D2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {45662575-99E5-42F5-98BC-5CDC4B66AD62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {45662575-99E5-42F5-98BC-5CDC4B66AD62}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {45662575-99E5-42F5-98BC-5CDC4B66AD62}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {45662575-99E5-42F5-98BC-5CDC4B66AD62}.Release|Any CPU.Build.0 = Release|Any CPU
+ {75907746-5BE0-4B42-9846-625758FD8146}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {75907746-5BE0-4B42-9846-625758FD8146}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {75907746-5BE0-4B42-9846-625758FD8146}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {75907746-5BE0-4B42-9846-625758FD8146}.Release|Any CPU.Build.0 = Release|Any CPU
+ {41A0191C-D1E1-4DDF-A4F5-A47C7C20A3AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {41A0191C-D1E1-4DDF-A4F5-A47C7C20A3AA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {41A0191C-D1E1-4DDF-A4F5-A47C7C20A3AA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {41A0191C-D1E1-4DDF-A4F5-A47C7C20A3AA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F6EEBE46-4F72-401F-B3FF-3B18CE617478}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F6EEBE46-4F72-401F-B3FF-3B18CE617478}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F6EEBE46-4F72-401F-B3FF-3B18CE617478}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F6EEBE46-4F72-401F-B3FF-3B18CE617478}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EA034B8C-9CF1-498D-AC74-FF2F039FE37A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EA034B8C-9CF1-498D-AC74-FF2F039FE37A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EA034B8C-9CF1-498D-AC74-FF2F039FE37A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EA034B8C-9CF1-498D-AC74-FF2F039FE37A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {87F0ECFB-144F-499E-995E-F2B61DC20015}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {87F0ECFB-144F-499E-995E-F2B61DC20015}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {87F0ECFB-144F-499E-995E-F2B61DC20015}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {87F0ECFB-144F-499E-995E-F2B61DC20015}.Release|Any CPU.Build.0 = Release|Any CPU
+ {67B45B2E-9682-417D-964B-30DBCE4321CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {67B45B2E-9682-417D-964B-30DBCE4321CE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {67B45B2E-9682-417D-964B-30DBCE4321CE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {67B45B2E-9682-417D-964B-30DBCE4321CE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F4F5C1F7-28F3-4297-ACD7-DBB6E6F89E68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F4F5C1F7-28F3-4297-ACD7-DBB6E6F89E68}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F4F5C1F7-28F3-4297-ACD7-DBB6E6F89E68}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F4F5C1F7-28F3-4297-ACD7-DBB6E6F89E68}.Release|Any CPU.Build.0 = Release|Any CPU
+ {504A06C9-2A3D-4456-8F61-DCB35C6F93F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {504A06C9-2A3D-4456-8F61-DCB35C6F93F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {504A06C9-2A3D-4456-8F61-DCB35C6F93F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {504A06C9-2A3D-4456-8F61-DCB35C6F93F3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {07982F9D-F65B-4FDA-8CF6-1D0A9EAA32B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {07982F9D-F65B-4FDA-8CF6-1D0A9EAA32B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {07982F9D-F65B-4FDA-8CF6-1D0A9EAA32B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {07982F9D-F65B-4FDA-8CF6-1D0A9EAA32B8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9749B052-5F3D-4442-9B2E-9EC798457DB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9749B052-5F3D-4442-9B2E-9EC798457DB5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9749B052-5F3D-4442-9B2E-9EC798457DB5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9749B052-5F3D-4442-9B2E-9EC798457DB5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2161EFEA-7654-4810-85A0-18293825FFBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2161EFEA-7654-4810-85A0-18293825FFBC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2161EFEA-7654-4810-85A0-18293825FFBC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2161EFEA-7654-4810-85A0-18293825FFBC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4E4856BA-A71F-4753-A497-6F3D197BB455}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4E4856BA-A71F-4753-A497-6F3D197BB455}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4E4856BA-A71F-4753-A497-6F3D197BB455}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4E4856BA-A71F-4753-A497-6F3D197BB455}.Release|Any CPU.Build.0 = Release|Any CPU
+ {ABA5A546-28DB-4E54-987D-D828B2F79B9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {ABA5A546-28DB-4E54-987D-D828B2F79B9D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {ABA5A546-28DB-4E54-987D-D828B2F79B9D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {ABA5A546-28DB-4E54-987D-D828B2F79B9D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {50E73D29-F11D-4CBD-8A85-CC34F4DE8C31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {50E73D29-F11D-4CBD-8A85-CC34F4DE8C31}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {50E73D29-F11D-4CBD-8A85-CC34F4DE8C31}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {50E73D29-F11D-4CBD-8A85-CC34F4DE8C31}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B66BDD25-49B8-4823-A678-93BC081D65ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B66BDD25-49B8-4823-A678-93BC081D65ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B66BDD25-49B8-4823-A678-93BC081D65ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B66BDD25-49B8-4823-A678-93BC081D65ED}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5B9EC1B8-DA44-4747-9806-A0F34CDE388B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5B9EC1B8-DA44-4747-9806-A0F34CDE388B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5B9EC1B8-DA44-4747-9806-A0F34CDE388B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5B9EC1B8-DA44-4747-9806-A0F34CDE388B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {04635BE3-67F0-4AB6-BB68-607E73040F07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {04635BE3-67F0-4AB6-BB68-607E73040F07}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {04635BE3-67F0-4AB6-BB68-607E73040F07}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {04635BE3-67F0-4AB6-BB68-607E73040F07}.Release|Any CPU.Build.0 = Release|Any CPU
+ {75DE5DA1-8EDA-42EE-8570-169713ECB9CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {75DE5DA1-8EDA-42EE-8570-169713ECB9CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {75DE5DA1-8EDA-42EE-8570-169713ECB9CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {75DE5DA1-8EDA-42EE-8570-169713ECB9CD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AF943646-1D48-492D-8C7A-48606F7B36B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AF943646-1D48-492D-8C7A-48606F7B36B0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AF943646-1D48-492D-8C7A-48606F7B36B0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AF943646-1D48-492D-8C7A-48606F7B36B0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {80125670-3650-4E72-A172-CA852FE5C98D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {80125670-3650-4E72-A172-CA852FE5C98D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {80125670-3650-4E72-A172-CA852FE5C98D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {80125670-3650-4E72-A172-CA852FE5C98D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4C8B284F-A216-4812-912F-7CC6F428CDF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4C8B284F-A216-4812-912F-7CC6F428CDF6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4C8B284F-A216-4812-912F-7CC6F428CDF6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4C8B284F-A216-4812-912F-7CC6F428CDF6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2DDC4639-710D-4B9C-98E0-03288184B37C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2DDC4639-710D-4B9C-98E0-03288184B37C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2DDC4639-710D-4B9C-98E0-03288184B37C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2DDC4639-710D-4B9C-98E0-03288184B37C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9B65C2C8-E94E-46FD-9841-70DFAE5C85E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9B65C2C8-E94E-46FD-9841-70DFAE5C85E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9B65C2C8-E94E-46FD-9841-70DFAE5C85E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9B65C2C8-E94E-46FD-9841-70DFAE5C85E9}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {554AD327-6DBA-4F8F-96F8-81CE7A0C863F} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {1A94A50E-06DC-43C1-80B5-B662820EC3EB} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {C956DD76-69C8-4A9C-83EA-D17DF83340FD} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {CA9AC87F-097E-4F15-8393-4BC07735A5B0} = {2C861ADD-76E9-4B3B-8A3C-638EBB67D683}
+ {04DBDB01-70F4-4E06-B468-8F87850B22BE} = {2C861ADD-76E9-4B3B-8A3C-638EBB67D683}
+ {50B2631D-129C-47B3-A587-029CCD6099BC} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
+ {42F719ED-8413-4895-B5B4-5AB56079BC66} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {520659C8-C734-4298-A3DA-B539DB9DFC0B} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {4164BDF7-F527-4E85-9CE6-E3C2D7426A27} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {3B5A0094-670D-4BB1-BFDD-61B88A8773DC} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
+ {91853F21-9CD9-4132-BC29-A7D5D84FFFE7} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
+ {E512F4D9-9375-480F-A2F6-A46509F9D824} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
+ {EF480016-9127-4916-8735-D2466BDBC582} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
+ {AA94D832-1CCC-4715-95A9-A483F23A1A5D} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {EB2B8705-18E7-49E1-A565-93A6DE5570D5} = {F8A8EB2A-2D4B-464F-9A13-F8F7B6A8FAA3}
+ {E28AECBD-2904-477C-9817-C67312330A41} = {EB2B8705-18E7-49E1-A565-93A6DE5570D5}
+ {120FE15B-3E5C-4BFF-B874-F09235C9E1ED} = {EB2B8705-18E7-49E1-A565-93A6DE5570D5}
+ {3E69D96A-F923-4AC4-8430-9AAB84B6A3FE} = {E28AECBD-2904-477C-9817-C67312330A41}
+ {F475DD35-9F27-43FF-9D96-365661ADC3C6} = {E28AECBD-2904-477C-9817-C67312330A41}
+ {34B5BCF2-95C0-4136-AC9E-FC80D8ACBD1C} = {E28AECBD-2904-477C-9817-C67312330A41}
+ {4ADEEE7D-7886-4F85-BAA2-CCEE6E30EBFD} = {E28AECBD-2904-477C-9817-C67312330A41}
+ {10DF0925-A1EE-4B1C-AAF6-249C6D02424C} = {E28AECBD-2904-477C-9817-C67312330A41}
+ {0880AA9C-0E45-43B3-B02A-093736CDD961} = {E28AECBD-2904-477C-9817-C67312330A41}
+ {B3554E2E-7150-482F-A08F-DCB8BD166FED} = {E28AECBD-2904-477C-9817-C67312330A41}
+ {22A3A359-C6F4-4540-A61F-C8E94A73C95E} = {120FE15B-3E5C-4BFF-B874-F09235C9E1ED}
+ {FCE5BD62-F7C7-45EA-80DE-B4880C4A84C6} = {120FE15B-3E5C-4BFF-B874-F09235C9E1ED}
+ {19A921F2-1587-4E94-A023-B81956874DAB} = {120FE15B-3E5C-4BFF-B874-F09235C9E1ED}
+ {91A3257D-0D1A-479D-8F3C-DBB1944802FE} = {120FE15B-3E5C-4BFF-B874-F09235C9E1ED}
+ {9C53260A-6F4B-4106-98B0-EDCC10BB3E1A} = {F8A8EB2A-2D4B-464F-9A13-F8F7B6A8FAA3}
+ {D1CFD035-1562-42CF-A96A-0E2EA8D92E80} = {9C53260A-6F4B-4106-98B0-EDCC10BB3E1A}
+ {E76E35FC-B62E-48D5-A7AF-79375CFD20BD} = {9C53260A-6F4B-4106-98B0-EDCC10BB3E1A}
+ {5E6550EA-D878-455C-8EF7-5382661C1D52} = {D1CFD035-1562-42CF-A96A-0E2EA8D92E80}
+ {14CDCC5A-006A-41EC-8B48-F3EFAC842432} = {D1CFD035-1562-42CF-A96A-0E2EA8D92E80}
+ {11C6A285-8BC0-44C9-9FAB-F93462C75ABC} = {D1CFD035-1562-42CF-A96A-0E2EA8D92E80}
+ {C7EB7304-CADD-4F09-84AC-43123406B28F} = {D1CFD035-1562-42CF-A96A-0E2EA8D92E80}
+ {DE15C716-E1C3-4FC3-B976-7EA06EBF23F5} = {D1CFD035-1562-42CF-A96A-0E2EA8D92E80}
+ {430D3AF9-DCCF-4B6F-BFAF-1ECC2F0594A2} = {D1CFD035-1562-42CF-A96A-0E2EA8D92E80}
+ {CC104C76-0CC6-453E-A49D-C4995B6EB72B} = {D1CFD035-1562-42CF-A96A-0E2EA8D92E80}
+ {13AF64F3-8962-4568-A0E1-833CCA1922D5} = {E76E35FC-B62E-48D5-A7AF-79375CFD20BD}
+ {F9FADD90-8634-4B03-AC44-9F6C80B30E73} = {E76E35FC-B62E-48D5-A7AF-79375CFD20BD}
+ {8BC28722-20CC-41BD-B183-4E33E94CA2A7} = {E76E35FC-B62E-48D5-A7AF-79375CFD20BD}
+ {6A398750-D7D8-43DC-8DF8-AA65C5766154} = {E76E35FC-B62E-48D5-A7AF-79375CFD20BD}
+ {5AACD0EE-F2B2-49F6-868F-8FE08D7243C0} = {9C53260A-6F4B-4106-98B0-EDCC10BB3E1A}
+ {8D196E3D-6F95-4793-B948-79669AF09017} = {5AACD0EE-F2B2-49F6-868F-8FE08D7243C0}
+ {8C1B8C6C-C518-4290-B070-622CCA6004DA} = {2C861ADD-76E9-4B3B-8A3C-638EBB67D683}
+ {FB20372D-6C96-4733-9AAC-12522F15CAA6} = {8C1B8C6C-C518-4290-B070-622CCA6004DA}
+ {A091AE9B-3A1E-49AC-9AD5-D29310512A3D} = {6434E3F2-B352-4B30-839A-88C2BA166D96}
+ {C018EFF9-579E-43B3-9181-543BE95E2E03} = {6434E3F2-B352-4B30-839A-88C2BA166D96}
+ {D9108313-8D05-4F5F-9AA0-B443EC3374B6} = {5C304CBC-F30D-413C-A0AF-8B6814A2D4A3}
+ {F604F9BE-CAAB-4D94-8989-22DE4D966C7A} = {F8A8EB2A-2D4B-464F-9A13-F8F7B6A8FAA3}
+ {C188A1F4-9601-42E5-9A0A-B282E13EAC41} = {F604F9BE-CAAB-4D94-8989-22DE4D966C7A}
+ {2CC8E555-AA80-4D7A-B606-0821E6754187} = {F604F9BE-CAAB-4D94-8989-22DE4D966C7A}
+ {40BF21CB-4520-45A6-A588-5FFB95BAC87C} = {F604F9BE-CAAB-4D94-8989-22DE4D966C7A}
+ {866B0894-2B50-484E-BE7E-F221956557F3} = {2CC8E555-AA80-4D7A-B606-0821E6754187}
+ {E7B2B79A-09D3-4B7D-83A1-F6DE57E8584B} = {2CC8E555-AA80-4D7A-B606-0821E6754187}
+ {3B5E4384-9E08-46A6-B526-DF198823D7C8} = {2CC8E555-AA80-4D7A-B606-0821E6754187}
+ {23BCC55E-3D30-4E4E-8489-15A5894EE480} = {2CC8E555-AA80-4D7A-B606-0821E6754187}
+ {81B29ECF-F004-4DC6-9126-2E45B02C2DFE} = {2CC8E555-AA80-4D7A-B606-0821E6754187}
+ {65270240-0157-423A-9115-EAE2992E2FE7} = {2CC8E555-AA80-4D7A-B606-0821E6754187}
+ {72C8D8FA-9B61-415F-8FAF-08BC7BD13E9C} = {2CC8E555-AA80-4D7A-B606-0821E6754187}
+ {E6D3F0F8-0683-4A00-8459-C9C4C65D825D} = {40BF21CB-4520-45A6-A588-5FFB95BAC87C}
+ {C912E1E7-4F8F-4ADB-BB27-D40B1903FED0} = {40BF21CB-4520-45A6-A588-5FFB95BAC87C}
+ {80E12564-E2B3-4307-B40E-20E24BF02916} = {40BF21CB-4520-45A6-A588-5FFB95BAC87C}
+ {78589964-923E-4803-9B74-183487C3ED0F} = {40BF21CB-4520-45A6-A588-5FFB95BAC87C}
+ {831CD22A-AC6E-4515-AB24-8C96B34C717F} = {C188A1F4-9601-42E5-9A0A-B282E13EAC41}
+ {27C7A0E6-4C2E-4AFF-9DE7-1F526DDC0D18} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {7971DF5A-B001-4751-8F40-D7752C612BF1} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
+ {7FF93622-971D-4B30-A5FC-72D729D26E29} = {EB2B8705-18E7-49E1-A565-93A6DE5570D5}
+ {FA5E029F-1826-4C1E-8AED-6FA5C3362A3A} = {7FF93622-971D-4B30-A5FC-72D729D26E29}
+ {C2FE6BA0-3DE5-403F-A91F-BCB9ADA5B068} = {F8A8EB2A-2D4B-464F-9A13-F8F7B6A8FAA3}
+ {4E6D558B-CA6D-4133-8701-FDC6F245DA37} = {C2FE6BA0-3DE5-403F-A91F-BCB9ADA5B068}
+ {AF419621-2F14-45CE-AF1B-B688E1B21BCB} = {C2FE6BA0-3DE5-403F-A91F-BCB9ADA5B068}
+ {6464122A-1DC2-45E8-B599-4B5C32FBC85B} = {C2FE6BA0-3DE5-403F-A91F-BCB9ADA5B068}
+ {97EE641B-69AB-40A6-B20B-4A7FD3B2681E} = {AF419621-2F14-45CE-AF1B-B688E1B21BCB}
+ {0EE57014-A75A-4E54-97B6-785C2F874EA4} = {AF419621-2F14-45CE-AF1B-B688E1B21BCB}
+ {4F5841EB-A0C9-4E89-AA02-376F2190F68D} = {AF419621-2F14-45CE-AF1B-B688E1B21BCB}
+ {C4E1B96F-7905-48ED-AD72-98F5983E65A5} = {AF419621-2F14-45CE-AF1B-B688E1B21BCB}
+ {95385FBA-53E4-4144-B6FE-B5561081B9F9} = {AF419621-2F14-45CE-AF1B-B688E1B21BCB}
+ {4D808FF7-C204-40F1-881D-21B27D8D290E} = {AF419621-2F14-45CE-AF1B-B688E1B21BCB}
+ {354E0590-F6B2-43F5-A563-F543C498F3EA} = {AF419621-2F14-45CE-AF1B-B688E1B21BCB}
+ {47F2E236-E6BE-4F52-8389-5CF03BDC9B78} = {6464122A-1DC2-45E8-B599-4B5C32FBC85B}
+ {9ECCC0EC-CC5A-4E49-96BE-3F2B15CCD94D} = {6464122A-1DC2-45E8-B599-4B5C32FBC85B}
+ {2BACB63E-2830-4371-AEBB-E8089E3EB316} = {6464122A-1DC2-45E8-B599-4B5C32FBC85B}
+ {19A28EF9-A5AE-4EC5-851C-D2547E5FE29C} = {6464122A-1DC2-45E8-B599-4B5C32FBC85B}
+ {26765303-B9D8-457B-915C-ED869CEEB210} = {4E6D558B-CA6D-4133-8701-FDC6F245DA37}
+ {7BE85EBC-99AD-4CDE-957E-4BDD087FC4E3} = {CC2EBB07-A070-4158-AB37-A0C0BBAEA9F5}
+ {D1A86DB0-DABB-47B6-BC71-C49318AF5534} = {7BE85EBC-99AD-4CDE-957E-4BDD087FC4E3}
+ {F22611C1-0DAE-408D-B034-7005906536F6} = {7BE85EBC-99AD-4CDE-957E-4BDD087FC4E3}
+ {EF7D01D6-9F90-4E24-B134-BA13E9965D78} = {7BE85EBC-99AD-4CDE-957E-4BDD087FC4E3}
+ {EFC415F8-872F-4C7E-8645-31A51481BCFC} = {CC2EBB07-A070-4158-AB37-A0C0BBAEA9F5}
+ {800A02FA-EA70-4492-9A93-13C820692F1D} = {EFC415F8-872F-4C7E-8645-31A51481BCFC}
+ {A7206D58-8107-4BB9-8962-30C845ACB6DC} = {EFC415F8-872F-4C7E-8645-31A51481BCFC}
+ {073D8348-DDEE-42EE-B34B-888A68FA296D} = {F8A8EB2A-2D4B-464F-9A13-F8F7B6A8FAA3}
+ {ED9C412B-0D49-46A3-B11F-669D2DC4A4EB} = {073D8348-DDEE-42EE-B34B-888A68FA296D}
+ {2F21DF25-C489-4BCD-8460-41BF0500E17F} = {073D8348-DDEE-42EE-B34B-888A68FA296D}
+ {3FE23400-A323-46ED-A7F4-30BFF8916D64} = {073D8348-DDEE-42EE-B34B-888A68FA296D}
+ {42812354-1C2C-45C0-91FE-056851CFA835} = {2F21DF25-C489-4BCD-8460-41BF0500E17F}
+ {7491214D-0335-47F2-9AE8-92A68CA0EA75} = {2F21DF25-C489-4BCD-8460-41BF0500E17F}
+ {451999B4-0BE6-4ADD-9B8F-5905AEF63D94} = {2F21DF25-C489-4BCD-8460-41BF0500E17F}
+ {84592572-EC8B-49A3-8F42-83438F0CEE97} = {2F21DF25-C489-4BCD-8460-41BF0500E17F}
+ {4AA19933-C5EE-47BC-8AC7-688D02117F69} = {2F21DF25-C489-4BCD-8460-41BF0500E17F}
+ {E63AA900-9DF1-4E11-9D36-6F325F3BCB11} = {2F21DF25-C489-4BCD-8460-41BF0500E17F}
+ {626C3566-C5D5-4A1C-B9BB-A766C1608B86} = {2F21DF25-C489-4BCD-8460-41BF0500E17F}
+ {25A9FE86-420E-4B21-A1D4-6BFE76E79790} = {ED9C412B-0D49-46A3-B11F-669D2DC4A4EB}
+ {C662D24D-4EB6-425E-B63B-CAD944ABF689} = {3FE23400-A323-46ED-A7F4-30BFF8916D64}
+ {8872921C-5BF9-4B4C-B882-6AF8CC78D2CF} = {3FE23400-A323-46ED-A7F4-30BFF8916D64}
+ {E5994C85-C1C2-44F3-BF10-3277CA6CF2C9} = {3FE23400-A323-46ED-A7F4-30BFF8916D64}
+ {15852D6F-4110-4B98-B89D-5747777E8908} = {3FE23400-A323-46ED-A7F4-30BFF8916D64}
+ {68C902A2-A604-4F3A-879D-37941C00C7A9} = {7BE85EBC-99AD-4CDE-957E-4BDD087FC4E3}
+ {8D5BD955-FFDC-4895-927F-624C42B64A92} = {7BE85EBC-99AD-4CDE-957E-4BDD087FC4E3}
+ {B7A68103-D527-421F-8247-5D169A7F8931} = {7BE85EBC-99AD-4CDE-957E-4BDD087FC4E3}
+ {9FC0330B-FD17-49B8-AC45-C2D10D2BDC16} = {E57C6A28-1879-4E83-9B0D-E665824A1F4B}
+ {94048D54-F513-4557-A8DF-F00F6A60FF5B} = {9FC0330B-FD17-49B8-AC45-C2D10D2BDC16}
+ {7AF66531-6B7B-4F27-BDEF-308FD9C2E286} = {9FC0330B-FD17-49B8-AC45-C2D10D2BDC16}
+ {634E34FF-58F4-4FE9-BE51-3B8F6BD9CA70} = {9FC0330B-FD17-49B8-AC45-C2D10D2BDC16}
+ {8C9756D3-DAA3-4D94-A365-8A890411887F} = {94048D54-F513-4557-A8DF-F00F6A60FF5B}
+ {4FBAB41E-7F2E-4488-81AF-74D2D8C8DDBA} = {94048D54-F513-4557-A8DF-F00F6A60FF5B}
+ {96AF0729-9782-4AEE-8641-85C91CA4DF09} = {94048D54-F513-4557-A8DF-F00F6A60FF5B}
+ {6C51D48F-E06F-4B8B-A322-F8A8035C1591} = {94048D54-F513-4557-A8DF-F00F6A60FF5B}
+ {890F07CE-345B-4380-BBE4-AD3AF6658100} = {94048D54-F513-4557-A8DF-F00F6A60FF5B}
+ {C039423D-85FF-42A8-86D5-DC0EA1376DBE} = {94048D54-F513-4557-A8DF-F00F6A60FF5B}
+ {A4E1DBD3-1961-48DD-B9F9-46EB12BDC51E} = {94048D54-F513-4557-A8DF-F00F6A60FF5B}
+ {11E67260-BD8D-4D68-88C4-CD1B9AB217E1} = {634E34FF-58F4-4FE9-BE51-3B8F6BD9CA70}
+ {36B5EFBF-DB54-45D4-84F2-1FF794CD8B60} = {634E34FF-58F4-4FE9-BE51-3B8F6BD9CA70}
+ {71B2D69D-C193-4EF9-AF84-70105B653DF0} = {634E34FF-58F4-4FE9-BE51-3B8F6BD9CA70}
+ {F779A92C-38ED-4301-8899-6C3FE63DFD72} = {634E34FF-58F4-4FE9-BE51-3B8F6BD9CA70}
+ {4A970FA4-1C4F-426C-A0DC-0E36B1BA0FDE} = {7AF66531-6B7B-4F27-BDEF-308FD9C2E286}
+ {43CB54D7-3511-40F4-BC70-9A34E09D7A62} = {E57C6A28-1879-4E83-9B0D-E665824A1F4B}
+ {6A40770E-9DE1-4F15-80E8-8FCA090A749C} = {E57C6A28-1879-4E83-9B0D-E665824A1F4B}
+ {7B757E2D-B5A1-4BFE-9BB2-93CD04E4B28B} = {43CB54D7-3511-40F4-BC70-9A34E09D7A62}
+ {C7AEB4C8-BAE7-4A19-B96E-011FA56ED6A5} = {7B757E2D-B5A1-4BFE-9BB2-93CD04E4B28B}
+ {18E9B97A-3897-4DA8-810E-4435A777ABA7} = {7B757E2D-B5A1-4BFE-9BB2-93CD04E4B28B}
+ {09CFDF18-4924-44D4-A987-EB9713787FF8} = {7B757E2D-B5A1-4BFE-9BB2-93CD04E4B28B}
+ {11801334-CC4A-45F3-BD38-793D4F9D4D4F} = {6A40770E-9DE1-4F15-80E8-8FCA090A749C}
+ {AF8A0F3B-B346-466C-87F7-F2405E6158FE} = {11801334-CC4A-45F3-BD38-793D4F9D4D4F}
+ {EA151482-0987-49E0-96A8-2CD876BC8B6E} = {11801334-CC4A-45F3-BD38-793D4F9D4D4F}
+ {15456C15-58A1-45F6-BBA7-53504210B30D} = {11801334-CC4A-45F3-BD38-793D4F9D4D4F}
+ {DBA4F8DB-A309-40D2-B8DD-7B1621458789} = {AF8A0F3B-B346-466C-87F7-F2405E6158FE}
+ {E414691C-2B2A-4D5A-BBDA-0B5A3D85B5D1} = {AF8A0F3B-B346-466C-87F7-F2405E6158FE}
+ {F7C5D48A-ABE7-4E90-B6EB-272DB46F475B} = {AF8A0F3B-B346-466C-87F7-F2405E6158FE}
+ {7FA842E4-4A08-40BE-9713-5C768C7A669C} = {AF8A0F3B-B346-466C-87F7-F2405E6158FE}
+ {231A8A2B-469C-4470-BE6C-E93AEE49DC70} = {AF8A0F3B-B346-466C-87F7-F2405E6158FE}
+ {3F42B596-9CB9-43CB-A2F2-E28FC8C8BC20} = {AF8A0F3B-B346-466C-87F7-F2405E6158FE}
+ {E746B1CA-0357-4BC5-868F-98581EFD1085} = {AF8A0F3B-B346-466C-87F7-F2405E6158FE}
+ {87F1CA5F-4C4B-40A2-8188-DA040D2146D2} = {AF8A0F3B-B346-466C-87F7-F2405E6158FE}
+ {45662575-99E5-42F5-98BC-5CDC4B66AD62} = {AF8A0F3B-B346-466C-87F7-F2405E6158FE}
+ {75907746-5BE0-4B42-9846-625758FD8146} = {15456C15-58A1-45F6-BBA7-53504210B30D}
+ {41A0191C-D1E1-4DDF-A4F5-A47C7C20A3AA} = {15456C15-58A1-45F6-BBA7-53504210B30D}
+ {F6EEBE46-4F72-401F-B3FF-3B18CE617478} = {15456C15-58A1-45F6-BBA7-53504210B30D}
+ {EA034B8C-9CF1-498D-AC74-FF2F039FE37A} = {15456C15-58A1-45F6-BBA7-53504210B30D}
+ {87F0ECFB-144F-499E-995E-F2B61DC20015} = {15456C15-58A1-45F6-BBA7-53504210B30D}
+ {67B45B2E-9682-417D-964B-30DBCE4321CE} = {EA151482-0987-49E0-96A8-2CD876BC8B6E}
+ {F4F5C1F7-28F3-4297-ACD7-DBB6E6F89E68} = {C7AEB4C8-BAE7-4A19-B96E-011FA56ED6A5}
+ {504A06C9-2A3D-4456-8F61-DCB35C6F93F3} = {C7AEB4C8-BAE7-4A19-B96E-011FA56ED6A5}
+ {07982F9D-F65B-4FDA-8CF6-1D0A9EAA32B8} = {C7AEB4C8-BAE7-4A19-B96E-011FA56ED6A5}
+ {9749B052-5F3D-4442-9B2E-9EC798457DB5} = {C7AEB4C8-BAE7-4A19-B96E-011FA56ED6A5}
+ {2161EFEA-7654-4810-85A0-18293825FFBC} = {C7AEB4C8-BAE7-4A19-B96E-011FA56ED6A5}
+ {4E4856BA-A71F-4753-A497-6F3D197BB455} = {C7AEB4C8-BAE7-4A19-B96E-011FA56ED6A5}
+ {ABA5A546-28DB-4E54-987D-D828B2F79B9D} = {C7AEB4C8-BAE7-4A19-B96E-011FA56ED6A5}
+ {50E73D29-F11D-4CBD-8A85-CC34F4DE8C31} = {C7AEB4C8-BAE7-4A19-B96E-011FA56ED6A5}
+ {B66BDD25-49B8-4823-A678-93BC081D65ED} = {C7AEB4C8-BAE7-4A19-B96E-011FA56ED6A5}
+ {5B9EC1B8-DA44-4747-9806-A0F34CDE388B} = {09CFDF18-4924-44D4-A987-EB9713787FF8}
+ {04635BE3-67F0-4AB6-BB68-607E73040F07} = {09CFDF18-4924-44D4-A987-EB9713787FF8}
+ {75DE5DA1-8EDA-42EE-8570-169713ECB9CD} = {18E9B97A-3897-4DA8-810E-4435A777ABA7}
+ {AF943646-1D48-492D-8C7A-48606F7B36B0} = {18E9B97A-3897-4DA8-810E-4435A777ABA7}
+ {80125670-3650-4E72-A172-CA852FE5C98D} = {18E9B97A-3897-4DA8-810E-4435A777ABA7}
+ {4C8B284F-A216-4812-912F-7CC6F428CDF6} = {18E9B97A-3897-4DA8-810E-4435A777ABA7}
+ {2DDC4639-710D-4B9C-98E0-03288184B37C} = {18E9B97A-3897-4DA8-810E-4435A777ABA7}
+ {9B65C2C8-E94E-46FD-9841-70DFAE5C85E9} = {EFC415F8-872F-4C7E-8645-31A51481BCFC}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {28315BFD-90E7-4E14-A2EA-F3D23AF4126F}
+ EndGlobalSection
+EndGlobal
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion.AbpPro.Cli.Core.csproj b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion.AbpPro.Cli.Core.csproj
new file mode 100644
index 00000000..40d54bb1
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion.AbpPro.Cli.Core.csproj
@@ -0,0 +1,20 @@
+
+
+
+ net7.0
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/AbpCliOptions.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/AbpCliOptions.cs
new file mode 100644
index 00000000..0eb00fa6
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/AbpCliOptions.cs
@@ -0,0 +1,17 @@
+namespace Lion.AbpPro.Cli;
+
+public class AbpCliOptions
+{
+ public Dictionary Commands { get; }
+
+
+ ///
+ /// Default value: "abppro".
+ ///
+ public string ToolName { get; set; } = "abppro";
+
+ public AbpCliOptions()
+ {
+ Commands = new Dictionary(StringComparer.OrdinalIgnoreCase);
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/AbpProCliCoreModule.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/AbpProCliCoreModule.cs
new file mode 100644
index 00000000..e9b9d275
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/AbpProCliCoreModule.cs
@@ -0,0 +1,50 @@
+using Lion.AbpPro.Cli.Commands;
+using Volo.Abp.Domain;
+using Volo.Abp.Modularity;
+
+namespace Lion.AbpPro.Cli;
+
+[DependsOn(
+ typeof(AbpDddDomainModule)
+)]
+public class AbpProCliCoreModule : AbpModule
+{
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options => { options.Commands[HelpCommand.Name] = typeof(HelpCommand); });
+ Configure(options => { options.Commands[NewCommand.Name] = typeof(NewCommand); });
+
+ Configure(options =>
+ {
+ options.Owner = "WangJunZzz";
+ options.RepositoryId = "abp-vnext-pro";
+ options.Token = "abp-vnext-proghp_47vqiabp-vnext-provNkHKJguOJkdHvnxUabp-vnext-protij7Qbdn1Qy3fUabp-vnext-pro";
+ options.Templates = new List()
+ {
+ new LionAbpProTemplateOptions("abp-vnext-pro", "abp.vnext.pro", "源码版本", true)
+ {
+ ExcludeFiles = "templates,docs,.github,LICENSE,Readme.md",
+ ReplaceSuffix = ".sln,.csproj,.cs,.cshtml,.json,.ci,.yml,.yaml,.nswag,.DotSettings,.env",
+ },
+ new LionAbpProTemplateOptions("abp-vnext-pro-nuget-all", "abp.vnext.pro.nuget.all", "Nuget完整版本")
+ {
+ ExcludeFiles = "aspnet-core,vben28,abp-vnext-pro-nuget-module,abp-vnext-pro-nuget-simplify,docs,.github,LICENSE,Readme.md",
+ ReplaceSuffix = ".sln,.csproj,.cs,.cshtml,.json,.ci,.yml,.yaml,.nswag,.DotSettings,.env",
+ },
+ new LionAbpProTemplateOptions("abp-vnext-pro-nuget-simplify", "abp.vnext.pro.nuget.simplify", "Nuget简单版本")
+ {
+ ExcludeFiles = "aspnet-core,vben28,abp-vnext-pro-nuget-module,abp-vnext-pro-nuget-all,docs,.github,LICENSE,Readme.md",
+ ReplaceSuffix = ".sln,.csproj,.cs,.cshtml,.json,.ci,.yml,.yaml,.nswag,.DotSettings,.env",
+ },
+
+ new LionAbpProTemplateOptions("abp-vnext-pro-nuget-module", "abp.vnext.pro.nuget.module", "模块")
+ {
+ ExcludeFiles = "aspnet-core,vben28,abp-vnext-pro-nuget-all,abp-vnext-pro-nuget-simplify,docs,.github,LICENSE,Readme.md",
+ ReplaceSuffix = ".sln,.csproj,.cs,.cshtml,.json,.ci,.yml,.yaml,.nswag,.DotSettings,.env",
+ },
+ };
+ });
+
+ context.Services.AddHttpClient();
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Args/CommandLineArgs.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Args/CommandLineArgs.cs
new file mode 100644
index 00000000..cbab9724
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Args/CommandLineArgs.cs
@@ -0,0 +1,61 @@
+using Lion.AbpPro.Cli.Commands;
+
+namespace Lion.AbpPro.Cli.Args;
+
+public class CommandLineArgs
+{
+ public string Command { get; }
+
+ public string Target { get; }
+
+
+ public AbpCommandLineOptions Options { get; }
+
+ public CommandLineArgs(string command = null, string target = null)
+ {
+ Command = command;
+ Target = target;
+ Options = new AbpCommandLineOptions();
+ }
+
+ public static CommandLineArgs Empty()
+ {
+ return new CommandLineArgs();
+ }
+
+ public bool IsCommand(string command)
+ {
+ return string.Equals(Command, command, StringComparison.OrdinalIgnoreCase);
+ }
+
+ public override string ToString()
+ {
+ var sb = new StringBuilder();
+
+ if (Command != null)
+ {
+ sb.AppendLine($"Command: {Command}");
+ }
+
+ if (Target != null)
+ {
+ sb.AppendLine($"Target: {Target}");
+ }
+
+ if (Options.Any())
+ {
+ sb.AppendLine("Options:");
+ foreach (var option in Options)
+ {
+ sb.AppendLine($" - {option.Key} = {option.Value}");
+ }
+ }
+
+ if (sb.Length <= 0)
+ {
+ sb.Append("");
+ }
+
+ return sb.ToString();
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Args/CommandLineArgumentParser.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Args/CommandLineArgumentParser.cs
new file mode 100644
index 00000000..9e480f26
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Args/CommandLineArgumentParser.cs
@@ -0,0 +1,144 @@
+namespace Lion.AbpPro.Cli.Args;
+
+public class CommandLineArgumentParser : ICommandLineArgumentParser, ITransientDependency
+{
+ public CommandLineArgs Parse(string[] args)
+ {
+ if (args.IsNullOrEmpty())
+ {
+ return CommandLineArgs.Empty();
+ }
+
+ var argumentList = args.ToList();
+
+ //Command
+
+ var command = argumentList[0];
+ argumentList.RemoveAt(0);
+
+ if (!argumentList.Any())
+ {
+ return new CommandLineArgs(command);
+ }
+
+ //Target
+
+ var target = argumentList[0];
+ if (target.StartsWith("-"))
+ {
+ target = null;
+ }
+ else
+ {
+ argumentList.RemoveAt(0);
+ }
+
+ if (!argumentList.Any())
+ {
+ return new CommandLineArgs(command, target);
+ }
+
+ //Options
+
+ var commandLineArgs = new CommandLineArgs(command, target);
+
+ while (argumentList.Any())
+ {
+ var optionName = ParseOptionName(argumentList[0]);
+ argumentList.RemoveAt(0);
+
+ if (!argumentList.Any())
+ {
+ commandLineArgs.Options[optionName] = null;
+ break;
+ }
+
+ if (IsOptionName(argumentList[0]))
+ {
+ commandLineArgs.Options[optionName] = null;
+ continue;
+ }
+
+ commandLineArgs.Options[optionName] = argumentList[0];
+ argumentList.RemoveAt(0);
+ }
+
+ return commandLineArgs;
+ }
+
+ public CommandLineArgs Parse(string lineText)
+ {
+ return Parse(GetArgsArrayFromLine(lineText));
+ }
+
+ private static bool IsOptionName(string argument)
+ {
+ return argument.StartsWith("-") || argument.StartsWith("--");
+ }
+
+ private static string ParseOptionName(string argument)
+ {
+ if (argument.StartsWith("--"))
+ {
+ if (argument.Length <= 2)
+ {
+ throw new ArgumentException("Should specify an option name after '--' prefix!");
+ }
+
+ return argument.RemovePreFix("--");
+ }
+
+ if (argument.StartsWith("-"))
+ {
+ if (argument.Length <= 1)
+ {
+ throw new ArgumentException("Should specify an option name after '-' prefix!");
+ }
+
+ return argument.RemovePreFix("-");
+ }
+
+ throw new ArgumentException("Option names should start with '-' or '--'.");
+ }
+
+ private static string[] GetArgsArrayFromLine(string lineText)
+ {
+ var args = new List();
+ var currentArgBuilder = new StringBuilder();
+ string currentArg = null;
+ bool isInQuotes = false;
+ for (int i = 0; i < lineText.Length; i++)
+ {
+ var c = lineText[i];
+ if (c == ' ' && !isInQuotes)
+ {
+ currentArg = currentArgBuilder.ToString();
+ if (!currentArg.IsNullOrWhiteSpace())
+ {
+ args.Add(currentArg);
+ }
+
+ currentArgBuilder = new StringBuilder();
+ }
+ else
+ {
+ if (c == '\"')
+ {
+ isInQuotes = !isInQuotes;
+ }
+ else
+ {
+ currentArgBuilder.Append(c);
+ }
+ }
+ }
+
+ currentArg = currentArgBuilder.ToString();
+ if (!currentArg.IsNullOrWhiteSpace())
+ {
+ args.Add(currentArg);
+ }
+
+ return args.ToArray();
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Args/CommandOptions.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Args/CommandOptions.cs
new file mode 100644
index 00000000..9c9feb03
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Args/CommandOptions.cs
@@ -0,0 +1,59 @@
+namespace Lion.AbpPro.Cli.Args;
+
+public static class CommandOptions
+{
+
+ ///
+ /// 模板
+ ///
+ public static class Template
+ {
+ public const string Short = "t";
+ public const string Long = "template";
+ }
+
+ ///
+ /// 公司名称
+ ///
+ public static class Company
+ {
+ public const string Short = "c";
+ public const string Long = "company";
+ }
+
+ ///
+ /// 项目名称
+ ///
+ public static class Project
+ {
+ public const string Short = "p";
+ public const string Long = "project";
+ }
+
+ ///
+ /// 模块名称
+ ///
+ public static class Module
+ {
+ public const string Short = "m";
+ public const string Long = "modulle";
+ }
+
+ ///
+ /// 输出目录
+ ///
+ public static class OutputFolder
+ {
+ public const string Short = "o";
+ public const string Long = "output";
+ }
+
+ ///
+ /// 版本
+ ///
+ public static class Version
+ {
+ public const string Short = "v";
+ public const string Long = "version";
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Args/ICommandLineArgumentParser.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Args/ICommandLineArgumentParser.cs
new file mode 100644
index 00000000..eff2ea34
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Args/ICommandLineArgumentParser.cs
@@ -0,0 +1,8 @@
+namespace Lion.AbpPro.Cli.Args;
+
+public interface ICommandLineArgumentParser
+{
+ CommandLineArgs Parse(string[] args);
+
+ CommandLineArgs Parse(string lineText);
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/CliPaths.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/CliPaths.cs
new file mode 100644
index 00000000..fcda2105
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/CliPaths.cs
@@ -0,0 +1,10 @@
+namespace Lion.AbpPro.Cli;
+
+public class CliPaths
+{
+ public static string Log => Path.Combine(AbpRootPath, "logs");
+
+ public static string TemplateCache => Path.Combine(AbpRootPath, "templates");
+
+ public static readonly string AbpRootPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".abp.pro");
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/CliService.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/CliService.cs
new file mode 100644
index 00000000..982188d9
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/CliService.cs
@@ -0,0 +1,50 @@
+using Lion.AbpPro.Cli.Commands;
+using Lion.AbpPro.Cli.Cryptography;
+using Volo.Abp.Domain.Services;
+
+namespace Lion.AbpPro.Cli;
+
+public class CliService : DomainService
+{
+ private readonly ICommandLineArgumentParser _commandLineArgumentParser;
+ private readonly ICommandSelector _commandSelector;
+ private readonly IServiceScopeFactory _serviceScopeFactory;
+ private readonly AbpCliOptions _abpCliOptions;
+
+ public CliService(ICommandLineArgumentParser commandLineArgumentParser,
+ ICommandSelector commandSelector,
+ IServiceScopeFactory serviceScopeFactory,
+ IOptions abpCliOptions)
+ {
+ _commandLineArgumentParser = commandLineArgumentParser;
+ _commandSelector = commandSelector;
+ _serviceScopeFactory = serviceScopeFactory;
+ _abpCliOptions = abpCliOptions.Value;
+ }
+
+ public async Task RunAsync(string[] args)
+ {
+ Logger.LogInformation("ABP Pro CLI (https://https://doc.cncore.club/)");
+ Logger.LogInformation("请输入 lion.abp help 查看所有命令");
+ try
+ {
+ var commandLineArgs = _commandLineArgumentParser.Parse(args);
+ await RunInternalAsync(commandLineArgs);
+ }
+
+ catch (Exception ex)
+ {
+ Logger.LogException(ex);
+ }
+ }
+
+ private async Task RunInternalAsync(CommandLineArgs commandLineArgs)
+ {
+ var commandType = _commandSelector.Select(commandLineArgs);
+ using (var scope = _serviceScopeFactory.CreateScope())
+ {
+ var command = (IConsoleCommand)scope.ServiceProvider.GetRequiredService(commandType);
+ await command.ExecuteAsync(commandLineArgs);
+ }
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/AbpCommandLineOptions.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/AbpCommandLineOptions.cs
new file mode 100644
index 00000000..4bdcfed8
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/AbpCommandLineOptions.cs
@@ -0,0 +1,29 @@
+namespace Lion.AbpPro.Cli.Commands;
+
+public class AbpCommandLineOptions : Dictionary
+{
+ public string GetOrNull(string name, params string[] alternativeNames)
+ {
+ Check.NotNullOrWhiteSpace(name, nameof(name));
+
+ var value = this.GetOrDefault(name);
+ if (!value.IsNullOrWhiteSpace())
+ {
+ return value;
+ }
+
+ if (!alternativeNames.IsNullOrEmpty())
+ {
+ foreach (var alternativeName in alternativeNames)
+ {
+ value = this.GetOrDefault(alternativeName);
+ if (!value.IsNullOrWhiteSpace())
+ {
+ return value;
+ }
+ }
+ }
+
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/CommandSelector.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/CommandSelector.cs
new file mode 100644
index 00000000..76b71364
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/CommandSelector.cs
@@ -0,0 +1,22 @@
+namespace Lion.AbpPro.Cli.Commands;
+
+public class CommandSelector : ICommandSelector, ITransientDependency
+{
+ private readonly AbpCliOptions _options;
+
+ public CommandSelector(IOptions options)
+ {
+ _options = options.Value;
+ }
+
+ public Type Select(CommandLineArgs commandLineArgs)
+ {
+ if (commandLineArgs.Command.IsNullOrWhiteSpace())
+ {
+ return typeof(HelpCommand);
+ }
+
+ return _options.Commands.GetOrDefault(commandLineArgs.Command)
+ ?? typeof(HelpCommand);
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/HelpCommand.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/HelpCommand.cs
new file mode 100644
index 00000000..afe42f82
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/HelpCommand.cs
@@ -0,0 +1,57 @@
+namespace Lion.AbpPro.Cli.Commands;
+
+public class HelpCommand : IConsoleCommand, ITransientDependency
+{
+ public const string Name = "help";
+ private readonly ILogger _logger;
+ private readonly AbpCliOptions _abpCliOptions;
+ private readonly IServiceScopeFactory _serviceScopeFactory;
+
+ public HelpCommand(IOptions abpCliOptions,
+ ILogger logger,
+ IServiceScopeFactory serviceScopeFactory)
+ {
+ _logger = logger;
+ _serviceScopeFactory = serviceScopeFactory;
+ _abpCliOptions = abpCliOptions.Value;
+ }
+
+ public Task ExecuteAsync(CommandLineArgs commandLineArgs)
+ {
+ GetUsageInfo();
+ return Task.CompletedTask;
+ }
+
+ public void GetUsageInfo()
+ {
+ var sb = new StringBuilder();
+
+ sb.AppendLine("查看命令帮助:");
+ sb.AppendLine(" lion.abp help");
+ sb.AppendLine("命令列表:");
+
+ 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());
+ }
+
+ public string GetShortDescription()
+ {
+ return "lion.abp help";
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/ICommandSelector.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/ICommandSelector.cs
new file mode 100644
index 00000000..798dbc80
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/ICommandSelector.cs
@@ -0,0 +1,6 @@
+namespace Lion.AbpPro.Cli.Commands;
+
+public interface ICommandSelector
+{
+ Type Select(CommandLineArgs commandLineArgs);
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/IConsoleCommand.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/IConsoleCommand.cs
new file mode 100644
index 00000000..d32498fe
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/IConsoleCommand.cs
@@ -0,0 +1,10 @@
+namespace Lion.AbpPro.Cli.Commands;
+
+public interface IConsoleCommand
+{
+ Task ExecuteAsync(CommandLineArgs commandLineArgs);
+
+ void GetUsageInfo();
+
+ string GetShortDescription();
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/NewCommand.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/NewCommand.cs
new file mode 100644
index 00000000..42f379d8
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/NewCommand.cs
@@ -0,0 +1,150 @@
+using System.Diagnostics;
+using Lion.AbpPro.Cli.SourceCode;
+
+namespace Lion.AbpPro.Cli.Commands;
+
+public class NewCommand : IConsoleCommand, ITransientDependency
+{
+ public const string Name = "new";
+ private readonly ILogger _logger;
+ private readonly AbpCliOptions _abpCliOptions;
+ private readonly IServiceScopeFactory _serviceScopeFactory;
+ private readonly Options.LionAbpProOptions _options;
+ private readonly ISourceCodeManager _sourceCodeManager;
+
+ public NewCommand(
+ IOptions abpCliOptions,
+ ILogger logger,
+ IServiceScopeFactory serviceScopeFactory,
+ IOptions options,
+ ISourceCodeManager sourceCodeManager)
+ {
+ _logger = logger;
+ _serviceScopeFactory = serviceScopeFactory;
+ _sourceCodeManager = sourceCodeManager;
+ _options = options.Value;
+ _abpCliOptions = abpCliOptions.Value;
+ }
+
+ public async Task ExecuteAsync(CommandLineArgs commandLineArgs)
+ {
+ #region 参数获取
+
+ var context = new SourceCodeContext
+ {
+ OldCompanyName = _options.OldCompanyName,
+ OldProjectName = _options.OldProjectName
+ };
+ // 检查模板是否正确
+ var template = commandLineArgs.Options.GetOrNull(CommandOptions.Template.Short, CommandOptions.Template.Long);
+ if (template.IsNullOrWhiteSpace())
+ {
+ _logger.LogError("请输入模板名称");
+ GetUsageInfo();
+ return;
+ }
+
+ var templateOptions = _options.Templates.FirstOrDefault(e => e.Name == template);
+ if (templateOptions == null)
+ {
+ _logger.LogError("模板类型不正确");
+ GetUsageInfo();
+ return;
+ }
+
+ context.RepositoryId = _options.RepositoryId;
+ context.Token = _options.DecryptToken;
+ context.Owner = _options.Owner;
+ context.TemplateName = templateOptions.Name;
+ context.TemplateKey = templateOptions.Key;
+ context.IsSource = templateOptions.IsSource;
+ context.ExcludeFiles = templateOptions.ExcludeFiles;
+ context.ReplaceSuffix = templateOptions.ReplaceSuffix;
+ // if (commandLineArgs.Target.IsNullOrWhiteSpace())
+ // {
+ // GetUsageInfo();
+ // return;
+ // }
+
+ //校验是否输入公司名称
+ context.CompanyName = commandLineArgs.Options.GetOrNull(CommandOptions.Company.Short, CommandOptions.Company.Long);
+ if (context.CompanyName.IsNullOrWhiteSpace())
+ {
+ _logger.LogError("请输入公司名称");
+ GetUsageInfo();
+ return;
+ }
+
+ //校验是否输入项目名称
+ context.ProjectName = commandLineArgs.Options.GetOrNull(CommandOptions.Project.Short, CommandOptions.Project.Long);
+ if (context.ProjectName.IsNullOrWhiteSpace())
+ {
+ _logger.LogError("请输入项目名称");
+ GetUsageInfo();
+ return;
+ }
+
+ var outputFolder = commandLineArgs.Options.GetOrNull(CommandOptions.OutputFolder.Short, CommandOptions.OutputFolder.Long);
+
+ outputFolder = outputFolder != null ? Path.GetFullPath(outputFolder) : Directory.GetCurrentDirectory();
+
+ context.OutputFolder = outputFolder;
+ //版本
+ var version = commandLineArgs.Options.GetOrNull(CommandOptions.Version.Short, CommandOptions.Version.Long);
+
+ #endregion
+
+ // 获取源码
+ context.TemplateFile = await _sourceCodeManager.GetAsync(version);
+
+ // 解压
+ _sourceCodeManager.ExtractProjectZip(context);
+
+ // 替换模板
+ _sourceCodeManager.ReplaceTemplates(context);
+
+ // 打开文件夹
+ Process.Start("explorer.exe", context.OutputFolder);
+ }
+
+ public void GetUsageInfo()
+ {
+ var sb = new StringBuilder();
+
+ sb.AppendLine("查看命令帮助:");
+ sb.AppendLine(" lion.abp help");
+ sb.AppendLine("命令列表:");
+
+ 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());
+ }
+
+ public string GetShortDescription()
+ {
+ var message = Environment.NewLine;
+ message += $" > lion.abp new abp-vnext-pro -c 公司名称 -p 项目名称 -v 版本(默认LastRelease)";
+ message += Environment.NewLine;
+ message += $" > lion.abp new abp-vnext-pro-basic -c 公司名称 -p 项目名称 -v 版本(默认LastRelease)";
+ message += Environment.NewLine;
+ message += $" > lion.abp new abp-vnext-pro-basic-no-ocelot -c 公司名称 -p 项目名称 -v 版本(默认LastRelease)";
+ message += Environment.NewLine;
+ message += $" > lion.abp new abp-vnext-pro-module -c 公司名称 -p 项目名称 -m 模块名称 -v 版本(默认LastRelease)";
+ return message;
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/NuGet/NuGetService.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/NuGet/NuGetService.cs
new file mode 100644
index 00000000..d29a5272
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/NuGet/NuGetService.cs
@@ -0,0 +1,105 @@
+using Volo.Abp.Domain.Services;
+using Volo.Abp.Json;
+
+namespace Lion.AbpPro.Cli.NuGet;
+
+public class NuGetService : DomainService
+{
+ private readonly IHttpClientFactory _clientFactory;
+ private readonly IJsonSerializer _jsonSerializer;
+
+ public NuGetService(IHttpClientFactory clientFactory, IJsonSerializer jsonSerializer)
+ {
+ _clientFactory = clientFactory;
+ _jsonSerializer = jsonSerializer;
+ }
+
+ ///
+ /// 从nuget服务获取最新的版本
+ ///
+ /// nuget包
+ ///
+ public async Task GetLatestVersionOrNullAsync(string packageId)
+ {
+ var versionList = await GetPackageVersionsFromNuGetOrgAsync(packageId);
+ return versionList.MaxBy(e => e);
+ }
+
+ private async Task> GetPackageVersionsFromNuGetOrgAsync(string packageId)
+ {
+ var url = $"https://api.nuget.org/v3-flatcontainer/{packageId.ToLowerInvariant()}/index.json";
+ return await GetPackageVersionListFromUrlWithRetryAsync(url);
+ }
+
+
+ private async Task> GetPackageVersionListFromUrlWithRetryAsync(string url)
+ {
+ var exceptionRetryPolicy = CreateExceptionRetryPolicy();
+ var timeoutRetryPolicy = CreateTimeoutRetryPolicy();
+ var policy = Policy.WrapAsync(exceptionRetryPolicy,timeoutRetryPolicy);
+
+ var result = await policy.ExecuteAsync(async () => await GetPackageVersionListFromUrlAsync(url));
+ return result;
+ }
+
+ private async Task> GetPackageVersionListFromUrlAsync(string url)
+ {
+ var client = _clientFactory.CreateClient();
+ var response = await client.GetAsync(url);
+ response.EnsureSuccessStatusCode();
+ var content = await response.Content.ReadAsStringAsync();
+ if (content.IsNullOrWhiteSpace()) return null;
+ return _jsonSerializer.Deserialize(content).Versions;
+ }
+
+ ///
+ /// 创建异常重试策略
+ ///
+ private AsyncRetryPolicy CreateExceptionRetryPolicy()
+ {
+ var policy = Policy.Handle((ex) =>
+ {
+ var result = !ex.Message.IsNullOrWhiteSpace();
+ return result;
+ })
+ .WaitAndRetryAsync(3,
+ (retryCount) => TimeSpan.FromSeconds(Math.Pow(2, retryCount)), (ex, time, retryCount, context) =>
+ {
+ if (retryCount == 3)
+ {
+ Logger.LogError($"请求nuget.org失败,已重试第 {retryCount} 次.");
+ }
+ });
+
+ return policy;
+ }
+
+ ///
+ /// 创建超时重试策略
+ ///
+ private AsyncRetryPolicy CreateTimeoutRetryPolicy()
+ {
+ var timeOutPolicy = Policy.Handle((ex) =>
+ {
+ var result =
+ ex.InnerException != null &&
+ ex.InnerException.GetType() == typeof(TimeoutException);
+ return result;
+ })
+ .WaitAndRetryAsync(3,
+ (retryCount) => TimeSpan.FromSeconds(Math.Pow(2, retryCount)),
+ (ex, time, retryCount, context) =>
+ {
+ if (retryCount == 3)
+ {
+ Logger.LogError($"请求nuget.org超时,已重试第 {retryCount} 次,请重新执行命令.");
+ }
+ });
+ return timeOutPolicy;
+ }
+}
+
+public class NuGetVersionResultDto
+{
+ public List Versions { get; set; }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Utils/CmdHelper.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Utils/CmdHelper.cs
new file mode 100644
index 00000000..c98c4948
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Utils/CmdHelper.cs
@@ -0,0 +1,191 @@
+using System.Diagnostics;
+using System.Runtime.InteropServices;
+
+namespace Lion.AbpPro.Cli.Utils;
+
+public class CmdHelper : ITransientDependency
+{
+ private const int SuccessfulExitCode = 0;
+
+ public void OpenWebPage(string url)
+ {
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+ {
+ url = url.Replace("&", "^&");
+ Process.Start(new ProcessStartInfo("cmd", $"/c start {url}") { CreateNoWindow = true });
+ }
+ else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
+ {
+ Process.Start("xdg-open", url);
+ }
+ else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
+ {
+ Process.Start("open", url);
+ }
+ }
+
+
+ public void Run(string file,
+ string arguments)
+ {
+ var procStartInfo = new ProcessStartInfo(file, arguments);
+ Process.Start(procStartInfo)?.WaitForExit();
+ }
+
+ public void RunCmd(string command,
+ string workingDirectory = null)
+ {
+ RunCmd(command, out _, workingDirectory);
+ }
+
+ public void RunCmd(string command,
+ out int exitCode,
+ string workingDirectory = null)
+ {
+ var procStartInfo = new ProcessStartInfo(
+ GetFileName(),
+ GetArguments(command)
+ );
+
+ if (!string.IsNullOrEmpty(workingDirectory))
+ {
+ procStartInfo.WorkingDirectory = workingDirectory;
+ }
+
+ using (var process = Process.Start(procStartInfo))
+ {
+ process?.WaitForExit();
+
+ exitCode = process.ExitCode;
+ }
+ }
+
+ public Process RunCmdAndGetProcess(string command,
+ string workingDirectory = null)
+ {
+ var procStartInfo = new ProcessStartInfo(
+ GetFileName(),
+ GetArguments(command)
+ );
+
+ if (!string.IsNullOrEmpty(workingDirectory))
+ {
+ procStartInfo.WorkingDirectory = workingDirectory;
+ procStartInfo.CreateNoWindow = false;
+ }
+
+ return Process.Start(procStartInfo);
+ }
+
+ public string RunCmdAndGetOutput(string command,
+ string workingDirectory = null)
+ {
+ return RunCmdAndGetOutput(command, out int _, workingDirectory);
+ }
+
+ public string RunCmdAndGetOutput(string command,
+ out bool isExitCodeSuccessful,
+ string workingDirectory = null)
+ {
+ var output = RunCmdAndGetOutput(command, out int exitCode, workingDirectory);
+ isExitCodeSuccessful = exitCode == SuccessfulExitCode;
+ return output;
+ }
+
+ public string RunCmdAndGetOutput(string command,
+ out int exitCode,
+ string workingDirectory = null)
+ {
+ string output;
+
+ using (var process = new Process())
+ {
+ process.StartInfo = new ProcessStartInfo(GetFileName())
+ {
+ Arguments = GetArguments(command),
+ UseShellExecute = false,
+ CreateNoWindow = true,
+ RedirectStandardOutput = true,
+ RedirectStandardError = true
+ };
+
+ if (!string.IsNullOrEmpty(workingDirectory))
+ {
+ process.StartInfo.WorkingDirectory = workingDirectory;
+ }
+
+ process.Start();
+
+ using (var standardOutput = process.StandardOutput)
+ {
+ using (var standardError = process.StandardError)
+ {
+ output = standardOutput.ReadToEnd();
+ output += standardError.ReadToEnd();
+ }
+ }
+
+ process.WaitForExit();
+
+ exitCode = process.ExitCode;
+ }
+
+ return output.Trim();
+ }
+
+ public void RunCmdAndExit(string command,
+ string workingDirectory = null,
+ int? delaySeconds = null)
+ {
+ var procStartInfo = new ProcessStartInfo(
+ GetFileName(),
+ GetArguments(command, delaySeconds)
+ );
+
+ if (!string.IsNullOrEmpty(workingDirectory))
+ {
+ procStartInfo.WorkingDirectory = workingDirectory;
+ }
+
+ Process.Start(procStartInfo);
+ Environment.Exit(0);
+ }
+
+ public string GetArguments(string command,
+ int? delaySeconds = null)
+ {
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) || RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
+ {
+ return delaySeconds == null ? "-c \"" + command + "\"" : "-c \"" + $"sleep {delaySeconds}s > /dev/null && " + command + "\"";
+ }
+
+ //Windows default.
+ return delaySeconds == null ? "/C \"" + command + "\"" : "/C \"" + $"timeout /nobreak /t {delaySeconds} >null && " + command + "\"";
+ }
+
+ public string GetFileName()
+ {
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+ {
+ //Windows
+ return "cmd.exe";
+ }
+
+ //Linux or OSX
+ if (File.Exists("/bin/bash"))
+ {
+ return "/bin/bash";
+ }
+
+ if (File.Exists("/bin/sh"))
+ {
+ return "/bin/sh"; //some Linux distributions like Alpine doesn't have bash
+ }
+
+ throw new AbpException($"Cannot determine shell command for this OS! " +
+ $"Running on OS: {System.Runtime.InteropServices.RuntimeInformation.OSDescription} | " +
+ $"OS Architecture: {System.Runtime.InteropServices.RuntimeInformation.OSArchitecture} | " +
+ $"Framework: {System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription} | " +
+ $"Process Architecture{System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture}");
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Utils/DirectoryAndFileHelper.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Utils/DirectoryAndFileHelper.cs
new file mode 100644
index 00000000..124b751f
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Utils/DirectoryAndFileHelper.cs
@@ -0,0 +1,100 @@
+using Volo.Abp.Domain.Services;
+
+namespace Lion.AbpPro.Cli.Zip;
+
+public static class DirectoryAndFileHelper
+{
+ ///
+ /// 复制文件夹及文件
+ ///
+ /// 原文件路径
+ /// 目标文件路径
+ /// 需要排除的文件,多个文件用逗号隔开
+ public static void CopyFolder(string sourceFolder, string destFolder, string excludeFiles = "")
+ {
+ try
+ {
+ Check.NotNullOrWhiteSpace(sourceFolder, nameof(sourceFolder));
+ Check.NotNullOrWhiteSpace(destFolder, nameof(destFolder));
+ //如果目标路径不存在,则创建目标路径
+ if (!System.IO.Directory.Exists(destFolder))
+ {
+ System.IO.Directory.CreateDirectory(destFolder);
+ }
+ else
+ {
+ DeletedDir(destFolder);
+ }
+
+ //得到原文件根目录下的所有文件
+ string[] files = System.IO.Directory.GetFiles(sourceFolder);
+ foreach (string file in files)
+ {
+ string name = System.IO.Path.GetFileName(file);
+ string dest = System.IO.Path.Combine(destFolder, name);
+ if (!excludeFiles.IsNullOrWhiteSpace())
+ {
+ var excludes = excludeFiles.Split(',', StringSplitOptions.RemoveEmptyEntries);
+ if (excludes.Contains(name))
+ {
+ continue;
+ }
+ }
+
+ System.IO.File.Copy(file, dest); //复制文件
+ }
+
+ //得到原文件根目录下的所有文件夹
+ string[] folders = System.IO.Directory.GetDirectories(sourceFolder);
+ foreach (string folder in folders)
+ {
+ string name = System.IO.Path.GetFileName(folder);
+ string dest = System.IO.Path.Combine(destFolder, name);
+ if (!excludeFiles.IsNullOrWhiteSpace())
+ {
+ var excludes = excludeFiles.Split(',', StringSplitOptions.RemoveEmptyEntries);
+ if (excludes.Contains(name))
+ {
+ continue;
+ }
+ }
+
+
+ CopyFolder(folder, dest); //构建目标路径,递归复制文件
+ }
+ }
+ catch (Exception)
+ {
+ throw new UserFriendlyException("复制文件失败!");
+ }
+ }
+
+ ///
+ /// 删除文件夹及文件
+ ///
+ /// 路径
+ private static void DeletedDir(string srcPath)
+ {
+ try
+ {
+ DirectoryInfo dir = new DirectoryInfo(srcPath);
+ FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); //返回目录中所有文件和子目录
+ foreach (FileSystemInfo i in fileinfo)
+ {
+ if (i is DirectoryInfo) //判断是否文件夹
+ {
+ DirectoryInfo subdir = new DirectoryInfo(i.FullName);
+ subdir.Delete(true); //删除子目录和文件
+ }
+ else
+ {
+ File.Delete(i.FullName); //删除指定文件
+ }
+ }
+ }
+ catch (Exception)
+ {
+ throw new UserFriendlyException("删除文件失败!");
+ }
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Utils/ReplaceHelper.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Utils/ReplaceHelper.cs
new file mode 100644
index 00000000..e59fb61a
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Utils/ReplaceHelper.cs
@@ -0,0 +1,193 @@
+using Volo.Abp.Domain.Services;
+
+namespace Lion.AbpPro.Cli.Replace;
+
+public static class ReplaceHelper
+{
+ public static void ReplaceTemplates(string sourcePath, string oldCompanyName, string oldProjectName, string companyName, string projectName, string replaceSuffix)
+ {
+ try
+ {
+ RenameTemplate(sourcePath, oldCompanyName, oldProjectName, companyName, projectName, replaceSuffix);
+ }
+ catch (Exception ex)
+ {
+ throw new UserFriendlyException($"生成模板失败{ex.Message}");
+ }
+ }
+
+ private static void ReplaceTemplates(string sourcePath, string oldCompanyName, string oldProjectName, string oldModuleName, string companyName, string projectName, string moduleName, string replaceSuffix)
+ {
+ try
+ {
+ RenameTemplate(sourcePath, oldCompanyName, oldProjectName, oldModuleName, companyName, projectName, moduleName, replaceSuffix);
+ }
+ catch (Exception ex)
+ {
+ throw new UserFriendlyException($"生成模板失败{ex.Message}");
+ }
+ }
+
+ private static void RenameTemplate(string sourcePath, string oldCompanyName, string oldProjectName, string companyName, string projectName, string replaceSuffix)
+ {
+ RenameAllDirectories(sourcePath, oldCompanyName, oldProjectName, companyName, projectName);
+ RenameAllFileNameAndContent(sourcePath, oldCompanyName, oldProjectName, companyName, projectName, replaceSuffix);
+ }
+
+ private static void RenameTemplate(string sourcePath, string oldCompanyName, string oldProjectName, string oldModuleName, string companyName, string projectName, string moduleName, string replaceSuffix)
+ {
+ RenameAllDirectories(sourcePath, oldCompanyName, oldProjectName, oldModuleName, companyName, projectName, moduleName);
+ RenameAllFileNameAndContent(sourcePath, oldCompanyName, oldProjectName, oldModuleName, companyName, projectName, moduleName, replaceSuffix);
+ }
+
+ private static void RenameAllDirectories(string sourcePath, string oldCompanyName, string oldProjectName, string companyName, string projectName)
+ {
+ var directories = Directory.GetDirectories(sourcePath);
+ foreach (var subDirectory in directories)
+ {
+ RenameAllDirectories(subDirectory, oldCompanyName, oldProjectName, companyName, projectName);
+
+ var directoryInfo = new DirectoryInfo(subDirectory);
+ if (directoryInfo.Name.Contains(oldCompanyName) ||
+ directoryInfo.Name.Contains(oldProjectName))
+ {
+ var oldDirectoryName = directoryInfo.Name;
+ var newDirectoryName = oldDirectoryName.CustomReplace(oldCompanyName, oldProjectName, companyName, projectName);
+
+ var newDirectoryPath = Path.Combine(directoryInfo.Parent?.FullName, newDirectoryName);
+
+ if (directoryInfo.FullName != newDirectoryPath)
+ {
+ directoryInfo.MoveTo(newDirectoryPath);
+ }
+ }
+ }
+ }
+
+ private static void RenameAllDirectories(string sourcePath, string oldCompanyName, string oldProjectName, string oldModuleName, string companyName, string projectName, string moduleName)
+ {
+ var directories = Directory.GetDirectories(sourcePath);
+ foreach (var subDirectory in directories)
+ {
+ RenameAllDirectories(subDirectory, oldCompanyName, oldProjectName, oldModuleName, companyName, projectName, moduleName);
+
+ var directoryInfo = new DirectoryInfo(subDirectory);
+ if (directoryInfo.Name.Contains(oldCompanyName) ||
+ directoryInfo.Name.Contains(oldProjectName) ||
+ directoryInfo.Name.Contains(oldModuleName))
+ {
+ var oldDirectoryName = directoryInfo.Name;
+ var newDirectoryName = oldDirectoryName.CustomReplace(oldCompanyName, oldProjectName, oldModuleName, companyName, projectName, moduleName);
+
+ var newDirectoryPath = Path.Combine(directoryInfo.Parent?.FullName, newDirectoryName);
+
+ if (directoryInfo.FullName != newDirectoryPath)
+ {
+ directoryInfo.MoveTo(newDirectoryPath);
+ }
+ }
+ }
+ }
+
+ private static void RenameAllFileNameAndContent(string sourcePath, string oldCompanyName, string oldProjectName, string companyName, string projectName, string replaceSuffix)
+ {
+ var list = new DirectoryInfo(sourcePath)
+ .GetFiles()
+ .Where(f => replaceSuffix.Contains(f.Extension))
+ .ToList();
+
+ var encoding = new UTF8Encoding(false);
+ foreach (var fileInfo in list)
+ {
+ // 改文件内容
+ var oldContents = File.ReadAllText(fileInfo.FullName, encoding);
+ var newContents = oldContents.CustomReplace(oldCompanyName, oldProjectName, companyName, projectName);
+
+ // 文件名包含模板关键字
+ if (fileInfo.Name.Contains(oldCompanyName)
+ || fileInfo.Name.Contains(oldProjectName))
+ {
+ var oldFileName = fileInfo.Name;
+ var newFileName = oldFileName.CustomReplace(oldCompanyName, oldProjectName, companyName, projectName);
+
+ var newFilePath = Path.Combine(fileInfo.DirectoryName, newFileName);
+ // 无变化才重命名
+ if (newFilePath != fileInfo.FullName)
+ {
+ File.Delete(fileInfo.FullName);
+ }
+
+ File.WriteAllText(newFilePath, newContents, encoding);
+ }
+ else
+ File.WriteAllText(fileInfo.FullName, newContents, encoding);
+ }
+
+ foreach (var subDirectory in Directory.GetDirectories(sourcePath))
+ {
+ RenameAllFileNameAndContent(subDirectory, oldCompanyName, oldProjectName, companyName, projectName, replaceSuffix);
+ }
+ }
+
+ private static void RenameAllFileNameAndContent(string sourcePath, string oldCompanyName, string oldProjectName, string oldModuleName, string companyName, string projectName, string moduleName,
+ string replaceSuffix)
+ {
+ var list = new DirectoryInfo(sourcePath)
+ .GetFiles()
+ .Where(f => replaceSuffix.Contains(f.Extension))
+ .ToList();
+
+ var encoding = new UTF8Encoding(false);
+ foreach (var fileInfo in list)
+ {
+ // 改文件内容
+ var oldContents = File.ReadAllText(fileInfo.FullName, encoding);
+ var newContents = oldContents.CustomReplace(oldCompanyName, oldProjectName, oldModuleName, companyName, projectName, moduleName);
+
+ // 文件名包含模板关键字
+ if (fileInfo.Name.Contains(oldCompanyName)
+ || fileInfo.Name.Contains(oldProjectName)
+ || fileInfo.Name.Contains(oldModuleName))
+ {
+ var oldFileName = fileInfo.Name;
+ var newFileName = oldFileName.CustomReplace(oldCompanyName, oldProjectName, oldModuleName, companyName, projectName, moduleName);
+
+ var newFilePath = Path.Combine(fileInfo.DirectoryName, newFileName);
+ // 无变化才重命名
+ if (newFilePath != fileInfo.FullName)
+ {
+ File.Delete(fileInfo.FullName);
+ }
+
+ File.WriteAllText(newFilePath, newContents, encoding);
+ }
+ else
+ File.WriteAllText(fileInfo.FullName, newContents, encoding);
+ }
+
+ foreach (var subDirectory in Directory.GetDirectories(sourcePath))
+ {
+ RenameAllFileNameAndContent(subDirectory, oldCompanyName, oldProjectName, oldModuleName, companyName, projectName, moduleName, replaceSuffix);
+ }
+ }
+ private static string CustomReplace(this string content,string oldCompanyName, string oldProjectName, string companyName,string projectName)
+ {
+ var result = content
+ .Replace(oldCompanyName, companyName)
+ .Replace(oldProjectName, projectName)
+ ;
+
+ return result;
+ }
+
+ private static string CustomReplace(this string content,string oldCompanyName, string oldProjectName,string oldModuleName, string companyName,string projectName,string moduleName)
+ {
+ var result = content
+ .Replace(oldCompanyName, companyName)
+ .Replace(oldProjectName, projectName)
+ .Replace(oldModuleName,moduleName)
+ ;
+
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Utils/TokenHelper.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Utils/TokenHelper.cs
new file mode 100644
index 00000000..3158ed7b
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Utils/TokenHelper.cs
@@ -0,0 +1,15 @@
+namespace Lion.AbpPro.Cli.Cryptography;
+
+public static class TokenHelper
+{
+ ///
+ /// 解密数据
+ ///
+ /// 要解密数据
+ /// 密匙容器的名称
+ public static string Decrypt(string data, string keyContainerName = "abp-vnext-pro")
+ {
+ Check.NotNullOrWhiteSpace(data, nameof(data));
+ return data.Replace(keyContainerName, "");
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli/Lion.AbpPro.Cli.csproj b/aspnet-core/frameworks/src/Lion.AbpPro.Cli/Lion.AbpPro.Cli.csproj
new file mode 100644
index 00000000..e9288820
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli/Lion.AbpPro.Cli.csproj
@@ -0,0 +1,25 @@
+
+
+
+ Exe
+ net7.0
+ true
+ abp-pro-cli
+ abppro
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli/Lion/AbpPro/Cli/AbpProCliModule.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli/Lion/AbpPro/Cli/AbpProCliModule.cs
new file mode 100644
index 00000000..4c7c086c
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli/Lion/AbpPro/Cli/AbpProCliModule.cs
@@ -0,0 +1,18 @@
+using System.Threading.Tasks;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
+using Volo.Abp;
+using Volo.Abp.Autofac;
+using Volo.Abp.Modularity;
+
+namespace Lion.AbpPro.Cli;
+
+[DependsOn(
+ typeof(Lion.AbpPro.Cli.AbpProCliCoreModule),
+ typeof(AbpAutofacModule)
+)]
+public class AbpProCliModule : AbpModule
+{
+}
diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli/Lion/AbpPro/Cli/Program.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli/Lion/AbpPro/Cli/Program.cs
new file mode 100644
index 00000000..35fb8b78
--- /dev/null
+++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli/Lion/AbpPro/Cli/Program.cs
@@ -0,0 +1,42 @@
+using System;
+using System.IO;
+using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
+using Serilog;
+using Serilog.Events;
+using Volo.Abp;
+
+namespace Lion.AbpPro.Cli;
+
+public class Program
+{
+ public static async Task Main(string[] args)
+ {
+ Log.Logger = new LoggerConfiguration()
+ .MinimumLevel.Information()
+ .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
+ .MinimumLevel.Override("Volo.Abp", LogEventLevel.Warning)
+ .MinimumLevel.Override("System.Net.Http.HttpClient", LogEventLevel.Warning)
+ .MinimumLevel.Override("Volo.Abp.IdentityModel", LogEventLevel.Information)
+ .MinimumLevel.Override("Volo.Abp.Cli", LogEventLevel.Information)
+ .Enrich.FromLogContext()
+ .WriteTo.File(Path.Combine(CliPaths.Log, "lion.abp-pro-cli-logs.txt"))
+ .WriteTo.Console()
+ .CreateLogger();
+ using var application = await AbpApplicationFactory.CreateAsync(
+ options =>
+ {
+ options.UseAutofac();
+ options.Services.AddLogging(c => c.AddSerilog());
+ });
+ await application.InitializeAsync();
+
+ await application.ServiceProvider
+ .GetRequiredService()
+ .RunAsync(args);
+
+ await application.ShutdownAsync();
+
+ Log.CloseAndFlush();
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/test/Lion.AbpPro.Core.Cli.Tests/Lion.AbpPro.Core.Cli.Tests.csproj b/aspnet-core/frameworks/test/Lion.AbpPro.Core.Cli.Tests/Lion.AbpPro.Core.Cli.Tests.csproj
new file mode 100644
index 00000000..cd2bc772
--- /dev/null
+++ b/aspnet-core/frameworks/test/Lion.AbpPro.Core.Cli.Tests/Lion.AbpPro.Core.Cli.Tests.csproj
@@ -0,0 +1,27 @@
+
+
+
+ net7.0
+ enable
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/templates/abp-vnext-pro-nuget-all/.gitignore b/templates/abp-vnext-pro-nuget-all/.gitignore
new file mode 100644
index 00000000..dd3b91d3
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/.gitignore
@@ -0,0 +1,285 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+
+# User-specific files
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+
+# Visual Studio 2015 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUNIT
+*.VisualState.xml
+TestResult.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# DNX
+project.lock.json
+artifacts/
+
+*_i.c
+*_p.c
+*_i.h
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# JustCode is a .NET coding add-in
+.JustCode
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# TODO: Comment the next line if you want to checkin your web deploy settings
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# The packages folder can be ignored because of Package Restore
+**/packages/*
+# except build/, which is used as an MSBuild target.
+!**/packages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/packages/repositories.config
+# NuGet v3's project.json files produces more ignoreable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.pfx
+*.publishsettings
+node_modules/
+orleans.codegen.cs
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+
+# SQL Server files
+*.mdf
+*.ldf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# JetBrains Rider
+.idea/
+*.sln.iml
+
+# Zzz
+content/src/Zzz.Web/Logs/*
+content/src/Zzz.Web.Host/Logs/*
+content/src/Zzz.IdentityServer/Logs/*
+content/src/Zzz.HttpApi.Host/Logs/*
+content/src/Zzz.HttpApi.Host/Logs/*
+content/src/Zzz.DbMigrator/Logs/*
+/content/aspnetcore/src/Zzz.HttpApi.Host/App_Data
+/aspnet-core/services/src/CompanyName.ProjectName.HttpApi.Host/Logs
+/aspnet-core/services/src/CompanyName.ProjectName.IdentityServer/appsettings.Production.json
+/aspnet-core/services/src/CompanyName.ProjectName.HttpApi.Host/appsettings.Production.json
+/aspnet-core/services/host/CompanyName.ProjectName.HttpApi.Host/appsettings.Production.json
+/aspnet-core/services/host/CompanyName.ProjectName.HttpApi.Host/Logs
+/aspnet-core/services/host/CompanyName.ProjectName.IdentityServer/Logs
+/vben271/dist.zip
+/aspnet-core/services/host/CompanyName.ProjectName.HttpApi.Host/publish.zip
+/aspnet-core/services/host/CompanyName.ProjectName.IdentityServer/appsettings.Production.json
+/aspnet-core/services/host/CompanyName.ProjectName.IdentityServer/publish.zip
+vben271/yarn.lock
+/vben271/_nginx.zip
+/aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/logs
+/aspnet-core/services/host/Lion.AbpPro.IdentityServer/Logs
+/aspnet-core/services/host/Lion.AbpPro.IdentityServer/Logs
+/aspnet-core/gateways/Lion.AbpPro.WebGateway/appsettings.Production.json
+/aspnet-core/services/host/Lion.AbpPro.IdentityServer/appsettings.Production.json
+/aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/appsettings.Production.json
+aspnet-core/services/host/Lion.AbpPro.Web.Blazor.Server/Logs/logs.txt
+/nupkgs
+/aspnet-core/Lion.AbpPro.sln.DotSettings
+/aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/logs
+/vben271/package-lock.json
+/docs/site
diff --git a/templates/abp-vnext-pro-nuget-all/Delete-BIN-OBJ-Folders.bat b/templates/abp-vnext-pro-nuget-all/Delete-BIN-OBJ-Folders.bat
new file mode 100644
index 00000000..02cfaa5e
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/Delete-BIN-OBJ-Folders.bat
@@ -0,0 +1,20 @@
+@ECHO off
+cls
+
+ECHO Deleting all BIN and OBJ folders...
+ECHO.
+
+FOR /d /r . %%d in (bin,obj) DO (
+ IF EXIST "%%d" (
+ ECHO %%d | FIND /I "\node_modules\" > Nul && (
+ ECHO.Skipping: %%d
+ ) || (
+ ECHO.Deleting: %%d
+ rd /s/q "%%d"
+ )
+ )
+)
+
+ECHO.
+ECHO.BIN and OBJ folders have been successfully deleted. Press any key to exit.
+pause > nul
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/Delete-BIN-OBJ-Folders.bat b/templates/abp-vnext-pro-nuget-all/aspnet-core/Delete-BIN-OBJ-Folders.bat
new file mode 100644
index 00000000..02cfaa5e
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/Delete-BIN-OBJ-Folders.bat
@@ -0,0 +1,20 @@
+@ECHO off
+cls
+
+ECHO Deleting all BIN and OBJ folders...
+ECHO.
+
+FOR /d /r . %%d in (bin,obj) DO (
+ IF EXIST "%%d" (
+ ECHO %%d | FIND /I "\node_modules\" > Nul && (
+ ECHO.Skipping: %%d
+ ) || (
+ ECHO.Deleting: %%d
+ rd /s/q "%%d"
+ )
+ )
+)
+
+ECHO.
+ECHO.BIN and OBJ folders have been successfully deleted. Press any key to exit.
+pause > nul
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/Directory.Build.Lion.targets b/templates/abp-vnext-pro-nuget-all/aspnet-core/Directory.Build.Lion.targets
new file mode 100644
index 00000000..a63cda21
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/Directory.Build.Lion.targets
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/Directory.Build.Microsoft.targets b/templates/abp-vnext-pro-nuget-all/aspnet-core/Directory.Build.Microsoft.targets
new file mode 100644
index 00000000..ed8bf58d
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/Directory.Build.Microsoft.targets
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/Directory.Build.Volo.targets b/templates/abp-vnext-pro-nuget-all/aspnet-core/Directory.Build.Volo.targets
new file mode 100644
index 00000000..3f5f0b0d
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/Directory.Build.Volo.targets
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/Directory.Build.targets b/templates/abp-vnext-pro-nuget-all/aspnet-core/Directory.Build.targets
new file mode 100644
index 00000000..8e0f5c57
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/Directory.Build.targets
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+ latest
+ 1.0.0
+ $(NoWarn);CS1591;CS0436;NU1504
+ app
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/MyCompanyName.MyProjectName.sln b/templates/abp-vnext-pro-nuget-all/aspnet-core/MyCompanyName.MyProjectName.sln
new file mode 100644
index 00000000..e94186d8
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/MyCompanyName.MyProjectName.sln
@@ -0,0 +1,140 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31410.414
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.Domain", "src\MyCompanyName.MyProjectName.Domain\MyCompanyName.MyProjectName.Domain.csproj", "{554AD327-6DBA-4F8F-96F8-81CE7A0C863F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.Application", "src\MyCompanyName.MyProjectName.Application\MyCompanyName.MyProjectName.Application.csproj", "{1A94A50E-06DC-43C1-80B5-B662820EC3EB}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.EntityFrameworkCore", "src\MyCompanyName.MyProjectName.EntityFrameworkCore\MyCompanyName.MyProjectName.EntityFrameworkCore.csproj", "{C956DD76-69C8-4A9C-83EA-D17DF83340FD}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{CA9AC87F-097E-4F15-8393-4BC07735A5B0}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{04DBDB01-70F4-4E06-B468-8F87850B22BE}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.Application.Tests", "test\MyCompanyName.MyProjectName.Application.Tests\MyCompanyName.MyProjectName.Application.Tests.csproj", "{50B2631D-129C-47B3-A587-029CCD6099BC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.Domain.Shared", "src\MyCompanyName.MyProjectName.Domain.Shared\MyCompanyName.MyProjectName.Domain.Shared.csproj", "{42F719ED-8413-4895-B5B4-5AB56079BC66}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.Application.Contracts", "src\MyCompanyName.MyProjectName.Application.Contracts\MyCompanyName.MyProjectName.Application.Contracts.csproj", "{520659C8-C734-4298-A3DA-B539DB9DFC0B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.HttpApi", "src\MyCompanyName.MyProjectName.HttpApi\MyCompanyName.MyProjectName.HttpApi.csproj", "{4164BDF7-F527-4E85-9CE6-E3C2D7426A27}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.HttpApi.Client", "src\MyCompanyName.MyProjectName.HttpApi.Client\MyCompanyName.MyProjectName.HttpApi.Client.csproj", "{3B5A0094-670D-4BB1-BFDD-61B88A8773DC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.EntityFrameworkCore.Tests", "test\MyCompanyName.MyProjectName.EntityFrameworkCore.Tests\MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj", "{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.TestBase", "test\MyCompanyName.MyProjectName.TestBase\MyCompanyName.MyProjectName.TestBase.csproj", "{91853F21-9CD9-4132-BC29-A7D5D84FFFE7}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.Domain.Tests", "test\MyCompanyName.MyProjectName.Domain.Tests\MyCompanyName.MyProjectName.Domain.Tests.csproj", "{E512F4D9-9375-480F-A2F6-A46509F9D824}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.DbMigrator", "src\MyCompanyName.MyProjectName.DbMigrator\MyCompanyName.MyProjectName.DbMigrator.csproj", "{AA94D832-1CCC-4715-95A9-A483F23A1A5D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "0.Solution Items", "0.Solution Items", "{2C4A6DB8-8D9E-42E6-B7C3-1EDB7B3DE22E}"
+ ProjectSection(SolutionItems) = preProject
+ Directory.Build.Lion.targets = Directory.Build.Lion.targets
+ Directory.Build.Microsoft.targets = Directory.Build.Microsoft.targets
+ Directory.Build.targets = Directory.Build.targets
+ Directory.Build.Volo.targets = Directory.Build.Volo.targets
+ global.json = global.json
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "host", "host", "{8C1B8C6C-C518-4290-B070-622CCA6004DA}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.HttpApi.Host", "host\MyCompanyName.MyProjectName.HttpApi.Host\MyCompanyName.MyProjectName.HttpApi.Host.csproj", "{FB20372D-6C96-4733-9AAC-12522F15CAA6}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.FreeSqlRepository", "src\MyCompanyName.MyProjectName.FreeSqlRepository\MyCompanyName.MyProjectName.FreeSqlRepository.csproj", "{27C7A0E6-4C2E-4AFF-9DE7-1F526DDC0D18}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp", "test\MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp\MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj", "{A5E9AAA7-B3A2-44CC-83B8-7260057185E6}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {50B2631D-129C-47B3-A587-029CCD6099BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {50B2631D-129C-47B3-A587-029CCD6099BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {50B2631D-129C-47B3-A587-029CCD6099BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {50B2631D-129C-47B3-A587-029CCD6099BC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {42F719ED-8413-4895-B5B4-5AB56079BC66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {42F719ED-8413-4895-B5B4-5AB56079BC66}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {42F719ED-8413-4895-B5B4-5AB56079BC66}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {42F719ED-8413-4895-B5B4-5AB56079BC66}.Release|Any CPU.Build.0 = Release|Any CPU
+ {520659C8-C734-4298-A3DA-B539DB9DFC0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {520659C8-C734-4298-A3DA-B539DB9DFC0B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {520659C8-C734-4298-A3DA-B539DB9DFC0B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {520659C8-C734-4298-A3DA-B539DB9DFC0B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Release|Any CPU.Build.0 = Release|Any CPU
+ {91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E512F4D9-9375-480F-A2F6-A46509F9D824}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E512F4D9-9375-480F-A2F6-A46509F9D824}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E512F4D9-9375-480F-A2F6-A46509F9D824}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E512F4D9-9375-480F-A2F6-A46509F9D824}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FB20372D-6C96-4733-9AAC-12522F15CAA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FB20372D-6C96-4733-9AAC-12522F15CAA6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FB20372D-6C96-4733-9AAC-12522F15CAA6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FB20372D-6C96-4733-9AAC-12522F15CAA6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {27C7A0E6-4C2E-4AFF-9DE7-1F526DDC0D18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {27C7A0E6-4C2E-4AFF-9DE7-1F526DDC0D18}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {27C7A0E6-4C2E-4AFF-9DE7-1F526DDC0D18}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {27C7A0E6-4C2E-4AFF-9DE7-1F526DDC0D18}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A5E9AAA7-B3A2-44CC-83B8-7260057185E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A5E9AAA7-B3A2-44CC-83B8-7260057185E6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A5E9AAA7-B3A2-44CC-83B8-7260057185E6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A5E9AAA7-B3A2-44CC-83B8-7260057185E6}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {554AD327-6DBA-4F8F-96F8-81CE7A0C863F} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {1A94A50E-06DC-43C1-80B5-B662820EC3EB} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {C956DD76-69C8-4A9C-83EA-D17DF83340FD} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {50B2631D-129C-47B3-A587-029CCD6099BC} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
+ {42F719ED-8413-4895-B5B4-5AB56079BC66} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {520659C8-C734-4298-A3DA-B539DB9DFC0B} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {4164BDF7-F527-4E85-9CE6-E3C2D7426A27} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {3B5A0094-670D-4BB1-BFDD-61B88A8773DC} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
+ {91853F21-9CD9-4132-BC29-A7D5D84FFFE7} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
+ {E512F4D9-9375-480F-A2F6-A46509F9D824} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
+ {AA94D832-1CCC-4715-95A9-A483F23A1A5D} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {FB20372D-6C96-4733-9AAC-12522F15CAA6} = {8C1B8C6C-C518-4290-B070-622CCA6004DA}
+ {27C7A0E6-4C2E-4AFF-9DE7-1F526DDC0D18} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {A5E9AAA7-B3A2-44CC-83B8-7260057185E6} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {28315BFD-90E7-4E14-A2EA-F3D23AF4126F}
+ EndGlobalSection
+EndGlobal
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/NuGet.Config b/templates/abp-vnext-pro-nuget-all/aspnet-core/NuGet.Config
new file mode 100644
index 00000000..44f8e7fe
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/NuGet.Config
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/global.json b/templates/abp-vnext-pro-nuget-all/aspnet-core/global.json
new file mode 100644
index 00000000..065581b4
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/global.json
@@ -0,0 +1,6 @@
+{
+ "sdk": {
+ "version": "7.0.304",
+ "rollForward": "latestFeature"
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Controllers/HomeController.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Controllers/HomeController.cs
new file mode 100644
index 00000000..49f160fd
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Controllers/HomeController.cs
@@ -0,0 +1,10 @@
+namespace MyCompanyName.MyProjectName.Controllers
+{
+ public class HomeController : AbpController
+ {
+ public ActionResult Index()
+ {
+ return Redirect("/Login");
+ }
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Dockerfile b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Dockerfile
new file mode 100644
index 00000000..3017f528
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Dockerfile
@@ -0,0 +1,34 @@
+FROM mcr.microsoft.com/dotnet/aspnet:6.0
+
+# 创建目录
+RUN mkdir /app
+
+COPY publish /app
+
+RUN echo "deb http://mirrors.aliyun.com/debian/ bullseye main non-free contrib" > /etc/apt/sources.list && \
+ echo "deb-src http://mirrors.aliyun.com/debian/ bullseye main non-free contrib" >> /etc/apt/sources.list && \
+ echo "deb http://mirrors.aliyun.com/debian-security/ bullseye-security main" >> /etc/apt/sources.list && \
+ echo "deb-src http://mirrors.aliyun.com/debian-security/ bullseye-security main" >> /etc/apt/sources.list && \
+ echo "deb http://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib" >> /etc/apt/sources.list && \
+ echo "deb-src http://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib" >> /etc/apt/sources.list && \
+ echo "deb http://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib" >> /etc/apt/sources.list && \
+ echo "deb-src http://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib" >> /etc/apt/sources.list && \
+ apt-get update && \
+ apt-get install libgdiplus libc6-dev -y && \
+ ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll && \
+ ln -s /usr/lib/x86_64-linux-gnu/libdl.so /usr/lib/libdl.dll && apt-get clean
+
+# 设置工作目录
+WORKDIR /app
+
+# 暴露80端口
+EXPOSE 80
+# 设置时区 .net6 才有这个问题
+ENV TZ=Asia/Shanghai
+
+# 设置环境变量
+ENV ASPNETCORE_ENVIRONMENT=Production
+
+ENTRYPOINT ["dotnet", "MyCompanyName.MyProjectName.HttpApi.Host.dll"]
+
+
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/AutoDeleteAfterSuccessAttributer.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/AutoDeleteAfterSuccessAttributer.cs
new file mode 100644
index 00000000..d1a7b8e5
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/AutoDeleteAfterSuccessAttributer.cs
@@ -0,0 +1,21 @@
+namespace MyCompanyName.MyProjectName.Extensions.Hangfire;
+
+public class AutoDeleteAfterSuccessAttributer : JobFilterAttribute, IApplyStateFilter
+{
+ private readonly TimeSpan _deleteAfter;
+
+ public AutoDeleteAfterSuccessAttributer(TimeSpan timeSpan)
+ {
+ _deleteAfter = timeSpan;
+ }
+
+ public void OnStateApplied(ApplyStateContext context, IWriteOnlyTransaction transaction)
+ {
+ context.JobExpirationTimeout = _deleteAfter;
+ }
+
+ public void OnStateUnapplied(ApplyStateContext context, IWriteOnlyTransaction transaction)
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/CronType.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/CronType.cs
new file mode 100644
index 00000000..f51f8c56
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/CronType.cs
@@ -0,0 +1,78 @@
+namespace MyCompanyName.MyProjectName.Extensions.Hangfire
+{
+ ///
+ /// Cron类型
+ ///
+ public static class CronType
+ {
+ ///
+ /// 周期性为分钟的任务
+ ///
+ /// 执行周期的间隔,默认为每分钟一次
+ ///
+ public static string Minute(int interval = 1)
+ {
+ return "1 0/" + interval.ToString() + " * * * ? ";
+ }
+
+ ///
+ /// 周期性为小时的任务
+ ///
+ /// 第几分钟开始,默认为第一分钟
+ /// 执行周期的间隔,默认为每小时一次
+ ///
+ public static string Hour(int minute = 1, int interval = 1)
+ {
+ return "1 " + minute + " 0/" + interval.ToString() + " * * ? ";
+ }
+
+ ///
+ /// 周期性为天的任务
+ ///
+ /// 第几小时开始,默认从1点开始
+ /// 第几分钟开始,默认从第1分钟开始
+ /// 执行周期的间隔,默认为每天一次
+ ///
+ public static string Day(int hour = 1, int minute = 1, int interval = 1)
+ {
+ return "1 " + minute.ToString() + " " + hour.ToString() + " 1/" + interval.ToString() + " * ? ";
+ }
+
+ ///
+ /// 周期性为周的任务
+ ///
+ /// 星期几开始,默认从星期一点开始
+ /// 第几小时开始,默认从1点开始
+ /// 第几分钟开始,默认从第1分钟开始
+ ///
+ public static string Week(DayOfWeek dayOfWeek = DayOfWeek.Monday, int hour = 1, int minute = 1)
+ {
+ return Cron.Weekly(dayOfWeek, hour, minute);
+ }
+
+ ///
+ /// 周期性为月的任务
+ ///
+ /// 几号开始,默认从一号开始
+ /// 第几小时开始,默认从1点开始
+ /// 第几分钟开始,默认从第1分钟开始
+ ///
+ public static string Month(int day = 1, int hour = 1, int minute = 1)
+ {
+ return Cron.Monthly(day, hour, minute);
+ }
+
+ ///
+ /// 周期性为年的任务
+ ///
+ /// 几月开始,默认从一月开始
+ /// 几号开始,默认从一号开始
+ /// 第几小时开始,默认从1点开始
+ /// 第几分钟开始,默认从第1分钟开始
+ ///
+ public static string Year(int month = 1, int day = 1, int hour = 1, int minute = 1)
+ {
+ return Cron.Yearly(month, day, hour, minute);
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/CustomHangfireAuthorizeFilter.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/CustomHangfireAuthorizeFilter.cs
new file mode 100644
index 00000000..e2f1ee6c
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/CustomHangfireAuthorizeFilter.cs
@@ -0,0 +1,11 @@
+namespace MyCompanyName.MyProjectName.Extensions.Hangfire
+{
+ public class CustomHangfireAuthorizeFilter : IDashboardAuthorizationFilter
+ {
+ public bool Authorize(DashboardContext context)
+ {
+ var _currentUser = context.GetHttpContext().RequestServices.GetRequiredService();
+ return _currentUser.IsAuthenticated;
+ }
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/JobRetryLastFilter.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/JobRetryLastFilter.cs
new file mode 100644
index 00000000..bb2d0553
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/JobRetryLastFilter.cs
@@ -0,0 +1,24 @@
+namespace MyCompanyName.MyProjectName.Extensions.Hangfire;
+
+///
+/// 重试最后一次
+///
+public class JobRetryLastFilter : JobFilterAttribute, IElectStateFilter
+{
+ private int RetryCount { get; }
+
+ public JobRetryLastFilter(int retryCount)
+ {
+ RetryCount = retryCount;
+ }
+
+
+ public void OnStateElection(ElectStateContext context)
+ {
+ var retryAttempt = context.GetJobParameter("RetryCount");
+ if (RetryCount == retryAttempt)
+ {
+ Log.Error("最后一次重试");
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/RecurringJobsExtensions.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/RecurringJobsExtensions.cs
new file mode 100644
index 00000000..4eafe81b
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/RecurringJobsExtensions.cs
@@ -0,0 +1,14 @@
+using MyCompanyName.MyProjectName.Jobs;
+
+namespace MyCompanyName.MyProjectName.Extensions
+{
+ public static class RecurringJobsExtensions
+ {
+ public static void CreateRecurringJob(this ApplicationInitializationContext context)
+ {
+ using var scope = context.ServiceProvider.CreateScope();
+ var testJob = scope.ServiceProvider.GetService();
+ RecurringJob.AddOrUpdate("测试Job", () => testJob.ExecuteAsync(), CronType.Minute(1), TimeZoneInfo.Local);
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Middlewares/MyProjectNameApplicationBuilderExtensionsExtensions.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Middlewares/MyProjectNameApplicationBuilderExtensionsExtensions.cs
new file mode 100644
index 00000000..7df40720
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Middlewares/MyProjectNameApplicationBuilderExtensionsExtensions.cs
@@ -0,0 +1,13 @@
+namespace Microsoft.AspNetCore.Builder;
+
+public static class MyProjectNameApplicationBuilderExtensionsExtensions
+{
+ ///
+ /// 记录请求响应日志
+ ///
+ ///
+ public static IApplicationBuilder UseRequestLog(this IApplicationBuilder app)
+ {
+ return app.UseMiddleware();
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Middlewares/RequestLogMiddleware.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Middlewares/RequestLogMiddleware.cs
new file mode 100644
index 00000000..f3c712e7
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Middlewares/RequestLogMiddleware.cs
@@ -0,0 +1,77 @@
+namespace MyCompanyName.MyProjectName.Extensions.Middlewares;
+
+public class RequestLogMiddleware
+{
+ private readonly RequestDelegate _next;
+ private readonly ILogger _logger;
+
+ public RequestLogMiddleware(RequestDelegate next,
+ ILogger logger)
+ {
+ _next = next;
+ _logger = logger;
+ }
+
+ public async Task InvokeAsync(HttpContext context)
+ {
+ context.Request.EnableBuffering();
+ var originalBody = context.Response.Body;
+ if (context.Request.Path.ToString().ToLower().Contains("swagger")
+ || context.Request.Path.ToString().ToLower().Contains("login")
+ || context.Request.Path.ToString().ToLower().Contains("monitor")
+ || context.Request.Path.ToString().ToLower().Contains("cap")
+ || context.Request.Path.ToString().ToLower().Contains("hangfire")
+ || context.Request.Path.ToString() == "/"
+ )
+ {
+ await _next(context);
+ }
+ else
+ {
+ try
+ {
+ var logRequestId = Guid.NewGuid().ToString();
+ await RequestDataLog(context, logRequestId);
+ using (var ms = new MemoryStream())
+ {
+ context.Response.Body = ms;
+ await _next(context);
+ ResponseDataLog(ms, logRequestId);
+ ms.Position = 0;
+ await ms.CopyToAsync(originalBody);
+ }
+ }
+ catch (Exception ex)
+ {
+ // 记录异常
+ _logger.LogError(ex.Message + "" + ex.InnerException);
+ }
+ finally
+ {
+ context.Response.Body = originalBody;
+ }
+ }
+ }
+
+ private async Task RequestDataLog(HttpContext context,
+ string requestId)
+ {
+ var request = context.Request;
+ var body = new StreamReader(request.Body);
+ var requestData = $" 请求路径:{request.Path}\r\n 请求Body参数:{await body.ReadToEndAsync()}";
+ _logger.LogInformation($"日志中间件[Request],LogRequestId:{requestId}:请求接口信息:{requestData}");
+ request.Body.Position = 0;
+ }
+
+ private void ResponseDataLog(MemoryStream ms, string requestId)
+ {
+ ms.Position = 0;
+ var responseBody = new StreamReader(ms).ReadToEnd();
+ // 去除 Html
+ var isHtml = Regex.IsMatch(responseBody, "<[^>]+>");
+ if (!isHtml && !string.IsNullOrEmpty(responseBody))
+ {
+ _logger.LogInformation($"日志中间件[Response],LogRequestId:{requestId}:响应接口信息:{responseBody}");
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/GlobalUsings.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/GlobalUsings.cs
new file mode 100644
index 00000000..7680d5c7
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/GlobalUsings.cs
@@ -0,0 +1,65 @@
+// Global using directives
+
+global using System;
+global using System.Collections.Generic;
+global using System.IO;
+global using System.Linq;
+global using System.Text;
+global using System.Text.RegularExpressions;
+global using System.Threading.Tasks;
+global using Hangfire;
+global using Hangfire.Common;
+global using Hangfire.Dashboard;
+global using Hangfire.States;
+global using Hangfire.Storage;
+global using Lion.AbpPro;
+global using MyCompanyName.MyProjectName.EntityFrameworkCore;
+global using MyCompanyName.MyProjectName.Extensions;
+global using MyCompanyName.MyProjectName.Extensions.Hangfire;
+global using MyCompanyName.MyProjectName.Extensions.Middlewares;
+global using MyCompanyName.MyProjectName.MultiTenancy;
+global using Microsoft.AspNetCore.Authentication.JwtBearer;
+global using Microsoft.AspNetCore.Builder;
+global using Microsoft.AspNetCore.DataProtection;
+global using Microsoft.AspNetCore.Hosting;
+global using Microsoft.AspNetCore.Http;
+global using Microsoft.AspNetCore.Identity;
+global using Microsoft.AspNetCore.Mvc;
+global using Microsoft.AspNetCore.Mvc.Abstractions;
+global using Microsoft.AspNetCore.Mvc.Filters;
+global using Microsoft.Extensions.Configuration;
+global using Microsoft.Extensions.DependencyInjection;
+global using Microsoft.Extensions.Hosting;
+global using Microsoft.Extensions.Localization;
+global using Microsoft.Extensions.Logging;
+global using Microsoft.Extensions.Logging.Abstractions;
+global using Microsoft.Extensions.Options;
+global using Microsoft.IdentityModel.Tokens;
+global using Microsoft.OpenApi.Models;
+global using Serilog;
+global using StackExchange.Redis;
+global using Swagger;
+global using Swashbuckle.AspNetCore.SwaggerUI;
+global using Volo.Abp;
+global using Volo.Abp.Account.Web;
+global using Volo.Abp.AspNetCore.Auditing;
+global using Volo.Abp.AspNetCore.Authentication.JwtBearer;
+global using Volo.Abp.AspNetCore.ExceptionHandling;
+global using Volo.Abp.AspNetCore.Mvc;
+global using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy;
+global using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic;
+global using Volo.Abp.AspNetCore.Serilog;
+global using Volo.Abp.Auditing;
+global using Volo.Abp.Authorization;
+global using Volo.Abp.BackgroundJobs;
+global using Volo.Abp.BackgroundJobs.Hangfire;
+global using Volo.Abp.Caching;
+global using Volo.Abp.Caching.StackExchangeRedis;
+global using Volo.Abp.DependencyInjection;
+global using Volo.Abp.Domain.Entities;
+global using Volo.Abp.ExceptionHandling;
+global using Volo.Abp.Http;
+global using Volo.Abp.Json;
+global using Volo.Abp.Modularity;
+global using Volo.Abp.Users;
+global using Volo.Abp.Validation;
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj
new file mode 100644
index 00000000..01714830
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj
@@ -0,0 +1,59 @@
+
+
+
+
+ net7.0
+ MyCompanyName.MyProjectName
+ true
+ MyCompanyName.MyProjectName-4681b4fd-151f-4221-84a4-929d86723e4c
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostConst.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostConst.cs
new file mode 100644
index 00000000..fa0fe089
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostConst.cs
@@ -0,0 +1,40 @@
+namespace MyCompanyName.MyProjectName
+{
+ public static class MyProjectNameHttpApiHostConst
+ {
+ ///
+ /// 跨域策略名
+ ///
+ public const string DefaultCorsPolicyName = "Default";
+
+ ///
+ /// Cookies名称
+ ///
+ public const string DefaultCookieName = "MyCompanyName.MyProjectName.Http.Api";
+
+ ///
+ /// SwaggerUi 端点
+ ///
+ public const string SwaggerUiEndPoint = "/swagger";
+
+ ///
+ /// Hangfire 端点
+ ///
+ public const string HangfireDashboardEndPoint = "/hangfire";
+
+ ///
+ /// CAP 端点
+ ///
+ public const string CapDashboardEndPoint = "/cap";
+
+
+ public const string MoreEndPoint = "https://doc.cncore.club/";
+
+
+ ///
+ /// HMiniprofiler端点
+ ///
+ public const string MiniprofilerEndPoint = "/profiler/results-index";
+
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs
new file mode 100644
index 00000000..59d7c8be
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs
@@ -0,0 +1,268 @@
+namespace MyCompanyName.MyProjectName
+{
+ [DependsOn(
+ typeof(MyProjectNameHttpApiModule),
+ typeof(SharedHostingMicroserviceModule),
+ typeof(AbpAspNetCoreMvcUiMultiTenancyModule),
+ typeof(MyProjectNameEntityFrameworkCoreModule),
+ typeof(AbpAspNetCoreAuthenticationJwtBearerModule),
+ typeof(AbpAspNetCoreSerilogModule),
+ typeof(AbpAccountWebModule),
+ typeof(MyProjectNameApplicationModule),
+ typeof(AbpAspNetCoreMvcUiBasicThemeModule),
+ typeof(AbpCachingStackExchangeRedisModule)
+ )]
+ public class MyProjectNameHttpApiHostModule : AbpModule
+ {
+
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ var configuration = context.Services.GetConfiguration();
+ ConfigureCache(context);
+ ConfigureSwaggerServices(context);
+ ConfigureJwtAuthentication(context, configuration);
+ ConfigureMiniProfiler(context);
+ ConfigureIdentity(context);
+ ConfigureAuditLog(context);
+ ConfigurationSignalR(context);
+ }
+
+ public override void OnApplicationInitialization(ApplicationInitializationContext context)
+ {
+ var app = context.GetApplicationBuilder();
+ app.UseAbpRequestLocalization();
+ app.UseCorrelationId();
+ app.UseStaticFiles();
+ app.UseMiniProfiler();
+ app.UseRouting();
+ app.UseCors(MyProjectNameHttpApiHostConst.DefaultCorsPolicyName);
+ app.UseAuthentication();
+
+ if (MultiTenancyConsts.IsEnabled)
+ {
+ app.UseMultiTenancy();
+ }
+
+ app.UseAuthorization();
+ app.UseSwagger();
+ app.UseAbpSwaggerUI(options =>
+ {
+ options.SwaggerEndpoint("/swagger/MyProjectName/swagger.json", "MyProjectName API");
+ options.DocExpansion(DocExpansion.None);
+ options.DefaultModelsExpandDepth(-1);
+ });
+
+ app.UseAuditing();
+ app.UseAbpSerilogEnrichers();
+
+ app.UseUnitOfWork();
+ app.UseConfiguredEndpoints(endpoints => { endpoints.MapHealthChecks("/health"); });
+
+ }
+ private void ConfigurationSignalR(ServiceConfigurationContext context)
+ {
+ var redisConnection = context.Services.GetConfiguration()["Redis:Configuration"];
+
+ if (redisConnection.IsNullOrWhiteSpace())
+ {
+ throw new UserFriendlyException(message: "Redis连接字符串未配置.");
+ }
+
+ context.Services.AddSignalR().AddStackExchangeRedis(redisConnection, options => { options.Configuration.ChannelPrefix = "Lion.AbpPro"; });
+ }
+ ///
+ /// 配置MiniProfiler
+ ///
+ private void ConfigureMiniProfiler(ServiceConfigurationContext context)
+ {
+ context.Services.AddMiniProfiler(options => options.RouteBasePath = "/profiler").AddEntityFramework();
+ }
+
+ ///
+ /// 配置JWT
+ ///
+ private void ConfigureJwtAuthentication(ServiceConfigurationContext context, IConfiguration configuration)
+ {
+ context.Services.AddAuthentication(options =>
+ {
+ options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
+ options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
+ })
+ .AddJwtBearer(options =>
+ {
+ options.TokenValidationParameters =
+ new TokenValidationParameters()
+ {
+ // 是否开启签名认证
+ ValidateIssuerSigningKey = true,
+ ValidateIssuer = true,
+ ValidateAudience = true,
+ ValidateLifetime = true,
+ //ClockSkew = TimeSpan.Zero,
+ ValidIssuer = configuration["Jwt:Issuer"],
+ ValidAudience = configuration["Jwt:Audience"],
+ IssuerSigningKey =
+ new SymmetricSecurityKey(
+ Encoding.ASCII.GetBytes(configuration["Jwt:SecurityKey"]))
+ };
+
+ options.Events = new JwtBearerEvents
+ {
+ OnMessageReceived = currentContext =>
+ {
+ var path = currentContext.HttpContext.Request.Path;
+ if (path.StartsWithSegments("/login"))
+ {
+ return Task.CompletedTask;
+ }
+
+ var accessToken = string.Empty;
+ if (currentContext.HttpContext.Request.Headers.ContainsKey("Authorization"))
+ {
+ accessToken = currentContext.HttpContext.Request.Headers["Authorization"];
+ if (!string.IsNullOrWhiteSpace(accessToken))
+ {
+ accessToken = accessToken.Split(" ").LastOrDefault();
+ }
+ }
+
+ if (accessToken.IsNullOrWhiteSpace())
+ {
+ accessToken = currentContext.Request.Query["access_token"].FirstOrDefault();
+ }
+
+ if (accessToken.IsNullOrWhiteSpace())
+ {
+ accessToken = currentContext.Request.Cookies[MyProjectNameHttpApiHostConst.DefaultCookieName];
+ }
+
+ currentContext.Token = accessToken;
+ currentContext.Request.Headers.Remove("Authorization");
+ currentContext.Request.Headers.Add("Authorization", $"Bearer {accessToken}");
+
+ return Task.CompletedTask;
+ }
+ };
+ });
+ }
+
+
+
+ ///
+ /// Redis缓存
+ ///
+ private void ConfigureCache(ServiceConfigurationContext context)
+ {
+ Configure(
+ options => { options.KeyPrefix = "MyProjectName:"; });
+ var configuration = context.Services.GetConfiguration();
+ var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]);
+ context.Services
+ .AddDataProtection()
+ .PersistKeysToStackExchangeRedis(redis, "MyProjectName-Protection-Keys");
+ }
+
+
+
+ ///
+ /// 配置Identity
+ ///
+ private void ConfigureIdentity(ServiceConfigurationContext context)
+ {
+ context.Services.Configure(options => { options.Lockout = new LockoutOptions() { AllowedForNewUsers = false }; });
+ }
+
+ private static void ConfigureSwaggerServices(ServiceConfigurationContext context)
+ {
+ context.Services.AddSwaggerGen(
+ options =>
+ {
+ // 文件下载类型
+ options.MapType(() => new OpenApiSchema() { Type = "file" });
+
+ options.SwaggerDoc("MyProjectName",
+ new OpenApiInfo { Title = "MyCompanyNameMyProjectName API", Version = "v1" });
+ options.DocInclusionPredicate((docName, description) => true);
+ options.EnableAnnotations(); // 启用注解
+ options.DocumentFilter();
+ options.SchemaFilter();
+ // 加载所有xml注释,这里会导致swagger加载有点缓慢
+ var xmlPaths = Directory.GetFiles(AppContext.BaseDirectory, "*.xml");
+ foreach (var xml in xmlPaths)
+ {
+ options.IncludeXmlComments(xml, true);
+ }
+
+ options.AddSecurityDefinition(JwtBearerDefaults.AuthenticationScheme,
+ new OpenApiSecurityScheme()
+ {
+ Description = "直接在下框输入JWT生成的Token",
+ Name = "Authorization",
+ In = ParameterLocation.Header,
+ Type = SecuritySchemeType.Http,
+ Scheme = JwtBearerDefaults.AuthenticationScheme,
+ BearerFormat = "JWT"
+ });
+ options.AddSecurityRequirement(new OpenApiSecurityRequirement
+ {
+ {
+ new OpenApiSecurityScheme
+ {
+ Reference = new OpenApiReference
+ {
+ Type = ReferenceType.SecurityScheme, Id = "Bearer"
+ }
+ },
+ new List()
+ }
+ });
+
+ options.AddSecurityDefinition("ApiKey", new OpenApiSecurityScheme()
+ {
+ Type = SecuritySchemeType.ApiKey,
+ In = ParameterLocation.Header,
+ Name = "Accept-Language",
+ Description = "多语言设置,系统预设语言有zh-Hans、en,默认为zh-Hans",
+ });
+
+ options.AddSecurityRequirement(new OpenApiSecurityRequirement
+ {
+ {
+ new OpenApiSecurityScheme
+ {
+ Reference = new OpenApiReference
+ { Type = ReferenceType.SecurityScheme, Id = "ApiKey" }
+ },
+ Array.Empty()
+ }
+ });
+ });
+ }
+
+
+
+ ///
+ /// 审计日志
+ ///
+ private void ConfigureAuditLog(ServiceConfigurationContext context)
+ {
+ Configure
+ (
+ options =>
+ {
+ options.IsEnabled = true;
+ options.EntityHistorySelectors.AddAllEntities();
+ options.ApplicationName = "MyCompanyName.MyProjectName";
+ }
+ );
+
+ Configure(
+ options =>
+ {
+ options.IgnoredUrls.Add("/AuditLogs/page");
+ options.IgnoredUrls.Add("/hangfire/stats");
+ options.IgnoredUrls.Add("/cap");
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Login.cshtml b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Login.cshtml
new file mode 100644
index 00000000..bcc8c7a1
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Login.cshtml
@@ -0,0 +1,161 @@
+@page
+@model MyCompanyName.MyProjectName.Pages.Login
+
+@{
+ Layout = null;
+}
+
+
+
+
+
+ 后台服务登录
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Login.cshtml.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Login.cshtml.cs
new file mode 100644
index 00000000..bbd1a1cf
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Login.cshtml.cs
@@ -0,0 +1,69 @@
+
+using Lion.AbpPro.BasicManagement.ConfigurationOptions;
+using Lion.AbpPro.BasicManagement.Users;
+using Lion.AbpPro.BasicManagement.Users.Dtos;
+using Microsoft.AspNetCore.Mvc.RazorPages;
+
+
+namespace MyCompanyName.MyProjectName.Pages
+{
+ public class Login : PageModel
+ {
+ private readonly IAccountAppService _accountAppService;
+ private readonly ILogger _logger;
+ private readonly IHostEnvironment _hostEnvironment;
+ private readonly JwtOptions _jwtOptions;
+ public Login(IAccountAppService accountAppService,
+ ILogger logger,
+ IHostEnvironment hostEnvironment,
+ IOptionsSnapshot jwtOptions)
+ {
+ _accountAppService = accountAppService;
+ _logger = logger;
+ _hostEnvironment = hostEnvironment;
+ _jwtOptions = jwtOptions.Value;
+ }
+
+ public void OnGet()
+ {
+ }
+
+ public async Task OnPost()
+ {
+ string userName = Request.Form["userName"];
+ string password = Request.Form["password"];
+ if (userName.IsNullOrWhiteSpace() || password.IsNullOrWhiteSpace())
+ {
+ Response.Redirect("/Login");
+ return;
+ }
+
+ try
+ {
+ var options = new CookieOptions
+ {
+ Expires = DateTime.Now.AddHours(_jwtOptions.ExpirationTime),
+ SameSite = SameSiteMode.Unspecified,
+ };
+
+
+ // 设置cookies domain
+ //options.Domain = "MyProjectName.cn";
+
+
+ var result = await _accountAppService.LoginAsync(new LoginInput()
+ { Name = userName, Password = password });
+ Response.Cookies.Append(MyProjectNameHttpApiHostConst.DefaultCookieName,
+ result.Token, options);
+ }
+ catch (Exception e)
+ {
+ _logger.LogError($"登录失败:{e.Message}");
+ Response.Redirect("/Login");
+ return;
+ }
+
+ Response.Redirect("/monitor");
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Monitor.cshtml b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Monitor.cshtml
new file mode 100644
index 00000000..ebf35a54
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Monitor.cshtml
@@ -0,0 +1,171 @@
+@page
+@using MyCompanyName.MyProjectName
+@model MyCompanyName.MyProjectName.Pages.Monitor
+
+
+@{
+ Layout = null;
+}
+
+
+
+
+
+
+
+
+
+ 后端服务
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Monitor.cshtml.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Monitor.cshtml.cs
new file mode 100644
index 00000000..dfddc617
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Monitor.cshtml.cs
@@ -0,0 +1,12 @@
+using Microsoft.AspNetCore.Mvc.RazorPages;
+
+namespace MyCompanyName.MyProjectName.Pages
+{
+ public class Monitor : PageModel
+ {
+ public void OnGet()
+ {
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs
new file mode 100644
index 00000000..c10267e9
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs
@@ -0,0 +1,25 @@
+namespace MyCompanyName.MyProjectName
+{
+ public class Program
+ {
+ public static void Main(string[] args)
+ {
+ CreateHostBuilder(args).Build().Run();
+
+ }
+
+ private static IHostBuilder CreateHostBuilder(string[] args) =>
+ Host.CreateDefaultBuilder(args)
+ .ConfigureWebHostDefaults(webBuilder =>
+ {
+ webBuilder.ConfigureKestrel((context, options) => { options.Limits.MaxRequestBodySize = 1024 * 50; });
+ webBuilder.UseStartup();
+ })
+ .UseSerilog((context, loggerConfiguration) =>
+ {
+ SerilogToEsExtensions.SetSerilogConfiguration(
+ loggerConfiguration,
+ context.Configuration);
+ }).UseAutofac();
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Properties/launchSettings.json b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Properties/launchSettings.json
new file mode 100644
index 00000000..8d1ba7dc
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "MyCompanyName.MyProjectName.HttpApi.Host": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "applicationUrl": "http://localhost:44315",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Startup.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Startup.cs
new file mode 100644
index 00000000..1cf9c196
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Startup.cs
@@ -0,0 +1,15 @@
+namespace MyCompanyName.MyProjectName
+{
+ public class Startup
+ {
+ public void ConfigureServices(IServiceCollection services)
+ {
+ services.AddApplication();
+ }
+
+ public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
+ {
+ app.InitializeApplication();
+ }
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.Production.json b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.Production.json
new file mode 100644
index 00000000..cc715dc6
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.Production.json
@@ -0,0 +1,56 @@
+{
+ "Serilog": {
+ "Using": [
+ "Serilog.Sinks.Console",
+ "Serilog.Sinks.File"
+ ],
+ "MinimumLevel": {
+ "Default": "Debug",
+ "Override": {
+ "Microsoft": "Information",
+ "Volo.Abp": "Information",
+ "Hangfire": "Information",
+ "DotNetCore.CAP": "Information",
+ "Serilog.AspNetCore": "Information",
+ "Microsoft.EntityFrameworkCore": "Warning",
+ "Microsoft.AspNetCore": "Information"
+ }
+ },
+ "WriteTo": [
+ {
+ "Name": "Console"
+ },
+ {
+ "Name": "File",
+ "Args": {
+ "path": "logs/logs-.txt",
+ "rollingInterval": "Day"
+ }
+ }
+ ]
+ },
+ "App": {
+ "SelfUrl": "http://localhost:44315",
+ "CorsOrigins": "https://*.MyProjectName.com,http://localhost:4200,http://localhost:3100,http://localhost:80,http://localhost"
+ },
+ "ConnectionStrings": {
+ "Default": "Data Source=localhost;Port=3306;Database=MyCompanyNameMyProjectNameDB;uid=root;pwd=1q2w3E*;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true"
+ },
+ "Redis": {
+ "Configuration": "localhost,password=1q2w3E*,defaultdatabase=1"
+ },
+ "Jwt": {
+ "Audience": "MyCompanyName.MyProjectName",
+ "SecurityKey": "dzehzRz9a8asdfasfdadfasdfasdfafsdadfasbasdf=",
+ "Issuer": "MyCompanyName.MyProjectName",
+ "ExpirationTime": 2
+ },
+ "ElasticSearch": {
+ "Enabled": "false",
+ "Url": "http://es.cn",
+ "IndexFormat": "MyCompanyName.MyProjectName.development.{0:yyyy.MM.dd}",
+ "UserName": "elastic",
+ "Password": "aVVhjQ95RP7nbwNy",
+ "SearchIndexFormat": "MyCompanyName.MyProjectName.development*"
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json
new file mode 100644
index 00000000..832d3ab8
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json
@@ -0,0 +1,57 @@
+{
+ "Serilog": {
+ "Using": [
+ "Serilog.Sinks.Console",
+ "Serilog.Sinks.File"
+ ],
+ "MinimumLevel": {
+ "Default": "Debug",
+ "Override": {
+ "Microsoft": "Information",
+ "Volo.Abp": "Information",
+ "Hangfire": "Information",
+ "DotNetCore.CAP": "Information",
+ "Serilog.AspNetCore": "Information",
+ "Microsoft.EntityFrameworkCore": "Warning",
+ "Microsoft.AspNetCore": "Information"
+ }
+ },
+ "WriteTo": [
+ {
+ "Name": "Console"
+ },
+ {
+ "Name": "File",
+ "Args": {
+ "path": "logs/logs-.txt",
+ "rollingInterval": "Day"
+ }
+ }
+ ]
+ },
+ "App": {
+ "SelfUrl": "http://localhost:44315",
+ "CorsOrigins": "https://*.MyProjectName.com,http://localhost:4200,http://localhost:3100"
+ },
+ "ConnectionStrings": {
+ "Default": "Data Source=localhost;Port=3306;Database=MyCompanyNameMyProjectNameDB;uid=root;pwd=1q2w3E*;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true",
+ "Hangfire": "localhost,password=mypassword,defaultdatabase=2"
+ },
+ "Redis": {
+ "Configuration": "localhost,password=1q2w3E*,defaultdatabase=1"
+ },
+ "Jwt": {
+ "Audience": "MyCompanyName.MyProjectName",
+ "SecurityKey": "dzehzRz9a8asdfasfdadfasdfasdfafsdadfasbasdf=",
+ "Issuer": "MyCompanyName.MyProjectName",
+ "ExpirationTime": 2
+ },
+ "ElasticSearch": {
+ "Enabled": "false",
+ "Url": "http://es.cn",
+ "IndexFormat": "MyCompanyName.MyProjectName.development.{0:yyyy.MM.dd}",
+ "UserName": "elastic",
+ "Password": "aVVhjQ95RP7nbwNy",
+ "SearchIndexFormat": "MyCompanyName.MyProjectName.development*"
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/tempkey.jwk b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/tempkey.jwk
new file mode 100644
index 00000000..b4f8b7de
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/tempkey.jwk
@@ -0,0 +1 @@
+{"AdditionalData":{},"Alg":"RS256","Crv":null,"D":"eH-Ld45J684VguyI2jACQEEVGtTx79Nt7ElT20JeUi-pbVnhJxxAJwnAe68d9Q8skpv6BxZs5QuyIORwfGpJK-lKVuo8EtyUQTuUuPmP4o1YK4cv2FIi5xN18tddTltg2JmJi1sN2AD5z-zwm45YNvoFxdQYlnUlA9lJL8QfG0HQLMQX1sv2_lgND8RfRGQBCpVXC2kcap4GvkFVQpKaQ5xaUqvNdH6ftwkGMdFfMRlHGhyYyabIjs4T16HslofvXiHbOCAzk37HtBNNsBpeoQuZul1-G7tAndHe1XtuGvuE-k1fyqdm3YiCU8wK7FpvQU3x6JqvfqmWgMAPnWKOtQ","DP":"hd3I9Nc3LlaZDoPg20JZu48kpv9rMMQ0rLtcZ0UPB_HpZWBC_No-3t3t1HFRbD4iz0MCpCR6gb5q4UsL2N2xh3Q8OhQ1Zrl76UKDZrVKs3oE0VVr9K2VUU3s1sytE4OWSv7PAHYURygcx_MrunMn8Ryd4ZJBQ_g5M2GvpBj1o5M","DQ":"T3ibciK4KxGGHqau9dnWxE6l3fGtcNw1GcjV93Lxe0NKTbfrwPEIFVVAyPsFS8QdmRXEgyunkDFKLHyq2hXBi2fZCwXGoWkUqVUKAKMaNYZaDDd_XeJKOu7mwNY8rgxNETHCyMSnnNNPNabBf2iiXmrBnMwesle2L1kwky42yns","E":"AQAB","K":null,"KeyId":"0D94529E740F5FD50EC6B8A19FF460D6","Kid":"0D94529E740F5FD50EC6B8A19FF460D6","Kty":"RSA","N":"w2jhtWb6a3kH4VqAPfuuvdF5hBh7U6gwMRnddHAH7zaVL6aYwjpCzNW56RQy4W4Zabv1My4Yw9GZpjrOcyr3Bm669eZjn_JC0O00eRTNStNgmg2kB_6AB6ROkEW7br1JC0jKr_dXhOYPBMmR-KHvpwaZXA9R1xOqY02S3JD0KB-TGMSC9q1RlVydt81aMOHFzWVyruLsYGdmcKhRPKDtL6GXpU_DG1gzzOYbk795x_D_UUTOJYuhIDEj7aYi3o32yXLEBvh4Q7HPLjLcWzV-EzCn6Ossl-EVJ2TrR53Eln03R93Vmo63DzQbLIOi3yTcZD2a3O6mpGLiqyZjUducIQ","Oth":null,"P":"y84cEtE6IRBeU2sDJxjDYb50HB4nAF7-bfvbEq0haQL2sFBz-Q-uOUAeXhaS74Gh_IagmW1TzOKblVilijMHCsfOFTWlCljaDoNfdl31enh50HMFvUu8IFjcWiQ9fjR5no8n5-jDeRO5zVfgcWoRHfVTOq4Di7WlVHJRr8FB-R8","Q":"9XRZvvMIvoumlDAVxWZHkb7_an0_dFwBLqc8v74XBZhiK5SLuBqmsJICB5kwNTKzORH7yedx-RXOJWkchJLlEtmH_cQO_6WKQQAyc1PMnLPa0tYkhjotWo8VRE9bAdVmrR0cnJeudfSJ-6gDpUBQYy9g1m8cAfWbTAk3at2_gr8","QI":"xRLXLwhTdNbevlEzANlDDnU9lDeKZWV9-YrvUxHMJBBygBNVqkNFWiee7LNUi82YgTHRn46rpHY9TZf6oQbgk6xa86MyDYXGU2uGO8DHm5oh20Spp7A-RlzZ4JRXAJ3eAYMZHQIP45JApVvKbgHh_pUGjNaiqZKZ9IN6H_L9k1s","Use":null,"X":null,"X5t":null,"X5tS256":null,"X5u":null,"Y":null,"KeySize":2048,"HasPrivateKey":true,"CryptoProviderFactory":{"CryptoProviderCache":{},"CustomCryptoProvider":null,"CacheSignatureProviders":true}}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/tempkey.rsa b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/tempkey.rsa
new file mode 100644
index 00000000..ed0defa5
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/tempkey.rsa
@@ -0,0 +1 @@
+{"KeyId":"600caa200caf5d805eba9f06ace9e236","Parameters":{"D":"KCNDHA96eimN+UqchSKocgYITGflaAIwxzCS5KqSTkYAFliPthQx7LySuLor4F1+uLvwnh3ZocyI3y43GZu+eVHD256sxdV8/UsQz1HC23RRFqcUiAZjze8K5VMVStrBOxaa/Ds1U9/bpuNE7jZdcgFIEHsdZtCACqwtlE4nlIs1/GLiokqjBOESgxJMy9WUeDbWcvoo+YdwgKf5jt6AZHOYSS+TokLL+Y7TEfGMXe3jZD9VtSMkBSM8wGB89zNGR0FZB9maCG/BCoRJqxdYRyeb4FFXJclQtK3DexyDVqlNZQaNKVHu0tVAnVNKKcd7Iex8gA+5DNqqucUA7C/F6Q==","DP":"fr9iaNb1W4YZ/NJ56+N3SCeDQYuKobq1qeaQWmHlQsOHKoHhNZJQZ5x0M9PQilou16AwVlNGCJncMwxsSUxXn6itG0LcBnvfMeo2v3xKcij1BtFR9qfXecwEn2nnhI3mpXtZxyCdP3NIYUp9qViLJUjGJqrbQk+OIAGRQd2rRe0=","DQ":"o1umLkDodtwvpCsDguQYSjd3iob+WHNmfe/9HyjADmUehP8b9SpUgcrb+QF301J8YmQMnYZKWW5rEwKOtwsWNswgXfMnXeWerlZmz0tj9y38YczS70liU0vETsRefhrRCaXHraMvneqYNNedhsrCNalWK+DNwcixi4L59vA8ofs=","Exponent":"AQAB","InverseQ":"btd1nwwxl/E3ryfDi2bN12TuVDvv7yoPvryIlLgu+FiLpe4vaA1omDLliQBcl7oeyA563HBUop4D5oE7si+jD64N8XgFz37dD3KqUokeQ4lrTSSOePT1K+nWIl30sqDd7YE4auz4CvSjm2wXmN31+CXW1hp3YWN2972yrUt+R5U=","Modulus":"uwMB6reAVtm/Cq0BRPZ0ozBq6g3wDh2kzqFKBf8I7u8d9p7i5ExLSrOWPupHwPr/IW1VUn2TKHrJ8OnyYhznKIRxqlxj0U3D2GXijz5kfFOoHK+mlfKaDMqweRoS0UzEz58kMlgwUoDraUj6dTHTPCVPo3TqA2ImRw50j6D+jobFrY5321EFvlirZViMPDAgB8Ca7wGCqNBcCxvIPYw1O6WZmcVmjG7umelD3XjcUIQlEbIyAmi/3gXAo7NdPmgOamla6bnSWsy429HfsNpXyCfPBzV3QS3ubpTekWPoPcOVZbWwVPYtFQbhRh8PmWATRx0cV6oePZNZGxGeJl8WYQ==","P":"wplelBfVmiOPmr6iUxtOgIzuvwSqvP6Rqmh8dhaGDiJjU8OqZ0tZhuh0G+xnMLPIHb2fMeg0dqZMJZ5iXaIi1QycYn/JKz1i4cUonJ6IIQeKKf67tvzn/BY0V0N8rJw8hVfzou+/5sRBCbiHtJ2KIN1YJQuWGFFfrZJOJzc95ss=","Q":"9gTGKoDiOdrY8kqIXJ2nMhoeNryAH4q3EUrROJ7simqc28oYlGx24Sco/wOoeB2xxrdcF5JYOlyJ7H2YY/huLvJISaw/wHLPskiKiYQ78tuNwW0ip+5ceB1dSToHcEe3sR30+OeTh0Z4ZKoqthKziFGIt3EhEgiGq1gjZuWB5gM="}}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/cap.png b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/cap.png
new file mode 100644
index 00000000..76c667e0
Binary files /dev/null and b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/cap.png differ
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/hangfire.png b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/hangfire.png
new file mode 100644
index 00000000..5cdeb40f
Binary files /dev/null and b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/hangfire.png differ
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/miniprofiler.png b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/miniprofiler.png
new file mode 100644
index 00000000..244c7029
Binary files /dev/null and b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/miniprofiler.png differ
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/more.png b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/more.png
new file mode 100644
index 00000000..55c056f0
Binary files /dev/null and b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/more.png differ
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/swagger.png b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/swagger.png
new file mode 100644
index 00000000..7bcbd432
Binary files /dev/null and b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/swagger.png differ
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/xxx-job.png b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/xxx-job.png
new file mode 100644
index 00000000..6658b8e8
Binary files /dev/null and b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/xxx-job.png differ
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/GlobalUsings.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/GlobalUsings.cs
new file mode 100644
index 00000000..099438d6
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/GlobalUsings.cs
@@ -0,0 +1,12 @@
+// Global using directives
+
+global using System;
+global using System.Threading.Tasks;
+global using Volo.Abp.Application.Services;
+global using Volo.Abp.Authorization.Permissions;
+global using Volo.Abp.DependencyInjection;
+global using Volo.Abp.Identity;
+global using Volo.Abp.Localization;
+global using Volo.Abp.Modularity;
+global using Volo.Abp.ObjectExtending;
+global using Volo.Abp.Threading;
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/Jobs/IRecurringJob.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/Jobs/IRecurringJob.cs
new file mode 100644
index 00000000..47d2d0a6
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/Jobs/IRecurringJob.cs
@@ -0,0 +1,11 @@
+namespace MyCompanyName.MyProjectName.Jobs
+{
+ public interface IRecurringJob : ITransientDependency
+ {
+ ///
+ /// 执行任务
+ ///
+ ///
+ Task ExecuteAsync();
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj
new file mode 100644
index 00000000..951db97f
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj
@@ -0,0 +1,21 @@
+
+
+
+
+ net7.0
+ MyCompanyName.MyProjectName
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyProjectNameApplicationContractsModule.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyProjectNameApplicationContractsModule.cs
new file mode 100644
index 00000000..81170b79
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyProjectNameApplicationContractsModule.cs
@@ -0,0 +1,21 @@
+using Lion.AbpPro.BasicManagement;
+using Lion.AbpPro.DataDictionaryManagement;
+using Lion.AbpPro.NotificationManagement;
+
+namespace MyCompanyName.MyProjectName
+{
+ [DependsOn(
+ typeof(MyProjectNameDomainSharedModule),
+ typeof(AbpObjectExtendingModule),
+ typeof(BasicManagementApplicationContractsModule),
+ typeof(NotificationManagementApplicationContractsModule),
+ typeof(DataDictionaryManagementApplicationContractsModule)
+ )]
+ public class MyProjectNameApplicationContractsModule : AbpModule
+ {
+ public override void PreConfigureServices(ServiceConfigurationContext context)
+ {
+ MyProjectNameDtoExtensions.Configure();
+ }
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyProjectNameDtoExtensions.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyProjectNameDtoExtensions.cs
new file mode 100644
index 00000000..04886197
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyProjectNameDtoExtensions.cs
@@ -0,0 +1,25 @@
+namespace MyCompanyName.MyProjectName
+{
+ public static class MyProjectNameDtoExtensions
+ {
+ private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
+
+ public static void Configure()
+ {
+ OneTimeRunner.Run(() =>
+ {
+ /* You can add extension properties to DTOs
+ * defined in the depended modules.
+ *
+ * Example:
+ *
+ * ObjectExtensionManager.Instance
+ * .AddOrUpdateProperty("Title");
+ *
+ * See the documentation for more:
+ * https://docs.abp.io/en/abp/latest/Object-Extensions
+ */
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/Permissions/MyProjectNamePermissionDefinitionProvider.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/Permissions/MyProjectNamePermissionDefinitionProvider.cs
new file mode 100644
index 00000000..3d13b2e8
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/Permissions/MyProjectNamePermissionDefinitionProvider.cs
@@ -0,0 +1,17 @@
+namespace MyCompanyName.MyProjectName.Permissions
+{
+ public class MyProjectNamePermissionDefinitionProvider : PermissionDefinitionProvider
+ {
+ public override void Define(IPermissionDefinitionContext context)
+ {
+
+
+
+ }
+
+ private static LocalizableString L(string name)
+ {
+ return LocalizableString.Create(name);
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/Permissions/MyProjectNamePermissions.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/Permissions/MyProjectNamePermissions.cs
new file mode 100644
index 00000000..38ff13ba
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/Permissions/MyProjectNamePermissions.cs
@@ -0,0 +1,7 @@
+namespace MyCompanyName.MyProjectName.Permissions
+{
+ public static class MyProjectNamePermissions
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/GlobalUsings.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/GlobalUsings.cs
new file mode 100644
index 00000000..2d1085e4
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/GlobalUsings.cs
@@ -0,0 +1,18 @@
+// Global using directives
+
+global using System;
+global using System.Collections.Generic;
+global using System.Linq;
+global using System.Threading.Tasks;
+global using Lion.AbpPro.BasicManagement;
+global using Lion.AbpPro.NotificationManagement;
+global using MyCompanyName.MyProjectName.FreeSqlRepository;
+global using MyCompanyName.MyProjectName.Permissions;
+global using Microsoft.AspNetCore.Authorization;
+global using Microsoft.Extensions.Configuration;
+global using Volo.Abp.Application.Services;
+global using Volo.Abp.AutoMapper;
+global using Volo.Abp.BackgroundJobs.Hangfire;
+global using Volo.Abp.DependencyInjection;
+global using Volo.Abp.Modularity;
+global using Profile = AutoMapper.Profile;
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/Jobs/TestJob.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/Jobs/TestJob.cs
new file mode 100644
index 00000000..040eae42
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/Jobs/TestJob.cs
@@ -0,0 +1,11 @@
+namespace MyCompanyName.MyProjectName.Jobs
+{
+ public class TestJob : IRecurringJob
+ {
+ public Task ExecuteAsync()
+ {
+ Console.WriteLine($"job 测试- {DateTime.Now}");
+ return Task.CompletedTask;
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj
new file mode 100644
index 00000000..e7c6970c
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj
@@ -0,0 +1,23 @@
+
+
+
+
+ net7.0
+ MyCompanyName.MyProjectName
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameAppService.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameAppService.cs
new file mode 100644
index 00000000..bd67dcdd
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameAppService.cs
@@ -0,0 +1,12 @@
+namespace MyCompanyName.MyProjectName
+{
+ /* Inherit your application services from this class.
+ */
+ public abstract class MyProjectNameAppService : ApplicationService
+ {
+ protected MyProjectNameAppService()
+ {
+ LocalizationResource = typeof(MyProjectNameResource);
+ }
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameApplicationAutoMapperProfile.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameApplicationAutoMapperProfile.cs
new file mode 100644
index 00000000..d39e6a5f
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameApplicationAutoMapperProfile.cs
@@ -0,0 +1,10 @@
+namespace MyCompanyName.MyProjectName
+{
+ public class MyProjectNameApplicationAutoMapperProfile : Profile
+ {
+ public MyProjectNameApplicationAutoMapperProfile()
+ {
+
+ }
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameApplicationModule.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameApplicationModule.cs
new file mode 100644
index 00000000..b0083df6
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameApplicationModule.cs
@@ -0,0 +1,24 @@
+using Lion.AbpPro.DataDictionaryManagement;
+
+namespace MyCompanyName.MyProjectName
+{
+ [DependsOn(
+ typeof(MyProjectNameDomainModule),
+ typeof(MyProjectNameApplicationContractsModule),
+ typeof(BasicManagementApplicationModule),
+ typeof(NotificationManagementApplicationModule),
+ typeof(DataDictionaryManagementApplicationModule),
+ typeof(MyProjectNameFreeSqlModule)
+ )]
+ public class MyProjectNameApplicationModule : AbpModule
+ {
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options =>
+ {
+ options.AddMaps();
+ });
+
+ }
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/Properties/AssemblyInfo.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..485087e5
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Application/Properties/AssemblyInfo.cs
@@ -0,0 +1,2 @@
+using System.Runtime.CompilerServices;
+[assembly:InternalsVisibleToAttribute("MyCompanyName.MyProjectName.Application.Tests")]
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/DbMigratorHostedService.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/DbMigratorHostedService.cs
new file mode 100644
index 00000000..71387df0
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/DbMigratorHostedService.cs
@@ -0,0 +1,43 @@
+namespace MyCompanyName.MyProjectName.DbMigrator
+{
+ public class DbMigratorHostedService : IHostedService
+ {
+ private readonly IHostApplicationLifetime _hostApplicationLifetime;
+ private readonly IConfiguration _configuration;
+ private readonly IHostEnvironment _hostEnvironment;
+ public DbMigratorHostedService(IHostApplicationLifetime hostApplicationLifetime,
+ IConfiguration configuration, IHostEnvironment hostEnvironment)
+ {
+ _hostApplicationLifetime = hostApplicationLifetime;
+ _configuration = configuration;
+ _hostEnvironment = hostEnvironment;
+ }
+
+ public async Task StartAsync(CancellationToken cancellationToken)
+ {
+ using (var application = await AbpApplicationFactory.CreateAsync(options =>
+ {
+ options.Services.ReplaceConfiguration(_configuration);
+ options.UseAutofac();
+ options.Services.AddLogging(c => c.AddSerilog());
+ }))
+ {
+ await application.InitializeAsync();
+ var conn = _configuration.GetValue("ConnectionStrings:Default");
+ Console.WriteLine("ConnectionStrings:" + conn);
+ var s = _hostEnvironment.EnvironmentName;
+ Console.WriteLine("EnvironmentName:" + s);
+ await application
+ .ServiceProvider
+ .GetRequiredService()
+ .MigrateAsync();
+
+ await application.ShutdownAsync();
+
+ _hostApplicationLifetime.StopApplication();
+ }
+ }
+
+ public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/Dockerfile b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/Dockerfile
new file mode 100644
index 00000000..dff5e6b7
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/Dockerfile
@@ -0,0 +1,19 @@
+FROM mcr.microsoft.com/dotnet/aspnet:6.0
+
+# 创建目录
+RUN mkdir /app
+
+COPY publish /app
+
+# 设置工作目录
+WORKDIR /app
+
+# 设置时区 .net6 才有这个问题
+ENV TZ=Asia/Shanghai
+
+# 设置环境变量
+ENV ASPNETCORE_ENVIRONMENT=Production
+
+ENTRYPOINT ["dotnet", "MyCompanyName.MyProjectName.DbMigrator.dll"]
+
+
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/GlobalUsings.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/GlobalUsings.cs
new file mode 100644
index 00000000..67fd5ef8
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/GlobalUsings.cs
@@ -0,0 +1,18 @@
+// Global using directives
+
+global using System;
+global using System.IO;
+global using System.Threading;
+global using System.Threading.Tasks;
+global using MyCompanyName.MyProjectName.Data;
+global using MyCompanyName.MyProjectName.EntityFrameworkCore;
+global using Microsoft.Extensions.Configuration;
+global using Microsoft.Extensions.DependencyInjection;
+global using Microsoft.Extensions.Hosting;
+global using Microsoft.Extensions.Logging;
+global using Serilog;
+global using Serilog.Events;
+global using Volo.Abp;
+global using Volo.Abp.Autofac;
+global using Volo.Abp.BackgroundJobs;
+global using Volo.Abp.Modularity;
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj
new file mode 100644
index 00000000..20e551aa
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj
@@ -0,0 +1,35 @@
+
+
+
+
+
+ Exe
+ net7.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Always
+
+
+
+
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyProjectNameDbMigratorModule.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyProjectNameDbMigratorModule.cs
new file mode 100644
index 00000000..a400f83d
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyProjectNameDbMigratorModule.cs
@@ -0,0 +1,15 @@
+namespace MyCompanyName.MyProjectName.DbMigrator
+{
+ [DependsOn(
+ typeof(AbpAutofacModule),
+ typeof(MyProjectNameEntityFrameworkCoreModule),
+ typeof(MyProjectNameApplicationContractsModule)
+ )]
+ public class MyProjectNameDbMigratorModule : AbpModule
+ {
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options => options.IsJobExecutionEnabled = false);
+ }
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/Program.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/Program.cs
new file mode 100644
index 00000000..38c83716
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/Program.cs
@@ -0,0 +1,45 @@
+namespace MyCompanyName.MyProjectName.DbMigrator
+{
+ class Program
+ {
+ static async Task Main(string[] args)
+ {
+ Log.Logger = new LoggerConfiguration()
+ .MinimumLevel.Information()
+ .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
+ .MinimumLevel.Override("Volo.Abp", LogEventLevel.Warning)
+#if DEBUG
+ .MinimumLevel.Override("MyCompanyName.MyProjectName", LogEventLevel.Debug)
+#else
+ .MinimumLevel.Override("MyCompanyName.MyProjectName", LogEventLevel.Information)
+#endif
+ .Enrich.FromLogContext()
+ .WriteTo.Async(c => c.File("Logs/logs.txt"))
+ .WriteTo.Async(c => c.Console())
+ .CreateLogger();
+
+ await CreateHostBuilder(args).RunConsoleAsync();
+ }
+
+ public static IHostBuilder CreateHostBuilder(string[] args) =>
+ Host.CreateDefaultBuilder(args)
+ .ConfigureLogging((context, logging) => logging.ClearProviders())
+ .ConfigureAppConfiguration
+ (
+ otpions =>
+ {
+ var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
+
+ var appSettingFileName = "appsettings.json";
+ if (!environment.IsNullOrWhiteSpace())
+ appSettingFileName = $"appsettings.{environment}.json";
+
+ otpions.AddJsonFile(appSettingFileName, optional: true);
+ }
+ )
+ .ConfigureServices((hostContext, services) =>
+ {
+ services.AddHostedService();
+ });
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json
new file mode 100644
index 00000000..12bc0f07
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json
@@ -0,0 +1,5 @@
+{
+ "ConnectionStrings": {
+ "Default": "Data Source=localhost;Port=3306;Database=MyCompanyNameMyProjectNameDB;uid=root;pwd=1q2w3E*;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true"
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/tempkey.rsa b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/tempkey.rsa
new file mode 100644
index 00000000..494c2013
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/tempkey.rsa
@@ -0,0 +1,13 @@
+{
+ "KeyId": "f788zGVUZh9H-HbWL1S-Mg",
+ "Parameters": {
+ "D": "F19hbC5PLO872DszGiJnVoU55ee7XGXmNf0KEKndJ/uGBv5lWklXA0QF80h1ytWXde0jV5isQPB1t7mPhRQlDoDTkywLi1CeOgBPbxzHEfLjZZ5c4olfeX0IJX9BDqgUntY0H1a/+Om/eDu4OZUz3EIJFFZBgz46YZSyTT6ZDvAEdpC/o66sNJmxvJIp+8zVoVDSqBUzxmc+oEamXLg7r2jdymxJMxau1kQFxEGLOrJnNxGsEe8UrYA3qSsm8m/Xg4uOh7RYgnuEEt88+KTvRq+CAMWhN3YNLtOJ3NmXowwE7e1Ma+jih9+UVfxZn14P5+SOJbQ2bYV2sCV+2vBiCQ==",
+ "DP": "oPiGO/qdOQfFEAS9fMInQnsrNylIZVpDYEVoDJ6/jQfE/IpuwxGcmsaGvCob3SKxZiJRLCWpwJYo1hCh/JOSVGWMkVyELky56nbbkkV5ymKLSGZ4JoetdQs+GchnPdR+k2P9Ij1Kjk13ylubN3htzNhcBASJpOfSEv5pPVzGKX0=",
+ "DQ": "z6imxLABHkyftbfUUtpeOlPanEHgpuIjmUdp3T1Ju1jziE63UEhuj0GPAXOF17uYxixwYE8JhOJ7+TyIK9oZeI3zH2OzJqQh8f5PCQ/E+0ULXZDeNV/ShDLCTufu3Fis9Rt64uTp/H/l21oMQ79jc0ysa8DTz1ReJLRc5qjL41U=",
+ "Exponent": "AQAB",
+ "InverseQ": "ieZcvSt5XYukKJKhXpv5Dm/1RD7iH88cZnhLSTEVTMoOUHoYWmApY5pNLGahbfjA9bxnkBWDYex/i7wE9uNNY5CsA6ovUaQLVJDt3kHvR9W+9QtN8D6jjG2TuRbbOdEg4RqhfjUaDfDIgTJX2Wxc8U98FOvOyGw1HzwUPFZKecM=",
+ "Modulus": "vk4z1Bmtmbo+gxITcY+FIlXzcO2wTOGlOXK5GMYj/6PUMFt7lbqkc72AkPsrAo5/JE8LYLhWj7fzSKbjvtowHCz5m2t+FlUYmuiKpvvnJsTqvQrckNlbZ1nm071q5PhP3Dar/OksfBhPtAX+c3+NjDnM/w53ccJJNaBDO/s9JYoN7vH5n6ed1pMSK71hmg4MPsxChcnc1f1PpnG2mqyJ253+GEUbj/kRyeBSmCCr9aadov2ZzxIKVaFNagJEHOzanQmorSLpP25GfOHCuy27Zkef94V/qU9elzjbH4uIKslVGx5T6H99TYh0sUGu11NytYJa5WNAZWow95CzurC2vw==",
+ "P": "4GMCQy+XTNzR5TsgFcdAZv2K6TcQR13fHVvPoxQp/b32V5YUJOBFEUAtqociy5ro4+KzpXP5WPSk1ZtznGKuNZyLq8gTnhpB3rwd0sdo4zxKnQ5nu+n1UhlhWNxg5A9V5TaciUAyPrHWJfLoYTQWygNTgJELQH5zZXi2ihC2uiU=",
+ "Q": "2R36pamnLAJggkPJxiW5qH6HizZ+bkQVg0BBftMLzkAM8Y9CwTW75GRUzGEJFpMckkw0GZSYb1Uwl3DVUpkcQ8LZ91IPYdPpDlYUshhIxl184M55pnO14besKxJtMZ64zhHKVAR2pBMO0n6W4/1iBXkkQqyPViJxdfvXPJMBbhM="
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/GlobalUsings.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/GlobalUsings.cs
new file mode 100644
index 00000000..16def929
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/GlobalUsings.cs
@@ -0,0 +1,33 @@
+// Global using directives
+
+global using System;
+global using System.Collections.Generic;
+global using System.ComponentModel.DataAnnotations;
+global using System.Linq;
+global using System.Reflection;
+global using System.Text;
+global using System.Threading.Tasks;
+global using Microsoft.Extensions.DependencyInjection;
+global using Microsoft.Extensions.Localization;
+global using Volo.Abp;
+global using Volo.Abp.AuditLogging;
+global using Volo.Abp.BackgroundJobs;
+global using Volo.Abp.Data;
+global using Volo.Abp.DependencyInjection;
+global using Volo.Abp.FeatureManagement;
+global using Volo.Abp.Identity;
+global using Volo.Abp.Identity.Localization;
+global using Volo.Abp.Localization;
+global using Volo.Abp.Localization.ExceptionHandling;
+global using Volo.Abp.Localization.Resources.AbpLocalization;
+global using Volo.Abp.Modularity;
+global using Volo.Abp.ObjectExtending;
+global using Volo.Abp.PermissionManagement;
+global using Volo.Abp.SettingManagement;
+global using Volo.Abp.SettingManagement.Localization;
+global using Volo.Abp.TenantManagement;
+global using Volo.Abp.Threading;
+global using Volo.Abp.Timing.Localization.Resources.AbpTiming;
+global using Volo.Abp.Validation;
+global using Volo.Abp.Validation.Localization;
+global using Volo.Abp.VirtualFileSystem;
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/Extensions/EnumLocalicationExtension.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/Extensions/EnumLocalicationExtension.cs
new file mode 100644
index 00000000..3dfd62aa
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/Extensions/EnumLocalicationExtension.cs
@@ -0,0 +1,19 @@
+// namespace MyCompanyName.MyProjectName.Localization.Extensions
+// {
+// public static class EnumLocalicationExtension
+// {
+// public static string ToLocalicationDescription(this Enum value)
+// {
+// var member =
+// ((IEnumerable)value.GetType().GetMember(value.ToString()))
+// .FirstOrDefault();
+//
+// var localKey =$"Enum:{member.ReflectedType.Name}:{value}:{Convert.ToInt16(value)}";
+// if (localKey.IsNullOrWhiteSpace())
+// {
+// throw new ArgumentException();
+// }
+// return !(member != (MemberInfo)null) ? value.ToString() : LocalizationHelper.L[localKey];
+// }
+// }
+// }
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ar.json b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ar.json
new file mode 100644
index 00000000..3e5227a9
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ar.json
@@ -0,0 +1,8 @@
+{
+ "culture": "ar",
+ "texts": {
+ "Menu:Home": "الرئيسية",
+ "Welcome": "مرحبا",
+ "LongWelcomeMessage": "مرحبا بكم في التطبيق. هذا مشروع بدء تشغيل يعتمد على إطار عمل ABP. لمزيد من المعلومات ، يرجى زيارة abp.io."
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/cs.json b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/cs.json
new file mode 100644
index 00000000..5a0bbf61
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/cs.json
@@ -0,0 +1,8 @@
+{
+ "culture": "cs",
+ "texts": {
+ "Menu:Home": "Úvod",
+ "Welcome": "Vítejte",
+ "LongWelcomeMessage": "Vítejte v aplikaci. Toto je startovací projekt založený na ABP frameworku. Pro více informací, navštivte abp.io."
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/de-DE.json b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/de-DE.json
new file mode 100644
index 00000000..aca4528c
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/de-DE.json
@@ -0,0 +1,8 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "Menu:Home": "Home",
+ "Welcome": "Willkommen",
+ "LongWelcomeMessage": "Willkommen bei der Anwendung. Dies ist ein Startup-Projekt, das auf dem ABP-Framework basiert. Weitere Informationen finden Sie unter abp.io."
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en-GB.json b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en-GB.json
new file mode 100644
index 00000000..d2ca0793
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en-GB.json
@@ -0,0 +1,8 @@
+{
+ "culture": "en-GB",
+ "texts": {
+ "Menu:Home": "Home",
+ "Welcome": "Welcome",
+ "LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io."
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en.json b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en.json
new file mode 100644
index 00000000..3b490d85
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en.json
@@ -0,0 +1,42 @@
+{
+ "culture": "en",
+ "texts": {
+ "Menu:Home": "Home",
+ "Welcome": "Welcome",
+ "Test": "Test",
+ "LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io.",
+ "Permission:Query": "Query",
+ "Permission:Create": "Create",
+ "Permission:Update": "Update",
+ "Permission:Delete": "Delete",
+ "Permission:Export": "Export",
+ "Permission:Enable": "Enable|Disable",
+ "Permission:SystemManagement": "SystemManagement",
+ "Permission:AuditLogManagement": "AuditLog",
+ "Permission:HangfireManagement": "BackgroundTask",
+ "Permission:CapManagement": "IntegratedEvent",
+ "Permission:ESManagement": "ESManagement",
+ "Permission:SettingManagement": "SettingManagement",
+ "Permission:OrganizationUnitManagement": "OrganizationUnitManagement",
+ "Setting.Group.System": "System",
+ "Setting.Group.Other": "Other",
+ "DisplayName:Setting.Group.Other.Github": "Github",
+ "Description:Setting.Group.Other.Github": "Github",
+ "Enum:TestType:Created:1":"Created",
+ "Enum:TestType:Cancel:1":"Cancel",
+ "Enum:TestType:Delete:1":"Delete",
+
+ "MyCompanyName.MyProjectName:100001": "OrganizationUnit Not Exist",
+ "MyCompanyName.MyProjectName:100002": "UserLockedOut",
+ "MyCompanyName.MyProjectName:100003": "UserOrPasswordMismatch",
+ "MyCompanyName.MyProjectName:100004": "ApiResource Not Exist",
+ "MyCompanyName.MyProjectName:100005": "ApiResource Exist",
+ "MyCompanyName.MyProjectName:100006": "ApiScope Not Exist",
+ "MyCompanyName.MyProjectName:100007": "ApiScope Exist",
+ "MyCompanyName.MyProjectName:100008": "ApiClient Not Exist",
+ "MyCompanyName.MyProjectName:100009": "ApiClient Exist",
+ "MyCompanyName.MyProjectName:100010": "IdentityResource Not Exist",
+ "MyCompanyName.MyProjectName:100011": "IdentityResource Exist"
+
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/es.json b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/es.json
new file mode 100644
index 00000000..31b4b59e
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/es.json
@@ -0,0 +1,8 @@
+{
+ "culture": "es",
+ "texts": {
+ "Menu:Home": "Inicio",
+ "Welcome": "Bienvenido",
+ "LongWelcomeMessage": "Bienvenido a la aplicación, este es un proyecto base basado en el framework ABP. Para más información, visita abp.io."
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/fr.json b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/fr.json
new file mode 100644
index 00000000..e76eac0c
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/fr.json
@@ -0,0 +1,8 @@
+{
+ "culture": "fr",
+ "texts": {
+ "Menu:Home": "Accueil",
+ "Welcome": "Bienvenue",
+ "LongWelcomeMessage": "Bienvenue dans l'application. Il s'agit d'un projet de démarrage basé sur le framework ABP. Pour plus d'informations, visitez abp.io."
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/hu.json b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/hu.json
new file mode 100644
index 00000000..c7b6a33a
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/hu.json
@@ -0,0 +1,8 @@
+{
+ "culture": "hu",
+ "texts": {
+ "Menu:Home": "Kezdőlap",
+ "Welcome": "Üdvözlöm",
+ "LongWelcomeMessage": "Üdvözöljük az alkalmazásban. Ez egy ABP keretrendszeren alapuló startup projekt. További információkért látogasson el az abp.io oldalra."
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/nl.json b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/nl.json
new file mode 100644
index 00000000..9ba8da47
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/nl.json
@@ -0,0 +1,8 @@
+{
+ "culture": "nl",
+ "texts": {
+ "Menu:Home": "Home",
+ "Welcome": "Welkom",
+ "LongWelcomeMessage": "Welkom bij de applicatie. Dit is een startup-project gebaseerd op het ABP-framework. Bezoek abp.io voor meer informatie."
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/pl-PL.json b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/pl-PL.json
new file mode 100644
index 00000000..33412f30
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/pl-PL.json
@@ -0,0 +1,8 @@
+{
+ "culture": "pl-PL",
+ "texts": {
+ "Menu:Home": "Home",
+ "Welcome": "Witaj",
+ "LongWelcomeMessage": "Witaj w aplikacji. To jest inicjalny projekt bazujący na ABP framework. Po więcej informacji odwiedź stronę abp.io."
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/pt-BR.json b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/pt-BR.json
new file mode 100644
index 00000000..8c818a07
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/pt-BR.json
@@ -0,0 +1,8 @@
+{
+ "culture": "pt-BR",
+ "texts": {
+ "Menu:Home": "Principal",
+ "Welcome": "Seja bem-vindo!",
+ "LongWelcomeMessage": "Bem-vindo a esta aplicação. Este é um projeto inicial baseado no ABP framework. Para mais informações, visite abp.io."
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ru.json b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ru.json
new file mode 100644
index 00000000..8464e443
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ru.json
@@ -0,0 +1,8 @@
+{
+ "culture": "ru",
+ "texts": {
+ "Menu:Home": "Главная",
+ "Welcome": "Добро пожаловать",
+ "LongWelcomeMessage": "Добро пожаловать в приложение. Этот запущенный проект основан на фреймворке ABP. Для получения дополнительной информации посетите сайт abp.io."
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/sl.json b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/sl.json
new file mode 100644
index 00000000..a066ef26
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/sl.json
@@ -0,0 +1,8 @@
+{
+ "culture": "sl",
+ "texts": {
+ "Menu:Home": "Domov",
+ "Welcome": "Dobrodošli",
+ "LongWelcomeMessage": "Dobrodošli v aplikaciji. To je začetni projekt na osnovi okolja ABP. Za več informacij obiščite abp.io."
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/tr.json b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/tr.json
new file mode 100644
index 00000000..2cc911e4
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/tr.json
@@ -0,0 +1,8 @@
+{
+ "culture": "tr",
+ "texts": {
+ "Menu:Home": "Ana sayfa",
+ "Welcome": "Hoşgeldiniz",
+ "LongWelcomeMessage": "Uygulamaya hoşgeldiniz. Bu, ABP framework'ü üzerine bina edilmiş bir başlangıç projesidir. Daha fazla bilgi için abp.io adresini ziyaret edebilirsiniz."
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/vi.json b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/vi.json
new file mode 100644
index 00000000..c115a357
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/vi.json
@@ -0,0 +1,8 @@
+{
+ "culture": "vi",
+ "texts": {
+ "Menu:Home": "Trang chủ",
+ "Welcome": "Chào mừng bạn",
+ "LongWelcomeMessage": "Chào mừng bạn đến ứng dụng. Đây là một dự án khởi nghiệp dựa trên khung ABP. Để biết thêm thông tin, hãy truy cập abp.io."
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hans.json b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hans.json
new file mode 100644
index 00000000..ca5d72a8
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hans.json
@@ -0,0 +1,42 @@
+{
+ "culture": "zh-Hans",
+ "texts": {
+ "Menu:Home": "首页",
+ "Welcome": "欢迎",
+ "Test": "测试",
+ "LongWelcomeMessage": "欢迎来到该应用程序. 这是一个基于ABP框架的启动项目. 有关更多信息, 请访问 abp.io.",
+ "Permission:Query": "查询",
+ "Permission:Create": "创建",
+ "Permission:Update": "编辑",
+ "Permission:Delete": "删除",
+ "Permission:Export": "导出",
+ "Permission:Enable": "启用|禁用",
+ "Permission:AuditLogManagement": "审计日志",
+ "Permission:SystemManagement": "系统管理",
+ "Permission:HangfireManagement": "后台任务",
+ "Permission:CapManagement": "集成事件",
+ "Permission:ESManagement": "ES日志",
+ "Permission:SettingManagement": "设置管理",
+ "Permission:OrganizationUnitManagement": "组织结构管理",
+
+ "Setting.Group.System": "系统",
+ "Setting.Group.Other": "其它",
+ "DisplayName:Setting.Group.Other.Github": "Github",
+ "Description:Setting.Group.Other.Github": "Github",
+ "Enum:TestType:Created:1":"创建",
+ "Enum:TestType:Cancel:1":"取消",
+ "Enum:TestType:Delete:1":"删除",
+
+ "MyCompanyName.MyProjectName:100001": "组织机构不存在",
+ "MyCompanyName.MyProjectName:100002": "用户被锁定",
+ "MyCompanyName.MyProjectName:100003": "用户名或者密码错误",
+ "MyCompanyName.MyProjectName:100004": "ApiResource不存在",
+ "MyCompanyName.MyProjectName:100005": "ApiResource 已存在",
+ "MyCompanyName.MyProjectName:100006": "ApiScope 不存在",
+ "MyCompanyName.MyProjectName:100007": "ApiScope 已存在",
+ "MyCompanyName.MyProjectName:100008": "ApiClient 不存在",
+ "MyCompanyName.MyProjectName:100009": "ApiClient 已存在",
+ "MyCompanyName.MyProjectName:100010": "IdentityResource 不存在",
+ "MyCompanyName.MyProjectName:100011": "IdentityResource 已存在"
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hant.json b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hant.json
new file mode 100644
index 00000000..7622bcf6
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hant.json
@@ -0,0 +1,14 @@
+{
+ "culture": "zh-Hant",
+ "texts": {
+ "Menu:Home": "首頁",
+ "Welcome": "歡迎",
+ "LongWelcomeMessage": "歡迎來到此應用程式. 這是一個基於ABP框架的起始專案. 有關更多訊息, 請瀏覽 abp.io.",
+ "Permissions:Query": "查询",
+ "Permissions:Create": "创建",
+ "Permissions:Update": "更新",
+ "Permissions:Delete": "删除",
+ "Permissions:Enable": "启用|禁用",
+ "Permissions:AuditLogManagement": "审计日志"
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectNameResource.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectNameResource.cs
new file mode 100644
index 00000000..b48d5f53
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectNameResource.cs
@@ -0,0 +1,8 @@
+namespace MyCompanyName.MyProjectName
+{
+ [LocalizationResourceName("MyProjectName")]
+ public class MyProjectNameResource
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MultiTenancy/MultiTenancyConsts.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MultiTenancy/MultiTenancyConsts.cs
new file mode 100644
index 00000000..4023787f
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MultiTenancy/MultiTenancyConsts.cs
@@ -0,0 +1,11 @@
+namespace MyCompanyName.MyProjectName.MultiTenancy
+{
+ public static class MultiTenancyConsts
+ {
+ /* Enable/disable multi-tenancy easily in a single point.
+ * If you will never need to multi-tenancy, you can remove
+ * related modules and code parts, including this file.
+ */
+ public const bool IsEnabled = true;
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj
new file mode 100644
index 00000000..6b73ef9a
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj
@@ -0,0 +1,24 @@
+
+
+
+
+ net7.0
+ MyCompanyName.MyProjectName
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainErrorCodes.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainErrorCodes.cs
new file mode 100644
index 00000000..68e823b6
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainErrorCodes.cs
@@ -0,0 +1,7 @@
+namespace MyCompanyName.MyProjectName
+{
+ public static class MyProjectNameDomainErrorCodes
+ {
+
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainSharedConsts.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainSharedConsts.cs
new file mode 100644
index 00000000..f0d1e2c0
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainSharedConsts.cs
@@ -0,0 +1,9 @@
+namespace MyCompanyName.MyProjectName;
+
+public class MyProjectNameDomainSharedConsts
+{
+ /// 名称空间
+ public const string NameSpace = "MyCompanyName.MyProjectName";
+ /// 默认语言
+ public const string DefaultCultureName = "zh-Hans";
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainSharedModule.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainSharedModule.cs
new file mode 100644
index 00000000..cf771471
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainSharedModule.cs
@@ -0,0 +1,49 @@
+using Lion.AbpPro.BasicManagement;
+using Lion.AbpPro.BasicManagement.Localization;
+using Lion.AbpPro.Core;
+using Lion.AbpPro.DataDictionaryManagement;
+using Lion.AbpPro.NotificationManagement;
+
+namespace MyCompanyName.MyProjectName
+{
+ [DependsOn(
+ typeof(BasicManagementDomainSharedModule),
+ typeof(NotificationManagementDomainSharedModule),
+ typeof(DataDictionaryManagementDomainSharedModule),
+ typeof(LionAbpProCoreModule)
+ )]
+ public class MyProjectNameDomainSharedModule : AbpModule
+ {
+ public override void PreConfigureServices(ServiceConfigurationContext context)
+ {
+ MyProjectNameGlobalFeatureConfigurator.Configure();
+ MyProjectNameModuleExtensionConfigurator.Configure();
+ }
+
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options =>
+ {
+ options.FileSets.AddEmbedded(MyProjectNameDomainSharedConsts.NameSpace);
+ });
+
+ Configure(options =>
+ {
+ options.Resources
+ .Add(MyProjectNameDomainSharedConsts.DefaultCultureName)
+ .AddVirtualJson("/Localization/MyProjectName")
+ .AddBaseTypes(typeof(BasicManagementResource))
+ .AddBaseTypes(typeof(AbpTimingResource));
+
+ options.DefaultResourceType = typeof(MyProjectNameResource);
+ });
+
+ Configure(options =>
+ {
+ options.MapCodeNamespace(MyProjectNameDomainSharedConsts.NameSpace, typeof(MyProjectNameResource));
+ });
+ }
+
+
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameGlobalFeatureConfigurator.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameGlobalFeatureConfigurator.cs
new file mode 100644
index 00000000..8bb82664
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameGlobalFeatureConfigurator.cs
@@ -0,0 +1,21 @@
+namespace MyCompanyName.MyProjectName
+{
+ public static class MyProjectNameGlobalFeatureConfigurator
+ {
+ private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
+
+ public static void Configure()
+ {
+ OneTimeRunner.Run(() =>
+ {
+ /* You can configure (enable/disable) global features of the used modules here.
+ *
+ * YOU CAN SAFELY DELETE THIS CLASS AND REMOVE ITS USAGES IF YOU DON'T NEED TO IT!
+ *
+ * Please refer to the documentation to lear more about the Global Features System:
+ * https://docs.abp.io/en/abp/latest/Global-Features
+ */
+ });
+ }
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameModuleExtensionConfigurator.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameModuleExtensionConfigurator.cs
new file mode 100644
index 00000000..487fd9e9
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameModuleExtensionConfigurator.cs
@@ -0,0 +1,67 @@
+namespace MyCompanyName.MyProjectName
+{
+ public static class MyProjectNameModuleExtensionConfigurator
+ {
+ private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
+
+ public static void Configure()
+ {
+ OneTimeRunner.Run(() =>
+ {
+ ConfigureExistingProperties();
+ ConfigureExtraProperties();
+ });
+ }
+
+ private static void ConfigureExistingProperties()
+ {
+ /* You can change max lengths for properties of the
+ * entities defined in the modules used by your application.
+ *
+ * Example: Change user and role name max lengths
+
+ IdentityUserConsts.MaxNameLength = 99;
+ IdentityRoleConsts.MaxNameLength = 99;
+
+ * Notice: It is not suggested to change property lengths
+ * unless you really need it. Go with the standard values wherever possible.
+ *
+ * If you are using EF Core, you will need to run the add-migration command after your changes.
+ */
+ }
+
+ private static void ConfigureExtraProperties()
+ {
+ /* You can configure extra properties for the
+ * entities defined in the modules used by your application.
+ *
+ * This class can be used to define these extra properties
+ * with a high level, easy to use API.
+ *
+ * Example: Add a new property to the user entity of the identity module
+
+ ObjectExtensionManager.Instance.Modules()
+ .ConfigureIdentity(identity =>
+ {
+ identity.ConfigureUser(user =>
+ {
+ user.AddOrUpdateProperty( //property type: string
+ "SocialSecurityNumber", //property name
+ property =>
+ {
+ //validation rules
+ property.Attributes.Add(new RequiredAttribute());
+ property.Attributes.Add(new StringLengthAttribute(64) {MinimumLength = 4});
+
+ //...other configurations for this property
+ }
+ );
+ });
+ });
+
+ * See the documentation for more:
+ * https://docs.abp.io/en/abp/latest/Module-Entity-Extensions
+ */
+ }
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Users/Dto/UserOutput.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Users/Dto/UserOutput.cs
new file mode 100644
index 00000000..8908c5dc
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Users/Dto/UserOutput.cs
@@ -0,0 +1,7 @@
+namespace MyCompanyName.MyProjectName.Users.Dto
+{
+ public class UserOutput
+ {
+ public Guid Id { get; set; }
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/IMyProjectNameDbSchemaMigrator.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/IMyProjectNameDbSchemaMigrator.cs
new file mode 100644
index 00000000..e39e6172
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/IMyProjectNameDbSchemaMigrator.cs
@@ -0,0 +1,7 @@
+namespace MyCompanyName.MyProjectName.Data
+{
+ public interface IMyProjectNameDbSchemaMigrator
+ {
+ Task MigrateAsync();
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/MyProjectNameDbMigrationService.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/MyProjectNameDbMigrationService.cs
new file mode 100644
index 00000000..6d9f8c26
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/MyProjectNameDbMigrationService.cs
@@ -0,0 +1,204 @@
+namespace MyCompanyName.MyProjectName.Data
+{
+ public class MyProjectNameDbMigrationService : ITransientDependency
+ {
+ public ILogger Logger { get; set; }
+ private readonly IDataSeeder _dataSeeder;
+ private readonly IEnumerable _dbSchemaMigrators;
+ private readonly ITenantRepository _tenantRepository;
+ private readonly ICurrentTenant _currentTenant;
+
+ public MyProjectNameDbMigrationService(
+ IDataSeeder dataSeeder,
+ IEnumerable dbSchemaMigrators,
+ ITenantRepository tenantRepository,
+ ICurrentTenant currentTenant)
+ {
+ _dataSeeder = dataSeeder;
+ _dbSchemaMigrators = dbSchemaMigrators;
+ _tenantRepository = tenantRepository;
+ _currentTenant = currentTenant;
+
+ Logger = NullLogger.Instance;
+ }
+
+ public async Task MigrateAsync()
+ {
+ var initialMigrationAdded = AddInitialMigrationIfNotExist();
+
+ if (initialMigrationAdded)
+ {
+ return;
+ }
+
+ Logger.LogInformation("Started database migrations...");
+
+ await MigrateDatabaseSchemaAsync();
+ await SeedDataAsync();
+
+ Logger.LogInformation($"Successfully completed host database migrations.");
+
+ var tenants = await _tenantRepository.GetListAsync(includeDetails: true);
+
+ var migratedDatabaseSchemas = new HashSet();
+ foreach (var tenant in tenants)
+ {
+ using (_currentTenant.Change(tenant.Id))
+ {
+ if (tenant.ConnectionStrings.Any())
+ {
+ var tenantConnectionStrings = tenant.ConnectionStrings
+ .Select(x => x.Value)
+ .ToList();
+
+ if (!migratedDatabaseSchemas.IsSupersetOf(tenantConnectionStrings))
+ {
+ await MigrateDatabaseSchemaAsync(tenant);
+
+ migratedDatabaseSchemas.AddIfNotContains(tenantConnectionStrings);
+ }
+ }
+
+ await SeedDataAsync(tenant);
+ }
+
+ Logger.LogInformation($"Successfully completed {tenant.Name} tenant database migrations.");
+ }
+
+ Logger.LogInformation("Successfully completed all database migrations.");
+ Logger.LogInformation("You can safely end this process...");
+ }
+
+ private async Task MigrateDatabaseSchemaAsync(Tenant tenant = null)
+ {
+ Logger.LogInformation(
+ $"Migrating schema for {(tenant == null ? "host" : tenant.Name + " tenant")} database...");
+
+ foreach (var migrator in _dbSchemaMigrators)
+ {
+ await migrator.MigrateAsync();
+ }
+ }
+
+ private async Task SeedDataAsync(Tenant tenant = null)
+ {
+ Logger.LogInformation($"Executing {(tenant == null ? "host" : tenant.Name + " tenant")} database seed...");
+
+ await _dataSeeder.SeedAsync(new DataSeedContext(tenant?.Id)
+ .WithProperty(IdentityDataSeedContributor.AdminEmailPropertyName, IdentityDataSeedContributor.AdminEmailDefaultValue)
+ .WithProperty(IdentityDataSeedContributor.AdminPasswordPropertyName, IdentityDataSeedContributor.AdminPasswordDefaultValue)
+ );
+ }
+
+ private bool AddInitialMigrationIfNotExist()
+ {
+ try
+ {
+ if (!DbMigrationsProjectExists())
+ {
+ return false;
+ }
+ }
+ catch (Exception)
+ {
+ return false;
+ }
+
+ try
+ {
+ if (!MigrationsFolderExists())
+ {
+ AddInitialMigration();
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ catch (Exception e)
+ {
+ Logger.LogWarning("Couldn't determinate if any migrations exist : " + e.Message);
+ return false;
+ }
+ }
+
+ private bool DbMigrationsProjectExists()
+ {
+ var dbMigrationsProjectFolder = GetDbMigrationsProjectFolderPath();
+
+ return dbMigrationsProjectFolder != null;
+ }
+
+ private bool MigrationsFolderExists()
+ {
+ var dbMigrationsProjectFolder = GetDbMigrationsProjectFolderPath();
+
+ return Directory.Exists(Path.Combine(dbMigrationsProjectFolder, "EntityFrameworkCore"));
+ }
+
+ private void AddInitialMigration()
+ {
+ Logger.LogInformation("Creating initial migration...");
+
+ string argumentPrefix;
+ string fileName;
+
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) || RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
+ {
+ argumentPrefix = "-c";
+ fileName = "/bin/bash";
+ }
+ else
+ {
+ argumentPrefix = "/C";
+ fileName = "cmd.exe";
+ }
+
+ var procStartInfo = new ProcessStartInfo(fileName,
+ $"{argumentPrefix} \"abp create-migration-and-run-migrator \"{GetDbMigrationsProjectFolderPath()}\"\""
+ );
+
+ try
+ {
+ Process.Start(procStartInfo);
+ }
+ catch (Exception)
+ {
+ throw new Exception("Couldn't run ABP CLI...");
+ }
+ }
+
+ private string GetDbMigrationsProjectFolderPath()
+ {
+ var slnDirectoryPath = GetSolutionDirectoryPath();
+
+ if (slnDirectoryPath == null)
+ {
+ throw new Exception("Solution folder not found!");
+ }
+
+ var srcDirectoryPath = Path.Combine(slnDirectoryPath, "src");
+
+ return Directory.GetDirectories(srcDirectoryPath)
+ .FirstOrDefault(d => d.EndsWith(".DbMigrations"));
+ }
+
+ private string GetSolutionDirectoryPath()
+ {
+ var currentDirectory = new DirectoryInfo(Directory.GetCurrentDirectory());
+
+ while (Directory.GetParent(currentDirectory.FullName) != null)
+ {
+ currentDirectory = Directory.GetParent(currentDirectory.FullName);
+
+ if (Directory.GetFiles(currentDirectory.FullName).FirstOrDefault(f => f.EndsWith(".sln")) != null)
+ {
+ return currentDirectory.FullName;
+ }
+ }
+
+ return null;
+ }
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/NullMyProjectNameDbSchemaMigrator.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/NullMyProjectNameDbSchemaMigrator.cs
new file mode 100644
index 00000000..406ff7e7
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/NullMyProjectNameDbSchemaMigrator.cs
@@ -0,0 +1,13 @@
+namespace MyCompanyName.MyProjectName.Data
+{
+ /* This is used if database provider does't define
+ * IMyProjectNameDbSchemaMigrator implementation.
+ */
+ public class NullMyProjectNameDbSchemaMigrator : IMyProjectNameDbSchemaMigrator, ITransientDependency
+ {
+ public Task MigrateAsync()
+ {
+ return Task.CompletedTask;
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/GlobalUsings.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/GlobalUsings.cs
new file mode 100644
index 00000000..233f7965
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/GlobalUsings.cs
@@ -0,0 +1,28 @@
+// Global using directives
+
+global using System;
+global using System.Collections.Generic;
+global using System.Diagnostics;
+global using System.IO;
+global using System.Linq;
+global using System.Runtime.InteropServices;
+global using System.Threading.Tasks;
+global using MyCompanyName.MyProjectName.MultiTenancy;
+global using MyCompanyName.MyProjectName.Users.Dto;
+global using Microsoft.Extensions.DependencyInjection;
+global using Microsoft.Extensions.Logging;
+global using Microsoft.Extensions.Logging.Abstractions;
+global using Volo.Abp.AutoMapper;
+global using Volo.Abp.Data;
+global using Volo.Abp.DependencyInjection;
+global using Volo.Abp.Domain.Services;
+global using Volo.Abp.EventBus.Distributed;
+global using Volo.Abp.Identity;
+global using Volo.Abp.Localization;
+global using Volo.Abp.Modularity;
+global using Volo.Abp.MultiTenancy;
+global using Volo.Abp.ObjectMapping;
+global using Volo.Abp.SettingManagement;
+global using Volo.Abp.Settings;
+global using Volo.Abp.TenantManagement;
+global using Volo.Abp.Uow;
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj
new file mode 100644
index 00000000..27cac0f2
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj
@@ -0,0 +1,16 @@
+
+
+
+ net7.0
+ MyCompanyName.MyProjectName
+
+
+
+
+
+
+
+
+
+
+
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameConsts.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameConsts.cs
new file mode 100644
index 00000000..b6fa3d11
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameConsts.cs
@@ -0,0 +1,9 @@
+namespace MyCompanyName.MyProjectName
+{
+ public static class MyProjectNameConsts
+ {
+ public const string DbTablePrefix = "App";
+
+ public const string DbSchema = null;
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs
new file mode 100644
index 00000000..c558e8ec
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs
@@ -0,0 +1,21 @@
+using Lion.AbpPro.BasicManagement;
+using Lion.AbpPro.DataDictionaryManagement;
+using Lion.AbpPro.NotificationManagement;
+
+namespace MyCompanyName.MyProjectName
+{
+ [DependsOn(
+ typeof(MyProjectNameDomainSharedModule),
+ typeof(BasicManagementDomainModule),
+ typeof(NotificationManagementDomainModule),
+ typeof(DataDictionaryManagementDomainModule)
+ )]
+ public class MyProjectNameDomainModule : AbpModule
+ {
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options => { options.IsEnabled = MultiTenancyConsts.IsEnabled; });
+ Configure(options => { options.AddMaps(); });
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainService.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainService.cs
new file mode 100644
index 00000000..c5973e0f
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainService.cs
@@ -0,0 +1,36 @@
+using Volo.Abp.EventBus.Local;
+
+namespace MyCompanyName.MyProjectName
+{
+ public abstract class MyProjectNameDomainService : DomainService
+ {
+ protected Type ObjectMapperContext { get; set; }
+
+ ///
+ /// 工作单元管理器
+ ///
+ protected IUnitOfWorkManager UnitOfWorkManager =>
+ LazyServiceProvider.LazyGetRequiredService();
+
+ ///
+ /// 领域事件总线
+ ///
+ protected ILocalEventBus LocalEventBus =>
+ LazyServiceProvider.LazyGetRequiredService();
+ ///
+ /// 分布式事件总线
+ ///
+ protected IDistributedEventBus DistributedEventBus =>
+ LazyServiceProvider.LazyGetRequiredService();
+
+ ///
+ /// 对象映射器
+ ///
+ protected IObjectMapper ObjectMapper => LazyServiceProvider.LazyGetService(
+ provider =>
+ ObjectMapperContext == null
+ ? provider.GetRequiredService()
+ : (IObjectMapper)provider.GetRequiredService(
+ typeof(IObjectMapper<>).MakeGenericType(ObjectMapperContext)));
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Properties/AssemblyInfo.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..48ac31e9
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Properties/AssemblyInfo.cs
@@ -0,0 +1,3 @@
+using System.Runtime.CompilerServices;
+[assembly:InternalsVisibleToAttribute("MyCompanyName.MyProjectName.Domain.Tests")]
+[assembly:InternalsVisibleToAttribute("MyCompanyName.MyProjectName.TestBase")]
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Settings/MyProjectNameSettingDefinitionProvider.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Settings/MyProjectNameSettingDefinitionProvider.cs
new file mode 100644
index 00000000..5110a1a9
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Settings/MyProjectNameSettingDefinitionProvider.cs
@@ -0,0 +1,25 @@
+namespace MyCompanyName.MyProjectName.Settings
+{
+ public class MyProjectNameSettingDefinitionProvider : SettingDefinitionProvider
+ {
+ public override void Define(ISettingDefinitionContext context)
+ {
+ //Define your own settings here. Example:
+ //context.Add(new SettingDefinition(MyProjectNameSettings.MySetting1));
+ OverrideDefalutSettings(context);
+ }
+
+ ///
+ /// 重写默认setting添加自定义属性
+ ///
+ private static void OverrideDefalutSettings(ISettingDefinitionContext context)
+ {
+
+ }
+
+ private static LocalizableString L(string name)
+ {
+ return LocalizableString.Create(name);
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Settings/MyProjectNameSettings.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Settings/MyProjectNameSettings.cs
new file mode 100644
index 00000000..77676002
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Settings/MyProjectNameSettings.cs
@@ -0,0 +1,7 @@
+namespace MyCompanyName.MyProjectName.Settings
+{
+ public static class MyProjectNameSettings
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/EntityFrameworkCoreMyProjectNameDbSchemaMigrator.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/EntityFrameworkCoreMyProjectNameDbSchemaMigrator.cs
new file mode 100644
index 00000000..68cebdbc
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/EntityFrameworkCoreMyProjectNameDbSchemaMigrator.cs
@@ -0,0 +1,27 @@
+namespace MyCompanyName.MyProjectName.EntityFrameworkCore
+{
+ public class EntityFrameworkCoreMyProjectNameDbSchemaMigrator
+ : IMyProjectNameDbSchemaMigrator, ITransientDependency
+ {
+ private readonly IServiceProvider _serviceProvider;
+
+ public EntityFrameworkCoreMyProjectNameDbSchemaMigrator(IServiceProvider serviceProvider)
+ {
+ _serviceProvider = serviceProvider;
+ }
+
+ public async Task MigrateAsync()
+ {
+ /* We intentionally resolving the MyProjectNameMigrationsDbContext
+ * from IServiceProvider (instead of directly injecting it)
+ * to properly get the connection string of the current tenant in the
+ * current scope.
+ */
+
+ await _serviceProvider
+ .GetRequiredService()
+ .Database
+ .MigrateAsync();
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/IMyProjectNameDbContext.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/IMyProjectNameDbContext.cs
new file mode 100644
index 00000000..b58692f1
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/IMyProjectNameDbContext.cs
@@ -0,0 +1,8 @@
+namespace MyCompanyName.MyProjectName.EntityFrameworkCore
+{
+ [ConnectionStringName("Default")]
+ public interface IMyProjectNameDbContext : IEfCoreDbContext
+ {
+
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContext.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContext.cs
new file mode 100644
index 00000000..88e0f1ad
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContext.cs
@@ -0,0 +1,68 @@
+using Lion.AbpPro.BasicManagement.EntityFrameworkCore;
+using Lion.AbpPro.DataDictionaryManagement;
+using Lion.AbpPro.DataDictionaryManagement.DataDictionaries.Aggregates;
+using Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore;
+using Lion.AbpPro.NotificationManagement;
+using Lion.AbpPro.NotificationManagement.EntityFrameworkCore;
+using Lion.AbpPro.NotificationManagement.Notifications.Aggregates;
+
+namespace MyCompanyName.MyProjectName.EntityFrameworkCore
+{
+ /* This is your actual DbContext used on runtime.
+ * It includes only your entities.
+ * It does not include entities of the used modules, because each module has already
+ * its own DbContext class. If you want to share some database tables with the used modules,
+ * just create a structure like done for AppUser.
+ *
+ * Don't use this DbContext for database migrations since it does not contain tables of the
+ * used modules (as explained above). See MyProjectNameMigrationsDbContext for migrations.
+ */
+ [ConnectionStringName("Default")]
+ public class MyProjectNameDbContext : AbpDbContext, IMyProjectNameDbContext,
+ IBasicManagementDbContext,
+ INotificationManagementDbContext,
+ IDataDictionaryManagementDbContext
+ {
+ public DbSet Users { get; set; }
+ public DbSet Roles { get; set; }
+ public DbSet ClaimTypes { get; set; }
+ public DbSet OrganizationUnits { get; set; }
+ public DbSet SecurityLogs { get; set; }
+ public DbSet LinkUsers { get; set; }
+ public DbSet UserDelegations { get; set; }
+ public DbSet FeatureGroups { get; set; }
+ public DbSet Features { get; set; }
+ public DbSet FeatureValues { get; set; }
+ public DbSet PermissionGroups { get; set; }
+ public DbSet Permissions { get; set; }
+ public DbSet PermissionGrants { get; set; }
+ public DbSet Settings { get; set; }
+ public DbSet Tenants { get; set; }
+ public DbSet TenantConnectionStrings { get; set; }
+ public DbSet BackgroundJobs { get; set; }
+ public DbSet AuditLogs { get; set; }
+ public DbSet Notifications { get; set; }
+ public DbSet DataDictionaries { get; set; }
+ public MyProjectNameDbContext(DbContextOptions options)
+ : base(options)
+ {
+ }
+
+ protected override void OnModelCreating(ModelBuilder builder)
+ {
+
+ base.OnModelCreating(builder);
+
+ builder.ConfigureMyProjectName();
+
+ // 基础模块
+ builder.ConfigureBasicManagement();
+
+ // 消息通知
+ builder.ConfigureNotificationManagement();
+
+ //数据字典
+ builder.ConfigureDataDictionaryManagement();
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContextModelCreatingExtensions.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContextModelCreatingExtensions.cs
new file mode 100644
index 00000000..b7f02aa1
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContextModelCreatingExtensions.cs
@@ -0,0 +1,19 @@
+namespace MyCompanyName.MyProjectName.EntityFrameworkCore
+{
+ public static class MyProjectNameDbContextModelCreatingExtensions
+ {
+ public static void ConfigureMyProjectName(this ModelBuilder builder)
+ {
+ Check.NotNull(builder, nameof(builder));
+
+ /* Configure your own tables/entities inside here */
+
+ //builder.Entity(b =>
+ //{
+ // b.ToTable(MyProjectNameConsts.DbTablePrefix + "YourEntities", MyProjectNameConsts.DbSchema);
+ // b.ConfigureByConvention(); //auto configure for the base class props
+ // //...
+ //});
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEfCoreEntityExtensionMappings.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEfCoreEntityExtensionMappings.cs
new file mode 100644
index 00000000..22cc3958
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEfCoreEntityExtensionMappings.cs
@@ -0,0 +1,40 @@
+namespace MyCompanyName.MyProjectName.EntityFrameworkCore
+{
+ public static class MyProjectNameEfCoreEntityExtensionMappings
+ {
+ private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
+
+ public static void Configure()
+ {
+ MyProjectNameGlobalFeatureConfigurator.Configure();
+ MyProjectNameModuleExtensionConfigurator.Configure();
+
+ OneTimeRunner.Run(() =>
+ {
+ /* You can configure extra properties for the
+ * entities defined in the modules used by your application.
+ *
+ * This class can be used to map these extra properties to table fields in the database.
+ *
+ * USE THIS CLASS ONLY TO CONFIGURE EF CORE RELATED MAPPING.
+ * USE MyProjectNameModuleExtensionConfigurator CLASS (in the Domain.Shared project)
+ * FOR A HIGH LEVEL API TO DEFINE EXTRA PROPERTIES TO ENTITIES OF THE USED MODULES
+ *
+ * Example: Map a property to a table field:
+
+ ObjectExtensionManager.Instance
+ .MapEfCoreProperty(
+ "MyProperty",
+ (entityBuilder, propertyBuilder) =>
+ {
+ propertyBuilder.HasMaxLength(128);
+ }
+ );
+
+ * See the documentation for more:
+ * https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities
+ */
+ });
+ }
+ }
+}
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreModule.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreModule.cs
new file mode 100644
index 00000000..17202aac
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreModule.cs
@@ -0,0 +1,38 @@
+using Lion.AbpPro.BasicManagement.EntityFrameworkCore;
+using Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore;
+using Lion.AbpPro.NotificationManagement.EntityFrameworkCore;
+using Volo.Abp.Guids;
+
+namespace MyCompanyName.MyProjectName.EntityFrameworkCore
+{
+ [DependsOn(
+ typeof(MyProjectNameDomainModule),
+ typeof(AbpEntityFrameworkCoreMySQLModule),
+ typeof(BasicManagementEntityFrameworkCoreModule),
+ typeof(DataDictionaryManagementEntityFrameworkCoreModule),
+ typeof(NotificationManagementEntityFrameworkCoreModule)
+ )]
+ public class MyProjectNameEntityFrameworkCoreModule : AbpModule
+ {
+ public override void PreConfigureServices(ServiceConfigurationContext context)
+ {
+ MyProjectNameEfCoreEntityExtensionMappings.Configure();
+ }
+
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ context.Services.AddAbpDbContext(options =>
+ {
+ /* Remove "includeAllEntities: true" to create
+ * default repositories only for aggregate roots */
+ options.AddDefaultRepositories(includeAllEntities: true);
+ });
+ Configure(options =>
+ {
+ /* The main point to change your DBMS.
+ * See also MyProjectNameMigrationsDbContextFactory for EF Core tooling. */
+ options.UseMySQL();
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameMigrationsDbContextFactory.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameMigrationsDbContextFactory.cs
new file mode 100644
index 00000000..b410a0c9
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameMigrationsDbContextFactory.cs
@@ -0,0 +1,39 @@
+namespace MyCompanyName.MyProjectName.EntityFrameworkCore
+{
+ /* This class is needed for EF Core console commands
+ * (like Add-Migration and Update-Database commands) */
+ public class MyProjectNameMigrationsDbContextFactory : IDesignTimeDbContextFactory
+ {
+ public MyProjectNameDbContext CreateDbContext(string[] args)
+ {
+ MyProjectNameEfCoreEntityExtensionMappings.Configure();
+
+ var configuration = BuildConfiguration();
+
+ var builder = new DbContextOptionsBuilder()
+ .UseMySql(configuration.GetConnectionString("Default"), MySqlServerVersion.LatestSupportedServerVersion);
+
+ return new MyProjectNameDbContext(builder.Options);
+ }
+
+ private static IConfigurationRoot BuildConfiguration()
+ {
+ var builder = new ConfigurationBuilder()
+ .SetBasePath
+ (
+ Path.Combine
+ (
+ Directory.GetCurrentDirectory(),
+ "../MyCompanyName.MyProjectName.DbMigrator/"
+ )
+ )
+ .AddJsonFile
+ (
+ "appsettings.json",
+ false
+ );
+
+ return builder.Build();
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/GlobalUsings.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/GlobalUsings.cs
new file mode 100644
index 00000000..fc9a2b6b
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/GlobalUsings.cs
@@ -0,0 +1,30 @@
+// Global using directives
+
+global using System;
+global using System.Collections.Generic;
+global using System.IO;
+global using System.Linq;
+global using System.Text;
+global using System.Threading.Tasks;
+global using MyCompanyName.MyProjectName.Data;
+global using MyCompanyName.MyProjectName.Users;
+global using Microsoft.EntityFrameworkCore;
+global using Microsoft.EntityFrameworkCore.Design;
+global using Microsoft.EntityFrameworkCore.Storage;
+global using Microsoft.Extensions.Configuration;
+global using Microsoft.Extensions.DependencyInjection;
+global using MySqlConnector;
+global using Volo.Abp;
+global using Volo.Abp.AuditLogging;
+global using Volo.Abp.BackgroundJobs;
+global using Volo.Abp.Data;
+global using Volo.Abp.DependencyInjection;
+global using Volo.Abp.EntityFrameworkCore;
+global using Volo.Abp.EntityFrameworkCore.MySQL;
+global using Volo.Abp.FeatureManagement;
+global using Volo.Abp.Identity;
+global using Volo.Abp.Modularity;
+global using Volo.Abp.PermissionManagement;
+global using Volo.Abp.SettingManagement;
+global using Volo.Abp.TenantManagement;
+global using Volo.Abp.Threading;
\ No newline at end of file
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20230517130954_Init.Designer.cs b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20230517130954_Init.Designer.cs
new file mode 100644
index 00000000..85b97848
--- /dev/null
+++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20230517130954_Init.Designer.cs
@@ -0,0 +1,1758 @@
+//
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using MyCompanyName.MyProjectName.EntityFrameworkCore;
+using Volo.Abp.EntityFrameworkCore;
+
+#nullable disable
+
+namespace MyCompanyName.MyProjectName.Migrations
+{
+ [DbContext(typeof(MyProjectNameDbContext))]
+ [Migration("20230517130954_Init")]
+ partial class Init
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql)
+ .HasAnnotation("ProductVersion", "7.0.2")
+ .HasAnnotation("Relational:MaxIdentifierLength", 64);
+
+ modelBuilder.Entity("Lion.AbpPro.DataDictionaryManagement.DataDictionaries.Aggregates.DataDictionary", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("Code")
+ .IsRequired()
+ .HasMaxLength(64)
+ .HasColumnType("varchar(64)");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("varchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime(6)")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("char(36)")
+ .HasColumnName("CreatorId");
+
+ b.Property("DeleterId")
+ .HasColumnType("char(36)")
+ .HasColumnName("DeleterId");
+
+ b.Property("DeletionTime")
+ .HasColumnType("datetime(6)")
+ .HasColumnName("DeletionTime");
+
+ b.Property("Description")
+ .IsRequired()
+ .HasMaxLength(1024)
+ .HasColumnType("varchar(1024)");
+
+ b.Property("DisplayText")
+ .IsRequired()
+ .HasMaxLength(64)
+ .HasColumnType("varchar(64)");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("longtext")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("tinyint(1)")
+ .HasDefaultValue(false)
+ .HasColumnName("IsDeleted");
+
+ b.Property("LastModificationTime")
+ .HasColumnType("datetime(6)")
+ .HasColumnName("LastModificationTime");
+
+ b.Property("LastModifierId")
+ .HasColumnType("char(36)")
+ .HasColumnName("LastModifierId");
+
+ b.Property("TenantId")
+ .HasColumnType("char(36)")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Id");
+
+ b.ToTable("AbpDataDictionaries", (string)null);
+ });
+
+ modelBuilder.Entity("Lion.AbpPro.DataDictionaryManagement.DataDictionaries.Aggregates.DataDictionaryDetail", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("Code")
+ .HasColumnType("longtext");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime(6)")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("char(36)")
+ .HasColumnName("CreatorId");
+
+ b.Property("DataDictionaryId")
+ .HasColumnType("char(36)");
+
+ b.Property("Description")
+ .HasColumnType("longtext");
+
+ b.Property("DisplayText")
+ .HasColumnType("longtext");
+
+ b.Property("IsEnabled")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("LastModificationTime")
+ .HasColumnType("datetime(6)")
+ .HasColumnName("LastModificationTime");
+
+ b.Property("LastModifierId")
+ .HasColumnType("char(36)")
+ .HasColumnName("LastModifierId");
+
+ b.Property("Order")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("DataDictionaryId");
+
+ b.ToTable("AbpDataDictionaryDetails", (string)null);
+ });
+
+ modelBuilder.Entity("Lion.AbpPro.NotificationManagement.Notifications.Aggregates.Notification", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("varchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("Content")
+ .IsRequired()
+ .HasMaxLength(1024)
+ .HasColumnType("varchar(1024)");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime(6)")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("char(36)")
+ .HasColumnName("CreatorId");
+
+ b.Property("DeleterId")
+ .HasColumnType("char(36)")
+ .HasColumnName("DeleterId");
+
+ b.Property("DeletionTime")
+ .HasColumnType("datetime(6)")
+ .HasColumnName("DeletionTime");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("longtext")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("tinyint(1)")
+ .HasDefaultValue(false)
+ .HasColumnName("IsDeleted");
+
+ b.Property("LastModificationTime")
+ .HasColumnType("datetime(6)")
+ .HasColumnName("LastModificationTime");
+
+ b.Property("LastModifierId")
+ .HasColumnType("char(36)")
+ .HasColumnName("LastModifierId");
+
+ b.Property("MessageLevel")
+ .HasColumnType("int");
+
+ b.Property("MessageType")
+ .HasColumnType("int");
+
+ b.Property("SenderId")
+ .HasColumnType("char(36)");
+
+ b.Property("Title")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)");
+
+ b.HasKey("Id");
+
+ b.ToTable("AbpNotifications", (string)null);
+ });
+
+ modelBuilder.Entity("Lion.AbpPro.NotificationManagement.Notifications.Aggregates.NotificationSubscription", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime(6)")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("char(36)")
+ .HasColumnName("CreatorId");
+
+ b.Property("DeleterId")
+ .HasColumnType("char(36)")
+ .HasColumnName("DeleterId");
+
+ b.Property("DeletionTime")
+ .HasColumnType("datetime(6)")
+ .HasColumnName("DeletionTime");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("tinyint(1)")
+ .HasDefaultValue(false)
+ .HasColumnName("IsDeleted");
+
+ b.Property("LastModificationTime")
+ .HasColumnType("datetime(6)")
+ .HasColumnName("LastModificationTime");
+
+ b.Property("LastModifierId")
+ .HasColumnType("char(36)")
+ .HasColumnName("LastModifierId");
+
+ b.Property("NotificationId")
+ .HasColumnType("char(36)");
+
+ b.Property("Read")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("ReadTime")
+ .HasColumnType("datetime(6)");
+
+ b.Property("ReceiveId")
+ .HasColumnType("char(36)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("NotificationId");
+
+ b.ToTable("AbpNotificationSubscriptions", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("ApplicationName")
+ .HasMaxLength(96)
+ .HasColumnType("varchar(96)")
+ .HasColumnName("ApplicationName");
+
+ b.Property("BrowserInfo")
+ .HasMaxLength(512)
+ .HasColumnType("varchar(512)")
+ .HasColumnName("BrowserInfo");
+
+ b.Property("ClientId")
+ .HasMaxLength(64)
+ .HasColumnType("varchar(64)")
+ .HasColumnName("ClientId");
+
+ b.Property("ClientIpAddress")
+ .HasMaxLength(64)
+ .HasColumnType("varchar(64)")
+ .HasColumnName("ClientIpAddress");
+
+ b.Property("ClientName")
+ .HasMaxLength(128)
+ .HasColumnType("varchar(128)")
+ .HasColumnName("ClientName");
+
+ b.Property("Comments")
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)")
+ .HasColumnName("Comments");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("varchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CorrelationId")
+ .HasMaxLength(64)
+ .HasColumnType("varchar(64)")
+ .HasColumnName("CorrelationId");
+
+ b.Property("Exceptions")
+ .HasColumnType("longtext");
+
+ b.Property("ExecutionDuration")
+ .HasColumnType("int")
+ .HasColumnName("ExecutionDuration");
+
+ b.Property("ExecutionTime")
+ .HasColumnType("datetime(6)");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("longtext")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("HttpMethod")
+ .HasMaxLength(16)
+ .HasColumnType("varchar(16)")
+ .HasColumnName("HttpMethod");
+
+ b.Property("HttpStatusCode")
+ .HasColumnType("int")
+ .HasColumnName("HttpStatusCode");
+
+ b.Property("ImpersonatorTenantId")
+ .HasColumnType("char(36)")
+ .HasColumnName("ImpersonatorTenantId");
+
+ b.Property("ImpersonatorTenantName")
+ .HasMaxLength(64)
+ .HasColumnType("varchar(64)")
+ .HasColumnName("ImpersonatorTenantName");
+
+ b.Property("ImpersonatorUserId")
+ .HasColumnType("char(36)")
+ .HasColumnName("ImpersonatorUserId");
+
+ b.Property("ImpersonatorUserName")
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)")
+ .HasColumnName("ImpersonatorUserName");
+
+ b.Property("TenantId")
+ .HasColumnType("char(36)")
+ .HasColumnName("TenantId");
+
+ b.Property("TenantName")
+ .HasMaxLength(64)
+ .HasColumnType("varchar(64)")
+ .HasColumnName("TenantName");
+
+ b.Property("Url")
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)")
+ .HasColumnName("Url");
+
+ b.Property("UserId")
+ .HasColumnType("char(36)")
+ .HasColumnName("UserId");
+
+ b.Property("UserName")
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)")
+ .HasColumnName("UserName");
+
+ b.HasKey("Id");
+
+ b.HasIndex("TenantId", "ExecutionTime");
+
+ b.HasIndex("TenantId", "UserId", "ExecutionTime");
+
+ b.ToTable("AbpAuditLogs", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("AuditLogId")
+ .HasColumnType("char(36)")
+ .HasColumnName("AuditLogId");
+
+ b.Property("ExecutionDuration")
+ .HasColumnType("int")
+ .HasColumnName("ExecutionDuration");
+
+ b.Property("ExecutionTime")
+ .HasColumnType("datetime(6)")
+ .HasColumnName("ExecutionTime");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("longtext")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("MethodName")
+ .HasMaxLength(128)
+ .HasColumnType("varchar(128)")
+ .HasColumnName("MethodName");
+
+ b.Property("Parameters")
+ .HasMaxLength(2000)
+ .HasColumnType("varchar(2000)")
+ .HasColumnName("Parameters");
+
+ b.Property("ServiceName")
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)")
+ .HasColumnName("ServiceName");
+
+ b.Property("TenantId")
+ .HasColumnType("char(36)")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AuditLogId");
+
+ b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime");
+
+ b.ToTable("AbpAuditLogActions", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("AuditLogId")
+ .HasColumnType("char(36)")
+ .HasColumnName("AuditLogId");
+
+ b.Property("ChangeTime")
+ .HasColumnType("datetime(6)")
+ .HasColumnName("ChangeTime");
+
+ b.Property("ChangeType")
+ .HasColumnType("tinyint unsigned")
+ .HasColumnName("ChangeType");
+
+ b.Property("EntityId")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("varchar(128)")
+ .HasColumnName("EntityId");
+
+ b.Property("EntityTenantId")
+ .HasColumnType("char(36)");
+
+ b.Property("EntityTypeFullName")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("varchar(128)")
+ .HasColumnName("EntityTypeFullName");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("longtext")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("TenantId")
+ .HasColumnType("char(36)")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AuditLogId");
+
+ b.HasIndex("TenantId", "EntityTypeFullName", "EntityId");
+
+ b.ToTable("AbpEntityChanges", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("EntityChangeId")
+ .HasColumnType("char(36)");
+
+ b.Property("NewValue")
+ .HasMaxLength(512)
+ .HasColumnType("varchar(512)")
+ .HasColumnName("NewValue");
+
+ b.Property("OriginalValue")
+ .HasMaxLength(512)
+ .HasColumnType("varchar(512)")
+ .HasColumnName("OriginalValue");
+
+ b.Property("PropertyName")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("varchar(128)")
+ .HasColumnName("PropertyName");
+
+ b.Property("PropertyTypeFullName")
+ .IsRequired()
+ .HasMaxLength(64)
+ .HasColumnType("varchar(64)")
+ .HasColumnName("PropertyTypeFullName");
+
+ b.Property("TenantId")
+ .HasColumnType("char(36)")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EntityChangeId");
+
+ b.ToTable("AbpEntityPropertyChanges", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.BackgroundJobs.BackgroundJobRecord", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("varchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime(6)")
+ .HasColumnName("CreationTime");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("longtext")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IsAbandoned")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("tinyint(1)")
+ .HasDefaultValue(false);
+
+ b.Property("JobArgs")
+ .IsRequired()
+ .HasMaxLength(1048576)
+ .HasColumnType("longtext");
+
+ b.Property("JobName")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("varchar(128)");
+
+ b.Property("LastTryTime")
+ .HasColumnType("datetime(6)");
+
+ b.Property("NextTryTime")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Priority")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("tinyint unsigned")
+ .HasDefaultValue((byte)15);
+
+ b.Property("TryCount")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("smallint")
+ .HasDefaultValue((short)0);
+
+ b.HasKey("Id");
+
+ b.HasIndex("IsAbandoned", "NextTryTime");
+
+ b.ToTable("AbpBackgroundJobs", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureDefinitionRecord", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("AllowedProviders")
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)");
+
+ b.Property("DefaultValue")
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)");
+
+ b.Property("Description")
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)");
+
+ b.Property("DisplayName")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("longtext")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("GroupName")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("varchar(128)");
+
+ b.Property("IsAvailableToHost")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("IsVisibleToClients")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("varchar(128)");
+
+ b.Property("ParentName")
+ .HasMaxLength(128)
+ .HasColumnType("varchar(128)");
+
+ b.Property("ValueType")
+ .HasMaxLength(2048)
+ .HasColumnType("varchar(2048)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GroupName");
+
+ b.HasIndex("Name")
+ .IsUnique();
+
+ b.ToTable("AbpFeatures", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureGroupDefinitionRecord", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("DisplayName")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("longtext")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("varchar(128)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Name")
+ .IsUnique();
+
+ b.ToTable("AbpFeatureGroups", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("varchar(128)");
+
+ b.Property("ProviderKey")
+ .HasMaxLength(64)
+ .HasColumnType("varchar(64)");
+
+ b.Property("ProviderName")
+ .HasMaxLength(64)
+ .HasColumnType("varchar(64)");
+
+ b.Property("Value")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("varchar(128)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Name", "ProviderName", "ProviderKey")
+ .IsUnique();
+
+ b.ToTable("AbpFeatureValues", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("varchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("Description")
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("longtext")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IsStatic")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)");
+
+ b.Property("Regex")
+ .HasMaxLength(512)
+ .HasColumnType("varchar(512)");
+
+ b.Property("RegexDescription")
+ .HasMaxLength(128)
+ .HasColumnType("varchar(128)");
+
+ b.Property("Required")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("ValueType")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.ToTable("AbpClaimTypes", (string)null);
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("SourceTenantId")
+ .HasColumnType("char(36)");
+
+ b.Property("SourceUserId")
+ .HasColumnType("char(36)");
+
+ b.Property