Full Code of personball/abplus for AI

master df6418a615e5 cached
460 files
1.6 MB
455.2k tokens
956 symbols
1 requests
Download .txt
Showing preview only (1,814K chars total). Download the full file or copy to clipboard to get everything.
Repository: personball/abplus
Branch: master
Commit: df6418a615e5
Files: 460
Total size: 1.6 MB

Directory structure:
gitextract_3b8q698k/

├── .gitignore
├── .nuget/
│   └── NuGet.Config
├── Abplus.sln
├── LICENSE
├── Nupkg/
│   ├── pack.bat
│   └── push-all-packages-in-current_folder.bat
├── README.md
├── common.props
├── src/
│   ├── Abplus/
│   │   ├── Abplus.csproj
│   │   ├── Abplus.nuspec
│   │   ├── Application/
│   │   │   ├── Navigation/
│   │   │   │   └── MenuItemDefinitionPlugInExtensions.cs
│   │   │   └── Services/
│   │   │       └── Dto/
│   │   │           ├── IHasDateTimeFilterRequest.cs
│   │   │           ├── IHasKeywordFilterRequest.cs
│   │   │           ├── IPaginationResultRequest.cs
│   │   │           └── PaginationRequestInput.cs
│   │   ├── Currencies/
│   │   │   └── ChineseCentExtension.cs
│   │   ├── Events/
│   │   │   └── Bus/
│   │   │       └── ChangedEventData.cs
│   │   ├── Extensions/
│   │   │   ├── DateTimeExtensions.cs
│   │   │   ├── EnumExtensions.cs
│   │   │   ├── GuidExtensions.cs
│   │   │   ├── IntExtension.cs
│   │   │   ├── NullableDateTimeExtensions.cs
│   │   │   └── StringExtensions.cs
│   │   ├── IO/
│   │   │   ├── IFileStorage.cs
│   │   │   └── NullFileStorage.cs
│   │   ├── Interceptors/
│   │   │   ├── AsyncHandlingInterceptor.cs
│   │   │   └── IAsyncInterceptorHandler.cs
│   │   ├── Json/
│   │   │   └── LargeNumJsonConverter.cs
│   │   ├── MqMessages/
│   │   │   ├── IMqMessagePublisher.cs
│   │   │   ├── MessageTrackers/
│   │   │   │   ├── DefaultInMemoryMessageTracker.cs
│   │   │   │   └── IMessageTracker.cs
│   │   │   └── NullMqMessagePublisher.cs
│   │   ├── PlugIns/
│   │   │   ├── IPlugInAreaRegistration.cs
│   │   │   ├── IPlugInAuthorizationProvider.cs
│   │   │   └── IPlugInNavigationProvider.cs
│   │   ├── QrCode/
│   │   │   └── IQrCodeScannedRealTimeNotifier.cs
│   │   ├── Reservations/
│   │   │   ├── Events/
│   │   │   │   ├── ReservationCancelledEventData.cs
│   │   │   │   ├── ReservationEventDataBase.cs
│   │   │   │   └── ReservationSuccessEventData.cs
│   │   │   ├── IReservation.cs
│   │   │   ├── IReservationBody.cs
│   │   │   ├── ReservationBase.cs
│   │   │   └── ReservationBodyBase.cs
│   │   ├── Runtime/
│   │   │   └── OS/
│   │   │       ├── EnvDescription.cs
│   │   │       └── EnvironmentHelper.cs
│   │   └── TimeRanges/
│   │       └── TimeRange.cs
│   ├── Abplus.AspNetCore.SignalR/
│   │   ├── Abplus.AspNetCore.SignalR.csproj
│   │   ├── Abplus.AspNetCore.SignalR.nuspec
│   │   ├── Configuration/
│   │   │   └── Startup/
│   │   │       └── RedisOnlineClientManagerConfiguationExtensions.cs
│   │   ├── RealTime/
│   │   │   ├── IRedisOnlineClientManagerModuleConfig.cs
│   │   │   ├── RedisOnlineClientManager.cs
│   │   │   ├── RedisOnlineClientManagerModule.cs
│   │   │   └── RedisOnlineClientManagerModuleConfig.cs
│   │   └── Web/
│   │       └── SignalR/
│   │           └── QrScan/
│   │               ├── SignalRQrCodeScannedRealTimeNotifier.cs
│   │               └── SignalRQrCodeScannedRealTimeNotifierModule.cs
│   ├── Abplus.IO.AliyunOSSStorage/
│   │   ├── Abplus.IO.AliyunOSSStorage.csproj
│   │   ├── Configuration/
│   │   │   └── Startup/
│   │   │       └── AliyunOSSStorageConfigurationExtensions.cs
│   │   ├── IO/
│   │   │   ├── AliyunOSSStorage/
│   │   │   │   ├── AliyunOSSStorage.cs
│   │   │   │   ├── AliyunOSSStorageModule.cs
│   │   │   │   ├── AliyunOSSStorageModuleConfiguration.cs
│   │   │   │   └── IAliyunOSSStorageModuleConfiguration.cs
│   │   │   └── AliyunOSSStorageConsts.cs
│   │   └── Localization/
│   │       ├── AliyunOSSStorageLocalizationConfigurer.cs
│   │       └── SourceFiles/
│   │           ├── AliyunOSSStorage-zh-Hans.xml
│   │           └── AliyunOSSStorage.xml
│   ├── Abplus.IO.AzureBlobStorage/
│   │   ├── Abplus.IO.AzureBlobStorage.csproj
│   │   ├── Abplus.IO.AzureBlobStorage.nuspec
│   │   ├── Configuration/
│   │   │   └── Startup/
│   │   │       └── AzureBlobFileStorageConfigurationExtensions.cs
│   │   ├── IO/
│   │   │   ├── AzureBlobStorage/
│   │   │   │   ├── AzureBlobFileStorage.cs
│   │   │   │   ├── AzureBlobFileStorageConfig.cs
│   │   │   │   ├── AzureBlobFileStorageModule.cs
│   │   │   │   ├── AzureBlobFileStorageModuleConfig.cs
│   │   │   │   ├── Configuration/
│   │   │   │   │   ├── AzureBlobFileStorageSetting.cs
│   │   │   │   │   ├── AzureBlobFileStorageSettingNames.cs
│   │   │   │   │   └── AzureBlobFileStorageSettingProvider.cs
│   │   │   │   ├── IAzureBlobFileStorageConfig.cs
│   │   │   │   └── IAzureBlobFileStorageModuleConfig.cs
│   │   │   └── AzureBlobStorageConsts.cs
│   │   └── Localization/
│   │       ├── AzureBlobStorageLocalizationConfigurer.cs
│   │       └── SourceFiles/
│   │           ├── AbplusAzureBlobStorage-zh-Hans.xml
│   │           └── AbplusAzureBlobStorage.xml
│   ├── Abplus.IO.LocalFileSystem/
│   │   ├── Abplus.IO.LocalFileSystem.csproj
│   │   ├── IO/
│   │   │   ├── LocalFileSystem/
│   │   │   │   ├── ILocalFileSystemStorageConfig.cs
│   │   │   │   ├── LocalFileSystemStorage.cs
│   │   │   │   ├── LocalFileSystemStorageConfig.cs
│   │   │   │   ├── LocalFileSystemStorageModule.cs
│   │   │   │   ├── LocalFileSystemStorageSettingNames.cs
│   │   │   │   └── LocalFileSystemStorageSettingProvider.cs
│   │   │   └── LocalFileSystemConsts.cs
│   │   └── Localization/
│   │       ├── LocalFileSystemLocalizationConfigurer.cs
│   │       └── SourceFiles/
│   │           ├── AbplusLocalFileSystem-zh-Hans.xml
│   │           └── AbplusLocalFileSystem.xml
│   ├── Abplus.MqMessages/
│   │   ├── Abplus.MqMessages.csproj
│   │   ├── Abplus.MqMessages.nuspec
│   │   ├── Configuration/
│   │   │   └── Startup/
│   │   │       └── ExceptionLogInterceptorRegistrar.cs
│   │   └── MqMessages/
│   │       ├── AuditingStores/
│   │       │   └── AuditInfoMqMessage.cs
│   │       ├── AutoGeneration/
│   │       │   └── DontGenerateMqMessage.cs
│   │       ├── AutoMapper/
│   │       │   └── AutoEventsMapToMqMessagesHelper.cs
│   │       ├── Handlers/
│   │       │   └── EventDataPublishHandlerBase.cs
│   │       └── MqHandlers/
│   │           ├── AbpMqHandlerBase.cs
│   │           └── ExceptionLoggling/
│   │               ├── ExceptionLogAttribute.cs
│   │               ├── ExceptionLogHandler.cs
│   │               └── ExceptionLogInterceptor.cs
│   ├── Abplus.MqMessages.AuditingConsumerHandler/
│   │   ├── Abplus.MqMessages.AuditingConsumerHandler.csproj
│   │   ├── Abplus.MqMessages.AuditingConsumerHandler.nuspec
│   │   ├── Auditing/
│   │   │   └── AuditingStore/
│   │   │       ├── AuditingConsumerRebusHandlerModule.cs
│   │   │       ├── AuditingConsumerRebusHandlerModuleConfig.cs
│   │   │       ├── IAuditingConsumerRebusHandlerModuleConfig.cs
│   │   │       └── MqMessageAuditingStoreRebusHandler.cs
│   │   └── Configuration/
│   │       └── Startup/
│   │           └── AuditingConsumerRebusHandlerConfigurationExtensions.cs
│   ├── Abplus.MqMessages.AuditingStore/
│   │   ├── Abplus.MqMessages.AuditingStore.csproj
│   │   ├── Abplus.MqMessages.AuditingStore.nuspec
│   │   └── Auditing/
│   │       └── AuditingStores/
│   │           ├── MqMessageAuditingStore.cs
│   │           └── MqMessageAuditingStoreModule.cs
│   ├── Abplus.MqMessages.IndexToES/
│   │   ├── Abplus.MqMessages.IndexToES.csproj
│   │   ├── Abplus.MqMessages.IndexToES.nuspec
│   │   ├── DateTimeExtensions.cs
│   │   ├── IndexFreq.cs
│   │   └── MqMessages/
│   │       └── MqHandlers/
│   │           ├── MqMessageIndexToESHandlerBase.cs
│   │           ├── MqMessageIndexToESHandlerBuilder.cs
│   │           ├── MqMessageIndexToESHandlerBuilder.tt
│   │           ├── MqMessagesT4Register.cs
│   │           └── T4MultipleOutputManager.ttinclude
│   ├── Abplus.MqMessages.RebusCore/
│   │   ├── Abplus.MqMessages.RebusCore.csproj
│   │   ├── Abplus.MqMessages.RebusCore.nuspec
│   │   └── MqMessages/
│   │       └── Publishers/
│   │           ├── RebusRabbitMqPublisher.cs
│   │           └── RebusRabbitMqPublisherCoreModule.cs
│   ├── Abplus.MqMessages.RebusRabbitMqConsumer/
│   │   ├── Abplus.MqMessages.RebusRabbitMqConsumer.csproj
│   │   ├── Abplus.MqMessages.RebusRabbitMqConsumer.nuspec
│   │   ├── Configuration/
│   │   │   └── Startup/
│   │   │       └── RebusRabbitMqConsumerConfigurationExtensions.cs
│   │   └── MqMessages/
│   │       └── Consumers/
│   │           ├── IRebusRabbitMqConsumerModuleConfig.cs
│   │           ├── RebusRabbitMqConsumerModule.cs
│   │           └── RebusRabbitMqConsumerModuleConfig.cs
│   ├── Abplus.MqMessages.RebusRabbitMqPublisher/
│   │   ├── Abplus.MqMessages.RebusRabbitMqPublisher.csproj
│   │   ├── Abplus.MqMessages.RebusRabbitMqPublisher.nuspec
│   │   ├── Configuration/
│   │   │   └── Startup/
│   │   │       └── RebusRabbitMqPublisherConfigurationExtensions.cs
│   │   └── MqMessages/
│   │       └── Publishers/
│   │           ├── IRebusRabbitMqPublisherModuleConfig.cs
│   │           ├── RebusRabbitMqPublisherModule.cs
│   │           └── RebusRabbitMqPublisherModuleConfig.cs
│   ├── Abplus.MqMessages.RedisStoreMessageTracker/
│   │   ├── Abplus.MqMessages.RedisStoreMessageTracker.csproj
│   │   ├── Abplus.MqMessages.RedisStoreMessageTracker.nuspec
│   │   └── MqMessages/
│   │       └── MessageTrackers/
│   │           ├── RedisStoreMessageTracker.cs
│   │           └── RedisStoreMessageTrackerModule.cs
│   ├── Abplus.T4.PermissionsFromJson/
│   │   ├── Abplus.T4.PermissionsFromJson.csproj
│   │   ├── Abplus.T4.PermissionsFromJson.nuspec
│   │   └── Authorization/
│   │       └── Builders/
│   │           ├── BuilderUtils.cs
│   │           ├── PermissionBuilder.cs
│   │           ├── PermissionBuilder.tt
│   │           ├── Permissions/
│   │           │   └── Sample.json
│   │           └── T4MultipleOutputManager.ttinclude
│   └── Samples/
│       ├── AuditingConsumer/
│       │   ├── Sample.AuditingConsumerHandler/
│       │   │   ├── Program.cs
│       │   │   ├── Sample.AuditingConsumerHandler.csproj
│       │   │   ├── SampleAuditingConsumerHandlerBootstrap.cs
│       │   │   └── SampleAuditingConsumerHandlerModule.cs
│       │   └── Sample.MqMessageAuditingStore/
│       │       ├── Application/
│       │       │   ├── ITestAuditingStoreAppService.cs
│       │       │   ├── TestAuditingInput.cs
│       │       │   └── TestAuditingStoreAppService.cs
│       │       ├── BackgroudWorker/
│       │       │   └── TestWorker.cs
│       │       ├── Program.cs
│       │       ├── Sample.MqMessageAuditingStore.csproj
│       │       ├── SampleMqMessageAuditingStoreBootstrap.cs
│       │       └── SampleMqMessageAuditingStoreModule.cs
│       ├── FileStorage/
│       │   ├── Sample.AliyunOSSStorage/
│       │   │   ├── BackgroundWorker/
│       │   │   │   └── TestWorker.cs
│       │   │   ├── Program.cs
│       │   │   ├── Sample.AliyunOSSStorageConsole.csproj
│       │   │   ├── SampleAliyunOSSStorageBootstrap.cs
│       │   │   └── SampleAliyunOSSStorageModule.cs
│       │   ├── Sample.AzureBlobStorage/
│       │   │   ├── BackgroundWorker/
│       │   │   │   └── TestWorker.cs
│       │   │   ├── Program.cs
│       │   │   ├── Sample.AzureBlobStorageConsole.csproj
│       │   │   ├── SampleAzureBlobStorageBootstrap.cs
│       │   │   └── SampleAzureBlobStorageModule.cs
│       │   └── Sample.LocalFileSystem/
│       │       ├── Program.cs
│       │       ├── Sample.LocalFileSystemConsole.csproj
│       │       ├── SampleLocalFileSystemBootstrap.cs
│       │       └── SampleLocalFileSystemModule.cs
│       ├── Sample.DotNetCoreConsumerHost/
│       │   ├── Handlers/
│       │   │   └── TestHandler.cs
│       │   ├── Program.cs
│       │   ├── Sample.DotNetCoreConsumerHost.csproj
│       │   ├── SampleConsumerHostBootstrap.cs
│       │   └── SampleConsumerHostModule.cs
│       ├── Sample.DotNetCorePublisherHost/
│       │   ├── BackgroundWorker/
│       │   │   └── TestWorker.cs
│       │   ├── Program.cs
│       │   ├── Sample.DotNetCorePublisherHost.csproj
│       │   ├── SamplePublisherHostBootstrap.cs
│       │   └── SamplePublisherHostModule.cs
│       ├── Sample.DotNetFxConsumerHost/
│       │   ├── App.config
│       │   ├── DotNetFxConsumerHostBootstrap.cs
│       │   ├── DotNetFxConsumerHostModule.cs
│       │   ├── Handlers/
│       │   │   └── TestHandler.cs
│       │   ├── NLog.config
│       │   ├── NLog.xsd
│       │   ├── Program.cs
│       │   ├── Properties/
│       │   │   └── AssemblyInfo.cs
│       │   ├── Sample.DotNetFxConsumerHost.csproj
│       │   └── packages.config
│       ├── Sample.DotNetFxPublisherHost/
│       │   ├── App.config
│       │   ├── BackgroundWorker/
│       │   │   └── TestWorker.cs
│       │   ├── DotNetFxPublisherHostBootstrap.cs
│       │   ├── DotNetFxPublisherHostModule.cs
│       │   ├── NLog.config
│       │   ├── NLog.xsd
│       │   ├── Program.cs
│       │   ├── Properties/
│       │   │   └── AssemblyInfo.cs
│       │   ├── Sample.DotNetFxPublisherHost.csproj
│       │   └── packages.config
│       └── Sample.MqMessages/
│           ├── Sample.MqMessages.csproj
│           └── TestMessage.cs
└── src2/
    ├── Abplus/
    │   ├── Abplus.csproj
    │   ├── Abplus.nuspec
    │   ├── AbplusConsts.cs
    │   ├── Application/
    │   │   ├── Navigation/
    │   │   │   └── MenuItemDefinitionPlugInExtensions.cs
    │   │   └── Services/
    │   │       └── Dto/
    │   │           ├── IHasDateTimeFilterRequest.cs
    │   │           ├── IHasKeywordFilterRequest.cs
    │   │           ├── IPaginationResultRequest.cs
    │   │           └── PaginationRequestInput.cs
    │   ├── Currencies/
    │   │   └── ChineseCentExtension.cs
    │   ├── Events/
    │   │   └── Bus/
    │   │       ├── ChangedEventData.cs
    │   │       └── IShouldBePublish.cs
    │   ├── Extensions/
    │   │   ├── DateTimeExtensions.cs
    │   │   ├── EnumExtensions.cs
    │   │   ├── GuidExtensions.cs
    │   │   ├── IntExtension.cs
    │   │   ├── NullableDateTimeExtensions.cs
    │   │   └── StringExtensions.cs
    │   ├── Interceptors/
    │   │   ├── AsyncHandlingInterceptor.cs
    │   │   └── IAsyncInterceptorHandler.cs
    │   ├── Json/
    │   │   └── LargeNumJsonConverter.cs
    │   ├── MqMessages/
    │   │   ├── IMqMessagePublisher.cs
    │   │   ├── MessageTrackers/
    │   │   │   ├── DefaultInMemoryMessageTracker.cs
    │   │   │   └── IMessageTracker.cs
    │   │   └── NullMqMessagePublisher.cs
    │   ├── PlugIns/
    │   │   ├── IPlugInAreaRegistration.cs
    │   │   ├── IPlugInAuthorizationProvider.cs
    │   │   └── IPlugInNavigationProvider.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── QrCode/
    │   │   └── IQrCodeScannedRealTimeNotifier.cs
    │   ├── Reservations/
    │   │   ├── Events/
    │   │   │   ├── ReservationCancelledEventData.cs
    │   │   │   ├── ReservationEventDataBase.cs
    │   │   │   └── ReservationSuccessEventData.cs
    │   │   ├── IReservation.cs
    │   │   ├── IReservationBody.cs
    │   │   ├── ReservationBase.cs
    │   │   └── ReservationBodyBase.cs
    │   ├── TimeRanges/
    │   │   └── TimeRange.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.Common/
    │   ├── Abplus.Common.csproj
    │   ├── Abplus.Common.nuspec
    │   ├── Application/
    │   │   └── Services/
    │   │       └── Dto/
    │   │           ├── IPagedQueryInput.cs
    │   │           └── PagedQueryInput.cs
    │   ├── Linq/
    │   │   └── Extensions/
    │   │       └── IQueryableExtension.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.EntityFramework/
    │   ├── Abplus.EntityFramework.csproj
    │   ├── Abplus.EntityFramework.nuspec
    │   ├── App.config
    │   ├── EntityFramework/
    │   │   ├── DbContextUtils.cs
    │   │   └── DbModelBuilderExtensions.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   └── packages.config
    ├── Abplus.Events.Producer/
    │   ├── Abplus.Events.Producer.csproj
    │   ├── Abplus.Events.Producer.nuspec
    │   ├── Events/
    │   │   └── Producer/
    │   │       ├── AbpEventsProducerModule.cs
    │   │       ├── Handler/
    │   │       │   └── PublishAllEventsHandler.cs
    │   │       ├── IProducer.cs
    │   │       └── NullProducer.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   └── packages.config
    ├── Abplus.MqMessages/
    │   ├── Abplus.MqMessages.csproj
    │   ├── Abplus.MqMessages.nuspec
    │   ├── Configuration/
    │   │   └── Startup/
    │   │       └── ExceptionLogInterceptorRegistrar.cs
    │   ├── MqMessages/
    │   │   ├── AutoMapper/
    │   │   │   └── AutoEventsMapToMqMessagesHelper.cs
    │   │   ├── Handlers/
    │   │   │   └── EventDataPublishHandlerBase.cs
    │   │   └── MqHandlers/
    │   │       ├── AbpMqHandlerBase.cs
    │   │       └── ExceptionLoggling/
    │   │           ├── ExceptionLogAttribute.cs
    │   │           ├── ExceptionLogHandler.cs
    │   │           └── ExceptionLogInterceptor.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.MqMessages.AuditingConsumerHandler/
    │   ├── Abplus.MqMessages.AuditingConsumerRebusHandler.csproj
    │   ├── Auditing/
    │   │   └── AuditingStore/
    │   │       ├── AuditingConsumerRebusHandlerModule.cs
    │   │       ├── AuditingConsumerRebusHandlerModuleConfig.cs
    │   │       ├── IAuditingConsumerRebusHandlerModuleConfig.cs
    │   │       └── MqMessageAuditingStoreRebusHandler.cs
    │   ├── Configuration/
    │   │   └── Startup/
    │   │       └── AuditingConsumerRebusHandlerConfigurationExtensions.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.MqMessages.AuditingStore/
    │   ├── Abplus.MqMessages.AuditingStore.csproj
    │   ├── Abplus.MqMessages.AuditingStore.nuspec
    │   ├── Auditing/
    │   │   └── AuditingStores/
    │   │       ├── AuditInfoMqMessage.cs
    │   │       ├── MqMessageAuditingStore.cs
    │   │       └── MqMessageAuditingStoreModule.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.MqMessages.IndexToES/
    │   ├── Abplus.MqMessages.IndexToES.csproj
    │   ├── Abplus.MqMessages.IndexToES.nuspec
    │   ├── DateTimeExtensions.cs
    │   ├── IndexFreq.cs
    │   ├── MqMessages/
    │   │   └── MqHandlers/
    │   │       ├── MqMessageIndexToESHandlerBase.cs
    │   │       ├── MqMessageIndexToESHandlerBuilder.cs
    │   │       ├── MqMessageIndexToESHandlerBuilder.tt
    │   │       ├── MqMessagesT4Register.cs
    │   │       └── T4MultipleOutputManager.ttinclude
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.MqMessages.RebusConsumer/
    │   ├── Abplus.MqMessages.RebusConsumer.nuspec
    │   ├── Abplus.MqMessages.RebusRabbitMqConsumer.csproj
    │   ├── Configuration/
    │   │   └── Startup/
    │   │       └── RebusRabbitMqConsumerConfigurationExtensions.cs
    │   ├── MqMessages/
    │   │   └── Consumers/
    │   │       ├── IRebusRabbitMqConsumerModuleConfig.cs
    │   │       ├── RebusRabbitMqConsumerModule.cs
    │   │       └── RebusRabbitMqConsumerModuleConfig.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.MqMessages.RebusCore/
    │   ├── Abplus.MqMessages.RebusCore.csproj
    │   ├── Abplus.MqMessages.RebusCore.nuspec
    │   ├── MqMessages/
    │   │   └── Publishers/
    │   │       ├── RebusRabbitMqPublisher.cs
    │   │       └── RebusRabbitMqPublisherCoreModule.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.MqMessages.RebusPublisher/
    │   ├── Abplus.MqMessages.RebusPublisher.nuspec
    │   ├── Abplus.MqMessages.RebusRabbitMqPublisher.csproj
    │   ├── Configuration/
    │   │   └── Startup/
    │   │       └── RebusRabbitMqPublisherConfigurationExtensions.cs
    │   ├── MqMessages/
    │   │   └── Publishers/
    │   │       ├── IRebusRabbitMqPublisherModuleConfig.cs
    │   │       ├── RebusRabbitMqPublisherModule.cs
    │   │       └── RebusRabbitMqPublisherModuleConfig.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.MqMessages.RedisStoreMessageTracker/
    │   ├── Abplus.MqMessages.RedisStoreMessageTracker.csproj
    │   ├── Abplus.MqMessages.RedisStoreMessageTracker.nuspec
    │   ├── MqMessages/
    │   │   └── MessageTrackers/
    │   │       ├── RedisStoreMessageTracker.cs
    │   │       └── RedisStoreMessageTrackerModule.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.RebusRabbitmqConsumer/
    │   ├── Abplus.RebusRabbitmqConsumer.csproj
    │   ├── Abplus.RebusRabbitmqConsumer.nuspec
    │   ├── Configuration/
    │   │   └── Startup/
    │   │       └── AbpRebusRabbitMqConsumerConfigurationExtensions.cs
    │   ├── Events/
    │   │   └── Consumer/
    │   │       └── RebusRabbitMq/
    │   │           ├── AbpRebusRabbitMqConsumerModule.cs
    │   │           ├── AbpRebusRabbitMqConsumerModuleConfig.cs
    │   │           └── IAbpRebusRabbitMqConsumerModuleConfig.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   └── packages.config
    ├── Abplus.RebusRabbitmqProducer/
    │   ├── Abplus.RebusRabbitmqProducer.csproj
    │   ├── Abplus.RebusRabbitmqProducer.nuspec
    │   ├── Configuration/
    │   │   └── Startup/
    │   │       └── AbpRebusRabbitMqProducerConfigurationExtensions.cs
    │   ├── Events/
    │   │   └── Producer/
    │   │       └── RebusRabbitMq/
    │   │           ├── AbpRebusRabbitMqProducerModule.cs
    │   │           ├── AbpRebusRabbitMqProducerModuleConfig.cs
    │   │           ├── IAbpRebusRabbitMqProducerModuleConfig.cs
    │   │           └── RebusRabbitMqProducer.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.T4.PermissionsFromJson/
    │   ├── Abplus.T4.PermissionsFromJson.csproj
    │   ├── Abplus.T4.PermissionsFromJson.nuspec
    │   ├── Authorization/
    │   │   └── Builders/
    │   │       ├── BuilderUtils.cs
    │   │       ├── PermissionBuilder.cs
    │   │       ├── PermissionBuilder.tt
    │   │       ├── Permissions/
    │   │       │   └── Sample.json
    │   │       └── T4MultipleOutputManager.ttinclude
    │   └── Properties/
    │       └── AssemblyInfo.cs
    ├── Abplus.Web.Api/
    │   ├── Abplus.Web.Api.csproj
    │   ├── Abplus.Web.Api.nuspec
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── WebApi/
    │   │   └── JsonMediaTypeFormatterExtension.cs
    │   ├── WebApiVersionRoute/
    │   │   ├── RoutingConstraints/
    │   │   │   ├── VersionConstraint.cs
    │   │   │   └── VersionedRoute.cs
    │   │   ├── SysCode.cs
    │   │   ├── Version.cs
    │   │   ├── VersionConsts.cs
    │   │   └── VersionRange.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.Web.PlugIns/
    │   ├── Abplus.Web.PlugIns.csproj
    │   ├── Abplus.Web.PlugIns.csproj.nuspec
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── Web/
    │   │   └── Mvc/
    │   │       ├── AbpWebPlugInModule.cs
    │   │       └── Controllers/
    │   │           └── PlugInWindsorControllerFactory.cs
    │   └── packages.config
    ├── Abplus.Web.SignalR/
    │   ├── Abplus.Web.SignalR.csproj
    │   ├── Abplus.Web.SignalR.nuspec
    │   ├── Configuration/
    │   │   └── Startup/
    │   │       └── RedisOnlineClientManagerConfiguationExtensions.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── RealTime/
    │   │   ├── IRedisOnlineClientManagerModuleConfig.cs
    │   │   ├── RedisOnlineClientManager.cs
    │   │   ├── RedisOnlineClientManagerModule.cs
    │   │   └── RedisOnlineClientManagerModuleConfig.cs
    │   ├── Web/
    │   │   └── SignalR/
    │   │       └── QrScan/
    │   │           ├── SignalRQrCodeScannedRealTimeNotifier.cs
    │   │           └── SignalRQrCodeScannedRealTimeNotifierModule.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.Web.SimpleCaptcha/
    │   ├── Abplus.Web.SimpleCaptcha.csproj
    │   ├── Abplus.Web.SimpleCaptcha.nuspec
    │   ├── Configuration/
    │   │   └── Startup/
    │   │       └── SimpleCaptchaManagerConfigurationExtension.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── Web/
    │   │   └── SimpleCaptcha/
    │   │       ├── ISimpleCaptchaModuleConfig.cs
    │   │       ├── IVerificationCodeStore.cs
    │   │       ├── SimpleCaptchaManager.cs
    │   │       ├── SimpleCaptchaModule.cs
    │   │       ├── SimpleCaptchaModuleConfig.cs
    │   │       └── VerificationCodeStores/
    │   │           ├── CacheVerificationCodeStore.cs
    │   │           ├── CookieVerificationCodeStore.cs
    │   │           └── SessionVerificationCodeStore.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.WebApiClient/
    │   ├── Abplus.WebApiClient.csproj
    │   ├── Abplus.WebApiClient.nuspec
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── WebApiClient/
    │   │   ├── AbplusWebApiClient.cs
    │   │   ├── AbplusWebApiClientModule.cs
    │   │   ├── AbplusWebApiClientRemoteCallException.cs
    │   │   └── IAbplusWebApiClient.cs
    │   ├── app.config
    │   └── packages.config
    ├── Samples/
    │   ├── Abplus.WebApiVersionRoute.Sample/
    │   │   ├── Abplus.WebApiVersionRoute.Sample.csproj
    │   │   ├── App_Start/
    │   │   │   └── WebApiConfig.cs
    │   │   ├── Controllers/
    │   │   │   └── ValueController.cs
    │   │   ├── Global.asax
    │   │   ├── Global.asax.cs
    │   │   ├── Properties/
    │   │   │   └── AssemblyInfo.cs
    │   │   ├── Web.Debug.config
    │   │   ├── Web.Release.config
    │   │   ├── Web.config
    │   │   └── packages.config
    │   ├── Sample.MqMessages/
    │   │   ├── MqMessages/
    │   │   │   └── TestMqMessage.cs
    │   │   ├── Properties/
    │   │   │   └── AssemblyInfo.cs
    │   │   └── Sample.MqMessages.csproj
    │   ├── Sample.RebusRabbitMqConsumer/
    │   │   ├── App.config
    │   │   ├── Handlers/
    │   │   │   └── TestHandler.cs
    │   │   ├── NLog.config
    │   │   ├── NLog.xsd
    │   │   ├── Program.cs
    │   │   ├── Properties/
    │   │   │   └── AssemblyInfo.cs
    │   │   ├── Sample.RebusRabbitMqConsumer.csproj
    │   │   ├── SampleRebusRabbitMqConsumerBootstrap.cs
    │   │   ├── SampleRebusRabbitMqConsumerModule.cs
    │   │   └── packages.config
    │   └── Sample.RebusRabbitMqPublisher/
    │       ├── App.config
    │       ├── BackgroundWorks/
    │       │   └── TestWorker.cs
    │       ├── NLog.config
    │       ├── NLog.xsd
    │       ├── Program.cs
    │       ├── Properties/
    │       │   └── AssemblyInfo.cs
    │       ├── Sample.RebusRabbitMqPublisher.csproj
    │       ├── SampleRebusRabbitMqPublisherBootstrap.cs
    │       ├── SampleRebusRabbitMqPublisherModule.cs
    │       └── packages.config
    └── Tests/
        └── Abplus.Tests/
            ├── Abplus.Tests.csproj
            ├── Properties/
            │   └── AssemblyInfo.cs
            ├── TimeRanges/
            │   └── TimeRange_Tests.cs
            ├── app.config
            └── packages.config

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/

# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# DNX
project.lock.json
artifacts/

*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding add-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignoreable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.pfx
*.publishsettings
node_modules/
orleans.codegen.cs

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm

# SQL Server files
*.mdf
*.ldf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# JetBrains Rider
.idea/
*.sln.iml
/nugetpack
/src/Abplus.Common/Configuration
/Nupkg/nugetpush.bat
/Nupkg/push-all-packages.bat


================================================
FILE: .nuget/NuGet.Config
================================================
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
  </packageSources>
</configuration>

================================================
FILE: Abplus.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30804.86
MinimumVisualStudioVersion = 15.0.26124.0
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{28E1F8EC-E22A-45D3-941F-2A0756D6331D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Abplus", "src\Abplus\Abplus.csproj", "{10C03A51-881C-4779-9B24-5BFCE234C175}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Abplus.MqMessages", "src\Abplus.MqMessages\Abplus.MqMessages.csproj", "{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Abplus.MqMessages.AuditingConsumerHandler", "src\Abplus.MqMessages.AuditingConsumerHandler\Abplus.MqMessages.AuditingConsumerHandler.csproj", "{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Abplus.MqMessages.AuditingStore", "src\Abplus.MqMessages.AuditingStore\Abplus.MqMessages.AuditingStore.csproj", "{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Abplus.MqMessages.IndexToES", "src\Abplus.MqMessages.IndexToES\Abplus.MqMessages.IndexToES.csproj", "{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Abplus.MqMessages.RebusCore", "src\Abplus.MqMessages.RebusCore\Abplus.MqMessages.RebusCore.csproj", "{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Abplus.MqMessages.RedisStoreMessageTracker", "src\Abplus.MqMessages.RedisStoreMessageTracker\Abplus.MqMessages.RedisStoreMessageTracker.csproj", "{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Abplus.T4.PermissionsFromJson", "src\Abplus.T4.PermissionsFromJson\Abplus.T4.PermissionsFromJson.csproj", "{629C519A-14DD-4F1A-B235-AC73AC2622F7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Abplus.MqMessages.RebusRabbitMqConsumer", "src\Abplus.MqMessages.RebusRabbitMqConsumer\Abplus.MqMessages.RebusRabbitMqConsumer.csproj", "{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Abplus.MqMessages.RebusRabbitMqPublisher", "src\Abplus.MqMessages.RebusRabbitMqPublisher\Abplus.MqMessages.RebusRabbitMqPublisher.csproj", "{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{BE7C78D3-C20F-46D4-A4DD-F66136691F17}"
	ProjectSection(SolutionItems) = preProject
		common.props = common.props
	EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Abplus.AspNetCore.SignalR", "src\Abplus.AspNetCore.SignalR\Abplus.AspNetCore.SignalR.csproj", "{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{9D43F9A2-6C7D-44DC-A0A0-3F0C693B9663}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample.MqMessages", "src\Samples\Sample.MqMessages\Sample.MqMessages.csproj", "{D71B7FBA-E998-4141-81E6-E319C3941659}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample.DotNetCoreConsumerHost", "src\Samples\Sample.DotNetCoreConsumerHost\Sample.DotNetCoreConsumerHost.csproj", "{3AFDA053-190A-4BBF-BF0D-626718239FA4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample.DotNetCorePublisherHost", "src\Samples\Sample.DotNetCorePublisherHost\Sample.DotNetCorePublisherHost.csproj", "{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AuditingConsumer", "AuditingConsumer", "{D67F59C7-8882-4517-AD61-394DA98E94E5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample.AuditingConsumerHandler", "src\Samples\AuditingConsumer\Sample.AuditingConsumerHandler\Sample.AuditingConsumerHandler.csproj", "{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample.MqMessageAuditingStore", "src\Samples\AuditingConsumer\Sample.MqMessageAuditingStore\Sample.MqMessageAuditingStore.csproj", "{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Abplus.IO.LocalFileSystem", "src\Abplus.IO.LocalFileSystem\Abplus.IO.LocalFileSystem.csproj", "{5D62EA19-7E50-467A-B0BC-76334C2C69E9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Abplus.IO.AzureBlobStorage", "src\Abplus.IO.AzureBlobStorage\Abplus.IO.AzureBlobStorage.csproj", "{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FileStorage", "FileStorage", "{89AE722E-588C-43F2-B4CB-A05CE184F721}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample.AzureBlobStorageConsole", "src\Samples\FileStorage\Sample.AzureBlobStorage\Sample.AzureBlobStorageConsole.csproj", "{EF146053-4951-4D97-9AAA-E0C1CA4801D6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample.LocalFileSystemConsole", "src\Samples\FileStorage\Sample.LocalFileSystem\Sample.LocalFileSystemConsole.csproj", "{0FCE1B76-0720-4AD0-B353-F604C93DC05F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Abplus.IO.AliyunOSSStorage", "src\Abplus.IO.AliyunOSSStorage\Abplus.IO.AliyunOSSStorage.csproj", "{D6E5E010-D782-4B02-94A1-1162852916D9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample.AliyunOSSStorageConsole", "src\Samples\FileStorage\Sample.AliyunOSSStorage\Sample.AliyunOSSStorageConsole.csproj", "{543B7B29-B10C-4837-9479-949F7066DAAC}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Debug|x64 = Debug|x64
		Debug|x86 = Debug|x86
		Release|Any CPU = Release|Any CPU
		Release|x64 = Release|x64
		Release|x86 = Release|x86
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{10C03A51-881C-4779-9B24-5BFCE234C175}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{10C03A51-881C-4779-9B24-5BFCE234C175}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{10C03A51-881C-4779-9B24-5BFCE234C175}.Debug|x64.ActiveCfg = Debug|Any CPU
		{10C03A51-881C-4779-9B24-5BFCE234C175}.Debug|x64.Build.0 = Debug|Any CPU
		{10C03A51-881C-4779-9B24-5BFCE234C175}.Debug|x86.ActiveCfg = Debug|Any CPU
		{10C03A51-881C-4779-9B24-5BFCE234C175}.Debug|x86.Build.0 = Debug|Any CPU
		{10C03A51-881C-4779-9B24-5BFCE234C175}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{10C03A51-881C-4779-9B24-5BFCE234C175}.Release|Any CPU.Build.0 = Release|Any CPU
		{10C03A51-881C-4779-9B24-5BFCE234C175}.Release|x64.ActiveCfg = Release|Any CPU
		{10C03A51-881C-4779-9B24-5BFCE234C175}.Release|x64.Build.0 = Release|Any CPU
		{10C03A51-881C-4779-9B24-5BFCE234C175}.Release|x86.ActiveCfg = Release|Any CPU
		{10C03A51-881C-4779-9B24-5BFCE234C175}.Release|x86.Build.0 = Release|Any CPU
		{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Debug|x64.ActiveCfg = Debug|Any CPU
		{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Debug|x64.Build.0 = Debug|Any CPU
		{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Debug|x86.ActiveCfg = Debug|Any CPU
		{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Debug|x86.Build.0 = Debug|Any CPU
		{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Release|Any CPU.Build.0 = Release|Any CPU
		{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Release|x64.ActiveCfg = Release|Any CPU
		{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Release|x64.Build.0 = Release|Any CPU
		{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Release|x86.ActiveCfg = Release|Any CPU
		{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2}.Release|x86.Build.0 = Release|Any CPU
		{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Debug|x64.ActiveCfg = Debug|Any CPU
		{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Debug|x64.Build.0 = Debug|Any CPU
		{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Debug|x86.ActiveCfg = Debug|Any CPU
		{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Debug|x86.Build.0 = Debug|Any CPU
		{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Release|Any CPU.Build.0 = Release|Any CPU
		{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Release|x64.ActiveCfg = Release|Any CPU
		{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Release|x64.Build.0 = Release|Any CPU
		{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Release|x86.ActiveCfg = Release|Any CPU
		{B5E2EC5D-4D8A-4FBE-9434-23B422644B68}.Release|x86.Build.0 = Release|Any CPU
		{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Debug|x64.ActiveCfg = Debug|Any CPU
		{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Debug|x64.Build.0 = Debug|Any CPU
		{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Debug|x86.ActiveCfg = Debug|Any CPU
		{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Debug|x86.Build.0 = Debug|Any CPU
		{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Release|Any CPU.Build.0 = Release|Any CPU
		{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Release|x64.ActiveCfg = Release|Any CPU
		{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Release|x64.Build.0 = Release|Any CPU
		{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Release|x86.ActiveCfg = Release|Any CPU
		{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7}.Release|x86.Build.0 = Release|Any CPU
		{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Debug|x64.ActiveCfg = Debug|Any CPU
		{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Debug|x64.Build.0 = Debug|Any CPU
		{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Debug|x86.ActiveCfg = Debug|Any CPU
		{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Debug|x86.Build.0 = Debug|Any CPU
		{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Release|Any CPU.Build.0 = Release|Any CPU
		{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Release|x64.ActiveCfg = Release|Any CPU
		{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Release|x64.Build.0 = Release|Any CPU
		{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Release|x86.ActiveCfg = Release|Any CPU
		{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD}.Release|x86.Build.0 = Release|Any CPU
		{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Debug|x64.ActiveCfg = Debug|Any CPU
		{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Debug|x64.Build.0 = Debug|Any CPU
		{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Debug|x86.ActiveCfg = Debug|Any CPU
		{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Debug|x86.Build.0 = Debug|Any CPU
		{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Release|Any CPU.Build.0 = Release|Any CPU
		{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Release|x64.ActiveCfg = Release|Any CPU
		{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Release|x64.Build.0 = Release|Any CPU
		{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Release|x86.ActiveCfg = Release|Any CPU
		{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B}.Release|x86.Build.0 = Release|Any CPU
		{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Debug|x64.ActiveCfg = Debug|Any CPU
		{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Debug|x64.Build.0 = Debug|Any CPU
		{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Debug|x86.ActiveCfg = Debug|Any CPU
		{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Debug|x86.Build.0 = Debug|Any CPU
		{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Release|Any CPU.Build.0 = Release|Any CPU
		{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Release|x64.ActiveCfg = Release|Any CPU
		{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Release|x64.Build.0 = Release|Any CPU
		{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Release|x86.ActiveCfg = Release|Any CPU
		{7A5BE15C-4B89-4397-920F-A15FB8A76FA5}.Release|x86.Build.0 = Release|Any CPU
		{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Debug|x64.ActiveCfg = Debug|Any CPU
		{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Debug|x64.Build.0 = Debug|Any CPU
		{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Debug|x86.ActiveCfg = Debug|Any CPU
		{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Debug|x86.Build.0 = Debug|Any CPU
		{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Release|Any CPU.Build.0 = Release|Any CPU
		{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Release|x64.ActiveCfg = Release|Any CPU
		{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Release|x64.Build.0 = Release|Any CPU
		{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Release|x86.ActiveCfg = Release|Any CPU
		{629C519A-14DD-4F1A-B235-AC73AC2622F7}.Release|x86.Build.0 = Release|Any CPU
		{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Debug|x64.ActiveCfg = Debug|Any CPU
		{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Debug|x64.Build.0 = Debug|Any CPU
		{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Debug|x86.ActiveCfg = Debug|Any CPU
		{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Debug|x86.Build.0 = Debug|Any CPU
		{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Release|Any CPU.Build.0 = Release|Any CPU
		{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Release|x64.ActiveCfg = Release|Any CPU
		{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Release|x64.Build.0 = Release|Any CPU
		{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Release|x86.ActiveCfg = Release|Any CPU
		{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94}.Release|x86.Build.0 = Release|Any CPU
		{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Debug|x64.ActiveCfg = Debug|Any CPU
		{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Debug|x64.Build.0 = Debug|Any CPU
		{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Debug|x86.ActiveCfg = Debug|Any CPU
		{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Debug|x86.Build.0 = Debug|Any CPU
		{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Release|Any CPU.Build.0 = Release|Any CPU
		{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Release|x64.ActiveCfg = Release|Any CPU
		{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Release|x64.Build.0 = Release|Any CPU
		{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Release|x86.ActiveCfg = Release|Any CPU
		{1C7E75D5-F462-43C7-A230-4E31FAF8CC00}.Release|x86.Build.0 = Release|Any CPU
		{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Debug|x64.ActiveCfg = Debug|Any CPU
		{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Debug|x64.Build.0 = Debug|Any CPU
		{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Debug|x86.ActiveCfg = Debug|Any CPU
		{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Debug|x86.Build.0 = Debug|Any CPU
		{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Release|Any CPU.Build.0 = Release|Any CPU
		{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Release|x64.ActiveCfg = Release|Any CPU
		{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Release|x64.Build.0 = Release|Any CPU
		{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Release|x86.ActiveCfg = Release|Any CPU
		{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF}.Release|x86.Build.0 = Release|Any CPU
		{D71B7FBA-E998-4141-81E6-E319C3941659}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{D71B7FBA-E998-4141-81E6-E319C3941659}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{D71B7FBA-E998-4141-81E6-E319C3941659}.Debug|x64.ActiveCfg = Debug|Any CPU
		{D71B7FBA-E998-4141-81E6-E319C3941659}.Debug|x64.Build.0 = Debug|Any CPU
		{D71B7FBA-E998-4141-81E6-E319C3941659}.Debug|x86.ActiveCfg = Debug|Any CPU
		{D71B7FBA-E998-4141-81E6-E319C3941659}.Debug|x86.Build.0 = Debug|Any CPU
		{D71B7FBA-E998-4141-81E6-E319C3941659}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{D71B7FBA-E998-4141-81E6-E319C3941659}.Release|Any CPU.Build.0 = Release|Any CPU
		{D71B7FBA-E998-4141-81E6-E319C3941659}.Release|x64.ActiveCfg = Release|Any CPU
		{D71B7FBA-E998-4141-81E6-E319C3941659}.Release|x64.Build.0 = Release|Any CPU
		{D71B7FBA-E998-4141-81E6-E319C3941659}.Release|x86.ActiveCfg = Release|Any CPU
		{D71B7FBA-E998-4141-81E6-E319C3941659}.Release|x86.Build.0 = Release|Any CPU
		{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Debug|x64.ActiveCfg = Debug|Any CPU
		{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Debug|x64.Build.0 = Debug|Any CPU
		{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Debug|x86.ActiveCfg = Debug|Any CPU
		{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Debug|x86.Build.0 = Debug|Any CPU
		{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Release|Any CPU.Build.0 = Release|Any CPU
		{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Release|x64.ActiveCfg = Release|Any CPU
		{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Release|x64.Build.0 = Release|Any CPU
		{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Release|x86.ActiveCfg = Release|Any CPU
		{3AFDA053-190A-4BBF-BF0D-626718239FA4}.Release|x86.Build.0 = Release|Any CPU
		{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Debug|x64.ActiveCfg = Debug|Any CPU
		{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Debug|x64.Build.0 = Debug|Any CPU
		{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Debug|x86.ActiveCfg = Debug|Any CPU
		{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Debug|x86.Build.0 = Debug|Any CPU
		{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Release|Any CPU.Build.0 = Release|Any CPU
		{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Release|x64.ActiveCfg = Release|Any CPU
		{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Release|x64.Build.0 = Release|Any CPU
		{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Release|x86.ActiveCfg = Release|Any CPU
		{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F}.Release|x86.Build.0 = Release|Any CPU
		{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Debug|x64.ActiveCfg = Debug|Any CPU
		{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Debug|x64.Build.0 = Debug|Any CPU
		{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Debug|x86.ActiveCfg = Debug|Any CPU
		{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Debug|x86.Build.0 = Debug|Any CPU
		{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Release|Any CPU.Build.0 = Release|Any CPU
		{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Release|x64.ActiveCfg = Release|Any CPU
		{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Release|x64.Build.0 = Release|Any CPU
		{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Release|x86.ActiveCfg = Release|Any CPU
		{E840877E-2C05-4BF1-859A-3C6D49DFEFE6}.Release|x86.Build.0 = Release|Any CPU
		{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Debug|x64.ActiveCfg = Debug|Any CPU
		{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Debug|x64.Build.0 = Debug|Any CPU
		{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Debug|x86.ActiveCfg = Debug|Any CPU
		{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Debug|x86.Build.0 = Debug|Any CPU
		{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Release|Any CPU.Build.0 = Release|Any CPU
		{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Release|x64.ActiveCfg = Release|Any CPU
		{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Release|x64.Build.0 = Release|Any CPU
		{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Release|x86.ActiveCfg = Release|Any CPU
		{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91}.Release|x86.Build.0 = Release|Any CPU
		{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Debug|x64.ActiveCfg = Debug|Any CPU
		{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Debug|x64.Build.0 = Debug|Any CPU
		{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Debug|x86.ActiveCfg = Debug|Any CPU
		{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Debug|x86.Build.0 = Debug|Any CPU
		{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Release|Any CPU.Build.0 = Release|Any CPU
		{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Release|x64.ActiveCfg = Release|Any CPU
		{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Release|x64.Build.0 = Release|Any CPU
		{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Release|x86.ActiveCfg = Release|Any CPU
		{5D62EA19-7E50-467A-B0BC-76334C2C69E9}.Release|x86.Build.0 = Release|Any CPU
		{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Debug|x64.ActiveCfg = Debug|Any CPU
		{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Debug|x64.Build.0 = Debug|Any CPU
		{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Debug|x86.ActiveCfg = Debug|Any CPU
		{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Debug|x86.Build.0 = Debug|Any CPU
		{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Release|Any CPU.Build.0 = Release|Any CPU
		{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Release|x64.ActiveCfg = Release|Any CPU
		{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Release|x64.Build.0 = Release|Any CPU
		{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Release|x86.ActiveCfg = Release|Any CPU
		{3CD46A0D-61E6-4A0C-AF2D-176462DCF601}.Release|x86.Build.0 = Release|Any CPU
		{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Debug|x64.ActiveCfg = Debug|Any CPU
		{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Debug|x64.Build.0 = Debug|Any CPU
		{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Debug|x86.ActiveCfg = Debug|Any CPU
		{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Debug|x86.Build.0 = Debug|Any CPU
		{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Release|Any CPU.Build.0 = Release|Any CPU
		{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Release|x64.ActiveCfg = Release|Any CPU
		{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Release|x64.Build.0 = Release|Any CPU
		{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Release|x86.ActiveCfg = Release|Any CPU
		{EF146053-4951-4D97-9AAA-E0C1CA4801D6}.Release|x86.Build.0 = Release|Any CPU
		{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Debug|x64.ActiveCfg = Debug|Any CPU
		{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Debug|x64.Build.0 = Debug|Any CPU
		{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Debug|x86.ActiveCfg = Debug|Any CPU
		{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Debug|x86.Build.0 = Debug|Any CPU
		{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Release|Any CPU.Build.0 = Release|Any CPU
		{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Release|x64.ActiveCfg = Release|Any CPU
		{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Release|x64.Build.0 = Release|Any CPU
		{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Release|x86.ActiveCfg = Release|Any CPU
		{0FCE1B76-0720-4AD0-B353-F604C93DC05F}.Release|x86.Build.0 = Release|Any CPU
		{D6E5E010-D782-4B02-94A1-1162852916D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{D6E5E010-D782-4B02-94A1-1162852916D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{D6E5E010-D782-4B02-94A1-1162852916D9}.Debug|x64.ActiveCfg = Debug|Any CPU
		{D6E5E010-D782-4B02-94A1-1162852916D9}.Debug|x64.Build.0 = Debug|Any CPU
		{D6E5E010-D782-4B02-94A1-1162852916D9}.Debug|x86.ActiveCfg = Debug|Any CPU
		{D6E5E010-D782-4B02-94A1-1162852916D9}.Debug|x86.Build.0 = Debug|Any CPU
		{D6E5E010-D782-4B02-94A1-1162852916D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{D6E5E010-D782-4B02-94A1-1162852916D9}.Release|Any CPU.Build.0 = Release|Any CPU
		{D6E5E010-D782-4B02-94A1-1162852916D9}.Release|x64.ActiveCfg = Release|Any CPU
		{D6E5E010-D782-4B02-94A1-1162852916D9}.Release|x64.Build.0 = Release|Any CPU
		{D6E5E010-D782-4B02-94A1-1162852916D9}.Release|x86.ActiveCfg = Release|Any CPU
		{D6E5E010-D782-4B02-94A1-1162852916D9}.Release|x86.Build.0 = Release|Any CPU
		{543B7B29-B10C-4837-9479-949F7066DAAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{543B7B29-B10C-4837-9479-949F7066DAAC}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{543B7B29-B10C-4837-9479-949F7066DAAC}.Debug|x64.ActiveCfg = Debug|Any CPU
		{543B7B29-B10C-4837-9479-949F7066DAAC}.Debug|x64.Build.0 = Debug|Any CPU
		{543B7B29-B10C-4837-9479-949F7066DAAC}.Debug|x86.ActiveCfg = Debug|Any CPU
		{543B7B29-B10C-4837-9479-949F7066DAAC}.Debug|x86.Build.0 = Debug|Any CPU
		{543B7B29-B10C-4837-9479-949F7066DAAC}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{543B7B29-B10C-4837-9479-949F7066DAAC}.Release|Any CPU.Build.0 = Release|Any CPU
		{543B7B29-B10C-4837-9479-949F7066DAAC}.Release|x64.ActiveCfg = Release|Any CPU
		{543B7B29-B10C-4837-9479-949F7066DAAC}.Release|x64.Build.0 = Release|Any CPU
		{543B7B29-B10C-4837-9479-949F7066DAAC}.Release|x86.ActiveCfg = Release|Any CPU
		{543B7B29-B10C-4837-9479-949F7066DAAC}.Release|x86.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(NestedProjects) = preSolution
		{10C03A51-881C-4779-9B24-5BFCE234C175} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}
		{5FE016D8-4FBC-4D85-A7D8-165E6F7887F2} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}
		{B5E2EC5D-4D8A-4FBE-9434-23B422644B68} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}
		{AC823FF0-0EEA-46D8-B6FF-BA9E255F5EB7} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}
		{17E54BAB-2FF4-42A1-ACBA-0F88066FF4FD} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}
		{D27E21C1-96C8-4EFF-AA4D-43A8ED7CC40B} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}
		{7A5BE15C-4B89-4397-920F-A15FB8A76FA5} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}
		{629C519A-14DD-4F1A-B235-AC73AC2622F7} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}
		{E0E26A07-B7A6-41FD-AB74-1CFCB5191F94} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}
		{1C7E75D5-F462-43C7-A230-4E31FAF8CC00} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}
		{6FA9C7E5-7ED9-4D09-856E-0D30D6D0E7AF} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}
		{D71B7FBA-E998-4141-81E6-E319C3941659} = {9D43F9A2-6C7D-44DC-A0A0-3F0C693B9663}
		{3AFDA053-190A-4BBF-BF0D-626718239FA4} = {9D43F9A2-6C7D-44DC-A0A0-3F0C693B9663}
		{3EB8E5B8-B4A1-41EE-8E26-EED6AFF8AC8F} = {9D43F9A2-6C7D-44DC-A0A0-3F0C693B9663}
		{D67F59C7-8882-4517-AD61-394DA98E94E5} = {9D43F9A2-6C7D-44DC-A0A0-3F0C693B9663}
		{E840877E-2C05-4BF1-859A-3C6D49DFEFE6} = {D67F59C7-8882-4517-AD61-394DA98E94E5}
		{5DFA45F0-4E0E-4DF2-85E5-53ACF50CDD91} = {D67F59C7-8882-4517-AD61-394DA98E94E5}
		{5D62EA19-7E50-467A-B0BC-76334C2C69E9} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}
		{3CD46A0D-61E6-4A0C-AF2D-176462DCF601} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}
		{89AE722E-588C-43F2-B4CB-A05CE184F721} = {9D43F9A2-6C7D-44DC-A0A0-3F0C693B9663}
		{EF146053-4951-4D97-9AAA-E0C1CA4801D6} = {89AE722E-588C-43F2-B4CB-A05CE184F721}
		{0FCE1B76-0720-4AD0-B353-F604C93DC05F} = {89AE722E-588C-43F2-B4CB-A05CE184F721}
		{D6E5E010-D782-4B02-94A1-1162852916D9} = {28E1F8EC-E22A-45D3-941F-2A0756D6331D}
		{543B7B29-B10C-4837-9479-949F7066DAAC} = {89AE722E-588C-43F2-B4CB-A05CE184F721}
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {F860D614-C29A-4EBF-954C-8CB27921AB49}
	EndGlobalSection
EndGlobal


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2016 personball

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: Nupkg/pack.bat
================================================
dotnet pack ..\src\Abplus\Abplus.csproj -o ..\..\nupkg\
dotnet pack ..\src\Abplus.AspNetCore.SignalR\Abplus.AspNetCore.SignalR.csproj -o ..\..\nupkg\
dotnet pack ..\src\Abplus.MqMessages\Abplus.MqMessages.csproj -o ..\..\nupkg\
dotnet pack ..\src\Abplus.MqMessages.AuditingConsumerHandler\Abplus.MqMessages.AuditingConsumerHandler.csproj -o ..\..\nupkg\
dotnet pack ..\src\Abplus.MqMessages.AuditingStore\Abplus.MqMessages.AuditingStore.csproj -o ..\..\nupkg\
dotnet pack ..\src\Abplus.MqMessages.IndexToES\Abplus.MqMessages.IndexToES.csproj -o ..\..\nupkg\
dotnet pack ..\src\Abplus.MqMessages.RebusCore\Abplus.MqMessages.RebusCore.csproj -o ..\..\nupkg\
dotnet pack ..\src\Abplus.MqMessages.RebusRabbitMqConsumer\Abplus.MqMessages.RebusRabbitMqConsumer.csproj -o ..\..\nupkg\
dotnet pack ..\src\Abplus.MqMessages.RebusRabbitMqPublisher\Abplus.MqMessages.RebusRabbitMqPublisher.csproj -o ..\..\nupkg\
dotnet pack ..\src\Abplus.MqMessages.RedisStoreMessageTracker\Abplus.MqMessages.RedisStoreMessageTracker.csproj -o ..\..\nupkg\
dotnet pack ..\src\Abplus.T4.PermissionsFromJson\Abplus.T4.PermissionsFromJson.csproj -o ..\..\nupkg\

dotnet pack ..\src\Abplus.IO.AzureBlobStorage\Abplus.IO.AzureBlobStorage.csproj -o ..\..\nupkg\
dotnet pack ..\src\Abplus.IO.AliyunOSSStorage\Abplus.IO.AliyunOSSStorage.csproj -o ..\..\nupkg\


================================================
FILE: Nupkg/push-all-packages-in-current_folder.bat
================================================
@echo off
setlocal enabledelayedexpansion
set filepath=%cd%
FOR /R %filepath% %%i IN (*.nupkg) DO (
set file=%%i
call ./nugetpush.bat !file!

)
pause
exit

================================================
FILE: README.md
================================================
![abplus_icon](https://github.com/personball/abplus/blob/master/abplus_icon.png?raw=true)
# abplus
Abp plus, an extension for Abp Framework. 

*From 2.0.0, all components upgrade to netstandard2.0.*  
注明 (deprecated)的将不再支持,将针对ef core, aspnet core, signalr core提供扩展。
## Packages

|Package|Status|
|:------|:-----|
|Abplus|[![NuGet version](https://badge.fury.io/nu/Abplus.svg)](https://badge.fury.io/nu/Abplus)|
|Abplus.MqMessages|[![NuGet version](https://badge.fury.io/nu/Abplus.MqMessages.svg)](https://badge.fury.io/nu/Abplus.MqMessages)|
|Abplus.MqMessages.AuditingStore|[![NuGet version](https://badge.fury.io/nu/Abplus.MqMessages.AuditingStore.svg)](https://badge.fury.io/nu/Abplus.MqMessages.AuditingStore)|
|Abplus.MqMessages.AuditingConsumerHandler|[![NuGet version](https://badge.fury.io/nu/Abplus.MqMessages.AuditingConsumerHandler.svg)](https://badge.fury.io/nu/Abplus.MqMessages.AuditingConsumerHandler)|
|Abplus.MqMessages.RebusCore|[![NuGet version](https://badge.fury.io/nu/Abplus.MqMessages.RebusCore.svg)](https://badge.fury.io/nu/Abplus.MqMessages.RebusCore)|
|Abplus.MqMessages.RebusRabbitMqConsumer|[![NuGet version](https://badge.fury.io/nu/Abplus.MqMessages.RebusRabbitMqConsumer.svg)](https://badge.fury.io/nu/Abplus.MqMessages.RebusRabbitMqConsumer)|
|Abplus.MqMessages.RebusRabbitMqPublisher|[![NuGet version](https://badge.fury.io/nu/Abplus.MqMessages.RebusRabbitMqPublisher.svg)](https://badge.fury.io/nu/Abplus.MqMessages.RebusRabbitMqPublisher)|
|Abplus.MqMessages.RedisStoreMessageTracker|[![NuGet version](https://badge.fury.io/nu/Abplus.MqMessages.RedisStoreMessageTracker.svg)](https://badge.fury.io/nu/Abplus.MqMessages.RedisStoreMessageTracker)|
|Abplus.T4.PermissionsFromJson|[![NuGet version](https://badge.fury.io/nu/Abplus.T4.PermissionsFromJson.svg)](https://badge.fury.io/nu/Abplus.T4.PermissionsFromJson)|
|Abplus.MqMessages.IndexToES|[![NuGet version](https://badge.fury.io/nu/Abplus.MqMessages.IndexToES.svg)](https://badge.fury.io/nu/Abplus.MqMessages.IndexToES)|
|Abplus.AspNetCore.SignalR|[![NuGet version](https://badge.fury.io/nu/Abplus.AspNetCore.SignalR.svg)](https://badge.fury.io/nu/Abplus.AspNetCore.SignalR)|
|Abplus.EntityFramework (**deprecated**)|[![NuGet version](https://badge.fury.io/nu/Abplus.EntityFramework.svg)](https://badge.fury.io/nu/Abplus.EntityFramework)|
|Abplus.Web.Api (**deprecated**)|[![NuGet version](https://badge.fury.io/nu/Abplus.Web.Api.svg)](https://badge.fury.io/nu/Abplus.Web.Api)|
|Abplus.Web.SignalR (**deprecated**)|[![NuGet version](https://badge.fury.io/nu/Abplus.Web.SignalR.svg)](https://badge.fury.io/nu/Abplus.Web.SignalR)|

## Remarks

|Package|Remark|
|:------|:-----|
|Abplus|基础概念扩展及接口定义|
|Abplus.MqMessages|集成消息队列的扩展方案|
|Abplus.MqMessages.AuditingStore|集成消息队列的扩展方案,审计日志发送消息队列,使用方法参考 src/Samples/AuditingConsumer|
|Abplus.MqMessages.AuditingConsumerHandler|集成消息队列的扩展方案,审计日志队列消费端,使用方法参考 src/Samples/AuditingConsumer|
|Abplus.MqMessages.RebusCore|集成消息队列的扩展方案,Rebus Publisher的实现|
|Abplus.MqMessages.RebusRabbitMqConsumer|集成消息队列的扩展方案,消费端模块(具备发布消息能力),使用方法参考src/Samples/Sample.DotNetCoreConsumerHost或Sample.DotNetFxConsumerHost|
|Abplus.MqMessages.RebusRabbitMqPublisher|集成消息队列的扩展方案,生产端模块,使用方法参考Samples/Sample.DotNetCorePublisherHost或Sample.DotNetFxPublisherHost|
|Abplus.MqMessages.RedisStoreMessageTracker|集成消息队列的扩展方案,消费端消费行为的幂等支持|
|Abplus.T4.PermissionsFromJson|提供T4工具,自动从Json文件定义中生成权限定义和权限树|
|Abplus.MqMessages.IndexToES|提供一个泛型版RebusHandler及T4工具,自动替在MqMessagesT4Register注册的MqMessages通过T4生成代码,将消息索引到ElasticSearch。|
|Abplus.AspNetCore.SignalR|基于Redis的OnlineClientManager,解决Abp自带的[OnlineClientManager](https://github.com/aspnetboilerplate/aspnetboilerplate/blob/dev/src/Abp/RealTime/OnlineClientManager.cs#L26)在线状态不跨进程共享的问题。|
|Abplus.EntityFramework(**deprecated**)|EF辅助方法:预热,自动注册FluentApi配置类|
|Abplus.Web.Api(**deprecated**)|WebApi基于请求头的版本化机制,使用方法见Samples/Abplus.WebApiVersionRoute.Sample。|
|Abplus.Web.SignalR(**deprecated**)|基于Redis的OnlineClientManager,解决Abp自带的[OnlineClientManager](https://github.com/aspnetboilerplate/aspnetboilerplate/blob/dev/src/Abp/RealTime/OnlineClientManager.cs#L26)在线状态不跨进程共享的问题。|

## License

[MIT](LICENSE)



================================================
FILE: common.props
================================================
<Project>
	<PropertyGroup>
		<Version>6.0.0</Version>
	</PropertyGroup>
</Project>

================================================
FILE: src/Abplus/Abplus.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <Import Project="..\..\common.props"></Import>
  
  <PropertyGroup>
    <TargetFrameworks>net5.0</TargetFrameworks>
    <RootNamespace>Abp</RootNamespace>
    <AssemblyName>Abplus</AssemblyName>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="abp" Version="6.3.1" />
  </ItemGroup>

</Project>


================================================
FILE: src/Abplus/Abplus.nuspec
================================================
<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>personball</authors>
    <owners>personball</owners>
    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>
    <projectUrl>https://github.com/personball/abplus</projectUrl>
    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Abp plus, an extension for Abp Framework. </description>
    <releaseNotes></releaseNotes>
    <copyright>Copyright 2019</copyright>
    <tags></tags>
    <dependencies>
      <dependency id="Abp" version="4.5.0" />
    </dependencies>
  </metadata>
</package>

================================================
FILE: src/Abplus/Application/Navigation/MenuItemDefinitionPlugInExtensions.cs
================================================
using System.Linq;
using Abp.Extensions;
using Abp.Localization;

namespace Abp.Application.Navigation
{
    public static class MenuItemDefinitionPlugInExtensions
    {
        public static MenuItemDefinition GetOrCreatePlugInsRootMenu(this MenuDefinition menu, string url, string icon, string plugInMenuName = "PlugIns", string fixedDisplayName = null, string requiredPermission = null)
        {
            if (plugInMenuName.IsNullOrWhiteSpace())
            {
                plugInMenuName = "PlugIns";
            }

            if (fixedDisplayName.IsNullOrWhiteSpace())
            {
                fixedDisplayName = "PlugIns";
            }

            var plugInRoot = menu.Items.FirstOrDefault(i => i.Name == plugInMenuName);
            if (plugInRoot == null)
            {
                plugInRoot = new MenuItemDefinition(
                    plugInMenuName,
                    new FixedLocalizableString(fixedDisplayName),
                    url: url,
                    icon: icon
                    //permissionDependency:
                    //requiredPermissionName: requiredPermission
                    );

                menu.AddItem(plugInRoot);
            }

            return plugInRoot;
        }
    }
}


================================================
FILE: src/Abplus/Application/Services/Dto/IHasDateTimeFilterRequest.cs
================================================
namespace Abp.Application.Services.Dto
{
    using System;

    public interface IHasDateTimeFilterRequest
    {
        DateTime? StartTime { get; set; }

        DateTime? EndTime { get; set; }
    }
}


================================================
FILE: src/Abplus/Application/Services/Dto/IHasKeywordFilterRequest.cs
================================================
namespace Abp.Application.Services.Dto
{
    public interface IHasKeywordFilterRequest
    {
        string Keyword { get; set; }
    }
}


================================================
FILE: src/Abplus/Application/Services/Dto/IPaginationResultRequest.cs
================================================
namespace Abp.Application.Services.Dto
{
    public interface IPaginationResultRequest : ISortedResultRequest
    {
        int PageIndex { get; set; }

        int PageSize { get; set; }
    }
}


================================================
FILE: src/Abplus/Application/Services/Dto/PaginationRequestInput.cs
================================================
namespace Abp.Application.Services.Dto
{
    using System.ComponentModel.DataAnnotations;

    public class PaginationResultRequestInput : IPaginationResultRequest
    {
        public PaginationResultRequestInput()
        {
            PageIndex = 1;
            PageSize = 10;
        }

        [Range(1, 1000)]
        public int PageIndex { get; set; }

        [Range(1, 1000)]
        public int PageSize { get; set; }

        public string Sorting { get; set; }
    }
}


================================================
FILE: src/Abplus/Currencies/ChineseCentExtension.cs
================================================
namespace Abp.Currencies
{
    public static class ChineseCentExtension
    {
        public static decimal ToYuan(this int moneyInCent)
        {
            return moneyInCent / 100m;
        }

        public static string ToYuanString(this int moneyInCent)
        {
            return $"{moneyInCent.ToYuan().ToString("0.00")}元";
        }
    }
}


================================================
FILE: src/Abplus/Events/Bus/ChangedEventData.cs
================================================
namespace Abp.Events.Bus
{
    public abstract class ChangedEventData<T> : EventData
    {
        public T Origin { get; set; }
        public T Current { get; set; }
    }
}


================================================
FILE: src/Abplus/Extensions/DateTimeExtensions.cs
================================================
namespace Abp.Extensions
{
    using System;

    /// <summary>
    /// Extension methods for <see cref="DateTime"/>.
    /// </summary>
    public static class DateTimeExtensions
    {
        /// <summary>
        /// 转换为完整时间的字符串(yyyy-MM-dd HH:mm:ss)
        /// </summary>
        public static string ToFullTimeString(this DateTime source)
        {
            return source.ToString("yyyy-MM-dd HH:mm:ss");
        }

        /// <summary>
        /// 转换为短时间的字符串(yyyy-MM-dd HH:mm)
        /// </summary>
        public static string ToShortTimeString(this DateTime source)
        {
            return source.ToString("yyyy-MM-dd HH:mm");
        }

        /// <summary>
        /// 转换为只有日期的字符串(yyyy-MM-dd)
        /// </summary>
        public static string ToDateString(this DateTime source)
        {
            return source.ToString("yyyy-MM-dd");
        }
    }
}


================================================
FILE: src/Abplus/Extensions/EnumExtensions.cs
================================================
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace Abp.Extensions
{
    public static class EnumExtensions
    {
        public static string GetDisplayName(FieldInfo field)
        {
            DisplayAttribute display = field.GetCustomAttribute<DisplayAttribute>(inherit: false);
            if (display != null)
            {
                string name = display.GetName();
                if (!String.IsNullOrEmpty(name))
                {
                    return name;
                }
            }

            return field.Name;
        }
    }
}


================================================
FILE: src/Abplus/Extensions/GuidExtensions.cs
================================================
namespace Abp.Extensions
{
    using System;

    public static class GuidExtensions
    {
        /// <summary>
        /// 将Guid转换为经过Base64编码的22位字符串
        /// </summary>
        public static string ToShortString(this Guid source)
        {
            string base64 = Convert.ToBase64String(source.ToByteArray());
            string result = base64.Replace("/", "_").Replace("+", "-").Substring(0, 22);
            return result;
        }

        /// <summary>
        /// 转换成sqlserver有序Guid,时间相关,精度为300分之一毫秒
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static Guid ToCombGuid(this Guid source)
        {
            byte[] guidArray = source.ToByteArray();
            DateTime baseDate = new DateTime(1900, 1, 1);
            DateTime now = DateTime.Now;
            // Get the days and milliseconds which will be used to build the byte string 
            TimeSpan days = new TimeSpan(now.Ticks - baseDate.Ticks);
            TimeSpan msecs = new TimeSpan(now.Ticks - (new DateTime(now.Year, now.Month, now.Day).Ticks));
            // Convert to a byte array 
            // Note that SQL Server is accurate to 1/300th of a millisecond so we divide by 3.333333 
            byte[] daysArray = BitConverter.GetBytes(days.Days);
            byte[] msecsArray = BitConverter.GetBytes((long)(msecs.TotalMilliseconds / 3.333333));
            // Reverse the bytes to match SQL Servers ordering 
            Array.Reverse(daysArray);
            Array.Reverse(msecsArray);
            // Copy the bytes into the guid 
            Array.Copy(daysArray, daysArray.Length - 2, guidArray, guidArray.Length - 6, 2);
            Array.Copy(msecsArray, msecsArray.Length - 4, guidArray, guidArray.Length - 4, 4);
            return new Guid(guidArray);
        }
    }
}


================================================
FILE: src/Abplus/Extensions/IntExtension.cs
================================================
using System;
using Abp.Application.Services.Dto;

namespace Abp.Extensions
{
    public static class IntExtension
    {
        public static int ToSkipCount(this IPaginationResultRequest pagination)
        {
            CheckErrors(pagination);

            return (pagination.PageIndex - 1) * pagination.PageSize;
        }

        public static int ToMaxResultCount(this IPaginationResultRequest pagination)
        {
            CheckErrors(pagination);

            return pagination.PageSize;
        }

        private static void CheckErrors(IPaginationResultRequest pagination)
        {
            if (pagination == null)
            {
                throw new ArgumentNullException("pagination");
            }

            if (pagination.PageSize < 1)
            {
                throw new ArgumentOutOfRangeException("pagesize");
            }

            if (pagination.PageIndex < 1)
            {
                throw new ArgumentOutOfRangeException("pageindex");
            }
        }
    }
}


================================================
FILE: src/Abplus/Extensions/NullableDateTimeExtensions.cs
================================================
namespace Abp.Extensions
{
    using System;

    public static class NullableDateTimeExtensions
    {
        /// <summary>
        /// 转换为完整时间的字符串(yyyy-MM-dd HH:mm:ss)
        /// </summary>
        public static string ToFullString(this DateTime? source)
        {
            return source.HasValue ? source.Value.ToFullTimeString() : string.Empty;
        }

        /// <summary>
        /// 转换为短时间的字符串(yyyy-MM-dd HH:mm)
        /// </summary>
        public static string ToShortString(this DateTime? source)
        {
            return source.HasValue ? source.Value.ToShortTimeString() : string.Empty;
        }

        /// <summary>
        /// 转换为只有日期的字符串(yyyy-MM-dd)
        /// </summary>
        public static string ToDateString(this DateTime? source)
        {
            return source.HasValue ? source.Value.ToDateString() : string.Empty;
        }
    }
}


================================================
FILE: src/Abplus/Extensions/StringExtensions.cs
================================================
namespace Abp.Extensions
{
    using System;
    using Newtonsoft.Json;

    public static class StringExtensions
    {
        /// <summary>
        /// 字符串转换为Guid类型
        /// </summary>
        /// <param name="str"></param>
        /// <returns>默认返回Guid.Empty</returns>
        public static Guid ToGuid(this string str)
        {
            return str.ToGuid(null);
        }

        /// <summary>
        /// 指定格式字符串转换为Guid类型
        /// </summary>
        /// <param name="str"></param>
        /// <param name="format"></param>
        /// <returns>默认返回Guid.Empty</returns>
        public static Guid ToGuid(this string str, string format)
        {
            var result = Guid.Empty;
            if (!format.IsNullOrWhiteSpace())
            {
                Guid.TryParseExact(str, format, out result);
            }
            else
            {
                Guid.TryParse(str, out result);
            }

            return result;
        }

        /// <summary>
        /// 字符串转换为Guid类型或者null,不成功返回null
        /// </summary>
        public static Guid? ToGuidOrNull(this string str)
        {
            Guid? result = null;
            if (!string.IsNullOrWhiteSpace(str))
            {
                Guid tmp;
                if (Guid.TryParse(str, out tmp))
                {
                    result = tmp;
                }
            }

            return result;
        }

        /// <summary>
        /// 字符串转换为int类型或者null,不成功返回null
        /// </summary>
        public static int? ToIntOrNull(this string str)
        {
            int? result = null;
            if (!string.IsNullOrWhiteSpace(str))
            {
                int tmp;
                if (int.TryParse(str, out tmp))
                {
                    result = tmp;
                }
            }

            return result;
        }

        /// <summary>
        /// 将经过Base64编码的22位字符串还原为Guid
        /// </summary>
        public static Guid Base64ToGuid(this string str)
        {
            Guid result = Guid.Empty;
            str = str.Trim();
            string encoded = string.Concat(str.Trim().Replace("-", "+").Replace("_", "/"), "==");

            try
            {
                byte[] base64 = Convert.FromBase64String(encoded);
                result = new Guid(base64);
            }
            catch (Exception ex)
            {
                throw new AbpException("不是有效的参数格式", ex);
            }

            return result;
        }

        /// <summary>
        /// 由json字符串反序列化成指定类型的对象,字符串为空或不符合格式,则返回类型的默认值
        /// </summary>
        public static T ToObject<T>(this string json)
        {
            var obj = default(T);
            if (json.IsNullOrWhiteSpace())
            {
                return obj;
            }

            try
            {
                obj = JsonConvert.DeserializeObject<T>(json);
            }
            catch
            {
                //eat exception to return default value
            }

            return obj;
        }
    }
}


================================================
FILE: src/Abplus/IO/IFileStorage.cs
================================================
using System.IO;
using System.Threading.Tasks;
using Abp.Dependency;

namespace Abp.IO
{
    public interface IFileStorage : ITransientDependency
    {
        Task<string> Save(Stream source, string fileName, string subPath = null);

        Task<string> Save(byte[] source, string fileName, string subPath = null);

        Task Delete(string fileName, string subPath = null);

        Task<byte[]> ReadAsBytes(string fileName, string subPath = null);
    }
}


================================================
FILE: src/Abplus/IO/NullFileStorage.cs
================================================
using System.IO;
using System.Threading.Tasks;

namespace Abp.IO
{
    public class NullFileStorage : IFileStorage
    {
        public static NullFileStorage Instance { get; } = new NullFileStorage();

        public Task Delete(string fileName, string subPath = null)
        {
            return Task.FromResult(0);
        }

        public Task<byte[]> ReadAsBytes(string fileName, string subPath = null)
        {
            return Task.FromResult(new byte[0]);
        }

        public Task<string> Save(Stream source, string fileName, string subPath = null)
        {
            return Task.FromResult("");
        }

        public Task<string> Save(byte[] source, string fileName, string subPath = null)
        {
            return Task.FromResult("");
        }
    }
}


================================================
FILE: src/Abplus/Interceptors/AsyncHandlingInterceptor.cs
================================================
using System.Reflection;
using System.Threading.Tasks;
using Castle.DynamicProxy;

namespace Abp.Interceptors
{
    public abstract class AsyncHandlingInterceptor : IInterceptor
    {
        protected readonly IAsyncInterceptorHandler Handler;
        private static readonly MethodInfo HandleAsyncMethodInfo = typeof(AsyncHandlingInterceptor).GetMethod("HandleAsyncWithResult", BindingFlags.Instance | BindingFlags.NonPublic);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="handler"></param>
        protected AsyncHandlingInterceptor(IAsyncInterceptorHandler handler)
        {
            Handler = handler;
        }

        public void Intercept(IInvocation invocation)
        {
            var delegateType = GetDelegateType(invocation);
            if (delegateType == MethodType.Synchronous)
            {
                Handler.Handle(invocation);
                //Handle(() => invocation.Proceed());
            }
            if (delegateType == MethodType.AsyncAction)
            {
                Handler.HandleAsync(invocation);
                //invocation.Proceed();
                //invocation.ReturnValue = HandleAsync((Task)invocation.ReturnValue);
            }
            if (delegateType == MethodType.AsyncFunction)
            {
                //invocation.Proceed();
                ExecuteHandleAsyncWithResultUsingReflection(invocation);
            }
        }
        private void ExecuteHandleAsyncWithResultUsingReflection(IInvocation invocation)
        {
            var resultType = invocation.Method.ReturnType.GetGenericArguments()[0];
            var mi = HandleAsyncMethodInfo.MakeGenericMethod(resultType);
            invocation.ReturnValue = mi.Invoke(this, new[] { invocation });
        }

        /// <summary>
        /// Used by Reflection
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="invocation"></param>
        /// <returns></returns>
        protected virtual async Task<T> HandleAsyncWithResult<T>(IInvocation invocation)
        {
            return await Handler.HandleAsync<T>(invocation);
        }

        private MethodType GetDelegateType(IInvocation invocation)
        {
            var returnType = invocation.Method.ReturnType;
            if (returnType == typeof(Task))
                return MethodType.AsyncAction;
            if (returnType.IsGenericType && returnType.GetGenericTypeDefinition() == typeof(Task<>))
                return MethodType.AsyncFunction;
            return MethodType.Synchronous;
        }

        private enum MethodType
        {
            Synchronous,
            AsyncAction,
            AsyncFunction
        }
    }
}


================================================
FILE: src/Abplus/Interceptors/IAsyncInterceptorHandler.cs
================================================
using System.Threading.Tasks;
using Castle.DynamicProxy;

namespace Abp.Interceptors
{
    /// <summary>
    /// 
    /// </summary>
    public interface IAsyncInterceptorHandler
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="invocation"></param>
        void Handle(IInvocation invocation);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="invocation"></param>
        /// <returns></returns>
        Task HandleAsync(IInvocation invocation);

        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="invocation"></param>
        /// <returns></returns>
        Task<T> HandleAsync<T>(IInvocation invocation);
    }
}


================================================
FILE: src/Abplus/Json/LargeNumJsonConverter.cs
================================================
using System;
using System.Collections.Generic;
using Newtonsoft.Json;

namespace Abp.Json
{
    /// <summary>
    /// csharp long type number maybe overflow when it assigned to javascript in a json object, so serialize it as string when its value overflow.
    /// </summary>
    public class LargeNumJsonConverter : JsonConverter
    {

        public override bool CanRead => false;

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            var num = value as long?;
            if (num.HasValue && (num > _maxJsNum || num < _minJsNum))
            {
                writer.WriteValue(num.ToString());
            }
            else
            {
                writer.WriteValue(value);
            }
        }

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (LargeNumTypes.Contains(objectType))
            {
                long result;
                if (reader.Value != null && long.TryParse(reader.Value.ToString(), out result))
                {
                    return result;
                }
                return (long?)null;
            }
            return reader.Value;
        }

        public override bool CanConvert(Type objectType)
        {
            //9007199254740992
            return LargeNumTypes.Contains(objectType);
        }

        private static long _maxJsNum = 9007199254740992;
        private static long _minJsNum = -9007199254740992;

        private static readonly List<Type> LargeNumTypes = new List<Type>
            {
                typeof(long),
                typeof(long?)
            };
    }
}


================================================
FILE: src/Abplus/MqMessages/IMqMessagePublisher.cs
================================================
using System.Threading.Tasks;
using Abp.Dependency;
namespace Abp.MqMessages
{
    /// <summary>
    /// 消息发布接口
    /// </summary>
    public interface IMqMessagePublisher : ITransientDependency
    {
        /// <summary>
        /// 发布
        /// </summary>
        /// <param name="mqMessages"></param>
        void Publish(object mqMessages);

        /// <summary>
        /// 发布
        /// </summary>
        /// <param name="mqMessages"></param>
        /// <returns></returns>
        Task PublishAsync(object mqMessages);
    }
}


================================================
FILE: src/Abplus/MqMessages/MessageTrackers/DefaultInMemoryMessageTracker.cs
================================================
using System.Collections.Concurrent;
using System.Linq;
using System.Threading.Tasks;

namespace Abp.MqMessages.MessageTrackers
{
    public class DefaultInMemoryMessageTracker : IMessageTracker
    {
        private static readonly ConcurrentBag<string> InMemoryStore;

        static DefaultInMemoryMessageTracker()
        {
            InMemoryStore = new ConcurrentBag<string>();
        }

        public static DefaultInMemoryMessageTracker Instance { get; } = new DefaultInMemoryMessageTracker();

        public Task MarkAsProcessed(string processId)
        {
            InMemoryStore.Add(processId);
            return Task.FromResult(0);
        }

        public Task<bool> HasProcessed(string processId)
        {
            return Task.FromResult(InMemoryStore.Contains(processId));
        }
    }
}


================================================
FILE: src/Abplus/MqMessages/MessageTrackers/IMessageTracker.cs
================================================
using System.Threading.Tasks;

namespace Abp.MqMessages.MessageTrackers
{
    public interface IMessageTracker
    {
        /// <summary>
        /// 查询是否已处理过
        /// </summary>
        /// <param name="processId">能唯一标记本次处理过程的Id,可采用msgId+HandlerName等组合</param>
        /// <returns></returns>
        Task<bool> HasProcessed(string processId);

        /// <summary>
        /// 标记为已处理过
        /// </summary>
        /// <param name="processId">能唯一标记本次处理过程的Id,可采用msgId+HandlerName等组合</param>
        /// <returns></returns>
        Task MarkAsProcessed(string processId);
    }
}


================================================
FILE: src/Abplus/MqMessages/NullMqMessagePublisher.cs
================================================
using System.Threading.Tasks;

namespace Abp.MqMessages
{
    /// <summary>
    /// 空模式
    /// </summary>
    public class NullMqMessagePublisher : IMqMessagePublisher
    {
        /// <summary>
        /// 
        /// </summary>
        public static NullMqMessagePublisher Instance { get; } = new NullMqMessagePublisher();

        /// <summary>
        /// 
        /// </summary>
        /// <param name="mqMessages"></param>
        /// <returns></returns>
        public Task PublishAsync(object mqMessages)
        {
            //do nothing.
            return Task.FromResult(0);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="mqMessages"></param>
        public void Publish(object mqMessages)
        {
            //do nothing.
        }
    }
}


================================================
FILE: src/Abplus/PlugIns/IPlugInAreaRegistration.cs
================================================
namespace Abp.PlugIns
{
    public interface IPlugInAreaRegistration
    {
    }
}


================================================
FILE: src/Abplus/PlugIns/IPlugInAuthorizationProvider.cs
================================================
namespace Abp.PlugIns
{
    public interface IPlugInAuthorizationProvider
    {
    }
}


================================================
FILE: src/Abplus/PlugIns/IPlugInNavigationProvider.cs
================================================
namespace Abp.PlugIns
{
    public interface IPlugInNavigationProvider
    {
    }
}


================================================
FILE: src/Abplus/QrCode/IQrCodeScannedRealTimeNotifier.cs
================================================
using System.Threading.Tasks;

namespace Abp.QrCode
{
    public interface IQrCodeScannedRealTimeNotifier
    {
        Task Notify(string scannerIdentifier, string connectionId, object properties = null);
    }
}


================================================
FILE: src/Abplus/Reservations/Events/ReservationCancelledEventData.cs
================================================
namespace Abp.Reservations.Events
{
    /// <summary>
    /// 预定取消事件抽象基类
    /// </summary>
    public abstract class ReservationCancelledEventData : ReservationEventDataBase
    {
    }
}


================================================
FILE: src/Abplus/Reservations/Events/ReservationEventDataBase.cs
================================================
using Abp.Events.Bus;
using Abp.TimeRanges;

namespace Abp.Reservations.Events
{
    /// <summary>
    /// 预定发生变化的事件基类
    /// </summary>
    public abstract class ReservationEventDataBase : EventData
    {
        /// <summary>
        /// 预定记录唯一标识
        /// </summary>
        public string ReservationCode { get; set; }
        /// <summary>
        /// 预定主题
        /// </summary>
        public string ReservationSubject { get; set; }
        /// <summary>
        /// 预定时间区间
        /// </summary>
        public TimeRange ReservationTimeRange { get; set; }
    }
}


================================================
FILE: src/Abplus/Reservations/Events/ReservationSuccessEventData.cs
================================================
namespace Abp.Reservations.Events
{
    /// <summary>
    /// 预定成功事件抽象基类
    /// </summary>
    public abstract class ReservationSuccessEventData : ReservationEventDataBase
    {
    }
}


================================================
FILE: src/Abplus/Reservations/IReservation.cs
================================================
using System.Collections.Generic;
using Abp.TimeRanges;

namespace Abp.Reservations
{
    /// <summary>
    /// 预定
    /// </summary>
    public interface IReservation
    {
        /// <summary>
        /// 预定的主题
        /// </summary>
        string ReservationSubject { get; }

        /// <summary>
        /// 预定的类型
        /// </summary>
        string ReservationType { get; }

        /// <summary>
        /// 预定的唯一编码
        /// </summary>
        string ReservationCode { get; }

        /// <summary>
        /// 预定的时间
        /// </summary>
        TimeRange ReservationTime { get; }

        /// <summary>
        /// 同一预定主体的两个预定应检测是否冲突
        /// </summary>
        /// <param name="reservation"></param>
        /// <returns></returns>
        bool IsConflict(IReservation reservation);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="reservations"></param>
        /// <returns></returns>
        bool IsConflict(IEnumerable<IReservation> reservations);
    }
}


================================================
FILE: src/Abplus/Reservations/IReservationBody.cs
================================================
using System;
using System.Collections.Generic;

namespace Abp.Reservations
{
    /// <summary>
    /// 可被预定的资源主体
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public interface IReservationBody<T> where T : IReservation
    {
        /// <summary>
        /// 可被预定的资源唯一标识(建议8位数字)
        /// </summary>
        string ResourceCode { get; }

        /// <summary>
        /// 资源的预定列表
        /// </summary>
        ICollection<T> Reservations { get; }

        /// <summary>
        /// 预定
        /// </summary>
        /// <param name="subject"></param>
        /// <param name="from"></param>
        /// <param name="to"></param>
        /// <returns></returns>
        T Reserve(string subject, DateTime from, DateTime to);

        /// <summary>
        /// 取消预定
        /// </summary>
        /// <param name="reservationCode"></param>
        /// <returns></returns>
        T CancelReservation(string reservationCode);
    }
}


================================================
FILE: src/Abplus/Reservations/ReservationBase.cs
================================================
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using Abp.Domain.Entities.Auditing;
using Abp.TimeRanges;

namespace Abp.Reservations
{
    /// <summary>
    /// 预定基类,可被预定的资源拥有一个预定的列表,具体预定的实现可继承本基类
    /// </summary>
    public abstract class ReservationBase : CreationAuditedEntity<Guid>, IReservation
    {
        /// <summary>
        /// 默认最小预定时间区间长度(单位:分钟)
        /// </summary>
        public const int DefaultMinTimeRangeLengthForReservationInMinutes = 3;//预定记录唯一编码受预定时间区间粒度影响

        protected ReservationBase() { }

        public ReservationBase(string reservationSubject, TimeRange reservationTime, string reservationType, string reservationResourceCode)
        {
            if (reservationTime.To.Subtract(reservationTime.From).TotalMinutes < MinTimeRangeLengthForReservationInMinutes)
            {
                throw new ArgumentException($"预定时间区间应大于{MinTimeRangeLengthForReservationInMinutes}分钟!");
            }

            ReservationType = reservationType;
            ReservationSubject = reservationSubject;
            ReservationTime = reservationTime;

            SetReservationCode(reservationResourceCode);
        }

        protected virtual int MinTimeRangeLengthForReservationInMinutes
        {
            get
            {
                return DefaultMinTimeRangeLengthForReservationInMinutes;
            }
        }

        /// <summary>
        /// 生成预定唯一编码
        /// </summary>
        /// <param name="resourceCode"></param>
        protected virtual void SetReservationCode(string resourceCode)
        {
            ReservationCode = $"{ReservationType}-{resourceCode}-{ReservationTime.From.ToString("yyyyMMddHHmm")}";
        }

        /// <summary>
        /// 预定类型
        /// </summary>
        [MaxLength(10)]
        public string ReservationType { get; private set; }

        /// <summary>
        /// 预定唯一编码
        /// </summary>
        public string ReservationCode { get; private set; }

        /// <summary>
        /// 预定主题
        /// </summary>
        [MaxLength(256)]
        public string ReservationSubject { get; private set; }

        /// <summary>
        /// 所预定的时间区间
        /// </summary>
        public TimeRange ReservationTime { get; private set; }

        /// <summary>
        /// 是否冲突
        /// </summary>
        /// <param name="reservation"></param>
        /// <returns></returns>
        public virtual bool IsConflict(IReservation reservation)
        {
            return ReservationTime.IsIntersect(reservation.ReservationTime);
        }

        /// <summary>
        /// 是否冲突
        /// </summary>
        /// <param name="reservations"></param>
        /// <returns></returns>
        public virtual bool IsConflict(IEnumerable<IReservation> reservations)//ICollection<IReservation> 不支持逆变
        {
            var times = reservations.Select(r => r.ReservationTime).ToList();
            return ReservationTime.IsIntersect(times);
        }
    }
}


================================================
FILE: src/Abplus/Reservations/ReservationBodyBase.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using Abp.Domain.Entities;
using Abp.Events.Bus;
using Abp.TimeRanges;
using Abp.Timing;

namespace Abp.Reservations
{
    /// <summary>
    /// 可被预定主体的抽象基类
    /// </summary>
    /// <typeparam name="TReservation"></typeparam>
    /// <typeparam name="TPrimary"></typeparam>
    public abstract class ReservationBodyBase<TReservation, TPrimary> : AggregateRoot<TPrimary>, IReservationBody<TReservation> where TReservation : IReservation
    {
        /// <summary>
        /// 可被预定主体的唯一标识
        /// </summary>
        public string ResourceCode { get; protected set; }

        /// <summary>
        /// 预定列表
        /// </summary>
        public virtual ICollection<TReservation> Reservations { get; protected set; }

        /// <summary>
        /// 获取预定取消时应触发的事件
        /// </summary>
        protected abstract Func<TReservation, IEventData> GetReservationCancelledEventData { get; }
        /// <summary>
        /// 检查新增预定是否与已有预定相冲突
        /// </summary>
        protected abstract Func<TReservation, IEnumerable<TReservation>, bool> GetIfTheseReservationsConflict { get; }
        /// <summary>
        /// 获取预定成功时应触发的事件
        /// </summary>
        protected abstract Func<TReservation, IEventData> GetReserveSuccessEventData { get; }
        /// <summary>
        /// 如果新增预定与已有预定相冲突时,应抛出的具体异常
        /// </summary>
        protected abstract Action ThrowIfTheseReservationsConflict { get; }

        /// <summary>
        /// 取消预定
        /// </summary>
        /// <param name="reservationCode"></param>
        /// <returns></returns>
        public virtual TReservation CancelReservation(string reservationCode)
        {
            Check.NotNullOrWhiteSpace(reservationCode, nameof(reservationCode));

            var reservation = Reservations.FirstOrDefault(r => r.ReservationCode == reservationCode);
            if (reservation == null)
            {
                return reservation;
            }

            Reservations.Remove(reservation);

            DomainEvents.Add(GetReservationCancelledEventData(reservation));

            return reservation;
        }

        /// <summary>
        /// 预定
        /// </summary>
        /// <param name="subject">预定主题</param>
        /// <param name="from">时间区间起</param>
        /// <param name="to">时间区间止</param>
        /// <returns></returns>
        public virtual TReservation Reserve(string subject, DateTime from, DateTime to)
        {
            Check.NotNullOrWhiteSpace(subject, nameof(subject));

            TReservation newReservation = (TReservation)Activator.CreateInstance(typeof(TReservation), subject, new TimeRange(from, to), ResourceCode);

            var reservations = Reservations.Where(r => r.ReservationTime.To > Clock.Now).ToList();
            if (reservations.Any())
            {
                if (GetIfTheseReservationsConflict(newReservation, reservations))
                {
                    ThrowIfTheseReservationsConflict();
                }
            }

            Reservations.Add(newReservation);

            DomainEvents.Add(GetReserveSuccessEventData(newReservation));

            return newReservation;
        }
    }
}


================================================
FILE: src/Abplus/Runtime/OS/EnvDescription.cs
================================================
namespace Abp.Runtime.OS
{
    public class EnvDescription
    {
        public string FrameworkDescription { get; set; }
        public string OSDescription { get; set; }
        public string OSArchitecture { get; set; }
        public string ProcessArchitecture { get; set; }
    }
}


================================================
FILE: src/Abplus/Runtime/OS/EnvironmentHelper.cs
================================================
using System.Runtime.InteropServices;

namespace Abp.Runtime.OS
{
    public static class EnvironmentHelper
    {
        public static EnvDescription GetRuntimeInformation()
        {
            return new EnvDescription
            {
                FrameworkDescription = RuntimeInformation.FrameworkDescription,
                OSArchitecture = RuntimeInformation.OSArchitecture.ToString(),
                OSDescription = RuntimeInformation.OSDescription,
                ProcessArchitecture = RuntimeInformation.ProcessArchitecture.ToString()
            };
        }
    }
}


================================================
FILE: src/Abplus/TimeRanges/TimeRange.cs
================================================
using System;
using System.Collections.Generic;
using Abp.Domain.Values;

namespace Abp.TimeRanges
{
    public class TimeRange : ValueObject
    {
        protected TimeRange() { }

        public TimeRange(DateTime from, DateTime to)
        {
            Check.NotNull(from, nameof(from));
            Check.NotNull(to, nameof(to));

            if (from >= to)
            {
                throw new ArgumentException("时间区间的起点必须小于终点!");
            }

            From = from;
            To = to;
        }

        /// <summary>
        /// 时间区间起
        /// </summary>
        public DateTime From { get; private set; }
        /// <summary>
        /// 时间区间止
        /// </summary>
        public DateTime To { get; private set; }

        /// <summary>
        /// 包含,一般用于匹配
        /// </summary>
        /// <param name="that"></param>
        /// <returns></returns>
        public bool IsIncluding(TimeRange that)
        {
            Check.NotNull(that, nameof(that));

            return From <= that.From && To >= that.To;
        }

        /// <summary>
        /// 相交,一般用于检测冲突
        /// </summary>
        /// <param name="that"></param>
        /// <returns></returns>
        public bool IsIntersect(TimeRange that)
        {
            Check.NotNull(that, nameof(that));

            return To >= that.From && To <= that.To
                || From >= that.From && To <= that.To
                || From >= that.From && From <= that.To;
        }

        /// <summary>
        /// 相交,一般用于检测冲突
        /// </summary>
        /// <param name="those"></param>
        /// <returns></returns>
        public bool IsIntersect(ICollection<TimeRange> those)
        {
            Check.NotNull(those, nameof(those));
            foreach (var that in those)
            {
                if (IsIntersect(that))
                {
                    return true;
                }
            }

            return false;
        }

        protected override IEnumerable<object> GetAtomicValues()
        {
            yield return From;
            yield return To;
        }
    }
}


================================================
FILE: src/Abplus.AspNetCore.SignalR/Abplus.AspNetCore.SignalR.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">
  <Import Project="..\..\common.props"></Import>
  
  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <RootNamespace>Abp</RootNamespace>
    <AssemblyName>Abplus.AspNetCore.SignalR</AssemblyName>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="abp" Version="6.3.1" />
    <PackageReference Include="Abp.AspNetCore.SignalR" Version="4.5.0" />
    <PackageReference Include="stackexchange.redis" Version="1.2.6" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Abplus\Abplus.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: src/Abplus.AspNetCore.SignalR/Abplus.AspNetCore.SignalR.nuspec
================================================
<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>personball</authors>
    <owners>personball</owners>
    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>
    <projectUrl>https://github.com/personball/abplus</projectUrl>
    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Abp plus, an extension for Abp Framework. </description>
    <releaseNotes></releaseNotes>
    <copyright>Copyright 2018</copyright>
    <tags></tags>
    <dependencies>
      <dependency id="Abplus" version="$version$" />
      <dependency id="Abp.AspNetCore.SignalR" version="4.5.0" />
      <dependency id="StackExchange.Redis" version="1.2.6" />
    </dependencies>
  </metadata>
</package>

================================================
FILE: src/Abplus.AspNetCore.SignalR/Configuration/Startup/RedisOnlineClientManagerConfiguationExtensions.cs
================================================
using Abp.RealTime;

namespace Abp.Configuration.Startup
{
    public static class RedisOnlineClientManagerConfiguationExtensions
    {
        public static IRedisOnlineClientManagerModuleConfig UseRedisOnlineClientManager(this IModuleConfigurations configurations)
        {
            return configurations.AbpConfiguration.GetOrCreate("Modules.Abplus.RedisOnlineClientManager", () => configurations.AbpConfiguration.IocManager.Resolve<IRedisOnlineClientManagerModuleConfig>());
        }
    }
}


================================================
FILE: src/Abplus.AspNetCore.SignalR/RealTime/IRedisOnlineClientManagerModuleConfig.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Abp.RealTime
{
    public interface IRedisOnlineClientManagerModuleConfig
    {
        /// <summary>
        /// Redis连接字符串
        /// </summary>
        string ConnectionString { get;  }

        /// <summary>
        /// 在线状态列表存储的键名
        /// </summary>
        string StoreKey { get; }


        IRedisOnlineClientManagerModuleConfig ConnectTo(string connectionString);

        IRedisOnlineClientManagerModuleConfig WithStoreKey(string storeKey);
    }
}


================================================
FILE: src/Abplus.AspNetCore.SignalR/RealTime/RedisOnlineClientManager.cs
================================================
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using Abp.Dependency;
using Abp.Extensions;
using Abp.Json;
using Castle.Core.Logging;
using Newtonsoft.Json;
using StackExchange.Redis;

namespace Abp.RealTime
{
    /// <summary>
    /// 基于Redis的OnlineClientManager
    /// </summary>
    public class RedisOnlineClientManager : IOnlineClientManager
    {
        /// <summary>
        /// Client 连接成功时
        /// </summary>
        public event EventHandler<OnlineClientEventArgs> ClientConnected;
        /// <summary>
        /// Client断开连接时
        /// </summary>
        public event EventHandler<OnlineClientEventArgs> ClientDisconnected;
        /// <summary>
        /// 用户连接成功时
        /// </summary>
        public event EventHandler<OnlineUserEventArgs> UserConnected;
        /// <summary>
        /// 用户断开连接时
        /// </summary>
        public event EventHandler<OnlineUserEventArgs> UserDisconnected;

        private readonly string _connectionString;
        private readonly string _storeKey;
        private readonly string _clientStoreKey;
        private readonly string _userStoreKey;

        private readonly Lazy<ConnectionMultiplexer> _connectionMultiplexer;

        private readonly object _syncObj = new object();

        /// <summary>
        /// 日志
        /// </summary>
        public ILogger Logger { get; set; }

        /// <summary>
        /// ctor
        /// </summary>
        public RedisOnlineClientManager()
        {
            var config = IocManager.Instance.Resolve<IRedisOnlineClientManagerModuleConfig>();
            if (config == null || config.ConnectionString.IsNullOrWhiteSpace() || config.StoreKey.IsNullOrWhiteSpace())
            {
                throw new Exception("RedisOnlineClientManagerModuleConfig is invalid!");
            }

            _connectionString = config.ConnectionString;
            _storeKey = config.StoreKey;
            _clientStoreKey = _storeKey + ".Clients";
            _userStoreKey = _storeKey + ".Users";
            Logger = NullLogger.Instance;

            _connectionMultiplexer = new Lazy<ConnectionMultiplexer>(CreateConnectionMultiplexer);
        }

        private ConnectionMultiplexer CreateConnectionMultiplexer()
        {
            return ConnectionMultiplexer.Connect(_connectionString);
        }

        /// <summary>
        /// 获取Redis Database
        /// </summary>
        /// <returns></returns>
        protected IDatabase GetDatabase()
        {
            return _connectionMultiplexer.Value.GetDatabase();
        }

        /// <summary>
        /// 添加Client
        /// </summary>
        /// <param name="client"></param>
        public void Add(IOnlineClient client)
        {
            lock (_syncObj)
            {
                var userWasAlreadyOnline = false;
                var user = client.ToUserIdentifierOrNull();

                if (user != null)
                {
                    userWasAlreadyOnline = IsUserOnline(user);
                }

                AddClientToRedisStore(client);

                ClientConnected.InvokeSafely(this, new OnlineClientEventArgs(client));

                if (user != null && !userWasAlreadyOnline)
                {
                    UserConnected.InvokeSafely(this, new OnlineUserEventArgs(user, client));
                }
            }
        }

        private bool IsUserOnline(UserIdentifier user)
        {
            var _database = GetDatabase();
            return _database.HashExists(_userStoreKey, user.ToUserIdentifierString());
        }

        private void AddClientToRedisStore(IOnlineClient client)
        {
            var _database = GetDatabase();
            _database.HashSet(_clientStoreKey, new HashEntry[] { new HashEntry(client.ConnectionId, client.ToString()) });
            var userId = client.ToUserIdentifierOrNull();
            if (userId == null)
            {
                return;
            }

            var userClients = new List<string>();
            var userClientsValue = _database.HashGet(_userStoreKey, userId.ToUserIdentifierString());
            if (userClientsValue.HasValue)
            {
                userClients = JsonConvert.DeserializeObject<List<string>>(userClientsValue);
            }

            if (userClients.Contains(client.ConnectionId))
            {
                return;
            }

            userClients.Add(client.ConnectionId);
            _database.HashSet(_userStoreKey, new HashEntry[] { new HashEntry(userId.ToUserIdentifierString(), userClients.ToJsonString()) });
        }

        /// <summary>
        /// 获取所有Clients
        /// </summary>
        /// <returns></returns>
        public IReadOnlyList<IOnlineClient> GetAllClients()
        {
            lock (_syncObj)
            {
                var _database = GetDatabase();
                var clientsEntries = _database.HashGetAll(_clientStoreKey);
                var clients = new List<IOnlineClient>();
                foreach (var entry in clientsEntries)
                {
                    clients.Add(JsonConvert.DeserializeObject<OnlineClient>(entry.Value));
                }

                return clients.ToImmutableList();
            }
        }

        /// <summary>
        /// 根据连接id获取client
        /// </summary>
        /// <param name="connectionId"></param>
        /// <returns></returns>
        public IOnlineClient GetByConnectionIdOrNull(string connectionId)
        {
            lock (_syncObj)
            {
                var _database = GetDatabase();
                var clientValue = _database.HashGet(_clientStoreKey, connectionId);
                if (clientValue.IsNullOrEmpty)
                {
                    return null;
                }

                return JsonConvert.DeserializeObject<OnlineClient>(clientValue);
            }
        }

        /// <summary>
        /// 移除Client
        /// </summary>
        /// <param name="connectionId"></param>
        /// <returns></returns>
        public bool Remove(string connectionId)
        {
            lock (_syncObj)
            {
                var _database = GetDatabase();
                var clientValue = _database.HashGet(_clientStoreKey, connectionId);
                if (clientValue.IsNullOrEmpty)
                {
                    return true;
                }

                var client = JsonConvert.DeserializeObject<OnlineClient>(clientValue);
                var user = client.ToUserIdentifierOrNull();
                if (user != null)
                {
                    //从_userStoreKey中移除一个client
                    var userClientsValue = _database.HashGet(_userStoreKey, user.ToUserIdentifierString());
                    if (userClientsValue.HasValue)
                    {
                        var userClients = JsonConvert.DeserializeObject<List<string>>(userClientsValue);
                        userClients.Remove(connectionId);
                        if (userClients.Count > 0)
                        {
                            //更新
                            _database.HashSet(_userStoreKey, new HashEntry[] { new HashEntry(user.ToUserIdentifierString(), userClients.ToJsonString()) });
                        }
                        else
                        {
                            //删除
                            _database.HashDelete(_userStoreKey, user.ToUserIdentifierString());
                        }
                    }

                    _database.HashDelete(_clientStoreKey, connectionId);

                    if (!IsUserOnline(user))
                    {
                        UserDisconnected.InvokeSafely(this, new OnlineUserEventArgs(user, client));
                    }
                }

                ClientDisconnected.InvokeSafely(this, new OnlineClientEventArgs(client));
                return true;
            }
        }

        /// <summary>
        /// 获取指定user的所有clients
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public IReadOnlyList<IOnlineClient> GetAllByUserId(IUserIdentifier user)
        {
            var clients = new List<OnlineClient>();

            var userIdentifier = new UserIdentifier(user.TenantId, user.UserId);
            if (!IsUserOnline(userIdentifier))
            {
                return clients;
            }

            lock (_syncObj)
            {
                var _database = GetDatabase();

                var userClients = new List<string>();
                var userClientsValue = _database.HashGet(_userStoreKey, userIdentifier.ToUserIdentifierString());
                if (userClientsValue.HasValue)
                {
                    userClients = JsonConvert.DeserializeObject<List<string>>(userClientsValue);
                    foreach (var connectionId in userClients)
                    {
                        var clientValue = _database.HashGet(_clientStoreKey, connectionId);
                        if (clientValue.IsNullOrEmpty)
                        {
                            continue;
                        }

                        clients.Add(JsonConvert.DeserializeObject<OnlineClient>(clientValue));
                    }
                }
            }

            return clients;
        }
    }
}


================================================
FILE: src/Abplus.AspNetCore.SignalR/RealTime/RedisOnlineClientManagerModule.cs
================================================
using System.Reflection;
using Abp.Dependency;
using Abp.Modules;

namespace Abp.RealTime
{
    public class RedisOnlineClientManagerModule : AbpModule
    {
        public override void PreInitialize()
        {
            //base.PreInitialize();
            IocManager.Register<IRedisOnlineClientManagerModuleConfig, RedisOnlineClientManagerModuleConfig>();
            IocManager.Register<IOnlineClientManager, RedisOnlineClientManager>(DependencyLifeStyle.Singleton);
        }

        public override void Initialize()
        {
            //base.Initialize();
            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
        }
    }

}


================================================
FILE: src/Abplus.AspNetCore.SignalR/RealTime/RedisOnlineClientManagerModuleConfig.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Abp.RealTime
{
    public class RedisOnlineClientManagerModuleConfig : IRedisOnlineClientManagerModuleConfig
    {
        public string ConnectionString { get; private set; }

        public string StoreKey { get; private set; }

        public RedisOnlineClientManagerModuleConfig()
        {
            ConnectionString = string.Empty;
            StoreKey = "Abplus.RealTime.OnlineClients";
        }

        public IRedisOnlineClientManagerModuleConfig ConnectTo(string connectionString)
        {
            ConnectionString = connectionString;
            return this;
        }

        public IRedisOnlineClientManagerModuleConfig WithStoreKey(string storeKey)
        {
            StoreKey = storeKey;
            return this;
        }
    }
}


================================================
FILE: src/Abplus.AspNetCore.SignalR/Web/SignalR/QrScan/SignalRQrCodeScannedRealTimeNotifier.cs
================================================
using System;
using System.Threading.Tasks;
using Abp.AspNetCore.SignalR.Hubs;
using Abp.QrCode;
using Castle.Core.Logging;
using Microsoft.AspNetCore.SignalR;

namespace Abp.Web.SignalR.QrScan
{
    public class SignalRQrCodeScannedRealTimeNotifier : IQrCodeScannedRealTimeNotifier
    {
        /// <summary>
        /// Reference to the logger.
        /// </summary>
        public ILogger Logger { get; set; }

        private readonly IHubContext<AbpCommonHub> _commonHub;
       
        /// <summary>
        /// Initializes a new instance of the <see cref="SignalRRealTimeNotifier"/> class.
        /// </summary>
        public SignalRQrCodeScannedRealTimeNotifier(IHubContext<AbpCommonHub> commonHub)
        {
            Logger = NullLogger.Instance;
            _commonHub = commonHub;
        }

        public Task Notify(string scannerId, string connectionId, object properties = null)
        {
            try
            {
                var signalRClient = _commonHub.Clients.Client(connectionId);
                if (signalRClient == null)
                {
                    throw new Exception($"Can not find the client with connectionId:{connectionId}");
                }

                signalRClient.SendAsync("qrScanned",scannerId, properties);
            }
            catch (Exception ex)
            {
                Logger.Warn(ex.ToString(), ex);
            }

            return Task.FromResult(0);
        }
    }
}


================================================
FILE: src/Abplus.AspNetCore.SignalR/Web/SignalR/QrScan/SignalRQrCodeScannedRealTimeNotifierModule.cs
================================================
using Abp.Modules;
using Abp.QrCode;

namespace Abp.Web.SignalR.QrScan
{
    public class SignalRQrCodeScannedRealTimeNotifierModule : AbpModule
    {
        public override void PreInitialize()
        {
            //base.PreInitialize();
            IocManager.Register<IQrCodeScannedRealTimeNotifier, SignalRQrCodeScannedRealTimeNotifier>();
        }
    }
}


================================================
FILE: src/Abplus.IO.AliyunOSSStorage/Abplus.IO.AliyunOSSStorage.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props"></Import>
  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
     <RootNamespace>Abp</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <None Remove="Localization\SourceFiles\AliyunOSSStorage-zh-Hans.xml" />
    <None Remove="Localization\SourceFiles\AliyunOSSStorage.xml" />
  </ItemGroup>

  <ItemGroup>
    <EmbeddedResource Include="Localization\SourceFiles\AliyunOSSStorage-zh-Hans.xml" />
    <EmbeddedResource Include="Localization\SourceFiles\AliyunOSSStorage.xml" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Abp" Version="6.3.1" />
    <PackageReference Include="Aliyun.OSS.SDK.NetCore" Version="2.9.1" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Abplus\Abplus.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: src/Abplus.IO.AliyunOSSStorage/Configuration/Startup/AliyunOSSStorageConfigurationExtensions.cs
================================================
using Abp.IO.AliyunOSSStorage;

namespace Abp.Configuration.Startup
{
    public static class AliyunOSSStorageConfigurationExtensions
    {
        public static IAliyunOSSStorageModuleConfiguration UseAliyunOSSStorage(this IModuleConfigurations configurations)
        {
            return configurations.AbpConfiguration.GetOrCreate("Modules.Abplus.AliyunOSSStorage",
                () => configurations.AbpConfiguration.IocManager.Resolve<IAliyunOSSStorageModuleConfiguration>());
        }
    }
}


================================================
FILE: src/Abplus.IO.AliyunOSSStorage/IO/AliyunOSSStorage/AliyunOSSStorage.cs
================================================
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using Abp.Dependency;
using Abp.Extensions;
using Abp.IO.Extensions;
using Aliyun.OSS;
using Castle.Core.Logging;

namespace Abp.IO.AliyunOSSStorage
{
    public class AliyunOSSStorage : IFileStorage
    {
        private static Lazy<OssClient> _client = new Lazy<OssClient>(InitClient, LazyThreadSafetyMode.PublicationOnly);

        private static OssClient InitClient()
        {
            var c = IocManager.Instance.Resolve<IAliyunOSSStorageModuleConfiguration>();
            return new OssClient(c.Endpoint, c.AccessKeyId, c.AccessKeySecret);
        }

        private readonly IAliyunOSSStorageModuleConfiguration _config;

        protected ILogger Logger { get; set; }

        public AliyunOSSStorage(IAliyunOSSStorageModuleConfiguration config)
        {
            _config = config;
            Logger = NullLogger.Instance;
        }

        public Task Delete(string fileName, string subPath = null)
        {
            if (!subPath.IsNullOrWhiteSpace())
            {
                subPath = subPath.EnsureEndsWith('/');
            }

            _client.Value.DeleteObject(_config.BucketName, $"{subPath}{fileName}");
            return Task.FromResult(0);
        }

        public Task<byte[]> ReadAsBytes(string fileName, string subPath = null)
        {
            if (!subPath.IsNullOrWhiteSpace())
            {
                subPath = subPath.EnsureEndsWith('/');
            }

            var ossObj = _client.Value.GetObject(_config.BucketName, $"{subPath}{fileName}");
            try
            {
                using (var rs = ossObj.Content)
                {
                    var bytes = rs.GetAllBytes();
                    return Task.FromResult(bytes);
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message, ex);
                throw ex;
            }
        }

        public Task<string> Save(Stream source, string fileName, string subPath = null)
        {
            if (!subPath.IsNullOrWhiteSpace())
            {
                subPath = subPath.EnsureEndsWith('/');
            }

            _client.Value.PutObject(_config.BucketName, $"{subPath}{fileName}", source);

            if (!_config.UriPrefix.IsNullOrWhiteSpace())
            {
                return Task.FromResult($"{_config.UriPrefix.EnsureEndsWith('/')}{subPath}{fileName}");
            }

            return Task.FromResult($"{subPath}{fileName}");
        }

        public Task<string> Save(byte[] source, string fileName, string subPath = null)
        {
            if (!subPath.IsNullOrWhiteSpace())
            {
                subPath = subPath.EnsureEndsWith('/');
            }

            var stream = new MemoryStream(source);

            _client.Value.PutObject(_config.BucketName, $"{subPath}{fileName}", stream);

            if (!_config.UriPrefix.IsNullOrWhiteSpace())
            {
                return Task.FromResult($"{_config.UriPrefix.EnsureEndsWith('/')}{subPath}{fileName}");
            }

            return Task.FromResult($"{subPath}{fileName}");
        }
    }
}


================================================
FILE: src/Abplus.IO.AliyunOSSStorage/IO/AliyunOSSStorage/AliyunOSSStorageModule.cs
================================================
using System.Reflection;
using Abp.Localization;
using Abp.Modules;

namespace Abp.IO.AliyunOSSStorage
{
    [DependsOn(typeof(AbpKernelModule))]
    public class AliyunOSSStorageModule : AbpModule
    {
        public override void PreInitialize()
        {
            IocManager.Register<IAliyunOSSStorageModuleConfiguration, AliyunOSSStorageModuleConfiguration>();
        }
        public override void Initialize()
        {
            IocManager.Register<IFileStorage, AliyunOSSStorage>();
            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());

            AliyunOSSStorageLocalizationConfigurer.Configure(Configuration.Localization);
        }
    }
}


================================================
FILE: src/Abplus.IO.AliyunOSSStorage/IO/AliyunOSSStorage/AliyunOSSStorageModuleConfiguration.cs
================================================
namespace Abp.IO.AliyunOSSStorage
{
    public class AliyunOSSStorageModuleConfiguration : IAliyunOSSStorageModuleConfiguration
    {
        public string AccessKeyId { get; private set; }

        public string AccessKeySecret { get; private set; }

        public string Endpoint { get; private set; }

        public string BucketName { get; private set; }

        public string UriPrefix { get; private set; }

        public IAliyunOSSStorageModuleConfiguration SetAccessKeyId(string id)
        {
            AccessKeyId = id;
            return this;
        }

        public IAliyunOSSStorageModuleConfiguration SetAccessKeySecret(string secret)
        {
            AccessKeySecret = secret;
            return this;
        }

        public IAliyunOSSStorageModuleConfiguration SetBucketName(string bucketName)
        {
            BucketName = bucketName;
            return this;
        }

        public IAliyunOSSStorageModuleConfiguration SetEndpoint(string endpoint)
        {
            Endpoint = endpoint;
            return this;
        }

        public IAliyunOSSStorageModuleConfiguration WithUriPrefix(string prefix)
        {
            UriPrefix = prefix;
            return this;
        }
    }
}


================================================
FILE: src/Abplus.IO.AliyunOSSStorage/IO/AliyunOSSStorage/IAliyunOSSStorageModuleConfiguration.cs
================================================
namespace Abp.IO.AliyunOSSStorage
{
    public interface IAliyunOSSStorageModuleConfiguration
    {
        string AccessKeyId { get; }
        string AccessKeySecret { get; }
        string Endpoint { get; }
        string BucketName { get; }
        string UriPrefix { get; }

        IAliyunOSSStorageModuleConfiguration SetAccessKeyId(string id);
        IAliyunOSSStorageModuleConfiguration SetAccessKeySecret(string secret);
        IAliyunOSSStorageModuleConfiguration SetEndpoint(string endpoint);
        IAliyunOSSStorageModuleConfiguration SetBucketName(string bucketName);
        IAliyunOSSStorageModuleConfiguration WithUriPrefix(string prefix);
    }
}


================================================
FILE: src/Abplus.IO.AliyunOSSStorage/IO/AliyunOSSStorageConsts.cs
================================================
namespace Abp.IO
{
    public class AliyunOSSStorageConsts
    {
        public const string LocalizationSourceName = "AliyunOSSStorage";
    }
}


================================================
FILE: src/Abplus.IO.AliyunOSSStorage/Localization/AliyunOSSStorageLocalizationConfigurer.cs
================================================
using Abp.Configuration.Startup;
using Abp.IO;
using Abp.Localization.Dictionaries;
using Abp.Localization.Dictionaries.Xml;
using Abp.Reflection.Extensions;

namespace Abp.Localization
{
    public class AliyunOSSStorageLocalizationConfigurer
    {
        public static void Configure(ILocalizationConfiguration localizationConfiguration)
        {
            localizationConfiguration.Sources.Add(
                new DictionaryBasedLocalizationSource(AliyunOSSStorageConsts.LocalizationSourceName,
                    new XmlEmbeddedFileLocalizationDictionaryProvider(
                        typeof(AliyunOSSStorageLocalizationConfigurer).GetAssembly(),
                        "Abp.Localization.SourceFiles"
                    )
                )
            );
        }
    }
}


================================================
FILE: src/Abplus.IO.AliyunOSSStorage/Localization/SourceFiles/AliyunOSSStorage-zh-Hans.xml
================================================
<?xml version="1.0" encoding="utf-8" ?>
<localizationDictionary culture="zh-Hans">
  <texts>
    <text name="HelloWorld" value="你好,世界!" />
  </texts>
</localizationDictionary>

================================================
FILE: src/Abplus.IO.AliyunOSSStorage/Localization/SourceFiles/AliyunOSSStorage.xml
================================================
<?xml version="1.0" encoding="utf-8" ?>
<localizationDictionary culture="en">
  <texts>
    <text name="HelloWorld" value="Hello World!" />
  </texts>
</localizationDictionary>

================================================
FILE: src/Abplus.IO.AzureBlobStorage/Abplus.IO.AzureBlobStorage.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">
  <Import Project="..\..\common.props"></Import>
  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <RootNamespace>Abp</RootNamespace>
  </PropertyGroup>
  <ItemGroup>
    <None Remove="Localization\SourceFiles\AbplusAzureBlobStorage-zh-Hans.xml" />
    <None Remove="Localization\SourceFiles\AbplusAzureBlobStorage.xml" />
  </ItemGroup>
  <ItemGroup>
    <EmbeddedResource Include="Localization\SourceFiles\AbplusAzureBlobStorage-zh-Hans.xml" />
    <EmbeddedResource Include="Localization\SourceFiles\AbplusAzureBlobStorage.xml" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Azure.Storage.Blob" Version="9.4.2" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\Abplus\Abplus.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: src/Abplus.IO.AzureBlobStorage/Abplus.IO.AzureBlobStorage.nuspec
================================================
<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>personball</authors>
    <owners>personball</owners>
    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>
    <projectUrl>https://github.com/personball/abplus</projectUrl>
    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Abp plus, an extension for Abp Framework. </description>
    <releaseNotes></releaseNotes>
    <copyright>Copyright 2019</copyright>
    <tags></tags>
    <dependencies>
      <dependency id="Abplus" version="$version$" />
    </dependencies>
  </metadata>
</package>

================================================
FILE: src/Abplus.IO.AzureBlobStorage/Configuration/Startup/AzureBlobFileStorageConfigurationExtensions.cs
================================================
using Abp.IO.AzureBlobStorage;

namespace Abp.Configuration.Startup
{
    public static  class AzureBlobFileStorageConfigurationExtensions
    {
        public static IAzureBlobFileStorageModuleConfig UseAzureBlobFileStorage(this IModuleConfigurations configurations)
        {
            return configurations.AbpConfiguration.GetOrCreate("Modules.Abplus.AzureBlobFileStorage", 
                () => configurations.AbpConfiguration.IocManager.Resolve<IAzureBlobFileStorageModuleConfig>());
        }
    }
}


================================================
FILE: src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/AzureBlobFileStorage.cs
================================================
using System;
using System.IO;
using System.Threading.Tasks;
using Abp.Extensions;
using Abp.IO.Extensions;
using Castle.Core.Logging;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Blob;

namespace Abp.IO.AzureBlobStorage
{
    public class AzureBlobFileStorage : IFileStorage
    {
        private readonly IAzureBlobFileStorageConfig _config;
        protected ILogger Logger { get; set; }

        public AzureBlobFileStorage(IAzureBlobFileStorageConfig config)
        {
            _config = config;
            Logger = NullLogger.Instance;
        }

        public async Task Delete(string fileName, string subPath = null)
        {
            if (!subPath.IsNullOrWhiteSpace())
            {
                subPath = subPath.EnsureEndsWith('/');
            }

            var container = GetCloudBlobContainer(_config);
            // Get the reference to the block blob from the container
            CloudBlockBlob blockBlob = container.GetBlockBlobReference($"{subPath}{fileName}");

            try
            {
                await blockBlob.DeleteIfExistsAsync();
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message, ex);
                throw ex;
            }
        }

        public async Task<byte[]> ReadAsBytes(string fileName, string subPath = null)
        {
            if (!subPath.IsNullOrWhiteSpace())
            {
                subPath = subPath.EnsureEndsWith('/');
            }

            var container = GetCloudBlobContainer(_config);
            // Get the reference to the block blob from the container
            CloudBlockBlob blockBlob = container.GetBlockBlobReference($"{subPath}{fileName}");

            try
            {
                using (var rs = blockBlob.OpenRead())
                {
                    return rs.GetAllBytes();
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message, ex);
                throw ex;
            }
        }

        public async Task<string> Save(Stream source, string fileName, string subPath = null)
        {
            if (!subPath.IsNullOrWhiteSpace())
            {
                subPath = subPath.EnsureEndsWith('/');
            }

            await UploadFileToStorage(source, $"{subPath}{fileName}", _config);

            return AbsoluteAccessPath(_config, $"{subPath}{fileName}");
        }

        public async Task<string> Save(byte[] source, string fileName, string subPath = null)
        {
            if (!subPath.IsNullOrWhiteSpace())
            {
                subPath = subPath.EnsureEndsWith('/');
            }

            await UploadFileToStorage(source, $"{subPath}{fileName}", _config);

            return AbsoluteAccessPath(_config, $"{subPath}{fileName}");
        }

        private static string AbsoluteAccessPath(IAzureBlobFileStorageConfig config, string relativePathAndFileName)
        {
            return $"https://{config.AccountName}.blob.{config.EndpointSuffix}/{config.Container}/{relativePathAndFileName}";
        }

        private static async Task<bool> UploadFileToStorage(byte[] fileBytes, string fileName, IAzureBlobFileStorageConfig _storageConfig)
        {
            var container = GetCloudBlobContainer(_storageConfig);
            // Get the reference to the block blob from the container
            CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName);

            // Upload the file
            await blockBlob.UploadFromByteArrayAsync(fileBytes, 0, fileBytes.Length);

            return await Task.FromResult(true);
        }

        private static async Task<bool> UploadFileToStorage(Stream fileStream, string fileName, IAzureBlobFileStorageConfig _storageConfig)
        {
            var container = GetCloudBlobContainer(_storageConfig);
            // Get the reference to the block blob from the container
            CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName);

            // Upload the file
            await blockBlob.UploadFromStreamAsync(fileStream);

            return await Task.FromResult(true);
        }

        private static CloudBlobContainer GetCloudBlobContainer(IAzureBlobFileStorageConfig storageConfig)
        {
            // Create storagecredentials object by reading the values from the configuration (appsettings.json)
            StorageCredentials storageCredentials = new StorageCredentials(storageConfig.AccountName, storageConfig.AccountKey);

            // Create cloudstorage account by passing the storagecredentials
            CloudStorageAccount storageAccount = new CloudStorageAccount(storageCredentials, storageConfig.EndpointSuffix, true);

            // Create the blob client.
            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

            // Get reference to the blob container by passing the name by reading the value from the configuration (appsettings.json)
            return blobClient.GetContainerReference(storageConfig.Container);
        }

    }
}


================================================
FILE: src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/AzureBlobFileStorageConfig.cs
================================================
namespace Abp.IO.AzureBlobStorage
{
    public class AzureBlobFileStorageConfig : IAzureBlobFileStorageConfig
    {
        private readonly IAzureBlobFileStorageModuleConfig _moduleConfig;

        public AzureBlobFileStorageConfig(IAzureBlobFileStorageModuleConfig moduleConfig)
        {
            _moduleConfig = moduleConfig;
        }

        public string AccountName => _moduleConfig.AccountName;

        public string AccountKey => _moduleConfig.AccountKey;

        public string Container => _moduleConfig.Container;

        public string EndpointSuffix => _moduleConfig.EndpointSuffix;
    }
}


================================================
FILE: src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/AzureBlobFileStorageModule.cs
================================================
using System.Reflection;
using Abp.IO.AzureBlobStorage.Configuration;
using Abp.Localization;
using Abp.Modules;

namespace Abp.IO.AzureBlobStorage
{
    /// <summary>
    /// TODO 是否由本模块自行实现相关setting设置接口?
    /// </summary>
    [DependsOn(typeof(AbpKernelModule))]//依赖SettingManager
    public class AzureBlobFileStorageModule : AbpModule
    {
        public override void PreInitialize()
        {
            IocManager.Register<IAzureBlobFileStorageModuleConfig, AzureBlobFileStorageModuleConfig>();
        }

        public override void Initialize()
        {
            var moduleConfig = IocManager.Resolve<IAzureBlobFileStorageModuleConfig>();
            if (moduleConfig.UseSettingManager)
            {
                IocManager.Register<IAzureBlobFileStorageConfig, AzureBlobFileStorageSetting>();
            }
            else
            {
                IocManager.Register<IAzureBlobFileStorageConfig, AzureBlobFileStorageConfig>();
            }

            IocManager.Register<IFileStorage, AzureBlobFileStorage>();
            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());

            AzureBlobStorageLocalizationConfigurer.Configure(Configuration.Localization);
        }
    }
}


================================================
FILE: src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/AzureBlobFileStorageModuleConfig.cs
================================================
namespace Abp.IO.AzureBlobStorage
{
    public class AzureBlobFileStorageModuleConfig : IAzureBlobFileStorageModuleConfig
    {
        public AzureBlobFileStorageModuleConfig()
        {
            UseSettingManager = false;
        }

        #region AzureBlobStorageConfig

        public string AccountName { get; private set; }

        public string AccountKey { get; private set; }

        public string Container { get; private set; }

        public string EndpointSuffix { get; private set; }

        #endregion

        public bool UseSettingManager { get; private set; }

        public IAzureBlobFileStorageModuleConfig ConfigAzureStorage()
        {
            UseSettingManager = false;
            return this;
        }

        public void ConfigAzureStorageUseSettingManager()
        {
            UseSettingManager = true;
        }

        public IAzureBlobFileStorageModuleConfig SetAccountKey(string accountKey)
        {
            AccountKey = accountKey;
            return this;
        }

        public IAzureBlobFileStorageModuleConfig SetAccountName(string accountName)
        {
            AccountName = accountName;
            return this;
        }

        public IAzureBlobFileStorageModuleConfig SetContainer(string container)
        {
            Container = container;
            return this;
        }

        public IAzureBlobFileStorageModuleConfig UseEndpointSuffix(string endpointSuffix)
        {
            EndpointSuffix = endpointSuffix;
            return this;
        }
    }
}


================================================
FILE: src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/Configuration/AzureBlobFileStorageSetting.cs
================================================
using Abp.Configuration;

namespace Abp.IO.AzureBlobStorage.Configuration
{
    /// <summary>
    /// use SettingManager to config azure blob storage per tenant
    /// </summary>
    public class AzureBlobFileStorageSetting : IAzureBlobFileStorageConfig
    {
        protected SettingManager SettingManager;

        public AzureBlobFileStorageSetting(SettingManager settingManager)
        {
            SettingManager = settingManager;
        }

        public string AccountName
        {
            get
            {
                return SettingManager.GetSettingValue(AzureBlobFileStorageSettingNames.AccountName);
            }
        }

        public string AccountKey
        {
            get
            {
                return SettingManager.GetSettingValue(AzureBlobFileStorageSettingNames.AccountKey);
            }
        }

        public string Container
        {

            get
            {
                return SettingManager.GetSettingValue(AzureBlobFileStorageSettingNames.Container);
            }
        }

        public string EndpointSuffix
        {
            get
            {
                return SettingManager.GetSettingValue(AzureBlobFileStorageSettingNames.EndpointSuffix);
            }
        }
    }
}


================================================
FILE: src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/Configuration/AzureBlobFileStorageSettingNames.cs
================================================
namespace Abp.IO.AzureBlobStorage.Configuration
{
    public static class AzureBlobFileStorageSettingNames
    {
        public const string AccountName = "Abplus.IO.AzureBlobStorage.AccountName";
        public const string AccountKey = "Abplus.IO.AzureBlobStorage.AccountKey";
        public const string Container = "Abplus.IO.AzureBlobStorage.Container";
        public const string EndpointSuffix = "Abplus.IO.AzureBlobStorage.EndpointSuffix";
        // string ThumbnailContainer { get; set; }
    }
}


================================================
FILE: src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/Configuration/AzureBlobFileStorageSettingProvider.cs
================================================
using System.Collections.Generic;
using Abp.Configuration;
using Abp.Localization;

namespace Abp.IO.AzureBlobStorage.Configuration
{
    public class AzureBlobFileStorageSettingProvider : SettingProvider
    {
        public override IEnumerable<SettingDefinition> GetSettingDefinitions(SettingDefinitionProviderContext context)
        {
            return new List<SettingDefinition>
           {
               new SettingDefinition(
                    AzureBlobFileStorageSettingNames.AccountName,
                    "",
                    L("AzureBlobFileStorageAccountName"),
                    scopes: SettingScopes.Application|SettingScopes.Tenant),

               new SettingDefinition(
                   AzureBlobFileStorageSettingNames.AccountKey,
                   "",
                   L("AzureBlobFileStorageAccountKey"),
                   scopes:SettingScopes.Application|SettingScopes.Tenant),

               new SettingDefinition(
                   AzureBlobFileStorageSettingNames.Container,
                   "",
                   L("AzureBlobFileStorageContainer"),
                   scopes:SettingScopes.Application|SettingScopes.Tenant),

               new SettingDefinition(
                   AzureBlobFileStorageSettingNames.EndpointSuffix,
                   "",
                   L("AzureBlobFileStorageEndpointSuffix"),
                   scopes:SettingScopes.Application|SettingScopes.Tenant)
           };
        }

        private static LocalizableString L(string name)
        {
            return new LocalizableString(name, AzureBlobStorageConsts.LocalizationSourceName);
        }
    }
}


================================================
FILE: src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/IAzureBlobFileStorageConfig.cs
================================================
namespace Abp.IO.AzureBlobStorage
{
    public interface IAzureBlobFileStorageConfig
    {
        string AccountName { get;  }
        string AccountKey { get; }
        string Container { get;  }
        // string ThumbnailContainer { get; }
        string EndpointSuffix { get; }
    }
}


================================================
FILE: src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/IAzureBlobFileStorageModuleConfig.cs
================================================
namespace Abp.IO.AzureBlobStorage
{
    public interface IAzureBlobFileStorageModuleConfig : IAzureBlobFileStorageConfig
    {
        bool UseSettingManager { get; }

        void ConfigAzureStorageUseSettingManager();

        IAzureBlobFileStorageModuleConfig ConfigAzureStorage();
        IAzureBlobFileStorageModuleConfig SetAccountName(string accountName);
        IAzureBlobFileStorageModuleConfig SetAccountKey(string accountKey);
        IAzureBlobFileStorageModuleConfig SetContainer(string container);
        IAzureBlobFileStorageModuleConfig UseEndpointSuffix(string endpointSuffix);
    }
}


================================================
FILE: src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorageConsts.cs
================================================
namespace Abp.IO
{
    public class AzureBlobStorageConsts
    {
        public const string LocalizationSourceName = "AbplusAzureBlobStorage";
    }
}


================================================
FILE: src/Abplus.IO.AzureBlobStorage/Localization/AzureBlobStorageLocalizationConfigurer.cs
================================================
using Abp.Configuration.Startup;
using Abp.IO;
using Abp.Localization.Dictionaries;
using Abp.Localization.Dictionaries.Xml;
using Abp.Reflection.Extensions;

namespace Abp.Localization
{
    public class AzureBlobStorageLocalizationConfigurer
    {
        public static void Configure(ILocalizationConfiguration localizationConfiguration)
        {
            localizationConfiguration.Sources.Add(
                new DictionaryBasedLocalizationSource(AzureBlobStorageConsts.LocalizationSourceName,
                    new XmlEmbeddedFileLocalizationDictionaryProvider(
                        typeof(AzureBlobStorageLocalizationConfigurer).GetAssembly(),
                        "Abp.Localization.SourceFiles"
                    )
                )
            );
        }
    }
}


================================================
FILE: src/Abplus.IO.AzureBlobStorage/Localization/SourceFiles/AbplusAzureBlobStorage-zh-Hans.xml
================================================
<?xml version="1.0" encoding="utf-8" ?>
<localizationDictionary culture="zh-Hans">
  <texts>
    <text name="AzureBlobFileStorageAccountName" value="Azure存储账户" />
    <text name="AzureBlobFileStorageAccountKey" value="访问认证Key" />
    <text name="AzureBlobFileStorageContainer" value="Blob容器名称" />
    <!--Endpoint Suffix即Azure版本,国际版填写core.windows.net 世纪互联版填core.chinacloudapi.cn-->
    <text name="AzureBlobFileStorageEndpointSuffix" value="Endpoint Suffix" />
  </texts>
</localizationDictionary>

================================================
FILE: src/Abplus.IO.AzureBlobStorage/Localization/SourceFiles/AbplusAzureBlobStorage.xml
================================================
<?xml version="1.0" encoding="utf-8" ?>
<localizationDictionary culture="en">
  <texts>
    <text name="AzureBlobFileStorageAccountName" value="Azure Storage Account" />
    <text name="AzureBlobFileStorageAccountKey" value="Access Key" />
    <text name="AzureBlobFileStorageContainer" value="Container Name" />
    <text name="AzureBlobFileStorageEndpointSuffix" value="Endpoint Suffix" />
  </texts>
</localizationDictionary>

================================================
FILE: src/Abplus.IO.LocalFileSystem/Abplus.IO.LocalFileSystem.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">
  <Import Project="..\..\common.props"></Import>
  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <RootNamespace>Abp</RootNamespace>
  </PropertyGroup>
  <ItemGroup>
    <None Remove="Localization\SourceFiles\AbplusLocalFileSystem-zh-Hans.xml" />
    <None Remove="Localization\SourceFiles\AbplusLocalFileSystem.xml" />
  </ItemGroup>
  <ItemGroup>
    <EmbeddedResource Include="Localization\SourceFiles\AbplusLocalFileSystem-zh-Hans.xml" />
    <EmbeddedResource Include="Localization\SourceFiles\AbplusLocalFileSystem.xml" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Abplus\Abplus.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/ILocalFileSystemStorageConfig.cs
================================================
namespace Abp.IO.LocalFileSystem
{
    public interface ILocalFileSystemStorageConfig
    {
        string StoreRootDirectory { get; }

        string AccessUriRootPath { get; }
    }
}


================================================
FILE: src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/LocalFileSystemStorage.cs
================================================
using System.IO;
using System.Threading.Tasks;
using Abp.Extensions;
using Abp.IO.Extensions;
#pragma warning disable CS1998
namespace Abp.IO.LocalFileSystem
{
    /// <summary>
    /// 本地存储,和部署情况相关,只能针对Application配置
    /// 先实现win系统
    /// TODO@personball 跨平台兼容
    /// </summary>
    public class LocalFileSystemStorage : IFileStorage
    {
        private readonly ILocalFileSystemStorageConfig _config;

        public LocalFileSystemStorage(ILocalFileSystemStorageConfig config)
        {
            _config = config;
        }

        public async Task Delete(string fileName, string subPath = null)
        {
            var filePath = $"{_config.StoreRootDirectory.EnsureEndsWith('\\')}{subPath.EnsureEndsWith('\\')}{fileName}";

            if (File.Exists(filePath))
            {
                File.Delete(filePath);
            }
        }

        public async Task<byte[]> ReadAsBytes(string fileName, string subPath = null)
        {
            var filePath = $"{_config.StoreRootDirectory.EnsureEndsWith('\\')}{subPath.EnsureEndsWith('\\')}{fileName}";

            using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                return fs.GetAllBytes();
            }
        }

        public async Task<string> Save(Stream source, string fileName, string subPath = null)
        {
            if (!subPath.IsNullOrWhiteSpace())
            {
                subPath = subPath.EnsureEndsWith('\\');
            }

            var path = $"{_config.StoreRootDirectory.EnsureEndsWith('\\')}{subPath}";

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            using (var fs = new FileStream($"{path}{fileName}", FileMode.Create))
            {
                await source.CopyToAsync(fs);
            }

            return AbsoluteAccessUri(_config, subPath.Replace('\\', '/'), fileName);
        }

        private string AbsoluteAccessUri(ILocalFileSystemStorageConfig config, string subPath, string fileName)
        {
            return $"{config.AccessUriRootPath.EnsureEndsWith('/')}{subPath}{fileName}";
        }

        public async Task<string> Save(byte[] source, string fileName, string subPath = null)
        {
            if (!subPath.IsNullOrWhiteSpace())
            {
                subPath = subPath.EnsureEndsWith('\\');
            }

            var path = $"{_config.StoreRootDirectory.EnsureEndsWith('\\')}{subPath}";

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            File.WriteAllBytes($"{path}{fileName}", source);

            return AbsoluteAccessUri(_config, subPath.Replace('\\', '/'), fileName);
        }
    }
}
#pragma warning restore CS1998


================================================
FILE: src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/LocalFileSystemStorageConfig.cs
================================================
using Abp.Configuration;

namespace Abp.IO.LocalFileSystem
{
    public class LocalFileSystemStorageConfig : ILocalFileSystemStorageConfig
    {
        protected readonly ISettingManager SettingManager;

        public LocalFileSystemStorageConfig(ISettingManager settingManager)
        {
            SettingManager = settingManager;
        }

        public string StoreRootDirectory
        {
            get
            {
                return SettingManager.GetSettingValueForApplication(
                    LocalFileSystemStorageSettingNames.StoreRootDirectory);
            }
        }

        public string AccessUriRootPath
        {
            get
            {
                return SettingManager.GetSettingValueForApplication(
                    LocalFileSystemStorageSettingNames.AccessUriRootPath);
            }
        }
    }
}


================================================
FILE: src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/LocalFileSystemStorageModule.cs
================================================
using System.Reflection;
using Abp.Localization;
using Abp.Modules;

namespace Abp.IO.LocalFileSystem
{
    //TODO 是否由本模块自行实现相关setting设置接口?
    [DependsOn(typeof(AbpKernelModule))]
    public class LocalFileSystemStorageModule : AbpModule
    {
        public override void Initialize()
        {
            //IocManager.Register<ILocalFileSystemStorageConfig, LocalFileSystemStorageConfig>();

            IocManager.Register<IFileStorage, LocalFileSystemStorage>();
            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());

            LocalFileSystemLocalizationConfigurer.Configure(Configuration.Localization);
        }
    }
}


================================================
FILE: src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/LocalFileSystemStorageSettingNames.cs
================================================
namespace Abp.IO.LocalFileSystem
{
    public static class LocalFileSystemStorageSettingNames
    {
        /// <summary>
        /// 存储的根目录,系统目录(注意不同OS的路径表示方式)
        /// </summary>
        public const string StoreRootDirectory = "Abplus.IO.LocalSystemFileStorage.StoreRootDirectory";

        /// <summary>
        /// 读取的URI路径
        /// </summary>
        public const string AccessUriRootPath = "Abplus.IO.LocalSystemFileStorage.AccessUriRootPath";
    }
}


================================================
FILE: src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/LocalFileSystemStorageSettingProvider.cs
================================================
using System.Collections.Generic;
using Abp.Configuration;
using Abp.Localization;

namespace Abp.IO.LocalFileSystem
{
    public class LocalFileSystemStorageSettingProvider : SettingProvider
    {
        public override IEnumerable<SettingDefinition> GetSettingDefinitions(SettingDefinitionProviderContext context)
        {
            return new List<SettingDefinition>
            {
                new SettingDefinition(
                    LocalFileSystemStorageSettingNames.StoreRootDirectory,
                    "",
                    L("StoreRootDirectory"),
                    scopes: SettingScopes.Application),

                new SettingDefinition(
                    LocalFileSystemStorageSettingNames.AccessUriRootPath,
                    "",
                    L("AccessUriRootPath"),
                    scopes:SettingScopes.Application)
            };
        }

        private static LocalizableString L(string name)
        {
            return new LocalizableString(name, LocalFileSystemConsts.LocalizationSourceName);
        }
    }
}


================================================
FILE: src/Abplus.IO.LocalFileSystem/IO/LocalFileSystemConsts.cs
================================================
namespace Abp.IO
{
    public class LocalFileSystemConsts
    {
        public const string LocalizationSourceName = "AbplusLocalFileSystem";
    }
}


================================================
FILE: src/Abplus.IO.LocalFileSystem/Localization/LocalFileSystemLocalizationConfigurer.cs
================================================
using Abp.Configuration.Startup;
using Abp.IO;
using Abp.Localization.Dictionaries;
using Abp.Localization.Dictionaries.Xml;
using Abp.Reflection.Extensions;

namespace Abp.Localization
{
    public  class LocalFileSystemLocalizationConfigurer
    {
        public static void Configure(ILocalizationConfiguration localizationConfiguration)
        {
            localizationConfiguration.Sources.Add(
                new DictionaryBasedLocalizationSource(LocalFileSystemConsts.LocalizationSourceName,
                    new XmlEmbeddedFileLocalizationDictionaryProvider(
                        typeof(LocalFileSystemLocalizationConfigurer).GetAssembly(),
                        "Abp.Localization.SourceFiles"
                    )
                )
            );
        }
    }
}


================================================
FILE: src/Abplus.IO.LocalFileSystem/Localization/SourceFiles/AbplusLocalFileSystem-zh-Hans.xml
================================================
<?xml version="1.0" encoding="utf-8" ?>
<localizationDictionary culture="zh-Hans">
  <texts>
    <text name="StoreRootDirectory" value="本地文件存储根目录" />
    <text name="AccessUriRootPath" value="根目录的Web访问地址" />
  </texts>
</localizationDictionary>

================================================
FILE: src/Abplus.IO.LocalFileSystem/Localization/SourceFiles/AbplusLocalFileSystem.xml
================================================
<?xml version="1.0" encoding="utf-8" ?>
<localizationDictionary culture="en">
  <texts>
    <text name="StoreRootDirectory" value="Root Directory" />
    <text name="AccessUriRootPath" value="Access Uri Root Path" />
  </texts>
</localizationDictionary>

================================================
FILE: src/Abplus.MqMessages/Abplus.MqMessages.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <Import Project="..\..\common.props"></Import>
  
  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <RootNamespace>Abp</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Abp" Version="6.3.1" />
    <PackageReference Include="Abp.AutoMapper" Version="4.5.0" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Abplus\Abplus.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: src/Abplus.MqMessages/Abplus.MqMessages.nuspec
================================================
<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>personball</authors>
    <owners>personball</owners>
    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>
    <projectUrl>https://github.com/personball/abplus</projectUrl>
    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Abp plus, an extension for Abp Framework. </description>
    <releaseNotes></releaseNotes>
    <copyright>Copyright 2018</copyright>
    <tags></tags>
    <dependencies>
      <dependency id="Abplus" version="$version$" />
      <dependency id="Abp.AutoMapper" version="4.5.0" />
    </dependencies>
  </metadata>
</package>

================================================
FILE: src/Abplus.MqMessages/Configuration/Startup/ExceptionLogInterceptorRegistrar.cs
================================================
using Abp.Dependency;
using Abp.MqMessages.MqHandlers;
using Abp.MqMessages.MqHandlers.ExceptionLogging;
using Castle.Core;
using Castle.MicroKernel;

namespace Abp.Configuration.Startup
{
    public static class ExceptionLogInterceptorRegistrar
    {
        public static void Initialize(IIocManager iocManager)
        {
            iocManager.Register<ExceptionLogHandler>();
            iocManager.Register<ExceptionLogInterceptor>();
            iocManager.IocContainer.Kernel.ComponentRegistered += Kernel_ComponentRegistered;
        }

        private static void Kernel_ComponentRegistered(string key, IHandler handler)
        {
            if (typeof(AbpMqHandlerBase).IsAssignableFrom(handler.ComponentModel.Implementation))
            {
                handler.ComponentModel.Interceptors.Add(new InterceptorReference(typeof(ExceptionLogInterceptor)));
            }
        }
    }
}


================================================
FILE: src/Abplus.MqMessages/MqMessages/AuditingStores/AuditInfoMqMessage.cs
================================================
using System;

namespace Abp.MqMessages.AuditingStores
{
    public class AuditInfoMqMessage
    {
        /// <summary>
        /// TenantId.
        /// </summary>
        public int? TenantId { get; set; }

        /// <summary>
        /// UserId.
        /// </summary>
        public long? UserId { get; set; }

        /// <summary>
        /// ImpersonatorUserId.
        /// </summary>
        public long? ImpersonatorUserId { get; set; }

        /// <summary>
        /// ImpersonatorTenantId.
        /// </summary>
        public int? ImpersonatorTenantId { get; set; }

        /// <summary>
        /// Service (class/interface) name.
        /// </summary>
        public string ServiceName { get; set; }

        /// <summary>
        /// Executed method name.
        /// </summary>
        public string MethodName { get; set; }

        /// <summary>
        /// Calling parameters.
        /// </summary>
        public string Parameters { get; set; }

        /// <summary>
        /// Start time of the method execution.
        /// </summary>
        public DateTime ExecutionTime { get; set; }

        /// <summary>
        /// Total duration of the method call.
        /// </summary>
        public int ExecutionDuration { get; set; }

        /// <summary>
        /// IP address of the client.
        /// </summary>
        public string ClientIpAddress { get; set; }

        /// <summary>
        /// Name (generally computer name) of the client.
        /// </summary>
        public string ClientName { get; set; }

        /// <summary>
        /// Browser information if this method is called in a web request.
        /// </summary>
        public string BrowserInfo { get; set; }

        /// <summary>
        /// Optional custom data that can be filled and used.
        /// </summary>
        public string CustomData { get; set; }

        /// <summary>
        /// 
        /// </summary>
        public string Exception { get; set; }
    }
}


================================================
FILE: src/Abplus.MqMessages/MqMessages/AutoGeneration/DontGenerateMqMessage.cs
================================================
using System;

namespace Abp.MqMessages.AutoGeneration
{
    /// <summary>
    /// 标记指定EventData不参与自动生成MqMessage
    /// </summary>
    [AttributeUsage(AttributeTargets.Class, Inherited = false)]
    public class DontGenerateMqMessage : Attribute
    {
    }
}


================================================
FILE: src/Abplus.MqMessages/MqMessages/AutoMapper/AutoEventsMapToMqMessagesHelper.cs
================================================
using System.Linq;
using System.Reflection;
using Abp.MqMessages.Handlers;
using AutoMapper;

namespace Abp.MqMessages.AutoMapper
{
    public static class AutoEventsMapToMqMessagesHelper
    {
        public static void CreateEventsToMqMessagesMappings(this IMapperConfigurationExpression mapper, Assembly assembly)
        {
            var typesToRegister = assembly.GetTypes()
                .Where(type => !string.IsNullOrEmpty(type.Namespace))
                .Where(type => type.BaseType != null
                && type.BaseType.IsGenericType
                && (type.BaseType.GetGenericTypeDefinition() == typeof(EventDataPublishHandlerBase<,>)));

            foreach (var type in typesToRegister)
            {
                var genericArgs = type.BaseType.GetGenericArguments();
                if (genericArgs.Length > 1 && !genericArgs[0].BaseType.IsGenericType)
                {
                    mapper.CreateMap(genericArgs[0], genericArgs[1]);
                }
            }
        }
    }
}


================================================
FILE: src/Abplus.MqMessages/MqMessages/Handlers/EventDataPublishHandlerBase.cs
================================================
using Abp.AutoMapper;
using Abp.Dependency;
using Abp.Domain.Uow;
using Abp.Events.Bus;
using Abp.Events.Bus.Handlers;
using Castle.Core.Logging;

namespace Abp.MqMessages.Handlers
{
    /// <summary>
    /// 订阅EventData并发布消息到消息队列的抽象基类
    /// </summary>
    /// <typeparam name="TEventData">Abp事件</typeparam>
    /// <typeparam name="TMqMessage">支持序列化的消息体(类DTO对象)</typeparam>
    public abstract class EventDataPublishHandlerBase<TEventData, TMqMessage>
        : IEventHandler<TEventData>, ITransientDependency
        where TEventData : EventData
        where TMqMessage : class
    {
        protected readonly IUnitOfWorkManager UnitOfWorkManager;

        public ILogger Logger { get; set; }

        public IMqMessagePublisher MqMessagePublisher { get; set; }

        public EventDataPublishHandlerBase(IUnitOfWorkManager unitOfWorkManager)
        {
            UnitOfWorkManager = unitOfWorkManager;
            Logger = NullLogger.Instance;
            MqMessagePublisher = NullMqMessagePublisher.Instance;
        }

        public virtual void HandleEvent(TEventData eventData)
        {
            if (UnitOfWorkManager.Current == null)
            {
                MqMessagePublisher.Publish(ConvertEventDataToMqMessage(eventData));
            }
            else
            {
                UnitOfWorkManager.Current.Completed += (sender, e) => MqMessagePublisher.Publish(ConvertEventDataToMqMessage(eventData));
            }
        }

        /// <summary>
        /// 转换EventData为MqMessage,默认采用eventData.MapTo<TMqMessage>()
        /// </summary>
        /// <param name="eventData"></param>
        /// <returns></returns>
        public virtual TMqMessage ConvertEventDataToMqMessage(TEventData eventData)
        {
            return eventData.MapTo<TMqMessage>();
        }
    }
}


================================================
FILE: src/Abplus.MqMessages/MqMessages/MqHandlers/AbpMqHandlerBase.cs
================================================
using System;
using System.Threading.Tasks;
using Abp.Dependency;
using Abp.MqMessages.MessageTrackers;
namespace Abp.MqMessages.MqHandlers
{
    public abstract class AbpMqHandlerBase : AbpServiceBase, ITransientDependency
    {
        public IMessageTracker MessageTracker { get; set; }

        public AbpMqHandlerBase(string localizationSourceName)
        {
            LocalizationSourceName = localizationSourceName;
            MessageTracker = DefaultInMemoryMessageTracker.Instance;
        }

        protected async Task<bool> IsTrueSetting(string settingKey)
        {
            return string.Equals("true", await SettingManager.GetSettingValueForApplicationAsync(settingKey), StringComparison.CurrentCultureIgnoreCase);
        }
    }
}


================================================
FILE: src/Abplus.MqMessages/MqMessages/MqHandlers/ExceptionLoggling/ExceptionLogAttribute.cs
================================================
using System;
using Abp.Logging;

namespace Abp.MqMessages.MqHandlers.ExceptionLogging
{
    public class ExceptionLogAttribute : Attribute
    {
        /// <summary>
        /// 需拦截的异常
        /// </summary>
        public Type[] ExceptionTypes { get; set; }

        /// <summary>
        /// 是否记录日志,默认true
        /// </summary>
        public bool Logged { get; set; }

        /// <summary>
        /// 日志级别,默认Warn
        /// </summary>
        public LogSeverity LogLevel { get; set; }

        /// <summary>
        /// 是否吃掉异常,默认false
        /// </summary>
        public bool NotThrow { get; set; }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="exceptionTypes"></param>
        public ExceptionLogAttribute(params Type[] exceptionTypes)
            : this(true, LogSeverity.Warn, false, exceptionTypes)
        {
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="notThrow"></param>
        /// <param name="exceptionTypes"></param>
        public ExceptionLogAttribute(bool notThrow, params Type[] exceptionTypes)
            : this(true, LogSeverity.Warn, notThrow, exceptionTypes)
        {
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="logged"></param>
        /// <param name="logLevel"></param>
        /// <param name="exceptionTypes"></param>
        public ExceptionLogAttribute(bool logged, LogSeverity logLevel, params Type[] exceptionTypes)
            : this(logged, logLevel, false, exceptionTypes)
        {
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="logged">记录日志(警告级别),默认true</param>
        /// <param name="logLevel">日志等级</param>
        /// <param name="notThrow">是否吃掉异常</param>
        /// <param name="exceptionTypes">需拦截的异常</param>
        public ExceptionLogAttribute(bool logged, LogSeverity logLevel, bool notThrow, params Type[] exceptionTypes)
        {
            Logged = logged;
            LogLevel = logLevel;
            NotThrow = notThrow;
            ExceptionTypes = exceptionTypes;
        }
    }
}


================================================
FILE: src/Abplus.MqMessages/MqMessages/MqHandlers/ExceptionLoggling/ExceptionLogHandler.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using Abp.Extensions;
using Abp.Interceptors;
using Castle.Core.Logging;
using Castle.DynamicProxy;

namespace Abp.MqMessages.MqHandlers.ExceptionLogging
{
    public class ExceptionLogHandler : IAsyncInterceptorHandler
    {
        public ILogger Logger { get; set; }

        public ExceptionLogHandler()
        {
            Logger = NullLogger.Instance;
        }

        public void Handle(IInvocation invocation)
        {
            var handleExceptionAttributes = GetAttributesOfMemberAndDeclaringType<ExceptionLogAttribute>(
                invocation.MethodInvocationTarget);

            if (handleExceptionAttributes.Count <= 0)
            {
                invocation.Proceed();
                return;
            }
            else
            {
                try
                {
                    invocation.Proceed();
                }
                catch (Exception ex)
                {
                    var exType = ex.GetType();
                    var attribute = handleExceptionAttributes.FirstOrDefault(h => h.ExceptionTypes.Contains(exType));

                    if (attribute == null)
                    {
                        ex.ReThrow();
                    }

                    LogException(attribute, ex, invocation.MethodInvocationTarget);

                    if (!attribute.NotThrow)
                    {
                        ex.ReThrow();
                    }
                }
            }
        }

        public async Task HandleAsync(IInvocation invocation)
        {
            var handleExceptionAttributes = GetAttributesOfMemberAndDeclaringType<ExceptionLogAttribute>(
                 invocation.MethodInvocationTarget);

            if (handleExceptionAttributes.Count <= 0)
            {
                invocation.Proceed();
                await (Task)invocation.ReturnValue;
            }
            else
            {
                try
                {
                    invocation.Proceed();
                    await (Task)invocation.ReturnValue;
                }
                catch (Exception ex)
                {
                    var exType = ex.GetType();
                    var attribute = handleExceptionAttributes.FirstOrDefault(h => h.ExceptionTypes.Contains(exType));

                    if (attribute == null)
                    {
                        ex.ReThrow();
                    }

                    LogException(attribute, ex, invocation.MethodInvocationTarget);

                    if (!attribute.NotThrow)
                    {
                        ex.ReThrow();
                    }
                }
            }
        }

        public async Task<T> HandleAsync<T>(IInvocation invocation)
        {
            var handleExceptionAttributes = GetAttributesOfMemberAndDeclaringType<ExceptionLogAttribute>(
               invocation.MethodInvocationTarget);

            if (handleExceptionAttributes.Count <= 0)
            {
                invocation.Proceed();
                return await (Task<T>)invocation.ReturnValue;
            }
            else
            {
                try
                {
                    invocation.Proceed();
                    return await (Task<T>)invocation.ReturnValue;
                }
                catch (Exception ex)
                {
                    var exType = ex.GetType();
                    var attribute = handleExceptionAttributes.FirstOrDefault(h => h.ExceptionTypes.Contains(exType));

                    if (attribute == null)
                    {
                        ex.ReThrow();
                    }

                    LogException(attribute, ex, invocation.MethodInvocationTarget);

                    if (!attribute.NotThrow)
                    {
                        ex.ReThrow();
                    }

                    return default(T);
                }
            }
        }

        private static List<TAttribute> GetAttributesOfMemberAndDeclaringType<TAttribute>(MemberInfo memberInfo)
           where TAttribute : Attribute
        {
            var attributeList = new List<TAttribute>();

            //Add attributes on the member
            if (memberInfo.IsDefined(typeof(TAttribute), true))
            {
                attributeList.AddRange(memberInfo.GetCustomAttributes(typeof(TAttribute), true).Cast<TAttribute>());
            }

            //Add attributes on the class
            if (memberInfo.DeclaringType != null && memberInfo.DeclaringType.IsDefined(typeof(TAttribute), true))
            {
                attributeList.AddRange(memberInfo.DeclaringType.GetCustomAttributes(typeof(TAttribute), true).Cast<TAttribute>());
            }

            return attributeList;
        }

        private void LogException(ExceptionLogAttribute attribute, Exception ex, MethodInfo methodInfo)
        {
            if (attribute.Logged)
            {
                var msg = $"{methodInfo.DeclaringType.FullName}.{$".{methodInfo.Name}"} Fail:{ex.Message}";

                switch (attribute.LogLevel)
                {
                    case Abp.Logging.LogSeverity.Debug:
                        Logger.Debug(msg, ex);
                        return;
                    case Abp.Logging.LogSeverity.Info:
                        Logger.Info(msg, ex);
                        return;
                    case Abp.Logging.LogSeverity.Warn:
                        Logger.Warn(msg, ex);
                        return;
                    case Abp.Logging.LogSeverity.Error:
                        Logger.Error(msg, ex);
                        return;
                    case Abp.Logging.LogSeverity.Fatal:
                        Logger.Fatal(msg, ex);
                        return;
                    default:
                        Logger.Warn(msg, ex);
                        return;
                }
            }
        }
    }
}


================================================
FILE: src/Abplus.MqMessages/MqMessages/MqHandlers/ExceptionLoggling/ExceptionLogInterceptor.cs
================================================
using Abp.Interceptors;

namespace Abp.MqMessages.MqHandlers.ExceptionLogging
{
    public class ExceptionLogInterceptor : AsyncHandlingInterceptor
    {
        public ExceptionLogInterceptor(ExceptionLogHandler handler) : base(handler)
        {
        }
    }
}


================================================
FILE: src/Abplus.MqMessages.AuditingConsumerHandler/Abplus.MqMessages.AuditingConsumerHandler.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">
  
  <Import Project="..\..\common.props"></Import>
  
  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <RootNamespace>Abp</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="abp" Version="6.3.1" />
    <PackageReference Include="rebus" Version="4.2.1" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Abplus.MqMessages\Abplus.MqMessages.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: src/Abplus.MqMessages.AuditingConsumerHandler/Abplus.MqMessages.AuditingConsumerHandler.nuspec
================================================
<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>personball</authors>
    <owners>personball</owners>
    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>
    <projectUrl>https://github.com/personball/abplus</projectUrl>
    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Abp plus, an extension for Abp Framework. </description>
    <releaseNotes></releaseNotes>
    <copyright>Copyright 2018</copyright>
    <tags></tags>
    <dependencies>
      <dependency id="Abplus.MqMessages" version="$version$" />
      <dependency id="Rebus" version="4.2.1" />
    </dependencies>
  </metadata>
</package>

================================================
FILE: src/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/AuditingConsumerRebusHandlerModule.cs
================================================
using Abp.Modules;
using System.Reflection;

namespace Abp.Auditing.AuditingStore
{
    public class AuditingConsumerRebusHandlerModule : AbpModule
    {
        public override void PreInitialize()
        {
            IocManager.Register<IAuditingConsumerRebusHandlerModuleConfig, AuditingConsumerRebusHandlerModuleConfig>();
        }

        public override void Initialize()
        {
            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
        }

        public override void PostInitialize()
        {
            MqMessageAuditingStoreRebusHandler.Timer.Start();
        }

        public override void Shutdown()
        {
            MqMessageAuditingStoreRebusHandler.Timer.Stop();
        }
    }
}


================================================
FILE: src/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/AuditingConsumerRebusHandlerModuleConfig.cs
================================================
using Abp.MqMessages.AuditingStores;
using System;
using System.Collections.Generic;

namespace Abp.Auditing.AuditingStore
{
    public class AuditingConsumerRebusHandlerModuleConfig : IAuditingConsumerRebusHandlerModuleConfig
    {
        public AuditingConsumerRebusHandlerModuleConfig()
        {
            BatchSize = 100;
            Period = TimeSpan.FromSeconds(1);
            BatchStoreAction = (msgList) => { };
        }
        public int BatchSize { get; private set; }

        public Action<IEnumerable<AuditInfoMqMessage>> BatchStoreAction { get; private set; }

        public TimeSpan Period { get; private set; }

        public IAuditingConsumerRebusHandlerModuleConfig Batch(int batchSize)
        {
            BatchSize = batchSize;
            return this;
        }

        public IAuditingConsumerRebusHandlerModuleConfig Do(Action<IEnumerable<AuditInfoMqMessage>> storeAction)
        {
            BatchStoreAction = storeAction;
            return this;
        }

        public IAuditingConsumerRebusHandlerModuleConfig EveryPeriodIn(TimeSpan period)
        {
            Period = period;
            return this;
        }
    }
}


================================================
FILE: src/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/IAuditingConsumerRebusHandlerModuleConfig.cs
================================================
using Abp.MqMessages.AuditingStores;
using System;
using System.Collections.Generic;

namespace Abp.Auditing.AuditingStore
{
    public interface IAuditingConsumerRebusHandlerModuleConfig
    {
        /// <summary>
        /// 每批大小
        /// </summary>
        int BatchSize { get; }

        /// <summary>
        /// 执行间隔(单位:秒)
        /// </summary>
        TimeSpan Period { get; }

        /// <summary>
        /// 批量存储的委托
        /// </summary>
        Action<IEnumerable<AuditInfoMqMessage>> BatchStoreAction { get; }

        /// <summary>
        /// 设置执行间隔(单位:秒)
        /// </summary>
        /// <param name="seconds"></param>
        /// <returns></returns>
        IAuditingConsumerRebusHandlerModuleConfig EveryPeriodIn(TimeSpan period);
        
        /// <summary>
        /// 设置每批大小
        /// </summary>
        /// <param name="batchSize"></param>
        /// <returns></returns>
        IAuditingConsumerRebusHandlerModuleConfig Batch(int batchSize);

        /// <summary>
        /// 批量存储逻辑,如何处理消息
        /// </summary>
        /// <param name="storeAction"></param>
        /// <returns></returns>
        IAuditingConsumerRebusHandlerModuleConfig Do(Action<IEnumerable<AuditInfoMqMessage>> storeAction);
    }
}


================================================
FILE: src/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/MqMessageAuditingStoreRebusHandler.cs
================================================
using Abp.Dependency;
using Abp.MqMessages.AuditingStores;
using Abp.Threading.Timers;
using Rebus.Handlers;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Abp.Auditing.AuditingStore
{
    public class MqMessageAuditingStoreRebusHandler :
         IHandleMessages<AuditInfoMqMessage>
        , ITransientDependency
    {
        private static ConcurrentQueue<AuditInfoMqMessage> InMemoryAuditInfoQueue;
        public static AbpTimer Timer;

        static MqMessageAuditingStoreRebusHandler()
        {
            InMemoryAuditInfoQueue = new ConcurrentQueue<AuditInfoMqMessage>();

            var config = IocManager.Instance.Resolve<IAuditingConsumerRebusHandlerModuleConfig>();
            Timer = new AbpTimer((int)config.Period.TotalMilliseconds, true);

            Timer.Elapsed += (s, e) =>
            {
                var tmpMsg = new List<AuditInfoMqMessage>();
                for (int i = 0; i < config.BatchSize; i++)
                {
                    AuditInfoMqMessage msg;
                    if (InMemoryAuditInfoQueue.TryDequeue(out msg))
                    {
                        tmpMsg.Add(msg);
                    }
                    else
                    {
                        break;
                    }
                }

                if (tmpMsg.Any())
                {
                    config.BatchStoreAction(tmpMsg);
                }
            };
        }

        public async Task Handle(AuditInfoMqMessage message)
        {
            InMemoryAuditInfoQueue.Enqueue(message);
        }
    }
}


================================================
FILE: src/Abplus.MqMessages.AuditingConsumerHandler/Configuration/Startup/AuditingConsumerRebusHandlerConfigurationExtensions.cs
================================================
using Abp.Auditing.AuditingStore;

namespace Abp.Configuration.Startup
{
    public static class AuditingConsumerRebusHandlerConfigurationExtensions
    {
        public static IAuditingConsumerRebusHandlerModuleConfig AuditingConsumer(this IModuleConfigurations configurations)
        {
            return configurations.AbpConfiguration.GetOrCreate("Modules.Abplus.AuditingConsumer", () => configurations.AbpConfiguration.IocManager.Resolve<IAuditingConsumerRebusHandlerModuleConfig>());
        }
    }
}


================================================
FILE: src/Abplus.MqMessages.AuditingStore/Abplus.MqMessages.AuditingStore.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <Import Project="..\..\common.props"></Import>

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <RootNamespace>Abp</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="abp" Version="6.3.1" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Abplus.MqMessages\Abplus.MqMessages.csproj" />
    <ProjectReference Include="..\Abplus.MqMessages.RebusCore\Abplus.MqMessages.RebusCore.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: src/Abplus.MqMessages.AuditingStore/Abplus.MqMessages.AuditingStore.nuspec
================================================
<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>personball</authors>
    <owners>personball</owners>
    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>
    <projectUrl>https://github.com/personball/abplus</projectUrl>
    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Abp plus, an extension for Abp Framework. </description>
    <releaseNotes></releaseNotes>
    <copyright>Copyright 2018</copyright>
    <tags></tags>
    <dependencies>
      <dependency id="Abplus.MqMessages" version="$version$" />
      <dependency id="Abplus.MqMessages.RebusCore" version="$version$" />
    </dependencies>
  </metadata>
</package>

================================================
FILE: src/Abplus.MqMessages.AuditingStore/Auditing/AuditingStores/MqMessageAuditingStore.cs
================================================
using Abp.Dependency;
using Abp.MqMessages;
using Abp.MqMessages.AuditingStores;
using Abp.Threading;
using System;
using System.Threading.Tasks;

namespace Abp.Auditing.AuditingStores
{
    public class MqMessageAuditingStore : IAuditingStore, ITransientDependency
    {
        private readonly Lazy<IMqMessagePublisher> MqMessagePublisher;//why this need Lazy<>?

        public MqMessageAuditingStore()
        {
            MqMessagePublisher = new Lazy<IMqMessagePublisher>(() =>
            {
                return IocManager.Instance.Resolve<IMqMessagePublisher>();
            });
        }

        public void Save(AuditInfo auditInfo)
        {
            AsyncHelper.RunSync(() => SaveAsync(auditInfo));
        }

        public async Task SaveAsync(AuditInfo auditInfo)
        {
            var mqMsgAuditInfo = new AuditInfoMqMessage
            {
                BrowserInfo = auditInfo.BrowserInfo,
                ClientIpAddress = auditInfo.ClientIpAddress,
                ClientName = auditInfo.ClientName,
                CustomData = auditInfo.CustomData,
                ExecutionDuration = auditInfo.ExecutionDuration,
                ImpersonatorTenantId = auditInfo.ImpersonatorTenantId,
                ImpersonatorUserId = auditInfo.ImpersonatorUserId,
                MethodName = auditInfo.MethodName,
                Parameters = auditInfo.Parameters,
                ServiceName = auditInfo.ServiceName,
                UserId = auditInfo.UserId,
                ExecutionTime = auditInfo.ExecutionTime,
                TenantId = auditInfo.TenantId
            };

            if (auditInfo.Exception != null)
            {
                mqMsgAuditInfo.CustomData += $" {auditInfo.Exception.Message}";
                mqMsgAuditInfo.Exception = auditInfo.Exception.StackTrace;
                if (auditInfo.Exception.InnerException != null)
                {
                    mqMsgAuditInfo.CustomData += $" {auditInfo.Exception.InnerException.Message}";
                    mqMsgAuditInfo.Exception = auditInfo.Exception.InnerException.StackTrace;
                }
            }

            await MqMessagePublisher.Value.PublishAsync(mqMsgAuditInfo);
        }
    }
}


================================================
FILE: src/Abplus.MqMessages.AuditingStore/Auditing/AuditingStores/MqMessageAuditingStoreModule.cs
================================================
using Abp.Modules;
using Abp.MqMessages.Publishers;

namespace Abp.Auditing.AuditingStores
{
    [DependsOn(typeof(RebusRabbitMqPublisherCoreModule))]
    public class MqMessageAuditingStoreModule : AbpModule
    {
        public override void PreInitialize()
        {
            IocManager.Register<IAuditingStore, MqMessageAuditingStore>();
        }
    }
}


================================================
FILE: src/Abplus.MqMessages.IndexToES/Abplus.MqMessages.IndexToES.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <Import Project="..\..\common.props"></Import>

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <RootNamespace>Abp</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <Compile Remove="MqMessages\MqHandlers\MqMessagesT4Register.cs" />
  </ItemGroup>

  <ItemGroup>
    <Page Include="MqMessages\MqHandlers\MqMessagesT4Register.cs" />
  </ItemGroup>

  <ItemGroup>
    <None Update="MqMessages\MqHandlers\MqMessageIndexToESHandlerBuilder.tt">
      <Generator>TextTemplatingFileGenerator</Generator>
      <LastGenOutput>MqMessageIndexToESHandlerBuilder.cs</LastGenOutput>
    </None>
  </ItemGroup>

  <ItemGroup>
    <Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
  </ItemGroup>

  <ItemGroup>
    <Compile Update="MqMessages\MqHandlers\MqMessageIndexToESHandlerBuilder.cs">
      <DesignTime>True</DesignTime>
      <AutoGen>True</AutoGen>
      <DependentUpon>MqMessageIndexToESHandlerBuilder.tt</DependentUpon>
    </Compile>
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="abp" Version="6.3.1" />
    <PackageReference Include="nest" Version="6.2.0" />
    <PackageReference Include="rebus" Version="4.2.1" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Abplus.MqMessages\Abplus.MqMessages.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: src/Abplus.MqMessages.IndexToES/Abplus.MqMessages.IndexToES.nuspec
================================================
<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>personball</authors>
    <owners>personball</owners>
    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>
    <projectUrl>https://github.com/personball/abplus</projectUrl>
    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Abp plus, an extension for Abp Framework. </description>
    <releaseNotes></releaseNotes>
    <copyright>Copyright 2018</copyright>
    <tags></tags>
    <dependencies>
      <dependency id="Rebus" version="4.2.1" />
      <dependency id="NEST" version="6.2.0" />
      <dependency id="Abplus.MqMessages" version="$version$" />
    </dependencies>
    <contentFiles>
      <files include="MqMessages\MqHandlers\MqMessagesT4Register.cs" />
      <files include="MqMessages\MqHandlers\MqMessageIndexToESHandlerBuilder.tt" />
      <files include="MqMessages\MqHandlers\T4MultipleOutputManager.ttinclude" />
    </contentFiles>
  </metadata>
</package>

================================================
FILE: src/Abplus.MqMessages.IndexToES/DateTimeExtensions.cs
================================================
using System;

namespace Abp
{
    public static class DateTimeExtensions
    {
        public static string GetESIndexName(this DateTime now, string defaultIndexName, IndexFreq freqSetting)
        {
            Check.NotNullOrWhiteSpace(defaultIndexName, nameof(defaultIndexName));

            if (freqSetting == IndexFreq.PerDay)
            {
                return $"{defaultIndexName}-{DateTime.Now.Date.ToString("yyyy.MM.dd")}";
            }
            else if (freqSetting == IndexFreq.PerMonth)
            {
                return $"{defaultIndexName}-{DateTime.Now.Date.ToString("yyyy.MM")}";
            }
            else if (freqSetting == IndexFreq.PerYear)
            {
                return $"{defaultIndexName}-{DateTime.Now.Date.ToString("yyyy")}";
            }
            else
            {
                return defaultIndexName;
            }
        }
    }
}


================================================
FILE: src/Abplus.MqMessages.IndexToES/IndexFreq.cs
================================================
namespace Abp
{
    /// <summary>
    /// 定义创建索引的频率
    /// </summary>
    public enum IndexFreq
    {
        /// <summary>
        /// 每天一个索引
        /// </summary>
        PerDay = 0,

        /// <summary>
        /// 每月一个索引
        /// </summary>
        PerMonth = 1,

        /// <summary>
        /// 每年一个索引
        /// </summary>
        PerYear = 2,

        /// <summary>
        /// 仅一个索引,索引名不加日期后缀
        /// </summary>
        None = 3
    }
}


================================================
FILE: src/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/MqMessageIndexToESHandlerBase.cs
================================================
using System;
using System.Threading.Tasks;
using Abp.Dependency;
using Nest;
using Rebus.Handlers;

namespace Abp.MqMessages.MqHandlers
{
    public abstract class MqMessageIndexToESHandlerBase<TMqMessage> : AbpMqHandlerBase
        , IHandleMessages<TMqMessage>
        , ITransientDependency where TMqMessage : class
    {

        protected string DefaultIndexName { get; set; }

        protected IndexFreq IndexFreq { get; set; }

        public IElasticClient ElasticClient { get; set; }

        public MqMessageIndexToESHandlerBase(string defaultIndexName, IndexFreq indexFreq, string localizationSourceName)
            : base(localizationSourceName)
        {
            DefaultIndexName = defaultIndexName;
            IndexFreq = indexFreq;
        }

        public async Task Handle(TMqMessage message)
        {
            var indexName = CustomIndexName();
            var indexFreq = CustomIndexFreq();

            await ElasticClient.IndexAsync(message, i => i.Index(DateTime.Now.GetESIndexName(indexName, indexFreq)));
        }

        public virtual string CustomIndexName()
        {
            return DefaultIndexName;
        }

        public virtual IndexFreq CustomIndexFreq()
        {
            return IndexFreq;
        }
    }
}


================================================
FILE: src/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/MqMessageIndexToESHandlerBuilder.cs
================================================


================================================
FILE: src/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/MqMessageIndexToESHandlerBuilder.tt
================================================
<#@ template debug="false" hostspecific="true" language="C#" #>

<#@ include file="T4MultipleOutputManager.ttinclude" #>

<#@ assembly name="System.Core" #>
<#@ assembly name="System.IO" #>
<#@ assembly name="$(SolutionDir)packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll" #>
<#@ assembly name="$(ProjectDir)bin\$(ConfigurationName)\$(ProjectName).exe" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="Newtonsoft.Json" #>
<#@ import namespace="Newtonsoft.Json.Linq" #>
<#@ import namespace="System.Globalization" #>
<#@ import namespace="Abp.MqMessages.MqHandlers" #>
<#@ output extension=".cs" #>


<#
	var tempateManager = Manager.Create(Host,GenerationEnvironment);
	string projectName = Host.ResolveAssemblyReference("$(ProjectName)");
	
	var types=MqMessagesT4Register.MqMessageTypes;
	foreach(var type in types)
	{
		tempateManager.StartNewFile(type.Name+"IndexToESHandler.cs");
#>
using Abp;
using Abp.MqMessages.MqHandlers;
using <#=type.Namespace#>;

namespace <#=projectName#>.MqMessages.MqHandlers
{
    public class <#=type.Name#>IndexToESHandler : MqMessageIndexToESHandlerBase<<#=type.Name#>>
    {
        public <#=type.Name#>IndexToESHandler() 
			: base(【DefaultIndexName】, IndexFreq.PerMonth, 【Consts.LocalizationSourceName】)
        {
        }
    }
}
<#
	}//foreach-end
				
	tempateManager.EndBlock();
	tempateManager.Process(true); 
#>




================================================
FILE: src/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/MqMessagesT4Register.cs
================================================
using System;

namespace Abp.MqMessages.MqHandlers
{
    public static class MqMessagesT4Register
    {
        public static Type[] MqMessageTypes = new Type[] {
            //typeof(SampleMqMessage)
        };
    }
}


================================================
FILE: src/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/T4MultipleOutputManager.ttinclude
================================================
<#@ assembly name="System.Core"
#><#@ assembly name="System.Data.Linq"
#><#@ assembly name="EnvDTE"
#><#@ assembly name="System.Xml"
#><#@ assembly name="System.Xml.Linq"
#><#@ import namespace="System.Collections.Generic"
#><#@ import namespace="System.IO"
#><#@ import namespace="System.Text"
#><#@ import namespace="Microsoft.VisualStudio.TextTemplating"
#><#+
// https://raw.github.com/damieng/DamienGKit
// http://damieng.com/blog/2009/11/06/multiple-outputs-from-t4-made-easy-revisited

// Manager class records the various blocks so it can split them up
class Manager {
    private class Block {
        public String Name;
        public int Start, Length;
        public bool IncludeInDefault;
    }

    private Block currentBlock;
    private readonly List<Block> files = new List<Block>();
    private readonly Block footer = new Block();
    private readonly Block header = new Block();
    private readonly ITextTemplatingEngineHost host;
    private readonly StringBuilder template;
    protected readonly List<String> generatedFileNames = new List<String>();

    public static Manager Create(ITextTemplatingEngineHost host, StringBuilder template) {
        return (host is IServiceProvider) ? new VSManager(host, template) : new Manager(host, template);
    }

    public void StartNewFile(String name) {
        if (name == null)
            throw new ArgumentNullException("name");
        CurrentBlock = new Block { Name = name };
    }

    public void StartFooter(bool includeInDefault=true) {
        CurrentBlock = footer;
        footer.IncludeInDefault = includeInDefault;
    }

    public void StartHeader(bool includeInDefault=true) {
        CurrentBlock = header;
        header.IncludeInDefault = includeInDefault;
    }

    public void EndBlock() {
        if (CurrentBlock == null)
            return;
        CurrentBlock.Length = template.Length - CurrentBlock.Start;
        if (CurrentBlock != header && CurrentBlock != footer)
            files.Add(CurrentBlock);
        currentBlock = null;
    }

    public virtual void Process(bool split, bool sync =true) {
        if (split) {
            EndBlock();
            String headerText = template.ToString(header.Start, header.Length);
            String footerText = template.ToString(footer.Start, footer.Length);
            String outputPath = Path.GetDirectoryName(host.TemplateFile);
            files.Reverse();
            if (!footer.IncludeInDefault)
                template.Remove(footer.Start, footer.Length);
            foreach(Block block in files) {
                String fileName = Path.Combine(outputPath, block.Name);
                String content = headerText + template.ToString(block.Start, block.Length) + footerText;
                generatedFileNames.Add(fileName);
                CreateFile(fileName, content);
                template.Remove(block.Start, block.Length);
            }
            if (!header.IncludeInDefault)
                template.Remove(header.Start, header.Length);
        }
    }

    protected virtual void CreateFile(String fileName, String content) {
        if (IsFileContentDifferent(fileName, content))
            File.WriteAllText(fileName, content);
    }

    public virtual String GetCustomToolNamespace(String fileName) {
        return null;
    }

    public virtual String DefaultProjectNamespace {
        get { return null; }
    }

    protected bool IsFileContentDifferent(String fileName, String newContent) {
        return !(File.Exists(fileName) && File.ReadAllText(fileName) == newContent);
    }

    private Manager(ITextTemplatingEngineHost host, StringBuilder template) {
        this.host = host;
        this.template = template;
    }

    private Block CurrentBlock {
        get { return currentBlock; }
        set {
            if (CurrentBlock != null)
                EndBlock();
            if (value != null)
                value.Start = template.Length;
            currentBlock = value;
        }
    }

    private class VSManager: Manager {
        private readonly EnvDTE.ProjectItem templateProjectItem;
        private readonly EnvDTE.DTE dte;
        private readonly Action<String> checkOutAction;
        private readonly Action<List<String>> projectSyncAction;

        public override String DefaultProjectNamespace {
            get {
                return templateProjectItem.ContainingProject.Properties.Item("DefaultNamespace").Value.ToString();
            }
        }

        public override String GetCustomToolNamespace(string fileName) {
            return dte.Solution.FindProjectItem(fileName).Properties.Item("CustomToolNamespace").Value.ToString();
        }

        public override void Process(bool split, bool sync) {
            if (templateProjectItem.ProjectItems == null)
                return;
            base.Process(split, sync);
            if (sync)
                projectSyncAction.EndInvoke(projectSyncAction.BeginInvoke(generatedFileNames, null, null));
        }

        protected override void CreateFile(String fileName, String content) {
            if (IsFileContentDifferent(fileName, content)) {
                CheckoutFileIfRequired(fileName);
                File.WriteAllText(fileName, content);
            }
        }

        internal VSManager(ITextTemplatingEngineHost host, StringBuilder template)
            : base(host, template) {
            var hostServiceProvider = (IServiceProvider)host;
            if (hostServiceProvider == null)
                throw new ArgumentNullException("Could not obtain IServiceProvider");
            dte = (EnvDTE.DTE) hostServiceProvider.GetService(typeof(EnvDTE.DTE));
            if (dte == null)
                throw new ArgumentNullException("Could not obtain DTE from host");
            templateProjectItem = dte.Solution.FindProjectItem(host.TemplateFile);
            checkOutAction = fileName => dte.SourceControl.CheckOutItem(fileName);
            projectSyncAction = keepFileNames => ProjectSync(templateProjectItem, keepFileNames);
        }

        private static void ProjectSync(EnvDTE.ProjectItem templateProjectItem, List<String> keepFileNames) {
            var keepFileNameSet = new HashSet<String>(keepFileNames);
            var projectFiles = new Dictionary<String, EnvDTE.ProjectItem>();
            var originalFilePrefix = Path.GetFileNameWithoutExtension(templateProjectItem.FileNames[0]) + ".";
            foreach (EnvDTE.ProjectItem projectItem in templateProjectItem.ProjectItems)
                projectFiles.Add(projectItem.FileNames[0], projectItem);

            // Remove unused items from the project
            foreach (var pair in projectFiles)
                if (!keepFileNames.Contains(pair.Key) && !(Path.GetFileNameWithoutExtension(pair.Key) + ".").StartsWith(originalFilePrefix))
                    pair.Value.Delete();

            // Add missing files to the project
            foreach(String fileName in keepFileNameSet)
                if (!projectFiles.ContainsKey(fileName))
                    templateProjectItem.ProjectItems.AddFromFile(fileName);
        }

        private void CheckoutFileIfRequired(String fileName) {
            var sc = dte.SourceControl;
            if (sc != null && sc.IsItemUnderSCC(fileName) && !sc.IsItemCheckedOut(fileName))
                checkOutAction.EndInvoke(checkOutAction.BeginInvoke(fileName, null, null));
        }
    }
} #>

================================================
FILE: src/Abplus.MqMessages.RebusCore/Abplus.MqMessages.RebusCore.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <Import Project="..\..\common.props"></Import>

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <RootNamespace>Abp</RootNamespace>
    
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="abp" Version="6.3.1" />
    <PackageReference Include="rebus" Version="4.2.1" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Abplus\Abplus.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: src/Abplus.MqMessages.RebusCore/Abplus.MqMessages.RebusCore.nuspec
================================================
<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>personball</authors>
    <owners>personball</owners>
    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>
    <projectUrl>https://github.com/personball/abplus</projectUrl>
    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Abp plus, an extension for Abp Framework. </description>
    <releaseNotes></releaseNotes>
    <copyright>Copyright 2018</copyright>
    <tags></tags>
    <dependencies>
      <dependency id="Abplus" version="$version$" />
      <dependency id="Rebus" version="4.2.1" />
    </dependencies>
  </metadata>
</package>

================================================
FILE: src/Abplus.MqMessages.RebusCore/MqMessages/Publishers/RebusRabbitMqPublisher.cs
================================================
using System.Threading.Tasks;
using Abp.Json;
using Abp.Runtime.Session;
using Abp.Threading;
using Castle.Core.Logging;
using Rebus.Bus;

namespace Abp.MqMessages.Publishers
{
    public class RebusRabbitMqPublisher : IMqMessagePublisher
    {
        private readonly IBus _bus;

        public ILogger Logger { get; set; }

        public IAbpSession AbpSession { get; set; }

        public RebusRabbitMqPublisher(IBus bus)
        {
            _bus = bus;
            Logger = NullLogger.Instance;
            AbpSession = NullAbpSession.Instance;
        }

        public void Publish(object mqMessages)
        {
            TryFillSessionInfo(mqMessages);

            Logger.Debug(mqMessages.GetType().FullName + ":" + mqMessages.ToJsonString());

            AsyncHelper.RunSync(() => _bus.Publish(mqMessages));
        }

        private void TryFillSessionInfo(object mqMessages)
        {
            if (AbpSession.UserId.HasValue)
            {
                var operatorUserIdProperty = mqMessages.GetType().GetProperty("OperatorUserId");
                if (operatorUserIdProperty != null && (operatorUserIdProperty.PropertyType == typeof(long?)))
                {
                    operatorUserIdProperty.SetValue(mqMessages, AbpSession.UserId);
                }
            }

            if (AbpSession.TenantId.HasValue)
            {
                var tenantIdProperty = mqMessages.GetType().GetProperty("TenantId");
                if (tenantIdProperty != null && (tenantIdProperty.PropertyType == typeof(int?)))
                {
                    tenantIdProperty.SetValue(mqMessages, AbpSession.TenantId);
                }
            }
        }

        public async Task PublishAsync(object mqMessages)
        {
	        TryFillSessionInfo(mqMessages);

			Logger.Debug(mqMessages.GetType().FullName + ":" + mqMessages.ToJsonString());

            await _bus.Publish(mqMessages);
        }
    }
}


================================================
FILE: src/Abplus.MqMessages.RebusCore/MqMessages/Publishers/RebusRabbitMqPublisherCoreModule.cs
================================================
using Abp.Modules;

namespace Abp.MqMessages.Publishers
{
    public class RebusRabbitMqPublisherCoreModule : AbpModule
    {
        public override void PreInitialize()
        {
            IocManager.Register<IMqMessagePublisher, RebusRabbitMqPublisher>();
        }
    }
}


================================================
FILE: src/Abplus.MqMessages.RebusRabbitMqConsumer/Abplus.MqMessages.RebusRabbitMqConsumer.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

   <Import Project="..\..\common.props"></Import>
  
  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <RootNamespace>Abp</RootNamespace>
    
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="abp" Version="6.3.1" />
    <PackageReference Include="Rebus.Castle.Windsor" Version="4.1.0" />
    <PackageReference Include="rebus.rabbitmq" Version="4.4.2" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Abplus.MqMessages.RebusCore\Abplus.MqMessages.RebusCore.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: src/Abplus.MqMessages.RebusRabbitMqConsumer/Abplus.MqMessages.RebusRabbitMqConsumer.nuspec
================================================
<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>personball</authors>
    <owners>personball</owners>
    <licenseUrl>https://raw.githubusercontent.com/personball/abplus/master/LICENSE</licenseUrl>
    <projectUrl>https://github.com/personball/abplus</projectUrl>
    <iconUrl>https://raw.githubusercontent.com/personball/abplus/master/abplus_icon.png</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Abp plus, an extension for Abp Framework. </description>
    <releaseNotes></releaseNotes>
    <copyright>Copyright 2018</copyright>
    <tags></tags>
    <dependencies>
      <dependency id="Abplus" version="$version$" />
      <dependency id="Abplus.MqMessages.RebusCore" version="$version$"/>
      <dependency id="Rebus.Castle.Windsor" version="4.1.0" />
      <dependency id="Rebus.RabbitMq" version="4.4.2" />
    </dependencies>
  </metadata>
</package>

================================================
FILE: src/Abplus.MqMessages.RebusRabbitMqConsumer/Configuration/Startup/RebusRabbitMqConsumerConfigurationExtensions.cs
================================================
using Abp.MqMessages.Consumers;

namespace Abp.Configuration.Startup
{
    public static class RebusRabbitMqConsumerConfigurationExtensions
    {
        public static IRebusRabbitMqConsumerModuleConfig UseAbplusRebusRabbitMqConsumer(this IModuleConfigurations configurations)
        {
            return configurations.AbpConfiguration.GetOrCreate("Modules.Abp.RebusRabbitMqConsumer", () => configurations.AbpConfiguration.IocManager.Resolve<IRebusRabbitMqConsumerModuleConfig>());
        }
    }
}


================================================
FILE: src/Abplus.MqMessages.RebusRabbitMqConsumer/MqMessages/Consumers/IRebusRabbitMqConsumerModuleConfig.cs
================================================
using System;
using System.Reflection;
using Rebus.Config;
using Rebus.Serialization;

namespace Abp.MqMessages.Consumers
{
    public interface IRebusRabbitMqConsumerModuleConfig
    {
        /// <summary>
        /// 是否启用,默认启用
        /// </summary>
        bool Enabled { get; }

        /// <summary>
        /// RabbitMq连接字符串
        /// </summary>
        string ConnectString { get; }

        /// <summary>
        /// 队列名
        /// </summary>
        string QueueName { get; }

        /// <summary>
        /// 最大并行数
        /// </summary>
        int MaxParallelism { get; }

        /// <summary>
        /// 最大Worker数
        /// </summary>
        int NumberOfWorkers { get; }

        /// <summary>
        /// 消费时每次拉取的消息个数
        /// </summary>
        int PrefetchCount { get; }

        /// <summary>
        /// 消息审计是否开启,默认不开启
        /// </summary>
        bool MessageAuditingEnabled { get; }

        /// <summary>
        /// 消息审计队列名,默认不启用
        /// </summary>
        string MessageAuditingQueueName { get; }

        /// <summary>
        /// 包含RebusMqMessageHandler的程序集(自动订阅消息和自动注册handler)
        /// </summary>
        Assembly[] AssemblysIncludeRebusMqMessageHandlers { get; }

        /// <summary>
        /// 配置日志组件
        /// </summary>
        Action<RebusLoggingConfigurer> LoggingConfigurer { get; }

        /// <summary>
        /// 其他选项配置
        /// </summary>
        Action<OptionsConfigurer> OptionsConfigurer { get; }

        /// <summary>
        /// 序列化组件配置
        /// </summary>
        Action<StandardConfigurer<ISerializer>> SerializerConfigurer { get; }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="enabled">是否启用,默认启用</param>
        /// <returns></returns>
        IRebusRabbitMqConsumerModuleConfig Enable(bool enabled);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="connectString">RabbitMq连接字符串</param>
        /// <returns></returns>
        IRebusRabbitMqConsumerModuleConfig ConnectTo(string connectString);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="queueName">使用队列名</param>
        /// <returns></returns>
        IRebusRabbitMqConsumerModuleConfig UseQueue(string queueName);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="maxParallelism">最大并行数</param>
        /// <returns></returns>
        IRebusRabbitMqConsumerModuleConfig SetMaxParallelism(int maxParallelism);

        /// <summary>
        /// 设置最大工作线程数
        /// </summary>
        /// <param name="numberOfWorkers">最大Worker数</param>
        /// <returns></returns>
        IRebusRabbitMqConsumerModuleConfig SetNumberOfWorkers(int numberOfWorkers);

        /// <summary>
        /// 设置每次拉取消息数量,默认50
        /// </summary>
        /// <param name="count"></param>
        /// <returns></returns>
        IRebusRabbitMqConsumerModuleConfig Prefetch(int count);

        /// <summary>
        /// 启用消息审计
        /// </summary>
        /// <param name="messageAuditingQueueName">消息审计队列名</param>
        /// <returns></returns>
        IRebusRabbitMqConsumerModuleConfig EnableMessageAuditing(string messageAuditingQueueName);

        /// <summary>
        /// 注册Rebus Handlers
        /// </summary>
        /// <param name="assemblys">包含Rebus Handlers的程序集</param>
        /// <returns></returns>
        IRebusRabbitMqConsumerModuleConfig RegisterHandlerInAssemblys(params Assembly[] assemblys);

        /// <summary>
        /// 配置日志组件
        /// </summary>
        /// <param name="loggingConfigurer"></param>
        /// <returns></returns>
        IRebusRabbitMqConsumerModuleConfig UseLogging(Action<RebusLoggingConfigurer> loggingConfigurer);
        /// <summary>
        /// 配置其他选项
        /// </summary>
        /// <param name="optionsConfigurer"></param>
        /// <returns></returns>
        IRebusRabbitMqConsumerModuleConfig UseOptions(Action<OptionsConfigurer> optionsConfigurer);

        /// <summary>
        /// 自定义序列化机制
        /// </summary>
        /// <param name="serializerConfigurer"></param>
        /// <returns></returns>
        IRebusRabbitMqConsumerModuleConfig UseSerializer(Action<StandardConfigurer<ISerializer>> serializerConfigurer);
    }
}


================================================
FILE: src/Abplus.MqMessages.RebusRabbitMqConsumer/MqMessages/Consumers/RebusRabbitMqConsumerModule.cs
================================================
using Abp.Modules;
using Abp.MqMessages.Publishers;
using Rebus.Auditing.Messages;
using Rebus.Bus;
using Rebus.CastleWindsor;
using Rebus.Config;
using Rebus.Handlers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;

namespace Abp.MqMessages.Consumers
{
    [DependsOn(typeof(RebusRabbitMqPublisherCoreModule))]
    public class RebusRabbitMqConsumerModule : AbpModule
    {
        private IBus _bus;

        public override void PreInitialize()
        {
            IocManager.Register<IRebusRabbitMqConsumerModuleConfig, RebusRabbitMqConsumerModuleConfig>();
        }

        public override void Initialize()
        {
            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
        }

        public override void PostInitialize()
        {
            var moduleConfig = IocManager.Resolve<IRebusRabbitMqConsumerModuleConfig>();

            if (moduleConfig.Enabled)
            {
                var rebusConfig = Configure.With(new CastleWindsorContainerAdapter(IocManager.IocContainer));

                if (moduleConfig.LoggingConfigurer != null)
                {
                    rebusConfig.Logging(moduleConfig.LoggingConfigurer);
                }

                if (moduleConfig.SerializerConfigurer != null)
                {
                    rebusConfig.Serialization(moduleConfig.SerializerConfigurer);
                }

                if (moduleConfig.OptionsConfigurer != null)
                {
                    rebusConfig.Options(moduleConfig.OptionsConfigurer);
                }

                rebusConfig.Options(c =>
                {
                    c.SetMaxParallelism(moduleConfig.MaxParallelism);
                    c.SetNumberOfWorkers(moduleConfig.NumberOfWorkers);
                });

                if (moduleConfig.MessageAuditingEnabled)
                {
                    rebusConfig.Options(o => o.EnableMessageAuditing(moduleConfig.MessageAuditingQueueName));
                }

                var mqMessageTypes = new List<Type>();
                //Register handlers first!
                foreach (var assembly in moduleConfig.AssemblysIncludeRebusMqMessageHandlers)
                {
                    IocManager.IocContainer.AutoRegisterHandlersFromAssembly(assembly);

                    mqMessageTypes.AddRange(assembly.GetTypes()
                    
Download .txt
gitextract_3b8q698k/

├── .gitignore
├── .nuget/
│   └── NuGet.Config
├── Abplus.sln
├── LICENSE
├── Nupkg/
│   ├── pack.bat
│   └── push-all-packages-in-current_folder.bat
├── README.md
├── common.props
├── src/
│   ├── Abplus/
│   │   ├── Abplus.csproj
│   │   ├── Abplus.nuspec
│   │   ├── Application/
│   │   │   ├── Navigation/
│   │   │   │   └── MenuItemDefinitionPlugInExtensions.cs
│   │   │   └── Services/
│   │   │       └── Dto/
│   │   │           ├── IHasDateTimeFilterRequest.cs
│   │   │           ├── IHasKeywordFilterRequest.cs
│   │   │           ├── IPaginationResultRequest.cs
│   │   │           └── PaginationRequestInput.cs
│   │   ├── Currencies/
│   │   │   └── ChineseCentExtension.cs
│   │   ├── Events/
│   │   │   └── Bus/
│   │   │       └── ChangedEventData.cs
│   │   ├── Extensions/
│   │   │   ├── DateTimeExtensions.cs
│   │   │   ├── EnumExtensions.cs
│   │   │   ├── GuidExtensions.cs
│   │   │   ├── IntExtension.cs
│   │   │   ├── NullableDateTimeExtensions.cs
│   │   │   └── StringExtensions.cs
│   │   ├── IO/
│   │   │   ├── IFileStorage.cs
│   │   │   └── NullFileStorage.cs
│   │   ├── Interceptors/
│   │   │   ├── AsyncHandlingInterceptor.cs
│   │   │   └── IAsyncInterceptorHandler.cs
│   │   ├── Json/
│   │   │   └── LargeNumJsonConverter.cs
│   │   ├── MqMessages/
│   │   │   ├── IMqMessagePublisher.cs
│   │   │   ├── MessageTrackers/
│   │   │   │   ├── DefaultInMemoryMessageTracker.cs
│   │   │   │   └── IMessageTracker.cs
│   │   │   └── NullMqMessagePublisher.cs
│   │   ├── PlugIns/
│   │   │   ├── IPlugInAreaRegistration.cs
│   │   │   ├── IPlugInAuthorizationProvider.cs
│   │   │   └── IPlugInNavigationProvider.cs
│   │   ├── QrCode/
│   │   │   └── IQrCodeScannedRealTimeNotifier.cs
│   │   ├── Reservations/
│   │   │   ├── Events/
│   │   │   │   ├── ReservationCancelledEventData.cs
│   │   │   │   ├── ReservationEventDataBase.cs
│   │   │   │   └── ReservationSuccessEventData.cs
│   │   │   ├── IReservation.cs
│   │   │   ├── IReservationBody.cs
│   │   │   ├── ReservationBase.cs
│   │   │   └── ReservationBodyBase.cs
│   │   ├── Runtime/
│   │   │   └── OS/
│   │   │       ├── EnvDescription.cs
│   │   │       └── EnvironmentHelper.cs
│   │   └── TimeRanges/
│   │       └── TimeRange.cs
│   ├── Abplus.AspNetCore.SignalR/
│   │   ├── Abplus.AspNetCore.SignalR.csproj
│   │   ├── Abplus.AspNetCore.SignalR.nuspec
│   │   ├── Configuration/
│   │   │   └── Startup/
│   │   │       └── RedisOnlineClientManagerConfiguationExtensions.cs
│   │   ├── RealTime/
│   │   │   ├── IRedisOnlineClientManagerModuleConfig.cs
│   │   │   ├── RedisOnlineClientManager.cs
│   │   │   ├── RedisOnlineClientManagerModule.cs
│   │   │   └── RedisOnlineClientManagerModuleConfig.cs
│   │   └── Web/
│   │       └── SignalR/
│   │           └── QrScan/
│   │               ├── SignalRQrCodeScannedRealTimeNotifier.cs
│   │               └── SignalRQrCodeScannedRealTimeNotifierModule.cs
│   ├── Abplus.IO.AliyunOSSStorage/
│   │   ├── Abplus.IO.AliyunOSSStorage.csproj
│   │   ├── Configuration/
│   │   │   └── Startup/
│   │   │       └── AliyunOSSStorageConfigurationExtensions.cs
│   │   ├── IO/
│   │   │   ├── AliyunOSSStorage/
│   │   │   │   ├── AliyunOSSStorage.cs
│   │   │   │   ├── AliyunOSSStorageModule.cs
│   │   │   │   ├── AliyunOSSStorageModuleConfiguration.cs
│   │   │   │   └── IAliyunOSSStorageModuleConfiguration.cs
│   │   │   └── AliyunOSSStorageConsts.cs
│   │   └── Localization/
│   │       ├── AliyunOSSStorageLocalizationConfigurer.cs
│   │       └── SourceFiles/
│   │           ├── AliyunOSSStorage-zh-Hans.xml
│   │           └── AliyunOSSStorage.xml
│   ├── Abplus.IO.AzureBlobStorage/
│   │   ├── Abplus.IO.AzureBlobStorage.csproj
│   │   ├── Abplus.IO.AzureBlobStorage.nuspec
│   │   ├── Configuration/
│   │   │   └── Startup/
│   │   │       └── AzureBlobFileStorageConfigurationExtensions.cs
│   │   ├── IO/
│   │   │   ├── AzureBlobStorage/
│   │   │   │   ├── AzureBlobFileStorage.cs
│   │   │   │   ├── AzureBlobFileStorageConfig.cs
│   │   │   │   ├── AzureBlobFileStorageModule.cs
│   │   │   │   ├── AzureBlobFileStorageModuleConfig.cs
│   │   │   │   ├── Configuration/
│   │   │   │   │   ├── AzureBlobFileStorageSetting.cs
│   │   │   │   │   ├── AzureBlobFileStorageSettingNames.cs
│   │   │   │   │   └── AzureBlobFileStorageSettingProvider.cs
│   │   │   │   ├── IAzureBlobFileStorageConfig.cs
│   │   │   │   └── IAzureBlobFileStorageModuleConfig.cs
│   │   │   └── AzureBlobStorageConsts.cs
│   │   └── Localization/
│   │       ├── AzureBlobStorageLocalizationConfigurer.cs
│   │       └── SourceFiles/
│   │           ├── AbplusAzureBlobStorage-zh-Hans.xml
│   │           └── AbplusAzureBlobStorage.xml
│   ├── Abplus.IO.LocalFileSystem/
│   │   ├── Abplus.IO.LocalFileSystem.csproj
│   │   ├── IO/
│   │   │   ├── LocalFileSystem/
│   │   │   │   ├── ILocalFileSystemStorageConfig.cs
│   │   │   │   ├── LocalFileSystemStorage.cs
│   │   │   │   ├── LocalFileSystemStorageConfig.cs
│   │   │   │   ├── LocalFileSystemStorageModule.cs
│   │   │   │   ├── LocalFileSystemStorageSettingNames.cs
│   │   │   │   └── LocalFileSystemStorageSettingProvider.cs
│   │   │   └── LocalFileSystemConsts.cs
│   │   └── Localization/
│   │       ├── LocalFileSystemLocalizationConfigurer.cs
│   │       └── SourceFiles/
│   │           ├── AbplusLocalFileSystem-zh-Hans.xml
│   │           └── AbplusLocalFileSystem.xml
│   ├── Abplus.MqMessages/
│   │   ├── Abplus.MqMessages.csproj
│   │   ├── Abplus.MqMessages.nuspec
│   │   ├── Configuration/
│   │   │   └── Startup/
│   │   │       └── ExceptionLogInterceptorRegistrar.cs
│   │   └── MqMessages/
│   │       ├── AuditingStores/
│   │       │   └── AuditInfoMqMessage.cs
│   │       ├── AutoGeneration/
│   │       │   └── DontGenerateMqMessage.cs
│   │       ├── AutoMapper/
│   │       │   └── AutoEventsMapToMqMessagesHelper.cs
│   │       ├── Handlers/
│   │       │   └── EventDataPublishHandlerBase.cs
│   │       └── MqHandlers/
│   │           ├── AbpMqHandlerBase.cs
│   │           └── ExceptionLoggling/
│   │               ├── ExceptionLogAttribute.cs
│   │               ├── ExceptionLogHandler.cs
│   │               └── ExceptionLogInterceptor.cs
│   ├── Abplus.MqMessages.AuditingConsumerHandler/
│   │   ├── Abplus.MqMessages.AuditingConsumerHandler.csproj
│   │   ├── Abplus.MqMessages.AuditingConsumerHandler.nuspec
│   │   ├── Auditing/
│   │   │   └── AuditingStore/
│   │   │       ├── AuditingConsumerRebusHandlerModule.cs
│   │   │       ├── AuditingConsumerRebusHandlerModuleConfig.cs
│   │   │       ├── IAuditingConsumerRebusHandlerModuleConfig.cs
│   │   │       └── MqMessageAuditingStoreRebusHandler.cs
│   │   └── Configuration/
│   │       └── Startup/
│   │           └── AuditingConsumerRebusHandlerConfigurationExtensions.cs
│   ├── Abplus.MqMessages.AuditingStore/
│   │   ├── Abplus.MqMessages.AuditingStore.csproj
│   │   ├── Abplus.MqMessages.AuditingStore.nuspec
│   │   └── Auditing/
│   │       └── AuditingStores/
│   │           ├── MqMessageAuditingStore.cs
│   │           └── MqMessageAuditingStoreModule.cs
│   ├── Abplus.MqMessages.IndexToES/
│   │   ├── Abplus.MqMessages.IndexToES.csproj
│   │   ├── Abplus.MqMessages.IndexToES.nuspec
│   │   ├── DateTimeExtensions.cs
│   │   ├── IndexFreq.cs
│   │   └── MqMessages/
│   │       └── MqHandlers/
│   │           ├── MqMessageIndexToESHandlerBase.cs
│   │           ├── MqMessageIndexToESHandlerBuilder.cs
│   │           ├── MqMessageIndexToESHandlerBuilder.tt
│   │           ├── MqMessagesT4Register.cs
│   │           └── T4MultipleOutputManager.ttinclude
│   ├── Abplus.MqMessages.RebusCore/
│   │   ├── Abplus.MqMessages.RebusCore.csproj
│   │   ├── Abplus.MqMessages.RebusCore.nuspec
│   │   └── MqMessages/
│   │       └── Publishers/
│   │           ├── RebusRabbitMqPublisher.cs
│   │           └── RebusRabbitMqPublisherCoreModule.cs
│   ├── Abplus.MqMessages.RebusRabbitMqConsumer/
│   │   ├── Abplus.MqMessages.RebusRabbitMqConsumer.csproj
│   │   ├── Abplus.MqMessages.RebusRabbitMqConsumer.nuspec
│   │   ├── Configuration/
│   │   │   └── Startup/
│   │   │       └── RebusRabbitMqConsumerConfigurationExtensions.cs
│   │   └── MqMessages/
│   │       └── Consumers/
│   │           ├── IRebusRabbitMqConsumerModuleConfig.cs
│   │           ├── RebusRabbitMqConsumerModule.cs
│   │           └── RebusRabbitMqConsumerModuleConfig.cs
│   ├── Abplus.MqMessages.RebusRabbitMqPublisher/
│   │   ├── Abplus.MqMessages.RebusRabbitMqPublisher.csproj
│   │   ├── Abplus.MqMessages.RebusRabbitMqPublisher.nuspec
│   │   ├── Configuration/
│   │   │   └── Startup/
│   │   │       └── RebusRabbitMqPublisherConfigurationExtensions.cs
│   │   └── MqMessages/
│   │       └── Publishers/
│   │           ├── IRebusRabbitMqPublisherModuleConfig.cs
│   │           ├── RebusRabbitMqPublisherModule.cs
│   │           └── RebusRabbitMqPublisherModuleConfig.cs
│   ├── Abplus.MqMessages.RedisStoreMessageTracker/
│   │   ├── Abplus.MqMessages.RedisStoreMessageTracker.csproj
│   │   ├── Abplus.MqMessages.RedisStoreMessageTracker.nuspec
│   │   └── MqMessages/
│   │       └── MessageTrackers/
│   │           ├── RedisStoreMessageTracker.cs
│   │           └── RedisStoreMessageTrackerModule.cs
│   ├── Abplus.T4.PermissionsFromJson/
│   │   ├── Abplus.T4.PermissionsFromJson.csproj
│   │   ├── Abplus.T4.PermissionsFromJson.nuspec
│   │   └── Authorization/
│   │       └── Builders/
│   │           ├── BuilderUtils.cs
│   │           ├── PermissionBuilder.cs
│   │           ├── PermissionBuilder.tt
│   │           ├── Permissions/
│   │           │   └── Sample.json
│   │           └── T4MultipleOutputManager.ttinclude
│   └── Samples/
│       ├── AuditingConsumer/
│       │   ├── Sample.AuditingConsumerHandler/
│       │   │   ├── Program.cs
│       │   │   ├── Sample.AuditingConsumerHandler.csproj
│       │   │   ├── SampleAuditingConsumerHandlerBootstrap.cs
│       │   │   └── SampleAuditingConsumerHandlerModule.cs
│       │   └── Sample.MqMessageAuditingStore/
│       │       ├── Application/
│       │       │   ├── ITestAuditingStoreAppService.cs
│       │       │   ├── TestAuditingInput.cs
│       │       │   └── TestAuditingStoreAppService.cs
│       │       ├── BackgroudWorker/
│       │       │   └── TestWorker.cs
│       │       ├── Program.cs
│       │       ├── Sample.MqMessageAuditingStore.csproj
│       │       ├── SampleMqMessageAuditingStoreBootstrap.cs
│       │       └── SampleMqMessageAuditingStoreModule.cs
│       ├── FileStorage/
│       │   ├── Sample.AliyunOSSStorage/
│       │   │   ├── BackgroundWorker/
│       │   │   │   └── TestWorker.cs
│       │   │   ├── Program.cs
│       │   │   ├── Sample.AliyunOSSStorageConsole.csproj
│       │   │   ├── SampleAliyunOSSStorageBootstrap.cs
│       │   │   └── SampleAliyunOSSStorageModule.cs
│       │   ├── Sample.AzureBlobStorage/
│       │   │   ├── BackgroundWorker/
│       │   │   │   └── TestWorker.cs
│       │   │   ├── Program.cs
│       │   │   ├── Sample.AzureBlobStorageConsole.csproj
│       │   │   ├── SampleAzureBlobStorageBootstrap.cs
│       │   │   └── SampleAzureBlobStorageModule.cs
│       │   └── Sample.LocalFileSystem/
│       │       ├── Program.cs
│       │       ├── Sample.LocalFileSystemConsole.csproj
│       │       ├── SampleLocalFileSystemBootstrap.cs
│       │       └── SampleLocalFileSystemModule.cs
│       ├── Sample.DotNetCoreConsumerHost/
│       │   ├── Handlers/
│       │   │   └── TestHandler.cs
│       │   ├── Program.cs
│       │   ├── Sample.DotNetCoreConsumerHost.csproj
│       │   ├── SampleConsumerHostBootstrap.cs
│       │   └── SampleConsumerHostModule.cs
│       ├── Sample.DotNetCorePublisherHost/
│       │   ├── BackgroundWorker/
│       │   │   └── TestWorker.cs
│       │   ├── Program.cs
│       │   ├── Sample.DotNetCorePublisherHost.csproj
│       │   ├── SamplePublisherHostBootstrap.cs
│       │   └── SamplePublisherHostModule.cs
│       ├── Sample.DotNetFxConsumerHost/
│       │   ├── App.config
│       │   ├── DotNetFxConsumerHostBootstrap.cs
│       │   ├── DotNetFxConsumerHostModule.cs
│       │   ├── Handlers/
│       │   │   └── TestHandler.cs
│       │   ├── NLog.config
│       │   ├── NLog.xsd
│       │   ├── Program.cs
│       │   ├── Properties/
│       │   │   └── AssemblyInfo.cs
│       │   ├── Sample.DotNetFxConsumerHost.csproj
│       │   └── packages.config
│       ├── Sample.DotNetFxPublisherHost/
│       │   ├── App.config
│       │   ├── BackgroundWorker/
│       │   │   └── TestWorker.cs
│       │   ├── DotNetFxPublisherHostBootstrap.cs
│       │   ├── DotNetFxPublisherHostModule.cs
│       │   ├── NLog.config
│       │   ├── NLog.xsd
│       │   ├── Program.cs
│       │   ├── Properties/
│       │   │   └── AssemblyInfo.cs
│       │   ├── Sample.DotNetFxPublisherHost.csproj
│       │   └── packages.config
│       └── Sample.MqMessages/
│           ├── Sample.MqMessages.csproj
│           └── TestMessage.cs
└── src2/
    ├── Abplus/
    │   ├── Abplus.csproj
    │   ├── Abplus.nuspec
    │   ├── AbplusConsts.cs
    │   ├── Application/
    │   │   ├── Navigation/
    │   │   │   └── MenuItemDefinitionPlugInExtensions.cs
    │   │   └── Services/
    │   │       └── Dto/
    │   │           ├── IHasDateTimeFilterRequest.cs
    │   │           ├── IHasKeywordFilterRequest.cs
    │   │           ├── IPaginationResultRequest.cs
    │   │           └── PaginationRequestInput.cs
    │   ├── Currencies/
    │   │   └── ChineseCentExtension.cs
    │   ├── Events/
    │   │   └── Bus/
    │   │       ├── ChangedEventData.cs
    │   │       └── IShouldBePublish.cs
    │   ├── Extensions/
    │   │   ├── DateTimeExtensions.cs
    │   │   ├── EnumExtensions.cs
    │   │   ├── GuidExtensions.cs
    │   │   ├── IntExtension.cs
    │   │   ├── NullableDateTimeExtensions.cs
    │   │   └── StringExtensions.cs
    │   ├── Interceptors/
    │   │   ├── AsyncHandlingInterceptor.cs
    │   │   └── IAsyncInterceptorHandler.cs
    │   ├── Json/
    │   │   └── LargeNumJsonConverter.cs
    │   ├── MqMessages/
    │   │   ├── IMqMessagePublisher.cs
    │   │   ├── MessageTrackers/
    │   │   │   ├── DefaultInMemoryMessageTracker.cs
    │   │   │   └── IMessageTracker.cs
    │   │   └── NullMqMessagePublisher.cs
    │   ├── PlugIns/
    │   │   ├── IPlugInAreaRegistration.cs
    │   │   ├── IPlugInAuthorizationProvider.cs
    │   │   └── IPlugInNavigationProvider.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── QrCode/
    │   │   └── IQrCodeScannedRealTimeNotifier.cs
    │   ├── Reservations/
    │   │   ├── Events/
    │   │   │   ├── ReservationCancelledEventData.cs
    │   │   │   ├── ReservationEventDataBase.cs
    │   │   │   └── ReservationSuccessEventData.cs
    │   │   ├── IReservation.cs
    │   │   ├── IReservationBody.cs
    │   │   ├── ReservationBase.cs
    │   │   └── ReservationBodyBase.cs
    │   ├── TimeRanges/
    │   │   └── TimeRange.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.Common/
    │   ├── Abplus.Common.csproj
    │   ├── Abplus.Common.nuspec
    │   ├── Application/
    │   │   └── Services/
    │   │       └── Dto/
    │   │           ├── IPagedQueryInput.cs
    │   │           └── PagedQueryInput.cs
    │   ├── Linq/
    │   │   └── Extensions/
    │   │       └── IQueryableExtension.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.EntityFramework/
    │   ├── Abplus.EntityFramework.csproj
    │   ├── Abplus.EntityFramework.nuspec
    │   ├── App.config
    │   ├── EntityFramework/
    │   │   ├── DbContextUtils.cs
    │   │   └── DbModelBuilderExtensions.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   └── packages.config
    ├── Abplus.Events.Producer/
    │   ├── Abplus.Events.Producer.csproj
    │   ├── Abplus.Events.Producer.nuspec
    │   ├── Events/
    │   │   └── Producer/
    │   │       ├── AbpEventsProducerModule.cs
    │   │       ├── Handler/
    │   │       │   └── PublishAllEventsHandler.cs
    │   │       ├── IProducer.cs
    │   │       └── NullProducer.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   └── packages.config
    ├── Abplus.MqMessages/
    │   ├── Abplus.MqMessages.csproj
    │   ├── Abplus.MqMessages.nuspec
    │   ├── Configuration/
    │   │   └── Startup/
    │   │       └── ExceptionLogInterceptorRegistrar.cs
    │   ├── MqMessages/
    │   │   ├── AutoMapper/
    │   │   │   └── AutoEventsMapToMqMessagesHelper.cs
    │   │   ├── Handlers/
    │   │   │   └── EventDataPublishHandlerBase.cs
    │   │   └── MqHandlers/
    │   │       ├── AbpMqHandlerBase.cs
    │   │       └── ExceptionLoggling/
    │   │           ├── ExceptionLogAttribute.cs
    │   │           ├── ExceptionLogHandler.cs
    │   │           └── ExceptionLogInterceptor.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.MqMessages.AuditingConsumerHandler/
    │   ├── Abplus.MqMessages.AuditingConsumerRebusHandler.csproj
    │   ├── Auditing/
    │   │   └── AuditingStore/
    │   │       ├── AuditingConsumerRebusHandlerModule.cs
    │   │       ├── AuditingConsumerRebusHandlerModuleConfig.cs
    │   │       ├── IAuditingConsumerRebusHandlerModuleConfig.cs
    │   │       └── MqMessageAuditingStoreRebusHandler.cs
    │   ├── Configuration/
    │   │   └── Startup/
    │   │       └── AuditingConsumerRebusHandlerConfigurationExtensions.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.MqMessages.AuditingStore/
    │   ├── Abplus.MqMessages.AuditingStore.csproj
    │   ├── Abplus.MqMessages.AuditingStore.nuspec
    │   ├── Auditing/
    │   │   └── AuditingStores/
    │   │       ├── AuditInfoMqMessage.cs
    │   │       ├── MqMessageAuditingStore.cs
    │   │       └── MqMessageAuditingStoreModule.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.MqMessages.IndexToES/
    │   ├── Abplus.MqMessages.IndexToES.csproj
    │   ├── Abplus.MqMessages.IndexToES.nuspec
    │   ├── DateTimeExtensions.cs
    │   ├── IndexFreq.cs
    │   ├── MqMessages/
    │   │   └── MqHandlers/
    │   │       ├── MqMessageIndexToESHandlerBase.cs
    │   │       ├── MqMessageIndexToESHandlerBuilder.cs
    │   │       ├── MqMessageIndexToESHandlerBuilder.tt
    │   │       ├── MqMessagesT4Register.cs
    │   │       └── T4MultipleOutputManager.ttinclude
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.MqMessages.RebusConsumer/
    │   ├── Abplus.MqMessages.RebusConsumer.nuspec
    │   ├── Abplus.MqMessages.RebusRabbitMqConsumer.csproj
    │   ├── Configuration/
    │   │   └── Startup/
    │   │       └── RebusRabbitMqConsumerConfigurationExtensions.cs
    │   ├── MqMessages/
    │   │   └── Consumers/
    │   │       ├── IRebusRabbitMqConsumerModuleConfig.cs
    │   │       ├── RebusRabbitMqConsumerModule.cs
    │   │       └── RebusRabbitMqConsumerModuleConfig.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.MqMessages.RebusCore/
    │   ├── Abplus.MqMessages.RebusCore.csproj
    │   ├── Abplus.MqMessages.RebusCore.nuspec
    │   ├── MqMessages/
    │   │   └── Publishers/
    │   │       ├── RebusRabbitMqPublisher.cs
    │   │       └── RebusRabbitMqPublisherCoreModule.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.MqMessages.RebusPublisher/
    │   ├── Abplus.MqMessages.RebusPublisher.nuspec
    │   ├── Abplus.MqMessages.RebusRabbitMqPublisher.csproj
    │   ├── Configuration/
    │   │   └── Startup/
    │   │       └── RebusRabbitMqPublisherConfigurationExtensions.cs
    │   ├── MqMessages/
    │   │   └── Publishers/
    │   │       ├── IRebusRabbitMqPublisherModuleConfig.cs
    │   │       ├── RebusRabbitMqPublisherModule.cs
    │   │       └── RebusRabbitMqPublisherModuleConfig.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.MqMessages.RedisStoreMessageTracker/
    │   ├── Abplus.MqMessages.RedisStoreMessageTracker.csproj
    │   ├── Abplus.MqMessages.RedisStoreMessageTracker.nuspec
    │   ├── MqMessages/
    │   │   └── MessageTrackers/
    │   │       ├── RedisStoreMessageTracker.cs
    │   │       └── RedisStoreMessageTrackerModule.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.RebusRabbitmqConsumer/
    │   ├── Abplus.RebusRabbitmqConsumer.csproj
    │   ├── Abplus.RebusRabbitmqConsumer.nuspec
    │   ├── Configuration/
    │   │   └── Startup/
    │   │       └── AbpRebusRabbitMqConsumerConfigurationExtensions.cs
    │   ├── Events/
    │   │   └── Consumer/
    │   │       └── RebusRabbitMq/
    │   │           ├── AbpRebusRabbitMqConsumerModule.cs
    │   │           ├── AbpRebusRabbitMqConsumerModuleConfig.cs
    │   │           └── IAbpRebusRabbitMqConsumerModuleConfig.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   └── packages.config
    ├── Abplus.RebusRabbitmqProducer/
    │   ├── Abplus.RebusRabbitmqProducer.csproj
    │   ├── Abplus.RebusRabbitmqProducer.nuspec
    │   ├── Configuration/
    │   │   └── Startup/
    │   │       └── AbpRebusRabbitMqProducerConfigurationExtensions.cs
    │   ├── Events/
    │   │   └── Producer/
    │   │       └── RebusRabbitMq/
    │   │           ├── AbpRebusRabbitMqProducerModule.cs
    │   │           ├── AbpRebusRabbitMqProducerModuleConfig.cs
    │   │           ├── IAbpRebusRabbitMqProducerModuleConfig.cs
    │   │           └── RebusRabbitMqProducer.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.T4.PermissionsFromJson/
    │   ├── Abplus.T4.PermissionsFromJson.csproj
    │   ├── Abplus.T4.PermissionsFromJson.nuspec
    │   ├── Authorization/
    │   │   └── Builders/
    │   │       ├── BuilderUtils.cs
    │   │       ├── PermissionBuilder.cs
    │   │       ├── PermissionBuilder.tt
    │   │       ├── Permissions/
    │   │       │   └── Sample.json
    │   │       └── T4MultipleOutputManager.ttinclude
    │   └── Properties/
    │       └── AssemblyInfo.cs
    ├── Abplus.Web.Api/
    │   ├── Abplus.Web.Api.csproj
    │   ├── Abplus.Web.Api.nuspec
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── WebApi/
    │   │   └── JsonMediaTypeFormatterExtension.cs
    │   ├── WebApiVersionRoute/
    │   │   ├── RoutingConstraints/
    │   │   │   ├── VersionConstraint.cs
    │   │   │   └── VersionedRoute.cs
    │   │   ├── SysCode.cs
    │   │   ├── Version.cs
    │   │   ├── VersionConsts.cs
    │   │   └── VersionRange.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.Web.PlugIns/
    │   ├── Abplus.Web.PlugIns.csproj
    │   ├── Abplus.Web.PlugIns.csproj.nuspec
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── Web/
    │   │   └── Mvc/
    │   │       ├── AbpWebPlugInModule.cs
    │   │       └── Controllers/
    │   │           └── PlugInWindsorControllerFactory.cs
    │   └── packages.config
    ├── Abplus.Web.SignalR/
    │   ├── Abplus.Web.SignalR.csproj
    │   ├── Abplus.Web.SignalR.nuspec
    │   ├── Configuration/
    │   │   └── Startup/
    │   │       └── RedisOnlineClientManagerConfiguationExtensions.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── RealTime/
    │   │   ├── IRedisOnlineClientManagerModuleConfig.cs
    │   │   ├── RedisOnlineClientManager.cs
    │   │   ├── RedisOnlineClientManagerModule.cs
    │   │   └── RedisOnlineClientManagerModuleConfig.cs
    │   ├── Web/
    │   │   └── SignalR/
    │   │       └── QrScan/
    │   │           ├── SignalRQrCodeScannedRealTimeNotifier.cs
    │   │           └── SignalRQrCodeScannedRealTimeNotifierModule.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.Web.SimpleCaptcha/
    │   ├── Abplus.Web.SimpleCaptcha.csproj
    │   ├── Abplus.Web.SimpleCaptcha.nuspec
    │   ├── Configuration/
    │   │   └── Startup/
    │   │       └── SimpleCaptchaManagerConfigurationExtension.cs
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── Web/
    │   │   └── SimpleCaptcha/
    │   │       ├── ISimpleCaptchaModuleConfig.cs
    │   │       ├── IVerificationCodeStore.cs
    │   │       ├── SimpleCaptchaManager.cs
    │   │       ├── SimpleCaptchaModule.cs
    │   │       ├── SimpleCaptchaModuleConfig.cs
    │   │       └── VerificationCodeStores/
    │   │           ├── CacheVerificationCodeStore.cs
    │   │           ├── CookieVerificationCodeStore.cs
    │   │           └── SessionVerificationCodeStore.cs
    │   ├── app.config
    │   └── packages.config
    ├── Abplus.WebApiClient/
    │   ├── Abplus.WebApiClient.csproj
    │   ├── Abplus.WebApiClient.nuspec
    │   ├── Properties/
    │   │   └── AssemblyInfo.cs
    │   ├── WebApiClient/
    │   │   ├── AbplusWebApiClient.cs
    │   │   ├── AbplusWebApiClientModule.cs
    │   │   ├── AbplusWebApiClientRemoteCallException.cs
    │   │   └── IAbplusWebApiClient.cs
    │   ├── app.config
    │   └── packages.config
    ├── Samples/
    │   ├── Abplus.WebApiVersionRoute.Sample/
    │   │   ├── Abplus.WebApiVersionRoute.Sample.csproj
    │   │   ├── App_Start/
    │   │   │   └── WebApiConfig.cs
    │   │   ├── Controllers/
    │   │   │   └── ValueController.cs
    │   │   ├── Global.asax
    │   │   ├── Global.asax.cs
    │   │   ├── Properties/
    │   │   │   └── AssemblyInfo.cs
    │   │   ├── Web.Debug.config
    │   │   ├── Web.Release.config
    │   │   ├── Web.config
    │   │   └── packages.config
    │   ├── Sample.MqMessages/
    │   │   ├── MqMessages/
    │   │   │   └── TestMqMessage.cs
    │   │   ├── Properties/
    │   │   │   └── AssemblyInfo.cs
    │   │   └── Sample.MqMessages.csproj
    │   ├── Sample.RebusRabbitMqConsumer/
    │   │   ├── App.config
    │   │   ├── Handlers/
    │   │   │   └── TestHandler.cs
    │   │   ├── NLog.config
    │   │   ├── NLog.xsd
    │   │   ├── Program.cs
    │   │   ├── Properties/
    │   │   │   └── AssemblyInfo.cs
    │   │   ├── Sample.RebusRabbitMqConsumer.csproj
    │   │   ├── SampleRebusRabbitMqConsumerBootstrap.cs
    │   │   ├── SampleRebusRabbitMqConsumerModule.cs
    │   │   └── packages.config
    │   └── Sample.RebusRabbitMqPublisher/
    │       ├── App.config
    │       ├── BackgroundWorks/
    │       │   └── TestWorker.cs
    │       ├── NLog.config
    │       ├── NLog.xsd
    │       ├── Program.cs
    │       ├── Properties/
    │       │   └── AssemblyInfo.cs
    │       ├── Sample.RebusRabbitMqPublisher.csproj
    │       ├── SampleRebusRabbitMqPublisherBootstrap.cs
    │       ├── SampleRebusRabbitMqPublisherModule.cs
    │       └── packages.config
    └── Tests/
        └── Abplus.Tests/
            ├── Abplus.Tests.csproj
            ├── Properties/
            │   └── AssemblyInfo.cs
            ├── TimeRanges/
            │   └── TimeRange_Tests.cs
            ├── app.config
            └── packages.config
Download .txt
SYMBOL INDEX (956 symbols across 267 files)

FILE: src/Abplus.AspNetCore.SignalR/Configuration/Startup/RedisOnlineClientManagerConfiguationExtensions.cs
  class RedisOnlineClientManagerConfiguationExtensions (line 5) | public static class RedisOnlineClientManagerConfiguationExtensions
    method UseRedisOnlineClientManager (line 7) | public static IRedisOnlineClientManagerModuleConfig UseRedisOnlineClie...

FILE: src/Abplus.AspNetCore.SignalR/RealTime/IRedisOnlineClientManagerModuleConfig.cs
  type IRedisOnlineClientManagerModuleConfig (line 9) | public interface IRedisOnlineClientManagerModuleConfig
    method ConnectTo (line 22) | IRedisOnlineClientManagerModuleConfig ConnectTo(string connectionString);
    method WithStoreKey (line 24) | IRedisOnlineClientManagerModuleConfig WithStoreKey(string storeKey);

FILE: src/Abplus.AspNetCore.SignalR/RealTime/RedisOnlineClientManager.cs
  class RedisOnlineClientManager (line 16) | public class RedisOnlineClientManager : IOnlineClientManager
    method RedisOnlineClientManager (line 52) | public RedisOnlineClientManager()
    method CreateConnectionMultiplexer (line 69) | private ConnectionMultiplexer CreateConnectionMultiplexer()
    method GetDatabase (line 78) | protected IDatabase GetDatabase()
    method Add (line 87) | public void Add(IOnlineClient client)
    method IsUserOnline (line 110) | private bool IsUserOnline(UserIdentifier user)
    method AddClientToRedisStore (line 116) | private void AddClientToRedisStore(IOnlineClient client)
    method GetAllClients (line 146) | public IReadOnlyList<IOnlineClient> GetAllClients()
    method GetByConnectionIdOrNull (line 167) | public IOnlineClient GetByConnectionIdOrNull(string connectionId)
    method Remove (line 187) | public bool Remove(string connectionId)
    method GetAllByUserId (line 238) | public IReadOnlyList<IOnlineClient> GetAllByUserId(IUserIdentifier user)

FILE: src/Abplus.AspNetCore.SignalR/RealTime/RedisOnlineClientManagerModule.cs
  class RedisOnlineClientManagerModule (line 7) | public class RedisOnlineClientManagerModule : AbpModule
    method PreInitialize (line 9) | public override void PreInitialize()
    method Initialize (line 16) | public override void Initialize()

FILE: src/Abplus.AspNetCore.SignalR/RealTime/RedisOnlineClientManagerModuleConfig.cs
  class RedisOnlineClientManagerModuleConfig (line 9) | public class RedisOnlineClientManagerModuleConfig : IRedisOnlineClientMa...
    method RedisOnlineClientManagerModuleConfig (line 15) | public RedisOnlineClientManagerModuleConfig()
    method ConnectTo (line 21) | public IRedisOnlineClientManagerModuleConfig ConnectTo(string connecti...
    method WithStoreKey (line 27) | public IRedisOnlineClientManagerModuleConfig WithStoreKey(string store...

FILE: src/Abplus.AspNetCore.SignalR/Web/SignalR/QrScan/SignalRQrCodeScannedRealTimeNotifier.cs
  class SignalRQrCodeScannedRealTimeNotifier (line 10) | public class SignalRQrCodeScannedRealTimeNotifier : IQrCodeScannedRealTi...
    method SignalRQrCodeScannedRealTimeNotifier (line 22) | public SignalRQrCodeScannedRealTimeNotifier(IHubContext<AbpCommonHub> ...
    method Notify (line 28) | public Task Notify(string scannerId, string connectionId, object prope...

FILE: src/Abplus.AspNetCore.SignalR/Web/SignalR/QrScan/SignalRQrCodeScannedRealTimeNotifierModule.cs
  class SignalRQrCodeScannedRealTimeNotifierModule (line 6) | public class SignalRQrCodeScannedRealTimeNotifierModule : AbpModule
    method PreInitialize (line 8) | public override void PreInitialize()

FILE: src/Abplus.IO.AliyunOSSStorage/Configuration/Startup/AliyunOSSStorageConfigurationExtensions.cs
  class AliyunOSSStorageConfigurationExtensions (line 5) | public static class AliyunOSSStorageConfigurationExtensions
    method UseAliyunOSSStorage (line 7) | public static IAliyunOSSStorageModuleConfiguration UseAliyunOSSStorage...

FILE: src/Abplus.IO.AliyunOSSStorage/IO/AliyunOSSStorage/AliyunOSSStorage.cs
  class AliyunOSSStorage (line 13) | public class AliyunOSSStorage : IFileStorage
    method InitClient (line 17) | private static OssClient InitClient()
    method AliyunOSSStorage (line 27) | public AliyunOSSStorage(IAliyunOSSStorageModuleConfiguration config)
    method Delete (line 33) | public Task Delete(string fileName, string subPath = null)
    method ReadAsBytes (line 44) | public Task<byte[]> ReadAsBytes(string fileName, string subPath = null)
    method Save (line 67) | public Task<string> Save(Stream source, string fileName, string subPat...
    method Save (line 84) | public Task<string> Save(byte[] source, string fileName, string subPat...

FILE: src/Abplus.IO.AliyunOSSStorage/IO/AliyunOSSStorage/AliyunOSSStorageModule.cs
  class AliyunOSSStorageModule (line 7) | [DependsOn(typeof(AbpKernelModule))]
    method PreInitialize (line 10) | public override void PreInitialize()
    method Initialize (line 14) | public override void Initialize()

FILE: src/Abplus.IO.AliyunOSSStorage/IO/AliyunOSSStorage/AliyunOSSStorageModuleConfiguration.cs
  class AliyunOSSStorageModuleConfiguration (line 3) | public class AliyunOSSStorageModuleConfiguration : IAliyunOSSStorageModu...
    method SetAccessKeyId (line 15) | public IAliyunOSSStorageModuleConfiguration SetAccessKeyId(string id)
    method SetAccessKeySecret (line 21) | public IAliyunOSSStorageModuleConfiguration SetAccessKeySecret(string ...
    method SetBucketName (line 27) | public IAliyunOSSStorageModuleConfiguration SetBucketName(string bucke...
    method SetEndpoint (line 33) | public IAliyunOSSStorageModuleConfiguration SetEndpoint(string endpoint)
    method WithUriPrefix (line 39) | public IAliyunOSSStorageModuleConfiguration WithUriPrefix(string prefix)

FILE: src/Abplus.IO.AliyunOSSStorage/IO/AliyunOSSStorage/IAliyunOSSStorageModuleConfiguration.cs
  type IAliyunOSSStorageModuleConfiguration (line 3) | public interface IAliyunOSSStorageModuleConfiguration
    method SetAccessKeyId (line 11) | IAliyunOSSStorageModuleConfiguration SetAccessKeyId(string id);
    method SetAccessKeySecret (line 12) | IAliyunOSSStorageModuleConfiguration SetAccessKeySecret(string secret);
    method SetEndpoint (line 13) | IAliyunOSSStorageModuleConfiguration SetEndpoint(string endpoint);
    method SetBucketName (line 14) | IAliyunOSSStorageModuleConfiguration SetBucketName(string bucketName);
    method WithUriPrefix (line 15) | IAliyunOSSStorageModuleConfiguration WithUriPrefix(string prefix);

FILE: src/Abplus.IO.AliyunOSSStorage/IO/AliyunOSSStorageConsts.cs
  class AliyunOSSStorageConsts (line 3) | public class AliyunOSSStorageConsts

FILE: src/Abplus.IO.AliyunOSSStorage/Localization/AliyunOSSStorageLocalizationConfigurer.cs
  class AliyunOSSStorageLocalizationConfigurer (line 9) | public class AliyunOSSStorageLocalizationConfigurer
    method Configure (line 11) | public static void Configure(ILocalizationConfiguration localizationCo...

FILE: src/Abplus.IO.AzureBlobStorage/Configuration/Startup/AzureBlobFileStorageConfigurationExtensions.cs
  class AzureBlobFileStorageConfigurationExtensions (line 5) | public static  class AzureBlobFileStorageConfigurationExtensions
    method UseAzureBlobFileStorage (line 7) | public static IAzureBlobFileStorageModuleConfig UseAzureBlobFileStorag...

FILE: src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/AzureBlobFileStorage.cs
  class AzureBlobFileStorage (line 13) | public class AzureBlobFileStorage : IFileStorage
    method AzureBlobFileStorage (line 18) | public AzureBlobFileStorage(IAzureBlobFileStorageConfig config)
    method Delete (line 24) | public async Task Delete(string fileName, string subPath = null)
    method ReadAsBytes (line 46) | public async Task<byte[]> ReadAsBytes(string fileName, string subPath ...
    method Save (line 71) | public async Task<string> Save(Stream source, string fileName, string ...
    method Save (line 83) | public async Task<string> Save(byte[] source, string fileName, string ...
    method AbsoluteAccessPath (line 95) | private static string AbsoluteAccessPath(IAzureBlobFileStorageConfig c...
    method UploadFileToStorage (line 100) | private static async Task<bool> UploadFileToStorage(byte[] fileBytes, ...
    method UploadFileToStorage (line 112) | private static async Task<bool> UploadFileToStorage(Stream fileStream,...
    method GetCloudBlobContainer (line 124) | private static CloudBlobContainer GetCloudBlobContainer(IAzureBlobFile...

FILE: src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/AzureBlobFileStorageConfig.cs
  class AzureBlobFileStorageConfig (line 3) | public class AzureBlobFileStorageConfig : IAzureBlobFileStorageConfig
    method AzureBlobFileStorageConfig (line 7) | public AzureBlobFileStorageConfig(IAzureBlobFileStorageModuleConfig mo...

FILE: src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/AzureBlobFileStorageModule.cs
  class AzureBlobFileStorageModule (line 11) | [DependsOn(typeof(AbpKernelModule))]//依赖SettingManager
    method PreInitialize (line 14) | public override void PreInitialize()
    method Initialize (line 19) | public override void Initialize()

FILE: src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/AzureBlobFileStorageModuleConfig.cs
  class AzureBlobFileStorageModuleConfig (line 3) | public class AzureBlobFileStorageModuleConfig : IAzureBlobFileStorageMod...
    method AzureBlobFileStorageModuleConfig (line 5) | public AzureBlobFileStorageModuleConfig()
    method ConfigAzureStorage (line 24) | public IAzureBlobFileStorageModuleConfig ConfigAzureStorage()
    method ConfigAzureStorageUseSettingManager (line 30) | public void ConfigAzureStorageUseSettingManager()
    method SetAccountKey (line 35) | public IAzureBlobFileStorageModuleConfig SetAccountKey(string accountKey)
    method SetAccountName (line 41) | public IAzureBlobFileStorageModuleConfig SetAccountName(string account...
    method SetContainer (line 47) | public IAzureBlobFileStorageModuleConfig SetContainer(string container)
    method UseEndpointSuffix (line 53) | public IAzureBlobFileStorageModuleConfig UseEndpointSuffix(string endp...

FILE: src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/Configuration/AzureBlobFileStorageSetting.cs
  class AzureBlobFileStorageSetting (line 8) | public class AzureBlobFileStorageSetting : IAzureBlobFileStorageConfig
    method AzureBlobFileStorageSetting (line 12) | public AzureBlobFileStorageSetting(SettingManager settingManager)

FILE: src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/Configuration/AzureBlobFileStorageSettingNames.cs
  class AzureBlobFileStorageSettingNames (line 3) | public static class AzureBlobFileStorageSettingNames

FILE: src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/Configuration/AzureBlobFileStorageSettingProvider.cs
  class AzureBlobFileStorageSettingProvider (line 7) | public class AzureBlobFileStorageSettingProvider : SettingProvider
    method GetSettingDefinitions (line 9) | public override IEnumerable<SettingDefinition> GetSettingDefinitions(S...
    method L (line 39) | private static LocalizableString L(string name)

FILE: src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/IAzureBlobFileStorageConfig.cs
  type IAzureBlobFileStorageConfig (line 3) | public interface IAzureBlobFileStorageConfig

FILE: src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/IAzureBlobFileStorageModuleConfig.cs
  type IAzureBlobFileStorageModuleConfig (line 3) | public interface IAzureBlobFileStorageModuleConfig : IAzureBlobFileStora...
    method ConfigAzureStorageUseSettingManager (line 7) | void ConfigAzureStorageUseSettingManager();
    method ConfigAzureStorage (line 9) | IAzureBlobFileStorageModuleConfig ConfigAzureStorage();
    method SetAccountName (line 10) | IAzureBlobFileStorageModuleConfig SetAccountName(string accountName);
    method SetAccountKey (line 11) | IAzureBlobFileStorageModuleConfig SetAccountKey(string accountKey);
    method SetContainer (line 12) | IAzureBlobFileStorageModuleConfig SetContainer(string container);
    method UseEndpointSuffix (line 13) | IAzureBlobFileStorageModuleConfig UseEndpointSuffix(string endpointSuf...

FILE: src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorageConsts.cs
  class AzureBlobStorageConsts (line 3) | public class AzureBlobStorageConsts

FILE: src/Abplus.IO.AzureBlobStorage/Localization/AzureBlobStorageLocalizationConfigurer.cs
  class AzureBlobStorageLocalizationConfigurer (line 9) | public class AzureBlobStorageLocalizationConfigurer
    method Configure (line 11) | public static void Configure(ILocalizationConfiguration localizationCo...

FILE: src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/ILocalFileSystemStorageConfig.cs
  type ILocalFileSystemStorageConfig (line 3) | public interface ILocalFileSystemStorageConfig

FILE: src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/LocalFileSystemStorage.cs
  class LocalFileSystemStorage (line 13) | public class LocalFileSystemStorage : IFileStorage
    method LocalFileSystemStorage (line 17) | public LocalFileSystemStorage(ILocalFileSystemStorageConfig config)
    method Delete (line 22) | public async Task Delete(string fileName, string subPath = null)
    method ReadAsBytes (line 32) | public async Task<byte[]> ReadAsBytes(string fileName, string subPath ...
    method Save (line 42) | public async Task<string> Save(Stream source, string fileName, string ...
    method AbsoluteAccessUri (line 64) | private string AbsoluteAccessUri(ILocalFileSystemStorageConfig config,...
    method Save (line 69) | public async Task<string> Save(byte[] source, string fileName, string ...

FILE: src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/LocalFileSystemStorageConfig.cs
  class LocalFileSystemStorageConfig (line 5) | public class LocalFileSystemStorageConfig : ILocalFileSystemStorageConfig
    method LocalFileSystemStorageConfig (line 9) | public LocalFileSystemStorageConfig(ISettingManager settingManager)

FILE: src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/LocalFileSystemStorageModule.cs
  class LocalFileSystemStorageModule (line 8) | [DependsOn(typeof(AbpKernelModule))]
    method Initialize (line 11) | public override void Initialize()

FILE: src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/LocalFileSystemStorageSettingNames.cs
  class LocalFileSystemStorageSettingNames (line 3) | public static class LocalFileSystemStorageSettingNames

FILE: src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/LocalFileSystemStorageSettingProvider.cs
  class LocalFileSystemStorageSettingProvider (line 7) | public class LocalFileSystemStorageSettingProvider : SettingProvider
    method GetSettingDefinitions (line 9) | public override IEnumerable<SettingDefinition> GetSettingDefinitions(S...
    method L (line 27) | private static LocalizableString L(string name)

FILE: src/Abplus.IO.LocalFileSystem/IO/LocalFileSystemConsts.cs
  class LocalFileSystemConsts (line 3) | public class LocalFileSystemConsts

FILE: src/Abplus.IO.LocalFileSystem/Localization/LocalFileSystemLocalizationConfigurer.cs
  class LocalFileSystemLocalizationConfigurer (line 9) | public  class LocalFileSystemLocalizationConfigurer
    method Configure (line 11) | public static void Configure(ILocalizationConfiguration localizationCo...

FILE: src/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/AuditingConsumerRebusHandlerModule.cs
  class AuditingConsumerRebusHandlerModule (line 6) | public class AuditingConsumerRebusHandlerModule : AbpModule
    method PreInitialize (line 8) | public override void PreInitialize()
    method Initialize (line 13) | public override void Initialize()
    method PostInitialize (line 18) | public override void PostInitialize()
    method Shutdown (line 23) | public override void Shutdown()

FILE: src/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/AuditingConsumerRebusHandlerModuleConfig.cs
  class AuditingConsumerRebusHandlerModuleConfig (line 7) | public class AuditingConsumerRebusHandlerModuleConfig : IAuditingConsume...
    method AuditingConsumerRebusHandlerModuleConfig (line 9) | public AuditingConsumerRebusHandlerModuleConfig()
    method Batch (line 21) | public IAuditingConsumerRebusHandlerModuleConfig Batch(int batchSize)
    method Do (line 27) | public IAuditingConsumerRebusHandlerModuleConfig Do(Action<IEnumerable...
    method EveryPeriodIn (line 33) | public IAuditingConsumerRebusHandlerModuleConfig EveryPeriodIn(TimeSpa...

FILE: src/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/IAuditingConsumerRebusHandlerModuleConfig.cs
  type IAuditingConsumerRebusHandlerModuleConfig (line 7) | public interface IAuditingConsumerRebusHandlerModuleConfig
    method EveryPeriodIn (line 29) | IAuditingConsumerRebusHandlerModuleConfig EveryPeriodIn(TimeSpan period);
    method Batch (line 36) | IAuditingConsumerRebusHandlerModuleConfig Batch(int batchSize);
    method Do (line 43) | IAuditingConsumerRebusHandlerModuleConfig Do(Action<IEnumerable<AuditI...

FILE: src/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/MqMessageAuditingStoreRebusHandler.cs
  class MqMessageAuditingStoreRebusHandler (line 12) | public class MqMessageAuditingStoreRebusHandler :
    method MqMessageAuditingStoreRebusHandler (line 19) | static MqMessageAuditingStoreRebusHandler()
    method Handle (line 49) | public async Task Handle(AuditInfoMqMessage message)

FILE: src/Abplus.MqMessages.AuditingConsumerHandler/Configuration/Startup/AuditingConsumerRebusHandlerConfigurationExtensions.cs
  class AuditingConsumerRebusHandlerConfigurationExtensions (line 5) | public static class AuditingConsumerRebusHandlerConfigurationExtensions
    method AuditingConsumer (line 7) | public static IAuditingConsumerRebusHandlerModuleConfig AuditingConsum...

FILE: src/Abplus.MqMessages.AuditingStore/Auditing/AuditingStores/MqMessageAuditingStore.cs
  class MqMessageAuditingStore (line 10) | public class MqMessageAuditingStore : IAuditingStore, ITransientDependency
    method MqMessageAuditingStore (line 14) | public MqMessageAuditingStore()
    method Save (line 22) | public void Save(AuditInfo auditInfo)
    method SaveAsync (line 27) | public async Task SaveAsync(AuditInfo auditInfo)

FILE: src/Abplus.MqMessages.AuditingStore/Auditing/AuditingStores/MqMessageAuditingStoreModule.cs
  class MqMessageAuditingStoreModule (line 6) | [DependsOn(typeof(RebusRabbitMqPublisherCoreModule))]
    method PreInitialize (line 9) | public override void PreInitialize()

FILE: src/Abplus.MqMessages.IndexToES/DateTimeExtensions.cs
  class DateTimeExtensions (line 5) | public static class DateTimeExtensions
    method GetESIndexName (line 7) | public static string GetESIndexName(this DateTime now, string defaultI...

FILE: src/Abplus.MqMessages.IndexToES/IndexFreq.cs
  type IndexFreq (line 6) | public enum IndexFreq

FILE: src/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/MqMessageIndexToESHandlerBase.cs
  class MqMessageIndexToESHandlerBase (line 9) | public abstract class MqMessageIndexToESHandlerBase<TMqMessage> : AbpMqH...
    method MqMessageIndexToESHandlerBase (line 20) | public MqMessageIndexToESHandlerBase(string defaultIndexName, IndexFre...
    method Handle (line 27) | public async Task Handle(TMqMessage message)
    method CustomIndexName (line 35) | public virtual string CustomIndexName()
    method CustomIndexFreq (line 40) | public virtual IndexFreq CustomIndexFreq()

FILE: src/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/MqMessagesT4Register.cs
  class MqMessagesT4Register (line 5) | public static class MqMessagesT4Register

FILE: src/Abplus.MqMessages.RebusCore/MqMessages/Publishers/RebusRabbitMqPublisher.cs
  class RebusRabbitMqPublisher (line 10) | public class RebusRabbitMqPublisher : IMqMessagePublisher
    method RebusRabbitMqPublisher (line 18) | public RebusRabbitMqPublisher(IBus bus)
    method Publish (line 25) | public void Publish(object mqMessages)
    method TryFillSessionInfo (line 34) | private void TryFillSessionInfo(object mqMessages)
    method PublishAsync (line 55) | public async Task PublishAsync(object mqMessages)

FILE: src/Abplus.MqMessages.RebusCore/MqMessages/Publishers/RebusRabbitMqPublisherCoreModule.cs
  class RebusRabbitMqPublisherCoreModule (line 5) | public class RebusRabbitMqPublisherCoreModule : AbpModule
    method PreInitialize (line 7) | public override void PreInitialize()

FILE: src/Abplus.MqMessages.RebusRabbitMqConsumer/Configuration/Startup/RebusRabbitMqConsumerConfigurationExtensions.cs
  class RebusRabbitMqConsumerConfigurationExtensions (line 5) | public static class RebusRabbitMqConsumerConfigurationExtensions
    method UseAbplusRebusRabbitMqConsumer (line 7) | public static IRebusRabbitMqConsumerModuleConfig UseAbplusRebusRabbitM...

FILE: src/Abplus.MqMessages.RebusRabbitMqConsumer/MqMessages/Consumers/IRebusRabbitMqConsumerModuleConfig.cs
  type IRebusRabbitMqConsumerModuleConfig (line 8) | public interface IRebusRabbitMqConsumerModuleConfig
    method Enable (line 75) | IRebusRabbitMqConsumerModuleConfig Enable(bool enabled);
    method ConnectTo (line 81) | IRebusRabbitMqConsumerModuleConfig ConnectTo(string connectString);
    method UseQueue (line 88) | IRebusRabbitMqConsumerModuleConfig UseQueue(string queueName);
    method SetMaxParallelism (line 95) | IRebusRabbitMqConsumerModuleConfig SetMaxParallelism(int maxParallelism);
    method SetNumberOfWorkers (line 102) | IRebusRabbitMqConsumerModuleConfig SetNumberOfWorkers(int numberOfWork...
    method Prefetch (line 109) | IRebusRabbitMqConsumerModuleConfig Prefetch(int count);
    method EnableMessageAuditing (line 116) | IRebusRabbitMqConsumerModuleConfig EnableMessageAuditing(string messag...
    method RegisterHandlerInAssemblys (line 123) | IRebusRabbitMqConsumerModuleConfig RegisterHandlerInAssemblys(params A...
    method UseLogging (line 130) | IRebusRabbitMqConsumerModuleConfig UseLogging(Action<RebusLoggingConfi...
    method UseOptions (line 136) | IRebusRabbitMqConsumerModuleConfig UseOptions(Action<OptionsConfigurer...
    method UseSerializer (line 143) | IRebusRabbitMqConsumerModuleConfig UseSerializer(Action<StandardConfig...

FILE: src/Abplus.MqMessages.RebusRabbitMqConsumer/MqMessages/Consumers/RebusRabbitMqConsumerModule.cs
  class RebusRabbitMqConsumerModule (line 15) | [DependsOn(typeof(RebusRabbitMqPublisherCoreModule))]
    method PreInitialize (line 20) | public override void PreInitialize()
    method Initialize (line 25) | public override void Initialize()
    method PostInitialize (line 30) | public override void PostInitialize()
    method Shutdown (line 92) | public override void Shutdown()

FILE: src/Abplus.MqMessages.RebusRabbitMqConsumer/MqMessages/Consumers/RebusRabbitMqConsumerModuleConfig.cs
  class RebusRabbitMqConsumerModuleConfig (line 10) | public class RebusRabbitMqConsumerModuleConfig : IRebusRabbitMqConsumerM...
    method RebusRabbitMqConsumerModuleConfig (line 12) | public RebusRabbitMqConsumerModuleConfig()
    method ConnectTo (line 46) | public IRebusRabbitMqConsumerModuleConfig ConnectTo(string connectString)
    method Enable (line 52) | public IRebusRabbitMqConsumerModuleConfig Enable(bool enabled)
    method EnableMessageAuditing (line 58) | public IRebusRabbitMqConsumerModuleConfig EnableMessageAuditing(string...
    method Prefetch (line 65) | public IRebusRabbitMqConsumerModuleConfig Prefetch(int count)
    method RegisterHandlerInAssemblys (line 71) | public IRebusRabbitMqConsumerModuleConfig RegisterHandlerInAssemblys(p...
    method SetMaxParallelism (line 77) | public IRebusRabbitMqConsumerModuleConfig SetMaxParallelism(int maxPar...
    method SetNumberOfWorkers (line 83) | public IRebusRabbitMqConsumerModuleConfig SetNumberOfWorkers(int numbe...
    method UseLogging (line 89) | public IRebusRabbitMqConsumerModuleConfig UseLogging(Action<RebusLoggi...
    method UseOptions (line 95) | public IRebusRabbitMqConsumerModuleConfig UseOptions(Action<OptionsCon...
    method UseQueue (line 101) | public IRebusRabbitMqConsumerModuleConfig UseQueue(string queueName)
    method UseSerializer (line 107) | public IRebusRabbitMqConsumerModuleConfig UseSerializer(Action<Standar...

FILE: src/Abplus.MqMessages.RebusRabbitMqPublisher/Configuration/Startup/RebusRabbitMqPublisherConfigurationExtensions.cs
  class RebusRabbitMqPublisherConfigurationExtensions (line 5) | public static class RebusRabbitMqPublisherConfigurationExtensions
    method UseAbplusRebusRabbitMqPublisher (line 7) | public static IRebusRabbitMqPublisherModuleConfig  UseAbplusRebusRabbi...

FILE: src/Abplus.MqMessages.RebusRabbitMqPublisher/MqMessages/Publishers/IRebusRabbitMqPublisherModuleConfig.cs
  type IRebusRabbitMqPublisherModuleConfig (line 6) | public interface IRebusRabbitMqPublisherModuleConfig
    method Enable (line 38) | IRebusRabbitMqPublisherModuleConfig Enable(bool enabled);
    method ConnectTo (line 45) | IRebusRabbitMqPublisherModuleConfig ConnectTo(string connectionString);
    method UseLogging (line 52) | IRebusRabbitMqPublisherModuleConfig UseLogging(Action<RebusLoggingConf...
    method EnableMessageAuditing (line 59) | IRebusRabbitMqPublisherModuleConfig EnableMessageAuditing(string messa...

FILE: src/Abplus.MqMessages.RebusRabbitMqPublisher/MqMessages/Publishers/RebusRabbitMqPublisherModule.cs
  class RebusRabbitMqPublisherModule (line 9) | [DependsOn(typeof(RebusRabbitMqPublisherCoreModule))]
    method PreInitialize (line 14) | public override void PreInitialize()
    method Initialize (line 19) | public override void Initialize()
    method PostInitialize (line 24) | public override void PostInitialize()
    method Shutdown (line 46) | public override void Shutdown()

FILE: src/Abplus.MqMessages.RebusRabbitMqPublisher/MqMessages/Publishers/RebusRabbitMqPublisherModuleConfig.cs
  class RebusRabbitMqPublisherModuleConfig (line 6) | public class RebusRabbitMqPublisherModuleConfig : IRebusRabbitMqPublishe...
    method RebusRabbitMqPublisherModuleConfig (line 8) | public RebusRabbitMqPublisherModuleConfig()
    method ConnectTo (line 23) | public IRebusRabbitMqPublisherModuleConfig ConnectTo(string connection...
    method Enable (line 29) | public IRebusRabbitMqPublisherModuleConfig Enable(bool enabled)
    method EnableMessageAuditing (line 35) | public IRebusRabbitMqPublisherModuleConfig EnableMessageAuditing(strin...
    method UseLogging (line 42) | public IRebusRabbitMqPublisherModuleConfig UseLogging(Action<RebusLogg...

FILE: src/Abplus.MqMessages.RedisStoreMessageTracker/MqMessages/MessageTrackers/RedisStoreMessageTracker.cs
  class RedisStoreMessageTracker (line 8) | public class RedisStoreMessageTracker : IMessageTracker
    method RedisStoreMessageTracker (line 13) | public RedisStoreMessageTracker(ICacheManager cacheManager)
    method HasProcessed (line 18) | public async Task<bool> HasProcessed(string processId)
    method MarkAsProcessed (line 24) | public async Task MarkAsProcessed(string processId)

FILE: src/Abplus.MqMessages.RedisStoreMessageTracker/MqMessages/MessageTrackers/RedisStoreMessageTrackerModule.cs
  class RedisStoreMessageTrackerModule (line 6) | [DependsOn(typeof(AbpRedisCacheModule))]
    method PreInitialize (line 9) | public override void PreInitialize()
    method Initialize (line 14) | public override void Initialize()

FILE: src/Abplus.MqMessages/Configuration/Startup/ExceptionLogInterceptorRegistrar.cs
  class ExceptionLogInterceptorRegistrar (line 9) | public static class ExceptionLogInterceptorRegistrar
    method Initialize (line 11) | public static void Initialize(IIocManager iocManager)
    method Kernel_ComponentRegistered (line 18) | private static void Kernel_ComponentRegistered(string key, IHandler ha...

FILE: src/Abplus.MqMessages/MqMessages/AuditingStores/AuditInfoMqMessage.cs
  class AuditInfoMqMessage (line 5) | public class AuditInfoMqMessage

FILE: src/Abplus.MqMessages/MqMessages/AutoGeneration/DontGenerateMqMessage.cs
  class DontGenerateMqMessage (line 8) | [AttributeUsage(AttributeTargets.Class, Inherited = false)]

FILE: src/Abplus.MqMessages/MqMessages/AutoMapper/AutoEventsMapToMqMessagesHelper.cs
  class AutoEventsMapToMqMessagesHelper (line 8) | public static class AutoEventsMapToMqMessagesHelper
    method CreateEventsToMqMessagesMappings (line 10) | public static void CreateEventsToMqMessagesMappings(this IMapperConfig...

FILE: src/Abplus.MqMessages/MqMessages/Handlers/EventDataPublishHandlerBase.cs
  class EventDataPublishHandlerBase (line 15) | public abstract class EventDataPublishHandlerBase<TEventData, TMqMessage>
    method EventDataPublishHandlerBase (line 26) | public EventDataPublishHandlerBase(IUnitOfWorkManager unitOfWorkManager)
    method HandleEvent (line 33) | public virtual void HandleEvent(TEventData eventData)
    method ConvertEventDataToMqMessage (line 50) | public virtual TMqMessage ConvertEventDataToMqMessage(TEventData event...

FILE: src/Abplus.MqMessages/MqMessages/MqHandlers/AbpMqHandlerBase.cs
  class AbpMqHandlerBase (line 7) | public abstract class AbpMqHandlerBase : AbpServiceBase, ITransientDepen...
    method AbpMqHandlerBase (line 11) | public AbpMqHandlerBase(string localizationSourceName)
    method IsTrueSetting (line 17) | protected async Task<bool> IsTrueSetting(string settingKey)

FILE: src/Abplus.MqMessages/MqMessages/MqHandlers/ExceptionLoggling/ExceptionLogAttribute.cs
  class ExceptionLogAttribute (line 6) | public class ExceptionLogAttribute : Attribute
    method ExceptionLogAttribute (line 32) | public ExceptionLogAttribute(params Type[] exceptionTypes)
    method ExceptionLogAttribute (line 42) | public ExceptionLogAttribute(bool notThrow, params Type[] exceptionTypes)
    method ExceptionLogAttribute (line 53) | public ExceptionLogAttribute(bool logged, LogSeverity logLevel, params...
    method ExceptionLogAttribute (line 65) | public ExceptionLogAttribute(bool logged, LogSeverity logLevel, bool n...

FILE: src/Abplus.MqMessages/MqMessages/MqHandlers/ExceptionLoggling/ExceptionLogHandler.cs
  class ExceptionLogHandler (line 13) | public class ExceptionLogHandler : IAsyncInterceptorHandler
    method ExceptionLogHandler (line 17) | public ExceptionLogHandler()
    method Handle (line 22) | public void Handle(IInvocation invocation)
    method HandleAsync (line 58) | public async Task HandleAsync(IInvocation invocation)
    method HandleAsync (line 95) | public async Task<T> HandleAsync<T>(IInvocation invocation)
    method GetAttributesOfMemberAndDeclaringType (line 134) | private static List<TAttribute> GetAttributesOfMemberAndDeclaringType<...
    method LogException (line 154) | private void LogException(ExceptionLogAttribute attribute, Exception e...

FILE: src/Abplus.MqMessages/MqMessages/MqHandlers/ExceptionLoggling/ExceptionLogInterceptor.cs
  class ExceptionLogInterceptor (line 5) | public class ExceptionLogInterceptor : AsyncHandlingInterceptor
    method ExceptionLogInterceptor (line 7) | public ExceptionLogInterceptor(ExceptionLogHandler handler) : base(han...

FILE: src/Abplus.T4.PermissionsFromJson/Authorization/Builders/BuilderUtils.cs
  class BuilderUtils (line 14) | public static class BuilderUtils
    method Build (line 16) | public static void Build(IPermissionDefinitionContext context, string ...
    method GeneratePermission (line 34) | public static Dictionary<string, List<PermissionConst>> GeneratePermis...
    method GetPermissionJson (line 53) | private static List<PermissionJson> GetPermissionJson(Stream sm)
    method BuildChildrenPermission (line 63) | private static void BuildChildrenPermission(List<PermissionJson> child...
    method BuildPermissionConst (line 79) | private static List<PermissionConst> BuildPermissionConst(List<Permiss...
  class PermissionJson (line 102) | public class PermissionJson
    method PermissionJson (line 104) | public PermissionJson()
    method GetChildren (line 119) | public List<PermissionJson> GetChildren()
    method GetMultiTenancySides (line 157) | public MultiTenancySides GetMultiTenancySides()
  class PermissionConst (line 167) | public class PermissionConst

FILE: src/Abplus/Application/Navigation/MenuItemDefinitionPlugInExtensions.cs
  class MenuItemDefinitionPlugInExtensions (line 7) | public static class MenuItemDefinitionPlugInExtensions
    method GetOrCreatePlugInsRootMenu (line 9) | public static MenuItemDefinition GetOrCreatePlugInsRootMenu(this MenuD...

FILE: src/Abplus/Application/Services/Dto/IHasDateTimeFilterRequest.cs
  type IHasDateTimeFilterRequest (line 5) | public interface IHasDateTimeFilterRequest

FILE: src/Abplus/Application/Services/Dto/IHasKeywordFilterRequest.cs
  type IHasKeywordFilterRequest (line 3) | public interface IHasKeywordFilterRequest

FILE: src/Abplus/Application/Services/Dto/IPaginationResultRequest.cs
  type IPaginationResultRequest (line 3) | public interface IPaginationResultRequest : ISortedResultRequest

FILE: src/Abplus/Application/Services/Dto/PaginationRequestInput.cs
  class PaginationResultRequestInput (line 5) | public class PaginationResultRequestInput : IPaginationResultRequest
    method PaginationResultRequestInput (line 7) | public PaginationResultRequestInput()

FILE: src/Abplus/Currencies/ChineseCentExtension.cs
  class ChineseCentExtension (line 3) | public static class ChineseCentExtension
    method ToYuan (line 5) | public static decimal ToYuan(this int moneyInCent)
    method ToYuanString (line 10) | public static string ToYuanString(this int moneyInCent)

FILE: src/Abplus/Events/Bus/ChangedEventData.cs
  class ChangedEventData (line 3) | public abstract class ChangedEventData<T> : EventData

FILE: src/Abplus/Extensions/DateTimeExtensions.cs
  class DateTimeExtensions (line 8) | public static class DateTimeExtensions
    method ToFullTimeString (line 13) | public static string ToFullTimeString(this DateTime source)
    method ToShortTimeString (line 21) | public static string ToShortTimeString(this DateTime source)
    method ToDateString (line 29) | public static string ToDateString(this DateTime source)

FILE: src/Abplus/Extensions/EnumExtensions.cs
  class EnumExtensions (line 11) | public static class EnumExtensions
    method GetDisplayName (line 13) | public static string GetDisplayName(FieldInfo field)

FILE: src/Abplus/Extensions/GuidExtensions.cs
  class GuidExtensions (line 5) | public static class GuidExtensions
    method ToShortString (line 10) | public static string ToShortString(this Guid source)
    method ToCombGuid (line 22) | public static Guid ToCombGuid(this Guid source)

FILE: src/Abplus/Extensions/IntExtension.cs
  class IntExtension (line 6) | public static class IntExtension
    method ToSkipCount (line 8) | public static int ToSkipCount(this IPaginationResultRequest pagination)
    method ToMaxResultCount (line 15) | public static int ToMaxResultCount(this IPaginationResultRequest pagin...
    method CheckErrors (line 22) | private static void CheckErrors(IPaginationResultRequest pagination)

FILE: src/Abplus/Extensions/NullableDateTimeExtensions.cs
  class NullableDateTimeExtensions (line 5) | public static class NullableDateTimeExtensions
    method ToFullString (line 10) | public static string ToFullString(this DateTime? source)
    method ToShortString (line 18) | public static string ToShortString(this DateTime? source)
    method ToDateString (line 26) | public static string ToDateString(this DateTime? source)

FILE: src/Abplus/Extensions/StringExtensions.cs
  class StringExtensions (line 6) | public static class StringExtensions
    method ToGuid (line 13) | public static Guid ToGuid(this string str)
    method ToGuid (line 24) | public static Guid ToGuid(this string str, string format)
    method ToGuidOrNull (line 42) | public static Guid? ToGuidOrNull(this string str)
    method ToIntOrNull (line 60) | public static int? ToIntOrNull(this string str)
    method Base64ToGuid (line 78) | public static Guid Base64ToGuid(this string str)
    method ToObject (line 100) | public static T ToObject<T>(this string json)

FILE: src/Abplus/IO/IFileStorage.cs
  type IFileStorage (line 7) | public interface IFileStorage : ITransientDependency
    method Save (line 9) | Task<string> Save(Stream source, string fileName, string subPath = null);
    method Save (line 11) | Task<string> Save(byte[] source, string fileName, string subPath = null);
    method Delete (line 13) | Task Delete(string fileName, string subPath = null);
    method ReadAsBytes (line 15) | Task<byte[]> ReadAsBytes(string fileName, string subPath = null);

FILE: src/Abplus/IO/NullFileStorage.cs
  class NullFileStorage (line 6) | public class NullFileStorage : IFileStorage
    method Delete (line 10) | public Task Delete(string fileName, string subPath = null)
    method ReadAsBytes (line 15) | public Task<byte[]> ReadAsBytes(string fileName, string subPath = null)
    method Save (line 20) | public Task<string> Save(Stream source, string fileName, string subPat...
    method Save (line 25) | public Task<string> Save(byte[] source, string fileName, string subPat...

FILE: src/Abplus/Interceptors/AsyncHandlingInterceptor.cs
  class AsyncHandlingInterceptor (line 7) | public abstract class AsyncHandlingInterceptor : IInterceptor
    method AsyncHandlingInterceptor (line 16) | protected AsyncHandlingInterceptor(IAsyncInterceptorHandler handler)
    method Intercept (line 21) | public void Intercept(IInvocation invocation)
    method ExecuteHandleAsyncWithResultUsingReflection (line 41) | private void ExecuteHandleAsyncWithResultUsingReflection(IInvocation i...
    method HandleAsyncWithResult (line 54) | protected virtual async Task<T> HandleAsyncWithResult<T>(IInvocation i...
    method GetDelegateType (line 59) | private MethodType GetDelegateType(IInvocation invocation)
    type MethodType (line 69) | private enum MethodType

FILE: src/Abplus/Interceptors/IAsyncInterceptorHandler.cs
  type IAsyncInterceptorHandler (line 9) | public interface IAsyncInterceptorHandler
    method Handle (line 15) | void Handle(IInvocation invocation);
    method HandleAsync (line 22) | Task HandleAsync(IInvocation invocation);
    method HandleAsync (line 30) | Task<T> HandleAsync<T>(IInvocation invocation);

FILE: src/Abplus/Json/LargeNumJsonConverter.cs
  class LargeNumJsonConverter (line 10) | public class LargeNumJsonConverter : JsonConverter
    method WriteJson (line 15) | public override void WriteJson(JsonWriter writer, object value, JsonSe...
    method ReadJson (line 28) | public override object ReadJson(JsonReader reader, Type objectType, ob...
    method CanConvert (line 42) | public override bool CanConvert(Type objectType)

FILE: src/Abplus/MqMessages/IMqMessagePublisher.cs
  type IMqMessagePublisher (line 8) | public interface IMqMessagePublisher : ITransientDependency
    method Publish (line 14) | void Publish(object mqMessages);
    method PublishAsync (line 21) | Task PublishAsync(object mqMessages);

FILE: src/Abplus/MqMessages/MessageTrackers/DefaultInMemoryMessageTracker.cs
  class DefaultInMemoryMessageTracker (line 7) | public class DefaultInMemoryMessageTracker : IMessageTracker
    method DefaultInMemoryMessageTracker (line 11) | static DefaultInMemoryMessageTracker()
    method MarkAsProcessed (line 18) | public Task MarkAsProcessed(string processId)
    method HasProcessed (line 24) | public Task<bool> HasProcessed(string processId)

FILE: src/Abplus/MqMessages/MessageTrackers/IMessageTracker.cs
  type IMessageTracker (line 5) | public interface IMessageTracker
    method HasProcessed (line 12) | Task<bool> HasProcessed(string processId);
    method MarkAsProcessed (line 19) | Task MarkAsProcessed(string processId);

FILE: src/Abplus/MqMessages/NullMqMessagePublisher.cs
  class NullMqMessagePublisher (line 8) | public class NullMqMessagePublisher : IMqMessagePublisher
    method PublishAsync (line 20) | public Task PublishAsync(object mqMessages)
    method Publish (line 30) | public void Publish(object mqMessages)

FILE: src/Abplus/PlugIns/IPlugInAreaRegistration.cs
  type IPlugInAreaRegistration (line 3) | public interface IPlugInAreaRegistration

FILE: src/Abplus/PlugIns/IPlugInAuthorizationProvider.cs
  type IPlugInAuthorizationProvider (line 3) | public interface IPlugInAuthorizationProvider

FILE: src/Abplus/PlugIns/IPlugInNavigationProvider.cs
  type IPlugInNavigationProvider (line 3) | public interface IPlugInNavigationProvider

FILE: src/Abplus/QrCode/IQrCodeScannedRealTimeNotifier.cs
  type IQrCodeScannedRealTimeNotifier (line 5) | public interface IQrCodeScannedRealTimeNotifier
    method Notify (line 7) | Task Notify(string scannerIdentifier, string connectionId, object prop...

FILE: src/Abplus/Reservations/Events/ReservationCancelledEventData.cs
  class ReservationCancelledEventData (line 6) | public abstract class ReservationCancelledEventData : ReservationEventDa...

FILE: src/Abplus/Reservations/Events/ReservationEventDataBase.cs
  class ReservationEventDataBase (line 9) | public abstract class ReservationEventDataBase : EventData

FILE: src/Abplus/Reservations/Events/ReservationSuccessEventData.cs
  class ReservationSuccessEventData (line 6) | public abstract class ReservationSuccessEventData : ReservationEventData...

FILE: src/Abplus/Reservations/IReservation.cs
  type IReservation (line 9) | public interface IReservation
    method IsConflict (line 36) | bool IsConflict(IReservation reservation);
    method IsConflict (line 43) | bool IsConflict(IEnumerable<IReservation> reservations);

FILE: src/Abplus/Reservations/IReservationBody.cs
  type IReservationBody (line 10) | public interface IReservationBody<T> where T : IReservation
    method Reserve (line 29) | T Reserve(string subject, DateTime from, DateTime to);
    method CancelReservation (line 36) | T CancelReservation(string reservationCode);

FILE: src/Abplus/Reservations/ReservationBase.cs
  class ReservationBase (line 13) | public abstract class ReservationBase : CreationAuditedEntity<Guid>, IRe...
    method ReservationBase (line 20) | protected ReservationBase() { }
    method ReservationBase (line 22) | public ReservationBase(string reservationSubject, TimeRange reservatio...
    method SetReservationCode (line 48) | protected virtual void SetReservationCode(string resourceCode)
    method IsConflict (line 80) | public virtual bool IsConflict(IReservation reservation)
    method IsConflict (line 90) | public virtual bool IsConflict(IEnumerable<IReservation> reservations)...

FILE: src/Abplus/Reservations/ReservationBodyBase.cs
  class ReservationBodyBase (line 16) | public abstract class ReservationBodyBase<TReservation, TPrimary> : Aggr...
    method CancelReservation (line 50) | public virtual TReservation CancelReservation(string reservationCode)
    method Reserve (line 74) | public virtual TReservation Reserve(string subject, DateTime from, Dat...

FILE: src/Abplus/Runtime/OS/EnvDescription.cs
  class EnvDescription (line 3) | public class EnvDescription

FILE: src/Abplus/Runtime/OS/EnvironmentHelper.cs
  class EnvironmentHelper (line 5) | public static class EnvironmentHelper
    method GetRuntimeInformation (line 7) | public static EnvDescription GetRuntimeInformation()

FILE: src/Abplus/TimeRanges/TimeRange.cs
  class TimeRange (line 7) | public class TimeRange : ValueObject
    method TimeRange (line 9) | protected TimeRange() { }
    method TimeRange (line 11) | public TimeRange(DateTime from, DateTime to)
    method IsIncluding (line 39) | public bool IsIncluding(TimeRange that)
    method IsIntersect (line 51) | public bool IsIntersect(TimeRange that)
    method IsIntersect (line 65) | public bool IsIntersect(ICollection<TimeRange> those)
    method GetAtomicValues (line 79) | protected override IEnumerable<object> GetAtomicValues()

FILE: src/Samples/AuditingConsumer/Sample.AuditingConsumerHandler/Program.cs
  class Program (line 5) | class Program
    method Main (line 7) | static void Main(string[] args)

FILE: src/Samples/AuditingConsumer/Sample.AuditingConsumerHandler/SampleAuditingConsumerHandlerBootstrap.cs
  class SampleAuditingConsumerHandlerBootstrap (line 5) | public class SampleAuditingConsumerHandlerBootstrap
    method Start (line 9) | public void Start()
    method Stop (line 15) | public void Stop()

FILE: src/Samples/AuditingConsumer/Sample.AuditingConsumerHandler/SampleAuditingConsumerHandlerModule.cs
  class SampleAuditingConsumerHandlerModule (line 13) | [DependsOn(
    method PreInitialize (line 18) | public override void PreInitialize()
    method Initialize (line 42) | public override void Initialize()
    method PostInitialize (line 47) | public override void PostInitialize()

FILE: src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/Application/ITestAuditingStoreAppService.cs
  type ITestAuditingStoreAppService (line 6) | public interface ITestAuditingStoreAppService : IApplicationService
    method TestAuditing (line 8) | Task TestAuditing(TestAuditingInput input);

FILE: src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/Application/TestAuditingInput.cs
  class TestAuditingInput (line 3) | public class TestAuditingInput

FILE: src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/Application/TestAuditingStoreAppService.cs
  class TestAuditingStoreAppService (line 7) | public class TestAuditingStoreAppService : ITestAuditingStoreAppService
    method TestAuditing (line 9) | public Task TestAuditing(TestAuditingInput input)

FILE: src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/BackgroudWorker/TestWorker.cs
  class TestWorker (line 10) | public class TestWorker : PeriodicBackgroundWorkerBase, ISingletonDepend...
    method TestWorker (line 13) | public TestWorker(AbpTimer timer, ITestAuditingStoreAppService testAud...
    method DoWork (line 21) | protected override void DoWork()

FILE: src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/Program.cs
  class Program (line 5) | class Program
    method Main (line 7) | static void Main(string[] args)

FILE: src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/SampleMqMessageAuditingStoreBootstrap.cs
  class SampleMqMessageAuditingStoreBootstrap (line 5) | public class SampleMqMessageAuditingStoreBootstrap
    method Start (line 9) | public void Start()
    method Stop (line 15) | public void Stop()

FILE: src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/SampleMqMessageAuditingStoreModule.cs
  class SampleMqMessageAuditingStoreModule (line 11) | [DependsOn(
    method PreInitialize (line 16) | public override void PreInitialize()
    method Initialize (line 29) | public override void Initialize()
    method PostInitialize (line 34) | public override void PostInitialize()

FILE: src/Samples/FileStorage/Sample.AliyunOSSStorage/BackgroundWorker/TestWorker.cs
  class TestWorker (line 11) | public class TestWorker : PeriodicBackgroundWorkerBase, ISingletonDepend...
    method TestWorker (line 15) | public TestWorker(AbpTimer timer, IFileStorage fileStorage)
    method DoWork (line 24) | protected override void DoWork()

FILE: src/Samples/FileStorage/Sample.AliyunOSSStorage/Program.cs
  class Program (line 5) | class Program
    method Main (line 7) | static void Main(string[] args)

FILE: src/Samples/FileStorage/Sample.AliyunOSSStorage/SampleAliyunOSSStorageBootstrap.cs
  class SampleAliyunOSSStorageBootstrap (line 5) | internal class SampleAliyunOSSStorageBootstrap
    method Start (line 9) | public void Start()
    method Stop (line 15) | public void Stop()

FILE: src/Samples/FileStorage/Sample.AliyunOSSStorage/SampleAliyunOSSStorageModule.cs
  class SampleAliyunOSSStorageModule (line 10) | [DependsOn(typeof(AliyunOSSStorageModule))]
    method PreInitialize (line 13) | public override void PreInitialize()
    method Initialize (line 23) | public override void Initialize()
    method PostInitialize (line 28) | public override void PostInitialize()

FILE: src/Samples/FileStorage/Sample.AzureBlobStorage/BackgroundWorker/TestWorker.cs
  class TestWorker (line 11) | public class TestWorker : PeriodicBackgroundWorkerBase, ISingletonDepend...
    method TestWorker (line 15) | public TestWorker(AbpTimer timer, IFileStorage fileStorage)
    method DoWork (line 24) | protected override void DoWork()

FILE: src/Samples/FileStorage/Sample.AzureBlobStorage/Program.cs
  class Program (line 5) | class Program
    method Main (line 7) | static void Main(string[] args)

FILE: src/Samples/FileStorage/Sample.AzureBlobStorage/SampleAzureBlobStorageBootstrap.cs
  class SampleAzureBlobStorageBootstrap (line 5) | internal class SampleAzureBlobStorageBootstrap
    method Start (line 9) | public void Start()
    method Stop (line 15) | public void Stop()

FILE: src/Samples/FileStorage/Sample.AzureBlobStorage/SampleAzureBlobStorageModule.cs
  class SampleAzureBlobStorageModule (line 10) | [DependsOn(typeof(AzureBlobFileStorageModule))]
    method PreInitialize (line 13) | public override void PreInitialize()
    method Initialize (line 26) | public override void Initialize()
    method PostInitialize (line 31) | public override void PostInitialize()

FILE: src/Samples/FileStorage/Sample.LocalFileSystem/Program.cs
  class Program (line 5) | class Program
    method Main (line 7) | static void Main(string[] args)

FILE: src/Samples/FileStorage/Sample.LocalFileSystem/SampleLocalFileSystemBootstrap.cs
  class SampleLocalFileSystemBootstrap (line 5) | internal class SampleLocalFileSystemBootstrap
    method Start (line 9) | public void Start()
    method Stop (line 15) | public void Stop()

FILE: src/Samples/FileStorage/Sample.LocalFileSystem/SampleLocalFileSystemModule.cs
  class SampleLocalFileSystemModule (line 7) | [DependsOn(typeof(LocalFileSystemStorageModule))]
    method PreInitialize (line 10) | public override void PreInitialize()
    method Initialize (line 15) | public override void Initialize()
    method PostInitialize (line 20) | public override void PostInitialize()

FILE: src/Samples/Sample.DotNetCoreConsumerHost/Handlers/TestHandler.cs
  class TestHandler (line 8) | public class TestHandler : IHandleMessages<TestMessage>
    method TestHandler (line 12) | public TestHandler()
    method Handle (line 18) | public async Task Handle(TestMessage message)

FILE: src/Samples/Sample.DotNetCoreConsumerHost/Program.cs
  class Program (line 5) | class Program
    method Main (line 7) | static void Main(string[] args)

FILE: src/Samples/Sample.DotNetCoreConsumerHost/SampleConsumerHostBootstrap.cs
  class SampleConsumerHostBootstrap (line 5) | public class SampleConsumerHostBootstrap
    method Start (line 9) | public void Start()
    method Stop (line 15) | public void Stop()

FILE: src/Samples/Sample.DotNetCoreConsumerHost/SampleConsumerHostModule.cs
  class SampleConsumerHostModule (line 8) | [DependsOn(typeof(RebusRabbitMqConsumerModule))]
    method PreInitialize (line 11) | public override void PreInitialize()
    method Initialize (line 21) | public override void Initialize()
    method PostInitialize (line 26) | public override void PostInitialize()

FILE: src/Samples/Sample.DotNetCorePublisherHost/BackgroundWorker/TestWorker.cs
  class TestWorker (line 9) | public class TestWorker : PeriodicBackgroundWorkerBase, ISingletonDepend...
    method TestWorker (line 13) | public TestWorker(AbpTimer timer, IMqMessagePublisher publisher)
    method DoWork (line 21) | protected override void DoWork()

FILE: src/Samples/Sample.DotNetCorePublisherHost/Program.cs
  class Program (line 5) | class Program
    method Main (line 7) | static void Main()

FILE: src/Samples/Sample.DotNetCorePublisherHost/SamplePublisherHostBootstrap.cs
  class SamplePublisherHostBootstrap (line 5) | public class SamplePublisherHostBootstrap
    method Start (line 9) | public void Start()
    method Stop (line 15) | public void Stop()

FILE: src/Samples/Sample.DotNetCorePublisherHost/SamplePublisherHostModule.cs
  class SamplePublisherHostModule (line 10) | [DependsOn(typeof(RebusRabbitMqPublisherModule))]
    method PreInitialize (line 13) | public override void PreInitialize()
    method Initialize (line 22) | public override void Initialize()
    method PostInitialize (line 27) | public override void PostInitialize()

FILE: src/Samples/Sample.DotNetFxConsumerHost/DotNetFxConsumerHostBootstrap.cs
  class DotNetFxConsumerHostBootstrap (line 5) | public class DotNetFxConsumerHostBootstrap
    method Start (line 9) | public void Start()
    method Stop (line 14) | public void Stop()

FILE: src/Samples/Sample.DotNetFxConsumerHost/DotNetFxConsumerHostModule.cs
  class DotNetFxConsumerHostModule (line 10) | [DependsOn(typeof(RebusRabbitMqConsumerModule))]
    method PreInitialize (line 13) | public override void PreInitialize()
    method Initialize (line 23) | public override void Initialize()
    method PostInitialize (line 28) | public override void PostInitialize()

FILE: src/Samples/Sample.DotNetFxConsumerHost/Handlers/TestHandler.cs
  class TestHandler (line 8) | public class TestHandler : IHandleMessages<TestMessage>
    method TestHandler (line 12) | public TestHandler()
    method Handle (line 18) | public async Task Handle(TestMessage message)

FILE: src/Samples/Sample.DotNetFxConsumerHost/Program.cs
  class Program (line 6) | class Program
    method Main (line 8) | static int Main()

FILE: src/Samples/Sample.DotNetFxPublisherHost/BackgroundWorker/TestWorker.cs
  class TestWorker (line 9) | public class TestWorker : PeriodicBackgroundWorkerBase, ISingletonDepend...
    method TestWorker (line 13) | public TestWorker(AbpTimer timer, IMqMessagePublisher publisher)
    method DoWork (line 21) | protected override void DoWork()

FILE: src/Samples/Sample.DotNetFxPublisherHost/DotNetFxPublisherHostBootstrap.cs
  class DotNetFxPublisherHostBootstrap (line 5) | public class DotNetFxPublisherHostBootstrap
    method Start (line 9) | public void Start()
    method Stop (line 14) | public void Stop()

FILE: src/Samples/Sample.DotNetFxPublisherHost/DotNetFxPublisherHostModule.cs
  class DotNetFxPublisherHostModule (line 13) | [DependsOn(typeof(RebusRabbitMqPublisherModule))]
    method PreInitialize (line 16) | public override void PreInitialize()
    method Initialize (line 25) | public override void Initialize()
    method PostInitialize (line 30) | public override void PostInitialize()

FILE: src/Samples/Sample.DotNetFxPublisherHost/Program.cs
  class Program (line 6) | class Program
    method Main (line 8) | static int Main()

FILE: src/Samples/Sample.MqMessages/TestMessage.cs
  class TestMessage (line 5) | public class TestMessage

FILE: src2/Abplus.Common/Application/Services/Dto/IPagedQueryInput.cs
  type IPagedQueryInput (line 3) | public interface IPagedQueryInput : IPagedResultRequest, ISortedResultRe...

FILE: src2/Abplus.Common/Application/Services/Dto/PagedQueryInput.cs
  class PagedQueryInput (line 6) | public class PagedQueryInput : IPagedQueryInput
    method PagedQueryInput (line 21) | public PagedQueryInput()

FILE: src2/Abplus.Common/Linq/Extensions/IQueryableExtension.cs
  class IQueryableExtension (line 18) | public static class IQueryableExtension
    method ApplySorting (line 23) | public static IQueryable<T> ApplySorting<T>(this IQueryable<T> query, ...
    method ApplyPaging (line 35) | public static IQueryable<T> ApplyPaging<T>(this IQueryable<T> query, I...
    method ApplySortingAndPaging (line 47) | public static IQueryable<T> ApplySortingAndPaging<T>(this IQueryable<T...
    method ProjectTo (line 58) | public static IQueryable<TDto> ProjectTo<TSource, TDto>(this IQueryabl...
    method ToListResultAsync (line 71) | public static async Task<ListResultDto<TDto>> ToListResultAsync<TSourc...
    method ToListResult (line 93) | public static ListResultDto<TDto> ToListResult<TSource, TDto>(this IQu...
    method ToPagedResultAsync (line 108) | public static async Task<PagedResultDto<TDto>> ToPagedResultAsync<TSou...
    method ToPagedResult (line 138) | public static PagedResultDto<TDto> ToPagedResult<TSource, TDto>(this I...

FILE: src2/Abplus.EntityFramework/EntityFramework/DbContextUtils.cs
  class DbContextUtils (line 9) | public static class DbContextUtils
    method WarmUp (line 11) | public static void WarmUp<TContext>() where TContext : DbContext, new()

FILE: src2/Abplus.EntityFramework/EntityFramework/DbModelBuilderExtensions.cs
  class DbModelBuilderExtensions (line 8) | public static class DbModelBuilderExtensions
    method AutoRegisterTypeConfigurations (line 10) | public static void AutoRegisterTypeConfigurations(this DbModelBuilder ...

FILE: src2/Abplus.Events.Producer/Events/Producer/AbpEventsProducerModule.cs
  class AbpEventsProducerModule (line 6) | [DependsOn(typeof(AbpKernelModule))]
    method Initialize (line 9) | public override void Initialize()

FILE: src2/Abplus.Events.Producer/Events/Producer/Handler/PublishAllEventsHandler.cs
  class PublishAllEventsHandler (line 8) | public class PublishAllEventsHandler : IEventHandler<EventData>, ITransi...
    method PublishAllEventsHandler (line 13) | public PublishAllEventsHandler(IUnitOfWorkManager unitOfWorkManager)
    method HandleEvent (line 19) | public void HandleEvent(EventData eventData)

FILE: src2/Abplus.Events.Producer/Events/Producer/IProducer.cs
  type IProducer (line 6) | [Obsolete("不推荐直接将EventData发布到消息队列,请使用Abp.MqMessages.IMqMessagePublisher"...
    method Publish (line 9) | void Publish(object events);

FILE: src2/Abplus.Events.Producer/Events/Producer/NullProducer.cs
  class NullProducer (line 4) | public class NullProducer : IProducer
    method Publish (line 9) | public void Publish(object events)

FILE: src2/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/AuditingConsumerRebusHandlerModule.cs
  class AuditingConsumerRebusHandlerModule (line 11) | public class AuditingConsumerRebusHandlerModule : AbpModule
    method PreInitialize (line 13) | public override void PreInitialize()
    method Initialize (line 18) | public override void Initialize()
    method PostInitialize (line 23) | public override void PostInitialize()
    method Shutdown (line 28) | public override void Shutdown()

FILE: src2/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/AuditingConsumerRebusHandlerModuleConfig.cs
  class AuditingConsumerRebusHandlerModuleConfig (line 9) | public class AuditingConsumerRebusHandlerModuleConfig : IAuditingConsume...
    method AuditingConsumerRebusHandlerModuleConfig (line 11) | public AuditingConsumerRebusHandlerModuleConfig()

FILE: src2/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/IAuditingConsumerRebusHandlerModuleConfig.cs
  type IAuditingConsumerRebusHandlerModuleConfig (line 9) | public interface IAuditingConsumerRebusHandlerModuleConfig

FILE: src2/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/MqMessageAuditingStoreRebusHandler.cs
  class MqMessageAuditingStoreRebusHandler (line 11) | public class MqMessageAuditingStoreRebusHandler :
    method MqMessageAuditingStoreRebusHandler (line 18) | static MqMessageAuditingStoreRebusHandler()
    method Handle (line 48) | public async Task Handle(AuditInfoMqMessage message)

FILE: src2/Abplus.MqMessages.AuditingConsumerHandler/Configuration/Startup/AuditingConsumerRebusHandlerConfigurationExtensions.cs
  class AuditingConsumerRebusHandlerConfigurationExtensions (line 9) | public static class AuditingConsumerRebusHandlerConfigurationExtensions

FILE: src2/Abplus.MqMessages.AuditingStore/Auditing/AuditingStores/AuditInfoMqMessage.cs
  class AuditInfoMqMessage (line 5) | public class AuditInfoMqMessage

FILE: src2/Abplus.MqMessages.AuditingStore/Auditing/AuditingStores/MqMessageAuditingStore.cs
  class MqMessageAuditingStore (line 8) | public class MqMessageAuditingStore : IAuditingStore, ITransientDependency
    method MqMessageAuditingStore (line 12) | public MqMessageAuditingStore()
    method SaveAsync (line 20) | public async Task SaveAsync(AuditInfo auditInfo)

FILE: src2/Abplus.MqMessages.AuditingStore/Auditing/AuditingStores/MqMessageAuditingStoreModule.cs
  class MqMessageAuditingStoreModule (line 6) | [DependsOn(typeof(RebusRabbitMqPublisherCoreModule))]
    method PreInitialize (line 9) | public override void PreInitialize()

FILE: src2/Abplus.MqMessages.IndexToES/DateTimeExtensions.cs
  class DateTimeExtensions (line 5) | public static class DateTimeExtensions
    method GetESIndexName (line 7) | public static string GetESIndexName(this DateTime now, string defaultI...

FILE: src2/Abplus.MqMessages.IndexToES/IndexFreq.cs
  type IndexFreq (line 6) | public enum IndexFreq

FILE: src2/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/MqMessageIndexToESHandlerBase.cs
  class MqMessageIndexToESHandlerBase (line 9) | public abstract class MqMessageIndexToESHandlerBase<TMqMessage> : AbpMqH...
    method MqMessageIndexToESHandlerBase (line 20) | public MqMessageIndexToESHandlerBase(string defaultIndexName, IndexFre...
    method Handle (line 27) | public async Task Handle(TMqMessage message)
    method CustomIndexName (line 35) | public virtual string CustomIndexName()
    method CustomIndexFreq (line 40) | public virtual IndexFreq CustomIndexFreq()

FILE: src2/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/MqMessagesT4Register.cs
  class MqMessagesT4Register (line 5) | public static class MqMessagesT4Register

FILE: src2/Abplus.MqMessages.RebusConsumer/Configuration/Startup/RebusRabbitMqConsumerConfigurationExtensions.cs
  class RebusRabbitMqConsumerConfigurationExtensions (line 5) | public static class RebusRabbitMqConsumerConfigurationExtensions
    method UseAbplusRebusRabbitMqConsumer (line 7) | public static IRebusRabbitMqConsumerModuleConfig UseAbplusRebusRabbitM...

FILE: src2/Abplus.MqMessages.RebusConsumer/MqMessages/Consumers/IRebusRabbitMqConsumerModuleConfig.cs
  type IRebusRabbitMqConsumerModuleConfig (line 8) | public interface IRebusRabbitMqConsumerModuleConfig
    method Enable (line 70) | IRebusRabbitMqConsumerModuleConfig Enable(bool enabled);
    method ConnectTo (line 76) | IRebusRabbitMqConsumerModuleConfig ConnectTo(string connectString);
    method UseQueue (line 83) | IRebusRabbitMqConsumerModuleConfig UseQueue(string queueName);
    method SetMaxParallelism (line 90) | IRebusRabbitMqConsumerModuleConfig SetMaxParallelism(int maxParallelism);
    method SetNumberOfWorkers (line 97) | IRebusRabbitMqConsumerModuleConfig SetNumberOfWorkers(int numberOfWork...
    method EnableMessageAuditing (line 104) | IRebusRabbitMqConsumerModuleConfig EnableMessageAuditing(string messag...
    method RegisterHandlerInAssemblys (line 111) | IRebusRabbitMqConsumerModuleConfig RegisterHandlerInAssemblys(params A...
    method UseLogging (line 118) | IRebusRabbitMqConsumerModuleConfig UseLogging(Action<RebusLoggingConfi...
    method UseOptions (line 124) | IRebusRabbitMqConsumerModuleConfig UseOptions(Action<OptionsConfigurer...
    method UseSerializer (line 131) | IRebusRabbitMqConsumerModuleConfig UseSerializer(Action<StandardConfig...

FILE: src2/Abplus.MqMessages.RebusConsumer/MqMessages/Consumers/RebusRabbitMqConsumerModule.cs
  class RebusRabbitMqConsumerModule (line 15) | [DependsOn(typeof(RebusRabbitMqPublisherCoreModule))]
    method PreInitialize (line 20) | public override void PreInitialize()
    method Initialize (line 25) | public override void Initialize()
    method PostInitialize (line 30) | public override void PostInitialize()
    method Shutdown (line 88) | public override void Shutdown()

FILE: src2/Abplus.MqMessages.RebusConsumer/MqMessages/Consumers/RebusRabbitMqConsumerModuleConfig.cs
  class RebusRabbitMqConsumerModuleConfig (line 10) | public class RebusRabbitMqConsumerModuleConfig : IRebusRabbitMqConsumerM...
    method RebusRabbitMqConsumerModuleConfig (line 12) | public RebusRabbitMqConsumerModuleConfig()
    method ConnectTo (line 43) | public IRebusRabbitMqConsumerModuleConfig ConnectTo(string connectString)
    method Enable (line 49) | public IRebusRabbitMqConsumerModuleConfig Enable(bool enabled)
    method EnableMessageAuditing (line 55) | public IRebusRabbitMqConsumerModuleConfig EnableMessageAuditing(string...
    method RegisterHandlerInAssemblys (line 62) | public IRebusRabbitMqConsumerModuleConfig RegisterHandlerInAssemblys(p...
    method SetMaxParallelism (line 68) | public IRebusRabbitMqConsumerModuleConfig SetMaxParallelism(int maxPar...
    method SetNumberOfWorkers (line 74) | public IRebusRabbitMqConsumerModuleConfig SetNumberOfWorkers(int numbe...
    method UseLogging (line 80) | public IRebusRabbitMqConsumerModuleConfig UseLogging(Action<RebusLoggi...
    method UseOptions (line 86) | public IRebusRabbitMqConsumerModuleConfig UseOptions(Action<OptionsCon...
    method UseQueue (line 92) | public IRebusRabbitMqConsumerModuleConfig UseQueue(string queueName)
    method UseSerializer (line 98) | public IRebusRabbitMqConsumerModuleConfig UseSerializer(Action<Standar...

FILE: src2/Abplus.MqMessages.RebusCore/MqMessages/Publishers/RebusRabbitMqPublisher.cs
  class RebusRabbitMqPublisher (line 10) | public class RebusRabbitMqPublisher : IMqMessagePublisher
    method RebusRabbitMqPublisher (line 18) | public RebusRabbitMqPublisher(IBus bus)
    method Publish (line 25) | public void Publish(object mqMessages)
    method TryFillSessionInfo (line 34) | private void TryFillSessionInfo(object mqMessages)
    method PublishAsync (line 55) | public async Task PublishAsync(object mqMessages)

FILE: src2/Abplus.MqMessages.RebusCore/MqMessages/Publishers/RebusRabbitMqPublisherCoreModule.cs
  class RebusRabbitMqPublisherCoreModule (line 5) | public class RebusRabbitMqPublisherCoreModule : AbpModule
    method PreInitialize (line 7) | public override void PreInitialize()

FILE: src2/Abplus.MqMessages.RebusPublisher/Configuration/Startup/RebusRabbitMqPublisherConfigurationExtensions.cs
  class RebusRabbitMqPublisherConfigurationExtensions (line 5) | public static class RebusRabbitMqPublisherConfigurationExtensions
    method UseAbplusRebusRabbitMqPublisher (line 7) | public static IRebusRabbitMqPublisherModuleConfig  UseAbplusRebusRabbi...

FILE: src2/Abplus.MqMessages.RebusPublisher/MqMessages/Publishers/IRebusRabbitMqPublisherModuleConfig.cs
  type IRebusRabbitMqPublisherModuleConfig (line 6) | public interface IRebusRabbitMqPublisherModuleConfig
    method Enable (line 38) | IRebusRabbitMqPublisherModuleConfig Enable(bool enabled);
    method ConnectionTo (line 45) | IRebusRabbitMqPublisherModuleConfig ConnectionTo(string connectionStri...
    method UseLogging (line 52) | IRebusRabbitMqPublisherModuleConfig UseLogging(Action<RebusLoggingConf...
    method EnableMessageAuditing (line 59) | IRebusRabbitMqPublisherModuleConfig EnableMessageAuditing(string messa...

FILE: src2/Abplus.MqMessages.RebusPublisher/MqMessages/Publishers/RebusRabbitMqPublisherModule.cs
  class RebusRabbitMqPublisherModule (line 9) | [DependsOn(typeof(RebusRabbitMqPublisherCoreModule))]
    method PreInitialize (line 14) | public override void PreInitialize()
    method Initialize (line 19) | public override void Initialize()
    method PostInitialize (line 24) | public override void PostInitialize()
    method Shutdown (line 45) | public override void Shutdown()

FILE: src2/Abplus.MqMessages.RebusPublisher/MqMessages/Publishers/RebusRabbitMqPublisherModuleConfig.cs
  class RebusRabbitMqPublisherModuleConfig (line 6) | public class RebusRabbitMqPublisherModuleConfig : IRebusRabbitMqPublishe...
    method RebusRabbitMqPublisherModuleConfig (line 8) | public RebusRabbitMqPublisherModuleConfig()
    method ConnectionTo (line 23) | public IRebusRabbitMqPublisherModuleConfig ConnectionTo(string connect...
    method Enable (line 29) | public IRebusRabbitMqPublisherModuleConfig Enable(bool enabled)
    method EnableMessageAuditing (line 35) | public IRebusRabbitMqPublisherModuleConfig EnableMessageAuditing(strin...
    method UseLogging (line 42) | public IRebusRabbitMqPublisherModuleConfig UseLogging(Action<RebusLogg...

FILE: src2/Abplus.MqMessages.RedisStoreMessageTracker/MqMessages/MessageTrackers/RedisStoreMessageTracker.cs
  class RedisStoreMessageTracker (line 8) | public class RedisStoreMessageTracker : IMessageTracker
    method RedisStoreMessageTracker (line 13) | public RedisStoreMessageTracker(ICacheManager cacheManager)
    method HasProcessed (line 18) | public async Task<bool> HasProcessed(string processId)
    method MarkAsProcessed (line 24) | public async Task MarkAsProcessed(string processId)

FILE: src2/Abplus.MqMessages.RedisStoreMessageTracker/MqMessages/MessageTrackers/RedisStoreMessageTrackerModule.cs
  class RedisStoreMessageTrackerModule (line 6) | [DependsOn(typeof(AbpRedisCacheModule))]
    method PreInitialize (line 9) | public override void PreInitialize()
    method Initialize (line 14) | public override void Initialize()

FILE: src2/Abplus.MqMessages/Configuration/Startup/ExceptionLogInterceptorRegistrar.cs
  class ExceptionLogInterceptorRegistrar (line 9) | public static class ExceptionLogInterceptorRegistrar
    method Initialize (line 11) | public static void Initialize(IIocManager iocManager)
    method Kernel_ComponentRegistered (line 18) | private static void Kernel_ComponentRegistered(string key, IHandler ha...

FILE: src2/Abplus.MqMessages/MqMessages/AutoMapper/AutoEventsMapToMqMessagesHelper.cs
  class AutoEventsMapToMqMessagesHelper (line 8) | public static class AutoEventsMapToMqMessagesHelper
    method CreateEventsToMqMessagesMappings (line 10) | public static void CreateEventsToMqMessagesMappings(this IMapperConfig...

FILE: src2/Abplus.MqMessages/MqMessages/Handlers/EventDataPublishHandlerBase.cs
  class EventDataPublishHandlerBase (line 15) | public abstract class EventDataPublishHandlerBase<TEventData, TMqMessage>
    method EventDataPublishHandlerBase (line 26) | public EventDataPublishHandlerBase(IUnitOfWorkManager unitOfWorkManager)
    method HandleEvent (line 33) | public virtual void HandleEvent(TEventData eventData)
    method ConvertEventDataToMqMessage (line 50) | public virtual TMqMessage ConvertEventDataToMqMessage(TEventData event...

FILE: src2/Abplus.MqMessages/MqMessages/MqHandlers/AbpMqHandlerBase.cs
  class AbpMqHandlerBase (line 7) | public abstract class AbpMqHandlerBase : AbpServiceBase, ITransientDepen...
    method AbpMqHandlerBase (line 11) | public AbpMqHandlerBase(string localizationSourceName)
    method IsTrueSetting (line 17) | protected async Task<bool> IsTrueSetting(string settingKey)

FILE: src2/Abplus.MqMessages/MqMessages/MqHandlers/ExceptionLoggling/ExceptionLogAttribute.cs
  class ExceptionLogAttribute (line 6) | public class ExceptionLogAttribute : Attribute
    method ExceptionLogAttribute (line 32) | public ExceptionLogAttribute(params Type[] exceptionTypes)
    method ExceptionLogAttribute (line 42) | public ExceptionLogAttribute(bool notThrow, params Type[] exceptionTypes)
    method ExceptionLogAttribute (line 53) | public ExceptionLogAttribute(bool logged, LogSeverity logLevel, params...
    method ExceptionLogAttribute (line 65) | public ExceptionLogAttribute(bool logged, LogSeverity logLevel, bool n...

FILE: src2/Abplus.MqMessages/MqMessages/MqHandlers/ExceptionLoggling/ExceptionLogHandler.cs
  class ExceptionLogHandler (line 13) | public class ExceptionLogHandler : IAsyncInterceptorHandler
    method ExceptionLogHandler (line 17) | public ExceptionLogHandler()
    method Handle (line 22) | public void Handle(IInvocation invocation)
    method HandleAsync (line 58) | public async Task HandleAsync(IInvocation invocation)
    method HandleAsync (line 95) | public async Task<T> HandleAsync<T>(IInvocation invocation)
    method GetAttributesOfMemberAndDeclaringType (line 134) | private static List<TAttribute> GetAttributesOfMemberAndDeclaringType<...
    method LogException (line 154) | private void LogException(ExceptionLogAttribute attribute, Exception e...

FILE: src2/Abplus.MqMessages/MqMessages/MqHandlers/ExceptionLoggling/ExceptionLogInterceptor.cs
  class ExceptionLogInterceptor (line 5) | public class ExceptionLogInterceptor : AsyncHandlingInterceptor
    method ExceptionLogInterceptor (line 7) | public ExceptionLogInterceptor(ExceptionLogHandler handler) : base(han...

FILE: src2/Abplus.RebusRabbitmqConsumer/Configuration/Startup/AbpRebusRabbitMqConsumerConfigurationExtensions.cs
  class AbpRebusRabbitMqConsumerConfigurationExtensions (line 5) | public static class AbpRebusRabbitMqConsumerConfigurationExtensions
    method AbpRebusRabbitMqConsumer (line 7) | public static IAbpRebusRabbitMqConsumerModuleConfig AbpRebusRabbitMqCo...

FILE: src2/Abplus.RebusRabbitmqConsumer/Events/Consumer/RebusRabbitMq/AbpRebusRabbitMqConsumerModule.cs
  class AbpRebusRabbitMqConsumerModule (line 11) | [DependsOn(typeof(AbpKernelModule))]
    method AbpRebusRabbitMqConsumerModule (line 21) | public AbpRebusRabbitMqConsumerModule()
    method PreInitialize (line 26) | public override void PreInitialize()
    method Initialize (line 31) | public override void Initialize()
    method PostInitialize (line 36) | public override void PostInitialize()
    method Shutdown (line 65) | public override void Shutdown()

FILE: src2/Abplus.RebusRabbitmqConsumer/Events/Consumer/RebusRabbitMq/AbpRebusRabbitMqConsumerModuleConfig.cs
  class AbpRebusRabbitMqConsumerModuleConfig (line 6) | public class AbpRebusRabbitMqConsumerModuleConfig : IAbpRebusRabbitMqCon...
    method AbpRebusRabbitMqConsumerModuleConfig (line 20) | public AbpRebusRabbitMqConsumerModuleConfig()
    method Connect (line 28) | public IAbpRebusRabbitMqConsumerModuleConfig Connect(string connectStr...
    method UseQueue (line 34) | public IAbpRebusRabbitMqConsumerModuleConfig UseQueue(string queueName)
    method SetNumberOfWorkers (line 40) | public IAbpRebusRabbitMqConsumerModuleConfig SetNumberOfWorkers(int num)
    method SetMaxParallelism (line 45) | public IAbpRebusRabbitMqConsumerModuleConfig SetMaxParallelism(int num)
    method EnableMessageAuditing (line 51) | public IAbpRebusRabbitMqConsumerModuleConfig EnableMessageAuditing()
    method SetMessageAuditingQueueName (line 57) | public IAbpRebusRabbitMqConsumerModuleConfig SetMessageAuditingQueueNa...
    method SetRebusLoggingConfigurer (line 63) | public IAbpRebusRabbitMqConsumerModuleConfig SetRebusLoggingConfigurer...

FILE: src2/Abplus.RebusRabbitmqConsumer/Events/Consumer/RebusRabbitMq/IAbpRebusRabbitMqConsumerModuleConfig.cs
  type IAbpRebusRabbitMqConsumerModuleConfig (line 6) | public interface IAbpRebusRabbitMqConsumerModuleConfig
    method Connect (line 17) | IAbpRebusRabbitMqConsumerModuleConfig Connect(string connectString);
    method UseQueue (line 18) | IAbpRebusRabbitMqConsumerModuleConfig UseQueue(string queueName);
    method SetNumberOfWorkers (line 19) | IAbpRebusRabbitMqConsumerModuleConfig SetNumberOfWorkers(int num);
    method SetMaxParallelism (line 20) | IAbpRebusRabbitMqConsumerModuleConfig SetMaxParallelism(int num);
    method EnableMessageAuditing (line 21) | IAbpRebusRabbitMqConsumerModuleConfig EnableMessageAuditing();
    method SetMessageAuditingQueueName (line 22) | IAbpRebusRabbitMqConsumerModuleConfig SetMessageAuditingQueueName(stri...
    method SetRebusLoggingConfigurer (line 24) | IAbpRebusRabbitMqConsumerModuleConfig SetRebusLoggingConfigurer(Action...

FILE: src2/Abplus.RebusRabbitmqProducer/Configuration/Startup/AbpRebusRabbitMqProducerConfigurationExtensions.cs
  class AbpRebusRabbitMqProducerConfigurationExtensions (line 5) | public static class AbpRebusRabbitMqProducerConfigurationExtensions
    method AbpRebusRabbitMqProducer (line 7) | public static IAbpRebusRabbitMqProducerModuleConfig AbpRebusRabbitMqPr...

FILE: src2/Abplus.RebusRabbitmqProducer/Events/Producer/RebusRabbitMq/AbpRebusRabbitMqProducerModule.cs
  class AbpRebusRabbitMqProducerModule (line 11) | [DependsOn(typeof(AbpEventsProducerModule))]
    method PreInitialize (line 15) | public override void PreInitialize()
    method Initialize (line 21) | public override void Initialize()
    method PostInitialize (line 26) | public override void PostInitialize()
    method Shutdown (line 46) | public override void Shutdown()

FILE: src2/Abplus.RebusRabbitmqProducer/Events/Producer/RebusRabbitMq/AbpRebusRabbitMqProducerModuleConfig.cs
  class AbpRebusRabbitMqProducerModuleConfig (line 6) | internal class AbpRebusRabbitMqProducerModuleConfig : IAbpRebusRabbitMqP...
    method EnableMessageAuditing (line 17) | public IAbpRebusRabbitMqProducerModuleConfig EnableMessageAuditing()
    method SetMessageAuditingQueueName (line 23) | public IAbpRebusRabbitMqProducerModuleConfig SetMessageAuditingQueueNa...
    method SetRebusLoggingConfigurer (line 29) | public IAbpRebusRabbitMqProducerModuleConfig SetRebusLoggingConfigurer...
    method Enable (line 35) | public IAbpRebusRabbitMqProducerModuleConfig Enable()
    method Connect (line 41) | public IAbpRebusRabbitMqProducerModuleConfig Connect(string connection...

FILE: src2/Abplus.RebusRabbitmqProducer/Events/Producer/RebusRabbitMq/IAbpRebusRabbitMqProducerModuleConfig.cs
  type IAbpRebusRabbitMqProducerModuleConfig (line 6) | public interface IAbpRebusRabbitMqProducerModuleConfig
    method EnableMessageAuditing (line 13) | IAbpRebusRabbitMqProducerModuleConfig EnableMessageAuditing();
    method SetMessageAuditingQueueName (line 14) | IAbpRebusRabbitMqProducerModuleConfig SetMessageAuditingQueueName(stri...
    method SetRebusLoggingConfigurer (line 16) | IAbpRebusRabbitMqProducerModuleConfig SetRebusLoggingConfigurer(Action...
    method Enable (line 17) | IAbpRebusRabbitMqProducerModuleConfig Enable();
    method Connect (line 18) | IAbpRebusRabbitMqProducerModuleConfig Connect(string connectionString);

FILE: src2/Abplus.RebusRabbitmqProducer/Events/Producer/RebusRabbitMq/RebusRabbitMqProducer.cs
  class RebusRabbitMqProducer (line 5) | public class RebusRabbitMqProducer : IProducer
    method RebusRabbitMqProducer (line 10) | public RebusRabbitMqProducer(IBus bus, IAbpRebusRabbitMqProducerModule...
    method Publish (line 16) | public void Publish(object events)

FILE: src2/Abplus.T4.PermissionsFromJson/Authorization/Builders/BuilderUtils.cs
  class BuilderUtils (line 14) | public static class BuilderUtils
    method Build (line 16) | public static void Build(IPermissionDefinitionContext context, string ...
    method GeneratePermission (line 34) | public static Dictionary<string, List<PermissionConst>> GeneratePermis...
    method GetPermissionJson (line 53) | private static List<PermissionJson> GetPermissionJson(Stream sm)
    method BuildChildrenPermission (line 63) | private static void BuildChildrenPermission(List<PermissionJson> child...
    method BuildPermissionConst (line 79) | private static List<PermissionConst> BuildPermissionConst(List<Permiss...
  class PermissionJson (line 102) | public class PermissionJson
    method PermissionJson (line 104) | public PermissionJson()
    method GetChildren (line 119) | public List<PermissionJson> GetChildren()
    method GetMultiTenancySides (line 157) | public MultiTenancySides GetMultiTenancySides()
  class PermissionConst (line 167) | public class PermissionConst

FILE: src2/Abplus.Web.Api/WebApi/JsonMediaTypeFormatterExtension.cs
  class JsonMediaTypeFormatterExtension (line 6) | public static class JsonMediaTypeFormatterExtension
    method SetCustomDateFormatString (line 8) | public static void SetCustomDateFormatString(this JsonMediaTypeFormatt...

FILE: src2/Abplus.Web.Api/WebApiVersionRoute/RoutingConstraints/VersionConstraint.cs
  class VersionConstraint (line 9) | public class VersionConstraint : IHttpRouteConstraint
    method VersionConstraint (line 17) | public VersionConstraint(int allowedVersion, SysCode allowedSysCode, L...
    method Match (line 42) | public bool Match(HttpRequestMessage request, IHttpRoute route, string...
    method MatchSysCode (line 49) | private bool MatchSysCode(HttpRequestMessage request, HttpRouteDirecti...
    method MatchApiVersion (line 60) | private bool MatchApiVersion(HttpRequestMessage request, HttpRouteDire...
    method MatchClientVersion (line 72) | private bool MatchClientVersion(HttpRequestMessage request, HttpRouteD...
    method GetClientVersionHeader (line 101) | private Version GetClientVersionHeader(HttpRequestMessage request)
    method GetSysCodeHeader (line 122) | private SysCode? GetSysCodeHeader(HttpRequestMessage request)
    method GetApiVersionHeader (line 144) | private int? GetApiVersionHeader(HttpRequestMessage request)

FILE: src2/Abplus.Web.Api/WebApiVersionRoute/RoutingConstraints/VersionedRoute.cs
  class VersionedRoute (line 6) | public class VersionedRoute : RouteFactoryAttribute
    method VersionedRoute (line 15) | public VersionedRoute(string template)
    method VersionedRoute (line 22) | public VersionedRoute(string template, int apiVersion)
    method VersionedRoute (line 27) | public VersionedRoute(string template, SysCode allowedTags)
    method VersionedRoute (line 35) | public VersionedRoute(string template, int apiVersion, SysCode allowed...
    method VersionedRoute (line 40) | public VersionedRoute(string template, int apiVersion, params string[]...
    method VersionedRoute (line 45) | public VersionedRoute(string template, SysCode allowedTags, params str...
    method VersionedRoute (line 51) | public VersionedRoute(string template, int apiVersion, SysCode allowed...

FILE: src2/Abplus.Web.Api/WebApiVersionRoute/SysCode.cs
  type SysCode (line 5) | [Flags]

FILE: src2/Abplus.Web.Api/WebApiVersionRoute/Version.cs
  class Version (line 7) | public class Version : IComparable<Version>
    method Version (line 9) | public Version(string version)
    method CompareTo (line 21) | public int CompareTo(Version other)

FILE: src2/Abplus.Web.Api/WebApiVersionRoute/VersionConsts.cs
  class VersionConsts (line 3) | public class VersionConsts

FILE: src2/Abplus.Web.Api/WebApiVersionRoute/VersionRange.cs
  class VersionRange (line 6) | public class VersionRange
    method VersionRange (line 8) | public VersionRange(string minVersionString, string maxVersionString)
    method VersionRange (line 13) | public VersionRange(Version min, Version max)
    method ThrowIfMaxVersionLessThenMinVersion (line 31) | private void ThrowIfMaxVersionLessThenMinVersion()
    method CreateVersionRangeFromString (line 43) | public static VersionRange CreateVersionRangeFromString(string version...
    method CreateMinVersionFromString (line 52) | public static Version CreateMinVersionFromString(string versionRangeSt...
    method CreateMaxVersionFromString (line 68) | public static Version CreateMaxVersionFromString(string versionRangeSt...

FILE: src2/Abplus.Web.PlugIns/Web/Mvc/AbpWebPlugInModule.cs
  class AbpWebPlugInModule (line 19) | [DependsOn(typeof(AbpWebMvcModule))]
    method AbpWebPlugInModule (line 24) | public AbpWebPlugInModule(IAbpPlugInManager abpPlugInManager)
    method PreInitialize (line 29) | public override void PreInitialize()
    method PostInitialize (line 72) | public override void PostInitialize()

FILE: src2/Abplus.Web.PlugIns/Web/Mvc/Controllers/PlugInWindsorControllerFactory.cs
  class PlugInWindsorControllerFactory (line 11) | public class PlugInWindsorControllerFactory : WindsorControllerFactory
    method PlugInWindsorControllerFactory (line 18) | public PlugInWindsorControllerFactory(IIocResolver iocManager, IAbpPlu...
    method GetControllerType (line 22) | protected override Type GetControllerType(RequestContext requestContex...
    method GetControllerTypeFromPlugIns (line 35) | private Type GetControllerTypeFromPlugIns(RequestContext requestContex...
    method InitPlugInControllerTypesCache (line 79) | private void InitPlugInControllerTypesCache()

FILE: src2/Abplus.Web.SignalR/Configuration/Startup/RedisOnlineClientManagerConfiguationExtensions.cs
  class RedisOnlineClientManagerConfiguationExtensions (line 6) | public static class RedisOnlineClientManagerConfiguationExtensions
    method UseRedisOnlineClientManager (line 8) | public static IRedisOnlineClientManagerModuleConfig UseRedisOnlineClie...

FILE: src2/Abplus.Web.SignalR/RealTime/IRedisOnlineClientManagerModuleConfig.cs
  type IRedisOnlineClientManagerModuleConfig (line 9) | public interface IRedisOnlineClientManagerModuleConfig
    method ConnectTo (line 22) | IRedisOnlineClientManagerModuleConfig ConnectTo(string connectionString);
    method WithStoreKey (line 24) | IRedisOnlineClientManagerModuleConfig WithStoreKey(string storeKey);

FILE: src2/Abplus.Web.SignalR/RealTime/RedisOnlineClientManager.cs
  class RedisOnlineClientManager (line 16) | public class RedisOnlineClientManager : IOnlineClientManager
    method RedisOnlineClientManager (line 52) | public RedisOnlineClientManager()
    method CreateConnectionMultiplexer (line 69) | private ConnectionMultiplexer CreateConnectionMultiplexer()
    method GetDatabase (line 78) | protected IDatabase GetDatabase()
    method Add (line 87) | public void Add(IOnlineClient client)
    method IsUserOnline (line 110) | private bool IsUserOnline(UserIdentifier user)
    method AddClientToRedisStore (line 116) | private void AddClientToRedisStore(IOnlineClient client)
    method GetAllClients (line 146) | public IReadOnlyList<IOnlineClient> GetAllClients()
    method GetByConnectionIdOrNull (line 167) | public IOnlineClient GetByConnectionIdOrNull(string connectionId)
    method Remove (line 187) | public bool Remove(string connectionId)
    method GetAllByUserId (line 238) | public IReadOnlyList<IOnlineClient> GetAllByUserId(IUserIdentifier user)

FILE: src2/Abplus.Web.SignalR/RealTime/RedisOnlineClientManagerModule.cs
  class RedisOnlineClientManagerModule (line 7) | public class RedisOnlineClientManagerModule : AbpModule
    method PreInitialize (line 9) | public override void PreInitialize()
    method Initialize (line 16) | public override void Initialize()

FILE: src2/Abplus.Web.SignalR/RealTime/RedisOnlineClientManagerModuleConfig.cs
  class RedisOnlineClientManagerModuleConfig (line 9) | public class RedisOnlineClientManagerModuleConfig : IRedisOnlineClientMa...
    method RedisOnlineClientManagerModuleConfig (line 15) | public RedisOnlineClientManagerModuleConfig()
    method ConnectTo (line 21) | public IRedisOnlineClientManagerModuleConfig ConnectTo(string connecti...
    method WithStoreKey (line 27) | public IRedisOnlineClientManagerModuleConfig WithStoreKey(string store...

FILE: src2/Abplus.Web.SignalR/Web/SignalR/QrScan/SignalRQrCodeScannedRealTimeNotifier.cs
  class SignalRQrCodeScannedRealTimeNotifier (line 10) | public class SignalRQrCodeScannedRealTimeNotifier : IQrCodeScannedRealTi...
    method SignalRQrCodeScannedRealTimeNotifier (line 28) | public SignalRQrCodeScannedRealTimeNotifier()
    method Notify (line 33) | public Task Notify(string scannerId, string connectionId, object prope...

FILE: src2/Abplus.Web.SignalR/Web/SignalR/QrScan/SignalRQrCodeScannedRealTimeNotifierModule.cs
  class SignalRQrCodeScannedRealTimeNotifierModule (line 6) | public class SignalRQrCodeScannedRealTimeNotifierModule : AbpModule
    method PreInitialize (line 8) | public override void PreInitialize()

FILE: src2/Abplus.Web.SimpleCaptcha/Configuration/Startup/SimpleCaptchaManagerConfigurationExtension.cs
  class SimpleCaptchaManagerConfigurationExtension (line 5) | public static class SimpleCaptchaManagerConfigurationExtension
    method UseSimpleCaptchaModule (line 7) | public static ISimpleCaptchaModuleConfig UseSimpleCaptchaModule(this I...

FILE: src2/Abplus.Web.SimpleCaptcha/Web/SimpleCaptcha/ISimpleCaptchaModuleConfig.cs
  type ISimpleCaptchaModuleConfig (line 5) | public interface ISimpleCaptchaModuleConfig : ITransientDependency
    method SetMinutesCodeExpiredIn (line 73) | ISimpleCaptchaModuleConfig SetMinutesCodeExpiredIn(int minutes);
    method EnableCodeReusable (line 80) | ISimpleCaptchaModuleConfig EnableCodeReusable(bool enabled);
    method EnableTwist (line 86) | ISimpleCaptchaModuleConfig EnableTwist(bool enabled);
    method EnableRandomLine (line 91) | ISimpleCaptchaModuleConfig EnableRandomLine(bool enabled);
    method SetRandomLineCount (line 96) | ISimpleCaptchaModuleConfig SetRandomLineCount(int count);
    method EnableCaseSensitive (line 101) | ISimpleCaptchaModuleConfig EnableCaseSensitive(bool caseSensitive);
    method IncludeCharSetLowercases (line 106) | ISimpleCaptchaModuleConfig IncludeCharSetLowercases(bool included);
    method IncludeCharSetUppercases (line 111) | ISimpleCaptchaModuleConfig IncludeCharSetUppercases(bool included);
    method IncludeCharSetNumbers (line 116) | ISimpleCaptchaModuleConfig IncludeCharSetNumbers(bool included);
    method ExcludeCharSet (line 121) | ISimpleCaptchaModuleConfig ExcludeCharSet(params char[] excludedChars);
    method SetCookieCodeStoreSecretKey (line 128) | ISimpleCaptchaModuleConfig SetCookieCodeStoreSecretKey(string secretKey);
    method UseCookieCodeStore (line 136) | ISimpleCaptchaModuleConfig UseCookieCodeStore(string secretKey);
    method UseCacheCodeStore (line 144) | ISimpleCaptchaModuleConfig UseCacheCodeStore();
    method UseSessionCodeStore (line 150) | ISimpleCaptchaModuleConfig UseSessionCodeStore();

FILE: src2/Abplus.Web.SimpleCaptcha/Web/SimpleCaptcha/IVerificationCodeStore.cs
  type IVerificationCodeStore (line 6) | public interface IVerificationCodeStore
    method Save (line 8) | void Save(string storeKey, string verificationCode);
    method Find (line 10) | string Find(string storeKey);
    method Clear (line 12) | void Clear(string storeKey);

FILE: src2/Abplus.Web.SimpleCaptcha/Web/SimpleCaptcha/SimpleCaptchaManager.cs
  class SimpleCaptchaManager (line 13) | public class SimpleCaptchaManager : ITransientDependency
    method SimpleCaptchaManager (line 22) | public SimpleCaptchaManager(
    method DisableHttpResponseCache (line 31) | public virtual void DisableHttpResponseCache()
    method ClearHttpResponseAndSetContentType (line 37) | public virtual void ClearHttpResponseAndSetContentType()
    method ImageRefresher (line 50) | public void ImageRefresher(Stream outputStream, string storeKey, int I...
    method TwistImage (line 197) | private Bitmap TwistImage(Bitmap srcBmp, bool bXDir, double dMultValue...
    method Verify (line 236) | public bool Verify(string storeKey, string codeToBeVerified)

FILE: src2/Abplus.Web.SimpleCaptcha/Web/SimpleCaptcha/SimpleCaptchaModule.cs
  class SimpleCaptchaModule (line 8) | public class SimpleCaptchaModule : AbpModule
    method PreInitialize (line 10) | public override void PreInitialize()
    method Initialize (line 15) | public override void Initialize()

FILE: src2/Abplus.Web.SimpleCaptcha/Web/SimpleCaptcha/SimpleCaptchaModuleConfig.cs
  class SimpleCaptchaModuleConfig (line 7) | public class SimpleCaptchaModuleConfig : ISimpleCaptchaModuleConfig
    method SimpleCaptchaModuleConfig (line 9) | public SimpleCaptchaModuleConfig()
    method EnableCodeReusable (line 79) | public ISimpleCaptchaModuleConfig EnableCodeReusable(bool enabled)
    method EnableTwist (line 85) | public ISimpleCaptchaModuleConfig EnableTwist(bool enabled)
    method EnableRandomLine (line 91) | public ISimpleCaptchaModuleConfig EnableRandomLine(bool enabled)
    method SetRandomLineCount (line 97) | public ISimpleCaptchaModuleConfig SetRandomLineCount(int count)
    method EnableCaseSensitive (line 108) | public ISimpleCaptchaModuleConfig EnableCaseSensitive(bool caseSensitive)
    method IncludeCharSetLowercases (line 114) | public ISimpleCaptchaModuleConfig IncludeCharSetLowercases(bool included)
    method IncludeCharSetUppercases (line 120) | public ISimpleCaptchaModuleConfig IncludeCharSetUppercases(bool included)
    method IncludeCharSetNumbers (line 126) | public ISimpleCaptchaModuleConfig IncludeCharSetNumbers(bool included)
    method ExcludeCharSet (line 132) | public ISimpleCaptchaModuleConfig ExcludeCharSet(params char[] exclude...
    method SetMinutesCodeExpiredIn (line 144) | public ISimpleCaptchaModuleConfig SetMinutesCodeExpiredIn(int minutes)
    method SetCookieCodeStoreSecretKey (line 155) | public ISimpleCaptchaModuleConfig SetCookieCodeStoreSecretKey(string s...
    method UseCookieCodeStore (line 169) | public ISimpleCaptchaModuleConfig UseCookieCodeStore(string secretKey)
    method UseCacheCodeStore (line 175) | public ISimpleCaptchaModuleConfig UseCacheCodeStore()
    method UseSessionCodeStore (line 181) | public ISimpleCaptchaModuleConfig UseSessionCodeStore()

FILE: src2/Abplus.Web.SimpleCaptcha/Web/SimpleCaptcha/VerificationCodeStores/CacheVerificationCodeStore.cs
  class CacheVerificationCodeStore (line 8) | public class CacheVerificationCodeStore : IVerificationCodeStore
    method CacheVerificationCodeStore (line 15) | public CacheVerificationCodeStore(ICacheManager cacheManager)
    method Clear (line 21) | public void Clear(string storeKey)
    method Find (line 34) | public string Find(string storeKey)
    method Save (line 48) | public void Save(string storeKey, string verificationCode)

FILE: src2/Abplus.Web.SimpleCaptcha/Web/SimpleCaptcha/VerificationCodeStores/CookieVerificationCodeStore.cs
  class CookieVerificationCodeStore (line 8) | public class CookieVerificationCodeStore : IVerificationCodeStore
    method CookieVerificationCodeStore (line 11) | public CookieVerificationCodeStore(ISimpleCaptchaModuleConfig config)
    method Clear (line 16) | public void Clear(string storeKey)
    method Find (line 30) | public string Find(string storeKey)
    method Save (line 46) | public void Save(string storeKey, string verificationCode)

FILE: src2/Abplus.Web.SimpleCaptcha/Web/SimpleCaptcha/VerificationCodeStores/SessionVerificationCodeStore.cs
  class SessionVerificationCodeStore (line 6) | public class SessionVerificationCodeStore : IVerificationCodeStore
    method Clear (line 8) | public void Clear(string storeKey)
    method Find (line 20) | public string Find(string storeKey)
    method Save (line 37) | public void Save(string storeKey, string verificationCode)

FILE: src2/Abplus.WebApiClient/WebApiClient/AbplusWebApiClient.cs
  class AbplusWebApiClient (line 17) | public class AbplusWebApiClient : IAbplusWebApiClient, ITransientDependency
    method AbplusWebApiClient (line 35) | static AbplusWebApiClient()
    method AbplusWebApiClient (line 41) | public AbplusWebApiClient()
    method GetAsync (line 47) | public async Task GetAsync(string url, int? timeout = null)
    method GetAsync (line 52) | public async Task<TResult> GetAsync<TResult>(string url, int? timeout ...
    method PostAsync (line 57) | public async Task PostAsync(string url, int? timeout = null)
    method PostAsync (line 62) | public async Task PostAsync(string url, object input, int? timeout = n...
    method PostAsync (line 67) | public async Task<TResult> PostAsync<TResult>(string url, int? timeout...
    method PostAsync (line 72) | public async Task<TResult> PostAsync<TResult>(string url, object input...
    method PostAsync (line 77) | public async Task<TResult> PostAsync<TResult>(string url, object input...
    method RequestAsync (line 82) | private async Task<TResult> RequestAsync<TResult>(
    type HttpRequestMethod (line 181) | public enum HttpRequestMethod

FILE: src2/Abplus.WebApiClient/WebApiClient/AbplusWebApiClientModule.cs
  class AbplusWebApiClientModule (line 6) | public class AbplusWebApiClientModule : AbpModule
    method Initialize (line 8) | public override void Initialize()

FILE: src2/Abplus.WebApiClient/WebApiClient/AbplusWebApiClientRemoteCallException.cs
  class AbplusWebApiClientRemoteCallException (line 9) | public class AbplusWebApiClientRemoteCallException : AbpException
    method AbplusWebApiClientRemoteCallException (line 14) | public AbplusWebApiClientRemoteCallException()
    method AbplusWebApiClientRemoteCallException (line 22) | public AbplusWebApiClientRemoteCallException(SerializationInfo seriali...
    method AbplusWebApiClientRemoteCallException (line 32) | public AbplusWebApiClientRemoteCallException(string message)
    method AbplusWebApiClientRemoteCallException (line 43) | public AbplusWebApiClientRemoteCallException(string message, Exception...

FILE: src2/Abplus.WebApiClient/WebApiClient/IAbplusWebApiClient.cs
  type IAbplusWebApiClient (line 9) | public interface IAbplusWebApiClient : IAbpWebApiClient
    method GetAsync (line 11) | Task GetAsync(string url, int? timeout = null);
    method GetAsync (line 13) | Task<TResult> GetAsync<TResult>(string url, int? timeout = null, bool?...
    method PostAsync (line 15) | Task<TResult> PostAsync<TResult>(string url, object input, int? timeou...

FILE: src2/Abplus/AbplusConsts.cs
  class AbplusConsts (line 3) | public static class AbplusConsts

FILE: src2/Abplus/Application/Navigation/MenuItemDefinitionPlugInExtensions.cs
  class MenuItemDefinitionPlugInExtensions (line 7) | public static class MenuItemDefinitionPlugInExtensions
    method GetOrCreatePlugInsRootMenu (line 9) | public static MenuItemDefinition GetOrCreatePlugInsRootMenu(this MenuD...

FILE: src2/Abplus/Application/Services/Dto/IHasDateTimeFilterRequest.cs
  type IHasDateTimeFilterRequest (line 5) | public interface IHasDateTimeFilterRequest

FILE: src2/Abplus/Application/Services/Dto/IHasKeywordFilterRequest.cs
  type IHasKeywordFilterRequest (line 3) | public interface IHasKeywordFilterRequest

FILE: src2/Abplus/Application/Services/Dto/IPaginationResultRequest.cs
  type IPaginationResultRequest (line 3) | public interface IPaginationResultRequest : ISortedResultRequest

FILE: src2/Abplus/Application/Services/Dto/PaginationRequestInput.cs
  class PaginationResultRequestInput (line 5) | public class PaginationResultRequestInput : IPaginationResultRequest
    method PaginationResultRequestInput (line 7) | public PaginationResultRequestInput()

FILE: src2/Abplus/Currencies/ChineseCentExtension.cs
  class ChineseCentExtension (line 3) | public static class ChineseCentExtension
    method ToYuan (line 5) | public static decimal ToYuan(this int moneyInCent)
    method ToYuanString (line 10) | public static string ToYuanString(this int moneyInCent)

FILE: src2/Abplus/Events/Bus/ChangedEventData.cs
  class ChangedEventData (line 3) | public abstract class ChangedEventData<T> : EventData

FILE: src2/Abplus/Events/Bus/IShouldBePublish.cs
  type IShouldBePublish (line 12) | [Obsolete("不推荐直接将EventData发布到消息队列", false)]

FILE: src2/Abplus/Extensions/DateTimeExtensions.cs
  class DateTimeExtensions (line 8) | public static class DateTimeExtensions
    method ToFullTimeString (line 13) | public static string ToFullTimeString(this DateTime source)
    method ToShortTimeString (line 21) | public static string ToShortTimeString(this DateTime source)
    method ToDateString (line 29) | public static string ToDateString(this DateTime source)

FILE: src2/Abplus/Extensions/EnumExtensions.cs
  class EnumExtensions (line 11) | public static class EnumExtensions
    method GetDisplayName (line 13) | public static string GetDisplayName(FieldInfo field)

FILE: src2/Abplus/Extensions/GuidExtensions.cs
  class GuidExtensions (line 5) | public static class GuidExtensions
    method ToShortString (line 10) | public static string ToShortString(this Guid source)
    method ToCombGuid (line 22) | public static Guid ToCombGuid(this Guid source)

FILE: src2/Abplus/Extensions/IntExtension.cs
  class IntExtension (line 6) | public static class IntExtension
    method ToSkipCount (line 8) | public static int ToSkipCount(this IPaginationResultRequest pagination)
    method ToMaxResultCount (line 15) | public static int ToMaxResultCount(this IPaginationResultRequest pagin...
    method CheckErrors (line 22) | private static void CheckErrors(IPaginationResultRequest pagination)

FILE: src2/Abplus/Extensions/NullableDateTimeExtensions.cs
  class NullableDateTimeExtensions (line 5) | public static class NullableDateTimeExtensions
    method ToFullString (line 10) | public static string ToFullString(this DateTime? source)
    method ToShortString (line 18) | public static string ToShortString(this DateTime? source)
    method ToDateString (line 26) | public static string ToDateString(this DateTime? source)

FILE: src2/Abplus/Extensions/StringExtensions.cs
  class StringExtensions (line 6) | public static class StringExtensions
    method ToGuid (line 13) | public static Guid ToGuid(this string str)
    method ToGuid (line 24) | public static Guid ToGuid(this string str, string format)
    method ToGuidOrNull (line 42) | public static Guid? ToGuidOrNull(this string str)
    method ToIntOrNull (line 60) | public static int? ToIntOrNull(this string str)
    method Base64ToGuid (line 78) | public static Guid Base64ToGuid(this string str)
    method ToObject (line 100) | public static T ToObject<T>(this string json)

FILE: src2/Abplus/Interceptors/AsyncHandlingInterceptor.cs
  class AsyncHandlingInterceptor (line 7) | public abstract class AsyncHandlingInterceptor : IInterceptor
    method AsyncHandlingInterceptor (line 16) | protected AsyncHandlingInterceptor(IAsyncInterceptorHandler handler)
    method Intercept (line 21) | public void Intercept(IInvocation invocation)
    method ExecuteHandleAsyncWithResultUsingReflection (line 41) | private void ExecuteHandleAsyncWithResultUsingReflection(IInvocation i...
    method HandleAsyncWithResult (line 54) | protected virtual async Task<T> HandleAsyncWithResult<T>(IInvocation i...
    method GetDelegateType (line 59) | private MethodType GetDelegateType(IInvocation invocation)
    type MethodType (line 69) | private enum MethodType

FILE: src2/Abplus/Interceptors/IAsyncInterceptorHandler.cs
  type IAsyncInterceptorHandler (line 9) | public interface IAsyncInterceptorHandler
    method Handle (line 15) | void Handle(IInvocation invocation);
    method HandleAsync (line 22) | Task HandleAsync(IInvocation invocation);
    method HandleAsync (line 30) | Task<T> HandleAsync<T>(IInvocation invocation);

FILE: src2/Abplus/Json/LargeNumJsonConverter.cs
  class LargeNumJsonConverter (line 10) | public class LargeNumJsonConverter : JsonConverter
    method WriteJson (line 15) | public override void WriteJson(JsonWriter writer, object value, JsonSe...
    method ReadJson (line 28) | public override object ReadJson(JsonReader reader, Type objectType, ob...
    method CanConvert (line 42) | public override bool CanConvert(Type objectType)

FILE: src2/Abplus/MqMessages/IMqMessagePublisher.cs
  type IMqMessagePublisher (line 8) | public interface IMqMessagePublisher : ITransientDependency
    method Publish (line 14) | void Publish(object mqMessages);
    method PublishAsync (line 21) | Task PublishAsync(object mqMessages);

FILE: src2/Abplus/MqMessages/MessageTrackers/DefaultInMemoryMessageTracker.cs
  class DefaultInMemoryMessageTracker (line 7) | public class DefaultInMemoryMessageTracker : IMessageTracker
    method DefaultInMemoryMessageTracker (line 11) | static DefaultInMemoryMessageTracker()
    method MarkAsProcessed (line 19) | public Task MarkAsProcessed(string processId)
    method HasProcessed (line 25) | public Task<bool> HasProcessed(string processId)

FILE: src2/Abplus/MqMessages/MessageTrackers/IMessageTracker.cs
  type IMessageTracker (line 5) | public interface IMessageTracker
    method HasProcessed (line 12) | Task<bool> HasProcessed(string processId);
    method MarkAsProcessed (line 19) | Task MarkAsProcessed(string processId);

FILE: src2/Abplus/MqMessages/NullMqMessagePublisher.cs
  class NullMqMessagePublisher (line 8) | public class NullMqMessagePublisher : IMqMessagePublisher
    method PublishAsync (line 21) | public Task PublishAsync(object mqMessages)
    method Publish (line 31) | public void Publish(object mqMessages)

FILE: src2/Abplus/PlugIns/IPlugInAreaRegistration.cs
  type IPlugInAreaRegistration (line 3) | public interface IPlugInAreaRegistration

FILE: src2/Abplus/PlugIns/IPlugInAuthorizationProvider.cs
  type IPlugInAuthorizationProvider (line 3) | public interface IPlugInAuthorizationProvider

FILE: src2/Abplus/PlugIns/IPlugInNavigationProvider.cs
  type IPlugInNavigationProvider (line 3) | public interface IPlugInNavigationProvider

FILE: src2/Abplus/QrCode/IQrCodeScannedRealTimeNotifier.cs
  type IQrCodeScannedRealTimeNotifier (line 5) | public interface IQrCodeScannedRealTimeNotifier
    method Notify (line 7) | Task Notify(string scannerIdentifier, string connectionId, object prop...

FILE: src2/Abplus/Reservations/Events/ReservationCancelledEventData.cs
  class ReservationCancelledEventData (line 6) | public abstract class ReservationCancelledEventData : ReservationEventDa...

FILE: src2/Abplus/Reservations/Events/ReservationEventDataBase.cs
  class ReservationEventDataBase (line 9) | public abstract class ReservationEventDataBase : EventData

FILE: src2/Abplus/Reservations/Events/ReservationSuccessEventData.cs
  class ReservationSuccessEventData (line 6) | public abstract class ReservationSuccessEventData : ReservationEventData...

FILE: src2/Abplus/Reservations/IReservation.cs
  type IReservation (line 9) | public interface IReservation
    method IsConflict (line 36) | bool IsConflict(IReservation reservation);
    method IsConflict (line 43) | bool IsConflict(IEnumerable<IReservation> reservations);

FILE: src2/Abplus/Reservations/IReservationBody.cs
  type IReservationBody (line 10) | public interface IReservationBody<T> where T : IReservation
    method Reserve (line 29) | T Reserve(string subject, DateTime from, DateTime to);
    method CancelReservation (line 36) | T CancelReservation(string reservationCode);

FILE: src2/Abplus/Reservations/ReservationBase.cs
  class ReservationBase (line 13) | public abstract class ReservationBase : CreationAuditedEntity<Guid>, IRe...
    method ReservationBase (line 20) | protected ReservationBase() { }
    method ReservationBase (line 22) | public ReservationBase(string reservationSubject, TimeRange reservatio...
    method SetReservationCode (line 48) | protected virtual void SetReservationCode(string resourceCode)
    method IsConflict (line 80) | public virtual bool IsConflict(IReservation reservation)
    method IsConflict (line 90) | public virtual bool IsConflict(IEnumerable<IReservation> reservations)...

FILE: src2/Abplus/Reservations/ReservationBodyBase.cs
  class ReservationBodyBase (line 16) | public abstract class ReservationBodyBase<TReservation, TPrimary> : Aggr...
    method CancelReservation (line 50) | public virtual TReservation CancelReservation(string reservationCode)
    method Reserve (line 74) | public virtual TReservation Reserve(string subject, DateTime from, Dat...

FILE: src2/Abplus/TimeRanges/TimeRange.cs
  class TimeRange (line 7) | public class TimeRange : ValueObject<TimeRange>
    method TimeRange (line 9) | protected TimeRange() { }
    method TimeRange (line 11) | public TimeRange(DateTime from, DateTime to)
    method IsIncluding (line 39) | public bool IsIncluding(TimeRange that)
    method IsIntersect (line 51) | public bool IsIntersect(TimeRange that)
    method IsIntersect (line 65) | public bool IsIntersect(ICollection<TimeRange> those)

FILE: src2/Samples/Abplus.WebApiVersionRoute.Sample/App_Start/WebApiConfig.cs
  class WebApiConfig (line 8) | public static class WebApiConfig
    method Register (line 10) | public static void Register(HttpConfiguration config)

FILE: src2/Samples/Abplus.WebApiVersionRoute.Sample/Controllers/ValueController.cs
  class ValueController (line 7) | public class ValueController : ApiController
    method byApiVersion1 (line 13) | [HttpGet]
    method byApiVersion2 (line 24) | [HttpGet]
    method bySysCodeH5 (line 35) | [HttpGet]
    method bySysCodeNotH5 (line 46) | [HttpGet]
    method byVersionRangeStringLessThan112 (line 57) | [HttpGet]
    method byVersionRangeString112To190 (line 68) | [HttpGet]
    method byVersionRangeStringOnly191 (line 79) | [HttpGet]
    method byVersionRangeString192And193 (line 90) | [HttpGet]
    method byVersionRangeStringGreaterThan193 (line 101) | [HttpGet]
    method byApiSysCodeVersionRange (line 115) | [HttpGet]

FILE: src2/Samples/Abplus.WebApiVersionRoute.Sample/Global.asax.cs
  class WebApiApplication (line 10) | public class WebApiApplication : System.Web.HttpApplication
    method Application_Start (line 12) | protected void Application_Start()

FILE: src2/Samples/Sample.MqMessages/MqMessages/TestMqMessage.cs
  class TestMqMessage (line 5) | public class TestMqMessage

FILE: src2/Samples/Sample.RebusRabbitMqConsumer/Handlers/TestHandler.cs
  class TestHandler (line 9) | public class TestHandler : IHandleMessages<TestMqMessage>
    method TestHandler (line 13) | public TestHandler()
    method Handle (line 18) | public async Task Handle(TestMqMessage message)

FILE: src2/Samples/Sample.RebusRabbitMqConsumer/Program.cs
  class Program (line 6) | class Program
    method Main (line 8) | static int Main()

FILE: src2/Samples/Sample.RebusRabbitMqConsumer/SampleRebusRabbitMqConsumerBootstrap.cs
  class SampleRebusRabbitMqConsumerBootstrap (line 5) | public class SampleRebusRabbitMqConsumerBootstrap
    method Start (line 9) | public void Start()
    method Stop (line 15) | public void Stop()

FILE: src2/Samples/Sample.RebusRabbitMqConsumer/SampleRebusRabbitMqConsumerModule.cs
  class SampleRebusRabbitMqConsumerModule (line 11) | [DependsOn(typeof(RebusRabbitMqConsumerModule))]
    method PreInitialize (line 14) | public override void PreInitialize()
    method Initialize (line 23) | public override void Initialize()
    method PostInitialize (line 28) | public override void PostInitialize()

FILE: src2/Samples/Sample.RebusRabbitMqPublisher/BackgroundWorks/TestWorker.cs
  class TestWorker (line 10) | public class TestWorker : PeriodicBackgroundWorkerBase, ISingletonDepend...
    method TestWorker (line 14) | public TestWorker(AbpTimer timer, IMqMessagePublisher publisher)
    method DoWork (line 22) | protected override void DoWork()

FILE: src2/Samples/Sample.RebusRabbitMqPublisher/Program.cs
  class Program (line 6) | class Program
    method Main (line 8) | static int Main()

FILE: src2/Samples/Sample.RebusRabbitMqPublisher/SampleRebusRabbitMqPublisherBootstrap.cs
  class SampleRebusRabbitMqPublisherBootstrap (line 8) | public class SampleRebusRabbitMqPublisherBootstrap
    method Start (line 12) | public void Start()
    method Stop (line 18) | public void Stop()

FILE: src2/Samples/Sample.RebusRabbitMqPublisher/SampleRebusRabbitMqPublisherModule.cs
  class SampleRebusRabbitMqPublisherModule (line 13) | [DependsOn(typeof(RebusRabbitMqPublisherModule))]
    method PreInitialize (line 16) | public override void PreInitialize()
    method Initialize (line 25) | public override void Initialize()
    method PostInitialize (line 30) | public override void PostInitialize()

FILE: src2/Tests/Abplus.Tests/TimeRanges/TimeRange_Tests.cs
  class TimeRange_Tests (line 8) | public class TimeRange_Tests
    method 时间区间起点不应大于等于终点 (line 10) | [Fact]
    method 时间区间相交情况A (line 21) | [Fact]
    method 时间区间相交情况B (line 42) | [Fact]
    method 时间区间相交情况C (line 59) | [Fact]
Condensed preview — 460 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,826K chars).
[
  {
    "path": ".gitignore",
    "chars": 4289,
    "preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User"
  },
  {
    "path": ".nuget/NuGet.Config",
    "chars": 203,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <packageSources>\n    <add key=\"nuget.org\" value=\"https://api.n"
  },
  {
    "path": "Abplus.sln",
    "chars": 29180,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.3080"
  },
  {
    "path": "LICENSE",
    "chars": 1067,
    "preview": "MIT License\n\nCopyright (c) 2016 personball\n\nPermission is hereby granted, free of charge, to any person obtaining a copy"
  },
  {
    "path": "Nupkg/pack.bat",
    "chars": 1325,
    "preview": "dotnet pack ..\\src\\Abplus\\Abplus.csproj -o ..\\..\\nupkg\\\ndotnet pack ..\\src\\Abplus.AspNetCore.SignalR\\Abplus.AspNetCore.S"
  },
  {
    "path": "Nupkg/push-all-packages-in-current_folder.bat",
    "chars": 154,
    "preview": "@echo off\nsetlocal enabledelayedexpansion\nset filepath=%cd%\nFOR /R %filepath% %%i IN (*.nupkg) DO (\nset file=%%i\ncall ./"
  },
  {
    "path": "README.md",
    "chars": 4131,
    "preview": "![abplus_icon](https://github.com/personball/abplus/blob/master/abplus_icon.png?raw=true)\n# abplus\nAbp plus, an extensio"
  },
  {
    "path": "common.props",
    "chars": 82,
    "preview": "<Project>\n\t<PropertyGroup>\n\t\t<Version>6.0.0</Version>\n\t</PropertyGroup>\n</Project>"
  },
  {
    "path": "src/Abplus/Abplus.csproj",
    "chars": 349,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\common.props\"></Import>\n  \n  <PropertyGroup>\n    <TargetFra"
  },
  {
    "path": "src/Abplus/Abplus.nuspec",
    "chars": 790,
    "preview": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</tit"
  },
  {
    "path": "src/Abplus/Application/Navigation/MenuItemDefinitionPlugInExtensions.cs",
    "chars": 1249,
    "preview": "using System.Linq;\nusing Abp.Extensions;\nusing Abp.Localization;\n\nnamespace Abp.Application.Navigation\n{\n    public sta"
  },
  {
    "path": "src/Abplus/Application/Services/Dto/IHasDateTimeFilterRequest.cs",
    "chars": 205,
    "preview": "namespace Abp.Application.Services.Dto\n{\n    using System;\n\n    public interface IHasDateTimeFilterRequest\n    {\n      "
  },
  {
    "path": "src/Abplus/Application/Services/Dto/IHasKeywordFilterRequest.cs",
    "chars": 139,
    "preview": "namespace Abp.Application.Services.Dto\n{\n    public interface IHasKeywordFilterRequest\n    {\n        string Keyword { g"
  },
  {
    "path": "src/Abplus/Application/Services/Dto/IPaginationResultRequest.cs",
    "chars": 197,
    "preview": "namespace Abp.Application.Services.Dto\n{\n    public interface IPaginationResultRequest : ISortedResultRequest\n    {\n   "
  },
  {
    "path": "src/Abplus/Application/Services/Dto/PaginationRequestInput.cs",
    "chars": 481,
    "preview": "namespace Abp.Application.Services.Dto\n{\n    using System.ComponentModel.DataAnnotations;\n\n    public class PaginationR"
  },
  {
    "path": "src/Abplus/Currencies/ChineseCentExtension.cs",
    "chars": 354,
    "preview": "namespace Abp.Currencies\n{\n    public static class ChineseCentExtension\n    {\n        public static decimal ToYuan(this"
  },
  {
    "path": "src/Abplus/Events/Bus/ChangedEventData.cs",
    "chars": 177,
    "preview": "namespace Abp.Events.Bus\n{\n    public abstract class ChangedEventData<T> : EventData\n    {\n        public T Origin { ge"
  },
  {
    "path": "src/Abplus/Extensions/DateTimeExtensions.cs",
    "chars": 880,
    "preview": "namespace Abp.Extensions\n{\n    using System;\n\n    /// <summary>\n    /// Extension methods for <see cref=\"DateTime\"/>.\n "
  },
  {
    "path": "src/Abplus/Extensions/EnumExtensions.cs",
    "chars": 708,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\nusing S"
  },
  {
    "path": "src/Abplus/Extensions/GuidExtensions.cs",
    "chars": 1837,
    "preview": "namespace Abp.Extensions\n{\n    using System;\n\n    public static class GuidExtensions\n    {\n        /// <summary>\n      "
  },
  {
    "path": "src/Abplus/Extensions/IntExtension.cs",
    "chars": 1022,
    "preview": "using System;\nusing Abp.Application.Services.Dto;\n\nnamespace Abp.Extensions\n{\n    public static class IntExtension\n    "
  },
  {
    "path": "src/Abplus/Extensions/NullableDateTimeExtensions.cs",
    "chars": 879,
    "preview": "namespace Abp.Extensions\n{\n    using System;\n\n    public static class NullableDateTimeExtensions\n    {\n        /// <sum"
  },
  {
    "path": "src/Abplus/Extensions/StringExtensions.cs",
    "chars": 3033,
    "preview": "namespace Abp.Extensions\n{\n    using System;\n    using Newtonsoft.Json;\n\n    public static class StringExtensions\n    {"
  },
  {
    "path": "src/Abplus/IO/IFileStorage.cs",
    "chars": 463,
    "preview": "using System.IO;\nusing System.Threading.Tasks;\nusing Abp.Dependency;\n\nnamespace Abp.IO\n{\n    public interface IFileStor"
  },
  {
    "path": "src/Abplus/IO/NullFileStorage.cs",
    "chars": 786,
    "preview": "using System.IO;\nusing System.Threading.Tasks;\n\nnamespace Abp.IO\n{\n    public class NullFileStorage : IFileStorage\n    "
  },
  {
    "path": "src/Abplus/Interceptors/AsyncHandlingInterceptor.cs",
    "chars": 2716,
    "preview": "using System.Reflection;\nusing System.Threading.Tasks;\nusing Castle.DynamicProxy;\n\nnamespace Abp.Interceptors\n{\n    pub"
  },
  {
    "path": "src/Abplus/Interceptors/IAsyncInterceptorHandler.cs",
    "chars": 768,
    "preview": "using System.Threading.Tasks;\nusing Castle.DynamicProxy;\n\nnamespace Abp.Interceptors\n{\n    /// <summary>\n    /// \n    /"
  },
  {
    "path": "src/Abplus/Json/LargeNumJsonConverter.cs",
    "chars": 1726,
    "preview": "using System;\nusing System.Collections.Generic;\nusing Newtonsoft.Json;\n\nnamespace Abp.Json\n{\n    /// <summary>\n    /// "
  },
  {
    "path": "src/Abplus/MqMessages/IMqMessagePublisher.cs",
    "chars": 542,
    "preview": "using System.Threading.Tasks;\nusing Abp.Dependency;\nnamespace Abp.MqMessages\n{\n    /// <summary>\n    /// 消息发布接口\n    ///"
  },
  {
    "path": "src/Abplus/MqMessages/MessageTrackers/DefaultInMemoryMessageTracker.cs",
    "chars": 819,
    "preview": "using System.Collections.Concurrent;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Abp.MqMessages.Message"
  },
  {
    "path": "src/Abplus/MqMessages/MessageTrackers/IMessageTracker.cs",
    "chars": 587,
    "preview": "using System.Threading.Tasks;\n\nnamespace Abp.MqMessages.MessageTrackers\n{\n    public interface IMessageTracker\n    {\n  "
  },
  {
    "path": "src/Abplus/MqMessages/NullMqMessagePublisher.cs",
    "chars": 809,
    "preview": "using System.Threading.Tasks;\n\nnamespace Abp.MqMessages\n{\n    /// <summary>\n    /// 空模式\n    /// </summary>\n    public c"
  },
  {
    "path": "src/Abplus/PlugIns/IPlugInAreaRegistration.cs",
    "chars": 84,
    "preview": "namespace Abp.PlugIns\n{\n    public interface IPlugInAreaRegistration\n    {\n    }\n}\n"
  },
  {
    "path": "src/Abplus/PlugIns/IPlugInAuthorizationProvider.cs",
    "chars": 89,
    "preview": "namespace Abp.PlugIns\n{\n    public interface IPlugInAuthorizationProvider\n    {\n    }\n}\n"
  },
  {
    "path": "src/Abplus/PlugIns/IPlugInNavigationProvider.cs",
    "chars": 86,
    "preview": "namespace Abp.PlugIns\n{\n    public interface IPlugInNavigationProvider\n    {\n    }\n}\n"
  },
  {
    "path": "src/Abplus/QrCode/IQrCodeScannedRealTimeNotifier.cs",
    "chars": 215,
    "preview": "using System.Threading.Tasks;\n\nnamespace Abp.QrCode\n{\n    public interface IQrCodeScannedRealTimeNotifier\n    {\n       "
  },
  {
    "path": "src/Abplus/Reservations/Events/ReservationCancelledEventData.cs",
    "chars": 190,
    "preview": "namespace Abp.Reservations.Events\n{\n    /// <summary>\n    /// 预定取消事件抽象基类\n    /// </summary>\n    public abstract class R"
  },
  {
    "path": "src/Abplus/Reservations/Events/ReservationEventDataBase.cs",
    "chars": 575,
    "preview": "using Abp.Events.Bus;\nusing Abp.TimeRanges;\n\nnamespace Abp.Reservations.Events\n{\n    /// <summary>\n    /// 预定发生变化的事件基类\n"
  },
  {
    "path": "src/Abplus/Reservations/Events/ReservationSuccessEventData.cs",
    "chars": 188,
    "preview": "namespace Abp.Reservations.Events\n{\n    /// <summary>\n    /// 预定成功事件抽象基类\n    /// </summary>\n    public abstract class R"
  },
  {
    "path": "src/Abplus/Reservations/IReservation.cs",
    "chars": 1017,
    "preview": "using System.Collections.Generic;\nusing Abp.TimeRanges;\n\nnamespace Abp.Reservations\n{\n    /// <summary>\n    /// 预定\n    "
  },
  {
    "path": "src/Abplus/Reservations/IReservationBody.cs",
    "chars": 954,
    "preview": "using System;\nusing System.Collections.Generic;\n\nnamespace Abp.Reservations\n{\n    /// <summary>\n    /// 可被预定的资源主体\n    /"
  },
  {
    "path": "src/Abplus/Reservations/ReservationBase.cs",
    "chars": 3021,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\nusing A"
  },
  {
    "path": "src/Abplus/Reservations/ReservationBodyBase.cs",
    "chars": 3222,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Abp.Domain.Entities;\nusing Abp.Events.Bus;\nusi"
  },
  {
    "path": "src/Abplus/Runtime/OS/EnvDescription.cs",
    "chars": 288,
    "preview": "namespace Abp.Runtime.OS\n{\n    public class EnvDescription\n    {\n        public string FrameworkDescription { get; set;"
  },
  {
    "path": "src/Abplus/Runtime/OS/EnvironmentHelper.cs",
    "chars": 584,
    "preview": "using System.Runtime.InteropServices;\n\nnamespace Abp.Runtime.OS\n{\n    public static class EnvironmentHelper\n    {\n     "
  },
  {
    "path": "src/Abplus/TimeRanges/TimeRange.cs",
    "chars": 2104,
    "preview": "using System;\nusing System.Collections.Generic;\nusing Abp.Domain.Values;\n\nnamespace Abp.TimeRanges\n{\n    public class T"
  },
  {
    "path": "src/Abplus.AspNetCore.SignalR/Abplus.AspNetCore.SignalR.csproj",
    "chars": 599,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <Import Project=\"..\\..\\common.props\"></Import>\n  \n  <PropertyGroup>\n    <TargetFram"
  },
  {
    "path": "src/Abplus.AspNetCore.SignalR/Abplus.AspNetCore.SignalR.nuspec",
    "chars": 924,
    "preview": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</tit"
  },
  {
    "path": "src/Abplus.AspNetCore.SignalR/Configuration/Startup/RedisOnlineClientManagerConfiguationExtensions.cs",
    "chars": 502,
    "preview": "using Abp.RealTime;\n\nnamespace Abp.Configuration.Startup\n{\n    public static class RedisOnlineClientManagerConfiguation"
  },
  {
    "path": "src/Abplus.AspNetCore.SignalR/RealTime/IRedisOnlineClientManagerModuleConfig.cs",
    "chars": 591,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nna"
  },
  {
    "path": "src/Abplus.AspNetCore.SignalR/RealTime/RedisOnlineClientManager.cs",
    "chars": 9339,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Collections.Immutable;\nusing Abp.Dependency;\nusing Abp.Ext"
  },
  {
    "path": "src/Abplus.AspNetCore.SignalR/RealTime/RedisOnlineClientManagerModule.cs",
    "chars": 675,
    "preview": "using System.Reflection;\nusing Abp.Dependency;\nusing Abp.Modules;\n\nnamespace Abp.RealTime\n{\n    public class RedisOnlin"
  },
  {
    "path": "src/Abplus.AspNetCore.SignalR/RealTime/RedisOnlineClientManagerModuleConfig.cs",
    "chars": 887,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nna"
  },
  {
    "path": "src/Abplus.AspNetCore.SignalR/Web/SignalR/QrScan/SignalRQrCodeScannedRealTimeNotifier.cs",
    "chars": 1460,
    "preview": "using System;\nusing System.Threading.Tasks;\nusing Abp.AspNetCore.SignalR.Hubs;\nusing Abp.QrCode;\nusing Castle.Core.Logg"
  },
  {
    "path": "src/Abplus.AspNetCore.SignalR/Web/SignalR/QrScan/SignalRQrCodeScannedRealTimeNotifierModule.cs",
    "chars": 366,
    "preview": "using Abp.Modules;\nusing Abp.QrCode;\n\nnamespace Abp.Web.SignalR.QrScan\n{\n    public class SignalRQrCodeScannedRealTimeN"
  },
  {
    "path": "src/Abplus.IO.AliyunOSSStorage/Abplus.IO.AliyunOSSStorage.csproj",
    "chars": 839,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n<Import Project=\"..\\..\\common.props\"></Import>\n  <PropertyGroup>\n    <TargetFramework"
  },
  {
    "path": "src/Abplus.IO.AliyunOSSStorage/Configuration/Startup/AliyunOSSStorageConfigurationExtensions.cs",
    "chars": 504,
    "preview": "using Abp.IO.AliyunOSSStorage;\n\nnamespace Abp.Configuration.Startup\n{\n    public static class AliyunOSSStorageConfigura"
  },
  {
    "path": "src/Abplus.IO.AliyunOSSStorage/IO/AliyunOSSStorage/AliyunOSSStorage.cs",
    "chars": 3186,
    "preview": "using System;\nusing System.IO;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Abp.Dependency;\nusing Abp.Ex"
  },
  {
    "path": "src/Abplus.IO.AliyunOSSStorage/IO/AliyunOSSStorage/AliyunOSSStorageModule.cs",
    "chars": 694,
    "preview": "using System.Reflection;\nusing Abp.Localization;\nusing Abp.Modules;\n\nnamespace Abp.IO.AliyunOSSStorage\n{\n    [DependsOn"
  },
  {
    "path": "src/Abplus.IO.AliyunOSSStorage/IO/AliyunOSSStorage/AliyunOSSStorageModuleConfiguration.cs",
    "chars": 1236,
    "preview": "namespace Abp.IO.AliyunOSSStorage\n{\n    public class AliyunOSSStorageModuleConfiguration : IAliyunOSSStorageModuleConfi"
  },
  {
    "path": "src/Abplus.IO.AliyunOSSStorage/IO/AliyunOSSStorage/IAliyunOSSStorageModuleConfiguration.cs",
    "chars": 669,
    "preview": "namespace Abp.IO.AliyunOSSStorage\n{\n    public interface IAliyunOSSStorageModuleConfiguration\n    {\n        string Acce"
  },
  {
    "path": "src/Abplus.IO.AliyunOSSStorage/IO/AliyunOSSStorageConsts.cs",
    "chars": 147,
    "preview": "namespace Abp.IO\n{\n    public class AliyunOSSStorageConsts\n    {\n        public const string LocalizationSourceName = \""
  },
  {
    "path": "src/Abplus.IO.AliyunOSSStorage/Localization/AliyunOSSStorageLocalizationConfigurer.cs",
    "chars": 789,
    "preview": "using Abp.Configuration.Startup;\nusing Abp.IO;\nusing Abp.Localization.Dictionaries;\nusing Abp.Localization.Dictionaries"
  },
  {
    "path": "src/Abplus.IO.AliyunOSSStorage/Localization/SourceFiles/AliyunOSSStorage-zh-Hans.xml",
    "chars": 176,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<localizationDictionary culture=\"zh-Hans\">\n  <texts>\n    <text name=\"HelloWorld"
  },
  {
    "path": "src/Abplus.IO.AliyunOSSStorage/Localization/SourceFiles/AliyunOSSStorage.xml",
    "chars": 177,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<localizationDictionary culture=\"en\">\n  <texts>\n    <text name=\"HelloWorld\" val"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/Abplus.IO.AzureBlobStorage.csproj",
    "chars": 811,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <Import Project=\"..\\..\\common.props\"></Import>\n  <PropertyGroup>\n    <TargetFramewo"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/Abplus.IO.AzureBlobStorage.nuspec",
    "chars": 797,
    "preview": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</tit"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/Configuration/Startup/AzureBlobFileStorageConfigurationExtensions.cs",
    "chars": 512,
    "preview": "using Abp.IO.AzureBlobStorage;\n\nnamespace Abp.Configuration.Startup\n{\n    public static  class AzureBlobFileStorageConf"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/AzureBlobFileStorage.cs",
    "chars": 5143,
    "preview": "using System;\nusing System.IO;\nusing System.Threading.Tasks;\nusing Abp.Extensions;\nusing Abp.IO.Extensions;\nusing Castl"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/AzureBlobFileStorageConfig.cs",
    "chars": 612,
    "preview": "namespace Abp.IO.AzureBlobStorage\n{\n    public class AzureBlobFileStorageConfig : IAzureBlobFileStorageConfig\n    {\n   "
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/AzureBlobFileStorageModule.cs",
    "chars": 1238,
    "preview": "using System.Reflection;\nusing Abp.IO.AzureBlobStorage.Configuration;\nusing Abp.Localization;\nusing Abp.Modules;\n\nnames"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/AzureBlobFileStorageModuleConfig.cs",
    "chars": 1543,
    "preview": "namespace Abp.IO.AzureBlobStorage\n{\n    public class AzureBlobFileStorageModuleConfig : IAzureBlobFileStorageModuleConf"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/Configuration/AzureBlobFileStorageSetting.cs",
    "chars": 1260,
    "preview": "using Abp.Configuration;\n\nnamespace Abp.IO.AzureBlobStorage.Configuration\n{\n    /// <summary>\n    /// use SettingManage"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/Configuration/AzureBlobFileStorageSettingNames.cs",
    "chars": 509,
    "preview": "namespace Abp.IO.AzureBlobStorage.Configuration\n{\n    public static class AzureBlobFileStorageSettingNames\n    {\n      "
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/Configuration/AzureBlobFileStorageSettingProvider.cs",
    "chars": 1644,
    "preview": "using System.Collections.Generic;\nusing Abp.Configuration;\nusing Abp.Localization;\n\nnamespace Abp.IO.AzureBlobStorage.C"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/IAzureBlobFileStorageConfig.cs",
    "chars": 292,
    "preview": "namespace Abp.IO.AzureBlobStorage\n{\n    public interface IAzureBlobFileStorageConfig\n    {\n        string AccountName {"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorage/IAzureBlobFileStorageModuleConfig.cs",
    "chars": 606,
    "preview": "namespace Abp.IO.AzureBlobStorage\n{\n    public interface IAzureBlobFileStorageModuleConfig : IAzureBlobFileStorageConfi"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/IO/AzureBlobStorageConsts.cs",
    "chars": 153,
    "preview": "namespace Abp.IO\n{\n    public class AzureBlobStorageConsts\n    {\n        public const string LocalizationSourceName = \""
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/Localization/AzureBlobStorageLocalizationConfigurer.cs",
    "chars": 789,
    "preview": "using Abp.Configuration.Startup;\nusing Abp.IO;\nusing Abp.Localization.Dictionaries;\nusing Abp.Localization.Dictionaries"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/Localization/SourceFiles/AbplusAzureBlobStorage-zh-Hans.xml",
    "chars": 498,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<localizationDictionary culture=\"zh-Hans\">\n  <texts>\n    <text name=\"AzureBlobF"
  },
  {
    "path": "src/Abplus.IO.AzureBlobStorage/Localization/SourceFiles/AbplusAzureBlobStorage.xml",
    "chars": 429,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<localizationDictionary culture=\"en\">\n  <texts>\n    <text name=\"AzureBlobFileSt"
  },
  {
    "path": "src/Abplus.IO.LocalFileSystem/Abplus.IO.LocalFileSystem.csproj",
    "chars": 699,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <Import Project=\"..\\..\\common.props\"></Import>\n  <PropertyGroup>\n    <TargetFramewo"
  },
  {
    "path": "src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/ILocalFileSystemStorageConfig.cs",
    "chars": 187,
    "preview": "namespace Abp.IO.LocalFileSystem\n{\n    public interface ILocalFileSystemStorageConfig\n    {\n        string StoreRootDir"
  },
  {
    "path": "src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/LocalFileSystemStorage.cs",
    "chars": 2798,
    "preview": "using System.IO;\nusing System.Threading.Tasks;\nusing Abp.Extensions;\nusing Abp.IO.Extensions;\n#pragma warning disable C"
  },
  {
    "path": "src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/LocalFileSystemStorageConfig.cs",
    "chars": 855,
    "preview": "using Abp.Configuration;\n\nnamespace Abp.IO.LocalFileSystem\n{\n    public class LocalFileSystemStorageConfig : ILocalFile"
  },
  {
    "path": "src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/LocalFileSystemStorageModule.cs",
    "chars": 664,
    "preview": "using System.Reflection;\nusing Abp.Localization;\nusing Abp.Modules;\n\nnamespace Abp.IO.LocalFileSystem\n{\n    //TODO 是否由本"
  },
  {
    "path": "src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/LocalFileSystemStorageSettingNames.cs",
    "chars": 466,
    "preview": "namespace Abp.IO.LocalFileSystem\n{\n    public static class LocalFileSystemStorageSettingNames\n    {\n        /// <summar"
  },
  {
    "path": "src/Abplus.IO.LocalFileSystem/IO/LocalFileSystem/LocalFileSystemStorageSettingProvider.cs",
    "chars": 1068,
    "preview": "using System.Collections.Generic;\nusing Abp.Configuration;\nusing Abp.Localization;\n\nnamespace Abp.IO.LocalFileSystem\n{\n"
  },
  {
    "path": "src/Abplus.IO.LocalFileSystem/IO/LocalFileSystemConsts.cs",
    "chars": 151,
    "preview": "namespace Abp.IO\n{\n    public class LocalFileSystemConsts\n    {\n        public const string LocalizationSourceName = \"A"
  },
  {
    "path": "src/Abplus.IO.LocalFileSystem/Localization/LocalFileSystemLocalizationConfigurer.cs",
    "chars": 787,
    "preview": "using Abp.Configuration.Startup;\nusing Abp.IO;\nusing Abp.Localization.Dictionaries;\nusing Abp.Localization.Dictionaries"
  },
  {
    "path": "src/Abplus.IO.LocalFileSystem/Localization/SourceFiles/AbplusLocalFileSystem-zh-Hans.xml",
    "chars": 245,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<localizationDictionary culture=\"zh-Hans\">\n  <texts>\n    <text name=\"StoreRootD"
  },
  {
    "path": "src/Abplus.IO.LocalFileSystem/Localization/SourceFiles/AbplusLocalFileSystem.xml",
    "chars": 254,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<localizationDictionary culture=\"en\">\n  <texts>\n    <text name=\"StoreRootDirect"
  },
  {
    "path": "src/Abplus.MqMessages/Abplus.MqMessages.csproj",
    "chars": 462,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\common.props\"></Import>\n  \n  <PropertyGroup>\n    <TargetFra"
  },
  {
    "path": "src/Abplus.MqMessages/Abplus.MqMessages.nuspec",
    "chars": 854,
    "preview": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</tit"
  },
  {
    "path": "src/Abplus.MqMessages/Configuration/Startup/ExceptionLogInterceptorRegistrar.cs",
    "chars": 901,
    "preview": "using Abp.Dependency;\nusing Abp.MqMessages.MqHandlers;\nusing Abp.MqMessages.MqHandlers.ExceptionLogging;\nusing Castle.C"
  },
  {
    "path": "src/Abplus.MqMessages/MqMessages/AuditingStores/AuditInfoMqMessage.cs",
    "chars": 1989,
    "preview": "using System;\n\nnamespace Abp.MqMessages.AuditingStores\n{\n    public class AuditInfoMqMessage\n    {\n        /// <summary"
  },
  {
    "path": "src/Abplus.MqMessages/MqMessages/AutoGeneration/DontGenerateMqMessage.cs",
    "chars": 262,
    "preview": "using System;\n\nnamespace Abp.MqMessages.AutoGeneration\n{\n    /// <summary>\n    /// 标记指定EventData不参与自动生成MqMessage\n    //"
  },
  {
    "path": "src/Abplus.MqMessages/MqMessages/AutoMapper/AutoEventsMapToMqMessagesHelper.cs",
    "chars": 1018,
    "preview": "using System.Linq;\nusing System.Reflection;\nusing Abp.MqMessages.Handlers;\nusing AutoMapper;\n\nnamespace Abp.MqMessages."
  },
  {
    "path": "src/Abplus.MqMessages/MqMessages/Handlers/EventDataPublishHandlerBase.cs",
    "chars": 1812,
    "preview": "using Abp.AutoMapper;\nusing Abp.Dependency;\nusing Abp.Domain.Uow;\nusing Abp.Events.Bus;\nusing Abp.Events.Bus.Handlers;\n"
  },
  {
    "path": "src/Abplus.MqMessages/MqMessages/MqHandlers/AbpMqHandlerBase.cs",
    "chars": 756,
    "preview": "using System;\nusing System.Threading.Tasks;\nusing Abp.Dependency;\nusing Abp.MqMessages.MessageTrackers;\nnamespace Abp.M"
  },
  {
    "path": "src/Abplus.MqMessages/MqMessages/MqHandlers/ExceptionLoggling/ExceptionLogAttribute.cs",
    "chars": 2131,
    "preview": "using System;\nusing Abp.Logging;\n\nnamespace Abp.MqMessages.MqHandlers.ExceptionLogging\n{\n    public class ExceptionLogA"
  },
  {
    "path": "src/Abplus.MqMessages/MqMessages/MqHandlers/ExceptionLoggling/ExceptionLogHandler.cs",
    "chars": 6030,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing System.Threading.Task"
  },
  {
    "path": "src/Abplus.MqMessages/MqMessages/MqHandlers/ExceptionLoggling/ExceptionLogInterceptor.cs",
    "chars": 267,
    "preview": "using Abp.Interceptors;\n\nnamespace Abp.MqMessages.MqHandlers.ExceptionLogging\n{\n    public class ExceptionLogIntercepto"
  },
  {
    "path": "src/Abplus.MqMessages.AuditingConsumerHandler/Abplus.MqMessages.AuditingConsumerHandler.csproj",
    "chars": 477,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  \n  <Import Project=\"..\\..\\common.props\"></Import>\n  \n  <PropertyGroup>\n    <TargetF"
  },
  {
    "path": "src/Abplus.MqMessages.AuditingConsumerHandler/Abplus.MqMessages.AuditingConsumerHandler.nuspec",
    "chars": 856,
    "preview": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</tit"
  },
  {
    "path": "src/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/AuditingConsumerRebusHandlerModule.cs",
    "chars": 748,
    "preview": "using Abp.Modules;\nusing System.Reflection;\n\nnamespace Abp.Auditing.AuditingStore\n{\n    public class AuditingConsumerRe"
  },
  {
    "path": "src/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/AuditingConsumerRebusHandlerModuleConfig.cs",
    "chars": 1169,
    "preview": "using Abp.MqMessages.AuditingStores;\nusing System;\nusing System.Collections.Generic;\n\nnamespace Abp.Auditing.AuditingSt"
  },
  {
    "path": "src/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/IAuditingConsumerRebusHandlerModuleConfig.cs",
    "chars": 1246,
    "preview": "using Abp.MqMessages.AuditingStores;\nusing System;\nusing System.Collections.Generic;\n\nnamespace Abp.Auditing.AuditingSt"
  },
  {
    "path": "src/Abplus.MqMessages.AuditingConsumerHandler/Auditing/AuditingStore/MqMessageAuditingStoreRebusHandler.cs",
    "chars": 1647,
    "preview": "using Abp.Dependency;\nusing Abp.MqMessages.AuditingStores;\nusing Abp.Threading.Timers;\nusing Rebus.Handlers;\nusing Syst"
  },
  {
    "path": "src/Abplus.MqMessages.AuditingConsumerHandler/Configuration/Startup/AuditingConsumerRebusHandlerConfigurationExtensions.cs",
    "chars": 510,
    "preview": "using Abp.Auditing.AuditingStore;\n\nnamespace Abp.Configuration.Startup\n{\n    public static class AuditingConsumerRebusH"
  },
  {
    "path": "src/Abplus.MqMessages.AuditingStore/Abplus.MqMessages.AuditingStore.csproj",
    "chars": 517,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\common.props\"></Import>\n\n  <PropertyGroup>\n    <TargetFrame"
  },
  {
    "path": "src/Abplus.MqMessages.AuditingStore/Abplus.MqMessages.AuditingStore.nuspec",
    "chars": 882,
    "preview": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</tit"
  },
  {
    "path": "src/Abplus.MqMessages.AuditingStore/Auditing/AuditingStores/MqMessageAuditingStore.cs",
    "chars": 2217,
    "preview": "using Abp.Dependency;\nusing Abp.MqMessages;\nusing Abp.MqMessages.AuditingStores;\nusing Abp.Threading;\nusing System;\nusi"
  },
  {
    "path": "src/Abplus.MqMessages.AuditingStore/Auditing/AuditingStores/MqMessageAuditingStoreModule.cs",
    "chars": 364,
    "preview": "using Abp.Modules;\nusing Abp.MqMessages.Publishers;\n\nnamespace Abp.Auditing.AuditingStores\n{\n    [DependsOn(typeof(Rebu"
  },
  {
    "path": "src/Abplus.MqMessages.IndexToES/Abplus.MqMessages.IndexToES.csproj",
    "chars": 1339,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\common.props\"></Import>\n\n  <PropertyGroup>\n    <TargetFrame"
  },
  {
    "path": "src/Abplus.MqMessages.IndexToES/Abplus.MqMessages.IndexToES.nuspec",
    "chars": 1180,
    "preview": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</tit"
  },
  {
    "path": "src/Abplus.MqMessages.IndexToES/DateTimeExtensions.cs",
    "chars": 892,
    "preview": "using System;\n\nnamespace Abp\n{\n    public static class DateTimeExtensions\n    {\n        public static string GetESIndex"
  },
  {
    "path": "src/Abplus.MqMessages.IndexToES/IndexFreq.cs",
    "chars": 460,
    "preview": "namespace Abp\n{\n    /// <summary>\n    /// 定义创建索引的频率\n    /// </summary>\n    public enum IndexFreq\n    {\n        /// <sum"
  },
  {
    "path": "src/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/MqMessageIndexToESHandlerBase.cs",
    "chars": 1269,
    "preview": "using System;\nusing System.Threading.Tasks;\nusing Abp.Dependency;\nusing Nest;\nusing Rebus.Handlers;\n\nnamespace Abp.MqMe"
  },
  {
    "path": "src/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/MqMessageIndexToESHandlerBuilder.cs",
    "chars": 1,
    "preview": ""
  },
  {
    "path": "src/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/MqMessageIndexToESHandlerBuilder.tt",
    "chars": 1480,
    "preview": "<#@ template debug=\"false\" hostspecific=\"true\" language=\"C#\" #>\n\n<#@ include file=\"T4MultipleOutputManager.ttinclude\" #"
  },
  {
    "path": "src/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/MqMessagesT4Register.cs",
    "chars": 221,
    "preview": "using System;\n\nnamespace Abp.MqMessages.MqHandlers\n{\n    public static class MqMessagesT4Register\n    {\n        public "
  },
  {
    "path": "src/Abplus.MqMessages.IndexToES/MqMessages/MqHandlers/T4MultipleOutputManager.ttinclude",
    "chars": 7419,
    "preview": "<#@ assembly name=\"System.Core\"\n#><#@ assembly name=\"System.Data.Linq\"\n#><#@ assembly name=\"EnvDTE\"\n#><#@ assembly name="
  },
  {
    "path": "src/Abplus.MqMessages.RebusCore/Abplus.MqMessages.RebusCore.csproj",
    "chars": 456,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\common.props\"></Import>\n\n  <PropertyGroup>\n    <TargetFrame"
  },
  {
    "path": "src/Abplus.MqMessages.RebusCore/Abplus.MqMessages.RebusCore.nuspec",
    "chars": 845,
    "preview": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</tit"
  },
  {
    "path": "src/Abplus.MqMessages.RebusCore/MqMessages/Publishers/RebusRabbitMqPublisher.cs",
    "chars": 1943,
    "preview": "using System.Threading.Tasks;\nusing Abp.Json;\nusing Abp.Runtime.Session;\nusing Abp.Threading;\nusing Castle.Core.Logging"
  },
  {
    "path": "src/Abplus.MqMessages.RebusCore/MqMessages/Publishers/RebusRabbitMqPublisherCoreModule.cs",
    "chars": 280,
    "preview": "using Abp.Modules;\n\nnamespace Abp.MqMessages.Publishers\n{\n    public class RebusRabbitMqPublisherCoreModule : AbpModule"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqConsumer/Abplus.MqMessages.RebusRabbitMqConsumer.csproj",
    "chars": 582,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n   <Import Project=\"..\\..\\common.props\"></Import>\n  \n  <PropertyGroup>\n    <TargetFr"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqConsumer/Abplus.MqMessages.RebusRabbitMqConsumer.nuspec",
    "chars": 990,
    "preview": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</tit"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqConsumer/Configuration/Startup/RebusRabbitMqConsumerConfigurationExtensions.cs",
    "chars": 503,
    "preview": "using Abp.MqMessages.Consumers;\n\nnamespace Abp.Configuration.Startup\n{\n    public static class RebusRabbitMqConsumerCon"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqConsumer/MqMessages/Consumers/IRebusRabbitMqConsumerModuleConfig.cs",
    "chars": 4267,
    "preview": "using System;\nusing System.Reflection;\nusing Rebus.Config;\nusing Rebus.Serialization;\n\nnamespace Abp.MqMessages.Consume"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqConsumer/MqMessages/Consumers/RebusRabbitMqConsumerModule.cs",
    "chars": 3513,
    "preview": "using Abp.Modules;\nusing Abp.MqMessages.Publishers;\nusing Rebus.Auditing.Messages;\nusing Rebus.Bus;\nusing Rebus.CastleW"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqConsumer/MqMessages/Consumers/RebusRabbitMqConsumerModuleConfig.cs",
    "chars": 3674,
    "preview": "using System;\nusing System.Reflection;\nusing Newtonsoft.Json;\nusing Rebus.Config;\n//using Rebus.NewtonsoftJson;//nupkg不"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqPublisher/Abplus.MqMessages.RebusRabbitMqPublisher.csproj",
    "chars": 574,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\common.props\"></Import>\n\n  <PropertyGroup>\n    <TargetFrame"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqPublisher/Abplus.MqMessages.RebusRabbitMqPublisher.nuspec",
    "chars": 990,
    "preview": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</tit"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqPublisher/Configuration/Startup/RebusRabbitMqPublisherConfigurationExtensions.cs",
    "chars": 510,
    "preview": "using Abp.MqMessages.Publishers;\n\nnamespace Abp.Configuration.Startup\n{\n    public static class RebusRabbitMqPublisherC"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqPublisher/MqMessages/Publishers/IRebusRabbitMqPublisherModuleConfig.cs",
    "chars": 1698,
    "preview": "using System;\nusing Rebus.Config;\n\nnamespace Abp.MqMessages.Publishers\n{\n    public interface IRebusRabbitMqPublisherMo"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqPublisher/MqMessages/Publishers/RebusRabbitMqPublisherModule.cs",
    "chars": 1769,
    "preview": "using System.Reflection;\nusing Abp.Modules;\nusing Rebus.Auditing.Messages;\nusing Rebus.Bus;\nusing Rebus.Config;\n\nnamesp"
  },
  {
    "path": "src/Abplus.MqMessages.RebusRabbitMqPublisher/MqMessages/Publishers/RebusRabbitMqPublisherModuleConfig.cs",
    "chars": 1456,
    "preview": "using System;\nusing Rebus.Config;\n\nnamespace Abp.MqMessages.Publishers\n{\n    public class RebusRabbitMqPublisherModuleC"
  },
  {
    "path": "src/Abplus.MqMessages.RedisStoreMessageTracker/Abplus.MqMessages.RedisStoreMessageTracker.csproj",
    "chars": 462,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\common.props\"></Import>\n  \n  <PropertyGroup>\n    <TargetFra"
  },
  {
    "path": "src/Abplus.MqMessages.RedisStoreMessageTracker/Abplus.MqMessages.RedisStoreMessageTracker.nuspec",
    "chars": 853,
    "preview": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</tit"
  },
  {
    "path": "src/Abplus.MqMessages.RedisStoreMessageTracker/MqMessages/MessageTrackers/RedisStoreMessageTracker.cs",
    "chars": 937,
    "preview": "using System;\nusing System.Threading.Tasks;\nusing Abp.Extensions;\nusing Abp.Runtime.Caching;\n\nnamespace Abp.MqMessages."
  },
  {
    "path": "src/Abplus.MqMessages.RedisStoreMessageTracker/MqMessages/MessageTrackers/RedisStoreMessageTrackerModule.cs",
    "chars": 644,
    "preview": "using Abp.Modules;\nusing Abp.Runtime.Caching.Redis;\n\nnamespace Abp.MqMessages.MessageTrackers\n{\n    [DependsOn(typeof(A"
  },
  {
    "path": "src/Abplus.T4.PermissionsFromJson/Abplus.T4.PermissionsFromJson.csproj",
    "chars": 746,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <Import Project=\"..\\..\\common.props\"></Import>\n  \n  <PropertyGroup>\n    <TargetFra"
  },
  {
    "path": "src/Abplus.T4.PermissionsFromJson/Abplus.T4.PermissionsFromJson.nuspec",
    "chars": 1068,
    "preview": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</tit"
  },
  {
    "path": "src/Abplus.T4.PermissionsFromJson/Authorization/Builders/BuilderUtils.cs",
    "chars": 6503,
    "preview": "using System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Linq.Dyn"
  },
  {
    "path": "src/Abplus.T4.PermissionsFromJson/Authorization/Builders/PermissionBuilder.cs",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/Abplus.T4.PermissionsFromJson/Authorization/Builders/PermissionBuilder.tt",
    "chars": 1606,
    "preview": "<#@ template debug=\"false\" hostspecific=\"true\" language=\"C#\" #>\n\n<#@ include file=\"T4MultipleOutputManager.ttinclude\" #"
  },
  {
    "path": "src/Abplus.T4.PermissionsFromJson/Authorization/Builders/Permissions/Sample.json",
    "chars": 433,
    "preview": "[\n  {\n    \"name\": \"User\",\n    \"displayName\": \"用户中心\",\n    \"children\": [\n      {\n        \"name\": \"UserInfo\",\n        \"dis"
  },
  {
    "path": "src/Abplus.T4.PermissionsFromJson/Authorization/Builders/T4MultipleOutputManager.ttinclude",
    "chars": 7419,
    "preview": "<#@ assembly name=\"System.Core\"\n#><#@ assembly name=\"System.Data.Linq\"\n#><#@ assembly name=\"EnvDTE\"\n#><#@ assembly name="
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.AuditingConsumerHandler/Program.cs",
    "chars": 275,
    "preview": "using System;\n\nnamespace Sample.AuditingConsumerHandler\n{\n    class Program\n    {\n        static void Main(string[] arg"
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.AuditingConsumerHandler/Sample.AuditingConsumerHandler.csproj",
    "chars": 611,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net5.0</Targe"
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.AuditingConsumerHandler/SampleAuditingConsumerHandlerBootstrap.cs",
    "chars": 482,
    "preview": "using Abp;\n\nnamespace Sample.AuditingConsumerHandler\n{\n    public class SampleAuditingConsumerHandlerBootstrap\n    {\n  "
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.AuditingConsumerHandler/SampleAuditingConsumerHandlerModule.cs",
    "chars": 2071,
    "preview": "using Abp.Auditing.AuditingStore;\nusing Abp.Configuration.Startup;\nusing Abp.Json;\nusing Abp.Modules;\nusing Abp.MqMessa"
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/Application/ITestAuditingStoreAppService.cs",
    "chars": 256,
    "preview": "using Abp.Application.Services;\nusing System.Threading.Tasks;\n\nnamespace Sample.MqMessageAuditingStore.Application\n{\n  "
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/Application/TestAuditingInput.cs",
    "chars": 186,
    "preview": "namespace Sample.MqMessageAuditingStore.Application\n{\n    public class TestAuditingInput\n    {\n        public string Na"
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/Application/TestAuditingStoreAppService.cs",
    "chars": 376,
    "preview": "using System;\nusing System.Threading.Tasks;\nusing Abp.Json;\n\nnamespace Sample.MqMessageAuditingStore.Application\n{\n    "
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/BackgroudWorker/TestWorker.cs",
    "chars": 944,
    "preview": "using Abp.Dependency;\nusing Abp.Threading;\nusing Abp.Threading.BackgroundWorkers;\nusing Abp.Threading.Timers;\nusing Sam"
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/Program.cs",
    "chars": 273,
    "preview": "using System;\n\nnamespace Sample.MqMessageAuditingStore\n{\n    class Program\n    {\n        static void Main(string[] args"
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/Sample.MqMessageAuditingStore.csproj",
    "chars": 633,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net5.0</Targe"
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/SampleMqMessageAuditingStoreBootstrap.cs",
    "chars": 479,
    "preview": "using Abp;\n\nnamespace Sample.MqMessageAuditingStore\n{\n    public class SampleMqMessageAuditingStoreBootstrap\n    {\n    "
  },
  {
    "path": "src/Samples/AuditingConsumer/Sample.MqMessageAuditingStore/SampleMqMessageAuditingStoreModule.cs",
    "chars": 1639,
    "preview": "using Abp.Auditing.AuditingStores;\nusing Abp.Configuration.Startup;\nusing Abp.Modules;\nusing Abp.MqMessages.Publishers;"
  },
  {
    "path": "src/Samples/FileStorage/Sample.AliyunOSSStorage/BackgroundWorker/TestWorker.cs",
    "chars": 1449,
    "preview": "using System;\nusing System.IO;\nusing Abp.Dependency;\nusing Abp.IO;\nusing Abp.Threading;\nusing Abp.Threading.BackgroundW"
  },
  {
    "path": "src/Samples/FileStorage/Sample.AliyunOSSStorage/Program.cs",
    "chars": 357,
    "preview": "using System;\n\nnamespace Sample.AliyunOSSStorage\n{\n    class Program\n    {\n        static void Main(string[] args)\n    "
  },
  {
    "path": "src/Samples/FileStorage/Sample.AliyunOSSStorage/Sample.AliyunOSSStorageConsole.csproj",
    "chars": 648,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net5.0</Targ"
  },
  {
    "path": "src/Samples/FileStorage/Sample.AliyunOSSStorage/SampleAliyunOSSStorageBootstrap.cs",
    "chars": 462,
    "preview": "using Abp;\n\nnamespace Sample.AliyunOSSStorage\n{\n    internal class SampleAliyunOSSStorageBootstrap\n    {\n        privat"
  },
  {
    "path": "src/Samples/FileStorage/Sample.AliyunOSSStorage/SampleAliyunOSSStorageModule.cs",
    "chars": 1236,
    "preview": "using System.Reflection;\nusing Abp.IO.AliyunOSSStorage;\nusing Abp.Modules;\nusing Abp.Configuration.Startup;\nusing Abp.T"
  },
  {
    "path": "src/Samples/FileStorage/Sample.AzureBlobStorage/BackgroundWorker/TestWorker.cs",
    "chars": 1410,
    "preview": "using System;\nusing System.IO;\nusing Abp.Dependency;\nusing Abp.IO;\nusing Abp.Threading;\nusing Abp.Threading.BackgroundW"
  },
  {
    "path": "src/Samples/FileStorage/Sample.AzureBlobStorage/Program.cs",
    "chars": 357,
    "preview": "using System;\n\nnamespace Sample.AzureBlobStorage\n{\n    class Program\n    {\n        static void Main(string[] args)\n    "
  },
  {
    "path": "src/Samples/FileStorage/Sample.AzureBlobStorage/Sample.AzureBlobStorageConsole.csproj",
    "chars": 647,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net5.0</Targe"
  },
  {
    "path": "src/Samples/FileStorage/Sample.AzureBlobStorage/SampleAzureBlobStorageBootstrap.cs",
    "chars": 462,
    "preview": "using Abp;\n\nnamespace Sample.AzureBlobStorage\n{\n    internal class SampleAzureBlobStorageBootstrap\n    {\n        privat"
  },
  {
    "path": "src/Samples/FileStorage/Sample.AzureBlobStorage/SampleAzureBlobStorageModule.cs",
    "chars": 1320,
    "preview": "using System.Reflection;\nusing Abp.Configuration.Startup;\nusing Abp.IO.AzureBlobStorage;\nusing Abp.Modules;\nusing Abp.T"
  },
  {
    "path": "src/Samples/FileStorage/Sample.LocalFileSystem/Program.cs",
    "chars": 355,
    "preview": "using System;\n\nnamespace Sample.LocalFileSystem\n{\n    class Program\n    {\n        static void Main(string[] args)\n     "
  },
  {
    "path": "src/Samples/FileStorage/Sample.LocalFileSystem/Sample.LocalFileSystemConsole.csproj",
    "chars": 504,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net5.0</Targe"
  },
  {
    "path": "src/Samples/FileStorage/Sample.LocalFileSystem/SampleLocalFileSystemBootstrap.cs",
    "chars": 459,
    "preview": "using Abp;\n\nnamespace Sample.LocalFileSystem\n{\n    internal class SampleLocalFileSystemBootstrap\n    {\n        private "
  },
  {
    "path": "src/Samples/FileStorage/Sample.LocalFileSystem/SampleLocalFileSystemModule.cs",
    "chars": 827,
    "preview": "using System.Reflection;\nusing Abp.IO.LocalFileSystem;\nusing Abp.Modules;\n\nnamespace Sample.LocalFileSystem\n{\n    [Depe"
  },
  {
    "path": "src/Samples/Sample.DotNetCoreConsumerHost/Handlers/TestHandler.cs",
    "chars": 726,
    "preview": "using Abp.MqMessages;\nusing Castle.Core.Logging;\nusing Rebus.Handlers;\nusing System.Threading.Tasks;\n\nnamespace Sample."
  },
  {
    "path": "src/Samples/Sample.DotNetCoreConsumerHost/Program.cs",
    "chars": 263,
    "preview": "using System;\n\nnamespace Sample.DotNetCoreConsumerHost\n{\n    class Program\n    {\n        static void Main(string[] args"
  },
  {
    "path": "src/Samples/Sample.DotNetCoreConsumerHost/Sample.DotNetCoreConsumerHost.csproj",
    "chars": 487,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net5.0</Targe"
  },
  {
    "path": "src/Samples/Sample.DotNetCoreConsumerHost/SampleConsumerHostBootstrap.cs",
    "chars": 459,
    "preview": "using Abp;\n\nnamespace Sample.DotNetCoreConsumerHost\n{\n    public class SampleConsumerHostBootstrap\n    {\n        privat"
  },
  {
    "path": "src/Samples/Sample.DotNetCoreConsumerHost/SampleConsumerHostModule.cs",
    "chars": 1109,
    "preview": "using Abp.Configuration.Startup;\nusing Abp.Modules;\nusing Abp.MqMessages.Consumers;\nusing System.Reflection;\n\nnamespace"
  },
  {
    "path": "src/Samples/Sample.DotNetCorePublisherHost/BackgroundWorker/TestWorker.cs",
    "chars": 894,
    "preview": "using Abp.Dependency;\nusing Abp.MqMessages;\nusing Abp.Threading.BackgroundWorkers;\nusing Abp.Threading.Timers;\nusing Sy"
  },
  {
    "path": "src/Samples/Sample.DotNetCorePublisherHost/Program.cs",
    "chars": 348,
    "preview": "using System;\n\nnamespace Sample.DotNetCorePublisherHost\n{\n    class Program\n    {\n        static void Main()\n        {\n"
  },
  {
    "path": "src/Samples/Sample.DotNetCorePublisherHost/Sample.DotNetCorePublisherHost.csproj",
    "chars": 594,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net5.0</Targ"
  },
  {
    "path": "src/Samples/Sample.DotNetCorePublisherHost/SamplePublisherHostBootstrap.cs",
    "chars": 462,
    "preview": "using Abp;\n\nnamespace Sample.DotNetCorePublisherHost\n{\n    public class SamplePublisherHostBootstrap\n    {\n        priv"
  },
  {
    "path": "src/Samples/Sample.DotNetCorePublisherHost/SamplePublisherHostModule.cs",
    "chars": 1254,
    "preview": "using Abp.Configuration.Startup;\nusing Abp.Modules;\nusing Abp.MqMessages.Publishers;\nusing Abp.Threading.BackgroundWork"
  },
  {
    "path": "src/Samples/Sample.DotNetFxConsumerHost/App.config",
    "chars": 1299,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NE"
  },
  {
    "path": "src/Samples/Sample.DotNetFxConsumerHost/DotNetFxConsumerHostBootstrap.cs",
    "chars": 376,
    "preview": "using Abp;\n\nnamespace Sample.DotNetFxConsumerHost\n{\n    public class DotNetFxConsumerHostBootstrap\n    {\n        privat"
  },
  {
    "path": "src/Samples/Sample.DotNetFxConsumerHost/DotNetFxConsumerHostModule.cs",
    "chars": 1196,
    "preview": "using Abp.Configuration.Startup;\nusing Abp.Modules;\nusing Abp.MqMessages.Consumers;\nusing Castle.Facilities.Logging;\nus"
  },
  {
    "path": "src/Samples/Sample.DotNetFxConsumerHost/Handlers/TestHandler.cs",
    "chars": 724,
    "preview": "using Abp.MqMessages;\nusing Castle.Core.Logging;\nusing Rebus.Handlers;\nusing System.Threading.Tasks;\n\nnamespace Sample."
  },
  {
    "path": "src/Samples/Sample.DotNetFxConsumerHost/NLog.config",
    "chars": 1368,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<nlog xmlns=\"http://www.nlog-project.org/schemas/NLog.xsd\"\n      xmlns:xsi=\"http"
  },
  {
    "path": "src/Samples/Sample.DotNetFxConsumerHost/NLog.xsd",
    "chars": 166019,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<xs:schema id=\"NLog\" targetNamespace=\"http://www.nlog-project.org/schemas/NLog.x"
  },
  {
    "path": "src/Samples/Sample.DotNetFxConsumerHost/Program.cs",
    "chars": 1569,
    "preview": "using System;\nusing Topshelf;\n\nnamespace Sample.DotNetFxConsumerHost\n{\n    class Program\n    {\n        static int Main("
  },
  {
    "path": "src/Samples/Sample.DotNetFxConsumerHost/Properties/AssemblyInfo.cs",
    "chars": 975,
    "preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// 有关程序集的一般信息由以下"
  },
  {
    "path": "src/Samples/Sample.DotNetFxConsumerHost/Sample.DotNetFxConsumerHost.csproj",
    "chars": 17218,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
  },
  {
    "path": "src/Samples/Sample.DotNetFxConsumerHost/packages.config",
    "chars": 4187,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Abp\" version=\"4.6.0\" targetFramework=\"net471\" />\n  <pa"
  },
  {
    "path": "src/Samples/Sample.DotNetFxPublisherHost/App.config",
    "chars": 1299,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NE"
  },
  {
    "path": "src/Samples/Sample.DotNetFxPublisherHost/BackgroundWorker/TestWorker.cs",
    "chars": 890,
    "preview": "using Abp.Dependency;\nusing Abp.MqMessages;\nusing Abp.Threading.BackgroundWorkers;\nusing Abp.Threading.Timers;\nusing Sy"
  },
  {
    "path": "src/Samples/Sample.DotNetFxPublisherHost/DotNetFxPublisherHostBootstrap.cs",
    "chars": 379,
    "preview": "using Abp;\n\nnamespace Sample.DotNetFxPublisherHost\n{\n    public class DotNetFxPublisherHostBootstrap\n    {\n        priv"
  },
  {
    "path": "src/Samples/Sample.DotNetFxPublisherHost/DotNetFxPublisherHostModule.cs",
    "chars": 1365,
    "preview": "using Abp.Configuration.Startup;\nusing Abp.Modules;\nusing Abp.MqMessages.Publishers;\nusing Abp.Threading.BackgroundWork"
  }
]

// ... and 260 more files (download for full content)

About this extraction

This page contains the full source code of the personball/abplus GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 460 files (1.6 MB), approximately 455.2k tokens, and a symbol index with 956 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!