From f99f821a6dd9a4e7c3dcefd55bfffb1e9a2f86ae Mon Sep 17 00:00:00 2001 From: Sven Geusens Date: Wed, 21 Aug 2024 09:07:09 +0200 Subject: [PATCH 1/6] Fix Mismatching constraint names in old migration (#16891) * Find the constraint name based on table,column,type name instead of hardcoding it * removed unnecesary using * Check constraint rename seperatly from column rename --- .../Upgrade/V_13_3_0/AlignUpgradedDatabase.cs | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_3_0/AlignUpgradedDatabase.cs b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_3_0/AlignUpgradedDatabase.cs index 84171e8717..6ee48ce0e7 100644 --- a/src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_3_0/AlignUpgradedDatabase.cs +++ b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_3_0/AlignUpgradedDatabase.cs @@ -120,23 +120,48 @@ public class AlignUpgradedDatabase : MigrationBase // We need to do this to ensure we don't try to rename the constraint if it doesn't exist. const string tableName = "umbracoContentVersion"; const string columnName = "VersionDate"; + const string newColumnName = "versionDate"; + const string expectedConstraintName = "DF_umbracoContentVersion_versionDate"; + ColumnInfo? versionDateColumn = columns .FirstOrDefault(x => x is { TableName: tableName, ColumnName: columnName }); - if (versionDateColumn is null) + // we only want to rename the column if necessary + if (versionDateColumn is not null) { // The column was not found I.E. the column is correctly named - return; + RenameColumn(tableName, columnName, newColumnName, columns); } - RenameColumn(tableName, columnName, "versionDate", columns); - // Renames the default constraint for the column, // apparently the content version table used to be prefixed with cms and not umbraco // We don't have a fluid way to rename the default constraint so we have to use raw SQL // This should be okay though since we are only running this migration on SQL Server + Sql constraintNameQuery = Database.SqlContext.Sql(@$" +SELECT obj_Constraint.NAME AS 'constraintName' + FROM sys.objects obj_table + JOIN sys.objects obj_Constraint + ON obj_table.object_id = obj_Constraint.parent_object_id + JOIN sys.sysconstraints constraints + ON constraints.constid = obj_Constraint.object_id + JOIN sys.columns columns + ON columns.object_id = obj_table.object_id + AND columns.column_id = constraints.colid + WHERE obj_table.NAME = '{tableName}' + AND columns.NAME = '{newColumnName}' + AND obj_Constraint.type = 'D' +"); + var currentConstraintName = Database.ExecuteScalar(constraintNameQuery); + + + // only rename the constraint if necessary + if (currentConstraintName == expectedConstraintName) + { + return; + } + Sql renameConstraintQuery = Database.SqlContext.Sql( - "EXEC sp_rename N'DF_cmsContentVersion_VersionDate', N'DF_umbracoContentVersion_versionDate', N'OBJECT'"); + $"EXEC sp_rename N'{currentConstraintName}', N'{expectedConstraintName}', N'OBJECT'"); Database.Execute(renameConstraintQuery); } From 79080ffa93a2cbf96ec2e33e3c6beefbe52bc007 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Wed, 21 Aug 2024 10:25:39 +0200 Subject: [PATCH 2/6] Updated nuget packages and take a explicit dependency on Microsoft.IdentityModel.JsonWebTokens (#16935) --- Directory.Packages.props | 24 ++++++++++--------- .../Umbraco.Cms.Api.Common.csproj | 3 +++ ...co.Cms.Persistence.EFCore.SqlServer.csproj | 3 +++ .../Umbraco.Cms.Persistence.SqlServer.csproj | 3 +++ .../Controllers/AuthenticationController.cs | 2 ++ .../Umbraco.Web.Common.csproj | 2 ++ tests/Directory.Packages.props | 4 ++-- 7 files changed, 28 insertions(+), 13 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index aff37a4b02..43435394c1 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -12,23 +12,23 @@ - - + + - - - - + + + + - + - - + + @@ -47,7 +47,7 @@ - + @@ -77,7 +77,7 @@ - + @@ -89,5 +89,7 @@ + + \ No newline at end of file diff --git a/src/Umbraco.Cms.Api.Common/Umbraco.Cms.Api.Common.csproj b/src/Umbraco.Cms.Api.Common/Umbraco.Cms.Api.Common.csproj index 82439efec6..f479e70901 100644 --- a/src/Umbraco.Cms.Api.Common/Umbraco.Cms.Api.Common.csproj +++ b/src/Umbraco.Cms.Api.Common/Umbraco.Cms.Api.Common.csproj @@ -12,6 +12,9 @@ + + + diff --git a/src/Umbraco.Cms.Persistence.EFCore.SqlServer/Umbraco.Cms.Persistence.EFCore.SqlServer.csproj b/src/Umbraco.Cms.Persistence.EFCore.SqlServer/Umbraco.Cms.Persistence.EFCore.SqlServer.csproj index 7e6fc6153d..d663ef0197 100644 --- a/src/Umbraco.Cms.Persistence.EFCore.SqlServer/Umbraco.Cms.Persistence.EFCore.SqlServer.csproj +++ b/src/Umbraco.Cms.Persistence.EFCore.SqlServer/Umbraco.Cms.Persistence.EFCore.SqlServer.csproj @@ -8,6 +8,9 @@ + + + diff --git a/src/Umbraco.Cms.Persistence.SqlServer/Umbraco.Cms.Persistence.SqlServer.csproj b/src/Umbraco.Cms.Persistence.SqlServer/Umbraco.Cms.Persistence.SqlServer.csproj index 75e2a6fe60..9aef183cf6 100644 --- a/src/Umbraco.Cms.Persistence.SqlServer/Umbraco.Cms.Persistence.SqlServer.csproj +++ b/src/Umbraco.Cms.Persistence.SqlServer/Umbraco.Cms.Persistence.SqlServer.csproj @@ -8,6 +8,9 @@ + + + diff --git a/src/Umbraco.Web.BackOffice/Controllers/AuthenticationController.cs b/src/Umbraco.Web.BackOffice/Controllers/AuthenticationController.cs index 45a1746b7e..aedb545a44 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/AuthenticationController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/AuthenticationController.cs @@ -708,6 +708,8 @@ public class AuthenticationController : UmbracoApiControllerBase return Ok(); } + + await _signInManager.SignOutAsync(); _logger.LogInformation("User {UserName} from IP address {RemoteIpAddress} has logged out", diff --git a/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj b/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj index b0b5f2af6a..26fa5cf636 100644 --- a/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj +++ b/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj @@ -24,6 +24,8 @@ + + diff --git a/tests/Directory.Packages.props b/tests/Directory.Packages.props index 586469c2c8..9e14b435ea 100644 --- a/tests/Directory.Packages.props +++ b/tests/Directory.Packages.props @@ -4,8 +4,8 @@ - - + + From bafdb21b45fbe56c01cb94a7cdf182063a608832 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Mon, 26 Aug 2024 15:03:11 +0200 Subject: [PATCH 3/6] Fix mandatory RTE validation (#16962) * Added a custom RichTextRequiredValidator, to check that the empty richtext object (still with json) can be required or not. We are now testing the markdown needs to have a value * Fixed namespaced and moved back wrong class * Cleanup --- .../Validators/RequiredValidator.cs | 4 +- .../UmbracoBuilder.CoreServices.cs | 3 ++ .../PropertyEditors/RichTextPropertyEditor.cs | 49 +++++++++++++++++++ .../Validators/IRichTextRequiredValidator.cs | 7 +++ .../Validators/RichTextRequiredValidator.cs | 30 ++++++++++++ 5 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 src/Umbraco.Infrastructure/PropertyEditors/Validators/IRichTextRequiredValidator.cs create mode 100644 src/Umbraco.Infrastructure/PropertyEditors/Validators/RichTextRequiredValidator.cs diff --git a/src/Umbraco.Core/PropertyEditors/Validators/RequiredValidator.cs b/src/Umbraco.Core/PropertyEditors/Validators/RequiredValidator.cs index 296e8eed36..1bf19b361b 100644 --- a/src/Umbraco.Core/PropertyEditors/Validators/RequiredValidator.cs +++ b/src/Umbraco.Core/PropertyEditors/Validators/RequiredValidator.cs @@ -7,7 +7,7 @@ namespace Umbraco.Cms.Core.PropertyEditors.Validators; /// /// A validator that validates that the value is not null or empty (if it is a string) /// -public sealed class RequiredValidator : IValueRequiredValidator, IManifestValueValidator +public class RequiredValidator : IValueRequiredValidator, IManifestValueValidator { private const string ValueCannotBeNull = "Value cannot be null"; private const string ValueCannotBeEmpty = "Value cannot be empty"; @@ -23,7 +23,7 @@ public sealed class RequiredValidator : IValueRequiredValidator, IManifestValueV ValidateRequired(value, valueType); /// - public IEnumerable ValidateRequired(object? value, string? valueType) + public virtual IEnumerable ValidateRequired(object? value, string? valueType) { if (value == null) { diff --git a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs index 77194cef2e..a9ffc67f64 100644 --- a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs +++ b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs @@ -28,6 +28,7 @@ using Umbraco.Cms.Core.Models.PublishedContent; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Packaging; using Umbraco.Cms.Core.PropertyEditors; +using Umbraco.Cms.Core.PropertyEditors.Validators; using Umbraco.Cms.Core.PropertyEditors.ValueConverters; using Umbraco.Cms.Core.PublishedCache; using Umbraco.Cms.Core.Routing; @@ -238,6 +239,8 @@ public static partial class UmbracoBuilderExtensions builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + return builder; } diff --git a/src/Umbraco.Infrastructure/PropertyEditors/RichTextPropertyEditor.cs b/src/Umbraco.Infrastructure/PropertyEditors/RichTextPropertyEditor.cs index ee37d8c63b..772e722833 100644 --- a/src/Umbraco.Infrastructure/PropertyEditors/RichTextPropertyEditor.cs +++ b/src/Umbraco.Infrastructure/PropertyEditors/RichTextPropertyEditor.cs @@ -12,6 +12,7 @@ using Umbraco.Cms.Core.Media; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.Blocks; using Umbraco.Cms.Core.Models.Editors; +using Umbraco.Cms.Core.PropertyEditors.Validators; using Umbraco.Cms.Core.Security; using Umbraco.Cms.Core.Serialization; using Umbraco.Cms.Core.Services; @@ -166,6 +167,7 @@ public class RichTextPropertyEditor : DataEditor internal class RichTextPropertyValueEditor : BlockValuePropertyValueEditorBase { private readonly IBackOfficeSecurityAccessor _backOfficeSecurityAccessor; + private readonly ILocalizedTextService _localizedTextService; private readonly IHtmlSanitizer _htmlSanitizer; private readonly HtmlImageSourceParser _imageSourceParser; private readonly HtmlLocalLinkParser _localLinkParser; @@ -173,8 +175,10 @@ public class RichTextPropertyEditor : DataEditor private readonly RichTextEditorPastedImages _pastedImages; private readonly IJsonSerializer _jsonSerializer; private readonly IBlockEditorElementTypeCache _elementTypeCache; + private readonly IRichTextRequiredValidator _richTextRequiredValidator; private readonly ILogger _logger; + [Obsolete("Use non-obsolete constructor. This is schedules for removal in v16.")] public RichTextPropertyValueEditor( DataEditorAttribute attribute, PropertyEditorCollection propertyEditors, @@ -193,21 +197,66 @@ public class RichTextPropertyEditor : DataEditor IBlockEditorElementTypeCache elementTypeCache, IPropertyValidationService propertyValidationService, DataValueReferenceFactoryCollection dataValueReferenceFactoryCollection) + : this( + attribute, + propertyEditors, + dataTypeReadCache, + logger, + backOfficeSecurityAccessor, + localizedTextService, + shortStringHelper, + imageSourceParser, + localLinkParser, + pastedImages, + jsonSerializer, + ioHelper, + htmlSanitizer, + macroParameterParser, + elementTypeCache, + propertyValidationService, + dataValueReferenceFactoryCollection, + StaticServiceProvider.Instance.GetRequiredService()) + { + + } + public RichTextPropertyValueEditor( + DataEditorAttribute attribute, + PropertyEditorCollection propertyEditors, + IDataTypeConfigurationCache dataTypeReadCache, + ILogger logger, + IBackOfficeSecurityAccessor backOfficeSecurityAccessor, + ILocalizedTextService localizedTextService, + IShortStringHelper shortStringHelper, + HtmlImageSourceParser imageSourceParser, + HtmlLocalLinkParser localLinkParser, + RichTextEditorPastedImages pastedImages, + IJsonSerializer jsonSerializer, + IIOHelper ioHelper, + IHtmlSanitizer htmlSanitizer, + IHtmlMacroParameterParser macroParameterParser, + IBlockEditorElementTypeCache elementTypeCache, + IPropertyValidationService propertyValidationService, + DataValueReferenceFactoryCollection dataValueReferenceFactoryCollection, + IRichTextRequiredValidator richTextRequiredValidator) : base(attribute, propertyEditors, dataTypeReadCache, localizedTextService, logger, shortStringHelper, jsonSerializer, ioHelper, dataValueReferenceFactoryCollection) { _backOfficeSecurityAccessor = backOfficeSecurityAccessor; + _localizedTextService = localizedTextService; _imageSourceParser = imageSourceParser; _localLinkParser = localLinkParser; _pastedImages = pastedImages; _htmlSanitizer = htmlSanitizer; _macroParameterParser = macroParameterParser; _elementTypeCache = elementTypeCache; + _richTextRequiredValidator = richTextRequiredValidator; _jsonSerializer = jsonSerializer; _logger = logger; Validators.Add(new RichTextEditorBlockValidator(propertyValidationService, CreateBlockEditorValues(), elementTypeCache, jsonSerializer, logger)); } + public override IValueRequiredValidator RequiredValidator => _richTextRequiredValidator; + /// public override object? Configuration { diff --git a/src/Umbraco.Infrastructure/PropertyEditors/Validators/IRichTextRequiredValidator.cs b/src/Umbraco.Infrastructure/PropertyEditors/Validators/IRichTextRequiredValidator.cs new file mode 100644 index 0000000000..7358e92f38 --- /dev/null +++ b/src/Umbraco.Infrastructure/PropertyEditors/Validators/IRichTextRequiredValidator.cs @@ -0,0 +1,7 @@ +using Umbraco.Cms.Core.PropertyEditors; + +namespace Umbraco.Cms.Core.PropertyEditors.Validators; + +internal interface IRichTextRequiredValidator : IValueRequiredValidator +{ +} diff --git a/src/Umbraco.Infrastructure/PropertyEditors/Validators/RichTextRequiredValidator.cs b/src/Umbraco.Infrastructure/PropertyEditors/Validators/RichTextRequiredValidator.cs new file mode 100644 index 0000000000..b239f0bda5 --- /dev/null +++ b/src/Umbraco.Infrastructure/PropertyEditors/Validators/RichTextRequiredValidator.cs @@ -0,0 +1,30 @@ +using System.ComponentModel.DataAnnotations; +using Microsoft.Extensions.Logging; +using Umbraco.Cms.Core.Serialization; +using Umbraco.Cms.Core.Services; + +namespace Umbraco.Cms.Core.PropertyEditors.Validators; + +internal class RichTextRequiredValidator : RequiredValidator, IRichTextRequiredValidator +{ + private readonly IJsonSerializer _jsonSerializer; + private readonly ILogger _logger; + + public RichTextRequiredValidator(ILocalizedTextService textService, IJsonSerializer jsonSerializer, ILogger logger) : base(textService) + { + _jsonSerializer = jsonSerializer; + _logger = logger; + } + + public override IEnumerable ValidateRequired(object? value, string? valueType) => base.ValidateRequired(GetValue(value), valueType); + + private object? GetValue(object? value) + { + if(RichTextPropertyEditorHelper.TryParseRichTextEditorValue(value, _jsonSerializer, _logger, out RichTextEditorValue? richTextEditorValue)) + { + return richTextEditorValue?.Markup; + } + + return value; + } +} From 62b7c9468e8d7a813556f94e03d781508dd664ef Mon Sep 17 00:00:00 2001 From: Sven Geusens Date: Tue, 27 Aug 2024 15:28:04 +0200 Subject: [PATCH 4/6] Fix undefined property read (#16941) --- .../blockgrid/umbBlockGridPropertyEditor.component.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/umbBlockGridPropertyEditor.component.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/umbBlockGridPropertyEditor.component.js index f260bd4d31..b5353c74e4 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/umbBlockGridPropertyEditor.component.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/umbBlockGridPropertyEditor.component.js @@ -369,7 +369,7 @@ let i = layoutEntry.areas.length; while(i--) { const layoutEntryArea = layoutEntry.areas[i]; - const areaConfigIndex = block.config.areas.findIndex(x => x.key === layoutEntryArea.key); + const areaConfigIndex = block.config.unsupported ? -1 : block.config.areas.findIndex(x => x.key === layoutEntryArea.key); if(areaConfigIndex === -1) { layoutEntry.areas.splice(i, 1); } From ef58416814c2fe7868ad1c51a9ec4262bc35734c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Tue, 27 Aug 2024 16:01:59 +0200 Subject: [PATCH 5/6] V13: Read only mode while saving (#16961) * make a clear console error when case happens * turn Content into readonly mode when submitting form aka saving --- .../content/umbtabbedcontent.directive.js | 18 +++++++++++++++- .../blockeditormodelobject.service.js | 21 ++++++++++++------- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/content/umbtabbedcontent.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/content/umbtabbedcontent.directive.js index 90f81bd827..f003e1afa6 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/content/umbtabbedcontent.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/content/umbtabbedcontent.directive.js @@ -15,7 +15,8 @@ $scope.activeTabAlias = null; $scope.tabs = []; - $scope.allowUpdate = $scope.content.allowedActions.includes('A'); + //$scope.allowUpdate = $scope.content.allowedActions.includes('A'); + setAllowUpdate() $scope.allowEditInvariantFromNonDefault = Umbraco.Sys.ServerVariables.umbracoSettings.allowEditInvariantFromNonDefault; $scope.$watchCollection('content.tabs', (newValue) => { @@ -44,6 +45,10 @@ } }); + function setAllowUpdate() { + $scope.allowUpdate = $scope.content.allowedActions.includes('A'); + } + function onScroll(event) { var viewFocusY = scrollableNode.scrollTop + scrollableNode.clientHeight * .5; @@ -151,6 +156,17 @@ } }); + $scope.$on("formSubmitting", function() { + $scope.allowUpdate = false; + }); + + $scope.$on("formSubmitted", function() { + setAllowUpdate(); + }); + $scope.$on("formSubmittedValidationFailed", function() { + setAllowUpdate(); + }); + //ensure to unregister from all dom-events $scope.$on('$destroy', function () { cancelScrollTween(); diff --git a/src/Umbraco.Web.UI.Client/src/common/services/blockeditormodelobject.service.js b/src/Umbraco.Web.UI.Client/src/common/services/blockeditormodelobject.service.js index 85ca297e69..4a8dff7146 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/blockeditormodelobject.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/blockeditormodelobject.service.js @@ -637,21 +637,26 @@ } blockObject.retrieveValuesFrom = function (content, settings) { - if (this.content !== null) { + if (this.content) { mapElementValues(content, this.content); + if (this.config.settingsElementTypeKey !== null) { + mapElementValues(settings, this.settings); + } + } else { + console.error("This data cannot be edited at the given movement. Maybe due to publishing while editing."); } - if (this.config.settingsElementTypeKey !== null) { - mapElementValues(settings, this.settings); - } + }; blockObject.sync = function () { - if (this.content !== null) { + if (this.content) { mapToPropertyModel(this.content, this.data); - } - if (this.config.settingsElementTypeKey !== null) { - mapToPropertyModel(this.settings, this.settingsData); + if (this.config.settingsElementTypeKey !== null) { + mapToPropertyModel(this.settings, this.settingsData); + } + } else { + console.error("This data cannot be edited at the given movement. Maybe due to publishing while editing."); } }; // first time instant update of label. From ef3bf496e911b18e3a1fb5edca555f3ef50ef74f Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Wed, 4 Sep 2024 13:44:19 +0200 Subject: [PATCH 6/6] Avoid concurrent build of `Umbraco.JsonSchema` tool and add execution timeouts to `Exec` build tasks (#17006) * Disable building Umbraco.JsonSchema and Umbraco.Tests.AcceptanceTest.UmbracoProject * Add 10 minute timeout to Exec MSBuild tasks --- .../Umbraco.Cms.StaticAssets.csproj | 8 ++++---- src/Umbraco.Cms.Targets/Umbraco.Cms.Targets.csproj | 2 +- umbraco.sln | 8 +------- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/Umbraco.Cms.StaticAssets/Umbraco.Cms.StaticAssets.csproj b/src/Umbraco.Cms.StaticAssets/Umbraco.Cms.StaticAssets.csproj index f973b22fc6..6bd6fceb51 100644 --- a/src/Umbraco.Cms.StaticAssets/Umbraco.Cms.StaticAssets.csproj +++ b/src/Umbraco.Cms.StaticAssets/Umbraco.Cms.StaticAssets.csproj @@ -30,13 +30,13 @@ - - + + - - + + diff --git a/src/Umbraco.Cms.Targets/Umbraco.Cms.Targets.csproj b/src/Umbraco.Cms.Targets/Umbraco.Cms.Targets.csproj index a02370bb1e..37a2dfd4a0 100644 --- a/src/Umbraco.Cms.Targets/Umbraco.Cms.Targets.csproj +++ b/src/Umbraco.Cms.Targets/Umbraco.Cms.Targets.csproj @@ -40,7 +40,7 @@ - + diff --git a/umbraco.sln b/umbraco.sln index 3742753fe9..4e49921dab 100644 --- a/umbraco.sln +++ b/umbraco.sln @@ -185,7 +185,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Cms.Persistence.EFC EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Cms.Persistence.EFCore.SqlServer", "src\Umbraco.Cms.Persistence.EFCore.SqlServer\Umbraco.Cms.Persistence.EFCore.SqlServer.csproj", "{9276C3F0-0DC9-46C9-BF32-9EE79D92AE02}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.Tests.AcceptanceTest.UmbracoProject", "tests\Umbraco.Tests.AcceptanceTest.UmbracoProject\Umbraco.Tests.AcceptanceTest.UmbracoProject.csproj", "{A13FF0A0-69FA-468A-9F79-565401D5C341}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Tests.AcceptanceTest.UmbracoProject", "tests\Umbraco.Tests.AcceptanceTest.UmbracoProject\Umbraco.Tests.AcceptanceTest.UmbracoProject.csproj", "{A13FF0A0-69FA-468A-9F79-565401D5C341}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -277,11 +277,8 @@ Global {79E4293D-C92C-4649-AEC8-F1EFD95BDEB1}.SkipTests|Any CPU.ActiveCfg = Debug|Any CPU {79E4293D-C92C-4649-AEC8-F1EFD95BDEB1}.SkipTests|Any CPU.Build.0 = Debug|Any CPU {2A5027D9-F71D-4957-929E-F7A56AA1B95A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2A5027D9-F71D-4957-929E-F7A56AA1B95A}.Debug|Any CPU.Build.0 = Debug|Any CPU {2A5027D9-F71D-4957-929E-F7A56AA1B95A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2A5027D9-F71D-4957-929E-F7A56AA1B95A}.Release|Any CPU.Build.0 = Release|Any CPU {2A5027D9-F71D-4957-929E-F7A56AA1B95A}.SkipTests|Any CPU.ActiveCfg = Debug|Any CPU - {2A5027D9-F71D-4957-929E-F7A56AA1B95A}.SkipTests|Any CPU.Build.0 = Debug|Any CPU {32F6A309-EC1E-4CDB-BA80-C804CF680BEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {32F6A309-EC1E-4CDB-BA80-C804CF680BEE}.Debug|Any CPU.Build.0 = Debug|Any CPU {32F6A309-EC1E-4CDB-BA80-C804CF680BEE}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -361,11 +358,8 @@ Global {9276C3F0-0DC9-46C9-BF32-9EE79D92AE02}.SkipTests|Any CPU.ActiveCfg = Debug|Any CPU {9276C3F0-0DC9-46C9-BF32-9EE79D92AE02}.SkipTests|Any CPU.Build.0 = Debug|Any CPU {A13FF0A0-69FA-468A-9F79-565401D5C341}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A13FF0A0-69FA-468A-9F79-565401D5C341}.Debug|Any CPU.Build.0 = Debug|Any CPU {A13FF0A0-69FA-468A-9F79-565401D5C341}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A13FF0A0-69FA-468A-9F79-565401D5C341}.Release|Any CPU.Build.0 = Release|Any CPU {A13FF0A0-69FA-468A-9F79-565401D5C341}.SkipTests|Any CPU.ActiveCfg = Debug|Any CPU - {A13FF0A0-69FA-468A-9F79-565401D5C341}.SkipTests|Any CPU.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE