Merge branch 'netcore/dev' into netcore/feature/align-infrastructure-namespaces

# Conflicts:
#	src/Umbraco.Core/Events/QueuingEventDispatcher.cs
#	src/Umbraco.Core/Logging/LogHttpRequestExtension.cs
#	src/Umbraco.Examine.Lucene/BackOfficeExamineSearcher.cs
#	src/Umbraco.Examine.Lucene/ExamineLuceneComposer.cs
#	src/Umbraco.Examine.Lucene/ExamineLuceneFinalComposer.cs
#	src/Umbraco.Examine.Lucene/Extensions/ExamineExtensions.cs
#	src/Umbraco.Examine.Lucene/ILuceneDirectoryFactory.cs
#	src/Umbraco.Infrastructure/Cache/DatabaseServerMessengerNotificationHandler.cs
#	src/Umbraco.Infrastructure/Cache/DefaultRepositoryCachePolicy.cs
#	src/Umbraco.Infrastructure/Cache/DistributedCacheBinder.cs
#	src/Umbraco.Infrastructure/Cache/DistributedCacheBinder_Handlers.cs
#	src/Umbraco.Infrastructure/Cache/DistributedCacheExtensions.cs
#	src/Umbraco.Infrastructure/Cache/FullDataSetRepositoryCachePolicy.cs
#	src/Umbraco.Infrastructure/Cache/RepositoryCachePolicyBase.cs
#	src/Umbraco.Infrastructure/Cache/SingleItemsOnlyRepositoryCachePolicy.cs
#	src/Umbraco.Infrastructure/Compose/AuditEventsComponent.cs
#	src/Umbraco.Infrastructure/Compose/BlockEditorComponent.cs
#	src/Umbraco.Infrastructure/Compose/NestedContentPropertyComponent.cs
#	src/Umbraco.Infrastructure/Compose/NestedContentPropertyComposer.cs
#	src/Umbraco.Infrastructure/Compose/NotificationsComponent.cs
#	src/Umbraco.Infrastructure/Compose/PublicAccessComponent.cs
#	src/Umbraco.Infrastructure/Compose/RelateOnCopyComponent.cs
#	src/Umbraco.Infrastructure/Compose/RelateOnTrashComponent.cs
#	src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Collections.cs
#	src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs
#	src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.DistributedCache.cs
#	src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Installer.cs
#	src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.MappingProfiles.cs
#	src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Repositories.cs
#	src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Services.cs
#	src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Uniques.cs
#	src/Umbraco.Infrastructure/Deploy/IGridCellValueConnector.cs
#	src/Umbraco.Infrastructure/EmailSender.cs
#	src/Umbraco.Infrastructure/Events/MigrationEventArgs.cs
#	src/Umbraco.Infrastructure/Examine/BaseValueSetBuilder.cs
#	src/Umbraco.Infrastructure/Examine/ContentIndexPopulator.cs
#	src/Umbraco.Infrastructure/Examine/ContentValueSetBuilder.cs
#	src/Umbraco.Infrastructure/Examine/ExamineExtensions.cs
#	src/Umbraco.Infrastructure/Examine/IBackOfficeExamineSearcher.cs
#	src/Umbraco.Infrastructure/Examine/IContentValueSetBuilder.cs
#	src/Umbraco.Infrastructure/Examine/IIndexDiagnostics.cs
#	src/Umbraco.Infrastructure/Examine/IPublishedContentValueSetBuilder.cs
#	src/Umbraco.Infrastructure/Examine/IndexRebuilder.cs
#	src/Umbraco.Infrastructure/Examine/MediaIndexPopulator.cs
#	src/Umbraco.Infrastructure/Examine/MediaValueSetBuilder.cs
#	src/Umbraco.Infrastructure/Examine/MemberIndexPopulator.cs
#	src/Umbraco.Infrastructure/Examine/MemberValueSetBuilder.cs
#	src/Umbraco.Infrastructure/Examine/NoopBackOfficeExamineSearcher.cs
#	src/Umbraco.Infrastructure/Examine/PublishedContentIndexPopulator.cs
#	src/Umbraco.Infrastructure/Examine/UmbracoExamineExtensions.cs
#	src/Umbraco.Infrastructure/Examine/UmbracoIndexConfig.cs
#	src/Umbraco.Infrastructure/HostedServices/HealthCheckNotifier.cs
#	src/Umbraco.Infrastructure/HostedServices/LogScrubber.cs
#	src/Umbraco.Infrastructure/HostedServices/ReportSiteTask.cs
#	src/Umbraco.Infrastructure/HostedServices/ScheduledPublishing.cs
#	src/Umbraco.Infrastructure/HostedServices/ServerRegistration/InstructionProcessTask.cs
#	src/Umbraco.Infrastructure/HostedServices/TempFileCleanup.cs
#	src/Umbraco.Infrastructure/IPublishedContentQuery.cs
#	src/Umbraco.Infrastructure/Install/FilePermissionHelper.cs
#	src/Umbraco.Infrastructure/Install/InstallHelper.cs
#	src/Umbraco.Infrastructure/Install/InstallStepCollection.cs
#	src/Umbraco.Infrastructure/Install/InstallSteps/DatabaseConfigureStep.cs
#	src/Umbraco.Infrastructure/Install/InstallSteps/DatabaseInstallStep.cs
#	src/Umbraco.Infrastructure/Install/InstallSteps/DatabaseUpgradeStep.cs
#	src/Umbraco.Infrastructure/Install/InstallSteps/NewInstallStep.cs
#	src/Umbraco.Infrastructure/Install/InstallSteps/StarterKitDownloadStep.cs
#	src/Umbraco.Infrastructure/Logging/Serilog/Enrichers/HttpRequestIdEnricher.cs
#	src/Umbraco.Infrastructure/Logging/Serilog/Enrichers/HttpRequestNumberEnricher.cs
#	src/Umbraco.Infrastructure/Logging/Serilog/LoggerConfigExtensions.cs
#	src/Umbraco.Infrastructure/Logging/Serilog/SerilogLogger.cs
#	src/Umbraco.Infrastructure/Logging/Viewer/ILogViewer.cs
#	src/Umbraco.Infrastructure/Logging/Viewer/LogViewerComposer.cs
#	src/Umbraco.Infrastructure/Logging/Viewer/SerilogLogViewerSourceBase.cs
#	src/Umbraco.Infrastructure/Manifest/DashboardAccessRuleConverter.cs
#	src/Umbraco.Infrastructure/Manifest/DataEditorConverter.cs
#	src/Umbraco.Infrastructure/Manifest/ManifestParser.cs
#	src/Umbraco.Infrastructure/Manifest/ValueValidatorConverter.cs
#	src/Umbraco.Infrastructure/Media/ImageDimensionExtractor.cs
#	src/Umbraco.Infrastructure/Migrations/Expressions/Create/Index/CreateIndexBuilder.cs
#	src/Umbraco.Infrastructure/Migrations/Expressions/Delete/KeysAndIndexes/DeleteKeysAndIndexesBuilder.cs
#	src/Umbraco.Infrastructure/Migrations/IMigrationContext.cs
#	src/Umbraco.Infrastructure/Migrations/Install/DatabaseBuilder.cs
#	src/Umbraco.Infrastructure/Migrations/Install/DatabaseDataCreator.cs
#	src/Umbraco.Infrastructure/Migrations/Install/DatabaseSchemaCreator.cs
#	src/Umbraco.Infrastructure/Migrations/Install/DatabaseSchemaCreatorFactory.cs
#	src/Umbraco.Infrastructure/Migrations/MigrationBase.cs
#	src/Umbraco.Infrastructure/Migrations/MigrationBase_Extra.cs
#	src/Umbraco.Infrastructure/Migrations/MigrationContext.cs
#	src/Umbraco.Infrastructure/Migrations/MigrationPlan.cs
#	src/Umbraco.Infrastructure/Migrations/PostMigrations/ClearCsrfCookies.cs
#	src/Umbraco.Infrastructure/Migrations/PostMigrations/PublishedSnapshotRebuilder.cs
#	src/Umbraco.Infrastructure/Migrations/PostMigrations/RebuildPublishedSnapshot.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/Upgrader.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_8_0_0/AddContentNuTable.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_8_0_0/ConvertRelatedLinksToMultiUrlPicker.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_8_0_0/DataTypeMigration.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_8_0_0/DataTypes/DropDownFlexiblePreValueMigrator.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_8_0_0/DataTypes/RenamingPreValueMigrator.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_8_0_0/DataTypes/UmbracoSliderPreValueMigrator.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_8_0_0/DataTypes/ValueListPreValueMigrator.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_8_0_0/DropDownPropertyEditorsMigration.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_8_0_0/FallbackLanguage.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_8_0_0/MergeDateAndDateTimePropertyEditor.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_8_0_0/Models/PropertyDataDto80.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_8_0_0/PropertyEditorsMigrationBase.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_8_0_0/RadioAndCheckboxPropertyEditorsMigration.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_8_0_0/TablesForScheduledPublishing.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_8_0_0/UpdatePickerIntegerValuesToUdi.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_8_1_0/ConvertTinyMceAndGridMediaUrlsToLocalLink.cs
#	src/Umbraco.Infrastructure/Models/Blocks/BlockEditorData.cs
#	src/Umbraco.Infrastructure/Models/Blocks/BlockEditorDataConverter.cs
#	src/Umbraco.Infrastructure/Models/Blocks/BlockItemData.cs
#	src/Umbraco.Infrastructure/Models/Blocks/BlockListEditorDataConverter.cs
#	src/Umbraco.Infrastructure/Models/Blocks/BlockListLayoutItem.cs
#	src/Umbraco.Infrastructure/Models/Mapping/EntityMapDefinition.cs
#	src/Umbraco.Infrastructure/Models/PathValidationExtensions.cs
#	src/Umbraco.Infrastructure/Packaging/PackageDataInstallation.cs
#	src/Umbraco.Infrastructure/Packaging/PackageInstallation.cs
#	src/Umbraco.Infrastructure/Persistence/DatabaseModelDefinitions/DefinitionFactory.cs
#	src/Umbraco.Infrastructure/Persistence/DatabaseModelDefinitions/IndexColumnDefinition.cs
#	src/Umbraco.Infrastructure/Persistence/DbConnectionExtensions.cs
#	src/Umbraco.Infrastructure/Persistence/Dtos/PropertyDataDto.cs
#	src/Umbraco.Infrastructure/Persistence/Factories/AuditEntryFactory.cs
#	src/Umbraco.Infrastructure/Persistence/Factories/ConsentFactory.cs
#	src/Umbraco.Infrastructure/Persistence/Factories/ContentBaseFactory.cs
#	src/Umbraco.Infrastructure/Persistence/Factories/ContentTypeFactory.cs
#	src/Umbraco.Infrastructure/Persistence/Factories/DataTypeFactory.cs
#	src/Umbraco.Infrastructure/Persistence/Factories/DictionaryItemFactory.cs
#	src/Umbraco.Infrastructure/Persistence/Factories/DictionaryTranslationFactory.cs
#	src/Umbraco.Infrastructure/Persistence/Factories/ExternalLoginFactory.cs
#	src/Umbraco.Infrastructure/Persistence/Factories/LanguageFactory.cs
#	src/Umbraco.Infrastructure/Persistence/Factories/MacroFactory.cs
#	src/Umbraco.Infrastructure/Persistence/Factories/MemberGroupFactory.cs
#	src/Umbraco.Infrastructure/Persistence/Factories/PropertyFactory.cs
#	src/Umbraco.Infrastructure/Persistence/Factories/PropertyGroupFactory.cs
#	src/Umbraco.Infrastructure/Persistence/Factories/PublicAccessEntryFactory.cs
#	src/Umbraco.Infrastructure/Persistence/Factories/RelationFactory.cs
#	src/Umbraco.Infrastructure/Persistence/Factories/RelationTypeFactory.cs
#	src/Umbraco.Infrastructure/Persistence/Factories/ServerRegistrationFactory.cs
#	src/Umbraco.Infrastructure/Persistence/Factories/TagFactory.cs
#	src/Umbraco.Infrastructure/Persistence/Factories/TemplateFactory.cs
#	src/Umbraco.Infrastructure/Persistence/Factories/UserFactory.cs
#	src/Umbraco.Infrastructure/Persistence/Factories/UserGroupFactory.cs
#	src/Umbraco.Infrastructure/Persistence/ISqlContext.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/AccessMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/AuditEntryMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/AuditItemMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/BaseMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/ConsentMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/ContentMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/ContentTypeMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/DataTypeMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/DictionaryMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/DictionaryTranslationMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/DomainMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/ExternalLoginMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/LanguageMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/MacroMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/MapperCollectionBuilder.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/MediaMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/MediaTypeMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/MemberGroupMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/MemberMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/MemberTypeMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/PropertyGroupMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/PropertyMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/PropertyTypeMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/RelationMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/RelationTypeMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/ServerRegistrationMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/SimpleContentTypeMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/TagMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/TemplateMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/UmbracoEntityMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/UserGroupMapper.cs
#	src/Umbraco.Infrastructure/Persistence/Mappers/UserMapper.cs
#	src/Umbraco.Infrastructure/Persistence/NPocoDatabaseExtensions.cs
#	src/Umbraco.Infrastructure/Persistence/NPocoSqlExtensions.cs
#	src/Umbraco.Infrastructure/Persistence/Querying/ExpressionVisitorBase.cs
#	src/Umbraco.Infrastructure/Persistence/Querying/ModelToSqlExpressionVisitor.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/IContentRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/IContentTypeRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/IContentTypeRepositoryBase.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/IDataTypeRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/IDocumentRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/IEntityRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/IMediaRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/IMediaTypeRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/IMemberRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/IMemberTypeRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/IPublicAccessRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/AuditEntryRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/AuditRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ConsentRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentRepositoryBase.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeCommonRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeRepositoryBase.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/DataTypeContainerRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/DataTypeRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/DictionaryRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/DocumentBlueprintRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/DocumentRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/DocumentTypeContainerRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/DomainRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/EntityContainerRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/EntityRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/EntityRepositoryBase.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ExternalLoginRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/KeyValueRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/LanguageRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/LanguageRepositoryExtensions.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MacroRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MediaRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MediaTypeContainerRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MediaTypeRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MemberGroupRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MemberRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MemberTypeRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/NotificationsRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/PartialViewMacroRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/PermissionRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/PublicAccessRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/RedirectUrlRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/RelationRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/RelationTypeRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/RepositoryBase.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ServerRegistrationRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/SimilarNodeName.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/SimpleGetRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TagRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TemplateRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/UserGroupRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/UserRepository.cs
#	src/Umbraco.Infrastructure/Persistence/SqlContext.cs
#	src/Umbraco.Infrastructure/Persistence/SqlSyntax/SqlServerSyntaxProvider.cs
#	src/Umbraco.Infrastructure/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs
#	src/Umbraco.Infrastructure/Persistence/SqlSyntaxExtensions.cs
#	src/Umbraco.Infrastructure/Persistence/UmbracoDatabaseExtensions.cs
#	src/Umbraco.Infrastructure/Persistence/UmbracoDatabaseFactory.cs
#	src/Umbraco.Infrastructure/PropertyEditors/BlockEditorPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/BlockListConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/BlockListPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/CheckBoxListPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ColorPickerConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ColorPickerPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ComplexEditorValidator.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ComplexPropertyEditorContentEventHandler.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ConfigurationEditorOfTConfiguration.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ContentPickerConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ContentPickerPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/DateTimeConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/DateTimePropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/DropDownFlexibleConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/DropDownFlexiblePropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/EmailAddressConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/EmailAddressPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/FileUploadPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/FileUploadPropertyValueEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/GridConfiguration.cs
#	src/Umbraco.Infrastructure/PropertyEditors/GridConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/GridPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/GridPropertyIndexValueFactory.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ImageCropperConfiguration.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ImageCropperConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyValueEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/LabelConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/LabelPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ListViewConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ListViewPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/MarkdownConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/MarkdownPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/MediaPickerConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/MediaPickerPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/MultiNodePickerConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/MultiNodeTreePickerPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/MultiUrlPickerConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/MultiUrlPickerPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/MultiUrlPickerValueEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/MultipleTextStringConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/MultipleTextStringPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/MultipleValueEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/NestedContentConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/NestedContentPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/PropertyEditorsComponent.cs
#	src/Umbraco.Infrastructure/PropertyEditors/PropertyEditorsComposer.cs
#	src/Umbraco.Infrastructure/PropertyEditors/RadioButtonsPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/RichTextConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/RichTextEditorPastedImages.cs
#	src/Umbraco.Infrastructure/PropertyEditors/RichTextPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/SliderConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/SliderPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/TagConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/TagsPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/TextAreaConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/TextAreaPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/TextboxConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/TextboxPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/TrueFalseConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/TrueFalsePropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/UploadFileTypeValidator.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/BlockEditorConverter.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/BlockListPropertyValueConverter.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/ColorPickerValueConverter.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/FlexibleDropdownPropertyValueConverter.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/GridValueConverter.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/ImageCropperValue.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/ImageCropperValueConverter.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/JsonValueConverter.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/MarkdownEditorValueConverter.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/MultiUrlPickerValueConverter.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/NestedContentManyValueConverter.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/NestedContentSingleValueConverter.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/NestedContentValueConverterBase.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/RteMacroRenderingValueConverter.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ValueListConfigurationEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ValueListUniqueValueValidator.cs
#	src/Umbraco.Infrastructure/PublishedContentQuery.cs
#	src/Umbraco.Infrastructure/Routing/ContentFinderByConfigured404.cs
#	src/Umbraco.Infrastructure/Routing/NotFoundHandlerHelper.cs
#	src/Umbraco.Infrastructure/Routing/RedirectTrackingComponent.cs
#	src/Umbraco.Infrastructure/Runtime/CoreRuntime.cs
#	src/Umbraco.Infrastructure/Runtime/SqlMainDomLock.cs
#	src/Umbraco.Infrastructure/RuntimeState.cs
#	src/Umbraco.Infrastructure/Scoping/IScope.cs
#	src/Umbraco.Infrastructure/Scoping/IScopeProvider.cs
#	src/Umbraco.Infrastructure/Scoping/Scope.cs
#	src/Umbraco.Infrastructure/Scoping/ScopeProvider.cs
#	src/Umbraco.Infrastructure/Scoping/ScopeReference.cs
#	src/Umbraco.Infrastructure/Search/BackgroundIndexRebuilder.cs
#	src/Umbraco.Infrastructure/Search/ExamineComponent.cs
#	src/Umbraco.Infrastructure/Search/ExamineComposer.cs
#	src/Umbraco.Infrastructure/Search/ExamineFinalComponent.cs
#	src/Umbraco.Infrastructure/Search/ExamineUserComponent.cs
#	src/Umbraco.Infrastructure/Search/UmbracoTreeSearcher.cs
#	src/Umbraco.Infrastructure/Security/BackOfficeClaimsPrincipalFactory.cs
#	src/Umbraco.Infrastructure/Security/BackOfficeIdentityUser.cs
#	src/Umbraco.Infrastructure/Security/BackOfficeUserStore.cs
#	src/Umbraco.Infrastructure/Security/IUmbracoUserManager.cs
#	src/Umbraco.Infrastructure/Security/SignOutAuditEventArgs.cs
#	src/Umbraco.Infrastructure/Security/UmbracoIdentityUser.cs
#	src/Umbraco.Infrastructure/Security/UmbracoUserManager.cs
#	src/Umbraco.Infrastructure/Security/UserInviteEventArgs.cs
#	src/Umbraco.Infrastructure/Serialization/ConfigurationEditorJsonSerializer.cs
#	src/Umbraco.Infrastructure/Services/IdKeyMap.cs
#	src/Umbraco.Infrastructure/Services/Implement/AuditService.cs
#	src/Umbraco.Infrastructure/Services/Implement/ConsentService.cs
#	src/Umbraco.Infrastructure/Services/Implement/ContentService.cs
#	src/Umbraco.Infrastructure/Services/Implement/ContentTypeBaseServiceProvider.cs
#	src/Umbraco.Infrastructure/Services/Implement/ContentTypeService.cs
#	src/Umbraco.Infrastructure/Services/Implement/ContentTypeServiceBase.cs
#	src/Umbraco.Infrastructure/Services/Implement/ContentTypeServiceBaseOfTItemTService.cs
#	src/Umbraco.Infrastructure/Services/Implement/ContentTypeServiceBaseOfTRepositoryTItemTService.cs
#	src/Umbraco.Infrastructure/Services/Implement/DataTypeService.cs
#	src/Umbraco.Infrastructure/Services/Implement/DomainService.cs
#	src/Umbraco.Infrastructure/Services/Implement/EntityService.cs
#	src/Umbraco.Infrastructure/Services/Implement/EntityXmlSerializer.cs
#	src/Umbraco.Infrastructure/Services/Implement/ExternalLoginService.cs
#	src/Umbraco.Infrastructure/Services/Implement/FileService.cs
#	src/Umbraco.Infrastructure/Services/Implement/KeyValueService.cs
#	src/Umbraco.Infrastructure/Services/Implement/LocalizationService.cs
#	src/Umbraco.Infrastructure/Services/Implement/MacroService.cs
#	src/Umbraco.Infrastructure/Services/Implement/MediaService.cs
#	src/Umbraco.Infrastructure/Services/Implement/MediaTypeService.cs
#	src/Umbraco.Infrastructure/Services/Implement/MemberGroupService.cs
#	src/Umbraco.Infrastructure/Services/Implement/MemberService.cs
#	src/Umbraco.Infrastructure/Services/Implement/MemberTypeService.cs
#	src/Umbraco.Infrastructure/Services/Implement/NotificationService.cs
#	src/Umbraco.Infrastructure/Services/Implement/PackagingService.cs
#	src/Umbraco.Infrastructure/Services/Implement/PropertyValidationService.cs
#	src/Umbraco.Infrastructure/Services/Implement/PublicAccessService.cs
#	src/Umbraco.Infrastructure/Services/Implement/RedirectUrlService.cs
#	src/Umbraco.Infrastructure/Services/Implement/RelationService.cs
#	src/Umbraco.Infrastructure/Services/Implement/RepositoryService.cs
#	src/Umbraco.Infrastructure/Services/Implement/ScopeRepositoryService.cs
#	src/Umbraco.Infrastructure/Services/Implement/ServerRegistrationService.cs
#	src/Umbraco.Infrastructure/Services/Implement/TagService.cs
#	src/Umbraco.Infrastructure/Services/Implement/UserService.cs
#	src/Umbraco.Infrastructure/Suspendable.cs
#	src/Umbraco.Infrastructure/Sync/BatchedDatabaseServerMessenger.cs
#	src/Umbraco.Infrastructure/Sync/DatabaseServerMessenger.cs
#	src/Umbraco.Infrastructure/Sync/RefreshInstruction.cs
#	src/Umbraco.Infrastructure/Sync/RefreshInstructionEnvelope.cs
#	src/Umbraco.Infrastructure/Sync/ServerMessengerBase.cs
#	src/Umbraco.Infrastructure/TagQuery.cs
#	src/Umbraco.Infrastructure/Trees/TreeRootNode.cs
#	src/Umbraco.Infrastructure/WebAssets/BackOfficeJavaScriptInitializer.cs
#	src/Umbraco.Infrastructure/WebAssets/BackOfficeWebAssets.cs
#	src/Umbraco.Infrastructure/WebAssets/RuntimeMinifierExtensions.cs
#	src/Umbraco.Infrastructure/WebAssets/ServerVariablesParser.cs
#	src/Umbraco.Infrastructure/WebAssets/ServerVariablesParsing.cs
#	src/Umbraco.ModelsBuilder.Embedded/Building/Builder.cs
#	src/Umbraco.ModelsBuilder.Embedded/DependencyInjection/UmbracoBuilderExtensions.cs
#	src/Umbraco.ModelsBuilder.Embedded/ModelsBuilderNotificationHandler.cs
#	src/Umbraco.ModelsBuilder.Embedded/PublishedElementExtensions.cs
#	src/Umbraco.Persistence.SqlCe/SqlCeBulkSqlInsertProvider.cs
#	src/Umbraco.Persistence.SqlCe/SqlCeEmbeddedDatabaseCreator.cs
#	src/Umbraco.Persistence.SqlCe/SqlCeSyntaxProvider.cs
#	src/Umbraco.PublishedCache.NuCache/ContentStore.cs
#	src/Umbraco.PublishedCache.NuCache/DataSource/ContentNestedData.cs
#	src/Umbraco.PublishedCache.NuCache/DependencyInjection/UmbracoBuilderExtensions.cs
#	src/Umbraco.PublishedCache.NuCache/MemberCache.cs
#	src/Umbraco.PublishedCache.NuCache/Persistence/NuCacheContentRepository.cs
#	src/Umbraco.PublishedCache.NuCache/Persistence/NuCacheContentService.cs
#	src/Umbraco.PublishedCache.NuCache/PublishedSnapshotService.cs
#	src/Umbraco.PublishedCache.NuCache/PublishedSnapshotServiceEventHandler.cs
#	src/Umbraco.PublishedCache.NuCache/SnapDictionary.cs
#	src/Umbraco.TestData/LoadTestController.cs
#	src/Umbraco.TestData/UmbracoTestDataController.cs
#	src/Umbraco.Tests.Benchmarks/ModelToSqlExpressionHelperBenchmarks.cs
#	src/Umbraco.Tests.Benchmarks/SqlTemplatesBenchmark.cs
#	src/Umbraco.Tests.Common/Builders/DataTypeBuilder.cs
#	src/Umbraco.Tests.Common/TestHelperBase.cs
#	src/Umbraco.Tests.Common/TestHelpers/MockedValueEditors.cs
#	src/Umbraco.Tests.Common/TestHelpers/SolidPublishedSnapshot.cs
#	src/Umbraco.Tests.Integration/Cache/DistributedCacheBinderTests.cs
#	src/Umbraco.Tests.Integration/DependencyInjection/UmbracoBuilderExtensions.cs
#	src/Umbraco.Tests.Integration/Implementations/TestHelper.cs
#	src/Umbraco.Tests.Integration/TestServerTest/TestAuthHandler.cs
#	src/Umbraco.Tests.Integration/Testing/BaseTestDatabase.cs
#	src/Umbraco.Tests.Integration/Testing/TestUmbracoDatabaseFactoryProvider.cs
#	src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTest.cs
#	src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTestWithContent.cs
#	src/Umbraco.Tests.Integration/Umbraco.Core/Mapping/ContentTypeModelMappingTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Core/Packaging/PackageDataInstallationTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Migrations/AdvancedMigrationTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/DatabaseBuilderTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/LocksTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/NPocoTests/NPocoBulkInsertTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/NPocoTests/NPocoFetchTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/AuditRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/ContentTypeRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/DictionaryRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/DocumentRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/DomainRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/EntityRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/KeyValueRepositoryTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/LanguageRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/MacroRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/MediaRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/MediaTypeRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/MemberRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/MemberTypeRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/NotificationsRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/PartialViewRepositoryTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/PublicAccessRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/RedirectUrlRepositoryTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/RelationRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/RelationTypeRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/ScriptRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/ServerRegistrationRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/StylesheetRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/TagRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/TemplateRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/UserGroupRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/UserRepositoryTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/SchemaValidationTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/SqlServerTableByTableTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/SyntaxProvider/SqlServerSyntaxProviderTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/UnitOfWorkTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Scoping/ScopeFileSystemsTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Scoping/ScopeTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Scoping/ScopedRepositoryTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/AuditServiceTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/CachedDataTypeServiceTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ContentEventsTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ContentServiceEventTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ContentServicePerformanceTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ContentServiceTagsTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ContentServiceTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ContentTypeServiceTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ContentTypeServiceVariantsTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/DataTypeServiceTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/EntityServiceTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ExternalLoginServiceTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/LocalizationServiceTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/MacroServiceTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/MediaServiceTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/MediaTypeServiceTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/MemberServiceTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/RedirectUrlServiceTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ThreadSafetyServiceTest.cs
#	src/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/UserServiceTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Web.BackOffice/Filters/ContentModelValidatorTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Web.BackOffice/UmbracoBackOfficeServiceCollectionExtensionsTests.cs
#	src/Umbraco.Tests.Integration/Umbraco.Web.Website/Routing/FrontEndRouteTests.cs
#	src/Umbraco.Tests.UnitTests/AutoFixture/AutoMoqDataAttribute.cs
#	src/Umbraco.Tests.UnitTests/TestHelpers/BaseUsingSqlSyntax.cs
#	src/Umbraco.Tests.UnitTests/TestHelpers/TestHelper.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/BackOffice/BackOfficeClaimsPrincipalFactoryTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/Cache/DefaultCachePolicyTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/Cache/FullDataSetCachePolicyTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/Cache/SingleItemsOnlyCachePolicyTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/Components/ComponentTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/Composing/TypeLoaderTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Extensions/HealthCheckSettingsExtensionsTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/HealthChecksSettingsValidatorTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/NCronTabParserTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/CoreThings/UdiTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/Manifest/ManifestParserTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/VariationTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/BlockEditorComponentTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/BlockListPropertyValueConverterTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/ColorListValidatorTest.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/ConvertersTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/DataValueReferenceFactoryCollectionTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/EnsureUniqueValuesValidatorTest.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/MultiValuePropertyEditorTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/PropertyEditorValueConverterTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/Published/ConvertersTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/Published/NestedContentTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/Published/PropertyCacheLevelTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/ReflectionUtilitiesTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Core/Scoping/ScopeEventDispatcherTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Examine/UmbracoContentValueSetValidatorTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/HostedServices/HealthCheckNotifierTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/HostedServices/KeepAliveTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/HostedServices/LogScrubberTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/HostedServices/ScheduledPublishingTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/HostedServices/ServerRegistration/InstructionProcessTaskTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/HostedServices/ServerRegistration/TouchServerTaskTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/HostedServices/TempFileCleanupTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Media/ImageSharpImageUrlGeneratorTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/AlterMigrationTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/MigrationPlanTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/MigrationTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/PostMigrationTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/PathValidationTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/ContentMapperTest.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/ContentTypeMapperTest.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/DataTypeMapperTest.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/DictionaryMapperTest.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/DictionaryTranslationMapperTest.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/LanguageMapperTest.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/MediaMapperTest.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/PropertyGroupMapperTest.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/PropertyTypeMapperTest.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/RelationMapperTest.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Mappers/RelationTypeMapperTest.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/NPocoTests/NPocoSqlExtensionsTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/NPocoTests/NPocoSqlTemplateTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/NPocoTests/NPocoSqlTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Querying/ContentTypeRepositorySqlClausesTest.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Querying/DataTypeDefinitionRepositorySqlClausesTest.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Querying/ExpressionTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Querying/MediaRepositorySqlClausesTest.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Querying/MediaTypeRepositorySqlClausesTest.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Persistence/Querying/QueryBuilderTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Serialization/JsonNetSerializerTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Services/AmbiguousEventTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Services/PropertyValidationServiceTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.ModelsBuilder.Embedded/BuilderTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.PublishedCache.NuCache/SnapDictionaryTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/UsersControllerTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/AngularIntegration/JsInitializationTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/AngularIntegration/ServerVariablesParserTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/ImageCropperTest.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Macros/MacroParserTests.cs
#	src/Umbraco.Tests.UnitTests/Umbraco.Web.Website/Controllers/SurfaceControllerTests.cs
#	src/Umbraco.Tests/Cache/PublishedCache/PublishedMediaCacheTests.cs
#	src/Umbraco.Tests/Issues/U9560.cs
#	src/Umbraco.Tests/LegacyXmlPublishedCache/DictionaryPublishedContent.cs
#	src/Umbraco.Tests/LegacyXmlPublishedCache/LegacyBackgroundTask/BackgroundTaskRunner.cs
#	src/Umbraco.Tests/LegacyXmlPublishedCache/PublishedContentCache.cs
#	src/Umbraco.Tests/LegacyXmlPublishedCache/PublishedMediaCache.cs
#	src/Umbraco.Tests/LegacyXmlPublishedCache/PublishedMemberCache.cs
#	src/Umbraco.Tests/LegacyXmlPublishedCache/PublishedSnapshot.cs
#	src/Umbraco.Tests/LegacyXmlPublishedCache/SafeXmlReaderWriter.cs
#	src/Umbraco.Tests/LegacyXmlPublishedCache/XmlPublishedContent.cs
#	src/Umbraco.Tests/LegacyXmlPublishedCache/XmlPublishedProperty.cs
#	src/Umbraco.Tests/LegacyXmlPublishedCache/XmlPublishedSnapshotService.cs
#	src/Umbraco.Tests/LegacyXmlPublishedCache/XmlStore.cs
#	src/Umbraco.Tests/Models/MediaXmlTest.cs
#	src/Umbraco.Tests/Persistence/Mappers/MapperTestBase.cs
#	src/Umbraco.Tests/Persistence/NPocoTests/PetaPocoCachesTest.cs
#	src/Umbraco.Tests/PublishedContent/NuCacheChildrenTests.cs
#	src/Umbraco.Tests/PublishedContent/NuCacheTests.cs
#	src/Umbraco.Tests/PublishedContent/PublishedContentDataTableTests.cs
#	src/Umbraco.Tests/PublishedContent/PublishedContentMoreTests.cs
#	src/Umbraco.Tests/PublishedContent/PublishedContentSnapshotTestBase.cs
#	src/Umbraco.Tests/PublishedContent/PublishedContentTestBase.cs
#	src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs
#	src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs
#	src/Umbraco.Tests/PublishedContent/PublishedRouterTests.cs
#	src/Umbraco.Tests/PublishedContent/SolidPublishedSnapshot.cs
#	src/Umbraco.Tests/Routing/BaseUrlProviderTest.cs
#	src/Umbraco.Tests/Routing/ContentFinderByAliasTests.cs
#	src/Umbraco.Tests/Routing/ContentFinderByAliasWithDomainsTests.cs
#	src/Umbraco.Tests/Routing/ContentFinderByIdTests.cs
#	src/Umbraco.Tests/Routing/ContentFinderByUrlAndTemplateTests.cs
#	src/Umbraco.Tests/Routing/ContentFinderByUrlTests.cs
#	src/Umbraco.Tests/Routing/ContentFinderByUrlWithDomainsTests.cs
#	src/Umbraco.Tests/Routing/DomainsAndCulturesTests.cs
#	src/Umbraco.Tests/Routing/MediaUrlProviderTests.cs
#	src/Umbraco.Tests/Routing/UrlProviderWithoutHideTopLevelNodeFromPathTests.cs
#	src/Umbraco.Tests/Routing/UrlRoutesTests.cs
#	src/Umbraco.Tests/Scoping/ScopedNuCacheTests.cs
#	src/Umbraco.Tests/Scoping/ScopedXmlTests.cs
#	src/Umbraco.Tests/Services/TestWithSomeContentBase.cs
#	src/Umbraco.Tests/TestHelpers/BaseUsingSqlCeSyntax.cs
#	src/Umbraco.Tests/TestHelpers/BaseWebTest.cs
#	src/Umbraco.Tests/TestHelpers/ControllerTesting/AuthenticateEverythingMiddleware.cs
#	src/Umbraco.Tests/TestHelpers/ControllerTesting/TestControllerActivatorBase.cs
#	src/Umbraco.Tests/TestHelpers/Entities/MockedContent.cs
#	src/Umbraco.Tests/TestHelpers/Entities/MockedContentTypes.cs
#	src/Umbraco.Tests/TestHelpers/Entities/MockedMedia.cs
#	src/Umbraco.Tests/TestHelpers/Entities/MockedMember.cs
#	src/Umbraco.Tests/TestHelpers/Entities/MockedPropertyTypes.cs
#	src/Umbraco.Tests/TestHelpers/Stubs/TestLastChanceFinder.cs
#	src/Umbraco.Tests/TestHelpers/Stubs/TestUserPasswordConfig.cs
#	src/Umbraco.Tests/TestHelpers/TestHelper.cs
#	src/Umbraco.Tests/TestHelpers/TestObjects-Mocks.cs
#	src/Umbraco.Tests/TestHelpers/TestObjects.cs
#	src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs
#	src/Umbraco.Tests/Testing/Objects/TestDataSource.cs
#	src/Umbraco.Tests/Testing/UmbracoTestBase.cs
#	src/Umbraco.Tests/UmbracoExamine/EventsTest.cs
#	src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs
#	src/Umbraco.Tests/UmbracoExamine/IndexTest.cs
#	src/Umbraco.Tests/UmbracoExamine/SearchTests.cs
#	src/Umbraco.Tests/Web/PublishedContentQueryTests.cs
#	src/Umbraco.Web.BackOffice/Controllers/AuthenticationController.cs
#	src/Umbraco.Web.BackOffice/Controllers/BackOfficeController.cs
#	src/Umbraco.Web.BackOffice/Controllers/BackOfficeServerVariables.cs
#	src/Umbraco.Web.BackOffice/Controllers/ContentController.cs
#	src/Umbraco.Web.BackOffice/Controllers/ContentTypeController.cs
#	src/Umbraco.Web.BackOffice/Controllers/CurrentUserController.cs
#	src/Umbraco.Web.BackOffice/Controllers/EntityController.cs
#	src/Umbraco.Web.BackOffice/Controllers/ExamineManagementController.cs
#	src/Umbraco.Web.BackOffice/Controllers/LogController.cs
#	src/Umbraco.Web.BackOffice/Controllers/LogViewerController.cs
#	src/Umbraco.Web.BackOffice/Controllers/MediaController.cs
#	src/Umbraco.Web.BackOffice/Controllers/MemberController.cs
#	src/Umbraco.Web.BackOffice/Controllers/PreviewController.cs
#	src/Umbraco.Web.BackOffice/Controllers/PublishedSnapshotCacheStatusController.cs
#	src/Umbraco.Web.BackOffice/Controllers/SectionController.cs
#	src/Umbraco.Web.BackOffice/Controllers/TemplateQueryController.cs
#	src/Umbraco.Web.BackOffice/Controllers/UsersController.cs
#	src/Umbraco.Web.BackOffice/DependencyInjection/ServiceCollectionExtensions.cs
#	src/Umbraco.Web.BackOffice/DependencyInjection/UmbracoBuilderExtensions.cs
#	src/Umbraco.Web.BackOffice/Extensions/HtmlHelperBackOfficeExtensions.cs
#	src/Umbraco.Web.BackOffice/Filters/CheckIfUserTicketDataIsStaleAttribute.cs
#	src/Umbraco.Web.BackOffice/Security/BackOfficePasswordHasher.cs
#	src/Umbraco.Web.BackOffice/Security/BackOfficeSecurityStampValidator.cs
#	src/Umbraco.Web.BackOffice/Security/BackOfficeSessionIdValidator.cs
#	src/Umbraco.Web.BackOffice/Security/BackOfficeSignInManager.cs
#	src/Umbraco.Web.BackOffice/Security/BackOfficeUserManagerAuditer.cs
#	src/Umbraco.Web.BackOffice/Security/ConfigureBackOfficeIdentityOptions.cs
#	src/Umbraco.Web.BackOffice/Security/ExternalSignInAutoLinkOptions.cs
#	src/Umbraco.Web.BackOffice/Security/IBackOfficeSignInManager.cs
#	src/Umbraco.Web.BackOffice/Security/PasswordChanger.cs
#	src/Umbraco.Web.BackOffice/Trees/ApplicationTreeController.cs
#	src/Umbraco.Web.BackOffice/Trees/ContentTreeController.cs
#	src/Umbraco.Web.BackOffice/Trees/ContentTypeTreeController.cs
#	src/Umbraco.Web.BackOffice/Trees/DataTypeTreeController.cs
#	src/Umbraco.Web.BackOffice/Trees/MediaTreeController.cs
#	src/Umbraco.Web.BackOffice/Trees/MediaTypeTreeController.cs
#	src/Umbraco.Web.BackOffice/Trees/MemberTreeController.cs
#	src/Umbraco.Web.BackOffice/Trees/MemberTypeTreeController.cs
#	src/Umbraco.Web.BackOffice/Trees/TemplatesTreeController.cs
#	src/Umbraco.Web.Common/Controllers/PluginController.cs
#	src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs
#	src/Umbraco.Web.Common/Extensions/ApplicationBuilderExtensions.cs
#	src/Umbraco.Web.Common/Extensions/ImageCropperTemplateCoreExtensions.cs
#	src/Umbraco.Web.Common/Extensions/ImageCropperTemplateExtensions.cs
#	src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs
#	src/Umbraco.Web.Common/Install/InstallApiController.cs
#	src/Umbraco.Web.Common/Install/InstallController.cs
#	src/Umbraco.Web.Common/Middleware/UmbracoRequestLoggingMiddleware.cs
#	src/Umbraco.Web.Common/Middleware/UmbracoRequestMiddleware.cs
#	src/Umbraco.Web.Common/Security/BackOfficeUserManager.cs
#	src/Umbraco.Web.Common/UmbracoHelper.cs
#	src/Umbraco.Web.UI.NetCore/Views/Partials/grid/editors/media.cshtml
#	src/Umbraco.Web.UI.NetCore/umbraco/PartialViewMacros/Templates/Gallery.cshtml
#	src/Umbraco.Web.UI.NetCore/umbraco/PartialViewMacros/Templates/ListChildPagesFromChangeableSource.cshtml
#	src/Umbraco.Web.UI.NetCore/umbraco/PartialViewMacros/Templates/ListImagesFromMediaFolder.cshtml
#	src/Umbraco.Web.UI.NetCore/umbraco/UmbracoBackOffice/AuthorizeUpgrade.cshtml
#	src/Umbraco.Web.UI.NetCore/umbraco/UmbracoBackOffice/Default.cshtml
#	src/Umbraco.Web.UI.NetCore/umbraco/UmbracoBackOffice/Preview.cshtml
#	src/Umbraco.Web.Website/Controllers/SurfaceController.cs
#	src/Umbraco.Web.Website/Controllers/UmbLoginController.cs
#	src/Umbraco.Web.Website/Controllers/UmbLoginStatusController.cs
#	src/Umbraco.Web.Website/Controllers/UmbProfileController.cs
#	src/Umbraco.Web.Website/Controllers/UmbRegisterController.cs
#	src/Umbraco.Web.Website/DependencyInjection/UmbracoBuilderExtensions.cs
#	src/Umbraco.Web.Website/Extensions/PublishedContentExtensions.cs
#	src/Umbraco.Web/Composing/Current.cs
#	src/Umbraco.Web/HttpContextUmbracoContextAccessor.cs
#	src/Umbraco.Web/Macros/MemberUserKeyProvider.cs
#	src/Umbraco.Web/Mvc/PluginController.cs
#	src/Umbraco.Web/Mvc/RenderRouteHandler.cs
#	src/Umbraco.Web/Mvc/RouteDefinition.cs
#	src/Umbraco.Web/Mvc/SurfaceController.cs
#	src/Umbraco.Web/Runtime/AspNetUmbracoBootPermissionChecker.cs
#	src/Umbraco.Web/Security/ActiveDirectoryBackOfficeUserPasswordChecker.cs
#	src/Umbraco.Web/Security/AuthenticationOptionsExtensions.cs
#	src/Umbraco.Web/Security/BackofficeSecurity.cs
#	src/Umbraco.Web/Security/Providers/MembersRoleProvider.cs
#	src/Umbraco.Web/Security/UmbracoMembershipProviderBase.cs
#	src/Umbraco.Web/UmbracoApplication.cs
#	src/Umbraco.Web/UmbracoApplicationBase.cs
#	src/Umbraco.Web/UmbracoContext.cs
#	src/Umbraco.Web/UmbracoContextFactory.cs
#	src/Umbraco.Web/UmbracoDbProviderFactoryCreator.cs
#	src/Umbraco.Web/UmbracoHttpHandler.cs
#	src/Umbraco.Web/UmbracoWebService.cs
#	src/Umbraco.Web/WebApi/UmbracoApiController.cs
#	src/Umbraco.Web/WebApi/UmbracoApiControllerBase.cs
#	src/Umbraco.Web/WebApi/UmbracoAuthorizeAttribute.cs
#	src/Umbraco.Web/WebApi/UmbracoAuthorizedApiController.cs
This commit is contained in:
Mole
2021-02-18 14:52:18 +01:00
14 changed files with 59 additions and 25 deletions

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Reflection;
using Microsoft.Extensions.Logging;
namespace Umbraco.Cms.Core.Composing
{
@@ -14,6 +15,7 @@ namespace Umbraco.Cms.Core.Composing
public class DefaultUmbracoAssemblyProvider : IAssemblyProvider
{
private readonly Assembly _entryPointAssembly;
private readonly ILoggerFactory _loggerFactory;
private static readonly string[] UmbracoCoreAssemblyNames = new[]
{
"Umbraco.Core",
@@ -26,9 +28,10 @@ namespace Umbraco.Cms.Core.Composing
"Umbraco.Web.Website",
};
public DefaultUmbracoAssemblyProvider(Assembly entryPointAssembly)
public DefaultUmbracoAssemblyProvider(Assembly entryPointAssembly, ILoggerFactory loggerFactory)
{
_entryPointAssembly = entryPointAssembly ?? throw new ArgumentNullException(nameof(entryPointAssembly));
_loggerFactory = loggerFactory;
}
// TODO: It would be worth investigating a netcore3 version of this which would use
@@ -41,7 +44,7 @@ namespace Umbraco.Cms.Core.Composing
{
get
{
var finder = new FindAssembliesWithReferencesTo(new[] { _entryPointAssembly }, UmbracoCoreAssemblyNames, true);
var finder = new FindAssembliesWithReferencesTo(new[] { _entryPointAssembly }, UmbracoCoreAssemblyNames, true, _loggerFactory);
return finder.Find();
}
}

View File

@@ -2,6 +2,7 @@
using System.IO;
using System.Linq;
using System.Reflection;
using Microsoft.Extensions.Logging;
namespace Umbraco.Cms.Core.Composing
{
@@ -16,6 +17,7 @@ namespace Umbraco.Cms.Core.Composing
private readonly Assembly[] _referenceAssemblies;
private readonly string[] _targetAssemblies;
private readonly bool _includeTargets;
private readonly ILoggerFactory _loggerFactory;
/// <summary>
/// Constructor
@@ -23,11 +25,13 @@ namespace Umbraco.Cms.Core.Composing
/// <param name="referenceAssemblies">Entry point assemblies</param>
/// <param name="targetAssemblyNames">Used to check if the entry point or it's transitive assemblies reference these assembly names</param>
/// <param name="includeTargets">If true will also use the target assembly names as entry point assemblies</param>
public FindAssembliesWithReferencesTo(Assembly[] referenceAssemblies, string[] targetAssemblyNames, bool includeTargets)
/// <param name="loggerFactory">Logger factory for when scanning goes wrong</param>
public FindAssembliesWithReferencesTo(Assembly[] referenceAssemblies, string[] targetAssemblyNames, bool includeTargets, ILoggerFactory loggerFactory)
{
_referenceAssemblies = referenceAssemblies;
_targetAssemblies = targetAssemblyNames;
_includeTargets = includeTargets;
_loggerFactory = loggerFactory;
}
public IEnumerable<Assembly> Find()
@@ -53,7 +57,7 @@ namespace Umbraco.Cms.Core.Composing
}
}
var provider = new ReferenceResolver(_targetAssemblies, referenceItems);
var provider = new ReferenceResolver(_targetAssemblies, referenceItems, _loggerFactory.CreateLogger<ReferenceResolver>());
var assemblyNames = provider.ResolveAssemblies();
return assemblyNames.ToList();
}

