diff --git a/.github/New BackOffice - README.md b/.github/New BackOffice - README.md
index 3d04ef2e36..c67ebdea93 100644
--- a/.github/New BackOffice - README.md
+++ b/.github/New BackOffice - README.md
@@ -1,13 +1,13 @@
-# New Backoffice
+# New backoffice
> **Warning**:
-> This is an early WIP, and is set not to be packable since we don't want to release this yet. There will be breaking changes in these projects
+> This is an early WIP and is set not to be packable since we don't want to release this yet. There will be breaking changes in these projects.
-This solution folder contains the projects for the new BackOffice. If you're looking to fix or improve the existing CMS, this is not the place to do it, although we do very much appreciate your efforts.
+This solution folder contains the projects for the new backoffice. If you're looking to fix or improve the existing CMS, this is not the place to do it, although we do very much appreciate your efforts.
### Project structure
-Since the new backoffice API is still very much a work in progress we've created new projects for the new backoffice API:
+Since the new backoffice API is still very much a work in progress, we've created new projects for the new backoffice API:
* Umbrao.Cms.ManagementApi - The "presentation layer" for the management API
* "New" versions of existing projects, should be merged with the existing projects when the new API is released:
diff --git a/.gitignore b/.gitignore
index 26f96f89b7..8f50db79d0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -104,5 +104,6 @@ cypress.env.json
/tests/Umbraco.Tests.UnitTests/[Uu]mbraco/[Dd]ata/TEMP/
# Ignore auto-generated schema
+/src/Umbraco.Cms.Targets/appsettings-schema.json
/src/Umbraco.Web.UI/appsettings-schema.json
-/src/Umbraco.Cms/appsettings-schema.json
+/tests/Umbraco.Tests.Integration/appsettings-schema.json
diff --git a/Directory.Build.props b/Directory.Build.props
index 9c1e87df49..90bc46c6eb 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -1,18 +1,48 @@
-
+
+ Umbraco HQ
+ Umbraco
+ Copyright © Umbraco $([System.DateTime]::Today.ToString('yyyy'))
+ Umbraco CMS
+ https://umbraco.com/
+ https://umbraco.com/dist/nuget/logo-small.png
+ icon.png
+ MIT
+ umbraco
+ en-US
+ enable
+ nullable
+ enable
+ true
+
+
+
+
+ true
+ true
+ true
+ snupkg
+
+
+
+
+ true
+
+ 10.1.0
+ true
+ true
+
+
-
+
+
+
+
+
-
- all
- 3.5.113
-
-
-
- all
-
+
diff --git a/build/azure-pipelines.yml b/build/azure-pipelines.yml
index 606e0b6a67..3f0ed57cb1 100644
--- a/build/azure-pipelines.yml
+++ b/build/azure-pipelines.yml
@@ -23,12 +23,15 @@ parameters:
default: false
variables:
+ nodeVersion: 16.17.0
+ dotnetVersion: 7.x
+ solution: umbraco.sln
buildConfiguration: Release
- SA_PASSWORD: UmbracoIntegration123!
- UMBRACO__CMS_GLOBAL__ID: 00000000-0000-0000-0000-000000000042
- nodeVersion: 14.18.1
- DOTNET_NOLOGO: 1
- DOTNET_CLI_TELEMETRY_OPTOUT: 1
+ UMBRACO__CMS__GLOBAL__ID: 00000000-0000-0000-0000-000000000042
+ DOTNET_NOLOGO: true
+ DOTNET_GENERATE_ASPNET_CERTIFICATE: false
+ DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
+ DOTNET_CLI_TELEMETRY_OPTOUT: true
stages:
###############################################
@@ -44,7 +47,7 @@ stages:
vmImage: 'ubuntu-latest'
steps:
- task: NodeTool@0
- displayName: Use node $(nodeVersion)
+ displayName: Use Node.js $(nodeVersion)
inputs:
versionSpec: $(nodeVersion)
- task: Cache@2
@@ -65,16 +68,22 @@ stages:
targets: coreBuild
workingDirectory: src/Umbraco.Web.UI.Client
- task: UseDotNet@2
- displayName: Use .NET 7.x
+ displayName: Use .NET $(dotnetVersion)
inputs:
- version: 7.x
+ version: $(dotnetVersion)
+ performMultiLevelLookup: true
includePreviewVersions: true
+ - task: DotNetCoreCLI@2
+ displayName: Run dotnet restore
+ inputs:
+ command: restore
+ projects: $(solution)
- task: DotNetCoreCLI@2
displayName: Run dotnet build
inputs:
command: build
- projects: umbraco.sln
- arguments: '--configuration $(buildConfiguration)'
+ projects: $(solution)
+ arguments: '--configuration $(buildConfiguration) --no-restore -p:ContinuousIntegrationBuild=true'
- script: |
version="$(Build.BuildNumber)"
echo "varsion: $version"
@@ -101,7 +110,7 @@ stages:
}
}
- dotnet pack --configuration $(buildConfiguration) umbraco.sln -o $(Build.ArtifactStagingDirectory)/nupkg
+ dotnet pack $(solution) --configuration $(buildConfiguration) --no-build --output $(Build.ArtifactStagingDirectory)/nupkg
- script: |
sha="$(Build.SourceVersion)"
sha=${sha:0:7}
@@ -178,9 +187,9 @@ stages:
vmImage: 'ubuntu-latest'
steps:
- task: NodeTool@0
- displayName: Use Node 10.15.0
+ displayName: Use Node.js 10.15.0
inputs:
- versionSpec: 10.15.0 # Won't work with 14.18.1
+ versionSpec: 10.15.0 # Won't work with higher versions
- script: |
npm ci --no-fund --no-audit --prefer-offline
npx gulp docs
@@ -233,16 +242,17 @@ stages:
artifact: build_output
path: $(Build.SourcesDirectory)
- task: UseDotNet@2
- displayName: Use net7
+ displayName: Use .NET $(dotnetVersion)
inputs:
- version: 7.x
+ version: $(dotnetVersion)
+ performMultiLevelLookup: true
includePreviewVersions: true
- task: DotNetCoreCLI@2
displayName: Run dotnet test
inputs:
command: test
projects: '**/*.Tests.UnitTests.csproj'
- arguments: '--no-build --configuration $(buildConfiguration)'
+ arguments: '--configuration $(buildConfiguration) --no-build'
testRunTitle: Unit Tests - $(Agent.OS)
- stage: Integration
@@ -269,16 +279,17 @@ stages:
artifact: build_output
path: $(Build.SourcesDirectory)
- task: UseDotNet@2
- displayName: Use net7
+ displayName: Use .NET $(dotnetVersion)
inputs:
- version: 7.x
+ version: $(dotnetVersion)
+ performMultiLevelLookup: true
includePreviewVersions: true
- task: DotNetCoreCLI@2
displayName: Run dotnet test
inputs:
command: test
projects: '**/*.Tests.Integration.csproj'
- arguments: '--no-build --configuration $(buildConfiguration)'
+ arguments: '--configuration $(buildConfiguration) --no-build'
testRunTitle: Integration Tests SQLite - $(Agent.OS)
env:
Tests__Database__DatabaseType: 'Sqlite'
@@ -301,6 +312,8 @@ stages:
connectionString: 'Server=localhost,1433;User Id=sa;Password=$(SA_PASSWORD);'
pool:
vmImage: $(vmImage)
+ variables:
+ SA_PASSWORD: UmbracoIntegration123!
steps:
- task: DownloadPipelineArtifact@2
displayName: Download build artifacts
@@ -318,7 +331,7 @@ stages:
inputs:
command: test
projects: '**/*.Tests.Integration.csproj'
- arguments: '--no-build --configuration $(buildConfiguration)'
+ arguments: '--configuration $(buildConfiguration) --no-build'
testRunTitle: Integration Tests SQL Server - $(Agent.OS)
env:
Tests__Database__DatabaseType: $(testDb)
@@ -371,7 +384,7 @@ stages:
artifact: nupkg
path: $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest/misc/nupkg
- task: NodeTool@0
- displayName: Use Node $(nodeVersion)
+ displayName: Use Node.js $(nodeVersion)
inputs:
versionSpec: $(nodeVersion)
- task: Cache@2
@@ -403,9 +416,10 @@ stages:
displayName: Create database (Windows only)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
- task: UseDotNet@2
- displayName: Use .Net 7.x
+ displayName: Use .NET $(dotnetVersion)
inputs:
- version: 7.x
+ version: $(dotnetVersion)
+ performMultiLevelLookup: true
includePreviewVersions: true
# Linux containers smooth
- task: PowerShell@2
@@ -419,7 +433,7 @@ stages:
docker build -t $(dockerImageName):$sha -f $(dockerfile) .
mkdir -p $(Build.ArtifactStagingDirectory)/docker-images
docker save -o $(Build.ArtifactStagingDirectory)/docker-images/$(dockerImageName).$sha.tar $(dockerImageName):$sha
- docker run --name $(dockerImageName) -dp 8080:5000 -e UMBRACO__CMS_GLOBAL__ID=$(UMBRACO__CMS_GLOBAL__ID) $(dockerImageName):$sha
+ docker run --name $(dockerImageName) -dp 8080:5000 -e UMBRACO__CMS__GLOBAL__ID=$(UMBRACO__CMS__GLOBAL__ID) $(dockerImageName):$sha
docker ps
# Windows containers take forever.
# --no-launch-profile stops ASPNETCORE_ENVIRONMENT=Development which breaks the users.ts tests (smtp config = invite user button)
@@ -434,8 +448,8 @@ stages:
dotnet new --install ./nupkg/Umbraco.Templates.*.nupkg
dotnet new umbraco --name Cypress -o . --no-restore
dotnet restore --configfile ./nuget.config
- dotnet build --no-restore -c Release
- Start-Process -FilePath "dotnet" -ArgumentList "run --no-build -c Release --no-launch-profile --urls $(CYPRESS_BASE_URL)"
+ dotnet build --configuration $(buildConfiguration) --no-restore
+ Start-Process -FilePath "dotnet" -ArgumentList "run --configuration $(buildConfiguration) --no-build --no-launch-profile --urls $(CYPRESS_BASE_URL)"
- task: PowerShell@2
displayName: Wait for app
inputs:
@@ -496,12 +510,12 @@ stages:
displayName: dotnet restore
inputs:
command: restore
- projects: '**/umbraco.sln'
+ projects: $(solution)
# TODO: Use NuGetCommand instead of DotNetCoreCLI
# - task: NuGetCommand@2
# displayName: Restore NuGet Packages
# inputs:
- # restoreSolution: 'umbraco.sln'
+ # restoreSolution: $(solution)
# feedsToUse: config
- stage: Deploy_NuGet
displayName: NuGet release
@@ -523,7 +537,7 @@ stages:
displayName: dotnet restore
inputs:
command: restore
- projects: '**/umbraco.sln'
+ projects: $(solution)
- stage: Upload_API_Docs
pool:
diff --git a/icon.png b/icon.png
new file mode 100644
index 0000000000..8f01fe7aeb
Binary files /dev/null and b/icon.png differ
diff --git a/opened-issue-first-comment.yml b/opened-issue-first-comment.yml
deleted file mode 100644
index 134a368785..0000000000
--- a/opened-issue-first-comment.yml
+++ /dev/null
@@ -1,53 +0,0 @@
-name: issue-first-response
-
-on:
- issues:
- types: [opened]
-
-jobs:
- send-response:
- runs-on: ubuntu-latest
- permissions:
- issues: write
- pull-requests: write
- steps:
- - name: Install dependencies
- run: |
- npm install node-fetch@2
- - name: Fetch random comment 🗣️ and add it to the issue
- uses: actions/github-script@v6
- with:
- script: |
- const fetch = require('node-fetch')
-
- const response = await fetch('https://collaboratorsv2.euwest01.umbraco.io/umbraco/api/comments/PostComment', {
- method: 'post',
- body: JSON.stringify({
- repo: '${{ github.repository }}',
- number: '${{ github.event.number }}',
- actor: '${{ github.actor }}',
- commentType: 'opened-issue-first-comment'
- }),
- headers: {
- 'Authorization': 'Bearer ${{ secrets.OUR_BOT_API_TOKEN }}',
- 'Content-Type': 'application/json'
- }
- });
-
- try {
- const data = await response.text();
-
- if(response.status === 200 && data !== '') {
- github.rest.issues.createComment({
- issue_number: context.issue.number,
- owner: context.repo.owner,
- repo: context.repo.repo,
- body: data
- });
- } else {
- console.log("Status code did not indicate success:", response.status);
- console.log("Returned data:", data);
- }
- } catch(error) {
- console.log(error);
- }
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
deleted file mode 100644
index 657774fcc0..0000000000
--- a/src/Directory.Build.props
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-
- 10.0.0
- 10.0.0
- 10.0.0-rc1
- 10.0.0
- preview
- en-US
- Umbraco CMS
- Copyright © Umbraco 2021
- Umbraco HQ
- https://umbraco.com/
- https://umbraco.com/dist/nuget/logo-small.png
- https://opensource.org/licenses/MIT
- false
- umbraco
- git
- https://github.com/umbraco/umbraco-cms
- enable
- Nullable
- enable
-
-
-
-
- true
-
-
- true
-
-
- true
- snupkg
-
-
-
-
-
-
- true
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/JsonSchema/JsonSchema.csproj b/src/JsonSchema/JsonSchema.csproj
index 66e57588b2..0769f11d94 100644
--- a/src/JsonSchema/JsonSchema.csproj
+++ b/src/JsonSchema/JsonSchema.csproj
@@ -1,33 +1,19 @@
- Exe
net7.0
- true
+ Exe
false
false
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
- $(UserProfile)\.nuget\packages\
-
-
-
-
-
-
-
-
diff --git a/src/JsonSchema/Options.cs b/src/JsonSchema/Options.cs
index 4471ee49ce..00cb670953 100644
--- a/src/JsonSchema/Options.cs
+++ b/src/JsonSchema/Options.cs
@@ -7,7 +7,7 @@ namespace JsonSchema
{
internal class Options
{
- [Option('o', "outputFile", Required = false, HelpText = "Set path of the output file.", Default = "../../../../Umbraco.Web.UI/appsettings-schema.json")]
+ [Option('o', "outputFile", Required = false, HelpText = "Set path of the output file.", Default = "appsettings-schema.json")]
public string OutputFile { get; set; } = null!;
}
}
diff --git a/src/Umbraco.Web.Common/DependencyInjection/ConfigureImageSharpMiddlewareOptions.cs b/src/Umbraco.Cms.Imaging.ImageSharp/ConfigureImageSharpMiddlewareOptions.cs
similarity index 98%
rename from src/Umbraco.Web.Common/DependencyInjection/ConfigureImageSharpMiddlewareOptions.cs
rename to src/Umbraco.Cms.Imaging.ImageSharp/ConfigureImageSharpMiddlewareOptions.cs
index 2b372992cc..8daa1b689b 100644
--- a/src/Umbraco.Web.Common/DependencyInjection/ConfigureImageSharpMiddlewareOptions.cs
+++ b/src/Umbraco.Cms.Imaging.ImageSharp/ConfigureImageSharpMiddlewareOptions.cs
@@ -8,7 +8,7 @@ using SixLabors.ImageSharp.Web.Middleware;
using SixLabors.ImageSharp.Web.Processors;
using Umbraco.Cms.Core.Configuration.Models;
-namespace Umbraco.Cms.Web.Common.DependencyInjection;
+namespace Umbraco.Cms.Imaging.ImageSharp;
///
/// Configures the ImageSharp middleware options.
diff --git a/src/Umbraco.Web.Common/DependencyInjection/ConfigurePhysicalFileSystemCacheOptions.cs b/src/Umbraco.Cms.Imaging.ImageSharp/ConfigurePhysicalFileSystemCacheOptions.cs
similarity index 96%
rename from src/Umbraco.Web.Common/DependencyInjection/ConfigurePhysicalFileSystemCacheOptions.cs
rename to src/Umbraco.Cms.Imaging.ImageSharp/ConfigurePhysicalFileSystemCacheOptions.cs
index 4f4b337021..3b2cd7f867 100644
--- a/src/Umbraco.Web.Common/DependencyInjection/ConfigurePhysicalFileSystemCacheOptions.cs
+++ b/src/Umbraco.Cms.Imaging.ImageSharp/ConfigurePhysicalFileSystemCacheOptions.cs
@@ -4,7 +4,7 @@ using SixLabors.ImageSharp.Web.Caching;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Core.Extensions;
-namespace Umbraco.Cms.Web.Common.DependencyInjection;
+namespace Umbraco.Cms.Imaging.ImageSharp;
///
/// Configures the ImageSharp physical file system cache options.
diff --git a/src/Umbraco.Web.Common/ImageProcessors/CropWebProcessor.cs b/src/Umbraco.Cms.Imaging.ImageSharp/ImageProcessors/CropWebProcessor.cs
similarity index 84%
rename from src/Umbraco.Web.Common/ImageProcessors/CropWebProcessor.cs
rename to src/Umbraco.Cms.Imaging.ImageSharp/ImageProcessors/CropWebProcessor.cs
index 0d48ac4cc4..eda49fa9d0 100644
--- a/src/Umbraco.Web.Common/ImageProcessors/CropWebProcessor.cs
+++ b/src/Umbraco.Cms.Imaging.ImageSharp/ImageProcessors/CropWebProcessor.cs
@@ -8,20 +8,21 @@ using SixLabors.ImageSharp.Web;
using SixLabors.ImageSharp.Web.Commands;
using SixLabors.ImageSharp.Web.Processors;
-namespace Umbraco.Cms.Web.Common.ImageProcessors;
+namespace Umbraco.Cms.Imaging.ImageSharp.ImageProcessors;
///
-/// Allows the cropping of images.
+/// Allows the cropping of images.
///
+///
public class CropWebProcessor : IImageWebProcessor
{
///
- /// The command constant for the crop coordinates.
+ /// The command constant for the crop coordinates.
///
public const string Coordinates = "cc";
///
- /// The command constant for the resize orientation handling mode.
+ /// The command constant for the resize orientation handling mode.
///
public const string Orient = "orient";
@@ -59,10 +60,8 @@ public class CropWebProcessor : IImageWebProcessor
var right = Math.Clamp(1 - coordinates[2], 0, 1);
var bottom = Math.Clamp(1 - coordinates[3], 0, 1);
var orientation = GetExifOrientation(image, commands, parser, culture);
- Vector2 xy1 =
- ExifOrientationUtilities.Transform(new Vector2(left, top), Vector2.Zero, Vector2.One, orientation);
- Vector2 xy2 =
- ExifOrientationUtilities.Transform(new Vector2(right, bottom), Vector2.Zero, Vector2.One, orientation);
+ Vector2 xy1 = ExifOrientationUtilities.Transform(new Vector2(left, top), Vector2.Zero, Vector2.One, orientation);
+ Vector2 xy2 = ExifOrientationUtilities.Transform(new Vector2(right, bottom), Vector2.Zero, Vector2.One, orientation);
// Scale points to a pixel based rectangle
Size size = image.Image.Size();
diff --git a/src/Umbraco.Cms.Imaging.ImageSharp/ImageSharpComposer.cs b/src/Umbraco.Cms.Imaging.ImageSharp/ImageSharpComposer.cs
new file mode 100644
index 0000000000..9a77bc28b2
--- /dev/null
+++ b/src/Umbraco.Cms.Imaging.ImageSharp/ImageSharpComposer.cs
@@ -0,0 +1,16 @@
+using Umbraco.Cms.Core.Composing;
+using Umbraco.Cms.Core.DependencyInjection;
+using Umbraco.Extensions;
+
+namespace Umbraco.Cms.Imaging.ImageSharp;
+
+///
+/// Adds imaging support using ImageSharp/ImageSharp.Web.
+///
+///
+public sealed class ImageSharpComposer : IComposer
+{
+ ///
+ public void Compose(IUmbracoBuilder builder)
+ => builder.AddUmbracoImageSharp();
+}
diff --git a/src/Umbraco.Infrastructure/Media/ImageSharpDimensionExtractor.cs b/src/Umbraco.Cms.Imaging.ImageSharp/Media/ImageSharpDimensionExtractor.cs
similarity index 74%
rename from src/Umbraco.Infrastructure/Media/ImageSharpDimensionExtractor.cs
rename to src/Umbraco.Cms.Imaging.ImageSharp/Media/ImageSharpDimensionExtractor.cs
index fbc2add152..409b6e2726 100644
--- a/src/Umbraco.Infrastructure/Media/ImageSharpDimensionExtractor.cs
+++ b/src/Umbraco.Cms.Imaging.ImageSharp/Media/ImageSharpDimensionExtractor.cs
@@ -3,26 +3,27 @@ using SixLabors.ImageSharp.Metadata.Profiles.Exif;
using Umbraco.Cms.Core.Media;
using Size = System.Drawing.Size;
-namespace Umbraco.Cms.Infrastructure.Media;
+namespace Umbraco.Cms.Imaging.ImageSharp.Media;
-internal class ImageSharpDimensionExtractor : IImageDimensionExtractor
+public sealed class ImageSharpDimensionExtractor : IImageDimensionExtractor
{
private readonly Configuration _configuration;
+ ///
+ public IEnumerable SupportedImageFileTypes { get; }
+
///
- /// Initializes a new instance of the class.
+ /// Initializes a new instance of the class.
///
/// The configuration.
public ImageSharpDimensionExtractor(Configuration configuration)
- => _configuration = configuration;
+ {
+ _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
- ///
- /// Gets the dimensions of an image.
- ///
- /// A stream containing the image bytes.
- ///
- /// The dimension of the image.
- ///
+ SupportedImageFileTypes = configuration.ImageFormats.SelectMany(f => f.FileExtensions).ToArray();
+ }
+
+ ///
public Size? GetDimensions(Stream? stream)
{
Size? size = null;
diff --git a/src/Umbraco.Web.Common/Media/ImageSharpImageUrlGenerator.cs b/src/Umbraco.Cms.Imaging.ImageSharp/Media/ImageSharpImageUrlGenerator.cs
similarity index 95%
rename from src/Umbraco.Web.Common/Media/ImageSharpImageUrlGenerator.cs
rename to src/Umbraco.Cms.Imaging.ImageSharp/Media/ImageSharpImageUrlGenerator.cs
index d91b6706c9..b7560853d7 100644
--- a/src/Umbraco.Web.Common/Media/ImageSharpImageUrlGenerator.cs
+++ b/src/Umbraco.Cms.Imaging.ImageSharp/Media/ImageSharpImageUrlGenerator.cs
@@ -5,25 +5,27 @@ using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Web.Processors;
using Umbraco.Cms.Core.Media;
using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Web.Common.ImageProcessors;
+using Umbraco.Cms.Imaging.ImageSharp.ImageProcessors;
using static Umbraco.Cms.Core.Models.ImageUrlGenerationOptions;
-namespace Umbraco.Cms.Web.Common.Media;
+namespace Umbraco.Cms.Imaging.ImageSharp.Media;
///
/// Exposes a method that generates an image URL based on the specified options that can be processed by ImageSharp.
///
///
-public class ImageSharpImageUrlGenerator : IImageUrlGenerator
+public sealed class ImageSharpImageUrlGenerator : IImageUrlGenerator
{
+ ///
+ public IEnumerable SupportedImageFileTypes { get; }
+
///
/// Initializes a new instance of the class.
///
/// The ImageSharp configuration.
public ImageSharpImageUrlGenerator(Configuration configuration)
: this(configuration.ImageFormats.SelectMany(f => f.FileExtensions).ToArray())
- {
- }
+ { }
///
/// Initializes a new instance of the class.
@@ -35,9 +37,6 @@ public class ImageSharpImageUrlGenerator : IImageUrlGenerator
internal ImageSharpImageUrlGenerator(IEnumerable supportedImageFileTypes) =>
SupportedImageFileTypes = supportedImageFileTypes;
- ///
- public IEnumerable SupportedImageFileTypes { get; }
-
///
public string? GetImageUrl(ImageUrlGenerationOptions? options)
{
diff --git a/src/Umbraco.Cms.Imaging.ImageSharp/Umbraco.Cms.Imaging.ImageSharp.csproj b/src/Umbraco.Cms.Imaging.ImageSharp/Umbraco.Cms.Imaging.ImageSharp.csproj
new file mode 100644
index 0000000000..ef6ef5f095
--- /dev/null
+++ b/src/Umbraco.Cms.Imaging.ImageSharp/Umbraco.Cms.Imaging.ImageSharp.csproj
@@ -0,0 +1,24 @@
+
+
+ Umbraco CMS - Imaging - ImageSharp
+ Adds imaging support using ImageSharp/ImageSharp.Web to Umbraco CMS.
+ net7.0
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_Parameter1>Umbraco.Tests.UnitTests
+
+
+
diff --git a/src/Umbraco.Cms.Imaging.ImageSharp/UmbracoBuilderExtensions.cs b/src/Umbraco.Cms.Imaging.ImageSharp/UmbracoBuilderExtensions.cs
new file mode 100644
index 0000000000..4bd50034ab
--- /dev/null
+++ b/src/Umbraco.Cms.Imaging.ImageSharp/UmbracoBuilderExtensions.cs
@@ -0,0 +1,54 @@
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
+using SixLabors.ImageSharp;
+using SixLabors.ImageSharp.Web.Caching;
+using SixLabors.ImageSharp.Web.DependencyInjection;
+using SixLabors.ImageSharp.Web.Middleware;
+using SixLabors.ImageSharp.Web.Providers;
+using Umbraco.Cms.Core.DependencyInjection;
+using Umbraco.Cms.Core.Media;
+using Umbraco.Cms.Imaging.ImageSharp.ImageProcessors;
+using Umbraco.Cms.Imaging.ImageSharp.Media;
+using Umbraco.Cms.Web.Common.ApplicationBuilder;
+using Umbraco.Extensions;
+
+namespace Umbraco.Cms.Imaging.ImageSharp;
+
+public static class UmbracoBuilderExtensions
+{
+ ///
+ /// Adds Image Sharp with Umbraco settings
+ ///
+ public static IServiceCollection AddUmbracoImageSharp(this IUmbracoBuilder builder)
+ {
+ // Add default ImageSharp configuration and service implementations
+ builder.Services.AddSingleton(Configuration.Default);
+ builder.Services.AddUnique();
+
+ builder.Services.AddSingleton();
+
+ builder.Services.AddImageSharp()
+ // Replace default image provider
+ .ClearProviders()
+ .AddProvider()
+ // Add custom processors
+ .AddProcessor();
+
+ // Configure middleware
+ builder.Services.AddTransient, ConfigureImageSharpMiddlewareOptions>();
+
+ // Configure cache options
+ builder.Services.AddTransient, ConfigurePhysicalFileSystemCacheOptions>();
+
+ // Important we handle image manipulations before the static files, otherwise the querystring is just ignored
+ builder.Services.Configure(options =>
+ {
+ options.AddFilter(new UmbracoPipelineFilter(nameof(ImageSharpComposer))
+ {
+ PrePipeline = prePipeline => prePipeline.UseImageSharp()
+ });
+ });
+
+ return builder.Services;
+ }
+}
diff --git a/src/Umbraco.Cms.ManagementApi/Umbraco.Cms.ManagementApi.csproj b/src/Umbraco.Cms.ManagementApi/Umbraco.Cms.ManagementApi.csproj
index 2f4296cb89..283b447ab0 100644
--- a/src/Umbraco.Cms.ManagementApi/Umbraco.Cms.ManagementApi.csproj
+++ b/src/Umbraco.Cms.ManagementApi/Umbraco.Cms.ManagementApi.csproj
@@ -1,34 +1,27 @@
+
+ Umbraco CMS - Management API
+ Contains the presentation layer for the Umbraco CMS Management API.
+ net7.0
+ false
+ false
+
-
- net7.0
- enable
- enable
- nullable
- Umbraco.Cms.ManagementApi
- false
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- all
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Umbraco.Cms.Persistence.SqlServer/CompatibilitySuppressions.xml b/src/Umbraco.Cms.Persistence.SqlServer/CompatibilitySuppressions.xml
new file mode 100644
index 0000000000..7baad05aa0
--- /dev/null
+++ b/src/Umbraco.Cms.Persistence.SqlServer/CompatibilitySuppressions.xml
@@ -0,0 +1,7 @@
+
+
+
+ PKV006
+ net6.0
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Infrastructure/Persistence/FaultHandling/RetryPolicyFactory.cs b/src/Umbraco.Cms.Persistence.SqlServer/FaultHandling/RetryPolicyFactory.cs
similarity index 91%
rename from src/Umbraco.Infrastructure/Persistence/FaultHandling/RetryPolicyFactory.cs
rename to src/Umbraco.Cms.Persistence.SqlServer/FaultHandling/RetryPolicyFactory.cs
index 785c6cebe5..1e8026a81c 100644
--- a/src/Umbraco.Infrastructure/Persistence/FaultHandling/RetryPolicyFactory.cs
+++ b/src/Umbraco.Cms.Persistence.SqlServer/FaultHandling/RetryPolicyFactory.cs
@@ -1,8 +1,7 @@
-using Umbraco.Cms.Infrastructure.Persistence.FaultHandling.Strategies;
+using Umbraco.Cms.Infrastructure.Persistence.FaultHandling;
+using Umbraco.Cms.Persistence.SqlServer.FaultHandling.Strategies;
-namespace Umbraco.Cms.Infrastructure.Persistence.FaultHandling;
-
-// TODO: These should move to Persistence.SqlServer
+namespace Umbraco.Cms.Persistence.SqlServer.FaultHandling;
///
/// Provides a factory class for instantiating application-specific retry policies.
diff --git a/src/Umbraco.Infrastructure/Persistence/FaultHandling/Strategies/NetworkConnectivityErrorDetectionStrategy.cs b/src/Umbraco.Cms.Persistence.SqlServer/FaultHandling/Strategies/NetworkConnectivityErrorDetectionStrategy.cs
similarity index 87%
rename from src/Umbraco.Infrastructure/Persistence/FaultHandling/Strategies/NetworkConnectivityErrorDetectionStrategy.cs
rename to src/Umbraco.Cms.Persistence.SqlServer/FaultHandling/Strategies/NetworkConnectivityErrorDetectionStrategy.cs
index e046f8592d..e3995e13ae 100644
--- a/src/Umbraco.Infrastructure/Persistence/FaultHandling/Strategies/NetworkConnectivityErrorDetectionStrategy.cs
+++ b/src/Umbraco.Cms.Persistence.SqlServer/FaultHandling/Strategies/NetworkConnectivityErrorDetectionStrategy.cs
@@ -1,6 +1,7 @@
using Microsoft.Data.SqlClient;
+using Umbraco.Cms.Infrastructure.Persistence.FaultHandling;
-namespace Umbraco.Cms.Infrastructure.Persistence.FaultHandling.Strategies;
+namespace Umbraco.Cms.Persistence.SqlServer.FaultHandling.Strategies;
///
/// Implements a strategy that detects network connectivity errors such as host not found.
diff --git a/src/Umbraco.Infrastructure/Persistence/FaultHandling/Strategies/SqlAzureTransientErrorDetectionStrategy.cs b/src/Umbraco.Cms.Persistence.SqlServer/FaultHandling/Strategies/SqlAzureTransientErrorDetectionStrategy.cs
similarity index 97%
rename from src/Umbraco.Infrastructure/Persistence/FaultHandling/Strategies/SqlAzureTransientErrorDetectionStrategy.cs
rename to src/Umbraco.Cms.Persistence.SqlServer/FaultHandling/Strategies/SqlAzureTransientErrorDetectionStrategy.cs
index b4ae18d55a..70c0f36de8 100644
--- a/src/Umbraco.Infrastructure/Persistence/FaultHandling/Strategies/SqlAzureTransientErrorDetectionStrategy.cs
+++ b/src/Umbraco.Cms.Persistence.SqlServer/FaultHandling/Strategies/SqlAzureTransientErrorDetectionStrategy.cs
@@ -1,6 +1,7 @@
-using Microsoft.Data.SqlClient;
+using Microsoft.Data.SqlClient;
+using Umbraco.Cms.Infrastructure.Persistence.FaultHandling;
-namespace Umbraco.Cms.Infrastructure.Persistence.FaultHandling.Strategies;
+namespace Umbraco.Cms.Persistence.SqlServer.FaultHandling.Strategies;
// See https://docs.microsoft.com/en-us/azure/azure-sql/database/troubleshoot-common-connectivity-issues
// Also we could just use the nuget package instead https://www.nuget.org/packages/EnterpriseLibrary.TransientFaultHandling/ ?
diff --git a/src/Umbraco.Infrastructure/Persistence/FaultHandling/ThrottlingCondition.cs b/src/Umbraco.Cms.Persistence.SqlServer/FaultHandling/Strategies/ThrottlingCondition.cs
similarity index 98%
rename from src/Umbraco.Infrastructure/Persistence/FaultHandling/ThrottlingCondition.cs
rename to src/Umbraco.Cms.Persistence.SqlServer/FaultHandling/Strategies/ThrottlingCondition.cs
index 24ba741c06..52e48b7aef 100644
--- a/src/Umbraco.Infrastructure/Persistence/FaultHandling/ThrottlingCondition.cs
+++ b/src/Umbraco.Cms.Persistence.SqlServer/FaultHandling/Strategies/ThrottlingCondition.cs
@@ -3,7 +3,7 @@ using System.Text;
using System.Text.RegularExpressions;
using Microsoft.Data.SqlClient;
-namespace Umbraco.Cms.Infrastructure.Persistence.FaultHandling;
+namespace Umbraco.Cms.Persistence.SqlServer.FaultHandling.Strategies;
///
/// Defines the possible throttling modes in SQL Azure.
@@ -299,7 +299,7 @@ public class ThrottlingCondition
condition._throttledResources.Add(Tuple.Create(ThrottledResourceType.DatabaseSize, (ThrottlingType)((groupCode >>= 2) & 3)));
condition._throttledResources.Add(Tuple.Create(ThrottledResourceType.Internal, (ThrottlingType)((groupCode >>= 2) & 3)));
condition._throttledResources.Add(Tuple.Create(ThrottledResourceType.WorkerThreads, (ThrottlingType)((groupCode >>= 2) & 3)));
- condition._throttledResources.Add(Tuple.Create(ThrottledResourceType.Internal, (ThrottlingType)((groupCode >> 2) & 3)));
+ condition._throttledResources.Add(Tuple.Create(ThrottledResourceType.Internal, (ThrottlingType)(groupCode >> 2 & 3)));
return condition;
}
diff --git a/src/Umbraco.Cms.Persistence.SqlServer/Interceptors/SqlServerAddRetryPolicyInterceptor.cs b/src/Umbraco.Cms.Persistence.SqlServer/Interceptors/SqlServerAddRetryPolicyInterceptor.cs
index 139efea85f..b4b6018aea 100644
--- a/src/Umbraco.Cms.Persistence.SqlServer/Interceptors/SqlServerAddRetryPolicyInterceptor.cs
+++ b/src/Umbraco.Cms.Persistence.SqlServer/Interceptors/SqlServerAddRetryPolicyInterceptor.cs
@@ -3,6 +3,7 @@ using Microsoft.Extensions.Options;
using NPoco;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Infrastructure.Persistence.FaultHandling;
+using Umbraco.Cms.Persistence.SqlServer.FaultHandling;
using Umbraco.Extensions;
namespace Umbraco.Cms.Persistence.SqlServer.Interceptors;
@@ -21,12 +22,8 @@ public class SqlServerAddRetryPolicyInterceptor : SqlServerConnectionInterceptor
return conn;
}
- RetryPolicy? connectionRetryPolicy =
- RetryPolicyFactory.GetDefaultSqlConnectionRetryPolicyByConnectionString(_connectionStrings.CurrentValue
- .ConnectionString);
- RetryPolicy? commandRetryPolicy =
- RetryPolicyFactory.GetDefaultSqlCommandRetryPolicyByConnectionString(_connectionStrings.CurrentValue
- .ConnectionString);
+ RetryPolicy? connectionRetryPolicy = RetryPolicyFactory.GetDefaultSqlConnectionRetryPolicyByConnectionString(_connectionStrings.CurrentValue.ConnectionString);
+ RetryPolicy? commandRetryPolicy = RetryPolicyFactory.GetDefaultSqlCommandRetryPolicyByConnectionString(_connectionStrings.CurrentValue.ConnectionString);
if (connectionRetryPolicy == null && commandRetryPolicy == null)
{
diff --git a/src/Umbraco.Infrastructure/Persistence/LocalDb.cs b/src/Umbraco.Cms.Persistence.SqlServer/LocalDb.cs
similarity index 99%
rename from src/Umbraco.Infrastructure/Persistence/LocalDb.cs
rename to src/Umbraco.Cms.Persistence.SqlServer/LocalDb.cs
index d6c23abba8..6fcdfca76a 100644
--- a/src/Umbraco.Infrastructure/Persistence/LocalDb.cs
+++ b/src/Umbraco.Cms.Persistence.SqlServer/LocalDb.cs
@@ -2,7 +2,7 @@ using System.Data;
using System.Diagnostics;
using Microsoft.Data.SqlClient;
-namespace Umbraco.Cms.Infrastructure.Persistence;
+namespace Umbraco.Cms.Persistence.SqlServer;
///
/// Manages LocalDB databases.
@@ -153,7 +153,7 @@ public class LocalDb
return null;
}
- return output.Split(new[] {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries);
+ return output.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
}
///
@@ -861,7 +861,7 @@ public class LocalDb
{
var nop = (targetFilesPath == null || targetFilesPath == filesPath)
&& (targetDatabaseName == null || targetDatabaseName == databaseName)
- && ((sourceExtension == null && targetExtension == null) || sourceExtension == targetExtension);
+ && (sourceExtension == null && targetExtension == null || sourceExtension == targetExtension);
if (nop && delete == false)
{
return;
@@ -994,8 +994,8 @@ public class LocalDb
}
using (var p = new Process
- {
- StartInfo =
+ {
+ StartInfo =
{
UseShellExecute = false,
RedirectStandardOutput = true,
@@ -1005,7 +1005,7 @@ public class LocalDb
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden
}
- })
+ })
{
p.Start();
output = p.StandardOutput.ReadToEnd();
diff --git a/src/Umbraco.Cms.Persistence.SqlServer/NPocoSqlServerDatabaseExtensions.cs b/src/Umbraco.Cms.Persistence.SqlServer/NPocoSqlServerDatabaseExtensions.cs
new file mode 100644
index 0000000000..3d875a243a
--- /dev/null
+++ b/src/Umbraco.Cms.Persistence.SqlServer/NPocoSqlServerDatabaseExtensions.cs
@@ -0,0 +1,29 @@
+using Microsoft.Data.SqlClient;
+using NPoco;
+using NPoco.SqlServer;
+using Umbraco.Extensions;
+
+namespace Umbraco.Cms.Persistence.SqlServer;
+
+public static class NPocoSqlServerDatabaseExtensions
+{
+ ///
+ /// Configures NPoco's SqlBulkCopyHelper to use the correct SqlConnection and SqlTransaction instances from the
+ /// underlying RetryDbConnection and ProfiledDbTransaction
+ ///
+ ///
+ /// This is required to use NPoco's own method because we use
+ /// wrapped DbConnection and DbTransaction instances.
+ /// NPoco's InsertBulk method only caters for efficient bulk inserting records for Sql Server, it does not cater for
+ /// bulk inserting of records for
+ /// any other database type and in which case will just insert records one at a time.
+ /// NPoco's InsertBulk method also deals with updating the passed in entity's PK/ID once it's inserted whereas our own
+ /// BulkInsertRecords methods
+ /// do not handle this scenario.
+ ///
+ public static void ConfigureNPocoBulkExtensions()
+ {
+ SqlBulkCopyHelper.SqlConnectionResolver = NPocoDatabaseExtensions.GetTypedConnection;
+ SqlBulkCopyHelper.SqlTransactionResolver = NPocoDatabaseExtensions.GetTypedTransaction;
+ }
+}
diff --git a/src/Umbraco.Cms.Persistence.SqlServer/Services/SqlServerBulkSqlInsertProvider.cs b/src/Umbraco.Cms.Persistence.SqlServer/Services/SqlServerBulkSqlInsertProvider.cs
index dbaab82ad4..d87fa99d5e 100644
--- a/src/Umbraco.Cms.Persistence.SqlServer/Services/SqlServerBulkSqlInsertProvider.cs
+++ b/src/Umbraco.Cms.Persistence.SqlServer/Services/SqlServerBulkSqlInsertProvider.cs
@@ -50,8 +50,7 @@ public class SqlServerBulkSqlInsertProvider : IBulkSqlInsertProvider
{
// use typed connection and transaction or SqlBulkCopy
SqlConnection tConnection = NPocoDatabaseExtensions.GetTypedConnection(database.Connection);
- SqlTransaction tTransaction =
- NPocoDatabaseExtensions.GetTypedTransaction(command.Transaction);
+ SqlTransaction tTransaction = NPocoDatabaseExtensions.GetTypedTransaction(command.Transaction);
var tableName = pocoData.TableInfo.TableName;
if (database.SqlContext.SqlSyntax is not SqlServerSyntaxProvider syntax)
@@ -62,9 +61,8 @@ public class SqlServerBulkSqlInsertProvider : IBulkSqlInsertProvider
using (var copy = new SqlBulkCopy(tConnection, SqlBulkCopyOptions.Default, tTransaction)
{
// 0 = no bulk copy timeout. If a timeout occurs it will be an connection/command timeout.
- BulkCopyTimeout = 0,
+ BulkCopyTimeout = 0,
DestinationTableName = tableName,
-
// be consistent with NPoco: https://github.com/schotime/NPoco/blob/5117a55fde57547e928246c044fd40bd00b2d7d1/src/NPoco.SqlServer/SqlBulkCopyHelper.cs#L50
BatchSize = 4096,
})
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 e78c210ae2..d2cfff9a2e 100644
--- a/src/Umbraco.Cms.Persistence.SqlServer/Umbraco.Cms.Persistence.SqlServer.csproj
+++ b/src/Umbraco.Cms.Persistence.SqlServer/Umbraco.Cms.Persistence.SqlServer.csproj
@@ -1,12 +1,14 @@
-
- net7.0
- Umbraco.Cms.Persistence.SqlServer
- Umbraco.Cms.Persistence.SqlServer
+ Umbraco CMS - Persistence - SQL Server
Adds support for SQL Server to Umbraco CMS.
+ net7.0
+
+
+
+
@@ -19,5 +21,4 @@
<_Parameter1>Umbraco.Tests.UnitTests
-
diff --git a/src/Umbraco.Cms.Persistence.SqlServer/UmbracoBuilderExtensions.cs b/src/Umbraco.Cms.Persistence.SqlServer/UmbracoBuilderExtensions.cs
index a47e92bf2e..aa4743faf8 100644
--- a/src/Umbraco.Cms.Persistence.SqlServer/UmbracoBuilderExtensions.cs
+++ b/src/Umbraco.Cms.Persistence.SqlServer/UmbracoBuilderExtensions.cs
@@ -45,6 +45,8 @@ public static class UmbracoBuilderExtensions
DbProviderFactories.UnregisterFactory(Constants.ProviderName);
DbProviderFactories.RegisterFactory(Constants.ProviderName, SqlClientFactory.Instance);
+ NPocoSqlServerDatabaseExtensions.ConfigureNPocoBulkExtensions();
+
// Support provider name set by the configuration API for connection string environment variables
builder.Services.ConfigureAll(options =>
{
diff --git a/src/Umbraco.Cms.Persistence.Sqlite/CompatibilitySuppressions.xml b/src/Umbraco.Cms.Persistence.Sqlite/CompatibilitySuppressions.xml
new file mode 100644
index 0000000000..7baad05aa0
--- /dev/null
+++ b/src/Umbraco.Cms.Persistence.Sqlite/CompatibilitySuppressions.xml
@@ -0,0 +1,7 @@
+
+
+
+ PKV006
+ net6.0
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Cms.Persistence.Sqlite/Services/SqliteDistributedLockingMechanism.cs b/src/Umbraco.Cms.Persistence.Sqlite/Services/SqliteDistributedLockingMechanism.cs
index a4a31416fa..009f0cc122 100644
--- a/src/Umbraco.Cms.Persistence.Sqlite/Services/SqliteDistributedLockingMechanism.cs
+++ b/src/Umbraco.Cms.Persistence.Sqlite/Services/SqliteDistributedLockingMechanism.cs
@@ -1,6 +1,5 @@
using System.Data;
using System.Data.Common;
-using Microsoft.Data.SqlClient;
using Microsoft.Data.Sqlite;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
@@ -83,7 +82,7 @@ public class SqliteDistributedLockingMechanism : IDistributedLockingMechanism
throw new ArgumentOutOfRangeException(nameof(lockType), lockType, @"Unsupported lockType");
}
}
- catch (SqlException ex) when (ex.Number == 1222)
+ catch (SqliteException ex) when (ex.SqliteErrorCode == SQLitePCL.raw.SQLITE_BUSY)
{
if (LockType == DistributedLockType.ReadLock)
{
diff --git a/src/Umbraco.Cms.Persistence.Sqlite/Umbraco.Cms.Persistence.Sqlite.csproj b/src/Umbraco.Cms.Persistence.Sqlite/Umbraco.Cms.Persistence.Sqlite.csproj
index 5e0b1653cf..c0a8b649fe 100644
--- a/src/Umbraco.Cms.Persistence.Sqlite/Umbraco.Cms.Persistence.Sqlite.csproj
+++ b/src/Umbraco.Cms.Persistence.Sqlite/Umbraco.Cms.Persistence.Sqlite.csproj
@@ -1,18 +1,15 @@
-
- net7.0
- Umbraco.Cms.Persistence.Sqlite
- Umbraco.Cms.Persistence.Sqlite
+ Umbraco CMS - Persistence - SQLite
Adds support for SQLite to Umbraco CMS.
+ net7.0
+
+
+
+
-
-
-
-
-
diff --git a/src/Umbraco.Cms.StaticAssets/CompatibilitySuppressions.xml b/src/Umbraco.Cms.StaticAssets/CompatibilitySuppressions.xml
new file mode 100644
index 0000000000..7baad05aa0
--- /dev/null
+++ b/src/Umbraco.Cms.StaticAssets/CompatibilitySuppressions.xml
@@ -0,0 +1,7 @@
+
+
+
+ PKV006
+ net6.0
+
+
\ No newline at end of file
diff --git a/src/Umbraco.Cms.StaticAssets/Umbraco.Cms.StaticAssets.csproj b/src/Umbraco.Cms.StaticAssets/Umbraco.Cms.StaticAssets.csproj
index 89cb8a44aa..e88b83bbbe 100644
--- a/src/Umbraco.Cms.StaticAssets/Umbraco.Cms.StaticAssets.csproj
+++ b/src/Umbraco.Cms.StaticAssets/Umbraco.Cms.StaticAssets.csproj
@@ -1,20 +1,12 @@
-
+ Umbraco CMS - Static assets
+ Contains the static assets needed to run Umbraco CMS.
net7.0
true
- Umbraco.Cms.StaticAssets
- Contains the static assets that is required to run Umbraco CMS.
/
-
-
- true
- buildTransitive
-
-
-
@@ -25,43 +17,32 @@
- $(ProjectDir)wwwroot/umbraco
+ $(ProjectDir)wwwroot\umbraco
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
+
+
-
+
-
-
-
-
diff --git a/src/Umbraco.Cms.Targets/Umbraco.Cms.Targets.csproj b/src/Umbraco.Cms.Targets/Umbraco.Cms.Targets.csproj
new file mode 100644
index 0000000000..98d5b0741b
--- /dev/null
+++ b/src/Umbraco.Cms.Targets/Umbraco.Cms.Targets.csproj
@@ -0,0 +1,32 @@
+
+
+ Umbraco CMS
+ Installs Umbraco CMS with minimal dependencies in your ASP.NET Core project.
+ net7.0
+ false
+ false
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(MSBuildThisFileDirectory)appsettings-schema.json
+ $(MSBuildThisFileDirectory)..\JsonSchema\
+
+
+
+
+
+
diff --git a/src/Umbraco.Cms/buildTransitive/Umbraco.Cms.props b/src/Umbraco.Cms.Targets/buildTransitive/Umbraco.Cms.Targets.props
similarity index 56%
rename from src/Umbraco.Cms/buildTransitive/Umbraco.Cms.props
rename to src/Umbraco.Cms.Targets/buildTransitive/Umbraco.Cms.Targets.props
index 7266a05f6e..a967c4fd33 100644
--- a/src/Umbraco.Cms/buildTransitive/Umbraco.Cms.props
+++ b/src/Umbraco.Cms.Targets/buildTransitive/Umbraco.Cms.Targets.props
@@ -1,9 +1,9 @@
- $(DefaultItemExcludes);App_Plugins/**
- $(DefaultItemExcludes);umbraco/Data/**
- $(DefaultItemExcludes);umbraco/Logs/**
- $(DefaultItemExcludes);wwwroot/media/**
+ $(DefaultItemExcludes);App_Plugins\**
+ $(DefaultItemExcludes);umbraco\Data\**
+ $(DefaultItemExcludes);umbraco\Logs\**
+ $(DefaultItemExcludes);wwwroot\media\**
diff --git a/src/Umbraco.Cms/buildTransitive/Umbraco.Cms.targets b/src/Umbraco.Cms.Targets/buildTransitive/Umbraco.Cms.Targets.targets
similarity index 62%
rename from src/Umbraco.Cms/buildTransitive/Umbraco.Cms.targets
rename to src/Umbraco.Cms.Targets/buildTransitive/Umbraco.Cms.Targets.targets
index bd0fdbf304..03b6f90812 100644
--- a/src/Umbraco.Cms/buildTransitive/Umbraco.Cms.targets
+++ b/src/Umbraco.Cms.Targets/buildTransitive/Umbraco.Cms.Targets.targets
@@ -3,31 +3,22 @@
$(MSBuildThisFileDirectory)..\appsettings-schema.json
-
+
-
+
-
-
-
+
+
-
+
<_AppPluginsFiles Include="App_Plugins\**" />
-
-
+
-
+
<_UmbracoFolderFiles Include="umbraco\config\**" />
<_UmbracoFolderFiles Include="umbraco\PartialViewMacros\**" />
diff --git a/src/Umbraco.Cms/Umbraco.Cms.csproj b/src/Umbraco.Cms/Umbraco.Cms.csproj
index ce43dc67fc..2b710029be 100644
--- a/src/Umbraco.Cms/Umbraco.Cms.csproj
+++ b/src/Umbraco.Cms/Umbraco.Cms.csproj
@@ -1,50 +1,16 @@
+ Umbraco CMS
+ Installs Umbraco CMS with all default dependencies in your ASP.NET Core project.
net7.0
false
- Umbraco.Cms
- Umbraco.Cms
- Installs Umbraco CMS in your ASP.NET Core project
false
-
+
+
+
-
-
-
-
-
-
-
-
-
-
- $(ProjectDir)appsettings-schema.json
- $(ProjectDir)../JsonSchema/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Umbraco.Core/Media/IImageDimensionExtractor.cs b/src/Umbraco.Core/Media/IImageDimensionExtractor.cs
index 67f11415d3..632b29118c 100644
--- a/src/Umbraco.Core/Media/IImageDimensionExtractor.cs
+++ b/src/Umbraco.Core/Media/IImageDimensionExtractor.cs
@@ -2,7 +2,25 @@ using System.Drawing;
namespace Umbraco.Cms.Core.Media;
+///
+/// Allows extracting the image dimensions from a stream.
+///
public interface IImageDimensionExtractor
{
- public Size? GetDimensions(Stream? stream);
+ ///
+ /// Gets the supported image file types/extensions.
+ ///
+ ///
+ /// The supported image file types/extensions.
+ ///
+ IEnumerable SupportedImageFileTypes { get; }
+
+ ///
+ /// Gets the dimensions.
+ ///
+ /// The stream.
+ ///
+ /// The dimensions of the image if the stream was parsable; otherwise, null.
+ ///
+ public Size? GetDimensions(Stream stream);
}
diff --git a/src/Umbraco.Core/Media/ImageDimensionExtractorExtensions.cs b/src/Umbraco.Core/Media/ImageDimensionExtractorExtensions.cs
new file mode 100644
index 0000000000..64efb7e0ec
--- /dev/null
+++ b/src/Umbraco.Core/Media/ImageDimensionExtractorExtensions.cs
@@ -0,0 +1,23 @@
+using Umbraco.Cms.Core;
+using Umbraco.Cms.Core.Media;
+
+namespace Umbraco.Extensions;
+
+public static class ImageDimensionExtractorExtensions
+{
+ ///
+ /// Gets a value indicating whether the file extension corresponds to a supported image.
+ ///
+ /// The image dimension extractor implementation that provides detail on which image extensions are supported.
+ /// The file extension.
+ ///
+ /// A value indicating whether the file extension corresponds to an image.
+ ///
+ public static bool IsSupportedImageFormat(this IImageDimensionExtractor imageDimensionExtractor, string extension)
+ {
+ ArgumentNullException.ThrowIfNull(imageDimensionExtractor);
+
+ return string.IsNullOrWhiteSpace(extension) == false &&
+ imageDimensionExtractor.SupportedImageFileTypes.InvariantContains(extension.TrimStart(Constants.CharArrays.Period));
+ }
+}
diff --git a/src/Umbraco.Core/Media/ImageUrlGeneratorExtensions.cs b/src/Umbraco.Core/Media/ImageUrlGeneratorExtensions.cs
index ab904f2094..bc75f1176a 100644
--- a/src/Umbraco.Core/Media/ImageUrlGeneratorExtensions.cs
+++ b/src/Umbraco.Core/Media/ImageUrlGeneratorExtensions.cs
@@ -6,26 +6,18 @@ namespace Umbraco.Extensions;
public static class ImageUrlGeneratorExtensions
{
///
- /// Gets a value indicating whether the file extension corresponds to a supported image.
+ /// Gets a value indicating whether the file extension corresponds to a supported image.
///
- ///
- /// The image URL generator implementation that provides detail on which image extensions
- /// are supported.
- ///
+ /// The image URL generator implementation that provides detail on which image extensions are supported.
/// The file extension.
///
- /// A value indicating whether the file extension corresponds to an image.
+ /// A value indicating whether the file extension corresponds to an image.
///
- /// imageUrlGenerator
public static bool IsSupportedImageFormat(this IImageUrlGenerator imageUrlGenerator, string extension)
{
- if (imageUrlGenerator == null)
- {
- throw new ArgumentNullException(nameof(imageUrlGenerator));
- }
+ ArgumentNullException.ThrowIfNull(imageUrlGenerator);
return string.IsNullOrWhiteSpace(extension) == false &&
- imageUrlGenerator.SupportedImageFileTypes.InvariantContains(
- extension.TrimStart(Constants.CharArrays.Period));
+ imageUrlGenerator.SupportedImageFileTypes.InvariantContains(extension.TrimStart(Constants.CharArrays.Period));
}
}
diff --git a/src/Umbraco.Core/Media/NoopImageDimensionExtractor.cs b/src/Umbraco.Core/Media/NoopImageDimensionExtractor.cs
new file mode 100644
index 0000000000..da5dc1f9ef
--- /dev/null
+++ b/src/Umbraco.Core/Media/NoopImageDimensionExtractor.cs
@@ -0,0 +1,10 @@
+using System.Drawing;
+
+namespace Umbraco.Cms.Core.Media;
+
+public sealed class NoopImageDimensionExtractor : IImageDimensionExtractor
+{
+ public IEnumerable SupportedImageFileTypes { get; } = Enumerable.Empty();
+
+ public Size? GetDimensions(Stream stream) => null;
+}
diff --git a/src/Umbraco.Core/Media/NoopImageUrlGenerator.cs b/src/Umbraco.Core/Media/NoopImageUrlGenerator.cs
new file mode 100644
index 0000000000..de2338a632
--- /dev/null
+++ b/src/Umbraco.Core/Media/NoopImageUrlGenerator.cs
@@ -0,0 +1,10 @@
+using Umbraco.Cms.Core.Models;
+
+namespace Umbraco.Cms.Core.Media;
+
+public sealed class NoopImageUrlGenerator : IImageUrlGenerator
+{
+ public IEnumerable SupportedImageFileTypes { get; } = Enumerable.Empty();
+
+ public string? GetImageUrl(ImageUrlGenerationOptions options) => options?.ImageUrl;
+}
diff --git a/src/Umbraco.Core/Media/UploadAutoFillProperties.cs b/src/Umbraco.Core/Media/UploadAutoFillProperties.cs
index 6a5ffd23d7..654d23135e 100644
--- a/src/Umbraco.Core/Media/UploadAutoFillProperties.cs
+++ b/src/Umbraco.Core/Media/UploadAutoFillProperties.cs
@@ -8,30 +8,26 @@ using Umbraco.Extensions;
namespace Umbraco.Cms.Core.Media;
///
-/// Provides methods to manage auto-fill properties for upload fields.
+/// Provides methods to manage auto-fill properties for upload fields.
///
public class UploadAutoFillProperties
{
private readonly IImageDimensionExtractor _imageDimensionExtractor;
- private readonly IImageUrlGenerator _imageUrlGenerator;
private readonly ILogger _logger;
private readonly MediaFileManager _mediaFileManager;
public UploadAutoFillProperties(
MediaFileManager mediaFileManager,
ILogger logger,
- IImageUrlGenerator imageUrlGenerator,
IImageDimensionExtractor imageDimensionExtractor)
{
_mediaFileManager = mediaFileManager ?? throw new ArgumentNullException(nameof(mediaFileManager));
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
- _imageUrlGenerator = imageUrlGenerator ?? throw new ArgumentNullException(nameof(imageUrlGenerator));
- _imageDimensionExtractor =
- imageDimensionExtractor ?? throw new ArgumentNullException(nameof(imageDimensionExtractor));
+ _imageDimensionExtractor = imageDimensionExtractor ?? throw new ArgumentNullException(nameof(imageDimensionExtractor));
}
///
- /// Resets the auto-fill properties of a content item, for a specified auto-fill configuration.
+ /// Resets the auto-fill properties of a content item, for a specified auto-fill configuration.
///
/// The content item.
/// The auto-fill configuration.
@@ -39,39 +35,27 @@ public class UploadAutoFillProperties
/// Variation segment.
public void Reset(IContentBase content, ImagingAutoFillUploadField autoFillConfig, string? culture, string? segment)
{
- if (content == null)
- {
- throw new ArgumentNullException(nameof(content));
- }
-
- if (autoFillConfig == null)
- {
- throw new ArgumentNullException(nameof(autoFillConfig));
- }
+ ArgumentNullException.ThrowIfNull(content);
+ ArgumentNullException.ThrowIfNull(autoFillConfig);
ResetProperties(content, autoFillConfig, culture, segment);
}
///
- /// Populates the auto-fill properties of a content item, for a specified auto-fill configuration.
+ /// Populates the auto-fill properties of a content item, for a specified auto-fill configuration.
///
/// The content item.
/// The auto-fill configuration.
/// The filesystem path to the uploaded file.
- /// The parameter is the path relative to the filesystem.
/// Variation language.
/// Variation segment.
+ ///
+ /// The parameter is the path relative to the filesystem.
+ ///
public void Populate(IContentBase content, ImagingAutoFillUploadField autoFillConfig, string filepath, string? culture, string? segment)
{
- if (content == null)
- {
- throw new ArgumentNullException(nameof(content));
- }
-
- if (autoFillConfig == null)
- {
- throw new ArgumentNullException(nameof(autoFillConfig));
- }
+ ArgumentNullException.ThrowIfNull(content);
+ ArgumentNullException.ThrowIfNull(autoFillConfig);
// no file = reset, file = auto-fill
if (filepath.IsNullOrWhiteSpace())
@@ -101,25 +85,18 @@ public class UploadAutoFillProperties
}
///
- /// Populates the auto-fill properties of a content item.
+ /// Populates the auto-fill properties of a content item.
///
/// The content item.
- ///
+ /// The automatic fill configuration.
/// The filesystem-relative filepath, or null to clear properties.
/// The stream containing the file data.
/// Variation language.
/// Variation segment.
public void Populate(IContentBase content, ImagingAutoFillUploadField autoFillConfig, string filepath, Stream filestream, string culture, string segment)
{
- if (content == null)
- {
- throw new ArgumentNullException(nameof(content));
- }
-
- if (autoFillConfig == null)
- {
- throw new ArgumentNullException(nameof(autoFillConfig));
- }
+ ArgumentNullException.ThrowIfNull(content);
+ ArgumentNullException.ThrowIfNull(autoFillConfig);
// no file = reset, file = auto-fill
if (filepath.IsNullOrWhiteSpace() || filestream == null)
@@ -134,50 +111,23 @@ public class UploadAutoFillProperties
private static void SetProperties(IContentBase content, ImagingAutoFillUploadField autoFillConfig, Size? size, long? length, string extension, string? culture, string? segment)
{
- if (content == null)
- {
- throw new ArgumentNullException(nameof(content));
- }
+ ArgumentNullException.ThrowIfNull(content);
+ ArgumentNullException.ThrowIfNull(autoFillConfig);
- if (autoFillConfig == null)
- {
- throw new ArgumentNullException(nameof(autoFillConfig));
- }
+ void SetProperty(string alias, object? value) => UploadAutoFillProperties.SetProperty(content, alias, value, culture, segment);
- if (!string.IsNullOrWhiteSpace(autoFillConfig.WidthFieldAlias) &&
- content.Properties.Contains(autoFillConfig.WidthFieldAlias))
- {
- content.Properties[autoFillConfig.WidthFieldAlias]!.SetValue(
- size.HasValue ? size.Value.Width.ToInvariantString() : string.Empty, culture, segment);
- }
-
- if (!string.IsNullOrWhiteSpace(autoFillConfig.HeightFieldAlias) &&
- content.Properties.Contains(autoFillConfig.HeightFieldAlias))
- {
- content.Properties[autoFillConfig.HeightFieldAlias]!.SetValue(
- size.HasValue ? size.Value.Height.ToInvariantString() : string.Empty, culture, segment);
- }
-
- if (!string.IsNullOrWhiteSpace(autoFillConfig.LengthFieldAlias) &&
- content.Properties.Contains(autoFillConfig.LengthFieldAlias))
- {
- content.Properties[autoFillConfig.LengthFieldAlias]!.SetValue(length, culture, segment);
- }
-
- if (!string.IsNullOrWhiteSpace(autoFillConfig.ExtensionFieldAlias) &&
- content.Properties.Contains(autoFillConfig.ExtensionFieldAlias))
- {
- content.Properties[autoFillConfig.ExtensionFieldAlias]!.SetValue(extension, culture, segment);
- }
+ SetProperty(autoFillConfig.WidthFieldAlias, size.HasValue ? size.Value.Width.ToInvariantString() : null);
+ SetProperty(autoFillConfig.HeightFieldAlias, size.HasValue ? size.Value.Height.ToInvariantString() : null);
+ SetProperty(autoFillConfig.LengthFieldAlias, length);
+ SetProperty(autoFillConfig.ExtensionFieldAlias, extension);
}
- private void SetProperties(IContentBase content, ImagingAutoFillUploadField autoFillConfig, string filepath, Stream? filestream, string? culture, string? segment)
+ private void SetProperties(IContentBase content, ImagingAutoFillUploadField autoFillConfig, string filepath, Stream filestream, string? culture, string? segment)
{
var extension = (Path.GetExtension(filepath) ?? string.Empty).TrimStart(Constants.CharArrays.Period);
- Size? size = _imageUrlGenerator.IsSupportedImageFormat(extension)
- ? _imageDimensionExtractor.GetDimensions(filestream) ??
- (Size?)new Size(Constants.Conventions.Media.DefaultSize, Constants.Conventions.Media.DefaultSize)
+ Size? size = _imageDimensionExtractor.IsSupportedImageFormat(extension)
+ ? _imageDimensionExtractor.GetDimensions(filestream) ?? new Size(Constants.Conventions.Media.DefaultSize, Constants.Conventions.Media.DefaultSize)
: null;
SetProperties(content, autoFillConfig, size, filestream?.Length, extension, culture, segment);
@@ -185,34 +135,23 @@ public class UploadAutoFillProperties
private static void ResetProperties(IContentBase content, ImagingAutoFillUploadField autoFillConfig, string? culture, string? segment)
{
- if (content == null)
- {
- throw new ArgumentNullException(nameof(content));
- }
+ ArgumentNullException.ThrowIfNull(content);
+ ArgumentNullException.ThrowIfNull(autoFillConfig);
- if (autoFillConfig == null)
- {
- throw new ArgumentNullException(nameof(autoFillConfig));
- }
+ void ResetProperty(string alias) => SetProperty(content, alias, null, culture, segment);
- if (content.Properties.Contains(autoFillConfig.WidthFieldAlias))
- {
- content.Properties[autoFillConfig.WidthFieldAlias]?.SetValue(string.Empty, culture, segment);
- }
+ ResetProperty(autoFillConfig.WidthFieldAlias);
+ ResetProperty(autoFillConfig.HeightFieldAlias);
+ ResetProperty(autoFillConfig.LengthFieldAlias);
+ ResetProperty(autoFillConfig.ExtensionFieldAlias);
+ }
- if (content.Properties.Contains(autoFillConfig.HeightFieldAlias))
+ private static void SetProperty(IContentBase content, string alias, object? value, string? culture, string? segment)
+ {
+ if (!string.IsNullOrEmpty(alias) &&
+ content.Properties.TryGetValue(alias, out var property))
{
- content.Properties[autoFillConfig.HeightFieldAlias]?.SetValue(string.Empty, culture, segment);
- }
-
- if (content.Properties.Contains(autoFillConfig.LengthFieldAlias))
- {
- content.Properties[autoFillConfig.LengthFieldAlias]?.SetValue(string.Empty, culture, segment);
- }
-
- if (content.Properties.Contains(autoFillConfig.ExtensionFieldAlias))
- {
- content.Properties[autoFillConfig.ExtensionFieldAlias]?.SetValue(string.Empty, culture, segment);
+ property.SetValue(value, culture, segment);
}
}
}
diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj
index 3593c6b0c7..969a489d81 100644
--- a/src/Umbraco.Core/Umbraco.Core.csproj
+++ b/src/Umbraco.Core/Umbraco.Core.csproj
@@ -1,39 +1,25 @@
-
-
+
+ Umbraco.Cms.Core
+ Umbraco CMS - Core
+ Contains the core assembly needed to run Umbraco CMS.
net7.0
Umbraco.Cms.Core
- Umbraco CMS
- Umbraco.Cms.Core
- Umbraco CMS Core
- Contains the core assembly needed to run Umbraco Cms. This package only contains the assembly, and can be used for package development. Use the template in the Umbraco.Templates package to setup Umbraco
- Umbraco CMS
-
-
-
- bin\Release\Umbraco.Core.xml
-
-
-
-
-
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
+
+
+
+
+
+
+
+
-
-
- all
-
+
@@ -60,8 +46,4 @@
-
-
-
-
diff --git a/src/Umbraco.Examine.Lucene/CompatibilitySuppressions.xml b/src/Umbraco.Examine.Lucene/CompatibilitySuppressions.xml
deleted file mode 100644
index 681c7cdab5..0000000000
--- a/src/Umbraco.Examine.Lucene/CompatibilitySuppressions.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
- CP0008
- T:Umbraco.Cms.Infrastructure.Examine.UmbracoContentIndex
- lib/net6.0/Umbraco.Examine.Lucene.dll
- lib/net6.0/Umbraco.Examine.Lucene.dll
- true
-
-
\ No newline at end of file
diff --git a/src/Umbraco.Examine.Lucene/Umbraco.Examine.Lucene.csproj b/src/Umbraco.Examine.Lucene/Umbraco.Examine.Lucene.csproj
index e7ea0f8087..5da47eb04a 100644
--- a/src/Umbraco.Examine.Lucene/Umbraco.Examine.Lucene.csproj
+++ b/src/Umbraco.Examine.Lucene/Umbraco.Examine.Lucene.csproj
@@ -1,35 +1,16 @@
+ Umbraco.Cms.Examine.Lucene
+ Umbraco CMS - Examine - Lucene
+ Adds Examine searching support using Lucene to Umbraco CMS.
net7.0
Umbraco.Cms.Infrastructure.Examine
- Umbraco CMS
- Umbraco.Examine.Lucene
-
- Umbraco.Cms.Examine.Lucene
-
- true
- bin\Release\Umbraco.Examine.Lucene.xml
-
-
-
-
-
-
-
-
-
-
+
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
- all
-
+
diff --git a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs
index 62bafcd28e..0757afe434 100644
--- a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs
+++ b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs
@@ -3,7 +3,6 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Serilog;
-using SixLabors.ImageSharp;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Cache;
using Umbraco.Cms.Core.Configuration;
@@ -43,7 +42,6 @@ using Umbraco.Cms.Infrastructure.HealthChecks;
using Umbraco.Cms.Infrastructure.HostedServices;
using Umbraco.Cms.Infrastructure.Install;
using Umbraco.Cms.Infrastructure.Mail;
-using Umbraco.Cms.Infrastructure.Media;
using Umbraco.Cms.Infrastructure.Migrations;
using Umbraco.Cms.Infrastructure.Migrations.Install;
using Umbraco.Cms.Infrastructure.Migrations.PostMigrations;
@@ -208,13 +206,11 @@ public static partial class UmbracoBuilderExtensions
builder.Services.AddSingleton();
builder.Services.AddSingleton();
+ builder.Services.AddSingleton();
+ builder.Services.AddSingleton();
builder.Services.AddSingleton();
- // Add default ImageSharp configuration and service implementations
- builder.Services.AddSingleton(Configuration.Default);
- builder.Services.AddSingleton();
-
builder.Services.AddTransient();
builder.AddInstaller();
diff --git a/src/Umbraco.Infrastructure/Install/InstallSteps/NewInstallStep.cs b/src/Umbraco.Infrastructure/Install/InstallSteps/NewInstallStep.cs
index cf984aed59..386d0ac251 100644
--- a/src/Umbraco.Infrastructure/Install/InstallSteps/NewInstallStep.cs
+++ b/src/Umbraco.Infrastructure/Install/InstallSteps/NewInstallStep.cs
@@ -209,30 +209,29 @@ namespace Umbraco.Cms.Infrastructure.Install.InstallSteps
}
ConnectionStrings? umbracoConnectionString = _connectionStrings.CurrentValue;
-
var isConnectionStringConfigured = umbracoConnectionString.IsConnectionStringConfigured();
if (isConnectionStringConfigured)
{
installState = (installState | InstallState.ConnectionStringConfigured) & ~InstallState.Unknown;
- }
- DbProviderFactory? factory = _dbProviderFactoryCreator.CreateFactory(umbracoConnectionString.ProviderName);
- var isConnectionAvailable = isConnectionStringConfigured && DbConnectionExtensions.IsConnectionAvailable(umbracoConnectionString.ConnectionString, factory);
- if (isConnectionAvailable)
- {
- installState = (installState | InstallState.CanConnect) & ~InstallState.Unknown;
- }
+ DbProviderFactory? factory = _dbProviderFactoryCreator.CreateFactory(umbracoConnectionString.ProviderName);
+ var isConnectionAvailable = isConnectionStringConfigured && DbConnectionExtensions.IsConnectionAvailable(umbracoConnectionString.ConnectionString, factory);
+ if (isConnectionAvailable)
+ {
+ installState = (installState | InstallState.CanConnect) & ~InstallState.Unknown;
+ }
- var isUmbracoInstalled = isConnectionAvailable && _databaseBuilder.IsUmbracoInstalled();
- if (isUmbracoInstalled)
- {
- installState = (installState | InstallState.UmbracoInstalled) & ~InstallState.Unknown;
- }
+ var isUmbracoInstalled = isConnectionAvailable && _databaseBuilder.IsUmbracoInstalled();
+ if (isUmbracoInstalled)
+ {
+ installState = (installState | InstallState.UmbracoInstalled) & ~InstallState.Unknown;
+ }
- var hasSomeNonDefaultUser = isUmbracoInstalled && _databaseBuilder.HasSomeNonDefaultUser();
- if (hasSomeNonDefaultUser)
- {
- installState = (installState | InstallState.HasNonDefaultUser) & ~InstallState.Unknown;
+ var hasSomeNonDefaultUser = isUmbracoInstalled && _databaseBuilder.HasSomeNonDefaultUser();
+ if (hasSomeNonDefaultUser)
+ {
+ installState = (installState | InstallState.HasNonDefaultUser) & ~InstallState.Unknown;
+ }
}
return installState;
diff --git a/src/Umbraco.Infrastructure/Persistence/NPocoDatabaseExtensions-Bulk.cs b/src/Umbraco.Infrastructure/Persistence/NPocoDatabaseExtensions-Bulk.cs
index 92ccb0fc81..fec87921a6 100644
--- a/src/Umbraco.Infrastructure/Persistence/NPocoDatabaseExtensions-Bulk.cs
+++ b/src/Umbraco.Infrastructure/Persistence/NPocoDatabaseExtensions-Bulk.cs
@@ -1,8 +1,6 @@
using System.Data;
using System.Data.Common;
-using Microsoft.Data.SqlClient;
using NPoco;
-using NPoco.SqlServer;
using Umbraco.Cms.Core;
using Umbraco.Cms.Infrastructure.Persistence;
@@ -13,26 +11,6 @@ namespace Umbraco.Extensions;
///
public static partial class NPocoDatabaseExtensions
{
- ///
- /// Configures NPoco's SqlBulkCopyHelper to use the correct SqlConnection and SqlTransaction instances from the
- /// underlying RetryDbConnection and ProfiledDbTransaction
- ///
- ///
- /// This is required to use NPoco's own method because we use
- /// wrapped DbConnection and DbTransaction instances.
- /// NPoco's InsertBulk method only caters for efficient bulk inserting records for Sql Server, it does not cater for
- /// bulk inserting of records for
- /// any other database type and in which case will just insert records one at a time.
- /// NPoco's InsertBulk method also deals with updating the passed in entity's PK/ID once it's inserted whereas our own
- /// BulkInsertRecords methods
- /// do not handle this scenario.
- ///
- public static void ConfigureNPocoBulkExtensions()
- {
- SqlBulkCopyHelper.SqlConnectionResolver = dbConn => GetTypedConnection(dbConn);
- SqlBulkCopyHelper.SqlTransactionResolver = dbTran => GetTypedTransaction(dbTran);
- }
-
///
/// Determines whether a column should be part of a bulk-insert.
///
diff --git a/src/Umbraco.Infrastructure/Persistence/NPocoDatabaseExtensions.cs b/src/Umbraco.Infrastructure/Persistence/NPocoDatabaseExtensions.cs
index 1a64b44aa6..1dc12a805f 100644
--- a/src/Umbraco.Infrastructure/Persistence/NPocoDatabaseExtensions.cs
+++ b/src/Umbraco.Infrastructure/Persistence/NPocoDatabaseExtensions.cs
@@ -1,7 +1,6 @@
using System.Data;
using System.Data.Common;
using System.Text.RegularExpressions;
-using Microsoft.Data.SqlClient;
using NPoco;
using StackExchange.Profiling.Data;
using Umbraco.Cms.Infrastructure.Persistence;
@@ -186,7 +185,7 @@ public static partial class NPocoDatabaseExtensions
db.Insert(poco);
return RecordPersistenceType.Insert;
}
- catch (SqlException)
+ catch (DbException)
{
// assuming all db engines will throw SQLException exception
// failed: exists (due to race cond RC1)
diff --git a/src/Umbraco.Infrastructure/Persistence/NPocoDatabaseTypeExtensions.cs b/src/Umbraco.Infrastructure/Persistence/NPocoDatabaseTypeExtensions.cs
index 3159cf34e1..4dd63c9919 100644
--- a/src/Umbraco.Infrastructure/Persistence/NPocoDatabaseTypeExtensions.cs
+++ b/src/Umbraco.Infrastructure/Persistence/NPocoDatabaseTypeExtensions.cs
@@ -6,12 +6,8 @@ namespace Umbraco.Cms.Infrastructure.Persistence;
internal static class NPocoDatabaseTypeExtensions
{
[Obsolete("Usage of this method indicates a code smell.")]
- public static bool IsSqlServer(this DatabaseType databaseType) =>
-
- // note that because SqlServerDatabaseType is the base class for
- // all Sql Server types eg SqlServer2012DatabaseType, this will
- // test *any* version of Sql Server.
- databaseType is SqlServerDatabaseType;
+ public static bool IsSqlServer(this DatabaseType databaseType)
+ => databaseType is not null && databaseType.GetProviderName() == "Microsoft.Data.SqlClient";
[Obsolete("Usage of this method indicates a code smell.")]
public static bool IsSqlite(this DatabaseType databaseType)
diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TwoFactorLoginRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TwoFactorLoginRepository.cs
index efcd6f1d5c..9467ec9be4 100644
--- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TwoFactorLoginRepository.cs
+++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TwoFactorLoginRepository.cs
@@ -1,4 +1,3 @@
-using Microsoft.Data.SqlClient;
using Microsoft.Extensions.Logging;
using NPoco;
using Umbraco.Cms.Core;
@@ -43,25 +42,14 @@ internal class TwoFactorLoginRepository : EntityRepositoryBase> GetByUserOrMemberKeyAsync(Guid userOrMemberKey)
{
- try
- {
- Sql sql = Sql()
- .Select()
- .From()
- .Where(x => x.UserOrMemberKey == userOrMemberKey);
- List? dtos = await Database.FetchAsync(sql);
- return dtos.WhereNotNull().Select(Map).WhereNotNull();
- }
-
- // TODO (v11): Remove this as the table should always exist when upgrading from 10.x
- // SQL Server - table doesn't exist, likely upgrading from < 9.3.0.
- catch (SqlException ex) when (ex.Number == 208 && ex.Message.Contains(TwoFactorLoginDto.TableName))
- {
- return Enumerable.Empty();
- }
+ Sql sql = Sql()
+ .Select()
+ .From()
+ .Where(x => x.UserOrMemberKey == userOrMemberKey);
+ List? dtos = await Database.FetchAsync(sql);
+ return dtos.WhereNotNull().Select(Map).WhereNotNull();
}
-
protected override Sql GetBaseQuery(bool isCount)
{
Sql sql = SqlContext.Sql();
@@ -142,7 +130,10 @@ internal class TwoFactorLoginRepository : EntityRepositoryBase
+
+ Umbraco.Cms.Infrastructure
+ Umbraco CMS - Infrastructure
+ Contains the infrastructure assembly needed to run Umbraco CMS.
+ net7.0
+ Umbraco.Cms.Infrastructure
+
-
- net7.0
- Umbraco.Cms.Infrastructure
- Umbraco.Cms.Infrastructure
- Umbraco CMS Infrastructure
- Contains the infrastructure assembly needed to run Umbraco Cms. This package only contains the assembly, and can be used for package development. Use the template in the Umbraco.Templates package to setup Umbraco
-
+
+ $(DefineConstants);TRACE_SCOPES
+
-
- bin\Release\Umbraco.Infrastructure.xml
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- TRACE_SCOPES;
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- all
-
-
+
+
+ <_Parameter1>Umbraco.Tests
+
+
+ <_Parameter1>Umbraco.Tests.Benchmarks
+
+
+ <_Parameter1>Umbraco.Tests.Integration
+
+
+ <_Parameter1>Umbraco.Tests.Common
+
+
+ <_Parameter1>Umbraco.Tests.UnitTests
+
+
+ <_Parameter1>DynamicProxyGenAssembly2
+
+
+ <_Parameter1>Umbraco.New.Cms.Infrastructure
+
+
-
- <_UnmanagedRegistrationCache Remove="obj\Umbraco.Infrastructure.csproj.UnmanagedRegistration.cache" />
-
-
-
-
-
-
- True
- True
- Resources.resx
-
-
-
-
-
-
-
-
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
-
-
-
-
-
-
-
-
-
- <_Parameter1>Umbraco.Tests
-
-
- <_Parameter1>Umbraco.Tests.Benchmarks
-
-
- <_Parameter1>Umbraco.Tests.Integration
-
-
- <_Parameter1>Umbraco.Tests.Common
-
-
- <_Parameter1>Umbraco.Tests.UnitTests
-
-
- <_Parameter1>DynamicProxyGenAssembly2
-
-
- <_Parameter1>Umbraco.New.Cms.Infrastructure
-
-
-
-
-
-
-
-
-
-
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+ True
+ True
+ Resources.resx
+
+
diff --git a/src/Umbraco.Infrastructure/WebAssets/Resources.Designer.cs b/src/Umbraco.Infrastructure/WebAssets/Resources.Designer.cs
index 319a8b09ef..cf2b36fdde 100644
--- a/src/Umbraco.Infrastructure/WebAssets/Resources.Designer.cs
+++ b/src/Umbraco.Infrastructure/WebAssets/Resources.Designer.cs
@@ -10,8 +10,8 @@
namespace Umbraco.Cms.Infrastructure.WebAssets {
using System;
-
-
+
+
///
/// A strongly-typed resource class, for looking up localized strings, etc.
///
@@ -19,19 +19,19 @@ namespace Umbraco.Cms.Infrastructure.WebAssets {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
-
+
private static global::System.Resources.ResourceManager resourceMan;
-
+
private static global::System.Globalization.CultureInfo resourceCulture;
-
+
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
-
+
///
/// Returns the cached ResourceManager instance used by this class.
///
@@ -45,7 +45,7 @@ namespace Umbraco.Cms.Infrastructure.WebAssets {
return resourceMan;
}
}
-
+
///
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
@@ -59,34 +59,33 @@ namespace Umbraco.Cms.Infrastructure.WebAssets {
resourceCulture = value;
}
}
-
+
///
/// Looks up a localized string similar to [
- ///
+ ///
/// 'lib/jquery/jquery.min.js',
/// 'lib/jquery-ui/jquery-ui.min.js',
/// 'lib/jquery-ui-touch-punch/jquery.ui.touch-punch.min.js',
///
- /// 'lib/angular/angular.js',
+ /// 'lib/angular/angular.min.js',
/// 'lib/underscore/underscore-min.js',
///
/// 'lib/moment/moment.min.js',
- /// 'lib/flatpickr/flatpickr.js',
+ /// 'lib/flatpickr/flatpickr.min.js',
///
/// 'lib/animejs/anime.min.js',
///
- /// 'lib/angular-route/angular-route.js',
- /// 'lib/angular-cookies/angular-cookies.js',
+ /// 'lib/angular-route/angular-route.min.js',
+ /// 'lib/angular-cookies/angular-cookies.min.js',
/// 'lib/angular-aria/angular-aria.min.js',
- /// 'lib/angular-touch/angular-touch.js',
- /// 'lib/ [rest of string was truncated]";.
+ /// 'lib/angular-touch/angular-touch [rest of string was truncated]";.
///
internal static string JsInitialize {
get {
return ResourceManager.GetString("JsInitialize", resourceCulture);
}
}
-
+
///
/// Looks up a localized string similar to LazyLoad.js("##JsInitialize##", function () {
/// //we need to set the legacy UmbClientMgr path
@@ -107,21 +106,21 @@ namespace Umbraco.Cms.Infrastructure.WebAssets {
return ResourceManager.GetString("Main", resourceCulture);
}
}
-
+
///
/// Looks up a localized string similar to [
/// 'lib/jquery/jquery.min.js',
- /// 'lib/angular/angular.js',
+ /// 'lib/angular/angular.min.js',
/// 'lib/underscore/underscore-min.js',
/// 'lib/umbraco/Extensions.js',
- /// 'js/utilities.js',
- /// 'js/app.js',
- /// 'js/umbraco.resources.js',
- /// 'js/umbraco.services.js',
- /// 'js/umbraco.interceptors.js',
+ /// 'js/utilities.min.js',
+ /// 'js/app.min.js',
+ /// 'js/umbraco.resources.min.js',
+ /// 'js/umbraco.services.min.js',
+ /// 'js/umbraco.interceptors.min.js',
/// 'ServerVariables',
/// 'lib/signalr/signalr.min.js',
- /// 'js/umbraco.preview.js'
+ /// 'js/umbraco.preview.min.js'
///]
///.
///
@@ -130,24 +129,24 @@ namespace Umbraco.Cms.Infrastructure.WebAssets {
return ResourceManager.GetString("PreviewInitialize", resourceCulture);
}
}
-
+
///
- /// Looks up a localized string similar to // TODO: This would be nicer as an angular module so it can be injected into stuff... that'd be heaps nicer, but
- /// how to do that when this is not a regular JS file, it is a server side JS file and RequireJS seems to only want
- /// to force load JS files ?
+ /// Looks up a localized string similar to // TODO: This would be nicer as an angular module so it can be injected into stuff... that'd be heaps nicer, but
+ ///// how to do that when this is not a regular JS file, it is a server side JS file and RequireJS seems to only want
+ ///// to force load JS files ?
///
- /// create the namespace (NOTE: This loads before any dependencies so we don't have a namespace mgr so we just create it manually)
- /// var Umbraco = {};
- /// Umbraco.Sys = {};
- /// define a global static object
- /// Umbraco.Sys.ServerVariables = ##Variables## ;.
+ /////create the namespace (NOTE: This loads before any dependencies so we don't have a namespace mgr so we just create it manually)
+ ///var Umbraco = {};
+ ///Umbraco.Sys = {};
+ /////define a global static object
+ ///Umbraco.Sys.ServerVariables = ##Variables## ;.
///
internal static string ServerVariables {
get {
return ResourceManager.GetString("ServerVariables", resourceCulture);
}
}
-
+
///
/// Looks up a localized string similar to [
/// 'lib/tinymce/tinymce.min.js',
diff --git a/src/Umbraco.New.Cms.Core/Umbraco.New.Cms.Core.csproj b/src/Umbraco.New.Cms.Core/Umbraco.New.Cms.Core.csproj
index 0e0cb355cb..25ce2bfabd 100644
--- a/src/Umbraco.New.Cms.Core/Umbraco.New.Cms.Core.csproj
+++ b/src/Umbraco.New.Cms.Core/Umbraco.New.Cms.Core.csproj
@@ -1,17 +1,13 @@
+
+ Umbraco CMS - Core
+ Contains the core assembly needed to run Umbraco CMS.
+ net7.0
+ false
+ false
+
-
- net7.0
- enable
- enable
- Umbraco.New.Cms.Core
- false
- nullable
- false
-
-
-
-
-
-
+
+
+
diff --git a/src/Umbraco.New.Cms.Infrastructure/Umbraco.New.Cms.Infrastructure.csproj b/src/Umbraco.New.Cms.Infrastructure/Umbraco.New.Cms.Infrastructure.csproj
index 37a91d4599..5d8ee6698f 100644
--- a/src/Umbraco.New.Cms.Infrastructure/Umbraco.New.Cms.Infrastructure.csproj
+++ b/src/Umbraco.New.Cms.Infrastructure/Umbraco.New.Cms.Infrastructure.csproj
@@ -1,18 +1,14 @@
+
+ Umbraco CMS - Infrastructure
+ Contains the infrastructure assembly needed to run Umbraco CMS.
+ net7.0
+ false
+ false
+
-
- net7.0
- enable
- enable
- Umbraco.New.Cms.Infrastructure
- false
- nullable
- false
-
-
-
-
-
-
-
+
+
+
+
diff --git a/src/Umbraco.New.Cms.Web.Common/Umbraco.New.Cms.Web.Common.csproj b/src/Umbraco.New.Cms.Web.Common/Umbraco.New.Cms.Web.Common.csproj
index d9826126de..01a4cb93de 100644
--- a/src/Umbraco.New.Cms.Web.Common/Umbraco.New.Cms.Web.Common.csproj
+++ b/src/Umbraco.New.Cms.Web.Common/Umbraco.New.Cms.Web.Common.csproj
@@ -1,17 +1,14 @@
+
+ Umbraco CMS - Web
+ Contains the web assembly needed to run Umbraco CMS.
+ net7.0
+ false
+ false
+
-
- net7.0
- enable
- enable
- false
- nullable
- false
-
-
-
-
-
-
-
+
+
+
+
diff --git a/src/Umbraco.PublishedCache.NuCache/Umbraco.PublishedCache.NuCache.csproj b/src/Umbraco.PublishedCache.NuCache/Umbraco.PublishedCache.NuCache.csproj
index 4a2f763d36..6cdec8ce08 100644
--- a/src/Umbraco.PublishedCache.NuCache/Umbraco.PublishedCache.NuCache.csproj
+++ b/src/Umbraco.PublishedCache.NuCache/Umbraco.PublishedCache.NuCache.csproj
@@ -1,29 +1,17 @@
-
+ Umbraco.Cms.PublishedCache.NuCache
+ Umbraco CMS - Published cache - NuCache
+ Contains the published cache assembly needed to run Umbraco CMS.
net7.0
Umbraco.Cms.Infrastructure.PublishedCache
- Umbraco.Cms.PublishedCache.NuCache
- Umbraco CMS Published Cache
- Contains the Published Cache assembly needed to run Umbraco Cms. This package only contains the assembly, and can be used for package development. Use the template in the Umbraco.Templates package to setup Umbraco
-
-
-
- bin\Release\Umbraco.PublishedCache.NuCache.xml
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
- all
-
@@ -48,5 +36,4 @@
<_Parameter1>DynamicProxyGenAssembly2
-
diff --git a/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj b/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj
index d556786dec..450d146502 100644
--- a/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj
+++ b/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj
@@ -1,56 +1,39 @@
+
+ Umbraco.Cms.Web.BackOffice
+ Umbraco CMS - Web - Backoffice
+ Contains the backoffice assembly needed to run the backend of Umbraco CMS.
+ net7.0
+ Library
+ Umbraco.Cms.Web.BackOffice
+
-
- net7.0
- Library
- Umbraco.Cms.Web.BackOffice
- Umbraco.Cms.Web.BackOffice
- Umbraco CMS Back Office
- Contains the Back Office assembly needed to run the back office of Umbraco Cms. This package only contains the assembly, and can be used for package development. Use the template in the Umbraco.Templates package to setup Umbraco
-
-
-
- bin\Release\Umbraco.Web.BackOffice.xml
-
-
-
-
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
- all
-
-
-
-
-
- <_Parameter1>Umbraco.Tests.UnitTests
-
-
- <_Parameter1>Umbraco.Tests.Integration
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_Parameter1>Umbraco.Tests.UnitTests
+
+
+ <_Parameter1>Umbraco.Tests.Integration
+
+
+
+
+
+
diff --git a/src/Umbraco.Web.Common/ApplicationBuilder/UmbracoApplicationBuilder.cs b/src/Umbraco.Web.Common/ApplicationBuilder/UmbracoApplicationBuilder.cs
index 2212dec425..91456565b1 100644
--- a/src/Umbraco.Web.Common/ApplicationBuilder/UmbracoApplicationBuilder.cs
+++ b/src/Umbraco.Web.Common/ApplicationBuilder/UmbracoApplicationBuilder.cs
@@ -3,7 +3,6 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Options;
-using SixLabors.ImageSharp.Web.DependencyInjection;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Core.IO;
using Umbraco.Cms.Core.Services;
@@ -78,9 +77,6 @@ public class UmbracoApplicationBuilder : IUmbracoApplicationBuilder, IUmbracoEnd
{
UseUmbracoCoreMiddleware();
- // Important we handle image manipulations before the static files, otherwise the querystring is just ignored.
- AppBuilder.UseImageSharp();
-
// Get media file provider and request path/URL
MediaFileManager mediaFileManager = AppBuilder.ApplicationServices.GetRequiredService();
if (mediaFileManager.FileSystem.TryCreateFileProvider(out IFileProvider? mediaFileProvider))
diff --git a/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilder.ImageSharp.cs b/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilder.ImageSharp.cs
deleted file mode 100644
index e5e642f4a3..0000000000
--- a/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilder.ImageSharp.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Options;
-using SixLabors.ImageSharp.Web.Caching;
-using SixLabors.ImageSharp.Web.DependencyInjection;
-using SixLabors.ImageSharp.Web.Middleware;
-using SixLabors.ImageSharp.Web.Providers;
-using Umbraco.Cms.Core.DependencyInjection;
-using Umbraco.Cms.Core.Media;
-using Umbraco.Cms.Web.Common.DependencyInjection;
-using Umbraco.Cms.Web.Common.ImageProcessors;
-using Umbraco.Cms.Web.Common.Media;
-
-namespace Umbraco.Extensions;
-
-public static partial class UmbracoBuilderExtensions
-{
- ///
- /// Adds Image Sharp with Umbraco settings
- ///
- public static IServiceCollection AddUmbracoImageSharp(this IUmbracoBuilder builder)
- {
- builder.Services.AddSingleton();
-
- builder.Services.AddImageSharp()
-
- // Replace default image provider
- .ClearProviders()
- .AddProvider()
-
- // Add custom processors
- .AddProcessor();
-
- // Configure middleware
- builder.Services
- .AddTransient, ConfigureImageSharpMiddlewareOptions>();
-
- // Configure cache options
- builder.Services
- .AddTransient, ConfigurePhysicalFileSystemCacheOptions>();
-
- return builder.Services;
- }
-}
diff --git a/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs b/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs
index 40b84a0987..f9ea5c99c1 100644
--- a/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs
+++ b/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs
@@ -293,7 +293,6 @@ public static partial class UmbracoBuilderExtensions
.Transient());
builder.Services.TryAddEnumerable(ServiceDescriptor
.Transient());
- builder.AddUmbracoImageSharp();
// AspNetCore specific services
builder.Services.AddUnique();
diff --git a/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj b/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj
index 06ae26d19d..b8e79d3b9d 100644
--- a/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj
+++ b/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj
@@ -1,31 +1,26 @@
-
-
- net7.0
- Library
- Umbraco.Cms.Web.Common
- Umbraco.Cms.Web.Common
- Umbraco CMS Web
- Contains the Web assembly needed to run Umbraco Cms. This package only contains the assembly, and can be used for package development. Use the template in the Umbraco.Templates package to setup Umbraco
-
- net7.0
- Library
- Umbraco.Cms.Web.Common
Umbraco.Cms.Web.Common
- Umbraco CMS Web
- Contains the Web assembly needed to run Umbraco Cms. This package only contains the assembly, and can be used for package development. Use the template in the Umbraco.Templates package to setup Umbraco
- enable
-
-
-
- bin\Release\Umbraco.Web.Common.xml
+ Umbraco CMS - Web
+ Contains the web assembly needed to run Umbraco CMS.
+ net7.0
+ Umbraco.Cms.Web.Common
+
+
+
+
+
+
+
+
+
+
@@ -33,19 +28,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
<_Parameter1>Umbraco.Tests.UnitTests
diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json
index 7cad29e790..44254f7bed 100644
--- a/src/Umbraco.Web.UI.Client/package-lock.json
+++ b/src/Umbraco.Web.UI.Client/package-lock.json
@@ -81,8 +81,8 @@
"run-sequence": "2.2.1"
},
"engines": {
- "node": ">=14.0.0 <17",
- "npm": ">=8.0.0 < 9"
+ "node": ">=16.17",
+ "npm": ">=8.15"
}
},
"node_modules/@ampproject/remapping": {
diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json
index 969fa65292..e632cf1e5d 100644
--- a/src/Umbraco.Web.UI.Client/package.json
+++ b/src/Umbraco.Web.UI.Client/package.json
@@ -13,8 +13,8 @@
"watch": "gulp watch"
},
"engines": {
- "node": ">=14.0.0 <17",
- "npm": ">=8.0.0 < 9"
+ "node": ">=16.17",
+ "npm": ">=8.15"
},
"dependencies": {
"@microsoft/signalr": "6.0.9",
diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
index d732e2aca8..2ff2dd0674 100644
--- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
+++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
@@ -5,34 +5,14 @@
false
-
-
-
- bin/Release/Umbraco.Web.UI.xml
-
-
-
- true
-
-
-
+
+
+
-
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
- all
-
@@ -49,33 +29,13 @@
false
-
- $(ProjectDir)appsettings-schema.json
- $(ProjectDir)../JsonSchema/JsonSchema.csproj
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Umbraco.Web.Website/Umbraco.Web.Website.csproj b/src/Umbraco.Web.Website/Umbraco.Web.Website.csproj
index 8d5bb1249c..2215d3f4bb 100644
--- a/src/Umbraco.Web.Website/Umbraco.Web.Website.csproj
+++ b/src/Umbraco.Web.Website/Umbraco.Web.Website.csproj
@@ -1,47 +1,29 @@
+
+ Umbraco.Cms.Web.Website
+ Umbraco CMS - Web - Website
+ Contains the website assembly needed to run the frontend of Umbraco CMS.
+ net7.0
+ Library
+ Umbraco.Cms.Web.Website
+
-
- net7.0
- Library
- Umbraco.Cms.Web.Website
- Umbraco.Cms.Web.Website
- Umbraco CMS Website
- Contains the Website assembly needed to run Umbraco Cms (Front office). This package only contains the assembly, and can be used for package development. Use the template in the Umbraco.Templates package to setup Umbraco
-
+
+
+
-
- bin\Release\Umbraco.Web.Website.xml
-
+
+
+
+
+
-
- bin\Release\Umbraco.Web.Website.xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
- all
-
-
-
-
- <_Parameter1>Umbraco.Tests.UnitTests
-
-
- <_Parameter1>Umbraco.Tests.Integration
-
-
+
+
+ <_Parameter1>Umbraco.Tests.UnitTests
+
+
+ <_Parameter1>Umbraco.Tests.Integration
+
+
diff --git a/templates/Umbraco.Templates.csproj b/templates/Umbraco.Templates.csproj
index eef2c96ec9..f902f91b90 100644
--- a/templates/Umbraco.Templates.csproj
+++ b/templates/Umbraco.Templates.csproj
@@ -1,19 +1,17 @@
+ Umbraco CMS - Templates
+ Coontains templates for Umbraco CMS.
net7.0
Template
false
- .
+ false
true
true
- false
.
- true
- false
-
diff --git a/templates/icon.png b/templates/icon.png
deleted file mode 100644
index 6e94105808..0000000000
Binary files a/templates/icon.png and /dev/null differ
diff --git a/tests/Directory.Build.props b/tests/Directory.Build.props
index 0726083c36..62031665f7 100644
--- a/tests/Directory.Build.props
+++ b/tests/Directory.Build.props
@@ -2,6 +2,10 @@
+
+ annotations
+
+
$(MSBuildThisFileDirectory)codeanalysis.ruleset
diff --git a/tests/Umbraco.TestData/Umbraco.TestData.csproj b/tests/Umbraco.TestData/Umbraco.TestData.csproj
index b2c9fa7236..eeb21db8fe 100644
--- a/tests/Umbraco.TestData/Umbraco.TestData.csproj
+++ b/tests/Umbraco.TestData/Umbraco.TestData.csproj
@@ -1,9 +1,9 @@
-
- false
- Umbraco.TestData
net7.0
+ Umbraco.TestData
+ false
+ false
@@ -16,5 +16,4 @@
-
diff --git a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json
index 223f83c12b..e7b6ae9b72 100644
--- a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json
+++ b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json
@@ -7,16 +7,20 @@
"name": "acceptancetest",
"hasInstallScript": true,
"dependencies": {
- "typescript": "^3.9.2"
+ "typescript": "^4.6.3"
},
"devDependencies": {
- "cross-env": "^7.0.2",
+ "cross-env": "^7.0.3",
"cy-verify-downloads": "0.0.5",
"cypress": "8.4.1",
"del": "^6.0.0",
"ncp": "^2.0.0",
"prompt": "^1.2.0",
"umbraco-cypress-testhelpers": "^1.0.0-beta-73"
+ },
+ "engines": {
+ "node": ">=16.17",
+ "npm": ">=8.15"
}
},
"node_modules/@cypress/request": {
@@ -2164,9 +2168,9 @@
}
},
"node_modules/typescript": {
- "version": "3.9.10",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz",
- "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==",
+ "version": "4.8.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz",
+ "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -2339,16 +2343,10 @@
}
},
"dependencies": {
- "@colors/colors": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
- "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
- "dev": true
- },
"@cypress/request": {
- "version": "2.88.10",
- "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz",
- "integrity": "sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==",
+ "version": "2.88.7",
+ "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.7.tgz",
+ "integrity": "sha512-FTULIP2rnDJvZDT9t6B4nSfYR40ue19tVmv3wUcY05R9/FPCoMl1nAPJkzWzBCo7ltVn5ThQTbxiMoGBN7k0ig==",
"dev": true,
"requires": {
"aws-sign2": "~0.7.0",
@@ -2358,7 +2356,8 @@
"extend": "~3.0.2",
"forever-agent": "~0.6.1",
"form-data": "~2.3.2",
- "http-signature": "~1.3.6",
+ "har-validator": "~5.1.3",
+ "http-signature": "~1.2.0",
"is-typedarray": "~1.0.0",
"isstream": "~0.1.2",
"json-stringify-safe": "~5.0.1",
@@ -2464,6 +2463,18 @@
}
}
},
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
"ansi-colors": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
@@ -2528,9 +2539,9 @@
"dev": true
},
"async": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
- "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==",
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.2.tgz",
+ "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==",
"dev": true
},
"asynckit": {
@@ -2676,12 +2687,13 @@
}
},
"cli-table3": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz",
- "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==",
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz",
+ "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==",
"dev": true,
"requires": {
- "@colors/colors": "1.5.0",
+ "colors": "^1.1.2",
+ "object-assign": "^4.1.0",
"string-width": "^4.2.0"
}
},
@@ -2722,6 +2734,12 @@
"integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
"dev": true
},
+ "colors": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
+ "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
+ "dev": true
+ },
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -2776,9 +2794,9 @@
}
},
"cy-verify-downloads": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/cy-verify-downloads/-/cy-verify-downloads-0.1.5.tgz",
- "integrity": "sha512-8iviQ+LhZ9z7bUEfN5YOGqYy292tSDHVDNsz9eaGZ97dVybgx9NhkSyk//2rVXIV97JBIdx8GIeGBBD+JBB27w==",
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/cy-verify-downloads/-/cy-verify-downloads-0.0.5.tgz",
+ "integrity": "sha512-aRK7VvKG5rmDJK4hjZ27KM2oOOz0cMO7z/j4zX8qCc4ffXZS1XRJkofUY0w5u6MCB/wUsNMs03VuvkeR2tNPoQ==",
"dev": true
},
"cycle": {
@@ -2788,9 +2806,9 @@
"dev": true
},
"cypress": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/cypress/-/cypress-8.7.0.tgz",
- "integrity": "sha512-b1bMC3VQydC6sXzBMFnSqcvwc9dTZMgcaOzT0vpSD+Gq1yFc+72JDWi55sfUK5eIeNLAtWOGy1NNb6UlhMvB+Q==",
+ "version": "8.4.1",
+ "resolved": "https://registry.npmjs.org/cypress/-/cypress-8.4.1.tgz",
+ "integrity": "sha512-itJXq0Vx3sXCUrDyBi2IUrkxVu/gTTp1VhjB5tzGgkeCR8Ae+/T8WV63rsZ7fS8Tpq7LPPXiyoM/sEdOX7cR6A==",
"dev": true,
"requires": {
"@cypress/request": "^2.88.6",
@@ -2827,7 +2845,6 @@
"minimist": "^1.2.5",
"ospath": "^1.2.2",
"pretty-bytes": "^5.6.0",
- "proxy-from-env": "1.0.0",
"ramda": "~0.27.1",
"request-progress": "^3.0.0",
"supports-color": "^8.1.1",
@@ -3008,6 +3025,12 @@
"integrity": "sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8=",
"dev": true
},
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
"fast-glob": {
"version": "3.2.7",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
@@ -3021,6 +3044,12 @@
"micromatch": "^4.0.4"
}
},
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
"fastq": {
"version": "1.13.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
@@ -3171,6 +3200,22 @@
"integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
"dev": true
},
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ }
+ },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -3178,14 +3223,14 @@
"dev": true
},
"http-signature": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz",
- "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"dev": true,
"requires": {
"assert-plus": "^1.0.0",
- "jsprim": "^2.0.2",
- "sshpk": "^1.14.1"
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
}
},
"human-signals": {
@@ -3317,9 +3362,15 @@
"dev": true
},
"json-schema": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
- "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
"json-stringify-safe": {
@@ -3339,14 +3390,14 @@
}
},
"jsprim": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz",
- "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
"dev": true,
"requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
- "json-schema": "0.4.0",
+ "json-schema": "0.2.3",
"verror": "1.10.0"
}
},
@@ -3453,18 +3504,18 @@
}
},
"mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "version": "1.51.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
+ "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
"dev": true
},
"mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "version": "2.1.34",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
+ "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
"dev": true,
"requires": {
- "mime-db": "1.52.0"
+ "mime-db": "1.51.0"
}
},
"mimic-fn": {
@@ -3515,6 +3566,12 @@
"path-key": "^3.0.0"
}
},
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -3597,24 +3654,26 @@
"dev": true
},
"prompt": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.3.0.tgz",
- "integrity": "sha512-ZkaRWtaLBZl7KKAKndKYUL8WqNT+cQHKRZnT4RYYms48jQkFw3rrBL+/N5K/KtdEveHkxs982MX2BkDKub2ZMg==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.2.0.tgz",
+ "integrity": "sha512-iGerYRpRUg5ZyC+FJ/25G5PUKuWAGRjW1uOlhX7Pi3O5YygdK6R+KEaBjRbHSkU5vfS5PZCltSPZdDtUYwRCZA==",
"dev": true,
"requires": {
- "@colors/colors": "1.5.0",
- "async": "3.2.3",
+ "async": "~0.9.0",
+ "colors": "^1.1.2",
"read": "1.0.x",
"revalidator": "0.1.x",
"winston": "2.x"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
+ "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
+ "dev": true
+ }
}
},
- "proxy-from-env": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
- "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=",
- "dev": true
- },
"psl": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
@@ -3638,9 +3697,9 @@
"dev": true
},
"qs": {
- "version": "6.5.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
- "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
"dev": true
},
"querystring": {
@@ -3656,9 +3715,9 @@
"dev": true
},
"ramda": {
- "version": "0.27.2",
- "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz",
- "integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==",
+ "version": "0.27.1",
+ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.1.tgz",
+ "integrity": "sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw==",
"dev": true
},
"read": {
@@ -3779,9 +3838,9 @@
}
},
"sshpk": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
- "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
"dev": true,
"requires": {
"asn1": "~0.2.3",
@@ -3904,9 +3963,9 @@
"dev": true
},
"typescript": {
- "version": "4.6.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz",
- "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw=="
+ "version": "4.8.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz",
+ "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig=="
},
"umbraco-cypress-testhelpers": {
"version": "1.0.0-beta-73",
@@ -3930,6 +3989,15 @@
"integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
"dev": true
},
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
"url": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
diff --git a/tests/Umbraco.Tests.AcceptanceTest/package.json b/tests/Umbraco.Tests.AcceptanceTest/package.json
index 34c82f4441..d0ad3e133e 100644
--- a/tests/Umbraco.Tests.AcceptanceTest/package.json
+++ b/tests/Umbraco.Tests.AcceptanceTest/package.json
@@ -8,13 +8,13 @@
"ui": "npx cypress open"
},
"engines": {
- "node": ">=14.0.0 <17",
- "npm": ">=8.0.0 < 9"
+ "node": ">=16.17",
+ "npm": ">=8.15"
},
"devDependencies": {
"cross-env": "^7.0.3",
- "cypress": "8.7.0",
- "cy-verify-downloads": "0.1.5",
+ "cypress": "8.4.1",
+ "cy-verify-downloads": "0.0.5",
"del": "^6.0.0",
"ncp": "^2.0.0",
"prompt": "^1.2.0",
diff --git a/tests/Umbraco.Tests.Benchmarks/Umbraco.Tests.Benchmarks.csproj b/tests/Umbraco.Tests.Benchmarks/Umbraco.Tests.Benchmarks.csproj
index 6b7ad5d5a8..b39a03fd99 100644
--- a/tests/Umbraco.Tests.Benchmarks/Umbraco.Tests.Benchmarks.csproj
+++ b/tests/Umbraco.Tests.Benchmarks/Umbraco.Tests.Benchmarks.csproj
@@ -4,15 +4,15 @@
Exe
false
false
+ false
-
-
-
-
-
-
+
+
+
+
+
@@ -20,19 +20,4 @@
-
-
-
- 0.13.2
-
-
- 7.0.0-rc.1.*
-
-
- 4.18.1
-
-
-
-
-
diff --git a/tests/Umbraco.Tests.Common/Umbraco.Tests.Common.csproj b/tests/Umbraco.Tests.Common/Umbraco.Tests.Common.csproj
index 4fee3d2091..3a1f04cefb 100644
--- a/tests/Umbraco.Tests.Common/Umbraco.Tests.Common.csproj
+++ b/tests/Umbraco.Tests.Common/Umbraco.Tests.Common.csproj
@@ -1,20 +1,14 @@
-
- net7.0
- Umbraco.Cms.Tests.Common
- Umbraco.Cms.Tests
- Umbraco CMS Test Tools
- Contains commonly used tools to write tests for Umbraco CMS, such as various builders for content etc.
- true
+ Umbraco.Cms.Tests
+ Umbraco CMS - Test tools
+ Contains commonly used tools to write tests for Umbraco CMS, such as various builders for content etc.
+ net7.0
+ Umbraco.Cms.Tests.Common
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
diff --git a/tests/Umbraco.Tests.Integration/TestServerTest/UmbracoTestServerTestBase.cs b/tests/Umbraco.Tests.Integration/TestServerTest/UmbracoTestServerTestBase.cs
index 92909149d1..2437d9a7a5 100644
--- a/tests/Umbraco.Tests.Integration/TestServerTest/UmbracoTestServerTestBase.cs
+++ b/tests/Umbraco.Tests.Integration/TestServerTest/UmbracoTestServerTestBase.cs
@@ -1,6 +1,4 @@
-using System;
using System.Linq.Expressions;
-using System.Net.Http;
using System.Reflection;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Builder;
@@ -16,11 +14,9 @@ using Moq;
using NUnit.Framework;
using Umbraco.Cms.Core.Cache;
using Umbraco.Cms.Core.Composing;
-using Umbraco.Cms.Core.DependencyInjection;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Core.Web;
using Umbraco.Cms.ManagementApi;
-using Umbraco.Cms.ManagementApi.Configuration;
using Umbraco.Cms.ManagementApi.Controllers.Install;
using Umbraco.Cms.Persistence.Sqlite;
using Umbraco.Cms.Persistence.SqlServer;
@@ -30,7 +26,6 @@ using Umbraco.Cms.Tests.Integration.Testing;
using Umbraco.Cms.Web.BackOffice.Controllers;
using Umbraco.Cms.Web.Common.Controllers;
using Umbraco.Cms.Web.Website.Controllers;
-using Umbraco.Extensions;
namespace Umbraco.Cms.Tests.Integration.TestServerTest
{
diff --git a/tests/Umbraco.Tests.Integration/Testing/LocalDbTestDatabase.cs b/tests/Umbraco.Tests.Integration/Testing/LocalDbTestDatabase.cs
index 28a7370b5d..38da6ad7a4 100644
--- a/tests/Umbraco.Tests.Integration/Testing/LocalDbTestDatabase.cs
+++ b/tests/Umbraco.Tests.Integration/Testing/LocalDbTestDatabase.cs
@@ -9,6 +9,7 @@ using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Umbraco.Cms.Infrastructure.Persistence;
+using Umbraco.Cms.Persistence.SqlServer;
namespace Umbraco.Cms.Tests.Integration.Testing;
diff --git a/tests/Umbraco.Tests.Integration/Testing/SqlServerTestDatabase.cs b/tests/Umbraco.Tests.Integration/Testing/SqlServerTestDatabase.cs
index ff000c75b7..e489081e60 100644
--- a/tests/Umbraco.Tests.Integration/Testing/SqlServerTestDatabase.cs
+++ b/tests/Umbraco.Tests.Integration/Testing/SqlServerTestDatabase.cs
@@ -9,6 +9,7 @@ using System.Threading.Tasks;
using Microsoft.Data.SqlClient;
using Microsoft.Extensions.Logging;
using Umbraco.Cms.Infrastructure.Persistence;
+using Umbraco.Cms.Persistence.SqlServer;
// ReSharper disable ConvertToUsingDeclaration
namespace Umbraco.Cms.Tests.Integration.Testing;
diff --git a/tests/Umbraco.Tests.Integration/Testing/TestDatabaseFactory.cs b/tests/Umbraco.Tests.Integration/Testing/TestDatabaseFactory.cs
index 78ed442db5..350d7ce975 100644
--- a/tests/Umbraco.Tests.Integration/Testing/TestDatabaseFactory.cs
+++ b/tests/Umbraco.Tests.Integration/Testing/TestDatabaseFactory.cs
@@ -3,7 +3,7 @@
using System;
using Microsoft.Extensions.Logging;
-using Umbraco.Cms.Infrastructure.Persistence;
+using Umbraco.Cms.Persistence.SqlServer;
namespace Umbraco.Cms.Tests.Integration.Testing;
diff --git a/tests/Umbraco.Tests.Integration/Umbraco.Examine.Lucene/UmbracoExamine/IndexInitializer.cs b/tests/Umbraco.Tests.Integration/Umbraco.Examine.Lucene/UmbracoExamine/IndexInitializer.cs
index ae99c7e009..6ae7f3628e 100644
--- a/tests/Umbraco.Tests.Integration/Umbraco.Examine.Lucene/UmbracoExamine/IndexInitializer.cs
+++ b/tests/Umbraco.Tests.Integration/Umbraco.Examine.Lucene/UmbracoExamine/IndexInitializer.cs
@@ -1,12 +1,8 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
using Examine;
using Examine.Lucene;
using Examine.Lucene.Directories;
using Lucene.Net.Analysis;
using Lucene.Net.Analysis.Standard;
-using Lucene.Net.Store;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Moq;
@@ -22,6 +18,7 @@ using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Core.Strings;
using Umbraco.Cms.Infrastructure.Examine;
using Umbraco.Cms.Infrastructure.Persistence;
+using Directory = Lucene.Net.Store.Directory;
namespace Umbraco.Cms.Tests.Integration.Umbraco.Examine.Lucene.UmbracoExamine;
diff --git a/tests/Umbraco.Tests.Integration/Umbraco.Examine.Lucene/UmbracoExamine/PublishedContentQueryTests.cs b/tests/Umbraco.Tests.Integration/Umbraco.Examine.Lucene/UmbracoExamine/PublishedContentQueryTests.cs
index 0d5a6bf0be..1a9a37fd3b 100644
--- a/tests/Umbraco.Tests.Integration/Umbraco.Examine.Lucene/UmbracoExamine/PublishedContentQueryTests.cs
+++ b/tests/Umbraco.Tests.Integration/Umbraco.Examine.Lucene/UmbracoExamine/PublishedContentQueryTests.cs
@@ -1,11 +1,7 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
using Examine;
using Examine.Lucene;
using Examine.Lucene.Directories;
using Examine.Lucene.Providers;
-using Lucene.Net.Store;
using Microsoft.Extensions.Logging;
using Moq;
using NUnit.Framework;
@@ -14,6 +10,7 @@ using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Cms.Infrastructure;
using Umbraco.Cms.Infrastructure.Examine;
using Umbraco.Cms.Tests.Common.Testing;
+using Directory = Lucene.Net.Store.Directory;
namespace Umbraco.Cms.Tests.Integration.Umbraco.Examine.Lucene.UmbracoExamine;
diff --git a/tests/Umbraco.Tests.Integration/Umbraco.Tests.Integration.csproj b/tests/Umbraco.Tests.Integration/Umbraco.Tests.Integration.csproj
index 4df31ee009..38a9ae4787 100644
--- a/tests/Umbraco.Tests.Integration/Umbraco.Tests.Integration.csproj
+++ b/tests/Umbraco.Tests.Integration/Umbraco.Tests.Integration.csproj
@@ -1,122 +1,52 @@
-
- net7.0
- Umbraco.Cms.Tests.Integration
Umbraco.Cms.Tests.Integration
- Umbraco CMS Integration Tests
- Contains helper classes for integration tests with Umbraco, including all internal integration tests.
- true
+ Umbraco CMS - Integration tests
+ Contains helper classes for integration tests with Umbraco CMS, including all internal integration tests.
+ net7.0
true
-
-
-
-
-
-
-
-
- IS_WINDOWS
+ Umbraco.Cms.Tests.Integration
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ResXFileCodeGenerator
- TestFiles.Designer.cs
-
-
- ResXFileCodeGenerator
- ImportResources.Designer.cs
Designer
+ TestFiles.Designer.cs
True
True
TestFiles.resx
+
+
+ ResXFileCodeGenerator
+ Designer
+ ImportResources.Designer.cs
+
- True
True
+ True
ImportResources.resx
-
+
-
-
-
-
-
-
-
-
- Designer
-
-
-
-
-
-
-
-
- Designer
-
-
-
-
-
-
- PreserveNewest
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Designer
-
-
-
diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj b/tests/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj
index 8561face40..9b82d90f67 100644
--- a/tests/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj
+++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj
@@ -1,46 +1,27 @@
-
- Exe
net7.0
+ Exe
+ true
Umbraco.Cms.Tests.UnitTests
false
- true
+ false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
+
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Web.Common/ImageProcessors/CropWebProcessorTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Web.Common/ImageProcessors/CropWebProcessorTests.cs
index d9110bc558..ea1a51fae6 100644
--- a/tests/Umbraco.Tests.UnitTests/Umbraco.Web.Common/ImageProcessors/CropWebProcessorTests.cs
+++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Web.Common/ImageProcessors/CropWebProcessorTests.cs
@@ -11,7 +11,7 @@ using SixLabors.ImageSharp.Web;
using SixLabors.ImageSharp.Web.Commands;
using SixLabors.ImageSharp.Web.Commands.Converters;
using SixLabors.ImageSharp.Web.Middleware;
-using Umbraco.Cms.Web.Common.ImageProcessors;
+using Umbraco.Cms.Imaging.ImageSharp.ImageProcessors;
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.Common.ImageProcessors;
diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Media/ImageSharpImageUrlGeneratorTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Media/ImageSharpImageUrlGeneratorTests.cs
index bc2c26727f..3a882d8b91 100644
--- a/tests/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Media/ImageSharpImageUrlGeneratorTests.cs
+++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Media/ImageSharpImageUrlGeneratorTests.cs
@@ -3,7 +3,7 @@
using NUnit.Framework;
using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Web.Common.Media;
+using Umbraco.Cms.Imaging.ImageSharp.Media;
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.Common.Media;
diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Routing/InstallAreaRoutesTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Routing/InstallAreaRoutesTests.cs
index c5a8eb5201..48e9f4f904 100644
--- a/tests/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Routing/InstallAreaRoutesTests.cs
+++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Routing/InstallAreaRoutesTests.cs
@@ -81,8 +81,8 @@ public class InstallAreaRoutesTests
var route = endpoints.DataSources.First();
Assert.AreEqual(1, route.Endpoints.Count);
- var routeEndpoint = (RouteEndpoint)route.Endpoints[0];
- Assert.AreEqual("install/{controller?}/{action?}", routeEndpoint.RoutePattern.RawText);
+ var endpoint = (RouteEndpoint)route.Endpoints[0];
+ Assert.AreEqual("install/{controller?}/{action?}", endpoint.RoutePattern.RawText);
}
private InstallAreaRoutes GetInstallAreaRoutes(RuntimeLevel level) =>
diff --git a/umbraco.sln b/umbraco.sln
index e0ff14115c..70f299236a 100644
--- a/umbraco.sln
+++ b/umbraco.sln
@@ -4,13 +4,12 @@ VisualStudioVersion = 17.1.32328.378
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Web.UI", "src\Umbraco.Web.UI\Umbraco.Web.UI.csproj", "{DCDFE97C-5630-4F6F-855D-8AEEB96556A5}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{2849E9D4-3B4E-40A3-A309-F3CB4F0E125F}"
- ProjectSection(SolutionItems) = preProject
- build\azure-pipelines.yml = build\azure-pipelines.yml
- version.json = version.json
- EndProjectSection
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{B5BD12C1-A454-435E-8A46-FF4A364C0382}"
+ ProjectSection(SolutionItems) = preProject
+ tests\.editorconfig = tests\.editorconfig
+ tests\codeanalysis.ruleset = tests\codeanalysis.ruleset
+ tests\Directory.Build.props = tests\Directory.Build.props
+ EndProjectSection
EndProject
Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "Umbraco.Web.UI.Client", "http://localhost:3961", "{3819A550-DCEC-4153-91B4-8BA9F7F0B9B4}"
ProjectSection(WebsiteProperties) = preProject
@@ -101,24 +100,46 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NewBackoffice", "NewBackoff
.github\New BackOffice - README.md = .github\New BackOffice - README.md
EndProjectSection
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.Cms.ManagementApi", "src\Umbraco.Cms.ManagementApi\Umbraco.Cms.ManagementApi.csproj", "{0946531B-F06D-415B-A4E3-6CBFF5DB1C12}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Cms.ManagementApi", "src\Umbraco.Cms.ManagementApi\Umbraco.Cms.ManagementApi.csproj", "{0946531B-F06D-415B-A4E3-6CBFF5DB1C12}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.New.Cms.Core", "src\Umbraco.New.Cms.Core\Umbraco.New.Cms.Core.csproj", "{CBCE0A1E-BF29-49A6-9581-EAB3587D823A}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.New.Cms.Core", "src\Umbraco.New.Cms.Core\Umbraco.New.Cms.Core.csproj", "{CBCE0A1E-BF29-49A6-9581-EAB3587D823A}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.New.Cms.Infrastructure", "src\Umbraco.New.Cms.Infrastructure\Umbraco.New.Cms.Infrastructure.csproj", "{2D978DAF-8F48-4D59-8FEA-7EF0F40DBC2C}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.New.Cms.Infrastructure", "src\Umbraco.New.Cms.Infrastructure\Umbraco.New.Cms.Infrastructure.csproj", "{2D978DAF-8F48-4D59-8FEA-7EF0F40DBC2C}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.New.Cms.Web.Common", "src\Umbraco.New.Cms.Web.Common\Umbraco.New.Cms.Web.Common.csproj", "{5ED13EC6-399E-49D5-9D26-86501729B08D}"
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{D4C3395A-BA9D-4032-9ED3-09F1FC032CBC}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.New.Cms.Web.Common", "src\Umbraco.New.Cms.Web.Common\Umbraco.New.Cms.Web.Common.csproj", "{5ED13EC6-399E-49D5-9D26-86501729B08D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{E5D4B5F9-6CCE-46CE-8985-9A350445F92B}"
ProjectSection(SolutionItems) = preProject
- build\csharp-docs\docfx.filter.yml = build\csharp-docs\docfx.filter.yml
- build\csharp-docs\toc.yml = build\csharp-docs\toc.yml
- build\csharp-docs\docfx.json = build\csharp-docs\docfx.json
- build\csharp-docs\index.md = build\csharp-docs\index.md
+ .artifactignore = .artifactignore
+ .editorconfig = .editorconfig
+ .gitattributes = .gitattributes
+ .gitignore = .gitignore
+ .globalconfig = .globalconfig
+ Directory.Build.props = Directory.Build.props
+ icon.png = icon.png
+ LICENSE.md = LICENSE.md
+ umbraco.sln.DotSettings = umbraco.sln.DotSettings
+ version.json = version.json
EndProjectSection
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Templating", "Templating", "{5FBDD50D-7A86-4F4D-BEB9-7967FBA4ED2C}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Cms.Targets", "src\Umbraco.Cms.Targets\Umbraco.Cms.Targets.csproj", "{B51C10FC-FD20-451E-90DD-A117133403DF}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Partials", "Partials", "{55B028A8-6294-46A4-BED5-7888ADB92368}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{20CE9C97-9314-4A19-BCF1-D12CF49B7205}"
+ ProjectSection(SolutionItems) = preProject
+ build\azure-pipelines.yml = build\azure-pipelines.yml
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "csharp-docs", "csharp-docs", "{F2BF84D9-0A14-40AF-A0F3-B9BBBBC16A44}"
+ ProjectSection(SolutionItems) = preProject
+ build\csharp-docs\docfx.filter.yml = build\csharp-docs\docfx.filter.yml
+ build\csharp-docs\docfx.json = build\csharp-docs\docfx.json
+ build\csharp-docs\index.md = build\csharp-docs\index.md
+ build\csharp-docs\toc.yml = build\csharp-docs\toc.yml
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "umbracotemplate", "umbracotemplate", "{2B47AD9F-FFF1-448A-88F1-D4F568811738}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "partials", "partials", "{25AECCB5-B187-4406-844B-91B8FF0FCB37}"
ProjectSection(SolutionItems) = preProject
build\csharp-docs\umbracotemplate\partials\class.tmpl.partial = build\csharp-docs\umbracotemplate\partials\class.tmpl.partial
build\csharp-docs\umbracotemplate\partials\footer.tmpl.partial = build\csharp-docs\umbracotemplate\partials\footer.tmpl.partial
@@ -128,11 +149,13 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Partials", "Partials", "{55
build\csharp-docs\umbracotemplate\partials\rest.tmpl.partial = build\csharp-docs\umbracotemplate\partials\rest.tmpl.partial
EndProjectSection
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Styles", "Styles", "{6499F81C-CFF2-4F83-9105-83F7880879F8}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "styles", "styles", "{EA628ABD-624E-4AF3-B548-6710D4D66531}"
ProjectSection(SolutionItems) = preProject
build\csharp-docs\umbracotemplate\styles\main.css = build\csharp-docs\umbracotemplate\styles\main.css
EndProjectSection
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Cms.Imaging.ImageSharp", "src\Umbraco.Cms.Imaging.ImageSharp\Umbraco.Cms.Imaging.ImageSharp.csproj", "{C280181E-597B-4AA5-82E7-D7017E928749}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -279,6 +302,18 @@ Global
{5ED13EC6-399E-49D5-9D26-86501729B08D}.Release|Any CPU.Build.0 = Release|Any CPU
{5ED13EC6-399E-49D5-9D26-86501729B08D}.SkipTests|Any CPU.ActiveCfg = Debug|Any CPU
{5ED13EC6-399E-49D5-9D26-86501729B08D}.SkipTests|Any CPU.Build.0 = Debug|Any CPU
+ {B51C10FC-FD20-451E-90DD-A117133403DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B51C10FC-FD20-451E-90DD-A117133403DF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B51C10FC-FD20-451E-90DD-A117133403DF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B51C10FC-FD20-451E-90DD-A117133403DF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B51C10FC-FD20-451E-90DD-A117133403DF}.SkipTests|Any CPU.ActiveCfg = Debug|Any CPU
+ {B51C10FC-FD20-451E-90DD-A117133403DF}.SkipTests|Any CPU.Build.0 = Debug|Any CPU
+ {C280181E-597B-4AA5-82E7-D7017E928749}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C280181E-597B-4AA5-82E7-D7017E928749}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C280181E-597B-4AA5-82E7-D7017E928749}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C280181E-597B-4AA5-82E7-D7017E928749}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C280181E-597B-4AA5-82E7-D7017E928749}.SkipTests|Any CPU.ActiveCfg = Debug|Any CPU
+ {C280181E-597B-4AA5-82E7-D7017E928749}.SkipTests|Any CPU.Build.0 = Debug|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -295,10 +330,11 @@ Global
{CBCE0A1E-BF29-49A6-9581-EAB3587D823A} = {995D9EFA-8BB1-4333-80AD-C525A06FD984}
{2D978DAF-8F48-4D59-8FEA-7EF0F40DBC2C} = {995D9EFA-8BB1-4333-80AD-C525A06FD984}
{5ED13EC6-399E-49D5-9D26-86501729B08D} = {995D9EFA-8BB1-4333-80AD-C525A06FD984}
- {D4C3395A-BA9D-4032-9ED3-09F1FC032CBC} = {2849E9D4-3B4E-40A3-A309-F3CB4F0E125F}
- {5FBDD50D-7A86-4F4D-BEB9-7967FBA4ED2C} = {D4C3395A-BA9D-4032-9ED3-09F1FC032CBC}
- {55B028A8-6294-46A4-BED5-7888ADB92368} = {5FBDD50D-7A86-4F4D-BEB9-7967FBA4ED2C}
- {6499F81C-CFF2-4F83-9105-83F7880879F8} = {5FBDD50D-7A86-4F4D-BEB9-7967FBA4ED2C}
+ {20CE9C97-9314-4A19-BCF1-D12CF49B7205} = {E5D4B5F9-6CCE-46CE-8985-9A350445F92B}
+ {F2BF84D9-0A14-40AF-A0F3-B9BBBBC16A44} = {20CE9C97-9314-4A19-BCF1-D12CF49B7205}
+ {2B47AD9F-FFF1-448A-88F1-D4F568811738} = {F2BF84D9-0A14-40AF-A0F3-B9BBBBC16A44}
+ {25AECCB5-B187-4406-844B-91B8FF0FCB37} = {2B47AD9F-FFF1-448A-88F1-D4F568811738}
+ {EA628ABD-624E-4AF3-B548-6710D4D66531} = {2B47AD9F-FFF1-448A-88F1-D4F568811738}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {7A0F2E34-D2AF-4DAB-86A0-7D7764B3D0EC}
diff --git a/version.json b/version.json
index 157ba1125f..bd1e9b0edd 100644
--- a/version.json
+++ b/version.json
@@ -1,14 +1,13 @@
{
"$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json",
- "version": "11.0.0",
+ "version": "11.0.0-rc1",
"assemblyVersion": {
- "precision": "Build" // optional. Use when you want a more precise assembly version than the default major.minor.
+ "precision": "build"
},
"gitCommitIdShortFixedLength": 7,
"publicReleaseRefSpec": [
- "^refs/heads/master$",
"^refs/heads/main$",
- "^refs/heads/release/\\d+\\.\\d+\\.\\d+"
+ "^refs/heads/release/"
],
"cloudBuild": {
"buildNumber": {