diff --git a/content/Delete-BIN-OBJ-Folders.bat b/Delete-BIN-OBJ-Folders.bat
similarity index 100%
rename from content/Delete-BIN-OBJ-Folders.bat
rename to Delete-BIN-OBJ-Folders.bat
diff --git a/aspnet-core/CompanyName.ProjectName.sln b/aspnet-core/CompanyName.ProjectName.sln
new file mode 100644
index 00000000..33724111
--- /dev/null
+++ b/aspnet-core/CompanyName.ProjectName.sln
@@ -0,0 +1,483 @@
+
+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}") = "CompanyName.ProjectName.Domain", "services\src\CompanyName.ProjectName.Domain\CompanyName.ProjectName.Domain.csproj", "{554AD327-6DBA-4F8F-96F8-81CE7A0C863F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.Application", "services\src\CompanyName.ProjectName.Application\CompanyName.ProjectName.Application.csproj", "{1A94A50E-06DC-43C1-80B5-B662820EC3EB}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.EntityFrameworkCore", "services\src\CompanyName.ProjectName.EntityFrameworkCore\CompanyName.ProjectName.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}") = "CompanyName.ProjectName.Application.Tests", "services\test\CompanyName.ProjectName.Application.Tests\CompanyName.ProjectName.Application.Tests.csproj", "{50B2631D-129C-47B3-A587-029CCD6099BC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.EntityFrameworkCore.DbMigrations", "services\src\CompanyName.ProjectName.EntityFrameworkCore.DbMigrations\CompanyName.ProjectName.EntityFrameworkCore.DbMigrations.csproj", "{0372FA84-C517-4EB3-9A9F-B9ACAC0CA5E0}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.Domain.Shared", "services\src\CompanyName.ProjectName.Domain.Shared\CompanyName.ProjectName.Domain.Shared.csproj", "{42F719ED-8413-4895-B5B4-5AB56079BC66}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.Application.Contracts", "services\src\CompanyName.ProjectName.Application.Contracts\CompanyName.ProjectName.Application.Contracts.csproj", "{520659C8-C734-4298-A3DA-B539DB9DFC0B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.HttpApi", "services\src\CompanyName.ProjectName.HttpApi\CompanyName.ProjectName.HttpApi.csproj", "{4164BDF7-F527-4E85-9CE6-E3C2D7426A27}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.HttpApi.Client", "services\src\CompanyName.ProjectName.HttpApi.Client\CompanyName.ProjectName.HttpApi.Client.csproj", "{3B5A0094-670D-4BB1-BFDD-61B88A8773DC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.IdentityServer", "services\src\CompanyName.ProjectName.IdentityServer\CompanyName.ProjectName.IdentityServer.csproj", "{073C361E-B8F4-49F5-93CC-72A3FF49C026}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.HttpApi.Host", "services\src\CompanyName.ProjectName.HttpApi.Host\CompanyName.ProjectName.HttpApi.Host.csproj", "{E6D5BF0E-DE92-4D82-A352-EF04B37CB11C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.EntityFrameworkCore.Tests", "services\test\CompanyName.ProjectName.EntityFrameworkCore.Tests\CompanyName.ProjectName.EntityFrameworkCore.Tests.csproj", "{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.TestBase", "services\test\CompanyName.ProjectName.TestBase\CompanyName.ProjectName.TestBase.csproj", "{91853F21-9CD9-4132-BC29-A7D5D84FFFE7}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.Domain.Tests", "services\test\CompanyName.ProjectName.Domain.Tests\CompanyName.ProjectName.Domain.Tests.csproj", "{E512F4D9-9375-480F-A2F6-A46509F9D824}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.HttpApi.Client.ConsoleTestApp", "services\test\CompanyName.ProjectName.HttpApi.Client.ConsoleTestApp\CompanyName.ProjectName.HttpApi.Client.ConsoleTestApp.csproj", "{EF480016-9127-4916-8735-D2466BDBC582}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.DbMigrator", "services\src\CompanyName.ProjectName.DbMigrator\CompanyName.ProjectName.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}") = "Solution Items", "Solution Items", "{2C4A6DB8-8D9E-42E6-B7C3-1EDB7B3DE22E}"
+ ProjectSection(SolutionItems) = preProject
+ common.props = common.props
+ Directory.Build.props = Directory.Build.props
+ global.json = global.json
+ NuGet.Config = NuGet.Config
+ 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}") = "Extensions", "Extensions", "{9F5676A3-00DC-48B7-93D1-341C39E19BB9}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.Extensions", "frameworks\Extensions\src\CompanyName.ProjectName.Extensions\CompanyName.ProjectName.Extensions.csproj", "{7423541F-9BC3-401D-AC0B-5981D53C194C}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{C4AC9352-C9F5-4096-8D73-13638232CFB9}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "QueryManagement", "QueryManagement", "{7596C20A-689E-4EC9-96F4-DB8445892497}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{9528B5B6-C087-4932-92EA-EE486E97AAB0}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{FD0047B9-490E-41DA-B7EE-778F01D06D9F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.QueryManagement.Application", "modules\QueryManagement\src\CompanyName.ProjectName.QueryManagement.Application\CompanyName.ProjectName.QueryManagement.Application.csproj", "{75F9D251-7F50-46A3-8367-7B0FE7A5FA8E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.QueryManagement.Application.Contracts", "modules\QueryManagement\src\CompanyName.ProjectName.QueryManagement.Application.Contracts\CompanyName.ProjectName.QueryManagement.Application.Contracts.csproj", "{001E86FF-824E-4112-85AA-3800354F5F2A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.QueryManagement.Domain", "modules\QueryManagement\src\CompanyName.ProjectName.QueryManagement.Domain\CompanyName.ProjectName.QueryManagement.Domain.csproj", "{C3257A7E-64AA-438E-B615-2DC4BBAD9A7C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.QueryManagement.Domain.Shared", "modules\QueryManagement\src\CompanyName.ProjectName.QueryManagement.Domain.Shared\CompanyName.ProjectName.QueryManagement.Domain.Shared.csproj", "{69548DCB-B86B-4DAF-93A3-8BF30A7846DD}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.QueryManagement.EntityFrameworkCore", "modules\QueryManagement\src\CompanyName.ProjectName.QueryManagement.EntityFrameworkCore\CompanyName.ProjectName.QueryManagement.EntityFrameworkCore.csproj", "{BC2BB3D6-FECA-4C99-8C65-C0930865BF62}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.QueryManagement.HttpApi", "modules\QueryManagement\src\CompanyName.ProjectName.QueryManagement.HttpApi\CompanyName.ProjectName.QueryManagement.HttpApi.csproj", "{B6468E4A-753B-4256-8DDD-D31673FBA169}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.QueryManagement.HttpApi.Client", "modules\QueryManagement\src\CompanyName.ProjectName.QueryManagement.HttpApi.Client\CompanyName.ProjectName.QueryManagement.HttpApi.Client.csproj", "{1FF1CA56-8206-4152-88FD-F10C9AFA01F0}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.QueryManagement.MongoDB", "modules\QueryManagement\src\CompanyName.ProjectName.QueryManagement.MongoDB\CompanyName.ProjectName.QueryManagement.MongoDB.csproj", "{CED1C499-CD5C-4A16-897A-3FEB05380910}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.QueryManagement.Application.Tests", "modules\QueryManagement\test\CompanyName.ProjectName.QueryManagement.Application.Tests\CompanyName.ProjectName.QueryManagement.Application.Tests.csproj", "{12ED7E9D-E8CB-40FD-8390-CD60BC76C578}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.QueryManagement.Domain.Tests", "modules\QueryManagement\test\CompanyName.ProjectName.QueryManagement.Domain.Tests\CompanyName.ProjectName.QueryManagement.Domain.Tests.csproj", "{C8FC7FE3-F7FE-4D6E-BD65-D1CDEDCC3D80}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.QueryManagement.EntityFrameworkCore.Tests", "modules\QueryManagement\test\CompanyName.ProjectName.QueryManagement.EntityFrameworkCore.Tests\CompanyName.ProjectName.QueryManagement.EntityFrameworkCore.Tests.csproj", "{CB657CB5-35D5-4B46-9588-E974FDB5A8FB}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.QueryManagement.MongoDB.Tests", "modules\QueryManagement\test\CompanyName.ProjectName.QueryManagement.MongoDB.Tests\CompanyName.ProjectName.QueryManagement.MongoDB.Tests.csproj", "{D875344A-04EE-4D09-A1BA-144D46EA5DB9}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.QueryManagement.TestBase", "modules\QueryManagement\test\CompanyName.ProjectName.QueryManagement.TestBase\CompanyName.ProjectName.QueryManagement.TestBase.csproj", "{839291C2-DA87-4226-9A67-A7D364DAE9CB}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.QueryManagement.FreeSqlMySql", "modules\QueryManagement\src\CompanyName.ProjectName.QueryManagement.FreeSqlMySql\CompanyName.ProjectName.QueryManagement.FreeSqlMySql.csproj", "{C8A251F3-74DF-4B4F-B91E-367D1976B99F}"
+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}") = "CompanyName.ProjectName.NotificationManagement.Domain.Shared", "modules\NotificationManagement\src\CompanyName.ProjectName.NotificationManagement.Domain.Shared\CompanyName.ProjectName.NotificationManagement.Domain.Shared.csproj", "{3E69D96A-F923-4AC4-8430-9AAB84B6A3FE}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.NotificationManagement.Domain", "modules\NotificationManagement\src\CompanyName.ProjectName.NotificationManagement.Domain\CompanyName.ProjectName.NotificationManagement.Domain.csproj", "{F475DD35-9F27-43FF-9D96-365661ADC3C6}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.NotificationManagement.Application.Contracts", "modules\NotificationManagement\src\CompanyName.ProjectName.NotificationManagement.Application.Contracts\CompanyName.ProjectName.NotificationManagement.Application.Contracts.csproj", "{34B5BCF2-95C0-4136-AC9E-FC80D8ACBD1C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.NotificationManagement.Application", "modules\NotificationManagement\src\CompanyName.ProjectName.NotificationManagement.Application\CompanyName.ProjectName.NotificationManagement.Application.csproj", "{4ADEEE7D-7886-4F85-BAA2-CCEE6E30EBFD}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore", "modules\NotificationManagement\src\CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore\CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore.csproj", "{10DF0925-A1EE-4B1C-AAF6-249C6D02424C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.NotificationManagement.HttpApi", "modules\NotificationManagement\src\CompanyName.ProjectName.NotificationManagement.HttpApi\CompanyName.ProjectName.NotificationManagement.HttpApi.csproj", "{0880AA9C-0E45-43B3-B02A-093736CDD961}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.NotificationManagement.HttpApi.Client", "modules\NotificationManagement\src\CompanyName.ProjectName.NotificationManagement.HttpApi.Client\CompanyName.ProjectName.NotificationManagement.HttpApi.Client.csproj", "{B3554E2E-7150-482F-A08F-DCB8BD166FED}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.NotificationManagement.MongoDB", "modules\NotificationManagement\src\CompanyName.ProjectName.NotificationManagement.MongoDB\CompanyName.ProjectName.NotificationManagement.MongoDB.csproj", "{7614A8FD-D204-47FF-B409-255A0BE3B09A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.NotificationManagement.Application.Tests", "modules\NotificationManagement\test\CompanyName.ProjectName.NotificationManagement.Application.Tests\CompanyName.ProjectName.NotificationManagement.Application.Tests.csproj", "{22A3A359-C6F4-4540-A61F-C8E94A73C95E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.NotificationManagement.Domain.Tests", "modules\NotificationManagement\test\CompanyName.ProjectName.NotificationManagement.Domain.Tests\CompanyName.ProjectName.NotificationManagement.Domain.Tests.csproj", "{FCE5BD62-F7C7-45EA-80DE-B4880C4A84C6}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore.Tests", "modules\NotificationManagement\test\CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore.Tests\CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore.Tests.csproj", "{19A921F2-1587-4E94-A023-B81956874DAB}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.NotificationManagement.MongoDB.Tests", "modules\NotificationManagement\test\CompanyName.ProjectName.NotificationManagement.MongoDB.Tests\CompanyName.ProjectName.NotificationManagement.MongoDB.Tests.csproj", "{23FA155F-6F79-4DAB-B39B-DD92224E3E4F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.NotificationManagement.TestBase", "modules\NotificationManagement\test\CompanyName.ProjectName.NotificationManagement.TestBase\CompanyName.ProjectName.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}") = "CompanyName.ProjectName.DataDictionaryManagement.Application", "modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.Application\CompanyName.ProjectName.DataDictionaryManagement.Application.csproj", "{5E6550EA-D878-455C-8EF7-5382661C1D52}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.DataDictionaryManagement.Application.Contracts", "modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.Application.Contracts\CompanyName.ProjectName.DataDictionaryManagement.Application.Contracts.csproj", "{14CDCC5A-006A-41EC-8B48-F3EFAC842432}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.DataDictionaryManagement.Domain", "modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.Domain\CompanyName.ProjectName.DataDictionaryManagement.Domain.csproj", "{11C6A285-8BC0-44C9-9FAB-F93462C75ABC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.DataDictionaryManagement.Domain.Shared", "modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.Domain.Shared\CompanyName.ProjectName.DataDictionaryManagement.Domain.Shared.csproj", "{C7EB7304-CADD-4F09-84AC-43123406B28F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore", "modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore\CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore.csproj", "{DE15C716-E1C3-4FC3-B976-7EA06EBF23F5}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.DataDictionaryManagement.HttpApi", "modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.HttpApi\CompanyName.ProjectName.DataDictionaryManagement.HttpApi.csproj", "{430D3AF9-DCCF-4B6F-BFAF-1ECC2F0594A2}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Client", "modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Client\CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Client.csproj", "{CC104C76-0CC6-453E-A49D-C4995B6EB72B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.DataDictionaryManagement.MongoDB", "modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.MongoDB\CompanyName.ProjectName.DataDictionaryManagement.MongoDB.csproj", "{E46D26ED-F43A-4651-8B0E-5566FBE14D89}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.DataDictionaryManagement.Application.Tests", "modules\DataDictionaryManagement\test\CompanyName.ProjectName.DataDictionaryManagement.Application.Tests\CompanyName.ProjectName.DataDictionaryManagement.Application.Tests.csproj", "{13AF64F3-8962-4568-A0E1-833CCA1922D5}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.DataDictionaryManagement.Domain.Tests", "modules\DataDictionaryManagement\test\CompanyName.ProjectName.DataDictionaryManagement.Domain.Tests\CompanyName.ProjectName.DataDictionaryManagement.Domain.Tests.csproj", "{F9FADD90-8634-4B03-AC44-9F6C80B30E73}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore.Tests", "modules\DataDictionaryManagement\test\CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore.Tests\CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore.Tests.csproj", "{8BC28722-20CC-41BD-B183-4E33E94CA2A7}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.DataDictionaryManagement.MongoDB.Tests", "modules\DataDictionaryManagement\test\CompanyName.ProjectName.DataDictionaryManagement.MongoDB.Tests\CompanyName.ProjectName.DataDictionaryManagement.MongoDB.Tests.csproj", "{7327CE44-55FD-4419-AF32-2A6745029732}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompanyName.ProjectName.DataDictionaryManagement.TestBase", "modules\DataDictionaryManagement\test\CompanyName.ProjectName.DataDictionaryManagement.TestBase\CompanyName.ProjectName.DataDictionaryManagement.TestBase.csproj", "{6A398750-D7D8-43DC-8DF8-AA65C5766154}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "host", "host", "{5AACD0EE-F2B2-49F6-868F-8FE08D7243C0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host", "modules\DataDictionaryManagement\host\CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host\CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host.csproj", "{8D196E3D-6F95-4793-B948-79669AF09017}"
+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
+ {0372FA84-C517-4EB3-9A9F-B9ACAC0CA5E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0372FA84-C517-4EB3-9A9F-B9ACAC0CA5E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0372FA84-C517-4EB3-9A9F-B9ACAC0CA5E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0372FA84-C517-4EB3-9A9F-B9ACAC0CA5E0}.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
+ {073C361E-B8F4-49F5-93CC-72A3FF49C026}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {073C361E-B8F4-49F5-93CC-72A3FF49C026}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {073C361E-B8F4-49F5-93CC-72A3FF49C026}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {073C361E-B8F4-49F5-93CC-72A3FF49C026}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E6D5BF0E-DE92-4D82-A352-EF04B37CB11C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E6D5BF0E-DE92-4D82-A352-EF04B37CB11C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E6D5BF0E-DE92-4D82-A352-EF04B37CB11C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E6D5BF0E-DE92-4D82-A352-EF04B37CB11C}.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
+ {7423541F-9BC3-401D-AC0B-5981D53C194C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7423541F-9BC3-401D-AC0B-5981D53C194C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7423541F-9BC3-401D-AC0B-5981D53C194C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7423541F-9BC3-401D-AC0B-5981D53C194C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {75F9D251-7F50-46A3-8367-7B0FE7A5FA8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {75F9D251-7F50-46A3-8367-7B0FE7A5FA8E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {75F9D251-7F50-46A3-8367-7B0FE7A5FA8E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {75F9D251-7F50-46A3-8367-7B0FE7A5FA8E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {001E86FF-824E-4112-85AA-3800354F5F2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {001E86FF-824E-4112-85AA-3800354F5F2A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {001E86FF-824E-4112-85AA-3800354F5F2A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {001E86FF-824E-4112-85AA-3800354F5F2A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C3257A7E-64AA-438E-B615-2DC4BBAD9A7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C3257A7E-64AA-438E-B615-2DC4BBAD9A7C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C3257A7E-64AA-438E-B615-2DC4BBAD9A7C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C3257A7E-64AA-438E-B615-2DC4BBAD9A7C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {69548DCB-B86B-4DAF-93A3-8BF30A7846DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {69548DCB-B86B-4DAF-93A3-8BF30A7846DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {69548DCB-B86B-4DAF-93A3-8BF30A7846DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {69548DCB-B86B-4DAF-93A3-8BF30A7846DD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BC2BB3D6-FECA-4C99-8C65-C0930865BF62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BC2BB3D6-FECA-4C99-8C65-C0930865BF62}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BC2BB3D6-FECA-4C99-8C65-C0930865BF62}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BC2BB3D6-FECA-4C99-8C65-C0930865BF62}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B6468E4A-753B-4256-8DDD-D31673FBA169}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B6468E4A-753B-4256-8DDD-D31673FBA169}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B6468E4A-753B-4256-8DDD-D31673FBA169}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B6468E4A-753B-4256-8DDD-D31673FBA169}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1FF1CA56-8206-4152-88FD-F10C9AFA01F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1FF1CA56-8206-4152-88FD-F10C9AFA01F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1FF1CA56-8206-4152-88FD-F10C9AFA01F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1FF1CA56-8206-4152-88FD-F10C9AFA01F0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CED1C499-CD5C-4A16-897A-3FEB05380910}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CED1C499-CD5C-4A16-897A-3FEB05380910}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CED1C499-CD5C-4A16-897A-3FEB05380910}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CED1C499-CD5C-4A16-897A-3FEB05380910}.Release|Any CPU.Build.0 = Release|Any CPU
+ {12ED7E9D-E8CB-40FD-8390-CD60BC76C578}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {12ED7E9D-E8CB-40FD-8390-CD60BC76C578}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {12ED7E9D-E8CB-40FD-8390-CD60BC76C578}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {12ED7E9D-E8CB-40FD-8390-CD60BC76C578}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C8FC7FE3-F7FE-4D6E-BD65-D1CDEDCC3D80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C8FC7FE3-F7FE-4D6E-BD65-D1CDEDCC3D80}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C8FC7FE3-F7FE-4D6E-BD65-D1CDEDCC3D80}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C8FC7FE3-F7FE-4D6E-BD65-D1CDEDCC3D80}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CB657CB5-35D5-4B46-9588-E974FDB5A8FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CB657CB5-35D5-4B46-9588-E974FDB5A8FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CB657CB5-35D5-4B46-9588-E974FDB5A8FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CB657CB5-35D5-4B46-9588-E974FDB5A8FB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D875344A-04EE-4D09-A1BA-144D46EA5DB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D875344A-04EE-4D09-A1BA-144D46EA5DB9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D875344A-04EE-4D09-A1BA-144D46EA5DB9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D875344A-04EE-4D09-A1BA-144D46EA5DB9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {839291C2-DA87-4226-9A67-A7D364DAE9CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {839291C2-DA87-4226-9A67-A7D364DAE9CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {839291C2-DA87-4226-9A67-A7D364DAE9CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {839291C2-DA87-4226-9A67-A7D364DAE9CB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C8A251F3-74DF-4B4F-B91E-367D1976B99F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C8A251F3-74DF-4B4F-B91E-367D1976B99F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C8A251F3-74DF-4B4F-B91E-367D1976B99F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C8A251F3-74DF-4B4F-B91E-367D1976B99F}.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
+ {7614A8FD-D204-47FF-B409-255A0BE3B09A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7614A8FD-D204-47FF-B409-255A0BE3B09A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7614A8FD-D204-47FF-B409-255A0BE3B09A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7614A8FD-D204-47FF-B409-255A0BE3B09A}.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
+ {23FA155F-6F79-4DAB-B39B-DD92224E3E4F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {23FA155F-6F79-4DAB-B39B-DD92224E3E4F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {23FA155F-6F79-4DAB-B39B-DD92224E3E4F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {23FA155F-6F79-4DAB-B39B-DD92224E3E4F}.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
+ {E46D26ED-F43A-4651-8B0E-5566FBE14D89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E46D26ED-F43A-4651-8B0E-5566FBE14D89}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E46D26ED-F43A-4651-8B0E-5566FBE14D89}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E46D26ED-F43A-4651-8B0E-5566FBE14D89}.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
+ {7327CE44-55FD-4419-AF32-2A6745029732}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7327CE44-55FD-4419-AF32-2A6745029732}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7327CE44-55FD-4419-AF32-2A6745029732}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7327CE44-55FD-4419-AF32-2A6745029732}.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
+ 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}
+ {0372FA84-C517-4EB3-9A9F-B9ACAC0CA5E0} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {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}
+ {073C361E-B8F4-49F5-93CC-72A3FF49C026} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {E6D5BF0E-DE92-4D82-A352-EF04B37CB11C} = {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}
+ {9F5676A3-00DC-48B7-93D1-341C39E19BB9} = {CC2EBB07-A070-4158-AB37-A0C0BBAEA9F5}
+ {7423541F-9BC3-401D-AC0B-5981D53C194C} = {C4AC9352-C9F5-4096-8D73-13638232CFB9}
+ {C4AC9352-C9F5-4096-8D73-13638232CFB9} = {9F5676A3-00DC-48B7-93D1-341C39E19BB9}
+ {7596C20A-689E-4EC9-96F4-DB8445892497} = {F8A8EB2A-2D4B-464F-9A13-F8F7B6A8FAA3}
+ {9528B5B6-C087-4932-92EA-EE486E97AAB0} = {7596C20A-689E-4EC9-96F4-DB8445892497}
+ {FD0047B9-490E-41DA-B7EE-778F01D06D9F} = {7596C20A-689E-4EC9-96F4-DB8445892497}
+ {75F9D251-7F50-46A3-8367-7B0FE7A5FA8E} = {9528B5B6-C087-4932-92EA-EE486E97AAB0}
+ {001E86FF-824E-4112-85AA-3800354F5F2A} = {9528B5B6-C087-4932-92EA-EE486E97AAB0}
+ {C3257A7E-64AA-438E-B615-2DC4BBAD9A7C} = {9528B5B6-C087-4932-92EA-EE486E97AAB0}
+ {69548DCB-B86B-4DAF-93A3-8BF30A7846DD} = {9528B5B6-C087-4932-92EA-EE486E97AAB0}
+ {BC2BB3D6-FECA-4C99-8C65-C0930865BF62} = {9528B5B6-C087-4932-92EA-EE486E97AAB0}
+ {B6468E4A-753B-4256-8DDD-D31673FBA169} = {9528B5B6-C087-4932-92EA-EE486E97AAB0}
+ {1FF1CA56-8206-4152-88FD-F10C9AFA01F0} = {9528B5B6-C087-4932-92EA-EE486E97AAB0}
+ {CED1C499-CD5C-4A16-897A-3FEB05380910} = {9528B5B6-C087-4932-92EA-EE486E97AAB0}
+ {12ED7E9D-E8CB-40FD-8390-CD60BC76C578} = {FD0047B9-490E-41DA-B7EE-778F01D06D9F}
+ {C8FC7FE3-F7FE-4D6E-BD65-D1CDEDCC3D80} = {FD0047B9-490E-41DA-B7EE-778F01D06D9F}
+ {CB657CB5-35D5-4B46-9588-E974FDB5A8FB} = {FD0047B9-490E-41DA-B7EE-778F01D06D9F}
+ {D875344A-04EE-4D09-A1BA-144D46EA5DB9} = {FD0047B9-490E-41DA-B7EE-778F01D06D9F}
+ {839291C2-DA87-4226-9A67-A7D364DAE9CB} = {FD0047B9-490E-41DA-B7EE-778F01D06D9F}
+ {C8A251F3-74DF-4B4F-B91E-367D1976B99F} = {9528B5B6-C087-4932-92EA-EE486E97AAB0}
+ {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}
+ {7614A8FD-D204-47FF-B409-255A0BE3B09A} = {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}
+ {23FA155F-6F79-4DAB-B39B-DD92224E3E4F} = {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}
+ {E46D26ED-F43A-4651-8B0E-5566FBE14D89} = {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}
+ {7327CE44-55FD-4419-AF32-2A6745029732} = {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}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {28315BFD-90E7-4E14-A2EA-F3D23AF4126F}
+ EndGlobalSection
+EndGlobal
diff --git a/aspnet-core/CompanyName.ProjectName.sln.DotSettings b/aspnet-core/CompanyName.ProjectName.sln.DotSettings
new file mode 100644
index 00000000..cb0b2c91
--- /dev/null
+++ b/aspnet-core/CompanyName.ProjectName.sln.DotSettings
@@ -0,0 +1,23 @@
+
+ True
+ WARNING
+ WARNING
+ WARNING
+ WARNING
+ WARNING
+ WARNING
+ WARNING
+ WARNING
+ Required
+ Required
+ Required
+ Required
+ False
+ True
+ False
+ False
+ True
+ False
+ False
+ SQL
+
\ No newline at end of file
diff --git a/aspnet-core/Delete-BIN-OBJ-Folders.bat b/aspnet-core/Delete-BIN-OBJ-Folders.bat
new file mode 100644
index 00000000..02cfaa5e
--- /dev/null
+++ b/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/aspnet-core/Directory.Build.props b/aspnet-core/Directory.Build.props
new file mode 100644
index 00000000..8bd32743
--- /dev/null
+++ b/aspnet-core/Directory.Build.props
@@ -0,0 +1,7 @@
+
+
+
+ 4.3.3
+
+
+
\ No newline at end of file
diff --git a/aspnet-core/NuGet.Config b/aspnet-core/NuGet.Config
new file mode 100644
index 00000000..be8a1ece
--- /dev/null
+++ b/aspnet-core/NuGet.Config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aspnet-core/common.props b/aspnet-core/common.props
new file mode 100644
index 00000000..c94b49d6
--- /dev/null
+++ b/aspnet-core/common.props
@@ -0,0 +1,10 @@
+
+
+ latest
+ 1.0.0
+ $(NoWarn);CS1591;CS0436
+ app
+ true
+ 4.3.3
+
+
\ No newline at end of file
diff --git a/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/CompanyName.ProjectName.Extensions.csproj b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/CompanyName.ProjectName.Extensions.csproj
new file mode 100644
index 00000000..3ea91009
--- /dev/null
+++ b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/CompanyName.ProjectName.Extensions.csproj
@@ -0,0 +1,19 @@
+
+
+
+ netstandard2.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/Customs/Dtos/IdInput.cs b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/Customs/Dtos/IdInput.cs
new file mode 100644
index 00000000..36b99156
--- /dev/null
+++ b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/Customs/Dtos/IdInput.cs
@@ -0,0 +1,9 @@
+using System;
+
+namespace CompanyName.ProjectName.Publics.Dtos
+{
+ public class IdInput
+ {
+ public Guid Id { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/Customs/Dtos/PagingBase.cs b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/Customs/Dtos/PagingBase.cs
new file mode 100644
index 00000000..89ce457b
--- /dev/null
+++ b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/Customs/Dtos/PagingBase.cs
@@ -0,0 +1,64 @@
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+
+namespace CompanyName.ProjectName.Extensions.Customs
+{
+
+
+ ///
+ /// 分页查询时使用的Dto类型
+ ///
+ public class PagingBase : IValidatableObject
+ {
+ public const int MaxPageSize = 100000;
+
+ ///
+ /// 当前页面.默认从1开始
+ ///
+ public int PageIndex { get; set; } = 1;
+
+ ///
+ /// 每页多少条.每页显示多少记录
+ ///
+ public int PageSize { get; set; } = 10;
+
+ ///
+ /// 跳过多少条
+ ///
+ public int SkipCount => (PageIndex - 1) * PageSize;
+
+ public PagingBase()
+ {
+ }
+
+ ///
+ /// 实例化 对象
+ ///
+ /// 当前页面
+ /// 每页多少条
+ public PagingBase(int pageIndex = 1, int pageSize = 10)
+ {
+ PageIndex = pageIndex;
+ PageSize = pageSize;
+ }
+
+ public virtual IEnumerable Validate(ValidationContext validationContext)
+ {
+ if (PageIndex < 1)
+ {
+ yield return new ValidationResult(
+ "起始页必须大于等于1",
+ new[] { "PageIndex"}
+ );
+ }
+
+ if (PageSize > MaxPageSize)
+ {
+ yield return new ValidationResult(
+ $"每页最大记录数不能超过'{MaxPageSize}'",
+ new[] { "PageSize"}
+ );
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/Customs/Guard.cs b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/Customs/Guard.cs
new file mode 100644
index 00000000..63f911b2
--- /dev/null
+++ b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/Customs/Guard.cs
@@ -0,0 +1,302 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+
+namespace CompanyName.ProjectName.Extensions.Customs
+{
+ ///
+ /// 参数合法性检查类
+ ///
+ [DebuggerStepThrough]
+ public static class Guard
+ {
+ ///
+ /// 检查参数不能为空引用,
+ /// 否则抛出异常。
+ ///
+ ///
+ /// 参数名称
+ ///
+ public static T NotNull(T value, string valueName)
+ {
+ if (null == value)
+ {
+ throw new ArgumentNullException(valueName);
+ }
+
+ return value;
+ }
+
+ ///
+ /// 检查字符串不能为空引用或空字符串,
+ /// 否则抛出异常
+ /// 或异常
+ /// 或异常。
+ ///
+ ///
+ /// 参数名称。
+ /// 字符串允许的最大长度。
+ /// 字符串允许的最小长度。0表示不限制最小长度
+ ///
+ ///
+ ///
+ public static string NotNullOrEmpty(string value, string valueName, int maxLength = int.MaxValue,
+ int minLength = 0)
+ {
+ if (string.IsNullOrEmpty(value))
+ {
+ throw new ArgumentNullException(valueName);
+ }
+
+ if (value.Length > maxLength)
+ {
+ throw new ArgumentOutOfRangeException(valueName);
+ }
+
+ if (minLength > 0 && value.Length < minLength)
+ {
+ throw new ArgumentOutOfRangeException(valueName);
+ }
+
+ return value;
+ }
+
+ ///
+ /// 检查字符串不能为空引用或全部为空白,
+ /// 否则抛出异常
+ /// 或异常
+ /// 或异常。
+ ///
+ /// 需检查的字符串
+ /// 参数名称。
+ /// 字符串允许的最大长度。
+ /// 字符串允许的最小长度。0表示不限制最小长度
+ ///
+ ///
+ ///
+ public static string NotNullOrWhiteSpace(
+ string value,
+ string valueName,
+ int maxLength = int.MaxValue,
+ int minLength = 0)
+ {
+ if (string.IsNullOrWhiteSpace(value))
+ {
+ throw new ArgumentNullException(valueName);
+ }
+
+ if (value.Length > maxLength)
+ {
+ throw new ArgumentOutOfRangeException(valueName);
+ }
+
+ if (minLength > 0 && value.Length < minLength)
+ {
+ throw new ArgumentOutOfRangeException(valueName);
+ }
+
+ return value;
+ }
+
+ ///
+ /// 检查字符串长度是否超过最大长度,或低于最小长度,
+ /// 否则抛出异常
+ /// 或异常。
+ ///
+ /// 需检查的字符串。
+ /// 参数名称。
+ /// 字符串允许的最大长度。
+ /// 字符串要求的最小长度。0表示不限制最小长度
+ ///
+ ///
+ public static string Length(string value, string valueName, int maxLength = int.MaxValue,
+ int minLength = 0)
+ {
+ if (string.IsNullOrEmpty(value))
+ {
+ return value;
+ }
+
+ if (value.Length > maxLength)
+ {
+ throw new ArgumentOutOfRangeException(valueName);
+ }
+
+ if (minLength > 0 && value.Length < minLength)
+ {
+ throw new ArgumentOutOfRangeException(valueName);
+ }
+
+ return value;
+ }
+
+ ///
+ /// 检查Guid值不能为Guid.Empty,否则抛出异常。
+ ///
+ ///
+ /// 参数名称。
+ ///
+ public static Guid NotEmpty(
+ Guid value,
+ string valueName)
+ {
+ if (value == Guid.Empty)
+ {
+ throw new ArgumentNullException(valueName);
+ }
+
+ return value;
+ }
+
+ ///
+ /// 检查集合不能为空引用或空集合,
+ /// 否则抛出异常。
+ ///
+ /// 集合项的类型。
+ ///
+ /// 参数名称。
+ ///
+ public static void NotNullOrEmpty(
+ IReadOnlyList list,
+ string valueName)
+ {
+ if (null == list || !list.Any())
+ {
+ throw new ArgumentNullException(valueName);
+ }
+ }
+
+ ///
+ /// 检查参数必须小于[或可等于,参数]指定值,
+ /// 否则抛出异常。
+ ///
+ /// 参数类型。
+ ///
+ /// 参数名称。
+ /// 要比较的值。
+ /// 是否可等于。
+ ///
+ public static void LessThan(
+ T value,
+ string valueName,
+ T target,
+ bool canEqual = false)
+ where T : IComparable
+ {
+ var flag = canEqual ? value.CompareTo(target) <= 0 : value.CompareTo(target) < 0;
+ if (!flag)
+ {
+ throw new ArgumentOutOfRangeException(valueName);
+ }
+ }
+
+ ///
+ /// 检查参数必须大于[或可等于,参数]指定值,
+ /// 否则抛出异常。
+ ///
+ /// 参数类型。
+ /// 需检查的参数。
+ /// 参数名称。
+ /// 要比较的值。
+ /// 是否可等于。
+ ///
+ public static void GreaterThan(
+ T value,
+ string valueName,
+ T target,
+ bool canEqual = false)
+ where T : IComparable
+ {
+ var flag = canEqual ? value.CompareTo(target) >= 0 : value.CompareTo(target) > 0;
+ if (!flag)
+ {
+ throw new ArgumentOutOfRangeException(valueName);
+ }
+ }
+
+ ///
+ /// 检查参数必须在指定范围之间,否则抛出异常。
+ ///
+ /// 参数类型。
+ /// 需检查的参数。
+ /// 参数名称。
+ /// 比较范围的起始值。
+ /// 比较范围的结束值。
+ /// 是否可等于起始值
+ /// 是否可等于结束值
+ /// 不在指定范围内时
+ public static void Between(
+ T value,
+ string valueName,
+ T start,
+ T end,
+ bool startEqual = false,
+ bool endEqual = false)
+ where T : IComparable
+ {
+ var flag = startEqual ? value.CompareTo(start) >= 0 : value.CompareTo(start) > 0;
+ if (!flag)
+ {
+ throw new ArgumentOutOfRangeException(valueName);
+ }
+
+ flag = endEqual ? value.CompareTo(end) <= 0 : value.CompareTo(end) < 0;
+ if (!flag)
+ {
+ throw new ArgumentOutOfRangeException(valueName);
+ }
+ }
+
+ ///
+ /// 检查指定路径的文件夹必须存在,
+ /// 否则抛出异常
+ /// 或 异常。
+ ///
+ /// 需检查的路径。
+ /// 参数名称。
+ /// 当文件夹路径为null或空时
+ /// 当文件夹路径不存在时
+ public static string DirectoryExists(
+ string directory,
+ string parameterName)
+ {
+ if (string.IsNullOrWhiteSpace(directory))
+ {
+ throw new DirectoryNotFoundException(parameterName);
+ }
+
+ if (!Directory.Exists(directory))
+ {
+ throw new DirectoryNotFoundException(directory);
+ }
+
+ return directory;
+ }
+
+ ///
+ /// 检查指定路径的文件必须存在,否则抛出异常。
+ ///
+ ///
+ /// 参数名称。
+ /// 当文件路径为null或空时
+ /// 当文件路径不存在时
+ public static string FileExists(
+ string filename,
+ string valueName)
+ {
+ if (string.IsNullOrWhiteSpace(filename))
+ {
+ throw new ArgumentNullException(valueName);
+ }
+
+ if (!File.Exists(filename))
+ {
+ throw new FileNotFoundException(filename);
+ }
+
+ return filename;
+ }
+ }
+}
diff --git a/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/BooleanExtensions.cs b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/BooleanExtensions.cs
new file mode 100644
index 00000000..1c4b83bf
--- /dev/null
+++ b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/BooleanExtensions.cs
@@ -0,0 +1,27 @@
+namespace System
+{
+ ///
+ /// 布尔值类型的扩展辅助操作类
+ ///
+ public static class BooleanExtensions
+ {
+ ///
+ /// 把布尔值转换为小写字符串
+ ///
+ public static string ToLower(this bool value)
+ {
+ return value.ToString().ToLower();
+ }
+
+ ///
+ /// 如果条件成立,则抛出异常
+ ///
+ public static void TrueThrow(this bool flag, Exception exception)
+ {
+ if (flag)
+ {
+ throw exception;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/Collections/Generic/CollectionExtensions.cs b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/Collections/Generic/CollectionExtensions.cs
new file mode 100644
index 00000000..5053a9d4
--- /dev/null
+++ b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/Collections/Generic/CollectionExtensions.cs
@@ -0,0 +1,77 @@
+using System.Linq;
+using CompanyName.ProjectName.Extensions.Customs;
+
+namespace System.Collections.Generic
+{
+ ///
+ /// 集合扩展方法
+ ///
+ public static class CollectionExtensions
+ {
+ ///
+ /// 如果条件成立,添加项
+ ///
+ public static void AddIf(this ICollection collection, T value, bool flag)
+ {
+ Guard.NotNull(collection, nameof(collection));
+ if (flag)
+ {
+ collection.Add(value);
+ }
+ }
+
+ ///
+ /// 如果条件成立,添加项
+ ///
+ public static void AddIf(this ICollection collection, T value, Func func)
+ {
+ Guard.NotNull(collection, nameof(collection));
+ if (func())
+ {
+ collection.Add(value);
+ }
+ }
+
+ ///
+ /// 获取对象,不存在对使用委托添加对象
+ ///
+ public static T GetOrAdd(this ICollection collection, Func selector, Func factory)
+ {
+ Guard.NotNull(collection, nameof(collection));
+ T item = collection.FirstOrDefault(selector);
+ if (item == null)
+ {
+ item = factory();
+ collection.Add(item);
+ }
+
+ return item;
+ }
+
+ ///
+ /// 判断集合是否为null或空集合
+ ///
+ public static bool IsNullOrEmpty(this ICollection collection)
+ {
+ return collection == null || collection.Count == 0;
+ }
+
+ ///
+ /// 交换两项的位置
+ ///
+ public static void Swap(this List list, int index1, int index2)
+ {
+ Guard.Between(index1, nameof(index1), 0, list.Count, true);
+ Guard.Between(index2, nameof(index2), 0, list.Count, true);
+
+ if (index1 == index2)
+ {
+ return;
+ }
+
+ T tmp = list[index1];
+ list[index1] = list[index2];
+ list[index2] = tmp;
+ }
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/Collections/Generic/EnumerableExtensions.cs b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/Collections/Generic/EnumerableExtensions.cs
new file mode 100644
index 00000000..8468adca
--- /dev/null
+++ b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/Collections/Generic/EnumerableExtensions.cs
@@ -0,0 +1,201 @@
+using CompanyName.ProjectName.Extensions.Customs;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+
+namespace System.Collections.Generic
+{
+ ///
+ /// Enumerable集合扩展方法
+ ///
+ public static class EnumerableExtensions
+ {
+ /// 断言集合中的元素符合指定表达式,否则抛出异常。
+ /// 集合项类型
+ /// 源集合
+ /// 元素判断表达式
+ /// 异常选择器
+ /// 筛选过的集合
+ public static IEnumerable Assert(this IEnumerable source, Func predicate,
+ Func errorSelector = null)
+ {
+ foreach (var item in source)
+ {
+ var success = predicate(item);
+ if (!success)
+ {
+ throw errorSelector?.Invoke(item) ??
+ new InvalidOperationException("集合中包含无效的元素。");
+ }
+
+ yield return item;
+ }
+ }
+
+ ///
+ /// 打乱一个集合的项顺序,将一个集合洗牌
+ ///
+ public static IEnumerable Shuffle(this IEnumerable source)
+ {
+ // ReSharper disable PossibleMultipleEnumeration
+
+ Guard.NotNull(source, nameof(source));
+ return source.OrderBy(m => Guid.NewGuid());
+
+ // ReSharper restore PossibleMultipleEnumeration
+ }
+
+ ///
+ /// 将集合展开并分别转换成字符串,再以指定的分隔符衔接,拼成一个字符串返回。默认分隔符为逗号。
+ ///
+ /// 要处理的集合
+ /// 分隔符,默认为逗号
+ /// 拼接后的字符串
+ public static string ExpandAndToString(this IEnumerable collection, string separator = ",")
+ {
+ return collection.ExpandAndToString(item => item?.ToString() ?? string.Empty, separator);
+ }
+
+ ///
+ /// 循环集合的每一项,调用委托生成字符串,返回合并后的字符串。默认分隔符为逗号
+ ///
+ /// 待处理的集合
+ /// 单个集合项的转换委托
+ /// 分隔符,默认为逗号
+ /// 泛型类型
+ ///
+ public static string ExpandAndToString(
+ this IEnumerable collection,
+ Func itemFormatFunc,
+ string separator = ",")
+ {
+ collection = collection as IList ?? collection.ToList();
+ Guard.NotNull(itemFormatFunc, nameof(itemFormatFunc));
+
+ if (!collection.Any())
+ {
+ return string.Empty;
+ }
+
+ var sb = new StringBuilder();
+ var i = 0;
+ var count = collection.Count();
+ foreach (var item in collection)
+ {
+ if (i == count - 1)
+ {
+ sb.Append(itemFormatFunc(item));
+ }
+ else
+ {
+ sb.Append(itemFormatFunc(item) + separator);
+ }
+
+ i++;
+ }
+
+ return sb.ToString();
+ }
+
+ ///
+ /// 集合是否为空
+ ///
+ /// 要处理的集合
+ /// 动态类型
+ /// 为空返回True,不为空返回False
+ public static bool IsEmpty(this IEnumerable collection)
+ {
+ collection = collection as IList ?? collection.ToList();
+ return !collection.Any();
+ }
+
+ ///
+ /// 根据第三方条件是否为真来决定是否执行指定条件的查询
+ ///
+ /// 要查询的源
+ /// 查询条件
+ /// 第三方条件
+ /// 动态类型
+ /// 查询的结果
+ public static IEnumerable WhereIf(this IEnumerable source, Func predicate, bool condition)
+ {
+ Guard.NotNull(predicate, nameof(predicate));
+ source = source as IList ?? source.ToList();
+
+ return condition ? source.Where(predicate) : source;
+ }
+
+ ///
+ /// 将字符串集合按指定前缀排序
+ ///
+ public static IEnumerable OrderByPrefixes(this IEnumerable source, Func keySelector,
+ params string[] prefixes)
+ {
+ var all = source.OrderBy(keySelector).ToList();
+ var result = new List();
+ foreach (var prefix in prefixes)
+ {
+ var tmpList = all.Where(m => keySelector(m).StartsWith(prefix)).OrderBy(keySelector).ToList();
+ all = all.Except(tmpList).ToList();
+ result.AddRange(tmpList);
+ }
+
+ result.AddRange(all);
+ return result;
+ }
+
+ ///
+ /// 根据指定条件返回集合中不重复的元素
+ ///
+ /// 动态类型
+ /// 动态筛选条件类型
+ /// 要操作的源
+ /// 重复数据筛选条件
+ /// 不重复元素的集合
+ public static IEnumerable DistinctBy(this IEnumerable source, Func keySelector)
+ {
+ Guard.NotNull(keySelector, nameof(keySelector));
+ source = source as IList ?? source.ToList();
+
+ return source.GroupBy(keySelector).Select(group => group.First());
+ }
+
+ #region Internal
+
+ internal static int? TryGetCollectionCount(this IEnumerable source)
+ {
+ switch (source)
+ {
+ case null:
+ throw new ArgumentNullException(nameof(source));
+ case ICollection collection:
+ return collection.Count;
+ case IReadOnlyCollection collection:
+ return collection.Count;
+ default:
+ return null;
+ }
+ }
+
+ static int CountUpTo(this IEnumerable source, int max)
+ {
+ if (source == null) throw new ArgumentNullException(nameof(source));
+ if (max < 0)
+ throw new ArgumentOutOfRangeException(nameof(max), "最大计数参数不能为负。");
+
+ var count = 0;
+
+ using (var e = source.GetEnumerator())
+ {
+ while (count < max && e.MoveNext())
+ {
+ count++;
+ }
+ }
+
+ return count;
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/DateTimeExtensions.cs b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/DateTimeExtensions.cs
new file mode 100644
index 00000000..44d59056
--- /dev/null
+++ b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/DateTimeExtensions.cs
@@ -0,0 +1,78 @@
+using System.Globalization;
+using System.Linq;
+
+namespace System
+{
+ ///
+ /// 时间扩展操作类
+ ///
+ public static class DateTimeExtensions
+ {
+ ///
+ /// 当前时间是否周末
+ ///
+ /// 时间点
+ ///
+ public static bool IsWeekend(this DateTime dateTime)
+ {
+ DayOfWeek[] weeks = { DayOfWeek.Saturday, DayOfWeek.Sunday };
+ return weeks.Contains(dateTime.DayOfWeek);
+ }
+
+ ///
+ /// 当前时间是否工作日
+ ///
+ /// 时间点
+ ///
+ public static bool IsWeekday(this DateTime dateTime)
+ {
+ DayOfWeek[] weeks = { DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Thursday, DayOfWeek.Friday };
+ return weeks.Contains(dateTime.DayOfWeek);
+ }
+
+ ///
+ /// 获取时间相对唯一字符串
+ ///
+ ///
+ /// 是否使用毫秒
+ ///
+ public static string ToUniqueString(this DateTime dateTime, bool millisecond = false)
+ {
+ var seconds = dateTime.Hour * 3600 + dateTime.Minute * 60 + dateTime.Second;
+ var value = $"{dateTime:yyyy}{dateTime.DayOfYear}{seconds}";
+ if (millisecond)
+ {
+ return value + dateTime.ToString("fff");
+ }
+
+ return value;
+ }
+
+ ///
+ /// 将时间转换为JS时间格式(Date.getTime())
+ ///
+ ///
+ /// 是否使用毫秒
+ public static string ToJsGetTime(this DateTime dateTime, bool millisecond = true)
+ {
+ var utc = dateTime.ToUniversalTime();
+ var span = utc.Subtract(new DateTime(1970, 1, 1));
+ return Math.Round(millisecond ? span.TotalMilliseconds : span.TotalSeconds).ToString(CultureInfo.InvariantCulture);
+ }
+
+ ///
+ /// 将JS时间格式的数值转换为时间
+ ///
+ public static DateTime FromJsGetTime(this long jsTime)
+ {
+ var length = jsTime.ToString().Length;
+ if (!(length == 10 || length == 13))
+ {
+ throw new ArgumentOutOfRangeException(null, "JS时间数值的长度不正确,必须为10位或13位");
+ }
+ var start = new DateTime(1970, 1, 1);
+ var result = length == 10 ? start.AddSeconds(jsTime) : start.AddMilliseconds(jsTime);
+ return result.ToUniversalTime();
+ }
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/EnumExtensions.cs b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/EnumExtensions.cs
new file mode 100644
index 00000000..b81a732c
--- /dev/null
+++ b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/EnumExtensions.cs
@@ -0,0 +1,199 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.ComponentModel;
+using System.Linq;
+using System.Reflection;
+
+namespace System
+{
+ ///
+ /// 枚举的扩展辅助操作方法
+ ///
+ public static class EnumExtensions
+ {
+ ///
+ /// 获取枚举项上的特性的文字描述
+ ///
+ ///
+ ///
+ public static string ToDescription(this Enum value)
+ {
+ var type = value.GetType();
+ var member = type.GetMember(value.ToString()).FirstOrDefault();
+
+ return member != null ? member.GetDescription() : value.ToString();
+ }
+
+ ///
+ /// 枚举遍历,返回枚举的名称、值、特性
+ ///
+ /// 枚举类型
+ /// 回调函数
+ private static void Each(this Type enumType, Action action)
+ {
+ if (enumType.BaseType != typeof(Enum))
+ {
+ return;
+ }
+ var arr = Enum.GetValues(enumType);
+ foreach (var name in arr)
+ {
+ var currentEnum = Enum.Parse(enumType, name.ToString());
+ var value = Convert.ToInt32(Enum.Parse(enumType, name.ToString()));
+ var fieldInfo = enumType.GetField(name.ToString());
+ var description = "";
+ if (fieldInfo != null)
+ {
+ var attr = Attribute.GetCustomAttribute(fieldInfo,
+ typeof(DescriptionAttribute), false) as DescriptionAttribute;
+ if (attr != null)
+ {
+ description = attr.Description;
+ }
+ }
+ action(name.ToString(), value.ToString(), description, currentEnum);
+ }
+ }
+
+ ///
+ /// 根据枚举类型值返回枚举定义Description属性
+ ///
+ ///
+ ///
+ ///
+ public static string ToEnumDescriptionString(this short value, Type enumType)
+ {
+ var nvc = new NameValueCollection();
+ var typeDescription = typeof(DescriptionAttribute);
+ var fields = enumType.GetFields();
+ foreach (var field in fields)
+ {
+ if (field.FieldType.IsEnum)
+ {
+ var strValue = ((int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null)).ToString();
+ var arr = field.GetCustomAttributes(typeDescription, true);
+ string strText;
+ if (arr.Length > 0)
+ {
+ var aa = (DescriptionAttribute)arr[0];
+ strText = aa.Description;
+ }
+ else
+ {
+ strText = "";
+ }
+ nvc.Add(strValue, strText);
+ }
+ }
+ return nvc[value.ToString()];
+ }
+
+ ///
+ /// 将指定枚举转换为字典.
+ /// 枚举的Description为字典的Key,枚举的Value为字典的Value
+ ///
+ /// 指定枚举
+ private static List> GetEnumTypeValueList()
+ {
+ var items = new List>();
+ typeof(T).Each((name, value, description, enumObj) =>
+ items.Add(new KeyValuePair(description, value)));
+ return items;
+ }
+
+ ///
+ /// 将指定枚举转换为字典.
+ /// 枚举的Description为字典的Key,枚举为字典的Value
+ ///
+ /// 指定枚举
+ private static List> GetEnumTypeList()
+ {
+ var items = new List>();
+ typeof(T).Each((name, value, description, enumObj) =>
+ items.Add(new KeyValuePair(description, (T)enumObj)));
+ return items;
+ }
+
+ ///
+ /// 将指定枚举转换为字典.
+ /// 枚举的Description为字典的Key,枚举的Name为字典的Value
+ ///
+ /// 指定枚举
+ public static List> GetEnumTypeDescriptionNameList()
+ {
+ var items = new List>();
+ typeof(T).Each((name, value, description, enumObj) => items.Add(new KeyValuePair(description, name)));
+ return items;
+ }
+
+ ///
+ /// 将指定枚举转换为字典.
+ /// 枚举的Name为字典的Key,枚举的Description为字典的Value
+ ///
+ /// 指定枚举
+ public static List> GetEnumTypeValueNameList()
+ {
+ var items = new List>();
+ typeof(T).Each((name, value, description, enumObj) => items.Add(new KeyValuePair(name, description)));
+ return items;
+ }
+
+ ///
+ /// 将指定枚举转换为字典.
+ /// 枚举的Name为字典的Key,枚举的Description为字典的Value
+ ///
+ /// 指定枚举
+ public static List> GetStringKeyValueList() where TModel : Enum
+ {
+ var keyValuePairList = new List>();
+ var values = Enum.GetValues(typeof(TModel));
+ var modelArray = new TModel[values.Length];
+ values.CopyTo(modelArray, 0);
+ foreach (TModel model in modelArray)
+ keyValuePairList.Add(new KeyValuePair(model.ToString(), model.ToString()));
+ return keyValuePairList;
+ }
+
+ ///
+ /// 将指定枚举转换为字典.
+ /// 枚举的Description为字典的Key,枚举为字典的Value
+ ///
+ /// 指定枚举
+ public static List> GetEnumKeyValueList() where TModel : Enum
+ {
+ var enumTypeList = GetEnumTypeList();
+ var keyValuePairList = new List>();
+ foreach (KeyValuePair keyValuePair in enumTypeList)
+ keyValuePairList.Add(new KeyValuePair(keyValuePair.Key, keyValuePair.Value));
+ return keyValuePairList;
+ }
+
+ public static List> GetEntityDoubleStringKeyValueList()
+ {
+ var enumTypeList = GetEnumTypeValueList();
+ var keyValuePairList = new List>();
+ foreach (KeyValuePair keyValuePair in enumTypeList)
+ keyValuePairList.Add(new KeyValuePair(keyValuePair.Key, keyValuePair.Value));
+ return keyValuePairList;
+ }
+
+ public static List> GetEntityStringIntKeyValueList()
+ {
+ List> enumTypeList = GetEnumTypeValueList();
+ List> keyValuePairList = new List>();
+ foreach (KeyValuePair keyValuePair in enumTypeList)
+ keyValuePairList.Add(new KeyValuePair(keyValuePair.Key, Convert.ToInt32(keyValuePair.Value)));
+ return keyValuePairList;
+ }
+
+ public static List> GetEntityDoubleIntKeyValueList()
+ {
+ List> enumTypeList = GetEnumTypeValueList();
+ List> keyValuePairList = new List>();
+ foreach (KeyValuePair keyValuePair in enumTypeList)
+ keyValuePairList.Add(new KeyValuePair(Convert.ToInt32(keyValuePair.Key), Convert.ToInt32(keyValuePair.Value)));
+ return keyValuePairList;
+ }
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/ExceptionExtensions.cs b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/ExceptionExtensions.cs
new file mode 100644
index 00000000..2662e6ce
--- /dev/null
+++ b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/ExceptionExtensions.cs
@@ -0,0 +1,76 @@
+using System.Runtime.ExceptionServices;
+using System.Text;
+
+namespace System
+{
+ ///
+ /// 异常操作扩展
+ ///
+ public static class ExceptionExtensions
+ {
+ ///
+ /// 格式化异常消息
+ ///
+ /// 异常对象
+ /// 是否隐藏异常规模信息
+ /// 格式化后的异常信息字符串
+ public static string FormatMessage(this Exception e, bool isHideStackTrace = false)
+ {
+ var sb = new StringBuilder();
+ var count = 0;
+ var appString = string.Empty;
+ while (e != null)
+ {
+ if (count > 0)
+ {
+ appString += " ";
+ }
+ sb.AppendLine($"{appString}异常消息:{e.Message}");
+ sb.AppendLine($"{appString}异常类型:{e.GetType().FullName}");
+ sb.AppendLine($"{appString}异常方法:{(e.TargetSite == null ? null : e.TargetSite.Name)}");
+ sb.AppendLine($"{appString}异常源:{e.Source}");
+ if (!isHideStackTrace && e.StackTrace != null)
+ {
+ sb.AppendLine($"{appString}异常堆栈:{e.StackTrace}");
+ }
+ if (e.InnerException != null)
+ {
+ sb.AppendLine($"{appString}内部异常:");
+ count++;
+ e = e.InnerException;
+ }
+ }
+ return sb.ToString();
+ }
+
+ ///
+ /// 将异常重新抛出
+ ///
+ public static void ReThrow(this Exception exception)
+ {
+ ExceptionDispatchInfo.Capture(exception).Throw();
+ }
+
+ ///
+ /// 如果条件成立,则抛出异常
+ ///
+ public static void ThrowIf(this Exception exception, bool isThrow)
+ {
+ if (isThrow)
+ {
+ throw exception;
+ }
+ }
+
+ ///
+ /// 如果条件成立,则抛出异常
+ ///
+ public static void ThrowIf(this Exception exception, Func isThrowFunc)
+ {
+ if (isThrowFunc())
+ {
+ throw exception;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/Linq/QueryableExtensions.cs b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/Linq/QueryableExtensions.cs
new file mode 100644
index 00000000..6bb8e6fb
--- /dev/null
+++ b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/Linq/QueryableExtensions.cs
@@ -0,0 +1,28 @@
+using System.Linq.Expressions;
+using CompanyName.ProjectName.Extensions.Customs;
+
+namespace System.Linq
+{
+ ///
+ /// IQueryable集合扩展方法
+ ///
+ public static class QueryableExtensions
+ {
+ ///
+ /// 根据第三方条件是否为真来决定是否执行指定条件的查询
+ ///
+ /// 要查询的源
+ /// 查询条件
+ /// 第三方条件
+ /// 动态类型
+ /// 查询的结果
+ public static IQueryable WhereIf(this IQueryable source, Expression> predicate,
+ bool condition)
+ {
+ Guard.NotNull(source, nameof(source));
+ Guard.NotNull(predicate, nameof(predicate));
+
+ return condition ? source.Where(predicate) : source;
+ }
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/Reflection/AssemblyExtensions.cs b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/Reflection/AssemblyExtensions.cs
new file mode 100644
index 00000000..8fb5147a
--- /dev/null
+++ b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/Reflection/AssemblyExtensions.cs
@@ -0,0 +1,26 @@
+using System.Diagnostics;
+using CompanyName.ProjectName.Extensions.Customs;
+
+namespace System.Reflection
+{
+ ///
+ /// 程序集扩展操作类
+ ///
+ public static class AssemblyExtensions
+ {
+ ///
+ /// 获取程序集的产品版本
+ ///
+ public static string GetProductVersion(this Assembly assembly)
+ {
+ Guard.NotNull(assembly, nameof(assembly));
+ var info = FileVersionInfo.GetVersionInfo(assembly.Location);
+ var version = info.ProductVersion;
+ if (version.Contains("+"))
+ {
+ version = version.ReplaceRegex(@"\+(\w+)?", "");
+ }
+ return version;
+ }
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/Reflection/MemberInfoExtensions.cs b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/Reflection/MemberInfoExtensions.cs
new file mode 100644
index 00000000..c7ecd81a
--- /dev/null
+++ b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/Reflection/MemberInfoExtensions.cs
@@ -0,0 +1,73 @@
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+
+namespace System.Reflection
+{
+ ///
+ /// 成员的扩展辅助操作方法
+ ///
+ public static class MemberInfoExtensions
+ {
+ ///
+ /// 获取成员元数据的Description特性描述信息。
+ ///
+ /// 成员元数据对象。
+ /// 是否搜索成员的继承链以查找描述特性。
+ /// 返回Description特性描述信息,如不存在则返回成员的名称。
+ public static string GetDescription(this MemberInfo member, bool inherit = true)
+ {
+ var desc = member.GetAttribute(inherit);
+ if (desc != null)
+ {
+ return desc.Description;
+ }
+
+ var displayName = member.GetAttribute(inherit);
+ if (displayName != null)
+ {
+ return displayName.DisplayName;
+ }
+
+ var display = member.GetAttribute(inherit);
+ return display != null ? display.Name : member.Name;
+ }
+
+ ///
+ /// 检查指定指定类型成员中是否存在指定的Attribute特性。
+ ///
+ /// 要检查的Attribute特性类型。
+ /// 要检查的类型成员
+ /// 是否从继承中查找
+ /// 是否存在
+ public static bool HasAttribute(this MemberInfo memberInfo, bool inherit = true) where T : Attribute
+ {
+ return memberInfo.IsDefined(typeof(T), inherit);
+ }
+
+ ///
+ /// 从类型成员获取指定Attribute特性
+ ///
+ /// Attribute特性类型
+ /// 类型类型成员
+ /// 是否从继承中查找
+ /// 存在返回第一个,不存在返回null
+ public static T GetAttribute(this MemberInfo memberInfo, bool inherit = true) where T : Attribute
+ {
+ var attributes = memberInfo.GetCustomAttributes(typeof(T), inherit);
+ return attributes.FirstOrDefault() as T;
+ }
+
+ ///
+ /// 从类型成员获取指定Attribute特性。
+ ///
+ /// Attribute特性类型。
+ /// 类型类型成员。
+ /// 是否从继承中查找。
+ /// 返回所有指定Attribute特性的数组。
+ public static T[] GetAttributes(this MemberInfo memberInfo, bool inherit = true) where T : Attribute
+ {
+ return memberInfo.GetCustomAttributes(typeof(T), inherit).Cast().ToArray();
+ }
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/Reflection/MethodInfoExtensions.cs b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/Reflection/MethodInfoExtensions.cs
new file mode 100644
index 00000000..fd2ffde8
--- /dev/null
+++ b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/Reflection/MethodInfoExtensions.cs
@@ -0,0 +1,31 @@
+using System.Threading.Tasks;
+
+namespace System.Reflection
+{
+ ///
+ /// 方法的扩展辅助操作方法
+ ///
+ public static class MethodInfoExtensions
+ {
+ ///
+ /// 方法是否是异步
+ ///
+ public static bool IsAsync(this MethodInfo method)
+ {
+ return (method.ReturnType == typeof(Task<>)
+ || method.ReturnType.IsGenericType
+ && method.ReturnType.GetGenericTypeDefinition() == typeof(Task<>))
+ || method.ReturnType == typeof(Task);
+ }
+
+ ///
+ /// 返回当前方法信息是否是重写方法
+ ///
+ /// 要判断的方法信息
+ /// 是否是重写方法
+ public static bool IsOverridden(this MethodInfo method)
+ {
+ return method.GetBaseDefinition().DeclaringType != method.DeclaringType;
+ }
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/Reflection/PropertyInfoExtensions.cs b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/Reflection/PropertyInfoExtensions.cs
new file mode 100644
index 00000000..a2e13d28
--- /dev/null
+++ b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/Reflection/PropertyInfoExtensions.cs
@@ -0,0 +1,24 @@
+using System.Linq;
+
+namespace System.Reflection
+{
+ ///
+ /// 属性的扩展辅助操作方法
+ ///
+ public static class PropertyInfoExtensions
+ {
+ ///
+ /// 返回当前属性信息是否为virtual
+ ///
+ public static bool IsVirtual(this PropertyInfo property)
+ {
+ var accessor = property.GetAccessors().FirstOrDefault();
+ if (accessor == null)
+ {
+ return false;
+ }
+
+ return accessor.IsVirtual && !accessor.IsFinal;
+ }
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/StringExtensions.cs b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/StringExtensions.cs
new file mode 100644
index 00000000..64b63c58
--- /dev/null
+++ b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/System/StringExtensions.cs
@@ -0,0 +1,981 @@
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Web;
+using CompanyName.ProjectName.Extensions.Customs;
+using Newtonsoft.Json;
+
+namespace System
+{
+ ///
+ /// 字符串类型的扩展辅助操作类
+ ///
+ [DebuggerStepThrough]
+ public static class StringExtensions
+ {
+ #region 正则表达式
+
+ ///
+ /// 指示所指定的正则表达式在指定的输入字符串中是否找到了匹配项
+ ///
+ /// 要搜索匹配项的字符串
+ /// 要匹配的正则表达式模式
+ /// 是否包含,否则全匹配
+ /// 如果正则表达式找到匹配项,则为 true;否则,为 false
+ public static bool IsMatch(this string value, string pattern, bool isContains = true)
+ {
+ if (value == null)
+ {
+ return false;
+ }
+
+ return isContains
+ ? Regex.IsMatch(value, pattern)
+ : Regex.Match(value, pattern).Success;
+ }
+
+ ///
+ /// 在指定的输入字符串中搜索指定的正则表达式的第一个匹配项
+ ///
+ /// 要搜索匹配项的字符串
+ /// 要匹配的正则表达式模式
+ /// 一个对象,包含有关匹配项的信息
+ public static string Match(this string value, string pattern)
+ {
+ if (value == null)
+ {
+ return null;
+ }
+
+ return Regex.Match(value, pattern).Value;
+ }
+
+ ///
+ /// 在指定的输入字符串中匹配并替换符合指定正则表达式的子串
+ ///
+ public static string ReplaceRegex(this string value, string pattern, string replacement)
+ {
+ if (value == null)
+ {
+ return null;
+ }
+
+ return Regex.Replace(value, pattern, replacement);
+ }
+
+ ///
+ /// 在指定的输入字符串中搜索指定的正则表达式的所有匹配项的字符串集合
+ ///
+ /// 要搜索匹配项的字符串
+ /// 要匹配的正则表达式模式
+ /// 一个集合,包含有关匹配项的字符串值
+ public static IEnumerable Matches(this string value, string pattern)
+ {
+ if (value == null)
+ {
+ return new string[] { };
+ }
+
+ var matches = Regex.Matches(value, pattern);
+ return from Match match in matches select match.Value;
+ }
+
+ ///
+ /// 在指定的输入字符串中匹配第一个数字字符串
+ ///
+ public static string MatchFirstNumber(this string value)
+ {
+ var matches = Regex.Matches(value, @"\d+");
+ if (matches.Count == 0)
+ {
+ return string.Empty;
+ }
+
+ return matches[0].Value;
+ }
+
+ ///
+ /// 在指定字符串中匹配最后一个数字字符串
+ ///
+ public static string MatchLastNumber(this string value)
+ {
+ var matches = Regex.Matches(value, @"\d+");
+ if (matches.Count == 0)
+ {
+ return string.Empty;
+ }
+
+ return matches[matches.Count - 1].Value;
+ }
+
+ ///
+ /// 在指定字符串中匹配所有数字字符串
+ ///
+ public static IEnumerable MatchNumbers(this string value)
+ {
+ return Matches(value, @"\d+");
+ }
+
+ ///
+ /// 检测指定字符串中是否包含数字
+ ///
+ public static bool IsMatchNumber(this string value)
+ {
+ return IsMatch(value, @"\d");
+ }
+
+ ///
+ /// 检测指定字符串是否全部为数字并且长度等于指定长度
+ ///
+ public static bool IsMatchNumber(this string value, int length)
+ {
+ var regex = new Regex(@"^\d{" + length + "}$");
+ return regex.IsMatch(value);
+ }
+
+ ///
+ /// 截取指定字符串之间的字符串
+ ///
+ ///
+ /// 起始字符串
+ /// 结束字符串,可多个
+ /// 返回的中间字符串
+ public static string Substring(this string source, string startString, params string[] endStrings)
+ {
+ if (source.IsMissing())
+ {
+ return string.Empty;
+ }
+
+ var startIndex = 0;
+ if (!string.IsNullOrEmpty(startString))
+ {
+ startIndex = source.IndexOf(startString, StringComparison.OrdinalIgnoreCase);
+ if (startIndex < 0)
+ {
+ throw new InvalidOperationException($"在源字符串中无法找到“{startString}”的子串位置");
+ }
+
+ startIndex += startString.Length;
+ }
+
+ var endIndex = source.Length;
+ endStrings = endStrings.OrderByDescending(m => m.Length).ToArray();
+ foreach (var endString in endStrings)
+ {
+ if (string.IsNullOrEmpty(endString))
+ {
+ endIndex = source.Length;
+ break;
+ }
+
+ endIndex = source.IndexOf(endString, startIndex, StringComparison.OrdinalIgnoreCase);
+ if (endIndex < 0 || endIndex < startIndex)
+ {
+ continue;
+ }
+
+ break;
+ }
+
+ if (endIndex < 0 || endIndex < startIndex)
+ {
+ throw new InvalidOperationException($"在源字符串中无法找到“{endStrings.ExpandAndToString()}”的子串位置");
+ }
+
+ var length = endIndex - startIndex;
+
+ return source.Substring(startIndex, length);
+ }
+
+ ///
+ /// 用正则表达式截取字符串
+ ///
+ public static string Substring2(this string source, string startString, string endString)
+ {
+ return source.Substring2(startString, endString, false);
+ }
+
+ ///
+ /// 用正则表达式截取字符串
+ ///
+ public static string Substring2(this string source, string startString, string endString, bool containsEmpty)
+ {
+ if (source.IsMissing())
+ {
+ return string.Empty;
+ }
+
+ var inner = containsEmpty ? "\\s\\S" : "\\S";
+ var result = source.Match($"(?<={startString})([{inner}]+?)(?={endString})");
+ return result.IsMissing() ? null : result;
+ }
+
+ ///
+ /// 是否电子邮件
+ ///
+ public static bool IsEmail(this string value)
+ {
+ const string pattern = @"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$";
+ return value.IsMatch(pattern);
+ }
+
+ ///
+ /// 是否是IP地址
+ ///
+ public static bool IsIpAddress(this string value)
+ {
+ const string pattern =
+ @"^((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))$";
+ return value.IsMatch(pattern);
+ }
+
+ ///
+ /// 是否是整数
+ ///
+ public static bool IsNumeric(this string value)
+ {
+ const string pattern = @"^\-?[0-9]+$";
+ return value.IsMatch(pattern);
+ }
+
+ ///
+ /// 是否是Unicode字符串
+ ///
+ public static bool IsUnicode(this string value)
+ {
+ const string pattern = @"^[\u4E00-\u9FA5\uE815-\uFA29]+$";
+ return value.IsMatch(pattern);
+ }
+
+ ///
+ /// 是否Url字符串
+ ///
+ public static bool IsUrl(this string value)
+ {
+ try
+ {
+ if (string.IsNullOrEmpty(value) || value.Contains(' '))
+ {
+ return false;
+ }
+
+ var uri = new Uri(value);
+ return true;
+ }
+ catch (Exception)
+ {
+ return false;
+ }
+ }
+
+ ///
+ /// 是否身份证号,验证如下3种情况:
+ /// 1.身份证号码为15位数字;
+ /// 2.身份证号码为18位数字;
+ /// 3.身份证号码为17位数字+1个字母
+ ///
+ public static bool IsIdentityCardId(this string value)
+ {
+ if (value.Length != 15 && value.Length != 18)
+ {
+ return false;
+ }
+
+ Regex regex;
+ string[] array;
+ if (value.Length == 15)
+ {
+ regex = new Regex(@"^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})_");
+ if (!regex.Match(value).Success)
+ {
+ return false;
+ }
+
+ array = regex.Split(value);
+ return DateTime.TryParse(string.Format("{0}-{1}-{2}", "19" + array[2], array[3], array[4]), out _);
+ }
+
+ regex = new Regex(@"^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9Xx])$");
+ if (!regex.Match(value).Success)
+ {
+ return false;
+ }
+
+ array = regex.Split(value);
+ if (!DateTime.TryParse(string.Format("{0}-{1}-{2}", array[2], array[3], array[4]), out _))
+ {
+ return false;
+ }
+
+ //校验最后一位
+ var chars = value.ToCharArray().Select(m => m.ToString()).ToArray();
+ int[] weights = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
+ var sum = 0;
+ for (var i = 0; i < 17; i++)
+ {
+ var num = int.Parse(chars[i]);
+ sum += num * weights[i];
+ }
+
+ var mod = sum % 11;
+ var vCode = "10X98765432"; // 检验码字符串
+ var last = vCode.ToCharArray().ElementAt(mod).ToString();
+ return chars.Last().ToUpper() == last;
+ }
+
+ ///
+ /// 是否手机号码
+ ///
+ ///
+ /// 是否按严格格式验证
+ public static bool IsMobileNumber(this string value, bool isRestrict = false)
+ {
+ var pattern = isRestrict ? @"^[1][3-8]\d{9}$" : @"^[1]\d{10}$";
+ return value.IsMatch(pattern);
+ }
+
+ #endregion
+
+ #region 其他操作
+
+ ///
+ /// 判断指定的字符串不是 null、空。
+ ///
+ public static bool IsNotNullOrEmpty(this string str)
+ {
+ return !string.IsNullOrEmpty(str);
+ }
+
+ ///
+ /// 判断指定的字符串不是 null、空或者仅由空白字符组成
+ ///
+ public static bool IsNotNullOrWhiteSpace(this string str)
+ {
+ return !string.IsNullOrWhiteSpace(str);
+ }
+
+ ///
+ /// 指示指定的字符串是 null、空或者仅由空白字符组成
+ ///
+ public static bool IsMissing(this string value)
+ {
+ return string.IsNullOrWhiteSpace(value);
+ }
+
+ ///
+ /// 为指定格式的字符串填充相应对象来生成字符串
+ ///
+ /// 字符串格式,占位符以{n}表示
+ /// 用于填充占位符的参数
+ /// 格式化后的字符串
+ public static string FormatWith(this string format, params object[] args)
+ {
+ Guard.NotNull(format, nameof(format));
+ return string.Format(CultureInfo.CurrentCulture, format, args);
+ }
+
+ ///
+ /// 将字符串反转
+ ///
+ /// 要反转的字符串
+ public static string ReverseString(this string value)
+ {
+ Guard.NotNull(value, nameof(value));
+ return new string(value.Reverse().ToArray());
+ }
+
+ ///
+ /// 单词复数变成单数形式
+ ///
+ ///
+ ///
+ public static string ToSingular(this string word)
+ {
+ var plural1 = new Regex("(?[^aeiou])ies$");
+ var plural2 = new Regex("(?[aeiou]y)s$");
+ var plural3 = new Regex("(?[sxzh])es$");
+ var plural4 = new Regex("(?[^sxzhyu])s$");
+
+ if (plural1.IsMatch(word))
+ {
+ return plural1.Replace(word, "${keep}y");
+ }
+
+ if (plural2.IsMatch(word))
+ {
+ return plural2.Replace(word, "${keep}");
+ }
+
+ if (plural3.IsMatch(word))
+ {
+ return plural3.Replace(word, "${keep}");
+ }
+
+ if (plural4.IsMatch(word))
+ {
+ return plural4.Replace(word, "${keep}");
+ }
+
+ return word;
+ }
+
+ ///
+ /// 单词单数变成复数形式
+ ///
+ ///
+ ///
+ public static string ToPlural(this string word)
+ {
+ var plural1 = new Regex("(?[^aeiou])y$");
+ var plural2 = new Regex("(?[aeiou]y)$");
+ var plural3 = new Regex("(?[sxzh])$");
+ var plural4 = new Regex("(?[^sxzhy])$");
+
+ if (plural1.IsMatch(word))
+ {
+ return plural1.Replace(word, "${keep}ies");
+ }
+
+ if (plural2.IsMatch(word))
+ {
+ return plural2.Replace(word, "${keep}s");
+ }
+
+ if (plural3.IsMatch(word))
+ {
+ return plural3.Replace(word, "${keep}es");
+ }
+
+ if (plural4.IsMatch(word))
+ {
+ return plural4.Replace(word, "${keep}s");
+ }
+
+ return word;
+ }
+
+ ///
+ /// 以指定字符串作为分隔符将指定字符串分隔成数组
+ ///
+ /// 要分割的字符串
+ /// 字符串类型的分隔符
+ /// 是否移除数据中元素为空字符串的项
+ /// 分割后的数据
+ public static string[] Split(this string value, string strSplit, bool removeEmptyEntries = false)
+ {
+ return value.Split(new[] {strSplit},
+ removeEmptyEntries ? StringSplitOptions.RemoveEmptyEntries : StringSplitOptions.None);
+ }
+
+ ///
+ /// 支持汉字的字符串长度,汉字长度计为2
+ ///
+ /// 参数字符串
+ /// 当前字符串的长度,汉字长度为2
+ public static int TextLength(this string value)
+ {
+ var ascii = new ASCIIEncoding();
+ var tempLen = 0;
+ var bytes = ascii.GetBytes(value);
+ foreach (var b in bytes)
+ {
+ if (b == 63)
+ {
+ tempLen += 2;
+ }
+ else
+ {
+ tempLen += 1;
+ }
+ }
+
+ return tempLen;
+ }
+
+ ///
+ /// 将JSON字符串还原为对象
+ ///
+ /// 要转换的目标类型
+ /// JSON字符串
+ ///
+ public static T FromJsonString(this string json)
+ {
+ Guard.NotNull(json, nameof(json));
+ return JsonConvert.DeserializeObject(json);
+ }
+
+ ///
+ /// 将JSON字符串还原为对象
+ ///
+ /// JSON字符串
+ /// 数据类型
+ public static object FromJsonString(this string json, Type type)
+ {
+ return JsonConvert.DeserializeObject(json, type);
+ }
+
+ ///
+ /// 给URL添加查询参数
+ ///
+ /// URL字符串
+ /// 要添加的参数,形如:"id=1,cid=2"
+ ///
+ public static string AddUrlQuery(this string url, params string[] queries)
+ {
+ foreach (var query in queries)
+ {
+ if (!url.Contains("?"))
+ {
+ url += "?";
+ }
+ else if (!url.EndsWith("&"))
+ {
+ url += "&";
+ }
+
+ url += query;
+ }
+
+ return url;
+ }
+
+ ///
+ /// 获取URL中指定参数的值,不存在返回空字符串
+ ///
+ public static string GetUrlQuery(this string url, string key)
+ {
+ var uri = new Uri(url);
+ var query = uri.Query;
+ if (string.IsNullOrEmpty(query))
+ {
+ return string.Empty;
+ }
+
+ query = query.TrimStart('?');
+ var dict = (from m in query.Split("&", true)
+ let strs = m.Split("=")
+ select new KeyValuePair(strs[0], strs[1]))
+ .ToDictionary(m => m.Key, m => m.Value);
+ if (dict.ContainsKey(key))
+ {
+ return dict[key];
+ }
+
+ return string.Empty;
+ }
+
+ ///
+ /// 给URL添加 # 参数
+ ///
+ /// URL字符串
+ /// 要添加的参数
+ ///
+ public static string AddHashFragment(this string url, string query)
+ {
+ Guard.NotNull(url, nameof(url));
+ Guard.NotNull(query, nameof(query));
+
+ if (!url.Contains("#"))
+ {
+ url += "#";
+ }
+
+ return url + query;
+ }
+
+
+
+ ///
+ /// 将[]数组转换为Base64字符串
+ ///
+ public static string ToBase64String(this byte[] bytes)
+ {
+ Guard.NotNull(bytes, nameof(bytes));
+
+ return Convert.ToBase64String(bytes);
+ }
+
+ ///
+ /// 将字符串转换为Base64字符串,默认编码为
+ ///
+ /// 正常的字符串
+ /// 编码
+ /// Base64字符串
+ public static string ToBase64String(this string source, Encoding encoding = null)
+ {
+ Guard.NotNull(source, nameof(source));
+
+ if (encoding == null) encoding = Encoding.UTF8;
+
+ return Convert.ToBase64String(encoding.GetBytes(source));
+ }
+
+ ///
+ /// 将Base64字符串转换为正常字符串,默认编码为
+ ///
+ /// Base64字符串
+ /// 编码
+ /// 正常字符串
+ public static string FromBase64String(this string base64String, Encoding encoding = null)
+ {
+ Guard.NotNull(base64String, nameof(base64String));
+
+ if (encoding == null) encoding = Encoding.UTF8;
+
+ var bytes = Convert.FromBase64String(base64String);
+ return encoding.GetString(bytes);
+ }
+
+ ///
+ /// 将字符串进行UrlDecode解码
+ ///
+ /// 待UrlDecode解码的字符串
+ /// UrlDecode解码后的字符串
+ public static string ToUrlDecode(this string source)
+ {
+ Guard.NotNull(source, nameof(source));
+
+ return HttpUtility.UrlDecode(source);
+ }
+
+ ///
+ /// 将字符串进行UrlEncode编码
+ ///
+ /// 待UrlEncode编码的字符串
+ /// UrlEncode编码后的字符串
+ public static string ToUrlEncode(this string source)
+ {
+ Guard.NotNull(source, nameof(source));
+
+ return HttpUtility.UrlEncode(source);
+ }
+
+ ///
+ /// 将字符串进行HtmlDecode解码
+ ///
+ /// 待HtmlDecode解码的字符串
+ /// HtmlDecode解码后的字符串
+ public static string ToHtmlDecode(this string source)
+ {
+ Guard.NotNull(source, nameof(source));
+
+ return HttpUtility.HtmlDecode(source);
+ }
+
+ ///
+ /// 将字符串进行HtmlEncode编码
+ ///
+ /// 待HtmlEncode编码的字符串
+ /// HtmlEncode编码后的字符串
+ public static string ToHtmlEncode(this string source)
+ {
+ Guard.NotNull(source, nameof(source));
+
+ return HttpUtility.HtmlEncode(source);
+ }
+
+ ///
+ /// 将字符串转换为十六进制字符串,默认编码为
+ ///
+ public static string ToHexString(this string source, Encoding encoding = null)
+ {
+ Guard.NotNull(source, nameof(source));
+
+ if (encoding == null) encoding = Encoding.UTF8;
+
+ byte[] bytes = encoding.GetBytes(source);
+ return bytes.ToHexString();
+ }
+
+ ///
+ /// 将十六进制字符串转换为常规字符串,默认编码为
+ ///
+ public static string FromHexString(this string hexString, Encoding encoding = null)
+ {
+ Guard.NotNull(hexString, nameof(hexString));
+
+ if (encoding == null) encoding = Encoding.UTF8;
+
+ var bytes = hexString.ToHexBytes();
+ return encoding.GetString(bytes);
+ }
+
+ ///
+ /// 将byte[]编码为十六进制字符串
+ ///
+ /// byte[]数组
+ /// 十六进制字符串
+ public static string ToHexString(this byte[] bytes)
+ {
+ Guard.NotNull(bytes, nameof(bytes));
+
+ return bytes.Aggregate(string.Empty, (current, t) => current + t.ToString("X2"));
+ }
+
+ ///
+ /// 将十六进制字符串转换为byte[]
+ ///
+ /// 十六进制字符串
+ /// byte[]数组
+ public static byte[] ToHexBytes(this string hexString)
+ {
+ hexString = hexString ?? "";
+ hexString = hexString.Replace(" ", "");
+ byte[] bytes = new byte[hexString.Length / 2];
+ for (int i = 0; i < bytes.Length; i++)
+ {
+ bytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
+ }
+
+ return bytes;
+ }
+
+ ///
+ /// 将字符串进行Unicode编码,变成形如“\u7f16\u7801”的形式
+ ///
+ /// 要进行编号的字符串
+ public static string ToUnicodeString(this string source)
+ {
+ Guard.NotNull(source, nameof(source));
+
+ var regex = new Regex(@"[^\u0000-\u00ff]");
+ return regex.Replace(source, m => string.Format(@"\u{0:x4}", (short) m.Value[0]));
+ }
+
+ ///
+ /// 将形如“\u7f16\u7801”的Unicode字符串解码
+ ///
+ public static string FromUnicodeString(this string source)
+ {
+ var regex = new Regex(@"\\u([0-9a-fA-F]{4})", RegexOptions.Compiled);
+ return regex.Replace(source,
+ m =>
+ {
+ short s;
+ if (short.TryParse(m.Groups[1].Value, NumberStyles.HexNumber, CultureInfo.InstalledUICulture,
+ out s))
+ {
+ return "" + (char) s;
+ }
+
+ return m.Value;
+ });
+ }
+
+ ///
+ /// 将驼峰字符串按单词拆分并转换成小写,再以特定字符串分隔
+ ///
+ /// 待转换的字符串
+ /// 分隔符字符
+ ///
+ public static string UpperToLowerAndSplit(this string str, string splitStr = "-")
+ {
+ if (string.IsNullOrEmpty(str))
+ {
+ return str;
+ }
+
+ List words = new List();
+ while (str.Length > 0)
+ {
+ char c = str.FirstOrDefault(char.IsUpper);
+ if (c == default(char))
+ {
+ words.Add(str);
+ break;
+ }
+
+ int upperIndex = str.IndexOf(c);
+ if (upperIndex < 0) //admin
+ {
+ return str;
+ }
+
+ if (upperIndex > 0) //adminAdmin
+ {
+ string first = str.Substring(0, upperIndex);
+ words.Add(first);
+ str = str.Substring(upperIndex, str.Length - upperIndex);
+ continue;
+ }
+
+ str = char.ToLower(str[0]) + str.Substring(1, str.Length - 1);
+ }
+
+ return words.ExpandAndToString(splitStr);
+ }
+
+ ///
+ /// 将驼峰字符串的第一个字符小写
+ ///
+ public static string LowerFirstChar(this string str)
+ {
+ if (string.IsNullOrEmpty(str) || !char.IsUpper(str[0]))
+ {
+ return str;
+ }
+
+ if (str.Length == 1)
+ {
+ return char.ToLower(str[0]).ToString();
+ }
+
+ return char.ToLower(str[0]) + str.Substring(1, str.Length - 1);
+ }
+
+ ///
+ /// 将小驼峰字符串的第一个字符大写
+ ///
+ public static string UpperFirstChar(this string str)
+ {
+ if (string.IsNullOrEmpty(str) || !char.IsLower(str[0]))
+ {
+ return str;
+ }
+
+ if (str.Length == 1)
+ {
+ return char.ToUpper(str[0]).ToString();
+ }
+
+ return char.ToUpper(str[0]) + str.Substring(1, str.Length - 1);
+ }
+
+ ///
+ /// 计算当前字符串与指定字符串的编辑距离(相似度)
+ ///
+ /// 源字符串
+ /// 目标字符串
+ /// 输出相似度
+ /// 是否忽略大小写
+ /// 编辑距离
+ public static int LevenshteinDistance(this string source, string target, out double similarity,
+ bool ignoreCase = false)
+ {
+ if (string.IsNullOrEmpty(source))
+ {
+ if (string.IsNullOrEmpty(target))
+ {
+ similarity = 1;
+ return 0;
+ }
+
+ similarity = 0;
+ return target.Length;
+ }
+
+ if (string.IsNullOrEmpty(target))
+ {
+ similarity = 0;
+ return source.Length;
+ }
+
+ string from, to;
+ if (ignoreCase)
+ {
+ from = source;
+ to = target;
+ }
+ else
+ {
+ from = source.ToLower();
+ to = source.ToLower();
+ }
+
+ int m = from.Length, n = to.Length;
+ int[,] mn = new int[m + 1, n + 1];
+ for (int i = 0; i <= m; i++)
+ {
+ mn[i, 0] = i;
+ }
+
+ for (int j = 1; j <= n; j++)
+ {
+ mn[0, j] = j;
+ }
+
+ for (int i = 1; i <= m; i++)
+ {
+ char c = from[i - 1];
+ for (int j = 1; j <= n; j++)
+ {
+ if (c == to[j - 1])
+ {
+ mn[i, j] = mn[i - 1, j - 1];
+ }
+ else
+ {
+ mn[i, j] = Math.Min(mn[i - 1, j - 1], Math.Min(mn[i - 1, j], mn[i, j - 1])) + 1;
+ }
+ }
+ }
+
+ int maxLength = Math.Max(m, n);
+ similarity = (double) (maxLength - mn[m, n]) / maxLength;
+ return mn[m, n];
+ }
+
+ ///
+ /// 计算两个字符串的相似度,应用公式:相似度=kq*q/(kq*q+kr*r+ks*s)(kq>0,kr>=0,ka>=0)
+ /// 其中,q是字符串1和字符串2中都存在的单词的总数,s是字符串1中存在,字符串2中不存在的单词总数,r是字符串2中存在,字符串1中不存在的单词总数. kq,kr和ka分别是q,r,s的权重,根据实际的计算情况,我们设kq=2,kr=ks=1.
+ ///
+ /// 源字符串
+ /// 目标字符串
+ /// 是否忽略大小写
+ /// 字符串相似度
+ public static double GetSimilarityWith(this string source, string target, bool ignoreCase = false)
+ {
+ if (string.IsNullOrEmpty(source) && string.IsNullOrEmpty(target))
+ {
+ return 1;
+ }
+
+ if (string.IsNullOrEmpty(source) || string.IsNullOrEmpty(target))
+ {
+ return 0;
+ }
+
+ const double kq = 2, kr = 1, ks = 1;
+ char[] sourceChars = source.ToCharArray(), targetChars = target.ToCharArray();
+
+ //获取交集数量
+ int q = sourceChars.Intersect(targetChars).Count(), s = sourceChars.Length - q, r = targetChars.Length - q;
+ return kq * q / (kq * q + kr * r + ks * s);
+ }
+
+ ///
+ /// 标准化Path字符串,将 \\ 转换为 /
+ ///
+ /// Path字符串
+ public static string NormalizePath(this string path)
+ {
+ return path.Replace('\\', '/');
+ }
+
+ ///
+ /// (Pascal) 命名法 的字符串 改为 短横线分隔式命名
+ /// 例如UserName => user-name
+ ///
+ public static string PascalToKebabCase(this string value)
+ {
+ if (string.IsNullOrEmpty(value))
+ {
+ return value;
+ }
+
+ return Regex.Replace(
+ value,
+ "(?
+ /// StringBuilder 扩展方法类
+ ///
+ public static class StringBuilderExtensions
+ {
+ ///
+ /// 去除开头的空格
+ ///
+ ///
+ /// 返回修改后的StringBuilder,主要用于链式操作
+ public static StringBuilder TrimStart(this StringBuilder stringBuilder)
+ {
+ Guard.NotNull(stringBuilder, nameof(stringBuilder));
+
+ return stringBuilder.TrimStart(' ');
+ }
+
+ ///
+ /// 去除开头的指定
+ ///
+ ///
+ /// 要去掉的
+ ///
+ public static StringBuilder TrimStart(this StringBuilder stringBuilder, char c)
+ {
+ Guard.NotNull(stringBuilder, nameof(stringBuilder));
+
+ if (stringBuilder.Length == 0)
+ return stringBuilder;
+ while (c.Equals(stringBuilder[0]))
+ {
+ stringBuilder.Remove(0, 1);
+ }
+
+ return stringBuilder;
+ }
+
+ ///
+ /// 去除开头的指定字符数组
+ ///
+ ///
+ /// 要去掉的字符数组
+ ///
+ public static StringBuilder TrimStart(this StringBuilder stringBuilder, char[] chars)
+ {
+ Guard.NotNull(stringBuilder, nameof(stringBuilder));
+ Guard.NotNull(chars, nameof(chars));
+
+ return stringBuilder.TrimStart(new string(chars));
+ }
+
+ ///
+ /// 去除开头的指定的
+ ///
+ ///
+ /// 要去掉的
+ ///
+ public static StringBuilder TrimStart(this StringBuilder stringBuilder, string str)
+ {
+ Guard.NotNull(stringBuilder, nameof(stringBuilder));
+
+ if (string.IsNullOrEmpty(str)
+ || stringBuilder.Length == 0
+ || str.Length > stringBuilder.Length)
+ {
+ return stringBuilder;
+ }
+
+ while (stringBuilder.SubString(0, str.Length).Equals(str))
+ {
+ stringBuilder.Remove(0, str.Length);
+ if (str.Length > stringBuilder.Length)
+ {
+ break;
+ }
+ }
+
+ return stringBuilder;
+ }
+
+ ///
+ /// 去除StringBuilder结尾的空格
+ ///
+ /// StringBuilder
+ /// 返回修改后的StringBuilder,主要用于链式操作
+ public static StringBuilder TrimEnd(this StringBuilder stringBuilder)
+ {
+ return stringBuilder.TrimEnd(' ');
+ }
+
+ ///
+ /// 去除结尾指定字符
+ ///
+ ///
+ /// 要去掉的字符
+ ///
+ public static StringBuilder TrimEnd(this StringBuilder stringBuilder, char c)
+ {
+ Guard.NotNull(stringBuilder, nameof(stringBuilder));
+ if (stringBuilder.Length == 0)
+ {
+ return stringBuilder;
+ }
+
+ while (c.Equals(stringBuilder[stringBuilder.Length - 1]))
+ {
+ stringBuilder.Remove(stringBuilder.Length - 1, 1);
+ }
+
+ return stringBuilder;
+ }
+
+ ///
+ /// 去除结尾指定字符数组
+ ///
+ ///
+ /// 要去除的字符数组
+ ///
+ public static StringBuilder TrimEnd(this StringBuilder stringBuilder, char[] chars)
+ {
+ Guard.NotNull(stringBuilder, nameof(stringBuilder));
+ Guard.NotNull(chars, nameof(chars));
+
+ return stringBuilder.TrimEnd(new string(chars));
+ }
+
+ ///
+ /// 去除结尾指定字符串
+ ///
+ ///
+ /// 要去除的字符串
+ ///
+ public static StringBuilder TrimEnd(this StringBuilder stringBuilder, string str)
+ {
+ Guard.NotNull(stringBuilder, nameof(stringBuilder));
+ if (string.IsNullOrEmpty(str)
+ || stringBuilder.Length == 0
+ || str.Length > stringBuilder.Length)
+ {
+ return stringBuilder;
+ }
+ while (stringBuilder.SubString(stringBuilder.Length - str.Length, str.Length).Equals(str))
+ {
+ stringBuilder.Remove(stringBuilder.Length - str.Length, str.Length);
+ if (stringBuilder.Length < str.Length)
+ {
+ break;
+ }
+ }
+
+ return stringBuilder;
+ }
+
+ ///
+ /// 去除StringBuilder两端的空格
+ ///
+ /// StringBuilder
+ /// 返回修改后的StringBuilder,主要用于链式操作
+ public static StringBuilder Trim(this StringBuilder stringBuilder)
+ {
+ Guard.NotNull(stringBuilder, nameof(stringBuilder));
+
+ if (stringBuilder.Length == 0)
+ return stringBuilder;
+ return stringBuilder.TrimEnd().TrimStart();
+ }
+
+ ///
+ /// 返回从起始位置指定长度的字符串
+ ///
+ ///
+ /// 起始位置
+ /// 长度
+ /// 字符串
+ /// 超出字符串索引长度异常
+ public static string SubString(this StringBuilder stringBuilder, int start, int length)
+ {
+ Guard.NotNull(stringBuilder, nameof(stringBuilder));
+
+ if (start + length > stringBuilder.Length)
+ {
+ throw new IndexOutOfRangeException("超出字符串索引长度");
+ }
+
+ var cs = new char[length];
+ for (var i = 0; i < length; i++)
+ {
+ cs[i] = stringBuilder[start + i];
+ }
+
+ return new string(cs);
+ }
+
+ public static StringBuilder AppendLineWithControlChar(this StringBuilder stringBuilder, StringBuilder sb, string newLine)
+ {
+ stringBuilder = AppendWithControlChar(stringBuilder, sb.ToString());
+ return stringBuilder.Append(newLine);
+ }
+
+ public static StringBuilder AppendLineWithControlChar(this StringBuilder stringBuilder, string str, string newLine)
+ {
+ stringBuilder = AppendWithControlChar(stringBuilder, str);
+ return stringBuilder.Append(newLine);
+ }
+
+ public static StringBuilder AppendWithControlChar(this StringBuilder stringBuilder, StringBuilder sb)
+ {
+ return AppendWithControlChar(stringBuilder, sb.ToString());
+ }
+
+ public static StringBuilder AppendWithControlChar(this StringBuilder stringBuilder, string str)
+ {
+ if (str.Contains('\b'))
+ {
+ foreach (var c in str)
+ {
+ if (c == '\b')
+ {
+ stringBuilder.Length--;
+ }
+ else
+ {
+ stringBuilder.Append(c);
+ }
+ }
+ }
+ else
+ {
+ stringBuilder.Append(str);
+ }
+
+ return stringBuilder;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/Volo/Abp/BaseAbpModule.cs b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/Volo/Abp/BaseAbpModule.cs
new file mode 100644
index 00000000..2e9c837d
--- /dev/null
+++ b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/Volo/Abp/BaseAbpModule.cs
@@ -0,0 +1,21 @@
+using Volo.Abp.Autofac;
+using Volo.Abp.AutoMapper;
+using Volo.Abp.Domain;
+using Volo.Abp.Json;
+using Volo.Abp.Modularity;
+using Volo.Abp.ObjectMapping;
+using Volo.Abp.Validation;
+
+namespace CompanyName.ProjectName.Extensions.Volo.Abp
+{
+ [DependsOn(typeof(AbpAutofacModule))]
+ [DependsOn(typeof(AbpJsonModule))]
+ [DependsOn(typeof(AbpValidationModule))]
+ [DependsOn(typeof(AbpDddDomainModule))]
+ [DependsOn(typeof(AbpAutoMapperModule))]
+ [DependsOn(typeof(AbpObjectMappingModule))]
+ public class BaseAbpModule:AbpModule
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/Volo/Abp/BaseDomainService.cs b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/Volo/Abp/BaseDomainService.cs
new file mode 100644
index 00000000..178f0812
--- /dev/null
+++ b/aspnet-core/frameworks/Extensions/src/CompanyName.ProjectName.Extensions/Volo/Abp/BaseDomainService.cs
@@ -0,0 +1,35 @@
+using System;
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp.Domain.Services;
+using Volo.Abp.EventBus.Distributed;
+using Volo.Abp.ObjectMapping;
+using Volo.Abp.Uow;
+
+namespace CompanyName.ProjectName.Extensions.Volo.Abp
+{
+ public abstract class BaseDomainService : DomainService
+ {
+ protected Type ObjectMapperContext { get; set; }
+
+ ///
+ /// 工作单元管理器
+ ///
+ protected IUnitOfWorkManager UnitOfWorkManager =>
+ 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/aspnet-core/global.json b/aspnet-core/global.json
new file mode 100644
index 00000000..2b03af22
--- /dev/null
+++ b/aspnet-core/global.json
@@ -0,0 +1,6 @@
+{
+ "sdk": {
+ "version": "5.0.101",
+ "rollForward": "latestFeature"
+ }
+}
diff --git a/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host.csproj b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host.csproj
new file mode 100644
index 00000000..ba4f4ec8
--- /dev/null
+++ b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host.csproj
@@ -0,0 +1,43 @@
+
+
+
+
+
+ net5.0
+ CompanyName.ProjectName.DataDictionaryManagement
+ true
+ CompanyName.ProjectName.DataDictionaryManagement-c2d31439-b723-48e2-b061-5ebd7aeb6010
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/Controllers/HomeController.cs b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/Controllers/HomeController.cs
new file mode 100644
index 00000000..968ecbde
--- /dev/null
+++ b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/Controllers/HomeController.cs
@@ -0,0 +1,13 @@
+using Microsoft.AspNetCore.Mvc;
+using Volo.Abp.AspNetCore.Mvc;
+
+namespace CompanyName.ProjectName.DataDictionaryManagement.Controllers
+{
+ public class HomeController : AbpController
+ {
+ public ActionResult Index()
+ {
+ return Redirect("~/swagger");
+ }
+ }
+}
diff --git a/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/DataDictionaryManagementHttpApiHostModule.cs b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/DataDictionaryManagementHttpApiHostModule.cs
new file mode 100644
index 00000000..e1245b9c
--- /dev/null
+++ b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/DataDictionaryManagementHttpApiHostModule.cs
@@ -0,0 +1,233 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using Microsoft.AspNetCore.Authentication.JwtBearer;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Cors;
+using Microsoft.AspNetCore.DataProtection;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore;
+using StackExchange.Redis;
+using Microsoft.OpenApi.Models;
+using Volo.Abp;
+using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy;
+using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
+using Volo.Abp.AspNetCore.Serilog;
+using Volo.Abp.AuditLogging.EntityFrameworkCore;
+using Volo.Abp.Autofac;
+using Volo.Abp.Caching;
+using Volo.Abp.Caching.StackExchangeRedis;
+using Volo.Abp.EntityFrameworkCore;
+using Volo.Abp.EntityFrameworkCore.MySQL;
+using Volo.Abp.Localization;
+using Volo.Abp.Modularity;
+using Volo.Abp.PermissionManagement.EntityFrameworkCore;
+using Volo.Abp.SettingManagement.EntityFrameworkCore;
+using Volo.Abp.Swashbuckle;
+using Volo.Abp.VirtualFileSystem;
+
+namespace CompanyName.ProjectName.DataDictionaryManagement
+{
+ [DependsOn(
+ typeof(DataDictionaryManagementApplicationModule),
+ typeof(DataDictionaryManagementEntityFrameworkCoreModule),
+ typeof(DataDictionaryManagementHttpApiModule),
+ typeof(AbpAspNetCoreMvcUiMultiTenancyModule),
+ typeof(AbpAutofacModule),
+ typeof(AbpCachingStackExchangeRedisModule),
+ typeof(AbpEntityFrameworkCoreMySQLModule),
+ typeof(AbpAuditLoggingEntityFrameworkCoreModule),
+ typeof(AbpPermissionManagementEntityFrameworkCoreModule),
+ typeof(AbpSettingManagementEntityFrameworkCoreModule),
+ typeof(AbpAspNetCoreSerilogModule),
+ typeof(AbpSwashbuckleModule)
+ )]
+ public class DataDictionaryManagementHttpApiHostModule : AbpModule
+ {
+ private const string DefaultCorsPolicyName = "Default";
+
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+
+ // Configure(options =>
+ // {
+ // options.IsEnabled = MultiTenancyConsts.IsEnabled;
+ // });
+
+ ConfigureSwaggerServices(context);
+ ConfigureCache(context);
+ ConfigureCors(context);
+ ConfigureDB();
+ ConfigureLocalization();
+ ConfigureVirtualFileSystem(context);
+ }
+
+ public override void OnApplicationInitialization(ApplicationInitializationContext context)
+ {
+ var app = context.GetApplicationBuilder();
+ var env = context.GetEnvironment();
+
+ if (env.IsDevelopment())
+ {
+ app.UseDeveloperExceptionPage();
+ }
+ else
+ {
+ app.UseErrorPage();
+ app.UseHsts();
+ }
+
+ app.UseHttpsRedirection();
+ app.UseCorrelationId();
+ app.UseStaticFiles();
+ app.UseRouting();
+ app.UseCors(DefaultCorsPolicyName);
+ app.UseAuthentication();
+ // if (MultiTenancyConsts.IsEnabled)
+ // {
+ // app.UseMultiTenancy();
+ // }
+ app.UseAbpRequestLocalization();
+ app.UseAuthorization();
+ app.UseSwagger();
+ app.UseAbpSwaggerUI(options =>
+ {
+ options.SwaggerEndpoint("/swagger/v1/swagger.json", "Support APP API");
+
+ var configuration = context.GetConfiguration();
+ options.OAuthClientId(configuration["AuthServer:SwaggerClientId"]);
+ options.OAuthClientSecret(configuration["AuthServer:SwaggerClientSecret"]);
+ options.OAuthScopes("DataDictionaryManagement");
+ });
+ app.UseAuditing();
+ app.UseAbpSerilogEnrichers();
+ app.UseConfiguredEndpoints();
+ }
+
+ ///
+ /// 配置跨域
+ ///
+ ///
+ private void ConfigureCors(ServiceConfigurationContext context)
+ {
+ var configuration = context.Services.GetConfiguration();
+ context.Services.AddCors(options =>
+ {
+ options.AddPolicy(DefaultCorsPolicyName, builder =>
+ {
+ builder
+ .WithOrigins(
+ configuration["App:CorsOrigins"]
+ .Split(",", StringSplitOptions.RemoveEmptyEntries)
+ .Select(o => o.RemovePostFix("/"))
+ .ToArray()
+ )
+ .WithAbpExposedHeaders()
+ .SetIsOriginAllowedToAllowWildcardSubdomains()
+ .AllowAnyHeader()
+ .AllowAnyMethod()
+ .AllowCredentials();
+ });
+ });
+ }
+
+ ///
+ /// 配置SwaggerUI
+ ///
+ ///
+ private static void ConfigureSwaggerServices(ServiceConfigurationContext context)
+ {
+ context.Services.AddSwaggerGen(
+ options =>
+ {
+ options.SwaggerDoc("v1", new OpenApiInfo {Title = "DataDictionaryManagement API", Version = "v1"});
+
+ options.DocInclusionPredicate((docName, description) => true);
+
+ #region 添加token
+
+ options.AddSecurityDefinition(JwtBearerDefaults.AuthenticationScheme, new OpenApiSecurityScheme()
+ {
+ Description = "请输入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()
+ }
+ });
+
+ #endregion
+ });
+ }
+
+ ///
+ /// Redis缓存
+ ///
+ ///
+ private void ConfigureCache(ServiceConfigurationContext context)
+ {
+ var hostingEnvironment = context.Services.GetHostingEnvironment();
+ var configuration = context.Services.GetConfiguration();
+ Configure(options => { options.KeyPrefix = "DataDictionaryManagement:"; });
+
+ if (!hostingEnvironment.IsDevelopment())
+ {
+ var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]);
+ context.Services
+ .AddDataProtection()
+ .PersistKeysToStackExchangeRedis(redis, "DataDictionaryManagement-Protection-Keys");
+ }
+ }
+
+ private void ConfigureDB()
+ {
+ Configure(options => { options.UseMySQL(); });
+ }
+
+ ///
+ ///配置本地化
+ ///
+ private void ConfigureLocalization()
+ {
+ Configure(options =>
+ {
+ options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština"));
+ options.Languages.Add(new LanguageInfo("en", "en", "English"));
+ options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (UK)"));
+ options.Languages.Add(new LanguageInfo("fr", "fr", "Français"));
+ options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar"));
+ options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português"));
+ options.Languages.Add(new LanguageInfo("ru", "ru", "Русский"));
+ options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe"));
+ options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文"));
+ options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文"));
+ });
+ }
+ ///
+ /// 配置虚拟文件系统
+ ///
+ ///
+ private void ConfigureVirtualFileSystem(ServiceConfigurationContext context)
+ {
+ Configure(options =>
+ {
+ options.FileSets.AddEmbedded();
+ });
+ }
+ }
+}
diff --git a/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/Dockerfile b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/Dockerfile
new file mode 100644
index 00000000..048aed4c
--- /dev/null
+++ b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/Dockerfile
@@ -0,0 +1,18 @@
+FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
+WORKDIR /app
+EXPOSE 80
+
+FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build
+WORKDIR /src
+COPY . .
+WORKDIR /src/templates/service/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host
+RUN dotnet restore -nowarn:msb3202,nu1503
+RUN dotnet build --no-restore -c Release -o /app
+
+FROM build AS publish
+RUN dotnet publish --no-restore -c Release -o /app
+
+FROM base AS final
+WORKDIR /app
+COPY --from=publish /app .
+ENTRYPOINT ["dotnet", "CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host.dll"]
diff --git a/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/EntityFrameworkCore/DataDictionaryManagementHttpApiHostMigrationsDbContext.cs b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/EntityFrameworkCore/DataDictionaryManagementHttpApiHostMigrationsDbContext.cs
new file mode 100644
index 00000000..cf875dad
--- /dev/null
+++ b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/EntityFrameworkCore/DataDictionaryManagementHttpApiHostMigrationsDbContext.cs
@@ -0,0 +1,21 @@
+using Microsoft.EntityFrameworkCore;
+using Volo.Abp.EntityFrameworkCore;
+
+namespace CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore
+{
+ public class DataDictionaryManagementHttpApiHostMigrationsDbContext : AbpDbContext
+ {
+ public DataDictionaryManagementHttpApiHostMigrationsDbContext(DbContextOptions options)
+ : base(options)
+ {
+
+ }
+
+ protected override void OnModelCreating(ModelBuilder modelBuilder)
+ {
+ base.OnModelCreating(modelBuilder);
+
+ modelBuilder.ConfigureDataDictionaryManagement();
+ }
+ }
+}
diff --git a/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/EntityFrameworkCore/DataDictionaryManagementHttpApiHostMigrationsDbContextFactory.cs b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/EntityFrameworkCore/DataDictionaryManagementHttpApiHostMigrationsDbContextFactory.cs
new file mode 100644
index 00000000..f0acd5af
--- /dev/null
+++ b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/EntityFrameworkCore/DataDictionaryManagementHttpApiHostMigrationsDbContextFactory.cs
@@ -0,0 +1,28 @@
+using System.IO;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Design;
+using Microsoft.Extensions.Configuration;
+
+namespace CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore
+{
+ public class DataDictionaryManagementHttpApiHostMigrationsDbContextFactory : IDesignTimeDbContextFactory
+ {
+ public DataDictionaryManagementHttpApiHostMigrationsDbContext CreateDbContext(string[] args)
+ {
+ var configuration = BuildConfiguration();
+
+ var builder = new DbContextOptionsBuilder()
+ .UseMySql(configuration.GetConnectionString("DataDictionaryManagement"), MySqlServerVersion.LatestSupportedServerVersion);
+ return new DataDictionaryManagementHttpApiHostMigrationsDbContext(builder.Options);
+ }
+
+ private static IConfigurationRoot BuildConfiguration()
+ {
+ var builder = new ConfigurationBuilder()
+ .SetBasePath(Directory.GetCurrentDirectory())
+ .AddJsonFile("appsettings.json", optional: false);
+
+ return builder.Build();
+ }
+ }
+}
diff --git a/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/FodyWeavers.xml b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/FodyWeavers.xml
new file mode 100644
index 00000000..be0de3a9
--- /dev/null
+++ b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/FodyWeavers.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/FodyWeavers.xsd b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/FodyWeavers.xsd
new file mode 100644
index 00000000..3f3946e2
--- /dev/null
+++ b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/FodyWeavers.xsd
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.
+
+
+
+
+ A comma-separated list of error codes that can be safely ignored in assembly verification.
+
+
+
+
+ 'false' to turn off automatic generation of the XML Schema file.
+
+
+
+
+
\ No newline at end of file
diff --git a/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/Logs/logs.txt b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/Logs/logs.txt
new file mode 100644
index 00000000..8bea2d4c
--- /dev/null
+++ b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/Logs/logs.txt
@@ -0,0 +1,468 @@
+2021-08-12 21:06:20.884 +08:00 [INF] Starting web host.
+2021-08-12 21:06:22.208 +08:00 [INF] User profile is available. Using 'C:\Users\wangjun\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
+2021-08-12 21:06:22.365 +08:00 [INF] Loaded ABP modules:
+2021-08-12 21:06:22.365 +08:00 [INF] - CompanyName.ProjectName.DataDictionaryManagement.DataDictionaryManagementHttpApiHostModule
+2021-08-12 21:06:22.365 +08:00 [INF] - CompanyName.ProjectName.DataDictionaryManagement.DataDictionaryManagementApplicationModule
+2021-08-12 21:06:22.365 +08:00 [INF] - CompanyName.ProjectName.DataDictionaryManagement.DataDictionaryManagementDomainModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Data.AbpDataModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule
+2021-08-12 21:06:22.365 +08:00 [INF] - CompanyName.ProjectName.DataDictionaryManagement.DataDictionaryManagementDomainSharedModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule
+2021-08-12 21:06:22.365 +08:00 [INF] - CompanyName.ProjectName.DataDictionaryManagement.DataDictionaryManagementApplicationContractsModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.AutoMapper.AbpAutoMapperModule
+2021-08-12 21:06:22.365 +08:00 [INF] - CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore.DataDictionaryManagementEntityFrameworkCoreModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.EntityFrameworkCore.AbpEntityFrameworkCoreModule
+2021-08-12 21:06:22.365 +08:00 [INF] - CompanyName.ProjectName.DataDictionaryManagement.DataDictionaryManagementHttpApiModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.UI.AbpUiModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy.AbpAspNetCoreMvcUiMultiTenancyModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.AbpAspNetCoreMvcUiThemeSharedModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.AbpAspNetCoreMvcUiBootstrapModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.AbpAspNetCoreMvcUiModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Packages.AbpAspNetCoreMvcUiPackagesModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Bundling.AbpAspNetCoreMvcUiBundlingAbstractionsModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Widgets.AbpAspNetCoreMvcUiWidgetsModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Bundling.AbpAspNetCoreMvcUiBundlingModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.AspNetCore.MultiTenancy.AbpAspNetCoreMultiTenancyModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Caching.StackExchangeRedis.AbpCachingStackExchangeRedisModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.EntityFrameworkCore.MySQL.AbpEntityFrameworkCoreMySQLModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.AuditLogging.EntityFrameworkCore.AbpAuditLoggingEntityFrameworkCoreModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.AuditLogging.AbpAuditLoggingDomainModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.AuditLogging.AbpAuditLoggingDomainSharedModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.PermissionManagement.EntityFrameworkCore.AbpPermissionManagementEntityFrameworkCoreModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.PermissionManagement.AbpPermissionManagementDomainModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.PermissionManagement.AbpPermissionManagementDomainSharedModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.SettingManagement.EntityFrameworkCore.AbpSettingManagementEntityFrameworkCoreModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementDomainModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementDomainSharedModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule
+2021-08-12 21:06:22.365 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule
+2021-08-12 21:06:22.403 +08:00 [FTL] Application startup exception
+Volo.Abp.AbpInitializationException: An error occurred during the initialize Volo.Abp.Modularity.OnApplicationInitializationModuleLifecycleContributor phase of the module Volo.Abp.AspNetCore.AbpAspNetCoreModule, Volo.Abp.AspNetCore, Version=4.3.3.0, Culture=neutral, PublicKeyToken=null: An exception was thrown while activating λ:Volo.Abp.AspNetCore.VirtualFileSystem.IWebContentFileProvider -> Volo.Abp.AspNetCore.VirtualFileSystem.WebContentFileProvider -> λ:Volo.Abp.VirtualFileSystem.IVirtualFileProvider -> Volo.Abp.VirtualFileSystem.VirtualFileProvider.. See the inner exception for details.
+ ---> Autofac.Core.DependencyResolutionException: An exception was thrown while activating λ:Volo.Abp.AspNetCore.VirtualFileSystem.IWebContentFileProvider -> Volo.Abp.AspNetCore.VirtualFileSystem.WebContentFileProvider -> λ:Volo.Abp.VirtualFileSystem.IVirtualFileProvider -> Volo.Abp.VirtualFileSystem.VirtualFileProvider.
+ ---> Autofac.Core.DependencyResolutionException: An exception was thrown while invoking the constructor 'Void .ctor(Microsoft.Extensions.Options.IOptions`1[Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemOptions], Volo.Abp.VirtualFileSystem.IDynamicFileProvider)' on type 'VirtualFileProvider'.
+ ---> Volo.Abp.AbpException: ServiceConfigurationContext is only available in the ConfigureServices, PreConfigureServices and PostConfigureServices methods.
+ at Volo.Abp.Modularity.AbpModule.get_ServiceConfigurationContext()
+ at Volo.Abp.Modularity.AbpModule.Configure[TOptions](Action`1 configureOptions)
+ at CompanyName.ProjectName.DataDictionaryManagement.DataDictionaryManagementHttpApiHostModule.<>c__DisplayClass8_0.b__0(AbpVirtualFileSystemOptions options) in D:\abp-next\aspnet-core\modules\DataDictionaryManagement\host\CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host\DataDictionaryManagementHttpApiHostModule.cs:line 233
+ at Microsoft.Extensions.Options.ConfigureNamedOptions`1.Configure(String name, TOptions options)
+ at Microsoft.Extensions.Options.OptionsFactory`1.Create(String name)
+ at Microsoft.Extensions.Options.OptionsManager`1.<>c__DisplayClass5_0.b__0()
+ at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
+ at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
+ at System.Lazy`1.CreateValue()
+ at System.Lazy`1.get_Value()
+ at Microsoft.Extensions.Options.OptionsCache`1.GetOrAdd(String name, Func`1 createOptions)
+ at Microsoft.Extensions.Options.OptionsManager`1.Get(String name)
+ at Microsoft.Extensions.Options.OptionsManager`1.get_Value()
+ at Volo.Abp.VirtualFileSystem.VirtualFileProvider..ctor(IOptions`1 options, IDynamicFileProvider dynamicFileProvider)
+ at lambda_method615(Closure , Object[] )
+ at Autofac.Core.Activators.Reflection.BoundConstructor.Instantiate()
+ --- End of inner exception stack trace ---
+ at Autofac.Core.Activators.Reflection.BoundConstructor.Instantiate()
+ at Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IComponentContext context, IEnumerable`1 parameters)
+ at Autofac.Core.Activators.Reflection.ReflectionActivator.b__11_0(ResolveRequestContext ctxt, Action`1 next)
+ at Autofac.Core.Resolving.Middleware.DelegateMiddleware.Execute(ResolveRequestContext context, Action`1 next)
+ at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.b__1(ResolveRequestContext ctxt)
+ at Autofac.Core.Resolving.Middleware.DisposalTrackingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
+ at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.b__1(ResolveRequestContext ctxt)
+ at Autofac.Builder.RegistrationBuilder`3.<>c__DisplayClass41_0.b__0(ResolveRequestContext ctxt, Action`1 next)
+ at Autofac.Core.Resolving.Middleware.DelegateMiddleware.Execute(ResolveRequestContext context, Action`1 next)
+ at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.b__1(ResolveRequestContext ctxt)
+ at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
+ --- End of inner exception stack trace ---
+ at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
+ at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.b__1(ResolveRequestContext ctxt)
+ at Autofac.Core.Pipeline.ResolvePipeline.Invoke(ResolveRequestContext ctxt)
+ at Autofac.Core.Resolving.Middleware.RegistrationPipelineInvokeMiddleware.Execute(ResolveRequestContext context, Action`1 next)
+ at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.b__1(ResolveRequestContext ctxt)
+ at Autofac.Core.Resolving.Middleware.SharingMiddleware.<>c__DisplayClass5_0.b__0()
+ at Autofac.Core.Lifetime.LifetimeScope.CreateSharedInstance(Guid id, Func`1 creator)
+ at Autofac.Core.Lifetime.LifetimeScope.CreateSharedInstance(Guid primaryId, Nullable`1 qualifyingId, Func`1 creator)
+ at Autofac.Core.Resolving.Middleware.SharingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
+ at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.b__1(ResolveRequestContext ctxt)
+ at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.b__1(ResolveRequestContext ctxt)
+ at Autofac.Core.Resolving.Middleware.CircularDependencyDetectorMiddleware.Execute(ResolveRequestContext context, Action`1 next)
+ at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.b__1(ResolveRequestContext ctxt)
+ at Autofac.Core.Pipeline.ResolvePipeline.Invoke(ResolveRequestContext ctxt)
+ at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, ResolveRequest request)
+ at Autofac.Core.Resolving.ResolveOperation.ExecuteOperation(ResolveRequest request)
+ at Autofac.Core.Resolving.ResolveOperation.Execute(ResolveRequest request)
+ at Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(ResolveRequest request)
+ at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable`1 parameters, Object& instance)
+ at Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable`1 parameters)
+ at Autofac.ResolutionExtensions.Resolve(IComponentContext context, Type serviceType, IEnumerable`1 parameters)
+ at Autofac.ResolutionExtensions.Resolve(IComponentContext context, Type serviceType)
+ at Autofac.Extensions.DependencyInjection.AutofacServiceProvider.GetRequiredService(Type serviceType)
+ at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
+ at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
+ at Volo.Abp.AspNetCore.AbpAspNetCoreModule.OnApplicationInitialization(ApplicationInitializationContext context)
+ at Volo.Abp.Modularity.OnApplicationInitializationModuleLifecycleContributor.Initialize(ApplicationInitializationContext context, IAbpModule module)
+ at Volo.Abp.Modularity.ModuleManager.InitializeModules(ApplicationInitializationContext context)
+ --- End of inner exception stack trace ---
+ at Volo.Abp.Modularity.ModuleManager.InitializeModules(ApplicationInitializationContext context)
+ at Volo.Abp.AbpApplicationBase.InitializeModules()
+ at Volo.Abp.AbpApplicationWithExternalServiceProvider.Initialize(IServiceProvider serviceProvider)
+ at Microsoft.AspNetCore.Builder.AbpApplicationBuilderExtensions.InitializeApplication(IApplicationBuilder app)
+ at CompanyName.ProjectName.DataDictionaryManagement.Startup.Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) in D:\abp-next\aspnet-core\modules\DataDictionaryManagement\host\CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host\Startup.cs:line 18
+ at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
+ at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
+ at Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder)
+ at Microsoft.AspNetCore.Hosting.ConfigureBuilder.<>c__DisplayClass4_0.b__0(IApplicationBuilder builder)
+ at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass15_0.b__1(IApplicationBuilder app)
+ at Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.g__MiddlewareFilterBuilder|0(IApplicationBuilder builder)
+ at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder app)
+ at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken)
+ at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
+ at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
+ at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
+ at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host)
+ at CompanyName.ProjectName.DataDictionaryManagement.Program.Main(String[] args) in D:\abp-next\aspnet-core\modules\DataDictionaryManagement\host\CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host\Program.cs:line 31
+2021-08-12 21:06:22.411 +08:00 [FTL] Host terminated unexpectedly!
+Volo.Abp.AbpInitializationException: An error occurred during the initialize Volo.Abp.Modularity.OnApplicationInitializationModuleLifecycleContributor phase of the module Volo.Abp.AspNetCore.AbpAspNetCoreModule, Volo.Abp.AspNetCore, Version=4.3.3.0, Culture=neutral, PublicKeyToken=null: An exception was thrown while activating λ:Volo.Abp.AspNetCore.VirtualFileSystem.IWebContentFileProvider -> Volo.Abp.AspNetCore.VirtualFileSystem.WebContentFileProvider -> λ:Volo.Abp.VirtualFileSystem.IVirtualFileProvider -> Volo.Abp.VirtualFileSystem.VirtualFileProvider.. See the inner exception for details.
+ ---> Autofac.Core.DependencyResolutionException: An exception was thrown while activating λ:Volo.Abp.AspNetCore.VirtualFileSystem.IWebContentFileProvider -> Volo.Abp.AspNetCore.VirtualFileSystem.WebContentFileProvider -> λ:Volo.Abp.VirtualFileSystem.IVirtualFileProvider -> Volo.Abp.VirtualFileSystem.VirtualFileProvider.
+ ---> Autofac.Core.DependencyResolutionException: An exception was thrown while invoking the constructor 'Void .ctor(Microsoft.Extensions.Options.IOptions`1[Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemOptions], Volo.Abp.VirtualFileSystem.IDynamicFileProvider)' on type 'VirtualFileProvider'.
+ ---> Volo.Abp.AbpException: ServiceConfigurationContext is only available in the ConfigureServices, PreConfigureServices and PostConfigureServices methods.
+ at Volo.Abp.Modularity.AbpModule.get_ServiceConfigurationContext()
+ at Volo.Abp.Modularity.AbpModule.Configure[TOptions](Action`1 configureOptions)
+ at CompanyName.ProjectName.DataDictionaryManagement.DataDictionaryManagementHttpApiHostModule.<>c__DisplayClass8_0.b__0(AbpVirtualFileSystemOptions options) in D:\abp-next\aspnet-core\modules\DataDictionaryManagement\host\CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host\DataDictionaryManagementHttpApiHostModule.cs:line 233
+ at Microsoft.Extensions.Options.ConfigureNamedOptions`1.Configure(String name, TOptions options)
+ at Microsoft.Extensions.Options.OptionsFactory`1.Create(String name)
+ at Microsoft.Extensions.Options.OptionsManager`1.<>c__DisplayClass5_0.b__0()
+ at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
+ at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
+ at System.Lazy`1.CreateValue()
+ at System.Lazy`1.get_Value()
+ at Microsoft.Extensions.Options.OptionsCache`1.GetOrAdd(String name, Func`1 createOptions)
+ at Microsoft.Extensions.Options.OptionsManager`1.Get(String name)
+ at Microsoft.Extensions.Options.OptionsManager`1.get_Value()
+ at Volo.Abp.VirtualFileSystem.VirtualFileProvider..ctor(IOptions`1 options, IDynamicFileProvider dynamicFileProvider)
+ at lambda_method615(Closure , Object[] )
+ at Autofac.Core.Activators.Reflection.BoundConstructor.Instantiate()
+ --- End of inner exception stack trace ---
+ at Autofac.Core.Activators.Reflection.BoundConstructor.Instantiate()
+ at Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IComponentContext context, IEnumerable`1 parameters)
+ at Autofac.Core.Activators.Reflection.ReflectionActivator.b__11_0(ResolveRequestContext ctxt, Action`1 next)
+ at Autofac.Core.Resolving.Middleware.DelegateMiddleware.Execute(ResolveRequestContext context, Action`1 next)
+ at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.b__1(ResolveRequestContext ctxt)
+ at Autofac.Core.Resolving.Middleware.DisposalTrackingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
+ at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.b__1(ResolveRequestContext ctxt)
+ at Autofac.Builder.RegistrationBuilder`3.<>c__DisplayClass41_0.b__0(ResolveRequestContext ctxt, Action`1 next)
+ at Autofac.Core.Resolving.Middleware.DelegateMiddleware.Execute(ResolveRequestContext context, Action`1 next)
+ at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.b__1(ResolveRequestContext ctxt)
+ at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
+ --- End of inner exception stack trace ---
+ at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
+ at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.b__1(ResolveRequestContext ctxt)
+ at Autofac.Core.Pipeline.ResolvePipeline.Invoke(ResolveRequestContext ctxt)
+ at Autofac.Core.Resolving.Middleware.RegistrationPipelineInvokeMiddleware.Execute(ResolveRequestContext context, Action`1 next)
+ at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.b__1(ResolveRequestContext ctxt)
+ at Autofac.Core.Resolving.Middleware.SharingMiddleware.<>c__DisplayClass5_0.b__0()
+ at Autofac.Core.Lifetime.LifetimeScope.CreateSharedInstance(Guid id, Func`1 creator)
+ at Autofac.Core.Lifetime.LifetimeScope.CreateSharedInstance(Guid primaryId, Nullable`1 qualifyingId, Func`1 creator)
+ at Autofac.Core.Resolving.Middleware.SharingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
+ at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.b__1(ResolveRequestContext ctxt)
+ at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.b__1(ResolveRequestContext ctxt)
+ at Autofac.Core.Resolving.Middleware.CircularDependencyDetectorMiddleware.Execute(ResolveRequestContext context, Action`1 next)
+ at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.b__1(ResolveRequestContext ctxt)
+ at Autofac.Core.Pipeline.ResolvePipeline.Invoke(ResolveRequestContext ctxt)
+ at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, ResolveRequest request)
+ at Autofac.Core.Resolving.ResolveOperation.ExecuteOperation(ResolveRequest request)
+ at Autofac.Core.Resolving.ResolveOperation.Execute(ResolveRequest request)
+ at Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(ResolveRequest request)
+ at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable`1 parameters, Object& instance)
+ at Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable`1 parameters)
+ at Autofac.ResolutionExtensions.Resolve(IComponentContext context, Type serviceType, IEnumerable`1 parameters)
+ at Autofac.ResolutionExtensions.Resolve(IComponentContext context, Type serviceType)
+ at Autofac.Extensions.DependencyInjection.AutofacServiceProvider.GetRequiredService(Type serviceType)
+ at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
+ at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
+ at Volo.Abp.AspNetCore.AbpAspNetCoreModule.OnApplicationInitialization(ApplicationInitializationContext context)
+ at Volo.Abp.Modularity.OnApplicationInitializationModuleLifecycleContributor.Initialize(ApplicationInitializationContext context, IAbpModule module)
+ at Volo.Abp.Modularity.ModuleManager.InitializeModules(ApplicationInitializationContext context)
+ --- End of inner exception stack trace ---
+ at Volo.Abp.Modularity.ModuleManager.InitializeModules(ApplicationInitializationContext context)
+ at Volo.Abp.AbpApplicationBase.InitializeModules()
+ at Volo.Abp.AbpApplicationWithExternalServiceProvider.Initialize(IServiceProvider serviceProvider)
+ at Microsoft.AspNetCore.Builder.AbpApplicationBuilderExtensions.InitializeApplication(IApplicationBuilder app)
+ at CompanyName.ProjectName.DataDictionaryManagement.Startup.Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) in D:\abp-next\aspnet-core\modules\DataDictionaryManagement\host\CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host\Startup.cs:line 18
+ at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
+ at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
+ at Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder)
+ at Microsoft.AspNetCore.Hosting.ConfigureBuilder.<>c__DisplayClass4_0.b__0(IApplicationBuilder builder)
+ at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass15_0.b__1(IApplicationBuilder app)
+ at Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.g__MiddlewareFilterBuilder|0(IApplicationBuilder builder)
+ at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder app)
+ at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken)
+ at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
+ at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
+ at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
+ at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host)
+ at CompanyName.ProjectName.DataDictionaryManagement.Program.Main(String[] args) in D:\abp-next\aspnet-core\modules\DataDictionaryManagement\host\CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host\Program.cs:line 31
+2021-08-12 21:09:42.749 +08:00 [INF] Starting web host.
+2021-08-12 21:09:43.647 +08:00 [INF] User profile is available. Using 'C:\Users\wangjun\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
+2021-08-12 21:09:43.744 +08:00 [INF] Loaded ABP modules:
+2021-08-12 21:09:43.744 +08:00 [INF] - CompanyName.ProjectName.DataDictionaryManagement.DataDictionaryManagementHttpApiHostModule
+2021-08-12 21:09:43.744 +08:00 [INF] - CompanyName.ProjectName.DataDictionaryManagement.DataDictionaryManagementApplicationModule
+2021-08-12 21:09:43.744 +08:00 [INF] - CompanyName.ProjectName.DataDictionaryManagement.DataDictionaryManagementDomainModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Data.AbpDataModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule
+2021-08-12 21:09:43.744 +08:00 [INF] - CompanyName.ProjectName.DataDictionaryManagement.DataDictionaryManagementDomainSharedModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule
+2021-08-12 21:09:43.744 +08:00 [INF] - CompanyName.ProjectName.DataDictionaryManagement.DataDictionaryManagementApplicationContractsModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.AutoMapper.AbpAutoMapperModule
+2021-08-12 21:09:43.744 +08:00 [INF] - CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore.DataDictionaryManagementEntityFrameworkCoreModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.EntityFrameworkCore.AbpEntityFrameworkCoreModule
+2021-08-12 21:09:43.744 +08:00 [INF] - CompanyName.ProjectName.DataDictionaryManagement.DataDictionaryManagementHttpApiModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.UI.AbpUiModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy.AbpAspNetCoreMvcUiMultiTenancyModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.AbpAspNetCoreMvcUiThemeSharedModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.AbpAspNetCoreMvcUiBootstrapModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.AbpAspNetCoreMvcUiModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Packages.AbpAspNetCoreMvcUiPackagesModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Bundling.AbpAspNetCoreMvcUiBundlingAbstractionsModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Widgets.AbpAspNetCoreMvcUiWidgetsModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Bundling.AbpAspNetCoreMvcUiBundlingModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.AspNetCore.MultiTenancy.AbpAspNetCoreMultiTenancyModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Caching.StackExchangeRedis.AbpCachingStackExchangeRedisModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.EntityFrameworkCore.MySQL.AbpEntityFrameworkCoreMySQLModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.AuditLogging.EntityFrameworkCore.AbpAuditLoggingEntityFrameworkCoreModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.AuditLogging.AbpAuditLoggingDomainModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.AuditLogging.AbpAuditLoggingDomainSharedModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.PermissionManagement.EntityFrameworkCore.AbpPermissionManagementEntityFrameworkCoreModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.PermissionManagement.AbpPermissionManagementDomainModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.PermissionManagement.AbpPermissionManagementDomainSharedModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.SettingManagement.EntityFrameworkCore.AbpSettingManagementEntityFrameworkCoreModule
+2021-08-12 21:09:43.744 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementDomainModule
+2021-08-12 21:09:43.745 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementDomainSharedModule
+2021-08-12 21:09:43.745 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule
+2021-08-12 21:09:43.745 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule
+2021-08-12 21:09:44.388 +08:00 [INF] Initialized all ABP modules.
+2021-08-12 21:09:44.562 +08:00 [INF] Now listening on: https://localhost:44333
+2021-08-12 21:09:44.563 +08:00 [INF] Application started. Press Ctrl+C to shut down.
+2021-08-12 21:09:44.563 +08:00 [INF] Hosting environment: Development
+2021-08-12 21:09:44.563 +08:00 [INF] Content root path: D:\abp-next\aspnet-core\modules\DataDictionaryManagement\host\CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host
+2021-08-12 21:09:45.488 +08:00 [INF] Request starting HTTP/2 GET https://localhost:44333/ - -
+2021-08-12 21:09:46.853 +08:00 [INF] Entity Framework Core 5.0.7 initialized 'SettingManagementDbContext' using provider 'Pomelo.EntityFrameworkCore.MySql' with options: QuerySplittingBehavior=SplitQuery ServerVersion 8.0.25-mysql
+2021-08-12 21:09:47.340 +08:00 [INF] Executed DbCommand (94ms) [Parameters=[@__providerName_0='?' (Size = 64)], CommandType='"Text"', CommandTimeout='30']
+SELECT `a`.`Id`, `a`.`Name`, `a`.`ProviderKey`, `a`.`ProviderName`, `a`.`Value`
+FROM `AbpSettings` AS `a`
+WHERE (`a`.`ProviderName` = @__providerName_0) AND `a`.`ProviderKey` IS NULL
+2021-08-12 21:09:47.575 +08:00 [INF] Entity Framework Core 5.0.7 initialized 'SettingManagementDbContext' using provider 'Pomelo.EntityFrameworkCore.MySql' with options: QuerySplittingBehavior=SplitQuery ServerVersion 8.0.25-mysql
+2021-08-12 21:09:47.593 +08:00 [INF] Executed DbCommand (5ms) [Parameters=[@__providerName_0='?' (Size = 64)], CommandType='"Text"', CommandTimeout='30']
+SELECT `a`.`Id`, `a`.`Name`, `a`.`ProviderKey`, `a`.`ProviderName`, `a`.`Value`
+FROM `AbpSettings` AS `a`
+WHERE (`a`.`ProviderName` = @__providerName_0) AND `a`.`ProviderKey` IS NULL
+2021-08-12 21:09:47.722 +08:00 [INF] Executing endpoint 'CompanyName.ProjectName.DataDictionaryManagement.Controllers.HomeController.Index (CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host)'
+2021-08-12 21:09:47.812 +08:00 [INF] Route matched with {action = "Index", controller = "Home", area = "", page = ""}. Executing controller action with signature Microsoft.AspNetCore.Mvc.ActionResult Index() on controller CompanyName.ProjectName.DataDictionaryManagement.Controllers.HomeController (CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host).
+2021-08-12 21:09:47.843 +08:00 [INF] Executing RedirectResult, redirecting to /swagger.
+2021-08-12 21:09:47.849 +08:00 [INF] Executed action CompanyName.ProjectName.DataDictionaryManagement.Controllers.HomeController.Index (CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host) in 31.5651ms
+2021-08-12 21:09:47.849 +08:00 [INF] Executed endpoint 'CompanyName.ProjectName.DataDictionaryManagement.Controllers.HomeController.Index (CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host)'
+2021-08-12 21:09:47.863 +08:00 [INF] Request starting HTTP/2 GET https://localhost:44333/swagger - -
+2021-08-12 21:09:47.867 +08:00 [INF] Request finished HTTP/2 GET https://localhost:44333/swagger - - - 301 0 - 2.9871ms
+2021-08-12 21:09:47.867 +08:00 [INF] Request finished HTTP/2 GET https://localhost:44333/ - - - 302 0 - 2378.5848ms
+2021-08-12 21:09:47.873 +08:00 [INF] Request starting HTTP/2 GET https://localhost:44333/swagger/index.html - -
+2021-08-12 21:09:47.936 +08:00 [INF] Request finished HTTP/2 GET https://localhost:44333/swagger/index.html - - - 200 - text/html;charset=utf-8 63.2042ms
+2021-08-12 21:09:48.016 +08:00 [INF] Request starting HTTP/2 GET https://localhost:44333/swagger/swagger-ui.css - -
+2021-08-12 21:09:48.016 +08:00 [INF] Request starting HTTP/2 GET https://localhost:44333/swagger/ui/abp.js - -
+2021-08-12 21:09:48.016 +08:00 [INF] Request starting HTTP/2 GET https://localhost:44333/swagger/ui/abp.swagger.js - -
+2021-08-12 21:09:48.016 +08:00 [INF] Request starting HTTP/2 GET https://localhost:44333/swagger/swagger-ui-standalone-preset.js - -
+2021-08-12 21:09:48.016 +08:00 [INF] Request starting HTTP/2 GET https://localhost:44333/swagger/swagger-ui-bundle.js - -
+2021-08-12 21:09:48.036 +08:00 [INF] Sending file. Request path: '/swagger/ui/abp.swagger.js'. Physical path: 'N/A'
+2021-08-12 21:09:48.036 +08:00 [INF] Sending file. Request path: '/swagger/ui/abp.js'. Physical path: 'N/A'
+2021-08-12 21:09:48.064 +08:00 [INF] Request finished HTTP/2 GET https://localhost:44333/swagger/ui/abp.js - - - 200 3025 application/javascript 47.9200ms
+2021-08-12 21:09:48.064 +08:00 [INF] Request finished HTTP/2 GET https://localhost:44333/swagger/ui/abp.swagger.js - - - 200 1026 application/javascript 47.7603ms
+2021-08-12 21:09:48.071 +08:00 [INF] Sending file. Request path: '/swagger-ui.css'. Physical path: 'N/A'
+2021-08-12 21:09:48.071 +08:00 [INF] Sending file. Request path: '/swagger-ui-standalone-preset.js'. Physical path: 'N/A'
+2021-08-12 21:09:48.077 +08:00 [INF] Request finished HTTP/2 GET https://localhost:44333/swagger/swagger-ui.css - - - 200 143212 text/css 60.9084ms
+2021-08-12 21:09:48.077 +08:00 [INF] Request finished HTTP/2 GET https://localhost:44333/swagger/swagger-ui-standalone-preset.js - - - 200 332952 application/javascript 60.4933ms
+2021-08-12 21:09:48.083 +08:00 [INF] Sending file. Request path: '/swagger-ui-bundle.js'. Physical path: 'N/A'
+2021-08-12 21:09:48.083 +08:00 [INF] Request finished HTTP/2 GET https://localhost:44333/swagger/swagger-ui-bundle.js - - - 200 1061588 application/javascript 67.1192ms
+2021-08-12 21:09:48.263 +08:00 [INF] Request starting HTTP/2 GET https://localhost:44333/swagger/v1/swagger.json - -
+2021-08-12 21:09:48.289 +08:00 [INF] Request starting HTTP/2 GET https://localhost:44333/swagger/favicon-32x32.png - -
+2021-08-12 21:09:48.290 +08:00 [INF] Sending file. Request path: '/favicon-32x32.png'. Physical path: 'N/A'
+2021-08-12 21:09:48.290 +08:00 [INF] Request finished HTTP/2 GET https://localhost:44333/swagger/favicon-32x32.png - - - 200 628 image/png 1.4386ms
+2021-08-12 21:09:48.401 +08:00 [INF] Request finished HTTP/2 GET https://localhost:44333/swagger/v1/swagger.json - - - 200 - application/json;charset=utf-8 138.1229ms
+2021-08-12 21:13:48.225 +08:00 [INF] Starting web host.
+2021-08-12 21:13:49.116 +08:00 [INF] User profile is available. Using 'C:\Users\wangjun\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
+2021-08-12 21:13:49.290 +08:00 [INF] Loaded ABP modules:
+2021-08-12 21:13:49.290 +08:00 [INF] - CompanyName.ProjectName.DataDictionaryManagement.DataDictionaryManagementHttpApiHostModule
+2021-08-12 21:13:49.290 +08:00 [INF] - CompanyName.ProjectName.DataDictionaryManagement.DataDictionaryManagementApplicationModule
+2021-08-12 21:13:49.290 +08:00 [INF] - CompanyName.ProjectName.DataDictionaryManagement.DataDictionaryManagementDomainModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Data.AbpDataModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule
+2021-08-12 21:13:49.290 +08:00 [INF] - CompanyName.ProjectName.DataDictionaryManagement.DataDictionaryManagementDomainSharedModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule
+2021-08-12 21:13:49.290 +08:00 [INF] - CompanyName.ProjectName.DataDictionaryManagement.DataDictionaryManagementApplicationContractsModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.AutoMapper.AbpAutoMapperModule
+2021-08-12 21:13:49.290 +08:00 [INF] - CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore.DataDictionaryManagementEntityFrameworkCoreModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.EntityFrameworkCore.AbpEntityFrameworkCoreModule
+2021-08-12 21:13:49.290 +08:00 [INF] - CompanyName.ProjectName.DataDictionaryManagement.DataDictionaryManagementHttpApiModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.UI.AbpUiModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy.AbpAspNetCoreMvcUiMultiTenancyModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.AbpAspNetCoreMvcUiThemeSharedModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.AbpAspNetCoreMvcUiBootstrapModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.AbpAspNetCoreMvcUiModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Packages.AbpAspNetCoreMvcUiPackagesModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Bundling.AbpAspNetCoreMvcUiBundlingAbstractionsModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Widgets.AbpAspNetCoreMvcUiWidgetsModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.UI.Bundling.AbpAspNetCoreMvcUiBundlingModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.AspNetCore.MultiTenancy.AbpAspNetCoreMultiTenancyModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Caching.StackExchangeRedis.AbpCachingStackExchangeRedisModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.EntityFrameworkCore.MySQL.AbpEntityFrameworkCoreMySQLModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.AuditLogging.EntityFrameworkCore.AbpAuditLoggingEntityFrameworkCoreModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.AuditLogging.AbpAuditLoggingDomainModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.AuditLogging.AbpAuditLoggingDomainSharedModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.PermissionManagement.EntityFrameworkCore.AbpPermissionManagementEntityFrameworkCoreModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.PermissionManagement.AbpPermissionManagementDomainModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.PermissionManagement.AbpPermissionManagementDomainSharedModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.SettingManagement.EntityFrameworkCore.AbpSettingManagementEntityFrameworkCoreModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementDomainModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.SettingManagement.AbpSettingManagementDomainSharedModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule
+2021-08-12 21:13:49.290 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule
+2021-08-12 21:13:49.849 +08:00 [INF] Initialized all ABP modules.
+2021-08-12 21:13:49.957 +08:00 [INF] Now listening on: https://localhost:44333
+2021-08-12 21:13:49.958 +08:00 [INF] Application started. Press Ctrl+C to shut down.
+2021-08-12 21:13:49.958 +08:00 [INF] Hosting environment: Development
+2021-08-12 21:13:49.958 +08:00 [INF] Content root path: D:\abp-next\aspnet-core\modules\DataDictionaryManagement\host\CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host
+2021-08-12 21:13:50.567 +08:00 [INF] Request starting HTTP/2 GET https://localhost:44333/ - -
+2021-08-12 21:13:51.197 +08:00 [INF] Executing endpoint 'CompanyName.ProjectName.DataDictionaryManagement.Controllers.HomeController.Index (CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host)'
+2021-08-12 21:13:51.253 +08:00 [INF] Route matched with {action = "Index", controller = "Home", area = "", page = ""}. Executing controller action with signature Microsoft.AspNetCore.Mvc.ActionResult Index() on controller CompanyName.ProjectName.DataDictionaryManagement.Controllers.HomeController (CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host).
+2021-08-12 21:13:51.283 +08:00 [INF] Executing RedirectResult, redirecting to /swagger.
+2021-08-12 21:13:51.289 +08:00 [INF] Executed action CompanyName.ProjectName.DataDictionaryManagement.Controllers.HomeController.Index (CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host) in 30.3056ms
+2021-08-12 21:13:51.289 +08:00 [INF] Executed endpoint 'CompanyName.ProjectName.DataDictionaryManagement.Controllers.HomeController.Index (CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host)'
+2021-08-12 21:13:51.307 +08:00 [INF] Request finished HTTP/2 GET https://localhost:44333/ - - - 302 0 - 739.8461ms
+2021-08-12 21:13:51.308 +08:00 [INF] Request starting HTTP/2 GET https://localhost:44333/swagger/index.html - -
+2021-08-12 21:13:51.381 +08:00 [INF] Request finished HTTP/2 GET https://localhost:44333/swagger/index.html - - - 200 - text/html;charset=utf-8 73.5352ms
+2021-08-12 21:13:51.663 +08:00 [INF] Request starting HTTP/2 GET https://localhost:44333/swagger/v1/swagger.json - -
+2021-08-12 21:13:51.781 +08:00 [INF] Request finished HTTP/2 GET https://localhost:44333/swagger/v1/swagger.json - - - 200 - application/json;charset=utf-8 117.8385ms
+2021-08-12 21:13:57.290 +08:00 [INF] Request starting HTTP/2 GET https://localhost:44333/abp/Swashbuckle/SetCsrfCookie - -
+2021-08-12 21:13:57.292 +08:00 [INF] Executing endpoint 'Volo.Abp.Swashbuckle.AbpSwashbuckleController.SetCsrfCookie (Volo.Abp.Swashbuckle)'
+2021-08-12 21:13:57.294 +08:00 [INF] Route matched with {area = "Abp", action = "SetCsrfCookie", controller = "AbpSwashbuckle", page = ""}. Executing controller action with signature Void SetCsrfCookie() on controller Volo.Abp.Swashbuckle.AbpSwashbuckleController (Volo.Abp.Swashbuckle).
+2021-08-12 21:13:57.309 +08:00 [INF] Executed action Volo.Abp.Swashbuckle.AbpSwashbuckleController.SetCsrfCookie (Volo.Abp.Swashbuckle) in 15.0469ms
+2021-08-12 21:13:57.309 +08:00 [INF] Executed endpoint 'Volo.Abp.Swashbuckle.AbpSwashbuckleController.SetCsrfCookie (Volo.Abp.Swashbuckle)'
+2021-08-12 21:13:57.310 +08:00 [INF] Request finished HTTP/2 GET https://localhost:44333/abp/Swashbuckle/SetCsrfCookie - - - 204 - - 20.1239ms
+2021-08-12 21:13:57.383 +08:00 [INF] Request starting HTTP/2 GET https://localhost:44333/api/app/data-dictionary/paging-list - -
+2021-08-12 21:13:57.385 +08:00 [INF] Executing endpoint 'CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.DataDictionaryController.GetPagingListAsync (CompanyName.ProjectName.DataDictionaryManagement.HttpApi)'
+2021-08-12 21:13:57.446 +08:00 [INF] Route matched with {action = "GetPagingList", controller = "DataDictionary", area = "", page = ""}. Executing controller action with signature System.Threading.Tasks.Task`1[Volo.Abp.Application.Dtos.PagedResultDto`1[CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Dtos.PagingDataDictionaryOutput]] GetPagingListAsync(CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Dtos.PagingDataDictionaryInput) on controller CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.DataDictionaryController (CompanyName.ProjectName.DataDictionaryManagement.HttpApi).
+2021-08-12 21:13:59.001 +08:00 [INF] Entity Framework Core 5.0.7 initialized 'DataDictionaryManagementDbContext' using provider 'Pomelo.EntityFrameworkCore.MySql' with options: QuerySplittingBehavior=SplitQuery ServerVersion 8.0.25-mysql
+2021-08-12 21:13:59.590 +08:00 [INF] Executed DbCommand (61ms) [Parameters=[@__ef_filter__p_0='?' (DbType = Boolean)], CommandType='"Text"', CommandTimeout='30']
+SELECT COUNT(*)
+FROM `DataDictionary` AS `d`
+WHERE @__ef_filter__p_0 OR NOT (`d`.`IsDeleted`)
+2021-08-12 21:13:59.744 +08:00 [DBG] Added 0 entity changes to the current audit log
+2021-08-12 21:13:59.775 +08:00 [INF] Executing ObjectResult, writing value of type 'Volo.Abp.Application.Dtos.PagedResultDto`1[[CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Dtos.PagingDataDictionaryOutput, CompanyName.ProjectName.DataDictionaryManagement.Application.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]'.
+2021-08-12 21:13:59.797 +08:00 [INF] Executed action CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.DataDictionaryController.GetPagingListAsync (CompanyName.ProjectName.DataDictionaryManagement.HttpApi) in 2351.164ms
+2021-08-12 21:13:59.799 +08:00 [INF] Executed endpoint 'CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.DataDictionaryController.GetPagingListAsync (CompanyName.ProjectName.DataDictionaryManagement.HttpApi)'
+2021-08-12 21:13:59.810 +08:00 [INF] Request finished HTTP/2 GET https://localhost:44333/api/app/data-dictionary/paging-list - - - 200 - application/json;+charset=utf-8 2427.1745ms
diff --git a/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/Migrations/20210812130334_Init.Designer.cs b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/Migrations/20210812130334_Init.Designer.cs
new file mode 100644
index 00000000..90d6a65c
--- /dev/null
+++ b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/Migrations/20210812130334_Init.Designer.cs
@@ -0,0 +1,153 @@
+//
+using System;
+using CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Volo.Abp.EntityFrameworkCore;
+
+namespace CompanyName.ProjectName.DataDictionaryManagement.Migrations
+{
+ [DbContext(typeof(DataDictionaryManagementHttpApiHostMigrationsDbContext))]
+ [Migration("20210812130334_Init")]
+ partial class Init
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql)
+ .HasAnnotation("Relational:MaxIdentifierLength", 64)
+ .HasAnnotation("ProductVersion", "5.0.7");
+
+ modelBuilder.Entity("CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Aggregates.DataDictionary", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("char(36)");
+
+ b.Property("Code")
+ .IsRequired()
+ .HasMaxLength(64)
+ .HasColumnType("varchar(64) CHARACTER SET utf8mb4");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("varchar(40) CHARACTER SET utf8mb4")
+ .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) CHARACTER SET utf8mb4");
+
+ b.Property("DisplayText")
+ .IsRequired()
+ .HasMaxLength(64)
+ .HasColumnType("varchar(64) CHARACTER SET utf8mb4");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("longtext CHARACTER SET utf8mb4")
+ .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.HasKey("Id");
+
+ b.ToTable("DataDictionary");
+ });
+
+ modelBuilder.Entity("CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Aggregates.DataDictionaryDetail", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("char(36)");
+
+ b.Property("Code")
+ .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+ 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 CHARACTER SET utf8mb4");
+
+ b.Property("DisplayText")
+ .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+ 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("DataDictionaryDetail");
+ });
+
+ modelBuilder.Entity("CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Aggregates.DataDictionaryDetail", b =>
+ {
+ b.HasOne("CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Aggregates.DataDictionary", null)
+ .WithMany("Details")
+ .HasForeignKey("DataDictionaryId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Aggregates.DataDictionary", b =>
+ {
+ b.Navigation("Details");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/Migrations/20210812130334_Init.cs b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/Migrations/20210812130334_Init.cs
new file mode 100644
index 00000000..85df2276
--- /dev/null
+++ b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/Migrations/20210812130334_Init.cs
@@ -0,0 +1,75 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+namespace CompanyName.ProjectName.DataDictionaryManagement.Migrations
+{
+ public partial class Init : Migration
+ {
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.CreateTable(
+ name: "DataDictionary",
+ columns: table => new
+ {
+ Id = table.Column(type: "char(36)", nullable: false),
+ Code = table.Column(type: "varchar(64) CHARACTER SET utf8mb4", maxLength: 64, nullable: false),
+ DisplayText = table.Column(type: "varchar(64) CHARACTER SET utf8mb4", maxLength: 64, nullable: false),
+ Description = table.Column(type: "varchar(1024) CHARACTER SET utf8mb4", maxLength: 1024, nullable: false),
+ ExtraProperties = table.Column(type: "longtext CHARACTER SET utf8mb4", nullable: true),
+ ConcurrencyStamp = table.Column(type: "varchar(40) CHARACTER SET utf8mb4", maxLength: 40, nullable: true),
+ CreationTime = table.Column(type: "datetime(6)", nullable: false),
+ CreatorId = table.Column(type: "char(36)", nullable: true),
+ LastModificationTime = table.Column(type: "datetime(6)", nullable: true),
+ LastModifierId = table.Column(type: "char(36)", nullable: true),
+ IsDeleted = table.Column(type: "tinyint(1)", nullable: false, defaultValue: false),
+ DeleterId = table.Column(type: "char(36)", nullable: true),
+ DeletionTime = table.Column(type: "datetime(6)", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_DataDictionary", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "DataDictionaryDetail",
+ columns: table => new
+ {
+ Id = table.Column(type: "char(36)", nullable: false),
+ DataDictionaryId = table.Column(type: "char(36)", nullable: false),
+ Code = table.Column(type: "longtext CHARACTER SET utf8mb4", nullable: true),
+ Order = table.Column(type: "int", nullable: false),
+ DisplayText = table.Column(type: "longtext CHARACTER SET utf8mb4", nullable: true),
+ Description = table.Column(type: "longtext CHARACTER SET utf8mb4", nullable: true),
+ IsEnabled = table.Column(type: "tinyint(1)", nullable: false),
+ CreationTime = table.Column(type: "datetime(6)", nullable: false),
+ CreatorId = table.Column(type: "char(36)", nullable: true),
+ LastModificationTime = table.Column(type: "datetime(6)", nullable: true),
+ LastModifierId = table.Column(type: "char(36)", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_DataDictionaryDetail", x => x.Id);
+ table.ForeignKey(
+ name: "FK_DataDictionaryDetail_DataDictionary_DataDictionaryId",
+ column: x => x.DataDictionaryId,
+ principalTable: "DataDictionary",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "IX_DataDictionaryDetail_DataDictionaryId",
+ table: "DataDictionaryDetail",
+ column: "DataDictionaryId");
+ }
+
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "DataDictionaryDetail");
+
+ migrationBuilder.DropTable(
+ name: "DataDictionary");
+ }
+ }
+}
diff --git a/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/Migrations/20210812154152_AddTenantId.Designer.cs b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/Migrations/20210812154152_AddTenantId.Designer.cs
new file mode 100644
index 00000000..40c727dd
--- /dev/null
+++ b/aspnet-core/modules/DataDictionaryManagement/host/CompanyName.ProjectName.DataDictionaryManagement.HttpApi.Host/Migrations/20210812154152_AddTenantId.Designer.cs
@@ -0,0 +1,157 @@
+//
+using System;
+using CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Volo.Abp.EntityFrameworkCore;
+
+namespace CompanyName.ProjectName.DataDictionaryManagement.Migrations
+{
+ [DbContext(typeof(DataDictionaryManagementHttpApiHostMigrationsDbContext))]
+ [Migration("20210812154152_AddTenantId")]
+ partial class AddTenantId
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql)
+ .HasAnnotation("Relational:MaxIdentifierLength", 64)
+ .HasAnnotation("ProductVersion", "5.0.7");
+
+ modelBuilder.Entity("CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Aggregates.DataDictionary", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("char(36)");
+
+ b.Property("Code")
+ .IsRequired()
+ .HasMaxLength(64)
+ .HasColumnType("varchar(64) CHARACTER SET utf8mb4");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("varchar(40) CHARACTER SET utf8mb4")
+ .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) CHARACTER SET utf8mb4");
+
+ b.Property("DisplayText")
+ .IsRequired()
+ .HasMaxLength(64)
+ .HasColumnType("varchar(64) CHARACTER SET utf8mb4");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("longtext CHARACTER SET utf8mb4")
+ .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("DataDictionary");
+ });
+
+ modelBuilder.Entity("CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Aggregates.DataDictionaryDetail", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("char(36)");
+
+ b.Property("Code")
+ .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+ 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 CHARACTER SET utf8mb4");
+
+ b.Property