View File

@@ -4,6 +4,8 @@ using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Security;
using Microsoft.Extensions.Logging;
namespace Umbraco.Cms.Core.Composing
{
@@ -19,11 +21,12 @@ namespace Umbraco.Cms.Core.Composing
private readonly IReadOnlyList<Assembly> _assemblies;
private readonly Dictionary<Assembly, Classification> _classifications;
private readonly List<Assembly> _lookup = new List<Assembly>();
public ReferenceResolver(IReadOnlyList<string> targetAssemblies, IReadOnlyList<Assembly> entryPointAssemblies)
private readonly ILogger _logger;
public ReferenceResolver(IReadOnlyList<string> targetAssemblies, IReadOnlyList<Assembly> entryPointAssemblies, ILogger<ReferenceResolver> logger)
{
_umbracoAssemblies = new HashSet<string>(targetAssemblies, StringComparer.Ordinal);
_assemblies = entryPointAssemblies;
_logger = logger;
_classifications = new Dictionary<Assembly, Classification>();
foreach (var item in entryPointAssemblies)
@@ -54,19 +57,39 @@ namespace Umbraco.Cms.Core.Composing
{
foreach(var dll in Directory.EnumerateFiles(dir, "*.dll"))
{
var assemblyName = AssemblyName.GetAssemblyName(dll);
AssemblyName assemblyName = null;
try
{
assemblyName = AssemblyName.GetAssemblyName(dll);
}
catch (BadImageFormatException e)
{
_logger.LogDebug(e, "Could not load {dll} for type scanning, skipping", dll);
}
catch (SecurityException e)
{
_logger.LogError(e, "Could not access {dll} for type scanning due to a security problem", dll);
}
catch (Exception e)
{
_logger.LogInformation(e, "Error: could not load {dll} for type scanning", dll);
}
// don't include if this is excluded
if (TypeFinder.KnownAssemblyExclusionFilter.Any(f => assemblyName.FullName.StartsWith(f, StringComparison.InvariantCultureIgnoreCase)))
continue;
if (assemblyName != null)
{
// don't include if this is excluded
if (TypeFinder.KnownAssemblyExclusionFilter.Any(f =>
assemblyName.FullName.StartsWith(f, StringComparison.InvariantCultureIgnoreCase)))
continue;
// don't include this item if it's Umbraco
// TODO: We should maybe pass an explicit list of these names in?
if (assemblyName.FullName.StartsWith("Umbraco.") || assemblyName.Name.EndsWith(".Views"))
continue;
// don't include this item if it's Umbraco
// TODO: We should maybe pass an explicit list of these names in?
if (assemblyName.FullName.StartsWith("Umbraco.") || assemblyName.Name.EndsWith(".Views"))
continue;
var assembly = Assembly.Load(assemblyName);
assemblies.Add(assembly);
var assembly = Assembly.Load(assemblyName);
assemblies.Add(assembly);
}
}
}

View File

@@ -5,6 +5,7 @@ using Microsoft.Extensions.Configuration.Json;
using Microsoft.Extensions.FileProviders;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Umbraco.Cms.Core.Configuration;
namespace Umbraco.Cms.Core.Configuration
{

View File

@@ -1,5 +1,6 @@
using System;
using NCrontab;
using Umbraco.Cms.Core.Configuration;
namespace Umbraco.Cms.Core.Configuration
{

View File

@@ -4,6 +4,7 @@ using System.Linq;
using Serilog;
using Serilog.Events;
using Serilog.Parsing;
using Umbraco.Cms.Core.Logging;
namespace Umbraco.Cms.Core.Logging
{

View File

@@ -4,7 +4,6 @@ using System.Reflection;
using NPoco;
using Umbraco.Cms.Core;
using Umbraco.Cms.Infrastructure.Persistence.SqlSyntax;
using Umbraco.Extensions;
namespace Umbraco.Extensions
{

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Umbraco.Cms.Core.Scoping;
namespace Umbraco.Cms.Core.Scoping
{

View File

@@ -14,14 +14,14 @@ namespace Umbraco.Tests.Benchmarks
[Benchmark(Baseline = true)]
public void WithGetReferencingAssembliesCheck()
{
var typeFinder1 = new TypeFinder(new NullLogger<TypeFinder>(), new DefaultUmbracoAssemblyProvider(GetType().Assembly), new VaryingRuntimeHash());
var typeFinder1 = new TypeFinder(new NullLogger<TypeFinder>(), new DefaultUmbracoAssemblyProvider(GetType().Assembly, NullLoggerFactory.Instance), new VaryingRuntimeHash());
var found = typeFinder1.FindClassesOfType<IDiscoverable>().Count();
}
[Benchmark]
public void WithoutGetReferencingAssembliesCheck()
{
var typeFinder2 = new TypeFinder(new NullLogger<TypeFinder>(), new DefaultUmbracoAssemblyProvider(GetType().Assembly), new VaryingRuntimeHash());
var typeFinder2 = new TypeFinder(new NullLogger<TypeFinder>(), new DefaultUmbracoAssemblyProvider(GetType().Assembly, NullLoggerFactory.Instance), new VaryingRuntimeHash());
typeFinder2.QueryWithReferencingAssemblies = false;
var found = typeFinder2.FindClassesOfType<IDiscoverable>().Count();
}

View File

@@ -44,7 +44,7 @@ namespace Umbraco.Cms.Tests.Common
protected TestHelperBase(Assembly entryAssembly)
{
MainDom = new SimpleMainDom();
_typeFinder = new TypeFinder(NullLoggerFactory.Instance.CreateLogger<TypeFinder>(), new DefaultUmbracoAssemblyProvider(entryAssembly), new VaryingRuntimeHash());
_typeFinder = new TypeFinder(NullLoggerFactory.Instance.CreateLogger<TypeFinder>(), new DefaultUmbracoAssemblyProvider(entryAssembly, NullLoggerFactory.Instance), new VaryingRuntimeHash());
}
public ITypeFinder GetTypeFinder() => _typeFinder;

View File

@@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Moq;
using NUnit.Framework;
using Umbraco.Cms.Core.Composing;
@@ -39,7 +40,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Composing
[Test]
public void Find_Class_Of_Type_With_Attribute()
{
var typeFinder = new TypeFinder(Mock.Of<ILogger<TypeFinder>>(), new DefaultUmbracoAssemblyProvider(GetType().Assembly), new VaryingRuntimeHash());
var typeFinder = new TypeFinder(Mock.Of<ILogger<TypeFinder>>(), new DefaultUmbracoAssemblyProvider(GetType().Assembly, NullLoggerFactory.Instance), new VaryingRuntimeHash());
IEnumerable<Type> typesFound = typeFinder.FindClassesOfTypeWithAttribute<TestEditor, MyTestAttribute>(_assemblies);
Assert.AreEqual(2, typesFound.Count());
}
@@ -47,7 +48,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Composing
[Test]
public void Find_Classes_With_Attribute()
{
var typeFinder = new TypeFinder(Mock.Of<ILogger<TypeFinder>>(), new DefaultUmbracoAssemblyProvider(GetType().Assembly), new VaryingRuntimeHash());
var typeFinder = new TypeFinder(Mock.Of<ILogger<TypeFinder>>(), new DefaultUmbracoAssemblyProvider(GetType().Assembly, NullLoggerFactory.Instance), new VaryingRuntimeHash());
IEnumerable<Type> typesFound = typeFinder.FindClassesWithAttribute<TreeAttribute>(_assemblies);
Assert.AreEqual(0, typesFound.Count()); // 0 classes in _assemblies are marked with [Tree]

View File

@@ -194,7 +194,7 @@ namespace Umbraco.Tests.Testing
var proflogger = new ProfilingLogger(loggerFactory.CreateLogger<ProfilingLogger>(), profiler);
IOHelper = TestHelper.IOHelper;
TypeFinder = new TypeFinder(loggerFactory.CreateLogger<TypeFinder>(), new DefaultUmbracoAssemblyProvider(GetType().Assembly), new VaryingRuntimeHash());
TypeFinder = new TypeFinder(loggerFactory.CreateLogger<TypeFinder>(), new DefaultUmbracoAssemblyProvider(GetType().Assembly, loggerFactory), new VaryingRuntimeHash());
var appCaches = GetAppCaches();
var globalSettings = new GlobalSettings();
var settings = new WebRoutingSettings();

View File

@@ -76,7 +76,7 @@ namespace Umbraco.Extensions
var typeFinder = new TypeFinder(
loggerFactory.CreateLogger<TypeFinder>(),
new DefaultUmbracoAssemblyProvider(entryAssembly),
new DefaultUmbracoAssemblyProvider(entryAssembly, loggerFactory),
runtimeHash,
new TypeFinderConfig(Options.Create(typeFinderSettings))
);

View File

@@ -120,7 +120,7 @@ namespace Umbraco.Web
// assembly we can get and we can only get that if we put this code into the WebRuntime since the executing assembly is the 'current' one.
// For this purpose, it doesn't matter if it's Umbraco.Web or Umbraco.Infrastructure since all assemblies are in that same path and we are
// getting rid of netframework.
Assembly.GetEntryAssembly() ?? Assembly.GetExecutingAssembly()), runtimeHash);
Assembly.GetEntryAssembly() ?? Assembly.GetExecutingAssembly(), _loggerFactory), runtimeHash);
}
/// <summary>