1798 changed files with 153630 additions and 76711 deletions
@ -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 |
|||
@ -0,0 +1,23 @@ |
|||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> |
|||
<s:Boolean x:Key="/Default/CodeEditing/Intellisense/CodeCompletion/IntelliSenseCompletingCharacters/CSharpCompletingCharacters/UpgradedFromVSSettings/@EntryValue">True</s:Boolean> |
|||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceDoWhileStatementBraces/@EntryIndexedValue">WARNING</s:String> |
|||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceFixedStatementBraces/@EntryIndexedValue">WARNING</s:String> |
|||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceForeachStatementBraces/@EntryIndexedValue">WARNING</s:String> |
|||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceForStatementBraces/@EntryIndexedValue">WARNING</s:String> |
|||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceIfStatementBraces/@EntryIndexedValue">WARNING</s:String> |
|||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceLockStatementBraces/@EntryIndexedValue">WARNING</s:String> |
|||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceUsingStatementBraces/@EntryIndexedValue">WARNING</s:String> |
|||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceWhileStatementBraces/@EntryIndexedValue">WARNING</s:String> |
|||
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/BRACES_FOR_FOR/@EntryValue">Required</s:String> |
|||
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/BRACES_FOR_FOREACH/@EntryValue">Required</s:String> |
|||
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/BRACES_FOR_IFELSE/@EntryValue">Required</s:String> |
|||
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/BRACES_FOR_WHILE/@EntryValue">Required</s:String> |
|||
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/BRACES_REDUNDANT/@EntryValue">False</s:Boolean> |
|||
<s:Boolean x:Key="/Default/CodeStyle/Generate/=Implementations/@KeyIndexDefined">True</s:Boolean> |
|||
<s:String x:Key="/Default/CodeStyle/Generate/=Implementations/Options/=Async/@EntryIndexedValue">False</s:String> |
|||
<s:String x:Key="/Default/CodeStyle/Generate/=Implementations/Options/=Mutable/@EntryIndexedValue">False</s:String> |
|||
<s:Boolean x:Key="/Default/CodeStyle/Generate/=Overrides/@KeyIndexDefined">True</s:Boolean> |
|||
<s:String x:Key="/Default/CodeStyle/Generate/=Overrides/Options/=Async/@EntryIndexedValue">False</s:String> |
|||
<s:String x:Key="/Default/CodeStyle/Generate/=Overrides/Options/=Mutable/@EntryIndexedValue">False</s:String> |
|||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SQL/@EntryIndexedValue">SQL</s:String> |
|||
</wpf:ResourceDictionary> |
|||
@ -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 |
|||
@ -0,0 +1,7 @@ |
|||
<Project> |
|||
|
|||
<PropertyGroup> |
|||
<AbpPackageVersion>4.3.3</AbpPackageVersion> |
|||
</PropertyGroup> |
|||
|
|||
</Project> |
|||
@ -0,0 +1,6 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<configuration> |
|||
<packageSources> |
|||
<add key="BlazoriseMyGet" value="https://www.myget.org/F/blazorise/api/v3/index.json" /> |
|||
</packageSources> |
|||
</configuration> |
|||
@ -0,0 +1,10 @@ |
|||
<Project> |
|||
<PropertyGroup> |
|||
<LangVersion>latest</LangVersion> |
|||
<Version>1.0.0</Version> |
|||
<NoWarn>$(NoWarn);CS1591;CS0436</NoWarn> |
|||
<AbpProjectType>app</AbpProjectType> |
|||
<GenerateDocumentationFile>true</GenerateDocumentationFile> |
|||
<AbpPackageVersion1>4.3.3</AbpPackageVersion1> |
|||
</PropertyGroup> |
|||
</Project> |
|||
@ -0,0 +1,19 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>netstandard2.0</TargetFramework> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Microsoft.Extensions.DependencyModel" Version="5.0.0" /> |
|||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> |
|||
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" /> |
|||
<PackageReference Include="Volo.Abp.Autofac" Version="$(AbpPackageVersion)" /> |
|||
<PackageReference Include="Volo.Abp.Json" Version="$(AbpPackageVersion)" /> |
|||
<PackageReference Include="Volo.Abp.Validation" Version="$(AbpPackageVersion)" /> |
|||
<PackageReference Include="Volo.Abp.Ddd.Domain" Version="$(AbpPackageVersion)" /> |
|||
<PackageReference Include="Volo.Abp.AutoMapper" Version="$(AbpPackageVersion)" /> |
|||
<PackageReference Include="Volo.Abp.ObjectMapping" Version="$(AbpPackageVersion)" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -0,0 +1,9 @@ |
|||
using System; |
|||
|
|||
namespace CompanyName.ProjectName.Publics.Dtos |
|||
{ |
|||
public class IdInput |
|||
{ |
|||
public Guid Id { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,64 @@ |
|||
using System.Collections.Generic; |
|||
using System.ComponentModel.DataAnnotations; |
|||
|
|||
namespace CompanyName.ProjectName.Extensions.Customs |
|||
{ |
|||
|
|||
|
|||
/// <summary>
|
|||
/// 分页查询时使用的Dto类型
|
|||
/// </summary>
|
|||
public class PagingBase : IValidatableObject |
|||
{ |
|||
public const int MaxPageSize = 100000; |
|||
|
|||
/// <summary>
|
|||
/// 当前页面.默认从1开始
|
|||
/// </summary>
|
|||
public int PageIndex { get; set; } = 1; |
|||
|
|||
/// <summary>
|
|||
/// 每页多少条.每页显示多少记录
|
|||
/// </summary>
|
|||
public int PageSize { get; set; } = 10; |
|||
|
|||
/// <summary>
|
|||
/// 跳过多少条
|
|||
/// </summary>
|
|||
public int SkipCount => (PageIndex - 1) * PageSize; |
|||
|
|||
public PagingBase() |
|||
{ |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 实例化 <see cref="BeeQueryPagingInput"/> 对象
|
|||
/// </summary>
|
|||
/// <param name="pageIndex">当前页面</param>
|
|||
/// <param name="pageSize">每页多少条</param>
|
|||
public PagingBase(int pageIndex = 1, int pageSize = 10) |
|||
{ |
|||
PageIndex = pageIndex; |
|||
PageSize = pageSize; |
|||
} |
|||
|
|||
public virtual IEnumerable<ValidationResult> Validate(ValidationContext validationContext) |
|||
{ |
|||
if (PageIndex < 1) |
|||
{ |
|||
yield return new ValidationResult( |
|||
"起始页必须大于等于1", |
|||
new[] { "PageIndex"} |
|||
); |
|||
} |
|||
|
|||
if (PageSize > MaxPageSize) |
|||
{ |
|||
yield return new ValidationResult( |
|||
$"每页最大记录数不能超过'{MaxPageSize}'", |
|||
new[] { "PageSize"} |
|||
); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,302 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Diagnostics; |
|||
using System.IO; |
|||
using System.Linq; |
|||
|
|||
namespace CompanyName.ProjectName.Extensions.Customs |
|||
{ |
|||
/// <summary>
|
|||
/// 参数合法性检查类
|
|||
/// </summary>
|
|||
[DebuggerStepThrough] |
|||
public static class Guard |
|||
{ |
|||
/// <summary>
|
|||
/// 检查参数不能为空引用,
|
|||
/// 否则抛出<see cref="BeeNullException"/>异常。
|
|||
/// </summary>
|
|||
/// <param name="value"></param>
|
|||
/// <param name="valueName">参数名称</param>
|
|||
/// <exception cref="BeeNullException"></exception>
|
|||
public static T NotNull<T>(T value, string valueName) |
|||
{ |
|||
if (null == value) |
|||
{ |
|||
throw new ArgumentNullException(valueName); |
|||
} |
|||
|
|||
return value; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 检查字符串不能为空引用或空字符串,
|
|||
/// 否则抛出<see cref="BeeNullOrEmptyException"/>异常
|
|||
/// 或<see cref="BeeLengthGreaterException"/>异常
|
|||
/// 或<see cref="BeeLengthLessException"/>异常。
|
|||
/// </summary>
|
|||
/// <param name="value"></param>
|
|||
/// <param name="valueName">参数名称。</param>
|
|||
/// <param name="maxLength">字符串允许的最大长度。</param>
|
|||
/// <param name="minLength">字符串允许的最小长度。0表示不限制最小长度</param>
|
|||
/// <exception cref="BeeNullOrEmptyException"></exception>
|
|||
/// <exception cref="BeeLengthGreaterException"></exception>
|
|||
/// <exception cref="BeeLengthLessException"></exception>
|
|||
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; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 检查字符串不能为空引用或全部为空白,
|
|||
/// 否则抛出<see cref="BeeNullOrWhiteSpaceException"/>异常
|
|||
/// 或<see cref="BeeLengthGreaterException"/>异常
|
|||
/// 或<see cref="BeeLengthLessException"/>异常。
|
|||
/// </summary>
|
|||
/// <param name="value">需检查的字符串</param>
|
|||
/// <param name="valueName">参数名称。</param>
|
|||
/// <param name="maxLength">字符串允许的最大长度。</param>
|
|||
/// <param name="minLength">字符串允许的最小长度。0表示不限制最小长度</param>
|
|||
/// <exception cref="BeeNullOrWhiteSpaceException"></exception>
|
|||
/// <exception cref="BeeLengthGreaterException"></exception>
|
|||
/// <exception cref="BeeLengthLessException"></exception>
|
|||
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; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 检查字符串长度是否超过最大长度,或低于最小长度,
|
|||
/// 否则抛出<see cref="BeeLengthGreaterException"/>异常
|
|||
/// 或<see cref="BeeLengthLessException"/>异常。
|
|||
/// </summary>
|
|||
/// <param name="value">需检查的字符串。</param>
|
|||
/// <param name="valueName">参数名称。</param>
|
|||
/// <param name="maxLength">字符串允许的最大长度。</param>
|
|||
/// <param name="minLength">字符串要求的最小长度。0表示不限制最小长度</param>
|
|||
/// <exception cref="BeeLengthGreaterException"></exception>
|
|||
/// <exception cref="BeeLengthLessException"></exception>
|
|||
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; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 检查Guid值不能为Guid.Empty,否则抛出<see cref="BeeEmptyGuidException"/>异常。
|
|||
/// </summary>
|
|||
/// <param name="value"></param>
|
|||
/// <param name="valueName">参数名称。</param>
|
|||
/// <exception cref="BeeEmptyGuidException"></exception>
|
|||
public static Guid NotEmpty( |
|||
Guid value, |
|||
string valueName) |
|||
{ |
|||
if (value == Guid.Empty) |
|||
{ |
|||
throw new ArgumentNullException(valueName); |
|||
} |
|||
|
|||
return value; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 检查集合不能为空引用或空集合,
|
|||
/// 否则抛出<see cref="BeeCollectionNullOrEmptyException"/>异常。
|
|||
/// </summary>
|
|||
/// <typeparam name="T">集合项的类型。</typeparam>
|
|||
/// <param name="list"></param>
|
|||
/// <param name="valueName">参数名称。</param>
|
|||
/// <exception cref="BeeCollectionNullOrEmptyException"></exception>
|
|||
public static void NotNullOrEmpty<T>( |
|||
IReadOnlyList<T> list, |
|||
string valueName) |
|||
{ |
|||
if (null == list || !list.Any()) |
|||
{ |
|||
throw new ArgumentNullException(valueName); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 检查参数必须小于[或可等于,参数<paramref name="canEqual"/>]指定值,
|
|||
/// 否则抛出<see cref="BeeOutOfRangeException"/>异常。
|
|||
/// </summary>
|
|||
/// <typeparam name="T">参数类型。</typeparam>
|
|||
/// <param name="value"></param>
|
|||
/// <param name="valueName">参数名称。</param>
|
|||
/// <param name="target">要比较的值。</param>
|
|||
/// <param name="canEqual">是否可等于。</param>
|
|||
/// <exception cref="BeeOutOfRangeException"></exception>
|
|||
public static void LessThan<T>( |
|||
T value, |
|||
string valueName, |
|||
T target, |
|||
bool canEqual = false) |
|||
where T : IComparable<T> |
|||
{ |
|||
var flag = canEqual ? value.CompareTo(target) <= 0 : value.CompareTo(target) < 0; |
|||
if (!flag) |
|||
{ |
|||
throw new ArgumentOutOfRangeException(valueName); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 检查参数必须大于[或可等于,参数<paramref name="canEqual"/>]指定值,
|
|||
/// 否则抛出<see cref="BeeOutOfRangeException"/>异常。
|
|||
/// </summary>
|
|||
/// <typeparam name="T">参数类型。</typeparam>
|
|||
/// <param name="value">需检查的参数。</param>
|
|||
/// <param name="valueName">参数名称。</param>
|
|||
/// <param name="target">要比较的值。</param>
|
|||
/// <param name="canEqual">是否可等于。</param>
|
|||
/// <exception cref="BeeOutOfRangeException"></exception>
|
|||
public static void GreaterThan<T>( |
|||
T value, |
|||
string valueName, |
|||
T target, |
|||
bool canEqual = false) |
|||
where T : IComparable<T> |
|||
{ |
|||
var flag = canEqual ? value.CompareTo(target) >= 0 : value.CompareTo(target) > 0; |
|||
if (!flag) |
|||
{ |
|||
throw new ArgumentOutOfRangeException(valueName); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 检查参数必须在指定范围之间,否则抛出<see cref="BeeOutOfRangeException"/>异常。
|
|||
/// </summary>
|
|||
/// <typeparam name="T">参数类型。</typeparam>
|
|||
/// <param name="value">需检查的参数。</param>
|
|||
/// <param name="valueName">参数名称。</param>
|
|||
/// <param name="start">比较范围的起始值。</param>
|
|||
/// <param name="end">比较范围的结束值。</param>
|
|||
/// <param name="startEqual">是否可等于起始值</param>
|
|||
/// <param name="endEqual">是否可等于结束值</param>
|
|||
/// <exception cref="BeeOutOfRangeException">不在指定范围内时</exception>
|
|||
public static void Between<T>( |
|||
T value, |
|||
string valueName, |
|||
T start, |
|||
T end, |
|||
bool startEqual = false, |
|||
bool endEqual = false) |
|||
where T : IComparable<T> |
|||
{ |
|||
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); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 检查指定路径的文件夹必须存在,
|
|||
/// 否则抛出<see cref="BeeDirectoryNotFoundException"/>异常
|
|||
/// 或 <see cref="BeeNullException"/>异常。
|
|||
/// </summary>
|
|||
/// <param name="directory">需检查的路径。</param>
|
|||
/// <param name="parameterName">参数名称。</param>
|
|||
/// <exception cref="BeeNullException">当文件夹路径为null或空时</exception>
|
|||
/// <exception cref="BeeDirectoryNotFoundException">当文件夹路径不存在时</exception>
|
|||
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; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 检查指定路径的文件必须存在,否则抛出<see cref="FileNotFoundException"/>异常。
|
|||
/// </summary>
|
|||
/// <param name="filename"></param>
|
|||
/// <param name="valueName">参数名称。</param>
|
|||
/// <exception cref="BeeNullOrWhiteSpaceException">当文件路径为null或空时</exception>
|
|||
/// <exception cref="BeeFileNotFoundException">当文件路径不存在时</exception>
|
|||
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; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,27 @@ |
|||
namespace System |
|||
{ |
|||
/// <summary>
|
|||
/// 布尔值<see cref="Boolean"/>类型的扩展辅助操作类
|
|||
/// </summary>
|
|||
public static class BooleanExtensions |
|||
{ |
|||
/// <summary>
|
|||
/// 把布尔值转换为小写字符串
|
|||
/// </summary>
|
|||
public static string ToLower(this bool value) |
|||
{ |
|||
return value.ToString().ToLower(); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 如果条件成立,则抛出异常
|
|||
/// </summary>
|
|||
public static void TrueThrow(this bool flag, Exception exception) |
|||
{ |
|||
if (flag) |
|||
{ |
|||
throw exception; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,77 @@ |
|||
using System.Linq; |
|||
using CompanyName.ProjectName.Extensions.Customs; |
|||
|
|||
namespace System.Collections.Generic |
|||
{ |
|||
/// <summary>
|
|||
/// 集合扩展方法
|
|||
/// </summary>
|
|||
public static class CollectionExtensions |
|||
{ |
|||
/// <summary>
|
|||
/// 如果条件成立,添加项
|
|||
/// </summary>
|
|||
public static void AddIf<T>(this ICollection<T> collection, T value, bool flag) |
|||
{ |
|||
Guard.NotNull(collection, nameof(collection)); |
|||
if (flag) |
|||
{ |
|||
collection.Add(value); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 如果条件成立,添加项
|
|||
/// </summary>
|
|||
public static void AddIf<T>(this ICollection<T> collection, T value, Func<bool> func) |
|||
{ |
|||
Guard.NotNull(collection, nameof(collection)); |
|||
if (func()) |
|||
{ |
|||
collection.Add(value); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 获取对象,不存在对使用委托添加对象
|
|||
/// </summary>
|
|||
public static T GetOrAdd<T>(this ICollection<T> collection, Func<T, bool> selector, Func<T> factory) |
|||
{ |
|||
Guard.NotNull(collection, nameof(collection)); |
|||
T item = collection.FirstOrDefault(selector); |
|||
if (item == null) |
|||
{ |
|||
item = factory(); |
|||
collection.Add(item); |
|||
} |
|||
|
|||
return item; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 判断集合是否为null或空集合
|
|||
/// </summary>
|
|||
public static bool IsNullOrEmpty<T>(this ICollection<T> collection) |
|||
{ |
|||
return collection == null || collection.Count == 0; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 交换两项的位置
|
|||
/// </summary>
|
|||
public static void Swap<T>(this List<T> 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; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,201 @@ |
|||
using CompanyName.ProjectName.Extensions.Customs; |
|||
using System.ComponentModel; |
|||
using System.Linq; |
|||
using System.Text; |
|||
|
|||
namespace System.Collections.Generic |
|||
{ |
|||
/// <summary>
|
|||
/// Enumerable集合扩展方法
|
|||
/// </summary>
|
|||
public static class EnumerableExtensions |
|||
{ |
|||
/// <summary>断言集合中的元素符合指定表达式,否则抛出异常。</summary>
|
|||
/// <typeparam name="T">集合项类型</typeparam>
|
|||
/// <param name="source">源集合</param>
|
|||
/// <param name="predicate">元素判断表达式</param>
|
|||
/// <param name="errorSelector">异常选择器</param>
|
|||
/// <returns>筛选过的集合</returns>
|
|||
public static IEnumerable<T> Assert<T>(this IEnumerable<T> source, Func<T, bool> predicate, |
|||
Func<T, Exception> errorSelector = null) |
|||
{ |
|||
foreach (var item in source) |
|||
{ |
|||
var success = predicate(item); |
|||
if (!success) |
|||
{ |
|||
throw errorSelector?.Invoke(item) ?? |
|||
new InvalidOperationException("集合中包含无效的元素。"); |
|||
} |
|||
|
|||
yield return item; |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 打乱一个集合的项顺序,将一个集合洗牌
|
|||
/// </summary>
|
|||
public static IEnumerable<TSource> Shuffle<TSource>(this IEnumerable<TSource> source) |
|||
{ |
|||
// ReSharper disable PossibleMultipleEnumeration
|
|||
|
|||
Guard.NotNull(source, nameof(source)); |
|||
return source.OrderBy(m => Guid.NewGuid()); |
|||
|
|||
// ReSharper restore PossibleMultipleEnumeration
|
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将集合展开并分别转换成字符串,再以指定的分隔符衔接,拼成一个字符串返回。默认分隔符为逗号。
|
|||
/// </summary>
|
|||
/// <param name="collection">要处理的集合</param>
|
|||
/// <param name="separator">分隔符,默认为逗号</param>
|
|||
/// <returns>拼接后的字符串</returns>
|
|||
public static string ExpandAndToString<T>(this IEnumerable<T> collection, string separator = ",") |
|||
{ |
|||
return collection.ExpandAndToString(item => item?.ToString() ?? string.Empty, separator); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 循环集合的每一项,调用委托生成字符串,返回合并后的字符串。默认分隔符为逗号
|
|||
/// </summary>
|
|||
/// <param name="collection">待处理的集合</param>
|
|||
/// <param name="itemFormatFunc">单个集合项的转换委托</param>
|
|||
/// <param name="separator">分隔符,默认为逗号</param>
|
|||
/// <typeparam name="T">泛型类型</typeparam>
|
|||
/// <returns></returns>
|
|||
public static string ExpandAndToString<T>( |
|||
this IEnumerable<T> collection, |
|||
Func<T, string> itemFormatFunc, |
|||
string separator = ",") |
|||
{ |
|||
collection = collection as IList<T> ?? 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(); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 集合是否为空
|
|||
/// </summary>
|
|||
/// <param name="collection"> 要处理的集合 </param>
|
|||
/// <typeparam name="T"> 动态类型 </typeparam>
|
|||
/// <returns> 为空返回True,不为空返回False </returns>
|
|||
public static bool IsEmpty<T>(this IEnumerable<T> collection) |
|||
{ |
|||
collection = collection as IList<T> ?? collection.ToList(); |
|||
return !collection.Any(); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 根据第三方条件是否为真来决定是否执行指定条件的查询
|
|||
/// </summary>
|
|||
/// <param name="source"> 要查询的源 </param>
|
|||
/// <param name="predicate"> 查询条件 </param>
|
|||
/// <param name="condition"> 第三方条件 </param>
|
|||
/// <typeparam name="T"> 动态类型 </typeparam>
|
|||
/// <returns> 查询的结果 </returns>
|
|||
public static IEnumerable<T> WhereIf<T>(this IEnumerable<T> source, Func<T, bool> predicate, bool condition) |
|||
{ |
|||
Guard.NotNull(predicate, nameof(predicate)); |
|||
source = source as IList<T> ?? source.ToList(); |
|||
|
|||
return condition ? source.Where(predicate) : source; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将字符串集合按指定前缀排序
|
|||
/// </summary>
|
|||
public static IEnumerable<T> OrderByPrefixes<T>(this IEnumerable<T> source, Func<T, string> keySelector, |
|||
params string[] prefixes) |
|||
{ |
|||
var all = source.OrderBy(keySelector).ToList(); |
|||
var result = new List<T>(); |
|||
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; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 根据指定条件返回集合中不重复的元素
|
|||
/// </summary>
|
|||
/// <typeparam name="T">动态类型</typeparam>
|
|||
/// <typeparam name="TKey">动态筛选条件类型</typeparam>
|
|||
/// <param name="source">要操作的源</param>
|
|||
/// <param name="keySelector">重复数据筛选条件</param>
|
|||
/// <returns>不重复元素的集合</returns>
|
|||
public static IEnumerable<T> DistinctBy<T, TKey>(this IEnumerable<T> source, Func<T, TKey> keySelector) |
|||
{ |
|||
Guard.NotNull(keySelector, nameof(keySelector)); |
|||
source = source as IList<T> ?? source.ToList(); |
|||
|
|||
return source.GroupBy(keySelector).Select(group => group.First()); |
|||
} |
|||
|
|||
#region Internal
|
|||
|
|||
internal static int? TryGetCollectionCount<T>(this IEnumerable<T> source) |
|||
{ |
|||
switch (source) |
|||
{ |
|||
case null: |
|||
throw new ArgumentNullException(nameof(source)); |
|||
case ICollection<T> collection: |
|||
return collection.Count; |
|||
case IReadOnlyCollection<T> collection: |
|||
return collection.Count; |
|||
default: |
|||
return null; |
|||
} |
|||
} |
|||
|
|||
static int CountUpTo<T>(this IEnumerable<T> 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
|
|||
} |
|||
} |
|||
@ -0,0 +1,78 @@ |
|||
using System.Globalization; |
|||
using System.Linq; |
|||
|
|||
namespace System |
|||
{ |
|||
/// <summary>
|
|||
/// 时间扩展操作类
|
|||
/// </summary>
|
|||
public static class DateTimeExtensions |
|||
{ |
|||
/// <summary>
|
|||
/// 当前时间是否周末
|
|||
/// </summary>
|
|||
/// <param name="dateTime">时间点</param>
|
|||
/// <returns></returns>
|
|||
public static bool IsWeekend(this DateTime dateTime) |
|||
{ |
|||
DayOfWeek[] weeks = { DayOfWeek.Saturday, DayOfWeek.Sunday }; |
|||
return weeks.Contains(dateTime.DayOfWeek); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 当前时间是否工作日
|
|||
/// </summary>
|
|||
/// <param name="dateTime">时间点</param>
|
|||
/// <returns></returns>
|
|||
public static bool IsWeekday(this DateTime dateTime) |
|||
{ |
|||
DayOfWeek[] weeks = { DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Thursday, DayOfWeek.Friday }; |
|||
return weeks.Contains(dateTime.DayOfWeek); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 获取时间相对唯一字符串
|
|||
/// </summary>
|
|||
/// <param name="dateTime"></param>
|
|||
/// <param name="millisecond">是否使用毫秒</param>
|
|||
/// <returns></returns>
|
|||
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; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将时间转换为JS时间格式(Date.getTime())
|
|||
/// </summary>
|
|||
/// <param name="dateTime"></param>
|
|||
/// <param name="millisecond">是否使用毫秒</param>
|
|||
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); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将JS时间格式的数值转换为时间
|
|||
/// </summary>
|
|||
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(); |
|||
} |
|||
} |
|||
} |
|||
@ -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 |
|||
{ |
|||
/// <summary>
|
|||
/// 枚举<see cref="Enum"/>的扩展辅助操作方法
|
|||
/// </summary>
|
|||
public static class EnumExtensions |
|||
{ |
|||
/// <summary>
|
|||
/// 获取枚举项上的<see cref="DescriptionAttribute"/>特性的文字描述
|
|||
/// </summary>
|
|||
/// <param name="value"></param>
|
|||
/// <returns></returns>
|
|||
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(); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 枚举遍历,返回枚举的名称、值、特性
|
|||
/// </summary>
|
|||
/// <param name="enumType">枚举类型</param>
|
|||
/// <param name="action">回调函数</param>
|
|||
private static void Each(this Type enumType, Action<string, string, string, object> 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); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 根据枚举类型值返回枚举定义Description属性
|
|||
/// </summary>
|
|||
/// <param name="value"></param>
|
|||
/// <param name="enumType"></param>
|
|||
/// <returns></returns>
|
|||
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()]; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将指定枚举转换为字典.
|
|||
/// 枚举的Description为字典的Key,枚举的Value为字典的Value
|
|||
/// </summary>
|
|||
/// <typeparam name="T">指定枚举</typeparam>
|
|||
private static List<KeyValuePair<string, string>> GetEnumTypeValueList<T>() |
|||
{ |
|||
var items = new List<KeyValuePair<string, string>>(); |
|||
typeof(T).Each((name, value, description, enumObj) => |
|||
items.Add(new KeyValuePair<string, string>(description, value))); |
|||
return items; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将指定枚举转换为字典.
|
|||
/// 枚举的Description为字典的Key,枚举为字典的Value
|
|||
/// </summary>
|
|||
/// <typeparam name="T">指定枚举</typeparam>
|
|||
private static List<KeyValuePair<string, T>> GetEnumTypeList<T>() |
|||
{ |
|||
var items = new List<KeyValuePair<string, T>>(); |
|||
typeof(T).Each((name, value, description, enumObj) => |
|||
items.Add(new KeyValuePair<string, T>(description, (T)enumObj))); |
|||
return items; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将指定枚举转换为字典.
|
|||
/// 枚举的Description为字典的Key,枚举的Name为字典的Value
|
|||
/// </summary>
|
|||
/// <typeparam name="T">指定枚举</typeparam>
|
|||
public static List<KeyValuePair<string, string>> GetEnumTypeDescriptionNameList<T>() |
|||
{ |
|||
var items = new List<KeyValuePair<string, string>>(); |
|||
typeof(T).Each((name, value, description, enumObj) => items.Add(new KeyValuePair<string, string>(description, name))); |
|||
return items; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将指定枚举转换为字典.
|
|||
/// 枚举的Name为字典的Key,枚举的Description为字典的Value
|
|||
/// </summary>
|
|||
/// <typeparam name="T">指定枚举</typeparam>
|
|||
public static List<KeyValuePair<string, string>> GetEnumTypeValueNameList<T>() |
|||
{ |
|||
var items = new List<KeyValuePair<string, string>>(); |
|||
typeof(T).Each((name, value, description, enumObj) => items.Add(new KeyValuePair<string, string>(name, description))); |
|||
return items; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将指定枚举转换为字典.
|
|||
/// 枚举的Name为字典的Key,枚举的Description为字典的Value
|
|||
/// </summary>
|
|||
/// <typeparam name="TModel">指定枚举</typeparam>
|
|||
public static List<KeyValuePair<string, string>> GetStringKeyValueList<TModel>() where TModel : Enum |
|||
{ |
|||
var keyValuePairList = new List<KeyValuePair<string, string>>(); |
|||
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<string, string>(model.ToString(), model.ToString())); |
|||
return keyValuePairList; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将指定枚举转换为字典.
|
|||
/// 枚举的Description为字典的Key,枚举为字典的Value
|
|||
/// </summary>
|
|||
/// <typeparam name="TModel">指定枚举</typeparam>
|
|||
public static List<KeyValuePair<string, TModel>> GetEnumKeyValueList<TModel>() where TModel : Enum |
|||
{ |
|||
var enumTypeList = GetEnumTypeList<TModel>(); |
|||
var keyValuePairList = new List<KeyValuePair<string, TModel>>(); |
|||
foreach (KeyValuePair<string, TModel> keyValuePair in enumTypeList) |
|||
keyValuePairList.Add(new KeyValuePair<string, TModel>(keyValuePair.Key, keyValuePair.Value)); |
|||
return keyValuePairList; |
|||
} |
|||
|
|||
public static List<KeyValuePair<string, string>> GetEntityDoubleStringKeyValueList<TModel>() |
|||
{ |
|||
var enumTypeList = GetEnumTypeValueList<TModel>(); |
|||
var keyValuePairList = new List<KeyValuePair<string, string>>(); |
|||
foreach (KeyValuePair<string, string> keyValuePair in enumTypeList) |
|||
keyValuePairList.Add(new KeyValuePair<string, string>(keyValuePair.Key, keyValuePair.Value)); |
|||
return keyValuePairList; |
|||
} |
|||
|
|||
public static List<KeyValuePair<string, int>> GetEntityStringIntKeyValueList<TModel>() |
|||
{ |
|||
List<KeyValuePair<string, string>> enumTypeList = GetEnumTypeValueList<TModel>(); |
|||
List<KeyValuePair<string, int>> keyValuePairList = new List<KeyValuePair<string, int>>(); |
|||
foreach (KeyValuePair<string, string> keyValuePair in enumTypeList) |
|||
keyValuePairList.Add(new KeyValuePair<string, int>(keyValuePair.Key, Convert.ToInt32(keyValuePair.Value))); |
|||
return keyValuePairList; |
|||
} |
|||
|
|||
public static List<KeyValuePair<int, int>> GetEntityDoubleIntKeyValueList<TModel>() |
|||
{ |
|||
List<KeyValuePair<string, string>> enumTypeList = GetEnumTypeValueList<TModel>(); |
|||
List<KeyValuePair<int, int>> keyValuePairList = new List<KeyValuePair<int, int>>(); |
|||
foreach (KeyValuePair<string, string> keyValuePair in enumTypeList) |
|||
keyValuePairList.Add(new KeyValuePair<int, int>(Convert.ToInt32(keyValuePair.Key), Convert.ToInt32(keyValuePair.Value))); |
|||
return keyValuePairList; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,76 @@ |
|||
using System.Runtime.ExceptionServices; |
|||
using System.Text; |
|||
|
|||
namespace System |
|||
{ |
|||
/// <summary>
|
|||
/// 异常操作扩展
|
|||
/// </summary>
|
|||
public static class ExceptionExtensions |
|||
{ |
|||
/// <summary>
|
|||
/// 格式化异常消息
|
|||
/// </summary>
|
|||
/// <param name="e">异常对象</param>
|
|||
/// <param name="isHideStackTrace">是否隐藏异常规模信息</param>
|
|||
/// <returns>格式化后的异常信息字符串</returns>
|
|||
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(); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将异常重新抛出
|
|||
/// </summary>
|
|||
public static void ReThrow(this Exception exception) |
|||
{ |
|||
ExceptionDispatchInfo.Capture(exception).Throw(); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 如果条件成立,则抛出异常
|
|||
/// </summary>
|
|||
public static void ThrowIf(this Exception exception, bool isThrow) |
|||
{ |
|||
if (isThrow) |
|||
{ |
|||
throw exception; |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 如果条件成立,则抛出异常
|
|||
/// </summary>
|
|||
public static void ThrowIf(this Exception exception, Func<bool> isThrowFunc) |
|||
{ |
|||
if (isThrowFunc()) |
|||
{ |
|||
throw exception; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,28 @@ |
|||
using System.Linq.Expressions; |
|||
using CompanyName.ProjectName.Extensions.Customs; |
|||
|
|||
namespace System.Linq |
|||
{ |
|||
/// <summary>
|
|||
/// IQueryable集合扩展方法
|
|||
/// </summary>
|
|||
public static class QueryableExtensions |
|||
{ |
|||
/// <summary>
|
|||
/// 根据第三方条件是否为真来决定是否执行指定条件的查询
|
|||
/// </summary>
|
|||
/// <param name="source"> 要查询的源 </param>
|
|||
/// <param name="predicate"> 查询条件 </param>
|
|||
/// <param name="condition"> 第三方条件 </param>
|
|||
/// <typeparam name="T"> 动态类型 </typeparam>
|
|||
/// <returns> 查询的结果 </returns>
|
|||
public static IQueryable<T> WhereIf<T>(this IQueryable<T> source, Expression<Func<T, bool>> predicate, |
|||
bool condition) |
|||
{ |
|||
Guard.NotNull(source, nameof(source)); |
|||
Guard.NotNull(predicate, nameof(predicate)); |
|||
|
|||
return condition ? source.Where(predicate) : source; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,26 @@ |
|||
using System.Diagnostics; |
|||
using CompanyName.ProjectName.Extensions.Customs; |
|||
|
|||
namespace System.Reflection |
|||
{ |
|||
/// <summary>
|
|||
/// 程序集扩展操作类
|
|||
/// </summary>
|
|||
public static class AssemblyExtensions |
|||
{ |
|||
/// <summary>
|
|||
/// 获取程序集的产品版本
|
|||
/// </summary>
|
|||
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; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,73 @@ |
|||
using System.ComponentModel; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using System.Linq; |
|||
|
|||
namespace System.Reflection |
|||
{ |
|||
/// <summary>
|
|||
/// 成员<see cref="MemberInfo"/>的扩展辅助操作方法
|
|||
/// </summary>
|
|||
public static class MemberInfoExtensions |
|||
{ |
|||
/// <summary>
|
|||
/// 获取成员元数据的Description特性描述信息。
|
|||
/// </summary>
|
|||
/// <param name="member">成员元数据对象。</param>
|
|||
/// <param name="inherit">是否搜索成员的继承链以查找描述特性。</param>
|
|||
/// <returns>返回Description特性描述信息,如不存在则返回成员的名称。</returns>
|
|||
public static string GetDescription(this MemberInfo member, bool inherit = true) |
|||
{ |
|||
var desc = member.GetAttribute<DescriptionAttribute>(inherit); |
|||
if (desc != null) |
|||
{ |
|||
return desc.Description; |
|||
} |
|||
|
|||
var displayName = member.GetAttribute<DisplayNameAttribute>(inherit); |
|||
if (displayName != null) |
|||
{ |
|||
return displayName.DisplayName; |
|||
} |
|||
|
|||
var display = member.GetAttribute<DisplayAttribute>(inherit); |
|||
return display != null ? display.Name : member.Name; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 检查指定指定类型成员中是否存在指定的Attribute特性。
|
|||
/// </summary>
|
|||
/// <typeparam name="T">要检查的Attribute特性类型。</typeparam>
|
|||
/// <param name="memberInfo">要检查的类型成员</param>
|
|||
/// <param name="inherit">是否从继承中查找</param>
|
|||
/// <returns>是否存在</returns>
|
|||
public static bool HasAttribute<T>(this MemberInfo memberInfo, bool inherit = true) where T : Attribute |
|||
{ |
|||
return memberInfo.IsDefined(typeof(T), inherit); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 从类型成员获取指定Attribute特性
|
|||
/// </summary>
|
|||
/// <typeparam name="T">Attribute特性类型</typeparam>
|
|||
/// <param name="memberInfo">类型类型成员</param>
|
|||
/// <param name="inherit">是否从继承中查找</param>
|
|||
/// <returns>存在返回第一个,不存在返回null</returns>
|
|||
public static T GetAttribute<T>(this MemberInfo memberInfo, bool inherit = true) where T : Attribute |
|||
{ |
|||
var attributes = memberInfo.GetCustomAttributes(typeof(T), inherit); |
|||
return attributes.FirstOrDefault() as T; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 从类型成员获取指定Attribute特性。
|
|||
/// </summary>
|
|||
/// <typeparam name="T">Attribute特性类型。</typeparam>
|
|||
/// <param name="memberInfo">类型类型成员。</param>
|
|||
/// <param name="inherit">是否从继承中查找。</param>
|
|||
/// <returns>返回所有指定Attribute特性的数组。</returns>
|
|||
public static T[] GetAttributes<T>(this MemberInfo memberInfo, bool inherit = true) where T : Attribute |
|||
{ |
|||
return memberInfo.GetCustomAttributes(typeof(T), inherit).Cast<T>().ToArray(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,31 @@ |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace System.Reflection |
|||
{ |
|||
/// <summary>
|
|||
/// 方法<see cref="MethodInfo"/>的扩展辅助操作方法
|
|||
/// </summary>
|
|||
public static class MethodInfoExtensions |
|||
{ |
|||
/// <summary>
|
|||
/// 方法是否是异步
|
|||
/// </summary>
|
|||
public static bool IsAsync(this MethodInfo method) |
|||
{ |
|||
return (method.ReturnType == typeof(Task<>) |
|||
|| method.ReturnType.IsGenericType |
|||
&& method.ReturnType.GetGenericTypeDefinition() == typeof(Task<>)) |
|||
|| method.ReturnType == typeof(Task); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 返回当前方法信息是否是重写方法
|
|||
/// </summary>
|
|||
/// <param name="method">要判断的方法信息</param>
|
|||
/// <returns>是否是重写方法</returns>
|
|||
public static bool IsOverridden(this MethodInfo method) |
|||
{ |
|||
return method.GetBaseDefinition().DeclaringType != method.DeclaringType; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,24 @@ |
|||
using System.Linq; |
|||
|
|||
namespace System.Reflection |
|||
{ |
|||
/// <summary>
|
|||
/// 属性<see cref="MethodInfo"/>的扩展辅助操作方法
|
|||
/// </summary>
|
|||
public static class PropertyInfoExtensions |
|||
{ |
|||
/// <summary>
|
|||
/// 返回当前属性信息是否为virtual
|
|||
/// </summary>
|
|||
public static bool IsVirtual(this PropertyInfo property) |
|||
{ |
|||
var accessor = property.GetAccessors().FirstOrDefault(); |
|||
if (accessor == null) |
|||
{ |
|||
return false; |
|||
} |
|||
|
|||
return accessor.IsVirtual && !accessor.IsFinal; |
|||
} |
|||
} |
|||
} |
|||
@ -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 |
|||
{ |
|||
/// <summary>
|
|||
/// 字符串<see cref="string"/>类型的扩展辅助操作类
|
|||
/// </summary>
|
|||
[DebuggerStepThrough] |
|||
public static class StringExtensions |
|||
{ |
|||
#region 正则表达式
|
|||
|
|||
/// <summary>
|
|||
/// 指示所指定的正则表达式在指定的输入字符串中是否找到了匹配项
|
|||
/// </summary>
|
|||
/// <param name="value">要搜索匹配项的字符串</param>
|
|||
/// <param name="pattern">要匹配的正则表达式模式</param>
|
|||
/// <param name="isContains">是否包含,否则全匹配</param>
|
|||
/// <returns>如果正则表达式找到匹配项,则为 true;否则,为 false</returns>
|
|||
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; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 在指定的输入字符串中搜索指定的正则表达式的第一个匹配项
|
|||
/// </summary>
|
|||
/// <param name="value">要搜索匹配项的字符串</param>
|
|||
/// <param name="pattern">要匹配的正则表达式模式</param>
|
|||
/// <returns>一个对象,包含有关匹配项的信息</returns>
|
|||
public static string Match(this string value, string pattern) |
|||
{ |
|||
if (value == null) |
|||
{ |
|||
return null; |
|||
} |
|||
|
|||
return Regex.Match(value, pattern).Value; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 在指定的输入字符串中匹配并替换符合指定正则表达式的子串
|
|||
/// </summary>
|
|||
public static string ReplaceRegex(this string value, string pattern, string replacement) |
|||
{ |
|||
if (value == null) |
|||
{ |
|||
return null; |
|||
} |
|||
|
|||
return Regex.Replace(value, pattern, replacement); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 在指定的输入字符串中搜索指定的正则表达式的所有匹配项的字符串集合
|
|||
/// </summary>
|
|||
/// <param name="value"> 要搜索匹配项的字符串 </param>
|
|||
/// <param name="pattern"> 要匹配的正则表达式模式 </param>
|
|||
/// <returns> 一个集合,包含有关匹配项的字符串值 </returns>
|
|||
public static IEnumerable<string> 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; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 在指定的输入字符串中匹配第一个数字字符串
|
|||
/// </summary>
|
|||
public static string MatchFirstNumber(this string value) |
|||
{ |
|||
var matches = Regex.Matches(value, @"\d+"); |
|||
if (matches.Count == 0) |
|||
{ |
|||
return string.Empty; |
|||
} |
|||
|
|||
return matches[0].Value; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 在指定字符串中匹配最后一个数字字符串
|
|||
/// </summary>
|
|||
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; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 在指定字符串中匹配所有数字字符串
|
|||
/// </summary>
|
|||
public static IEnumerable<string> MatchNumbers(this string value) |
|||
{ |
|||
return Matches(value, @"\d+"); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 检测指定字符串中是否包含数字
|
|||
/// </summary>
|
|||
public static bool IsMatchNumber(this string value) |
|||
{ |
|||
return IsMatch(value, @"\d"); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 检测指定字符串是否全部为数字并且长度等于指定长度
|
|||
/// </summary>
|
|||
public static bool IsMatchNumber(this string value, int length) |
|||
{ |
|||
var regex = new Regex(@"^\d{" + length + "}$"); |
|||
return regex.IsMatch(value); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 截取指定字符串之间的字符串
|
|||
/// </summary>
|
|||
/// <param name="source"></param>
|
|||
/// <param name="startString">起始字符串</param>
|
|||
/// <param name="endStrings">结束字符串,可多个</param>
|
|||
/// <returns>返回的中间字符串</returns>
|
|||
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); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 用正则表达式截取字符串
|
|||
/// </summary>
|
|||
public static string Substring2(this string source, string startString, string endString) |
|||
{ |
|||
return source.Substring2(startString, endString, false); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 用正则表达式截取字符串
|
|||
/// </summary>
|
|||
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; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 是否电子邮件
|
|||
/// </summary>
|
|||
public static bool IsEmail(this string value) |
|||
{ |
|||
const string pattern = @"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"; |
|||
return value.IsMatch(pattern); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 是否是IP地址
|
|||
/// </summary>
|
|||
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); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 是否是整数
|
|||
/// </summary>
|
|||
public static bool IsNumeric(this string value) |
|||
{ |
|||
const string pattern = @"^\-?[0-9]+$"; |
|||
return value.IsMatch(pattern); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 是否是Unicode字符串
|
|||
/// </summary>
|
|||
public static bool IsUnicode(this string value) |
|||
{ |
|||
const string pattern = @"^[\u4E00-\u9FA5\uE815-\uFA29]+$"; |
|||
return value.IsMatch(pattern); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 是否Url字符串
|
|||
/// </summary>
|
|||
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; |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 是否身份证号,验证如下3种情况:
|
|||
/// 1.身份证号码为15位数字;
|
|||
/// 2.身份证号码为18位数字;
|
|||
/// 3.身份证号码为17位数字+1个字母
|
|||
/// </summary>
|
|||
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; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 是否手机号码
|
|||
/// </summary>
|
|||
/// <param name="value"></param>
|
|||
/// <param name="isRestrict">是否按严格格式验证</param>
|
|||
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 其他操作
|
|||
|
|||
/// <summary>
|
|||
/// 判断指定的字符串不是 null、空。
|
|||
/// </summary>
|
|||
public static bool IsNotNullOrEmpty(this string str) |
|||
{ |
|||
return !string.IsNullOrEmpty(str); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 判断指定的字符串不是 null、空或者仅由空白字符组成
|
|||
/// </summary>
|
|||
public static bool IsNotNullOrWhiteSpace(this string str) |
|||
{ |
|||
return !string.IsNullOrWhiteSpace(str); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 指示指定的字符串是 null、空或者仅由空白字符组成
|
|||
/// </summary>
|
|||
public static bool IsMissing(this string value) |
|||
{ |
|||
return string.IsNullOrWhiteSpace(value); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 为指定格式的字符串填充相应对象来生成字符串
|
|||
/// </summary>
|
|||
/// <param name="format">字符串格式,占位符以{n}表示</param>
|
|||
/// <param name="args">用于填充占位符的参数</param>
|
|||
/// <returns>格式化后的字符串</returns>
|
|||
public static string FormatWith(this string format, params object[] args) |
|||
{ |
|||
Guard.NotNull(format, nameof(format)); |
|||
return string.Format(CultureInfo.CurrentCulture, format, args); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将字符串反转
|
|||
/// </summary>
|
|||
/// <param name="value">要反转的字符串</param>
|
|||
public static string ReverseString(this string value) |
|||
{ |
|||
Guard.NotNull(value, nameof(value)); |
|||
return new string(value.Reverse().ToArray()); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 单词复数变成单数形式
|
|||
/// </summary>
|
|||
/// <param name="word"></param>
|
|||
/// <returns></returns>
|
|||
public static string ToSingular(this string word) |
|||
{ |
|||
var plural1 = new Regex("(?<keep>[^aeiou])ies$"); |
|||
var plural2 = new Regex("(?<keep>[aeiou]y)s$"); |
|||
var plural3 = new Regex("(?<keep>[sxzh])es$"); |
|||
var plural4 = new Regex("(?<keep>[^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; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 单词单数变成复数形式
|
|||
/// </summary>
|
|||
/// <param name="word"></param>
|
|||
/// <returns></returns>
|
|||
public static string ToPlural(this string word) |
|||
{ |
|||
var plural1 = new Regex("(?<keep>[^aeiou])y$"); |
|||
var plural2 = new Regex("(?<keep>[aeiou]y)$"); |
|||
var plural3 = new Regex("(?<keep>[sxzh])$"); |
|||
var plural4 = new Regex("(?<keep>[^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; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 以指定字符串作为分隔符将指定字符串分隔成数组
|
|||
/// </summary>
|
|||
/// <param name="value">要分割的字符串</param>
|
|||
/// <param name="strSplit">字符串类型的分隔符</param>
|
|||
/// <param name="removeEmptyEntries">是否移除数据中元素为空字符串的项</param>
|
|||
/// <returns>分割后的数据</returns>
|
|||
public static string[] Split(this string value, string strSplit, bool removeEmptyEntries = false) |
|||
{ |
|||
return value.Split(new[] {strSplit}, |
|||
removeEmptyEntries ? StringSplitOptions.RemoveEmptyEntries : StringSplitOptions.None); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 支持汉字的字符串长度,汉字长度计为2
|
|||
/// </summary>
|
|||
/// <param name="value">参数字符串</param>
|
|||
/// <returns>当前字符串的长度,汉字长度为2</returns>
|
|||
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; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将JSON字符串还原为对象
|
|||
/// </summary>
|
|||
/// <typeparam name="T">要转换的目标类型</typeparam>
|
|||
/// <param name="json">JSON字符串</param>
|
|||
/// <returns></returns>
|
|||
public static T FromJsonString<T>(this string json) |
|||
{ |
|||
Guard.NotNull(json, nameof(json)); |
|||
return JsonConvert.DeserializeObject<T>(json); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将JSON字符串还原为对象
|
|||
/// </summary>
|
|||
/// <param name="json">JSON字符串 </param>
|
|||
/// <param name="type">数据类型</param>
|
|||
public static object FromJsonString(this string json, Type type) |
|||
{ |
|||
return JsonConvert.DeserializeObject(json, type); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 给URL添加查询参数
|
|||
/// </summary>
|
|||
/// <param name="url">URL字符串</param>
|
|||
/// <param name="queries">要添加的参数,形如:"id=1,cid=2"</param>
|
|||
/// <returns></returns>
|
|||
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; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 获取URL中指定参数的值,不存在返回空字符串
|
|||
/// </summary>
|
|||
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<string, string>(strs[0], strs[1])) |
|||
.ToDictionary(m => m.Key, m => m.Value); |
|||
if (dict.ContainsKey(key)) |
|||
{ |
|||
return dict[key]; |
|||
} |
|||
|
|||
return string.Empty; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 给URL添加 # 参数
|
|||
/// </summary>
|
|||
/// <param name="url">URL字符串</param>
|
|||
/// <param name="query">要添加的参数</param>
|
|||
/// <returns></returns>
|
|||
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; |
|||
} |
|||
|
|||
|
|||
|
|||
/// <summary>
|
|||
/// 将<see cref="byte"/>[]数组转换为Base64字符串
|
|||
/// </summary>
|
|||
public static string ToBase64String(this byte[] bytes) |
|||
{ |
|||
Guard.NotNull(bytes, nameof(bytes)); |
|||
|
|||
return Convert.ToBase64String(bytes); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将字符串转换为Base64字符串,默认编码为<see cref="Encoding.UTF8"/>
|
|||
/// </summary>
|
|||
/// <param name="source">正常的字符串</param>
|
|||
/// <param name="encoding">编码</param>
|
|||
/// <returns>Base64字符串</returns>
|
|||
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)); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将Base64字符串转换为正常字符串,默认编码为<see cref="Encoding.UTF8"/>
|
|||
/// </summary>
|
|||
/// <param name="base64String">Base64字符串</param>
|
|||
/// <param name="encoding">编码</param>
|
|||
/// <returns>正常字符串</returns>
|
|||
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); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将字符串进行UrlDecode解码
|
|||
/// </summary>
|
|||
/// <param name="source">待UrlDecode解码的字符串</param>
|
|||
/// <returns>UrlDecode解码后的字符串</returns>
|
|||
public static string ToUrlDecode(this string source) |
|||
{ |
|||
Guard.NotNull(source, nameof(source)); |
|||
|
|||
return HttpUtility.UrlDecode(source); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将字符串进行UrlEncode编码
|
|||
/// </summary>
|
|||
/// <param name="source">待UrlEncode编码的字符串</param>
|
|||
/// <returns>UrlEncode编码后的字符串</returns>
|
|||
public static string ToUrlEncode(this string source) |
|||
{ |
|||
Guard.NotNull(source, nameof(source)); |
|||
|
|||
return HttpUtility.UrlEncode(source); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将字符串进行HtmlDecode解码
|
|||
/// </summary>
|
|||
/// <param name="source">待HtmlDecode解码的字符串</param>
|
|||
/// <returns>HtmlDecode解码后的字符串</returns>
|
|||
public static string ToHtmlDecode(this string source) |
|||
{ |
|||
Guard.NotNull(source, nameof(source)); |
|||
|
|||
return HttpUtility.HtmlDecode(source); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将字符串进行HtmlEncode编码
|
|||
/// </summary>
|
|||
/// <param name="source">待HtmlEncode编码的字符串</param>
|
|||
/// <returns>HtmlEncode编码后的字符串</returns>
|
|||
public static string ToHtmlEncode(this string source) |
|||
{ |
|||
Guard.NotNull(source, nameof(source)); |
|||
|
|||
return HttpUtility.HtmlEncode(source); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将字符串转换为十六进制字符串,默认编码为<see cref="Encoding.UTF8"/>
|
|||
/// </summary>
|
|||
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(); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将十六进制字符串转换为常规字符串,默认编码为<see cref="Encoding.UTF8"/>
|
|||
/// </summary>
|
|||
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); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将byte[]编码为十六进制字符串
|
|||
/// </summary>
|
|||
/// <param name="bytes">byte[]数组</param>
|
|||
/// <returns>十六进制字符串</returns>
|
|||
public static string ToHexString(this byte[] bytes) |
|||
{ |
|||
Guard.NotNull(bytes, nameof(bytes)); |
|||
|
|||
return bytes.Aggregate(string.Empty, (current, t) => current + t.ToString("X2")); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将十六进制字符串转换为byte[]
|
|||
/// </summary>
|
|||
/// <param name="hexString">十六进制字符串</param>
|
|||
/// <returns>byte[]数组</returns>
|
|||
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; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将字符串进行Unicode编码,变成形如“\u7f16\u7801”的形式
|
|||
/// </summary>
|
|||
/// <param name="source">要进行编号的字符串</param>
|
|||
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])); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将形如“\u7f16\u7801”的Unicode字符串解码
|
|||
/// </summary>
|
|||
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; |
|||
}); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将驼峰字符串按单词拆分并转换成小写,再以特定字符串分隔
|
|||
/// </summary>
|
|||
/// <param name="str">待转换的字符串</param>
|
|||
/// <param name="splitStr">分隔符字符</param>
|
|||
/// <returns></returns>
|
|||
public static string UpperToLowerAndSplit(this string str, string splitStr = "-") |
|||
{ |
|||
if (string.IsNullOrEmpty(str)) |
|||
{ |
|||
return str; |
|||
} |
|||
|
|||
List<string> words = new List<string>(); |
|||
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); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将驼峰字符串的第一个字符小写
|
|||
/// </summary>
|
|||
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); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 将小驼峰字符串的第一个字符大写
|
|||
/// </summary>
|
|||
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); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 计算当前字符串与指定字符串的编辑距离(相似度)
|
|||
/// </summary>
|
|||
/// <param name="source">源字符串</param>
|
|||
/// <param name="target">目标字符串</param>
|
|||
/// <param name="similarity">输出相似度</param>
|
|||
/// <param name="ignoreCase">是否忽略大小写</param>
|
|||
/// <returns>编辑距离</returns>
|
|||
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]; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 计算两个字符串的相似度,应用公式:相似度=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.
|
|||
/// </summary>
|
|||
/// <param name="source">源字符串</param>
|
|||
/// <param name="target">目标字符串</param>
|
|||
/// <param name="ignoreCase">是否忽略大小写</param>
|
|||
/// <returns>字符串相似度</returns>
|
|||
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); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 标准化Path字符串,将 \\ 转换为 /
|
|||
/// </summary>
|
|||
/// <param name="path">Path字符串</param>
|
|||
public static string NormalizePath(this string path) |
|||
{ |
|||
return path.Replace('\\', '/'); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// (Pascal) 命名法 的字符串 改为 短横线分隔式命名
|
|||
/// 例如UserName => user-name
|
|||
/// </summary>
|
|||
public static string PascalToKebabCase(this string value) |
|||
{ |
|||
if (string.IsNullOrEmpty(value)) |
|||
{ |
|||
return value; |
|||
} |
|||
|
|||
return Regex.Replace( |
|||
value, |
|||
"(?<!^)([A-Z][a-z]|(?<=[a-z])[A-Z])", |
|||
"-$1", |
|||
RegexOptions.Compiled) |
|||
.Trim() |
|||
.ToLower(); |
|||
} |
|||
|
|||
#endregion
|
|||
} |
|||
} |
|||
@ -0,0 +1,241 @@ |
|||
using CompanyName.ProjectName.Extensions.Customs; |
|||
using System.Linq; |
|||
|
|||
namespace System.Text |
|||
{ |
|||
/// <summary>
|
|||
/// StringBuilder 扩展方法类
|
|||
/// </summary>
|
|||
public static class StringBuilderExtensions |
|||
{ |
|||
/// <summary>
|
|||
/// 去除<seealso cref="StringBuilder"/>开头的空格
|
|||
/// </summary>
|
|||
/// <param name="stringBuilder"></param>
|
|||
/// <returns>返回修改后的StringBuilder,主要用于链式操作</returns>
|
|||
public static StringBuilder TrimStart(this StringBuilder stringBuilder) |
|||
{ |
|||
Guard.NotNull(stringBuilder, nameof(stringBuilder)); |
|||
|
|||
return stringBuilder.TrimStart(' '); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 去除<seealso cref="StringBuilder"/>开头的指定<seealso cref="char"/>
|
|||
/// </summary>
|
|||
/// <param name="stringBuilder"></param>
|
|||
/// <param name="c">要去掉的<seealso cref="char"/></param>
|
|||
/// <returns></returns>
|
|||
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; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 去除<seealso cref="StringBuilder"/>开头的指定字符数组
|
|||
/// </summary>
|
|||
/// <param name="stringBuilder"></param>
|
|||
/// <param name="chars">要去掉的字符数组</param>
|
|||
/// <returns></returns>
|
|||
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)); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 去除<see cref="StringBuilder"/>开头的指定的<seealso cref="string"/>
|
|||
/// </summary>
|
|||
/// <param name="stringBuilder"></param>
|
|||
/// <param name="str">要去掉的<seealso cref="string"/></param>
|
|||
/// <returns></returns>
|
|||
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; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 去除StringBuilder结尾的空格
|
|||
/// </summary>
|
|||
/// <param name="stringBuilder">StringBuilder</param>
|
|||
/// <returns>返回修改后的StringBuilder,主要用于链式操作</returns>
|
|||
public static StringBuilder TrimEnd(this StringBuilder stringBuilder) |
|||
{ |
|||
return stringBuilder.TrimEnd(' '); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 去除<see cref="StringBuilder"/>结尾指定字符
|
|||
/// </summary>
|
|||
/// <param name="stringBuilder"></param>
|
|||
/// <param name="c">要去掉的字符</param>
|
|||
/// <returns></returns>
|
|||
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; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 去除<see cref="StringBuilder"/>结尾指定字符数组
|
|||
/// </summary>
|
|||
/// <param name="stringBuilder"></param>
|
|||
/// <param name="chars">要去除的字符数组</param>
|
|||
/// <returns></returns>
|
|||
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)); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 去除<see cref="StringBuilder"/>结尾指定字符串
|
|||
/// </summary>
|
|||
/// <param name="stringBuilder"></param>
|
|||
/// <param name="str">要去除的字符串</param>
|
|||
/// <returns></returns>
|
|||
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; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 去除StringBuilder两端的空格
|
|||
/// </summary>
|
|||
/// <param name="stringBuilder">StringBuilder</param>
|
|||
/// <returns>返回修改后的StringBuilder,主要用于链式操作</returns>
|
|||
public static StringBuilder Trim(this StringBuilder stringBuilder) |
|||
{ |
|||
Guard.NotNull(stringBuilder, nameof(stringBuilder)); |
|||
|
|||
if (stringBuilder.Length == 0) |
|||
return stringBuilder; |
|||
return stringBuilder.TrimEnd().TrimStart(); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 返回<see cref="StringBuilder"/>从起始位置指定长度的字符串
|
|||
/// </summary>
|
|||
/// <param name="stringBuilder"></param>
|
|||
/// <param name="start">起始位置</param>
|
|||
/// <param name="length">长度</param>
|
|||
/// <returns>字符串</returns>
|
|||
/// <exception cref="IndexOutOfRangeException">超出字符串索引长度异常</exception>
|
|||
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; |
|||
} |
|||
|
|||
} |
|||
} |
|||
@ -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 |
|||
{ |
|||
|
|||
} |
|||
} |
|||
@ -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; } |
|||
|
|||
/// <summary>
|
|||
/// 工作单元管理器
|
|||
/// </summary>
|
|||
protected IUnitOfWorkManager UnitOfWorkManager => |
|||
LazyServiceProvider.LazyGetRequiredService<IUnitOfWorkManager>(); |
|||
|
|||
/// <summary>
|
|||
/// 分布式事件总线
|
|||
/// </summary>
|
|||
protected IDistributedEventBus DistributedEventBus => |
|||
LazyServiceProvider.LazyGetRequiredService<IDistributedEventBus>(); |
|||
|
|||
/// <summary>
|
|||
/// 对象映射器
|
|||
/// </summary>
|
|||
protected IObjectMapper ObjectMapper => LazyServiceProvider.LazyGetService<IObjectMapper>(provider => |
|||
ObjectMapperContext == null |
|||
? provider.GetRequiredService<IObjectMapper>() |
|||
: (IObjectMapper) provider.GetRequiredService( |
|||
typeof(IObjectMapper<>).MakeGenericType(ObjectMapperContext))); |
|||
} |
|||
} |
|||
@ -0,0 +1,6 @@ |
|||
{ |
|||
"sdk": { |
|||
"version": "5.0.101", |
|||
"rollForward": "latestFeature" |
|||
} |
|||
} |
|||
@ -0,0 +1,43 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk.Web"> |
|||
|
|||
<Import Project="../../../../common.props" /> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>net5.0</TargetFramework> |
|||
<RootNamespace>CompanyName.ProjectName.DataDictionaryManagement</RootNamespace> |
|||
<PreserveCompilationReferences>true</PreserveCompilationReferences> |
|||
<UserSecretsId>CompanyName.ProjectName.DataDictionaryManagement-c2d31439-b723-48e2-b061-5ebd7aeb6010</UserSecretsId> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Serilog.AspNetCore" Version="4.1.0" /> |
|||
<PackageReference Include="Serilog.Sinks.Async" Version="1.4.0" /> |
|||
<PackageReference Include="IdentityModel" Version="5.1.0" /> |
|||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="5.0.*" /> |
|||
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="5.0.*" /> |
|||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.7" /> |
|||
<PackageReference Include="Volo.Abp.Autofac" Version="4.3.3" /> |
|||
<PackageReference Include="Volo.Abp.Caching.StackExchangeRedis" Version="4.3.3" /> |
|||
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy" Version="4.3.3" /> |
|||
<PackageReference Include="Volo.Abp.EntityFrameworkCore.MySQL" Version="4.3.3" /> |
|||
<PackageReference Include="Volo.Abp.AspNetCore.Serilog" Version="4.3.3" /> |
|||
<PackageReference Include="Volo.Abp.Swashbuckle" Version="4.3.3" /> |
|||
<PackageReference Include="Volo.Abp.PermissionManagement.EntityFrameworkCore" Version="4.3.3" /> |
|||
<PackageReference Include="Volo.Abp.SettingManagement.EntityFrameworkCore" Version="4.3.3" /> |
|||
<PackageReference Include="Volo.Abp.AuditLogging.EntityFrameworkCore" Version="4.3.3" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<ProjectReference Include="..\..\src\CompanyName.ProjectName.DataDictionaryManagement.HttpApi\CompanyName.ProjectName.DataDictionaryManagement.HttpApi.csproj" /> |
|||
<ProjectReference Include="..\..\src\CompanyName.ProjectName.DataDictionaryManagement.Application\CompanyName.ProjectName.DataDictionaryManagement.Application.csproj" /> |
|||
<ProjectReference Include="..\..\src\CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore\CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<Compile Remove="Logs\**" /> |
|||
<Content Remove="Logs\**" /> |
|||
<EmbeddedResource Remove="Logs\**" /> |
|||
<None Remove="Logs\**" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -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"); |
|||
} |
|||
} |
|||
} |
|||
@ -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<AbpMultiTenancyOptions>(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(); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 配置跨域
|
|||
/// </summary>
|
|||
/// <param name="context"></param>
|
|||
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(); |
|||
}); |
|||
}); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 配置SwaggerUI
|
|||
/// </summary>
|
|||
/// <param name="context"></param>
|
|||
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<string>() |
|||
} |
|||
}); |
|||
|
|||
#endregion
|
|||
}); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Redis缓存
|
|||
/// </summary>
|
|||
/// <param name="context"></param>
|
|||
private void ConfigureCache(ServiceConfigurationContext context) |
|||
{ |
|||
var hostingEnvironment = context.Services.GetHostingEnvironment(); |
|||
var configuration = context.Services.GetConfiguration(); |
|||
Configure<AbpDistributedCacheOptions>(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<AbpDbContextOptions>(options => { options.UseMySQL(); }); |
|||
} |
|||
|
|||
/// <summary>
|
|||
///配置本地化
|
|||
/// </summary>
|
|||
private void ConfigureLocalization() |
|||
{ |
|||
Configure<AbpLocalizationOptions>(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", "繁體中文")); |
|||
}); |
|||
} |
|||
/// <summary>
|
|||
/// 配置虚拟文件系统
|
|||
/// </summary>
|
|||
/// <param name="context"></param>
|
|||
private void ConfigureVirtualFileSystem(ServiceConfigurationContext context) |
|||
{ |
|||
Configure<AbpVirtualFileSystemOptions>(options => |
|||
{ |
|||
options.FileSets.AddEmbedded<DataDictionaryManagementHttpApiHostModule>(); |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
@ -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"] |
|||
@ -0,0 +1,21 @@ |
|||
using Microsoft.EntityFrameworkCore; |
|||
using Volo.Abp.EntityFrameworkCore; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore |
|||
{ |
|||
public class DataDictionaryManagementHttpApiHostMigrationsDbContext : AbpDbContext<DataDictionaryManagementHttpApiHostMigrationsDbContext> |
|||
{ |
|||
public DataDictionaryManagementHttpApiHostMigrationsDbContext(DbContextOptions<DataDictionaryManagementHttpApiHostMigrationsDbContext> options) |
|||
: base(options) |
|||
{ |
|||
|
|||
} |
|||
|
|||
protected override void OnModelCreating(ModelBuilder modelBuilder) |
|||
{ |
|||
base.OnModelCreating(modelBuilder); |
|||
|
|||
modelBuilder.ConfigureDataDictionaryManagement(); |
|||
} |
|||
} |
|||
} |
|||
@ -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<DataDictionaryManagementHttpApiHostMigrationsDbContext> |
|||
{ |
|||
public DataDictionaryManagementHttpApiHostMigrationsDbContext CreateDbContext(string[] args) |
|||
{ |
|||
var configuration = BuildConfiguration(); |
|||
|
|||
var builder = new DbContextOptionsBuilder<DataDictionaryManagementHttpApiHostMigrationsDbContext>() |
|||
.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(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,3 @@ |
|||
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd"> |
|||
<ConfigureAwait ContinueOnCapturedContext="false" /> |
|||
</Weavers> |
|||
@ -0,0 +1,30 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> |
|||
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. --> |
|||
<xs:element name="Weavers"> |
|||
<xs:complexType> |
|||
<xs:all> |
|||
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1"> |
|||
<xs:complexType> |
|||
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" /> |
|||
</xs:complexType> |
|||
</xs:element> |
|||
</xs:all> |
|||
<xs:attribute name="VerifyAssembly" type="xs:boolean"> |
|||
<xs:annotation> |
|||
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation> |
|||
</xs:annotation> |
|||
</xs:attribute> |
|||
<xs:attribute name="VerifyIgnoreCodes" type="xs:string"> |
|||
<xs:annotation> |
|||
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation> |
|||
</xs:annotation> |
|||
</xs:attribute> |
|||
<xs:attribute name="GenerateXsd" type="xs:boolean"> |
|||
<xs:annotation> |
|||
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation> |
|||
</xs:annotation> |
|||
</xs:attribute> |
|||
</xs:complexType> |
|||
</xs:element> |
|||
</xs:schema> |
|||
@ -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.<ConfigureVirtualFileSystem>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.<Get>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.<ConfigurePipeline>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.<BuildPipeline>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.<BuildPipeline>b__1(ResolveRequestContext ctxt) |
|||
at Autofac.Builder.RegistrationBuilder`3.<>c__DisplayClass41_0.<PropertiesAutowired>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.<BuildPipeline>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.<BuildPipeline>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.<BuildPipeline>b__1(ResolveRequestContext ctxt) |
|||
at Autofac.Core.Resolving.Middleware.SharingMiddleware.<>c__DisplayClass5_0.<Execute>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.<BuildPipeline>b__1(ResolveRequestContext ctxt) |
|||
at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>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.<BuildPipeline>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.<Build>b__0(IApplicationBuilder builder) |
|||
at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass15_0.<UseStartup>b__1(IApplicationBuilder app) |
|||
at Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.<Configure>g__MiddlewareFilterBuilder|0(IApplicationBuilder builder) |
|||
at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.<Configure>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.<ConfigureVirtualFileSystem>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.<Get>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.<ConfigurePipeline>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.<BuildPipeline>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.<BuildPipeline>b__1(ResolveRequestContext ctxt) |
|||
at Autofac.Builder.RegistrationBuilder`3.<>c__DisplayClass41_0.<PropertiesAutowired>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.<BuildPipeline>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.<BuildPipeline>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.<BuildPipeline>b__1(ResolveRequestContext ctxt) |
|||
at Autofac.Core.Resolving.Middleware.SharingMiddleware.<>c__DisplayClass5_0.<Execute>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.<BuildPipeline>b__1(ResolveRequestContext ctxt) |
|||
at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>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.<BuildPipeline>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.<Build>b__0(IApplicationBuilder builder) |
|||
at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass15_0.<UseStartup>b__1(IApplicationBuilder app) |
|||
at Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.<Configure>g__MiddlewareFilterBuilder|0(IApplicationBuilder builder) |
|||
at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.<Configure>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 |
|||
@ -0,0 +1,153 @@ |
|||
// <auto-generated />
|
|||
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<Guid>("Id") |
|||
.ValueGeneratedOnAdd() |
|||
.HasColumnType("char(36)"); |
|||
|
|||
b.Property<string>("Code") |
|||
.IsRequired() |
|||
.HasMaxLength(64) |
|||
.HasColumnType("varchar(64) CHARACTER SET utf8mb4"); |
|||
|
|||
b.Property<string>("ConcurrencyStamp") |
|||
.IsConcurrencyToken() |
|||
.HasMaxLength(40) |
|||
.HasColumnType("varchar(40) CHARACTER SET utf8mb4") |
|||
.HasColumnName("ConcurrencyStamp"); |
|||
|
|||
b.Property<DateTime>("CreationTime") |
|||
.HasColumnType("datetime(6)") |
|||
.HasColumnName("CreationTime"); |
|||
|
|||
b.Property<Guid?>("CreatorId") |
|||
.HasColumnType("char(36)") |
|||
.HasColumnName("CreatorId"); |
|||
|
|||
b.Property<Guid?>("DeleterId") |
|||
.HasColumnType("char(36)") |
|||
.HasColumnName("DeleterId"); |
|||
|
|||
b.Property<DateTime?>("DeletionTime") |
|||
.HasColumnType("datetime(6)") |
|||
.HasColumnName("DeletionTime"); |
|||
|
|||
b.Property<string>("Description") |
|||
.IsRequired() |
|||
.HasMaxLength(1024) |
|||
.HasColumnType("varchar(1024) CHARACTER SET utf8mb4"); |
|||
|
|||
b.Property<string>("DisplayText") |
|||
.IsRequired() |
|||
.HasMaxLength(64) |
|||
.HasColumnType("varchar(64) CHARACTER SET utf8mb4"); |
|||
|
|||
b.Property<string>("ExtraProperties") |
|||
.HasColumnType("longtext CHARACTER SET utf8mb4") |
|||
.HasColumnName("ExtraProperties"); |
|||
|
|||
b.Property<bool>("IsDeleted") |
|||
.ValueGeneratedOnAdd() |
|||
.HasColumnType("tinyint(1)") |
|||
.HasDefaultValue(false) |
|||
.HasColumnName("IsDeleted"); |
|||
|
|||
b.Property<DateTime?>("LastModificationTime") |
|||
.HasColumnType("datetime(6)") |
|||
.HasColumnName("LastModificationTime"); |
|||
|
|||
b.Property<Guid?>("LastModifierId") |
|||
.HasColumnType("char(36)") |
|||
.HasColumnName("LastModifierId"); |
|||
|
|||
b.HasKey("Id"); |
|||
|
|||
b.ToTable("DataDictionary"); |
|||
}); |
|||
|
|||
modelBuilder.Entity("CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Aggregates.DataDictionaryDetail", b => |
|||
{ |
|||
b.Property<Guid>("Id") |
|||
.ValueGeneratedOnAdd() |
|||
.HasColumnType("char(36)"); |
|||
|
|||
b.Property<string>("Code") |
|||
.HasColumnType("longtext CHARACTER SET utf8mb4"); |
|||
|
|||
b.Property<DateTime>("CreationTime") |
|||
.HasColumnType("datetime(6)") |
|||
.HasColumnName("CreationTime"); |
|||
|
|||
b.Property<Guid?>("CreatorId") |
|||
.HasColumnType("char(36)") |
|||
.HasColumnName("CreatorId"); |
|||
|
|||
b.Property<Guid>("DataDictionaryId") |
|||
.HasColumnType("char(36)"); |
|||
|
|||
b.Property<string>("Description") |
|||
.HasColumnType("longtext CHARACTER SET utf8mb4"); |
|||
|
|||
b.Property<string>("DisplayText") |
|||
.HasColumnType("longtext CHARACTER SET utf8mb4"); |
|||
|
|||
b.Property<bool>("IsEnabled") |
|||
.HasColumnType("tinyint(1)"); |
|||
|
|||
b.Property<DateTime?>("LastModificationTime") |
|||
.HasColumnType("datetime(6)") |
|||
.HasColumnName("LastModificationTime"); |
|||
|
|||
b.Property<Guid?>("LastModifierId") |
|||
.HasColumnType("char(36)") |
|||
.HasColumnName("LastModifierId"); |
|||
|
|||
b.Property<int>("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
|
|||
} |
|||
} |
|||
} |
|||
@ -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<Guid>(type: "char(36)", nullable: false), |
|||
Code = table.Column<string>(type: "varchar(64) CHARACTER SET utf8mb4", maxLength: 64, nullable: false), |
|||
DisplayText = table.Column<string>(type: "varchar(64) CHARACTER SET utf8mb4", maxLength: 64, nullable: false), |
|||
Description = table.Column<string>(type: "varchar(1024) CHARACTER SET utf8mb4", maxLength: 1024, nullable: false), |
|||
ExtraProperties = table.Column<string>(type: "longtext CHARACTER SET utf8mb4", nullable: true), |
|||
ConcurrencyStamp = table.Column<string>(type: "varchar(40) CHARACTER SET utf8mb4", maxLength: 40, nullable: true), |
|||
CreationTime = table.Column<DateTime>(type: "datetime(6)", nullable: false), |
|||
CreatorId = table.Column<Guid>(type: "char(36)", nullable: true), |
|||
LastModificationTime = table.Column<DateTime>(type: "datetime(6)", nullable: true), |
|||
LastModifierId = table.Column<Guid>(type: "char(36)", nullable: true), |
|||
IsDeleted = table.Column<bool>(type: "tinyint(1)", nullable: false, defaultValue: false), |
|||
DeleterId = table.Column<Guid>(type: "char(36)", nullable: true), |
|||
DeletionTime = table.Column<DateTime>(type: "datetime(6)", nullable: true) |
|||
}, |
|||
constraints: table => |
|||
{ |
|||
table.PrimaryKey("PK_DataDictionary", x => x.Id); |
|||
}); |
|||
|
|||
migrationBuilder.CreateTable( |
|||
name: "DataDictionaryDetail", |
|||
columns: table => new |
|||
{ |
|||
Id = table.Column<Guid>(type: "char(36)", nullable: false), |
|||
DataDictionaryId = table.Column<Guid>(type: "char(36)", nullable: false), |
|||
Code = table.Column<string>(type: "longtext CHARACTER SET utf8mb4", nullable: true), |
|||
Order = table.Column<int>(type: "int", nullable: false), |
|||
DisplayText = table.Column<string>(type: "longtext CHARACTER SET utf8mb4", nullable: true), |
|||
Description = table.Column<string>(type: "longtext CHARACTER SET utf8mb4", nullable: true), |
|||
IsEnabled = table.Column<bool>(type: "tinyint(1)", nullable: false), |
|||
CreationTime = table.Column<DateTime>(type: "datetime(6)", nullable: false), |
|||
CreatorId = table.Column<Guid>(type: "char(36)", nullable: true), |
|||
LastModificationTime = table.Column<DateTime>(type: "datetime(6)", nullable: true), |
|||
LastModifierId = table.Column<Guid>(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"); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,157 @@ |
|||
// <auto-generated />
|
|||
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<Guid>("Id") |
|||
.ValueGeneratedOnAdd() |
|||
.HasColumnType("char(36)"); |
|||
|
|||
b.Property<string>("Code") |
|||
.IsRequired() |
|||
.HasMaxLength(64) |
|||
.HasColumnType("varchar(64) CHARACTER SET utf8mb4"); |
|||
|
|||
b.Property<string>("ConcurrencyStamp") |
|||
.IsConcurrencyToken() |
|||
.HasMaxLength(40) |
|||
.HasColumnType("varchar(40) CHARACTER SET utf8mb4") |
|||
.HasColumnName("ConcurrencyStamp"); |
|||
|
|||
b.Property<DateTime>("CreationTime") |
|||
.HasColumnType("datetime(6)") |
|||
.HasColumnName("CreationTime"); |
|||
|
|||
b.Property<Guid?>("CreatorId") |
|||
.HasColumnType("char(36)") |
|||
.HasColumnName("CreatorId"); |
|||
|
|||
b.Property<Guid?>("DeleterId") |
|||
.HasColumnType("char(36)") |
|||
.HasColumnName("DeleterId"); |
|||
|
|||
b.Property<DateTime?>("DeletionTime") |
|||
.HasColumnType("datetime(6)") |
|||
.HasColumnName("DeletionTime"); |
|||
|
|||
b.Property<string>("Description") |
|||
.IsRequired() |
|||
.HasMaxLength(1024) |
|||
.HasColumnType("varchar(1024) CHARACTER SET utf8mb4"); |
|||
|
|||
b.Property<string>("DisplayText") |
|||
.IsRequired() |
|||
.HasMaxLength(64) |
|||
.HasColumnType("varchar(64) CHARACTER SET utf8mb4"); |
|||
|
|||
b.Property<string>("ExtraProperties") |
|||
.HasColumnType("longtext CHARACTER SET utf8mb4") |
|||
.HasColumnName("ExtraProperties"); |
|||
|
|||
b.Property<bool>("IsDeleted") |
|||
.ValueGeneratedOnAdd() |
|||
.HasColumnType("tinyint(1)") |
|||
.HasDefaultValue(false) |
|||
.HasColumnName("IsDeleted"); |
|||
|
|||
b.Property<DateTime?>("LastModificationTime") |
|||
.HasColumnType("datetime(6)") |
|||
.HasColumnName("LastModificationTime"); |
|||
|
|||
b.Property<Guid?>("LastModifierId") |
|||
.HasColumnType("char(36)") |
|||
.HasColumnName("LastModifierId"); |
|||
|
|||
b.Property<Guid?>("TenantId") |
|||
.HasColumnType("char(36)") |
|||
.HasColumnName("TenantId"); |
|||
|
|||
b.HasKey("Id"); |
|||
|
|||
b.ToTable("DataDictionary"); |
|||
}); |
|||
|
|||
modelBuilder.Entity("CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Aggregates.DataDictionaryDetail", b => |
|||
{ |
|||
b.Property<Guid>("Id") |
|||
.ValueGeneratedOnAdd() |
|||
.HasColumnType("char(36)"); |
|||
|
|||
b.Property<string>("Code") |
|||
.HasColumnType("longtext CHARACTER SET utf8mb4"); |
|||
|
|||
b.Property<DateTime>("CreationTime") |
|||
.HasColumnType("datetime(6)") |
|||
.HasColumnName("CreationTime"); |
|||
|
|||
b.Property<Guid?>("CreatorId") |
|||
.HasColumnType("char(36)") |
|||
.HasColumnName("CreatorId"); |
|||
|
|||
b.Property<Guid>("DataDictionaryId") |
|||
.HasColumnType("char(36)"); |
|||
|
|||
b.Property<string>("Description") |
|||
.HasColumnType("longtext CHARACTER SET utf8mb4"); |
|||
|
|||
b.Property<string>("DisplayText") |
|||
.HasColumnType("longtext CHARACTER SET utf8mb4"); |
|||
|
|||
b.Property<bool>("IsEnabled") |
|||
.HasColumnType("tinyint(1)"); |
|||
|
|||
b.Property<DateTime?>("LastModificationTime") |
|||
.HasColumnType("datetime(6)") |
|||
.HasColumnName("LastModificationTime"); |
|||
|
|||
b.Property<Guid?>("LastModifierId") |
|||
.HasColumnType("char(36)") |
|||
.HasColumnName("LastModifierId"); |
|||
|
|||
b.Property<int>("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
|
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,24 @@ |
|||
using System; |
|||
using Microsoft.EntityFrameworkCore.Migrations; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.Migrations |
|||
{ |
|||
public partial class AddTenantId : Migration |
|||
{ |
|||
protected override void Up(MigrationBuilder migrationBuilder) |
|||
{ |
|||
migrationBuilder.AddColumn<Guid>( |
|||
name: "TenantId", |
|||
table: "DataDictionary", |
|||
type: "char(36)", |
|||
nullable: true); |
|||
} |
|||
|
|||
protected override void Down(MigrationBuilder migrationBuilder) |
|||
{ |
|||
migrationBuilder.DropColumn( |
|||
name: "TenantId", |
|||
table: "DataDictionary"); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,155 @@ |
|||
// <auto-generated />
|
|||
using System; |
|||
using CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore; |
|||
using Microsoft.EntityFrameworkCore; |
|||
using Microsoft.EntityFrameworkCore.Infrastructure; |
|||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion; |
|||
using Volo.Abp.EntityFrameworkCore; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.Migrations |
|||
{ |
|||
[DbContext(typeof(DataDictionaryManagementHttpApiHostMigrationsDbContext))] |
|||
partial class DataDictionaryManagementHttpApiHostMigrationsDbContextModelSnapshot : ModelSnapshot |
|||
{ |
|||
protected override void BuildModel(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<Guid>("Id") |
|||
.ValueGeneratedOnAdd() |
|||
.HasColumnType("char(36)"); |
|||
|
|||
b.Property<string>("Code") |
|||
.IsRequired() |
|||
.HasMaxLength(64) |
|||
.HasColumnType("varchar(64) CHARACTER SET utf8mb4"); |
|||
|
|||
b.Property<string>("ConcurrencyStamp") |
|||
.IsConcurrencyToken() |
|||
.HasMaxLength(40) |
|||
.HasColumnType("varchar(40) CHARACTER SET utf8mb4") |
|||
.HasColumnName("ConcurrencyStamp"); |
|||
|
|||
b.Property<DateTime>("CreationTime") |
|||
.HasColumnType("datetime(6)") |
|||
.HasColumnName("CreationTime"); |
|||
|
|||
b.Property<Guid?>("CreatorId") |
|||
.HasColumnType("char(36)") |
|||
.HasColumnName("CreatorId"); |
|||
|
|||
b.Property<Guid?>("DeleterId") |
|||
.HasColumnType("char(36)") |
|||
.HasColumnName("DeleterId"); |
|||
|
|||
b.Property<DateTime?>("DeletionTime") |
|||
.HasColumnType("datetime(6)") |
|||
.HasColumnName("DeletionTime"); |
|||
|
|||
b.Property<string>("Description") |
|||
.IsRequired() |
|||
.HasMaxLength(1024) |
|||
.HasColumnType("varchar(1024) CHARACTER SET utf8mb4"); |
|||
|
|||
b.Property<string>("DisplayText") |
|||
.IsRequired() |
|||
.HasMaxLength(64) |
|||
.HasColumnType("varchar(64) CHARACTER SET utf8mb4"); |
|||
|
|||
b.Property<string>("ExtraProperties") |
|||
.HasColumnType("longtext CHARACTER SET utf8mb4") |
|||
.HasColumnName("ExtraProperties"); |
|||
|
|||
b.Property<bool>("IsDeleted") |
|||
.ValueGeneratedOnAdd() |
|||
.HasColumnType("tinyint(1)") |
|||
.HasDefaultValue(false) |
|||
.HasColumnName("IsDeleted"); |
|||
|
|||
b.Property<DateTime?>("LastModificationTime") |
|||
.HasColumnType("datetime(6)") |
|||
.HasColumnName("LastModificationTime"); |
|||
|
|||
b.Property<Guid?>("LastModifierId") |
|||
.HasColumnType("char(36)") |
|||
.HasColumnName("LastModifierId"); |
|||
|
|||
b.Property<Guid?>("TenantId") |
|||
.HasColumnType("char(36)") |
|||
.HasColumnName("TenantId"); |
|||
|
|||
b.HasKey("Id"); |
|||
|
|||
b.ToTable("DataDictionary"); |
|||
}); |
|||
|
|||
modelBuilder.Entity("CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Aggregates.DataDictionaryDetail", b => |
|||
{ |
|||
b.Property<Guid>("Id") |
|||
.ValueGeneratedOnAdd() |
|||
.HasColumnType("char(36)"); |
|||
|
|||
b.Property<string>("Code") |
|||
.HasColumnType("longtext CHARACTER SET utf8mb4"); |
|||
|
|||
b.Property<DateTime>("CreationTime") |
|||
.HasColumnType("datetime(6)") |
|||
.HasColumnName("CreationTime"); |
|||
|
|||
b.Property<Guid?>("CreatorId") |
|||
.HasColumnType("char(36)") |
|||
.HasColumnName("CreatorId"); |
|||
|
|||
b.Property<Guid>("DataDictionaryId") |
|||
.HasColumnType("char(36)"); |
|||
|
|||
b.Property<string>("Description") |
|||
.HasColumnType("longtext CHARACTER SET utf8mb4"); |
|||
|
|||
b.Property<string>("DisplayText") |
|||
.HasColumnType("longtext CHARACTER SET utf8mb4"); |
|||
|
|||
b.Property<bool>("IsEnabled") |
|||
.HasColumnType("tinyint(1)"); |
|||
|
|||
b.Property<DateTime?>("LastModificationTime") |
|||
.HasColumnType("datetime(6)") |
|||
.HasColumnName("LastModificationTime"); |
|||
|
|||
b.Property<Guid?>("LastModifierId") |
|||
.HasColumnType("char(36)") |
|||
.HasColumnName("LastModifierId"); |
|||
|
|||
b.Property<int>("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
|
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,54 @@ |
|||
using System; |
|||
using System.IO; |
|||
using Microsoft.AspNetCore.Hosting; |
|||
using Microsoft.Extensions.Hosting; |
|||
using Serilog; |
|||
using Serilog.Events; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement |
|||
{ |
|||
public class Program |
|||
{ |
|||
public static int Main(string[] args) |
|||
{ |
|||
Log.Logger = new LoggerConfiguration() |
|||
#if DEBUG
|
|||
.MinimumLevel.Debug() |
|||
#else
|
|||
.MinimumLevel.Information() |
|||
#endif
|
|||
.MinimumLevel.Override("Microsoft", LogEventLevel.Information) |
|||
.Enrich.FromLogContext() |
|||
.WriteTo.Async(c => c.File("Logs/logs.txt")) |
|||
#if DEBUG
|
|||
.WriteTo.Async(c => c.Console()) |
|||
#endif
|
|||
.CreateLogger(); |
|||
|
|||
try |
|||
{ |
|||
Log.Information("Starting web host."); |
|||
CreateHostBuilder(args).Build().Run(); |
|||
return 0; |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
Log.Fatal(ex, "Host terminated unexpectedly!"); |
|||
return 1; |
|||
} |
|||
finally |
|||
{ |
|||
Log.CloseAndFlush(); |
|||
} |
|||
} |
|||
|
|||
internal static IHostBuilder CreateHostBuilder(string[] args) => |
|||
Host.CreateDefaultBuilder(args) |
|||
.ConfigureWebHostDefaults(webBuilder => |
|||
{ |
|||
webBuilder.UseStartup<Startup>(); |
|||
}) |
|||
.UseAutofac() |
|||
.UseSerilog(); |
|||
} |
|||
} |
|||
@ -0,0 +1,27 @@ |
|||
{ |
|||
"iisSettings": { |
|||
"windowsAuthentication": false, |
|||
"anonymousAuthentication": true, |
|||
"iisExpress": { |
|||
"applicationUrl": "https://localhost:44333", |
|||
"sslPort": 44333 |
|||
} |
|||
}, |
|||
"profiles": { |
|||
"IIS Express": { |
|||
"commandName": "IISExpress", |
|||
"launchBrowser": true, |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
} |
|||
}, |
|||
"CompanyName.ProjectName.DataDictionaryManagement.DemoApp": { |
|||
"commandName": "Project", |
|||
"launchBrowser": true, |
|||
"applicationUrl": "https://localhost:44333", |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,21 @@ |
|||
using System; |
|||
using Microsoft.AspNetCore.Builder; |
|||
using Microsoft.AspNetCore.Hosting; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Microsoft.Extensions.Logging; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement |
|||
{ |
|||
public class Startup |
|||
{ |
|||
public void ConfigureServices(IServiceCollection services) |
|||
{ |
|||
services.AddApplication<DataDictionaryManagementHttpApiHostModule>(); |
|||
} |
|||
|
|||
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) |
|||
{ |
|||
app.InitializeApplication(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,13 @@ |
|||
{ |
|||
"App": { |
|||
"CorsOrigins": "https://*.DataDictionaryManagement.com,http://localhost:4200,http://localhost:44307,https://localhost:44307" |
|||
}, |
|||
"ConnectionStrings": { |
|||
"Default": "Data Source=localhost;Database=CompanyNameProjectNameDB;uid=root;pwd=mypassword;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true", |
|||
"DataDictionaryManagement": "Data Source=localhost;Database=DataDictionaryManagement;uid=root;pwd=mypassword;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true" |
|||
}, |
|||
"Redis": { |
|||
"Configuration": "localhost,password=mypassword", |
|||
"DatabaseId": 1 |
|||
} |
|||
} |
|||
@ -0,0 +1,4 @@ |
|||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. |
|||
# yarn lockfile v1 |
|||
|
|||
|
|||
@ -0,0 +1,16 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<Import Project="../../../../common.props" /> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>netstandard2.1</TargetFramework> |
|||
<RootNamespace>CompanyName.ProjectName.DataDictionaryManagement</RootNamespace> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Volo.Abp.Ddd.Application.Contracts" Version="4.3.3" /> |
|||
<PackageReference Include="Volo.Abp.Authorization" Version="4.3.3" /> |
|||
<ProjectReference Include="..\CompanyName.ProjectName.DataDictionaryManagement.Domain.Shared\CompanyName.ProjectName.DataDictionaryManagement.Domain.Shared.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -0,0 +1,17 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Dtos |
|||
{ |
|||
public class CreateDataDictinaryDetailInput |
|||
{ |
|||
[Required] |
|||
public Guid Id { get; set; } |
|||
[Required] |
|||
public string Code { get; set; } |
|||
[Required] |
|||
public string DisplayText { get; set; } |
|||
public string Description { get; set; } |
|||
public int Order { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,13 @@ |
|||
using System.ComponentModel.DataAnnotations; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Dtos |
|||
{ |
|||
public class CreateDataDictinaryInput |
|||
{ |
|||
[Required] |
|||
public string Code { get; set; } |
|||
[Required] |
|||
public string DisplayText { get; set; } |
|||
public string Description { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
using System; |
|||
using CompanyName.ProjectName.Extensions.Customs; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Dtos |
|||
{ |
|||
public class PagingDataDictionaryDetailInput : PagingBase |
|||
{ |
|||
public Guid DataDictionaryId { get; set; } |
|||
public string Filter { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,39 @@ |
|||
using System; |
|||
using Volo.Abp.Application.Dtos; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Dtos |
|||
{ |
|||
public class PagingDataDictionaryDetailOutput : EntityDto<Guid> |
|||
{ |
|||
/// <summary>
|
|||
/// 所属字典Id
|
|||
/// </summary>
|
|||
public Guid DataDictionaryId { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 字典明细编码
|
|||
/// </summary>
|
|||
public string Code { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 展现列表时排序用
|
|||
/// </summary>
|
|||
public int Order { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 英文显示名
|
|||
/// </summary>
|
|||
public string DisplayText { get; set; } |
|||
|
|||
|
|||
/// <summary>
|
|||
/// 描述
|
|||
/// </summary>
|
|||
public string Description { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 启/停用(默认启用)
|
|||
/// </summary>
|
|||
public bool IsEnabled { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,9 @@ |
|||
using CompanyName.ProjectName.Extensions.Customs; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Dtos |
|||
{ |
|||
public class PagingDataDictionaryInput : PagingBase |
|||
{ |
|||
public string Filter { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,23 @@ |
|||
using System; |
|||
using Volo.Abp.Application.Dtos; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Dtos |
|||
{ |
|||
public class PagingDataDictionaryOutput : EntityDto<Guid> |
|||
{ |
|||
/// <summary>
|
|||
/// 字典编码
|
|||
/// </summary>
|
|||
public string Code { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 显示名
|
|||
/// </summary>
|
|||
public string DisplayText { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 描述
|
|||
/// </summary>
|
|||
public string Description { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,17 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Dtos |
|||
{ |
|||
public class SetDataDictinaryDetailInput |
|||
{ |
|||
[Required] |
|||
public Guid DataDictionaryId { get; set; } |
|||
|
|||
[Required] |
|||
public Guid DataDictionayDetailId { get; set; } |
|||
|
|||
[Required] |
|||
public bool IsEnabled { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,47 @@ |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
using CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Dtos; |
|||
using Volo.Abp.Application.Dtos; |
|||
using Volo.Abp.Application.Services; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries |
|||
{ |
|||
public interface IDataDictionaryAppService : IApplicationService |
|||
{ |
|||
/// <summary>
|
|||
/// 分页查询字典项
|
|||
/// </summary>
|
|||
/// <param name="input"></param>
|
|||
/// <param name="cancellationToken"></param>
|
|||
/// <returns></returns>
|
|||
Task<PagedResultDto<PagingDataDictionaryOutput>> GetPagingListAsync( |
|||
PagingDataDictionaryInput input, |
|||
CancellationToken cancellationToken = default); |
|||
|
|||
/// <summary>
|
|||
/// 分页查询字典项明细
|
|||
/// </summary>
|
|||
/// <param name="input"></param>
|
|||
/// <param name="cancellationToken"></param>
|
|||
/// <returns></returns>
|
|||
Task<PagedResultDto<PagingDataDictionaryDetailOutput>> GetPagingDetailListAsync( |
|||
PagingDataDictionaryDetailInput input, |
|||
CancellationToken cancellationToken = default); |
|||
|
|||
/// <summary>
|
|||
/// 创建字典类型
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
Task CreateAsync(CreateDataDictinaryInput input); |
|||
|
|||
/// <summary>
|
|||
/// 新增字典明细
|
|||
/// </summary>
|
|||
Task CreateDetailAsync(CreateDataDictinaryDetailInput input); |
|||
|
|||
/// <summary>
|
|||
/// 设置字典明细状态
|
|||
/// </summary>
|
|||
Task SetStatus(SetDataDictinaryDetailInput input); |
|||
} |
|||
} |
|||
@ -0,0 +1,16 @@ |
|||
using Volo.Abp.Application; |
|||
using Volo.Abp.Modularity; |
|||
using Volo.Abp.Authorization; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement |
|||
{ |
|||
[DependsOn( |
|||
typeof(DataDictionaryManagementDomainSharedModule), |
|||
typeof(AbpDddApplicationContractsModule), |
|||
typeof(AbpAuthorizationModule) |
|||
)] |
|||
public class DataDictionaryManagementApplicationContractsModule : AbpModule |
|||
{ |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,3 @@ |
|||
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd"> |
|||
<ConfigureAwait ContinueOnCapturedContext="false" /> |
|||
</Weavers> |
|||
@ -0,0 +1,30 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> |
|||
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. --> |
|||
<xs:element name="Weavers"> |
|||
<xs:complexType> |
|||
<xs:all> |
|||
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1"> |
|||
<xs:complexType> |
|||
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" /> |
|||
</xs:complexType> |
|||
</xs:element> |
|||
</xs:all> |
|||
<xs:attribute name="VerifyAssembly" type="xs:boolean"> |
|||
<xs:annotation> |
|||
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation> |
|||
</xs:annotation> |
|||
</xs:attribute> |
|||
<xs:attribute name="VerifyIgnoreCodes" type="xs:string"> |
|||
<xs:annotation> |
|||
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation> |
|||
</xs:annotation> |
|||
</xs:attribute> |
|||
<xs:attribute name="GenerateXsd" type="xs:boolean"> |
|||
<xs:annotation> |
|||
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation> |
|||
</xs:annotation> |
|||
</xs:attribute> |
|||
</xs:complexType> |
|||
</xs:element> |
|||
</xs:schema> |
|||
@ -0,0 +1,19 @@ |
|||
using CompanyName.ProjectName.DataDictionaryManagement.Localization; |
|||
using Volo.Abp.Authorization.Permissions; |
|||
using Volo.Abp.Localization; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.Permissions |
|||
{ |
|||
public class DataDictionaryManagementPermissionDefinitionProvider : PermissionDefinitionProvider |
|||
{ |
|||
public override void Define(IPermissionDefinitionContext context) |
|||
{ |
|||
var myGroup = context.AddGroup(DataDictionaryManagementPermissions.GroupName, L("Permission:DataDictionaryManagement")); |
|||
} |
|||
|
|||
private static LocalizableString L(string name) |
|||
{ |
|||
return LocalizableString.Create<DataDictionaryManagementResource>(name); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,14 @@ |
|||
using Volo.Abp.Reflection; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.Permissions |
|||
{ |
|||
public class DataDictionaryManagementPermissions |
|||
{ |
|||
public const string GroupName = "DataDictionaryManagement"; |
|||
|
|||
public static string[] GetAll() |
|||
{ |
|||
return ReflectionHelper.GetPublicConstantsRecursively(typeof(DataDictionaryManagementPermissions)); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,12 @@ |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Application.Services; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.Samples |
|||
{ |
|||
public interface ISampleAppService : IApplicationService |
|||
{ |
|||
Task<SampleDto> GetAsync(); |
|||
|
|||
Task<SampleDto> GetAuthorizedAsync(); |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.Samples |
|||
{ |
|||
public class SampleDto |
|||
{ |
|||
public int Value { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,17 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<Import Project="../../../../common.props" /> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>netstandard2.1</TargetFramework> |
|||
<RootNamespace>CompanyName.ProjectName.DataDictionaryManagement</RootNamespace> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Volo.Abp.AutoMapper" Version="4.3.3" /> |
|||
<PackageReference Include="Volo.Abp.Ddd.Application" Version="4.3.3" /> |
|||
<ProjectReference Include="..\CompanyName.ProjectName.DataDictionaryManagement.Application.Contracts\CompanyName.ProjectName.DataDictionaryManagement.Application.Contracts.csproj" /> |
|||
<ProjectReference Include="..\CompanyName.ProjectName.DataDictionaryManagement.Domain\CompanyName.ProjectName.DataDictionaryManagement.Domain.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -0,0 +1,96 @@ |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Linq.Dynamic.Core; |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
using CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Aggregates; |
|||
using CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Dtos; |
|||
using CompanyName.ProjectName.Publics.Dtos; |
|||
using Volo.Abp.Application.Dtos; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries |
|||
{ |
|||
public class DataDictionaryAppService : DataDictionaryManagementAppService, IDataDictionaryAppService |
|||
{ |
|||
/// <summary>
|
|||
/// 注意 为了快速直接注入仓库层 规范上是不允许的
|
|||
/// 这里注入仓储也只是为了查询分页
|
|||
/// 如果是其他的操作全部通过对应manger进行操作
|
|||
/// </summary>
|
|||
private readonly IDataDictionaryRepository _dataDictionaryRepository; |
|||
|
|||
private readonly DataDictionaryManager _dataDictionaryManager; |
|||
public DataDictionaryAppService(IDataDictionaryRepository dataDictionaryRepository, DataDictionaryManager dataDictionaryManager) |
|||
{ |
|||
_dataDictionaryRepository = dataDictionaryRepository; |
|||
_dataDictionaryManager = dataDictionaryManager; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 分页查询字典项
|
|||
/// </summary>
|
|||
/// <param name="input"></param>
|
|||
/// <param name="cancellationToken"></param>
|
|||
/// <returns></returns>
|
|||
public async Task<PagedResultDto<PagingDataDictionaryOutput>> GetPagingListAsync( |
|||
PagingDataDictionaryInput input, |
|||
CancellationToken cancellationToken = default) |
|||
{ |
|||
var result = new PagedResultDto<PagingDataDictionaryOutput>(); |
|||
var totalCount = await _dataDictionaryRepository.GetPagingCountAsync(input.Filter, cancellationToken); |
|||
result.TotalCount = totalCount; |
|||
if (totalCount <= 0) return result; |
|||
|
|||
var entities = await _dataDictionaryRepository.GetPagingListAsync(input.Filter, input.PageSize, |
|||
input.SkipCount, false, cancellationToken); |
|||
result.Items = ObjectMapper.Map<List<DataDictionary>, List<PagingDataDictionaryOutput>>(entities); |
|||
|
|||
return result; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 分页查询字典项明细
|
|||
/// </summary>
|
|||
/// <param name="input"></param>
|
|||
/// <param name="cancellationToken"></param>
|
|||
/// <returns></returns>
|
|||
public async Task<PagedResultDto<PagingDataDictionaryDetailOutput>> GetPagingDetailListAsync( |
|||
PagingDataDictionaryDetailInput input, |
|||
CancellationToken cancellationToken = default) |
|||
{ |
|||
var entity = await _dataDictionaryRepository.FindByIdAsync(input.DataDictionaryId, true, cancellationToken); |
|||
var details = entity.Details.Take(input.PageSize).Skip(input.SkipCount).ToList(); |
|||
return new PagedResultDto<PagingDataDictionaryDetailOutput>( |
|||
entity.Details.Count, |
|||
ObjectMapper.Map<List<DataDictionaryDetail>, List<PagingDataDictionaryDetailOutput>>(details)); |
|||
} |
|||
|
|||
|
|||
/// <summary>
|
|||
/// 创建字典类型
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
public Task CreateAsync(CreateDataDictinaryInput input) |
|||
{ |
|||
return _dataDictionaryManager.CreateAsync(input.Code, input.DisplayText, input.Description); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 新增字典明细
|
|||
/// </summary>
|
|||
public Task CreateDetailAsync(CreateDataDictinaryDetailInput input) |
|||
{ |
|||
return _dataDictionaryManager.CreateDetailAsync(input.Id, input.Code, input.DisplayText, input.Description, |
|||
input.Order); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 设置字典明细状态
|
|||
/// </summary>
|
|||
public Task SetStatus(SetDataDictinaryDetailInput input) |
|||
{ |
|||
return _dataDictionaryManager.SetStatus(input.DataDictionaryId, input.DataDictionayDetailId, |
|||
input.IsEnabled); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,14 @@ |
|||
using CompanyName.ProjectName.DataDictionaryManagement.Localization; |
|||
using Volo.Abp.Application.Services; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement |
|||
{ |
|||
public abstract class DataDictionaryManagementAppService : ApplicationService |
|||
{ |
|||
protected DataDictionaryManagementAppService() |
|||
{ |
|||
LocalizationResource = typeof(DataDictionaryManagementResource); |
|||
ObjectMapperContext = typeof(DataDictionaryManagementApplicationModule); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,18 @@ |
|||
using AutoMapper; |
|||
using CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Aggregates; |
|||
using CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Dtos; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement |
|||
{ |
|||
public class DataDictionaryManagementApplicationAutoMapperProfile : Profile |
|||
{ |
|||
public DataDictionaryManagementApplicationAutoMapperProfile() |
|||
{ |
|||
/* You can configure your AutoMapper mapping configuration here. |
|||
* Alternatively, you can split your mapping configurations |
|||
* into multiple profile classes for a better organization. */ |
|||
CreateMap<DataDictionary, PagingDataDictionaryOutput>(); |
|||
CreateMap<DataDictionaryDetail, PagingDataDictionaryDetailOutput>(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,25 @@ |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Volo.Abp.AutoMapper; |
|||
using Volo.Abp.Modularity; |
|||
using Volo.Abp.Application; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement |
|||
{ |
|||
[DependsOn( |
|||
typeof(DataDictionaryManagementDomainModule), |
|||
typeof(DataDictionaryManagementApplicationContractsModule), |
|||
typeof(AbpDddApplicationModule), |
|||
typeof(AbpAutoMapperModule) |
|||
)] |
|||
public class DataDictionaryManagementApplicationModule : AbpModule |
|||
{ |
|||
public override void ConfigureServices(ServiceConfigurationContext context) |
|||
{ |
|||
context.Services.AddAutoMapperObjectMapper<DataDictionaryManagementApplicationModule>(); |
|||
Configure<AbpAutoMapperOptions>(options => |
|||
{ |
|||
options.AddMaps<DataDictionaryManagementApplicationModule>(validate: true); |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,3 @@ |
|||
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd"> |
|||
<ConfigureAwait ContinueOnCapturedContext="false" /> |
|||
</Weavers> |
|||
@ -0,0 +1,30 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> |
|||
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. --> |
|||
<xs:element name="Weavers"> |
|||
<xs:complexType> |
|||
<xs:all> |
|||
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1"> |
|||
<xs:complexType> |
|||
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" /> |
|||
</xs:complexType> |
|||
</xs:element> |
|||
</xs:all> |
|||
<xs:attribute name="VerifyAssembly" type="xs:boolean"> |
|||
<xs:annotation> |
|||
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation> |
|||
</xs:annotation> |
|||
</xs:attribute> |
|||
<xs:attribute name="VerifyIgnoreCodes" type="xs:string"> |
|||
<xs:annotation> |
|||
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation> |
|||
</xs:annotation> |
|||
</xs:attribute> |
|||
<xs:attribute name="GenerateXsd" type="xs:boolean"> |
|||
<xs:annotation> |
|||
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation> |
|||
</xs:annotation> |
|||
</xs:attribute> |
|||
</xs:complexType> |
|||
</xs:element> |
|||
</xs:schema> |
|||
@ -0,0 +1,29 @@ |
|||
using System.Threading.Tasks; |
|||
using Microsoft.AspNetCore.Authorization; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.Samples |
|||
{ |
|||
public class SampleAppService : DataDictionaryManagementAppService, ISampleAppService |
|||
{ |
|||
public Task<SampleDto> GetAsync() |
|||
{ |
|||
return Task.FromResult( |
|||
new SampleDto |
|||
{ |
|||
Value = 42 |
|||
} |
|||
); |
|||
} |
|||
|
|||
[Authorize] |
|||
public Task<SampleDto> GetAuthorizedAsync() |
|||
{ |
|||
return Task.FromResult( |
|||
new SampleDto |
|||
{ |
|||
Value = 42 |
|||
} |
|||
); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,25 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<Import Project="../../../../common.props" /> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>netstandard2.1</TargetFramework> |
|||
<RootNamespace>CompanyName.ProjectName.DataDictionaryManagement</RootNamespace> |
|||
<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Volo.Abp.Validation" Version="4.3.3" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="5.0.*" /> |
|||
<ProjectReference Include="..\..\..\..\frameworks\Extensions\src\CompanyName.ProjectName.Extensions\CompanyName.ProjectName.Extensions.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<EmbeddedResource Include="Localization\DataDictionaryManagement\*.json" /> |
|||
<Content Remove="Localization\DataDictionaryManagement\*.json" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -0,0 +1,9 @@ |
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries |
|||
{ |
|||
public class DataDictionaryMaxLengths |
|||
{ |
|||
public const int Code = 64; |
|||
public const int DisplayText = 64; |
|||
public const int Description = 1024; |
|||
} |
|||
} |
|||
@ -0,0 +1,9 @@ |
|||
using System; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement |
|||
{ |
|||
public class DataDictionaryManagementConsts |
|||
{ |
|||
public static Guid SeedDataDictionaryId = new Guid("39fdb236-a90e-e4b5-02a0-2866a8cf9821"); |
|||
} |
|||
} |
|||
@ -0,0 +1,37 @@ |
|||
using Volo.Abp.Modularity; |
|||
using Volo.Abp.Localization; |
|||
using CompanyName.ProjectName.DataDictionaryManagement.Localization; |
|||
using Volo.Abp.Localization.ExceptionHandling; |
|||
using Volo.Abp.Validation; |
|||
using Volo.Abp.Validation.Localization; |
|||
using Volo.Abp.VirtualFileSystem; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement |
|||
{ |
|||
[DependsOn( |
|||
typeof(AbpValidationModule) |
|||
)] |
|||
public class DataDictionaryManagementDomainSharedModule : AbpModule |
|||
{ |
|||
public override void ConfigureServices(ServiceConfigurationContext context) |
|||
{ |
|||
Configure<AbpVirtualFileSystemOptions>(options => |
|||
{ |
|||
options.FileSets.AddEmbedded<DataDictionaryManagementDomainSharedModule>(); |
|||
}); |
|||
|
|||
Configure<AbpLocalizationOptions>(options => |
|||
{ |
|||
options.Resources |
|||
.Add<DataDictionaryManagementResource>("en") |
|||
.AddBaseTypes(typeof(AbpValidationResource)) |
|||
.AddVirtualJson("/Localization/DataDictionaryManagement"); |
|||
}); |
|||
|
|||
Configure<AbpExceptionLocalizationOptions>(options => |
|||
{ |
|||
options.MapCodeNamespace("DataDictionaryManagement", typeof(DataDictionaryManagementResource)); |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
namespace CompanyName.ProjectName.DataDictionaryManagement |
|||
{ |
|||
public static class DataDictionaryManagementErrorCodes |
|||
{ |
|||
//Add your business exception error codes here...
|
|||
} |
|||
} |
|||
@ -0,0 +1,3 @@ |
|||
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd"> |
|||
<ConfigureAwait ContinueOnCapturedContext="false" /> |
|||
</Weavers> |
|||
@ -0,0 +1,30 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> |
|||
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. --> |
|||
<xs:element name="Weavers"> |
|||
<xs:complexType> |
|||
<xs:all> |
|||
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1"> |
|||
<xs:complexType> |
|||
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" /> |
|||
</xs:complexType> |
|||
</xs:element> |
|||
</xs:all> |
|||
<xs:attribute name="VerifyAssembly" type="xs:boolean"> |
|||
<xs:annotation> |
|||
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation> |
|||
</xs:annotation> |
|||
</xs:attribute> |
|||
<xs:attribute name="VerifyIgnoreCodes" type="xs:string"> |
|||
<xs:annotation> |
|||
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation> |
|||
</xs:annotation> |
|||
</xs:attribute> |
|||
<xs:attribute name="GenerateXsd" type="xs:boolean"> |
|||
<xs:annotation> |
|||
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation> |
|||
</xs:annotation> |
|||
</xs:attribute> |
|||
</xs:complexType> |
|||
</xs:element> |
|||
</xs:schema> |
|||
@ -0,0 +1,7 @@ |
|||
{ |
|||
"culture": "ar", |
|||
"texts": { |
|||
"ManageYourProfile": "إدارة ملفى", |
|||
"SamplePageMessage": "صفحة نموذجية للوحدة النمطية DataDictionaryManagement" |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
{ |
|||
"culture": "cs", |
|||
"texts": { |
|||
"ManageYourProfile": "Spravovat profil", |
|||
"SamplePageMessage": "Ukázková stránka pro modul DataDictionaryManagement" |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
{ |
|||
"culture": "de-DE", |
|||
"texts": { |
|||
"ManageYourProfile": "Verwalten Sie Ihr Profil", |
|||
"SamplePageMessage": "Eine Beispielseite für das Modul DataDictionaryManagementModul" |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
{ |
|||
"culture": "en-GB", |
|||
"texts": { |
|||
"ManageYourProfile": "Manage your profile", |
|||
"SamplePageMessage": "A sample page for the DataDictionaryManagement module" |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
{ |
|||
"culture": "en", |
|||
"texts": { |
|||
"ManageYourProfile": "Manage your profile", |
|||
"SamplePageMessage": "A sample page for the DataDictionaryManagement module" |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
{ |
|||
"culture": "es", |
|||
"texts": { |
|||
"ManageYourProfile": "Gestiona tu perfil", |
|||
"SamplePageMessage": "Una página de ejemplo para el módulo DataDictionaryManagement " |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
{ |
|||
"culture": "fr", |
|||
"texts": { |
|||
"ManageYourProfile": "Gérer votre profil", |
|||
"SamplePageMessage": "Exemple de page pour le module DataDictionaryManagement" |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
{ |
|||
"culture": "hu", |
|||
"texts": { |
|||
"ManageYourProfile": "Kezelje a profilját", |
|||
"SamplePageMessage": "Mintaoldal a DataDictionaryManagement modulhoz" |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
{ |
|||
"culture": "nl", |
|||
"texts": { |
|||
"ManageYourProfile": "Beheer uw profiel", |
|||
"SamplePageMessage": "Een voorbeeldpagina voor de DataDictionaryManagement module" |
|||
} |
|||
} |
|||
@ -0,0 +1,6 @@ |
|||
{ |
|||
"culture": "pl-PL", |
|||
"texts": { |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,6 @@ |
|||
{ |
|||
"culture": "pt-BR", |
|||
"texts": { |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,6 @@ |
|||
{ |
|||
"culture": "sl", |
|||
"texts": { |
|||
"ManageYourProfile": "Upravljajte svojim profilom" |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
{ |
|||
"culture": "tr", |
|||
"texts": { |
|||
"ManageYourProfile": "Profil yönetimi", |
|||
"SamplePageMessage": "DataDictionaryManagement modulünden örnek bir sayfa" |
|||
} |
|||
} |
|||
@ -0,0 +1,6 @@ |
|||
{ |
|||
"culture": "vi", |
|||
"texts": { |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
{ |
|||
"culture": "zh-Hans", |
|||
"texts": { |
|||
"ManageYourProfile": "管理个人资料", |
|||
"SamplePageMessage": "DataDictionaryManagement模块的示例页面" |
|||
} |
|||
} |
|||
@ -0,0 +1,6 @@ |
|||
{ |
|||
"culture": "zh-Hant", |
|||
"texts": { |
|||
"ManageYourProfile": "管理個人資料" |
|||
} |
|||
} |
|||
@ -0,0 +1,10 @@ |
|||
using Volo.Abp.Localization; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.Localization |
|||
{ |
|||
[LocalizationResourceName("DataDictionaryManagement")] |
|||
public class DataDictionaryManagementResource |
|||
{ |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,16 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<Import Project="../../../../common.props" /> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>netstandard2.1</TargetFramework> |
|||
<RootNamespace>CompanyName.ProjectName.DataDictionaryManagement</RootNamespace> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Volo.Abp.Ddd.Domain" Version="4.3.3" /> |
|||
|
|||
<ProjectReference Include="..\CompanyName.ProjectName.DataDictionaryManagement.Domain.Shared\CompanyName.ProjectName.DataDictionaryManagement.Domain.Shared.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -0,0 +1,119 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using System.Linq; |
|||
using CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Exceptions; |
|||
using CompanyName.ProjectName.Extensions.Customs; |
|||
using Volo.Abp.Domain.Entities.Auditing; |
|||
using Volo.Abp.MultiTenancy; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Aggregates |
|||
{ |
|||
/// <summary>
|
|||
/// 数据字典
|
|||
/// </summary>
|
|||
public class DataDictionary : FullAuditedAggregateRoot<Guid>, IMultiTenant |
|||
{ |
|||
/// <summary>
|
|||
/// 租户id
|
|||
/// </summary>
|
|||
public Guid? TenantId { get; private set; } |
|||
|
|||
/// <summary>
|
|||
/// 字典编码
|
|||
/// </summary>
|
|||
[Required] |
|||
[MaxLength(DataDictionaryMaxLengths.Code)] |
|||
public string Code { get; private set; } |
|||
|
|||
/// <summary>
|
|||
/// 显示名
|
|||
/// </summary>
|
|||
[Required] |
|||
[MaxLength(DataDictionaryMaxLengths.DisplayText)] |
|||
public string DisplayText { get; private set; } |
|||
|
|||
|
|||
/// <summary>
|
|||
/// 描述
|
|||
/// </summary>
|
|||
[Required] |
|||
[MaxLength(DataDictionaryMaxLengths.Description)] |
|||
public string Description { get; private set; } |
|||
|
|||
/// <summary>
|
|||
/// 字典明细集合
|
|||
/// </summary>
|
|||
public List<DataDictionaryDetail> Details { get; private set; } |
|||
|
|||
private DataDictionary() |
|||
{ |
|||
Details = new List<DataDictionaryDetail>(); |
|||
} |
|||
|
|||
public DataDictionary( |
|||
Guid id, |
|||
string code, |
|||
string displayText, |
|||
string description = null, |
|||
Guid? tenantId = null) : base(id) |
|||
{ |
|||
SetProperties(code, displayText, description, tenantId); |
|||
Details = new List<DataDictionaryDetail>(); |
|||
} |
|||
|
|||
private void SetProperties(string code, string displayText, string description, Guid? tenantId) |
|||
{ |
|||
SetCode(code); |
|||
SetDisplayText(displayText); |
|||
SetDescription(description); |
|||
SetTenantId(tenantId); |
|||
} |
|||
|
|||
public void SetTenantId(Guid? tenantId) |
|||
{ |
|||
TenantId = TenantId; |
|||
} |
|||
|
|||
public void SetCode(string code) |
|||
{ |
|||
Guard.NotNullOrWhiteSpace(code, nameof(code), DataDictionaryMaxLengths.Code); |
|||
Code = code; |
|||
} |
|||
|
|||
private void SetDisplayText(string displayText) |
|||
{ |
|||
Guard.NotNullOrWhiteSpace(displayText, nameof(displayText), DataDictionaryMaxLengths.DisplayText); |
|||
DisplayText = displayText; |
|||
} |
|||
|
|||
private void SetDescription(string description) |
|||
{ |
|||
Guard.Length(description, nameof(description), DataDictionaryMaxLengths.Description); |
|||
Description = description; |
|||
} |
|||
|
|||
public void AddDetail(Guid dataDictionayDetailId, string code, string displayText, int order = 1, |
|||
string description = "", bool isEnabled = true) |
|||
{ |
|||
if (Details.Any(e => e.Code == code.Trim())) |
|||
{ |
|||
throw new DataDictionaryDomainException(message: "数据字典项已存在"); |
|||
} |
|||
|
|||
Details.Add(new DataDictionaryDetail(dataDictionayDetailId, Id, code, displayText, order, isEnabled, |
|||
description)); |
|||
} |
|||
|
|||
public void RemoveDetail(string detailCode) |
|||
{ |
|||
var detail = Details.FirstOrDefault(item => item.Code == detailCode); |
|||
if (null == detail) |
|||
{ |
|||
throw new DataDictionaryDomainException(message: "数据字典项不存在"); |
|||
} |
|||
|
|||
Details.Remove(detail); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,92 @@ |
|||
using System; |
|||
using CompanyName.ProjectName.Extensions.Customs; |
|||
using Volo.Abp.Domain.Entities.Auditing; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Aggregates |
|||
{ |
|||
public class DataDictionaryDetail : AuditedEntity<Guid> |
|||
{ |
|||
/// <summary>
|
|||
/// 所属字典Id
|
|||
/// </summary>
|
|||
public Guid DataDictionaryId { get; private set; } |
|||
|
|||
/// <summary>
|
|||
/// 字典明细编码
|
|||
/// </summary>
|
|||
public string Code { get; private set; } |
|||
|
|||
/// <summary>
|
|||
/// 展现列表时排序用
|
|||
/// </summary>
|
|||
public int Order { get; private set; } |
|||
|
|||
/// <summary>
|
|||
/// 英文显示名
|
|||
/// </summary>
|
|||
public string DisplayText { get; private set; } |
|||
|
|||
|
|||
/// <summary>
|
|||
/// 描述
|
|||
/// </summary>
|
|||
public string Description { get; private set; } |
|||
|
|||
/// <summary>
|
|||
/// 启/停用(默认启用)
|
|||
/// </summary>
|
|||
public bool IsEnabled { get; private set; } |
|||
|
|||
private DataDictionaryDetail() |
|||
{ |
|||
} |
|||
|
|||
|
|||
public DataDictionaryDetail(Guid id, Guid dataDictionaryId, string code, string displayText, int order, |
|||
bool isEnabled = true, string description = null) |
|||
{ |
|||
DataDictionaryId = dataDictionaryId; |
|||
Id = id; |
|||
SetProperties(code, displayText, order, isEnabled, description); |
|||
} |
|||
|
|||
|
|||
public void SetProperties(string code, string displayText, int order, bool isEnabled = true, |
|||
string description = null) |
|||
{ |
|||
SetCode(code); |
|||
SetOrder(order); |
|||
SetDisplayText(displayText); |
|||
SetIsEnabled(isEnabled); |
|||
SetDescription(description); |
|||
} |
|||
|
|||
public void SetCode(string code) |
|||
{ |
|||
Guard.NotNullOrWhiteSpace(code, nameof(code), DataDictionaryMaxLengths.Code); |
|||
Code = code; |
|||
} |
|||
|
|||
public void SetOrder(int order) |
|||
{ |
|||
Order = order; |
|||
} |
|||
|
|||
public void SetDisplayText(string displayText) |
|||
{ |
|||
Guard.NotNullOrWhiteSpace(displayText, nameof(displayText), DataDictionaryMaxLengths.DisplayText); |
|||
DisplayText = displayText; |
|||
} |
|||
|
|||
public void SetIsEnabled(bool isEnabled) |
|||
{ |
|||
IsEnabled = isEnabled; |
|||
} |
|||
|
|||
public void SetDescription(string description) |
|||
{ |
|||
Guard.Length(description, nameof(description), DataDictionaryMaxLengths.Description); |
|||
Description = description; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,37 @@ |
|||
using System; |
|||
using System.Threading.Tasks; |
|||
using CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Aggregates; |
|||
using Volo.Abp.Data; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.Guids; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries |
|||
{ |
|||
public class DataDictionaryDataSeedContributor : IDataSeedContributor, ITransientDependency |
|||
{ |
|||
private readonly IDataDictionaryRepository _dataDictionaryRepository; |
|||
private readonly IGuidGenerator _guidGenerator; |
|||
|
|||
public DataDictionaryDataSeedContributor( |
|||
IDataDictionaryRepository dataDictionaryRepository, |
|||
IGuidGenerator guidGenerator) |
|||
{ |
|||
_dataDictionaryRepository = dataDictionaryRepository; |
|||
_guidGenerator = guidGenerator; |
|||
} |
|||
|
|||
public async Task SeedAsync(DataSeedContext context) |
|||
{ |
|||
var gender = await _dataDictionaryRepository.FindByCodeAsync("Gender"); |
|||
if (gender == null) |
|||
{ |
|||
var id = DataDictionaryManagementConsts.SeedDataDictionaryId;//_guidGenerator.Create();
|
|||
var entity = new DataDictionary(id, "Gender", "性别", "单元测试"); |
|||
entity.AddDetail(_guidGenerator.Create(), "Man", "男", 1, "单元测试"); |
|||
entity.AddDetail(_guidGenerator.Create(), "WoMan", "女", 2, "单元测试"); |
|||
entity.AddDetail(_guidGenerator.Create(), "None", "未知", 3, "单元测试", false); |
|||
await _dataDictionaryRepository.InsertAsync(entity); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,99 @@ |
|||
using System; |
|||
using System.Linq; |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
using CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Aggregates; |
|||
using CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Exceptions; |
|||
using Volo.Abp.Domain.Services; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries |
|||
{ |
|||
public class DataDictionaryManager : DomainService |
|||
{ |
|||
private readonly IDataDictionaryRepository _dataDictionaryRepository; |
|||
|
|||
public DataDictionaryManager(IDataDictionaryRepository dataDictionaryRepository) |
|||
{ |
|||
_dataDictionaryRepository = dataDictionaryRepository; |
|||
} |
|||
|
|||
public Task<DataDictionary> FindByIdAsync( |
|||
Guid id, |
|||
bool includeDetails = true, |
|||
CancellationToken cancellationToken = default) |
|||
{ |
|||
return _dataDictionaryRepository.FindByIdAsync(id, includeDetails, cancellationToken); |
|||
} |
|||
|
|||
public Task<DataDictionary> FindByCodeAsync( |
|||
string code, |
|||
bool includeDetails = true, |
|||
CancellationToken cancellationToken = default) |
|||
{ |
|||
return _dataDictionaryRepository.FindByCodeAsync(code, includeDetails, cancellationToken); |
|||
} |
|||
|
|||
public Task<DataDictionary> FindByDisplayTextAsync( |
|||
string displayText, |
|||
bool includeDetails = true, |
|||
CancellationToken cancellationToken = default) |
|||
{ |
|||
return _dataDictionaryRepository.FindByDisplayTextAsync(displayText, includeDetails, cancellationToken); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 创建字典类型
|
|||
/// </summary>
|
|||
/// <param name="code"></param>
|
|||
/// <param name="displayText"></param>
|
|||
/// <param name="description"></param>
|
|||
public Task<DataDictionary> CreateAsync(string code, string displayText, string description) |
|||
{ |
|||
var entity = new DataDictionary(GuidGenerator.Create(), code, displayText, description); |
|||
return _dataDictionaryRepository.InsertAsync(entity); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 新增字典明细
|
|||
/// </summary>
|
|||
/// <param name="dataDictionaryId"></param>
|
|||
/// <param name="code"></param>
|
|||
/// <param name="displayText"></param>
|
|||
/// <param name="description"></param>
|
|||
/// <param name="order"></param>
|
|||
/// <exception cref="DataDictionaryDomainException"></exception>
|
|||
public async Task<DataDictionary> CreateDetailAsync(Guid dataDictionaryId, string code, string displayText, |
|||
string description, |
|||
int order) |
|||
{ |
|||
var entity = await _dataDictionaryRepository.FindByIdAsync(dataDictionaryId); |
|||
if (entity == null) |
|||
throw new DataDictionaryDomainException(message: "数据字典不存在"); |
|||
if (entity.Details.Any(e => e.Code == code.Trim())) |
|||
{ |
|||
throw new DataDictionaryDomainException(message: $"字典项{code}已存在"); |
|||
} |
|||
|
|||
entity.AddDetail(GuidGenerator.Create(), code, displayText, order, description); |
|||
return await _dataDictionaryRepository.UpdateAsync(entity); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 设置字典明细状态
|
|||
/// </summary>
|
|||
public async Task<DataDictionary> SetStatus(Guid dataDictionaryId, Guid dataDictionayDetailId, bool isEnabled) |
|||
{ |
|||
var entity = await _dataDictionaryRepository.FindByIdAsync(dataDictionaryId); |
|||
if (entity == null) |
|||
throw new DataDictionaryDomainException(message: "数据字典不存在"); |
|||
var detail = entity.Details.FirstOrDefault(e => e.Id == dataDictionayDetailId); |
|||
if (null == detail) |
|||
{ |
|||
throw new DataDictionaryDomainException(message: $"字典项不存在"); |
|||
} |
|||
|
|||
detail.SetIsEnabled(isEnabled); |
|||
return await _dataDictionaryRepository.UpdateAsync(entity); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,21 @@ |
|||
using System; |
|||
using System.Runtime.Serialization; |
|||
using Microsoft.Extensions.Logging; |
|||
using Volo.Abp; |
|||
|
|||
namespace CompanyName.ProjectName.DataDictionaryManagement.DataDictionaries.Exceptions |
|||
{ |
|||
public class DataDictionaryDomainException : UserFriendlyException |
|||
{ |
|||
public DataDictionaryDomainException(string message, string code = null, string details = null, |
|||
Exception innerException = null, LogLevel logLevel = LogLevel.Warning) : base(message, code, details, |
|||
innerException, logLevel) |
|||
{ |
|||
} |
|||
|
|||
public DataDictionaryDomainException(SerializationInfo serializationInfo, StreamingContext context) : base( |
|||
serializationInfo, context) |
|||
{ |
|||
} |
|||
} |
|||
} |
|||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue