Browse Source

Merge branch 'dev' into bundle-cdn

pull/17894/head
maliming 3 years ago
parent
commit
04e1da40df
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 2
      .github/workflows/build-and-test.yml
  2. 46
      Directory.Build.props
  3. 167
      Directory.Packages.props
  4. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
  5. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json
  6. 5
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json
  7. 15
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json
  8. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
  9. 2
      common.props
  10. 4
      configureawait.props
  11. 2
      docs/en/Data-Filtering.md
  12. 1
      docs/en/Deployment/Index.md
  13. 34
      docs/en/Deployment/SSL.md
  14. 30
      docs/en/Getting-Started-Running-Solution-Single-Layer.md
  15. 36
      docs/en/Getting-Started-Running-Solution.md
  16. 29
      docs/en/Image-Manipulation.md
  17. 5
      docs/en/Migration-Guides/Abp-7_3.md
  18. 3
      docs/en/Migration-Guides/Abp-7_4.md
  19. 10
      docs/en/Modules/Cms-Kit/Pages.md
  20. 36
      docs/en/Tutorials/Part-1.md
  21. 32
      docs/en/Tutorials/Todo/Index.md
  22. 32
      docs/en/Tutorials/Todo/Single-Layer/Index.md
  23. 41
      docs/en/UI/Angular/Abp-Window-Service.md
  24. 24
      docs/en/UI/Angular/Service-Proxies.md
  25. 8
      docs/en/docs-nav.json
  26. BIN
      docs/en/images/cmskit-module-pages-page.png
  27. 2
      docs/zh-Hans/Data-Filtering.md
  28. 2
      framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Volo.Abp.AspNetCore.Authentication.JwtBearer.csproj
  29. 4
      framework/src/Volo.Abp.AspNetCore.Components.Server/Volo.Abp.AspNetCore.Components.Server.csproj
  30. 4
      framework/src/Volo.Abp.AspNetCore.Components.Web/Volo.Abp.AspNetCore.Components.Web.csproj
  31. 8
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo.Abp.AspNetCore.Components.WebAssembly.csproj
  32. 2
      framework/src/Volo.Abp.AspNetCore.Components/Volo.Abp.AspNetCore.Components.csproj
  33. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo.Abp.AspNetCore.Mvc.Dapr.csproj
  34. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson.csproj
  35. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.csproj
  36. 9
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js
  37. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo.Abp.AspNetCore.Mvc.UI.csproj
  38. 4
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj
  39. 2
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs
  40. 2
      framework/src/Volo.Abp.AspNetCore.Serilog/Volo.Abp.AspNetCore.Serilog.csproj
  41. 4
      framework/src/Volo.Abp.AspNetCore.TestBase/Volo.Abp.AspNetCore.TestBase.csproj
  42. 4
      framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj
  43. 2
      framework/src/Volo.Abp.Authorization.Abstractions/Volo.Abp.Authorization.Abstractions.csproj
  44. 2
      framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj
  45. 10
      framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj
  46. 2
      framework/src/Volo.Abp.AzureServiceBus/Volo.Abp.AzureServiceBus.csproj
  47. 8
      framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj
  48. 4
      framework/src/Volo.Abp.BlobStoring.Aliyun/Volo.Abp.BlobStoring.Aliyun.csproj
  49. 4
      framework/src/Volo.Abp.BlobStoring.Aws/Volo.Abp.BlobStoring.Aws.csproj
  50. 2
      framework/src/Volo.Abp.BlobStoring.Azure/Volo.Abp.BlobStoring.Azure.csproj
  51. 2
      framework/src/Volo.Abp.BlobStoring.FileSystem/Volo.Abp.BlobStoring.FileSystem.csproj
  52. 2
      framework/src/Volo.Abp.BlobStoring.Minio/Volo.Abp.BlobStoring.Minio.csproj
  53. 2
      framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo.Abp.Caching.StackExchangeRedis.csproj
  54. 2
      framework/src/Volo.Abp.Caching/Volo.Abp.Caching.csproj
  55. 4
      framework/src/Volo.Abp.Castle.Core/Volo.Abp.Castle.Core.csproj
  56. 24
      framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj
  57. 24
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs
  58. 113
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/AppModuleDatabaseManagementSystemChangeStep.cs
  59. 6
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/TemplateInfo.cs
  60. 6
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/TemplateProjectBuildPipelineBuilder.cs
  61. 5
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateRemoveMongodbCollectionFixtureStep.cs
  62. 12
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs
  63. 67
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularSourceCodeAdder.cs
  64. 34
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs
  65. 27
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/PackageVersionCheckerService.cs
  66. 13
      framework/src/Volo.Abp.Cli/Volo.Abp.Cli.csproj
  67. 38
      framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj
  68. 2
      framework/src/Volo.Abp.Core/Volo/Abp/IO/FileHelper.cs
  69. 8
      framework/src/Volo.Abp.Core/Volo/Abp/Reflection/TypeHelper.cs
  70. 2
      framework/src/Volo.Abp.Dapper/Volo.Abp.Dapper.csproj
  71. 2
      framework/src/Volo.Abp.Dapr/Volo.Abp.Dapr.csproj
  72. 4
      framework/src/Volo.Abp.DistributedLocking.Abstractions/Volo.Abp.DistributedLocking.Abstractions.csproj
  73. 2
      framework/src/Volo.Abp.DistributedLocking/Volo.Abp.DistributedLocking.csproj
  74. 2
      framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo.Abp.EntityFrameworkCore.MySQL.csproj
  75. 2
      framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj
  76. 4
      framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo.Abp.EntityFrameworkCore.Oracle.csproj
  77. 2
      framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo.Abp.EntityFrameworkCore.PostgreSql.csproj
  78. 2
      framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo.Abp.EntityFrameworkCore.SqlServer.csproj
  79. 2
      framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo.Abp.EntityFrameworkCore.Sqlite.csproj
  80. 4
      framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj
  81. 8
      framework/src/Volo.Abp.EventBus.Rebus/Volo.Abp.EventBus.Rebus.csproj
  82. 2
      framework/src/Volo.Abp.ExceptionHandling/Volo.Abp.ExceptionHandling.csproj
  83. 2
      framework/src/Volo.Abp.FluentValidation/Volo.Abp.FluentValidation.csproj
  84. 2
      framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj
  85. 2
      framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo.Abp.Http.Client.IdentityModel.WebAssembly.csproj
  86. 2
      framework/src/Volo.Abp.Http.Client/Volo.Abp.Http.Client.csproj
  87. 4
      framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj
  88. 23
      framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/ImageCompressor.cs
  89. 23
      framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/ImageResizer.cs
  90. 2
      framework/src/Volo.Abp.Imaging.ImageSharp/Volo.Abp.Imaging.ImageSharp.csproj
  91. 2
      framework/src/Volo.Abp.Imaging.MagickNet/Volo.Abp.Imaging.MagickNet.csproj
  92. 2
      framework/src/Volo.Abp.Json.Newtonsoft/Volo.Abp.Json.Newtonsoft.csproj
  93. 2
      framework/src/Volo.Abp.Json.SystemTextJson/Volo.Abp.Json.SystemTextJson.csproj
  94. 2
      framework/src/Volo.Abp.Kafka/Volo.Abp.Kafka.csproj
  95. 2
      framework/src/Volo.Abp.Ldap/Volo.Abp.Ldap.csproj
  96. 2
      framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj
  97. 2
      framework/src/Volo.Abp.Minify/Volo.Abp.Minify.csproj
  98. 2
      framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj
  99. 6
      framework/src/Volo.Abp.Quartz/Volo.Abp.Quartz.csproj
  100. 2
      framework/src/Volo.Abp.RabbitMQ/Volo.Abp.RabbitMQ.csproj

2
.github/workflows/build-and-test.yml

@ -17,6 +17,7 @@ on:
- 'templates/**/*.csproj'
- 'templates/**/*.razor'
- 'Directory.Build.props'
- 'Directory.Packages.props'
pull_request:
paths:
@ -33,6 +34,7 @@ on:
- 'templates/**/*.csproj'
- 'templates/**/*.razor'
- 'Directory.Build.props'
- 'Directory.Packages.props'
types:
- opened
- synchronize

46
Directory.Build.props

@ -1,54 +1,10 @@
<Project>
<PropertyGroup>
<!-- All Microsoft AspNetCore packages -->
<MicrosoftAspNetCorePackageVersion>8.0.0-rc.2.*</MicrosoftAspNetCorePackageVersion>
<!-- All Microsoft EntityFrameworkCore packages -->
<MicrosoftEntityFrameworkCorePackageVersion>8.0.0-rc.2.*</MicrosoftEntityFrameworkCorePackageVersion>
<!-- All Microsoft packages -->
<MicrosoftPackageVersion>8.0.0-rc.2.*</MicrosoftPackageVersion>
<!-- Microsoft.NET.Test.Sdk https://www.nuget.org/packages/Microsoft.NET.Test.Sdk -->
<MicrosoftNETTestSdkPackageVersion>17.2.2</MicrosoftNETTestSdkPackageVersion>
<!-- NSubstitute https://www.nuget.org/packages/NSubstitute -->
<NSubstitutePackageVersion>5.1.0</NSubstitutePackageVersion>
<!-- Shouldly https://www.nuget.org/packages/Shouldly -->
<ShouldlyPackageVersion>4.2.1</ShouldlyPackageVersion>
<!-- xunit https://www.nuget.org/packages/xUnit -->
<xUnitPackageVersion>2.5.1</xUnitPackageVersion>
<!-- xunit.extensibility.execution https://www.nuget.org/packages/xunit.extensibility.execution -->
<xUnitExtensibilityExecutionPackageVersion>2.5.1</xUnitExtensibilityExecutionPackageVersion>
<!-- xunit.runner.visualstudio https://www.nuget.org/packages/xunit.runner.visualstudio -->
<xUnitRunnerVisualstudioPackageVersion>2.5.1</xUnitRunnerVisualstudioPackageVersion>
<!-- Mongo2Go https://www.nuget.org/packages/Mongo2Go -->
<Mongo2GoPackageVersion>3.1.3</Mongo2GoPackageVersion>
<!-- Microsoft.CodeAnalysis https://www.nuget.org/packages/Microsoft.CodeAnalysis -->
<MicrosoftCodeAnalysisPackageVersion>4.5.0</MicrosoftCodeAnalysisPackageVersion>
<!-- NUglify https://www.nuget.org/packages/NUglify -->
<NUglifyPackageVersion>1.21.0</NUglifyPackageVersion>
<!-- Polly https://www.nuget.org/packages/Polly -->
<PollyPackageVersion>8.0.0</PollyPackageVersion>
<IsTestProject Condition="$(MSBuildProjectFullPath.Contains('test')) and ($(MSBuildProjectName.EndsWith('.Tests')) or $(MSBuildProjectName.EndsWith('.TestBase')))">true</IsTestProject>
<!-- OpenIddict https://www.nuget.org/packages/OpenIddict.Core -->
<OpenIddictPackageVersion>4.8.0</OpenIddictPackageVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Condition="'$(IsTestProject)' == 'true'" Include="coverlet.collector" Version="3.1.2">
<PackageReference Condition="'$(IsTestProject)' == 'true'" Include="coverlet.collector">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>

167
Directory.Packages.props

@ -0,0 +1,167 @@
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="AlibabaCloud.SDK.Dysmsapi20170525" Version="2.0.24" />
<PackageVersion Include="aliyun-net-sdk-sts" Version="3.1.1" />
<PackageVersion Include="Aliyun.OSS.SDK.NetCore" Version="2.13.0" />
<PackageVersion Include="AsyncKeyedLock" Version="6.2.2" />
<PackageVersion Include="Autofac" Version="7.1.0" />
<PackageVersion Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
<PackageVersion Include="Autofac.Extras.DynamicProxy" Version="7.1.0" />
<PackageVersion Include="AutoMapper" Version="12.0.1" />
<PackageVersion Include="AWSSDK.S3" Version="3.7.205.9" />
<PackageVersion Include="AWSSDK.SecurityToken" Version="3.7.202.4" />
<PackageVersion Include="Azure.Messaging.ServiceBus" Version="7.8.1" />
<PackageVersion Include="Azure.Storage.Blobs" Version="12.18.0" />
<PackageVersion Include="Blazorise" Version="1.3.1" />
<PackageVersion Include="Blazorise.Components" Version="1.3.1" />
<PackageVersion Include="Blazorise.DataGrid" Version="1.3.1" />
<PackageVersion Include="Blazorise.Snackbar" Version="1.3.1" />
<PackageVersion Include="Castle.Core" Version="5.1.1" />
<PackageVersion Include="Castle.Core.AsyncInterceptor" Version="2.1.0" />
<PackageVersion Include="CommonMark.NET" Version="0.15.1" />
<PackageVersion Include="Confluent.Kafka" Version="2.2.0" />
<PackageVersion Include="Dapper" Version="2.1.4" />
<PackageVersion Include="Dapr.AspNetCore" Version="1.9.0" />
<PackageVersion Include="Dapr.Client" Version="1.11.0" />
<PackageVersion Include="Devart.Data.Oracle.EFCore" Version="10.1.134.7" />
<PackageVersion Include="DistributedLock.Core" Version="1.0.5" />
<PackageVersion Include="DistributedLock.Redis" Version="1.0.2" />
<PackageVersion Include="EphemeralMongo.Core" Version="1.1.3" />
<PackageVersion Include="EphemeralMongo6.runtime.linux-x64" Version="1.1.3" />
<PackageVersion Include="EphemeralMongo6.runtime.osx-x64" Version="1.1.3" />
<PackageVersion Include="EphemeralMongo6.runtime.win-x64" Version="1.1.3" />
<PackageVersion Include="FluentValidation" Version="11.7.1" />
<PackageVersion Include="Hangfire.AspNetCore" Version="1.8.5" />
<PackageVersion Include="Hangfire.SqlServer" Version="1.8.5" />
<PackageVersion Include="HtmlSanitizer" Version="8.0.723" />
<PackageVersion Include="IdentityModel" Version="6.2.0" />
<PackageVersion Include="IdentityServer4" Version="4.1.2" />
<PackageVersion Include="IdentityServer4.AspNetIdentity" Version="4.1.2" />
<PackageVersion Include="JetBrains.Annotations" Version="2023.2.0" />
<PackageVersion Include="LdapForNet" Version="2.7.15" />
<PackageVersion Include="LibGit2Sharp" Version="0.27.2" />
<PackageVersion Include="Magick.NET-Q16-AnyCPU" Version="13.3.0" />
<PackageVersion Include="MailKit" Version="4.2.0" />
<PackageVersion Include="Markdig.Signed" Version="0.33.0" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Authorization" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Components" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Components.Authorization" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Components.Web" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Hosting.Abstractions" Version="2.2.0" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Versioning" Version="5.1.0" />
<PackageVersion Include="Microsoft.AspNetCore.Razor.Language" Version="6.0.22" />
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.WebUtilities" Version="2.2.0" />
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.5.0" />
<PackageVersion Include="Microsoft.CSharp" Version="4.7.0" />
<PackageVersion Include="Microsoft.Data.Sqlite" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Proxies" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Configuration.CommandLine" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Configuration.UserSecrets" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.FileProviders.Composite" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.FileProviders.Embedded" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.FileProviders.Physical" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.FileSystemGlobbing" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Http" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Identity.Core" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Localization" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Options" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.7.2" />
<PackageVersion Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="1.1.1" />
<PackageVersion Include="Minio" Version="6.0.0" />
<PackageVersion Include="MongoDB.Driver" Version="2.21.0" />
<PackageVersion Include="NEST" Version="7.17.5" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
<PackageVersion Include="Nito.AsyncEx.Context" Version="5.1.2" />
<PackageVersion Include="Nito.AsyncEx.Coordination" Version="5.1.2" />
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.0-rc.2" />
<PackageVersion Include="NSubstitute" Version="5.1.0" />
<PackageVersion Include="NuGet.Versioning" Version="6.7.0" />
<PackageVersion Include="NUglify" Version="1.21.0" />
<PackageVersion Include="Nullable" Version="1.3.1" />
<PackageVersion Include="Octokit" Version="8.0.1" />
<PackageVersion Include="OpenIddict.Abstractions" Version="4.8.0" />
<PackageVersion Include="OpenIddict.Core" Version="4.8.0" />
<PackageVersion Include="OpenIddict.Server.AspNetCore" Version="4.8.0" />
<PackageVersion Include="OpenIddict.Validation.AspNetCore" Version="4.8.0" />
<PackageVersion Include="OpenIddict.Validation.ServerIntegration" Version="4.8.0" />
<PackageVersion Include="Oracle.EntityFrameworkCore" Version="7.21.8" />
<PackageVersion Include="Polly" Version="8.0.0" />
<PackageVersion Include="Polly.Extensions.Http" Version="3.0.0" />
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.0-beta.1" />
<PackageVersion Include="Quartz" Version="3.7.0" />
<PackageVersion Include="Quartz.Extensions.DependencyInjection" Version="3.7.0" />
<PackageVersion Include="Quartz.Plugins.TimeZoneConverter" Version="3.7.0" />
<PackageVersion Include="Quartz.Serialization.Json" Version="3.3.3" />
<PackageVersion Include="RabbitMQ.Client" Version="6.5.0" />
<PackageVersion Include="Rebus" Version="7.2.1" />
<PackageVersion Include="Rebus.ServiceProvider" Version="9.1.0" />
<PackageVersion Include="Scriban" Version="5.9.0" />
<PackageVersion Include="Serilog" Version="2.11.0" />
<PackageVersion Include="Serilog.AspNetCore" Version="7.0.0" />
<PackageVersion Include="Serilog.Extensions.Hosting" Version="7.0.0" />
<PackageVersion Include="Serilog.Extensions.Logging" Version="7.0.0" />
<PackageVersion Include="Serilog.Sinks.Async" Version="1.5.0" />
<PackageVersion Include="Serilog.Sinks.Console" Version="4.1.0" />
<PackageVersion Include="Serilog.Sinks.File" Version="5.0.0" />
<PackageVersion Include="SharpZipLib" Version="1.4.2" />
<PackageVersion Include="Shouldly" Version="4.0.3" />
<PackageVersion Include="SixLabors.ImageSharp" Version="2.1.6" />
<PackageVersion Include="SixLabors.ImageSharp.Drawing" Version="1.0.0" />
<PackageVersion Include="Slugify.Core" Version="4.0.1" />
<PackageVersion Include="Spectre.Console" Version="0.47.0" />
<PackageVersion Include="StackExchange.Redis" Version="2.6.122" />
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.5.0" />
<PackageVersion Include="System.Collections.Immutable" Version="8.0.0-rc.2" />
<PackageVersion Include="System.ComponentModel.Annotations" Version="5.0.0" />
<PackageVersion Include="System.Linq.Async" Version="6.0.1" />
<PackageVersion Include="System.Linq.Dynamic.Core" Version="1.3.5" />
<PackageVersion Include="System.Linq.Queryable" Version="4.3.0" />
<PackageVersion Include="System.Runtime.Loader" Version="4.3.0" />
<PackageVersion Include="System.Security.Permissions" Version="8.0.0-rc.2" />
<PackageVersion Include="System.Security.Principal.Windows" Version="5.0.0" />
<PackageVersion Include="System.Text.Encoding.CodePages" Version="8.0.0-rc.2" />
<PackageVersion Include="System.Text.Encodings.Web" Version="8.0.0-rc.2" />
<PackageVersion Include="System.Text.Json" Version="8.0.0-rc.2" />
<PackageVersion Include="TimeZoneConverter" Version="6.1.0" />
<PackageVersion Include="Unidecode.NET" Version="2.1.0" />
<PackageVersion Include="xunit" Version="2.5.1" />
<PackageVersion Include="xunit.extensibility.execution" Version="2.5.1" />
<PackageVersion Include="xunit.runner.visualstudio" Version="2.5.1" />
<PackageVersion Include="coverlet.collector" Version="3.1.2" />
<PackageVersion Include="ConfigureAwait.Fody" Version="3.3.2"/>
<PackageVersion Include="Fody" Version="6.8.0" />
</ItemGroup>
</Project>

3
abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json

@ -559,6 +559,7 @@
"SessionDate": "Session Date",
"AddSession": "Add Session",
"AddSponsor": "Add Sponsor",
"SponsorLogo": "Sponsor Logo"
"SponsorLogo": "Sponsor Logo",
"RegistrationUrl": "Registration Url"
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json

@ -221,6 +221,8 @@
"More": "More",
"WhyABPIOPlatform": "Why ABP.IO Platform?",
"AbpStudio": "ABP Studio",
"ExtraMonths": "{0}<span>EXTRA MONTHS</span>"
"ExtraMonths": "{0}<span>EXTRA MONTHS</span>",
"RSS": "RSS",
"RSSFeed": "RSS Feed"
}
}

5
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json

@ -421,7 +421,7 @@
"UIFrameworks": "UI Frameworks",
"UsefulLinks": "Useful Links",
"Platform": "Platform",
"CoolestCompaniesUseABPCommercial": "The coolest companies already use <span class=\"fw-6\">ABP Commercial.</span>",
"CoolestCompaniesUseABPCommercial": "The coolest companies already use <span class=\"fw-bold\">ABP Commercial.</span>",
"UserInterface": "User Interface",
"APIGateway": "API Gateway",
"Microservice": "Microservice",
@ -1080,6 +1080,7 @@
"AbpStudio_Page_Title": "ABP Studio",
"CampaignInfo": "Buy a new license or renew your existing license and <span class=\"text-white\">get an additional 2 months</span> at no additional cost! This offer is valid for all license plans. Ensure you take advantage of this limited-time promotion to expand your access to premium features and upgrades.",
"HurryUpLastDay": "Hurry Up! Last Day: {0}",
"CreatingCRUDPagesWithABPSuite": "Creating CRUD pages with ABP Suite"
"CreatingCRUDPagesWithABPSuite": "Creating CRUD pages with ABP Suite",
"Testimonials": "Testimonials"
}
}

15
abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json

@ -235,6 +235,19 @@
"SponsoredConferencesDescription": "We are honoring to support .NET communities and events for software developers.",
"UpcomingEvents": "<span class=\"text-info\">Upcoming</span> Events",
"UpcomingCommunityTalkEventDescription": "The live shows, hosted by the ABP Team, are casual sessions full of community content, demos, Q&A, and discussions around what's happening in ABP.",
"UpcomingConferenceEventDescription": "ABP .NET Conference is a virtual event for the .NET Developer community to come together and listen to talks about the .NET world, common software development practices and the open source ABP Framework."
"UpcomingConferenceEventDescription": "ABP .NET Conference is a virtual event for the .NET Developer community to come together and listen to talks about the .NET world, common software development practices and the open source ABP Framework.",
"LastOneYear": "Last 1 Year",
"AllTimes": "All Times",
"TopContributors": "Top Contributors",
"{0}Posts": "{0} Posts",
"LATESTPOSTS": "LATEST POSTS",
"NoContributorsFound": "No contributors found!",
"LatestPost": "Latest post",
"MEMBERSINCE{0}": "MEMBER SINCE {0}",
"CopyLink": "Copy Link",
"ShareOnTwitter": "Share on Twitter",
"ShareOnLinkedIn": "Share on LinkedIn",
"MoreFrom{0}": "More from {0}",
"SeeAllFrom{0}": "See all from {0}"
}
}

3
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json

@ -432,6 +432,7 @@
"PackageDetailPage_ManualInstallationDescription2": "Then add the <code>{0}</code> dependency to your <a href=\"https://docs.abp.io/en/abp/latest/Module-Development-Basics\">module class</a> as shown in the following example",
"PackageDetailPage_SeeDocumentation": "<a href=\"{0}\">See the documentation</a> to learn how to use this package in your applications.",
"PackageDetailPage_InstallingUsingPMC": "3: Installing with the Package Manager Console",
"PackageDetailPage_InstallingUsingPMCDescription1": "Open the <strong>Package Manager Console</strong> in Visual Studio (Tools -> Nuget Package Manager -> Package Manager Console) and execute the following command"
"PackageDetailPage_InstallingUsingPMCDescription1": "Open the <strong>Package Manager Console</strong> in Visual Studio (Tools -> Nuget Package Manager -> Package Manager Console) and execute the following command",
"UIOptions": "UI Options"
}
}

2
common.props

@ -18,7 +18,7 @@
<None Include="..\..\NuGet.md" Pack="true" PackagePath="\"/>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1">
<PackageReference Include="Microsoft.SourceLink.GitHub">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>

4
configureawait.props

@ -1,7 +1,7 @@
<Project>
<ItemGroup Condition="'$(Configuration)' == 'Release'">
<PackageReference Include="ConfigureAwait.Fody" Version="3.3.2" PrivateAssets="All" />
<PackageReference Include="Fody" Version="6.8.0">
<PackageReference Include="ConfigureAwait.Fody" PrivateAssets="All" />
<PackageReference Include="Fody">
<PrivateAssets>All</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>

2
docs/en/Data-Filtering.md

@ -227,7 +227,7 @@ protected override Expression<Func<TEntity, bool>> CreateFilterExpression<TEntit
e => !IsActiveFilterEnabled || EF.Property<bool>(e, "IsActive");
expression = expression == null
? isActiveFilter
: CombineExpressions(expression, isActiveFilter);
: QueryFilterExpressionHelper.CombineExpressions(expression, isActiveFilter);
}
return expression;

1
docs/en/Deployment/Index.md

@ -6,6 +6,7 @@ However, there are some topics that you should care about when you are deploying
## Guides
* [Configuring SSL certificate(HTTPS)](SSL.md): Explains how to configure SSL certificate(HTTPS) for your application.
* [Configuring for OpenIddict](Configuring-OpenIddict.md): Notes for some essential configurations for OpenIddict.
* [Configuring for Production](Configuring-Production.md): Notes for some essential configurations for production environments.
* [Optimization for Production](Optimizing-Production.md): Tips and suggestions for optimizing your application on production environments.

34
docs/en/Deployment/SSL.md

@ -0,0 +1,34 @@
# Configuring Configuring SSL certificate(HTTPS)
A website needs an SSL certificate in order to keep user data secure, verify ownership of the website, prevent attackers from creating a fake version of the site, and gain user trust.
This document introduces how to get and use SSL certificate(HTTPS) for your application.
## Get a SSL Certificate from a Certificate Authority
You can get a SSL certificate from a certificate authority (CA) such as [Let's Encrypt](https://letsencrypt.org/) or [Cloudflare](https://www.cloudflare.com/learning/ssl/what-is-an-ssl-certificate/) and so on.
Once you have a certificate, you need to configure your web server to use it. The following references show how to configure your web server to use a certificate.
* [Host ASP.NET Core on Linux with Apache: HTTPS configuration](https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-apache)
* [Host ASP.NET Core on Linux with Nginx: HTTPS configuration](https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx)
* [How to Set Up SSL on IIS 7 or later](https://learn.microsoft.com/en-us/iis/manage/configuring-security/how-to-set-up-ssl-on-iis)
## Create a Self-Signed Certificate
You can create a self-signed certificate for testing purposes or internal use.
There is an article about [how to create a self-signed certificate](https://learn.microsoft.com/en-us/dotnet/core/additional-tools/self-signed-certificates-guide), If you are using IIS, you can use the following this document to [obtain a Certificate](https://learn.microsoft.com/en-us/iis/manage/configuring-security/how-to-set-up-ssl-on-iis#obtain-a-certificate)
## Common Problems
### The remote certificate is invalid because of errors in the certificate chain: UntrustedRoot
This error may occur when using IIS. You need to trust your certificate by `Manage computer certificates`.
## References
* [ABP commercial IIS Deployment](https://docs.abp.io/en/commercial/latest/startup-templates/application/deployment-iis)
* [HTTPS in ASP.NET Core](https://learn.microsoft.com/en-us/aspnet/core/security/enforcing-ssl)
* [Let's Encrypt](https://letsencrypt.org/getting-started)
* [Cloudflare's Free SSL / TLS](https://www.cloudflare.com/application-services/products/ssl/)

30
docs/en/Getting-Started-Running-Solution-Single-Layer.md

@ -50,7 +50,37 @@ Before running the application, you need to create the database and seed the ini
dotnet run --migrate-database
```
## Before Running the Application
### Installing the Client-Side Packages
[ABP CLI](CLI.md) runs the `abp install-libs` command behind the scenes to install the required NPM packages for your solution while creating the application.
However, sometimes this command might need to be manually run. For example, you need to run this command, if you have cloned the application, or the resources from *node_modules* folder didn't copy to *wwwroot/libs* folder, or if you have added a new client-side package dependency to your solution.
For such cases, run the `abp install-libs` command on the root directory of your solution to install all required NPM packages:
```bash
abp install-libs
```
> We suggest you install [Yarn](https://classic.yarnpkg.com/) to prevent possible package inconsistencies, if you haven't installed it yet.
{{if UI=="Blazor" || UI=="BlazorServer"}}
### Bundling and Minification
`abp bundle` command offers bundling and minification support for client-side resources (JavaScript and CSS files) for Blazor projects. This command automatically run when you create a new solution with the [ABP CLI](CLI.md).
However, sometimes you might need to run this command manually. To update script & style references without worrying about dependencies, ordering, etc. in a project, you can run this command in the directory of your blazor application:
```bash
abp bundle
```
> For more details about managing style and script references in Blazor or MAUI Blazor apps, see [Managing Global Scripts & Styles](UI/Blazor/Global-Scripts-Styles.md).
{{end}}
## Run the Application

36
docs/en/Getting-Started-Running-Solution.md

@ -89,11 +89,43 @@ Right click to the `.DbMigrator` project and select **Set as StartUp Project**
{{ end }}
## Before Running the Application
### Installing the Client-Side Packages
[ABP CLI](CLI.md) runs the `abp install-libs` command behind the scenes to install the required NPM packages for your solution while creating the application.
However, sometimes this command might need to be manually run. For example, you need to run this command, if you have cloned the application, or the resources from *node_modules* folder didn't copy to *wwwroot/libs* folder, or if you have added a new client-side package dependency to your solution.
For such cases, run the `abp install-libs` command on the root directory of your solution to install all required NPM packages:
```bash
abp install-libs
```
> We suggest you install [Yarn](https://classic.yarnpkg.com/) to prevent possible package inconsistencies, if you haven't installed it yet.
{{if UI=="Blazor" || UI=="BlazorServer"}}
### Bundling and Minification
`abp bundle` command offers bundling and minification support for client-side resources (JavaScript and CSS files) for Blazor projects. This command automatically run when you create a new solution with the [ABP CLI](CLI.md).
However, sometimes you might need to run this command manually. To update script & style references without worrying about dependencies, ordering, etc. in a project, you can run this command in the directory of your blazor application:
```bash
abp bundle
```
> For more details about managing style and script references in Blazor or MAUI Blazor apps, see [Managing Global Scripts & Styles](UI/Blazor/Global-Scripts-Styles.md).
{{end}}
## Run the Application
{{ if UI == "MVC" || UI == "BlazorServer" }}
> Before starting the application, run `abp install-libs` command in your Web directory to restore the client-side libraries. This will populate the `libs` folder.
> **Note**: Before starting the application, run `abp install-libs` command in your Web directory to restore the client-side libraries. This will populate the `libs` folder.
{{ if Tiered == "Yes" }}
@ -163,8 +195,6 @@ You can see the application APIs and test them here. Get [more info](https://swa
### Running the Blazor Application (Client Side)
Go to the Blazor project folder, open a command line terminal, type the `abp bundle -f` command (If the project was created by ABP Cli tool, you don't need to do this).
Ensure that the `.Blazor` project is the startup project and run the application.
> Use Ctrl+F5 in Visual Studio (instead of F5) to run the application without debugging. If you don't have a debug purpose, this will be faster.

29
docs/en/Image-Manipulation.md

@ -76,8 +76,8 @@ public interface IImageResizer
**Example usage:**
```csharp
var result = await _imageResizer.ResizeAsync(
stream, /* A stream object that represents an image */
var resizeResult = await _imageResizer.ResizeAsync(
imageStream, /* A stream object that represents an image */
new ImageResizeArgs
{
Width = 100,
@ -88,6 +88,16 @@ var result = await _imageResizer.ResizeAsync(
);
```
> **Note:** If `resizeResult.State` returns 'Done', then it means that the resize operation was successful. However, if it returns any other state than 'Done', the stream you're using might be corrupted. Therefore, you can perform a check like the one below and assign the correct stream to the main stream:
```csharp
if (resizeResult.Result is not null && imageStream != resizeResult.Result && resizeResult.Result.CanRead)
{
await imageStream.DisposeAsync();
imageStream = resizeResult.Result;
}
```
> You can use `MimeTypes.Image.Jpeg` constant instead of the `image/jpeg` magic string used in that example.
### ImageResizeArgs
@ -170,12 +180,23 @@ public interface IImageCompressor
**Example usage:**
```csharp
var result = await _imageCompressor.CompressAsync(
stream, /* A stream object that represents an image */
var compressResult = await _imageCompressor.CompressAsync(
imageStream, /* A stream object that represents an image */
mimeType: "image/jpeg"
);
```
> **Note:** If `compressResult.State` returns 'Done', then it means that the compression operation was successful. However, if it returns any other state than 'Done', the stream you're using might be corrupted. Therefore, you can perform a check like the one below and assign the correct stream to the main stream:
```csharp
if (compressResult.Result is not null && imageStream != compressResult.Result && compressResult.Result.CanRead)
{
await imageStream.DisposeAsync();
imageStream = compressResult.Result;
}
```
### ImageCompressResult
The `ImageCompressResult` is a generic class that is used to return the result of the image compression operations. It has the following properties:

5
docs/en/Migration-Guides/Abp-7_3.md

@ -25,4 +25,7 @@ This feature comes with a small restriction. If you use any C# code used inside
For example, `<script @string.Empty></script>` will no longer work. However, you can use the C# code for an attribute of script tag, for example, `<script src="@string.Empty"></script>` is completely valid and won't cause any problem.
> Note: You should not use any C# code used inside the script tag, even if you don't use this feature. Because it might cause errors.
> Note: You should not use any C# code used inside the script tag, even if you don't use this feature. Because it might cause errors.
## Angular UI
We would like to inform you that ABP Framework version 7.3 uses Angular version 16. Please migrate your applications to Angular 16. [Update angular](https://update.angular.io/)

3
docs/en/Migration-Guides/Abp-7_4.md

@ -114,3 +114,6 @@ The following packages are included in the templates by default:
### Bumped the `Microsoft.AspNetCore.Components.*` dependency to `7.0.10`
In this version, the `Microsoft.AspNetCore.Components.*` dependencies are upgraded to the `7.0.10` version. Therefore, you should upgrade the `Microsoft.AspNetCore.Components.Web` and `Microsoft.AspNetCore.Components.WebAssembly` packages to `7.0.10` in your `Blazor.csproj` file.
## Angular UI
We would like to inform you that ABP Framework version 7.4 uses Angular version 16. Please migrate your applications to Angular 16. [Update angular](https://update.angular.io/)

10
docs/en/Modules/Cms-Kit/Pages.md

@ -22,13 +22,13 @@ CMS Kit module admin side adds the following items to the main menu, under the *
#### Page Management
Pages page is used to manage dynamic pages in the system.
**Pages** page is used to manage dynamic pages in the system. You can create/edit pages with dynamic routes and contents on this page:
![pages-page](../../images/cmskit-module-pages-page.png)
![pages-edit](../../images/cmskit-module-pages-edit.png)
You can create or edit an existing page on this page.
After you have created pages, you can set one of them as a *home page*. Then, whenever anyone navigates to your application's homepage, they see the dynamic content of the page that you have defined on this page.
![pages-edit](../../images/cmskit-module-pages-edit.png)
![pages-page](../../images/cmskit-module-pages-page.png)
When you create a page, you can access the created page via `/{slug}` URL.
Also when you create a page, you can access the created page via `/{slug}` URL.

36
docs/en/Tutorials/Part-1.md

@ -36,6 +36,8 @@ This tutorial has multiple versions based on your **UI** and **Database** prefer
> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../KB/Windows-Path-Too-Long-Fix.md).
> After downloading the source code, you might need to run some commands before running the application. See the _After Creating the Solution_ section below for more information.
{{if UI == "MVC" && DB == "EF"}}
### Video Tutorial
@ -48,6 +50,38 @@ This part is also recorded as a video tutorial and **<a href="https://www.youtub
Before starting the development, create a new solution named `Acme.BookStore` and run it by following the [getting started tutorial](../Getting-Started.md).
## After Creating the Solution
### Installing the Client-Side Packages
[ABP CLI](../CLI.md) runs the `abp install-libs` command behind the scenes to install the required NPM packages for your solution while creating the application.
However, sometimes this command might need to be manually run. For example, you need to run this command, if you have cloned the application, or the resources from *node_modules* folder didn't copy to *wwwroot/libs* folder, or if you have added a new client-side package dependency to your solution.
For such cases, run the `abp install-libs` command on the root directory of your solution to install all required NPM packages:
```bash
abp install-libs
```
> We suggest you install [Yarn](https://classic.yarnpkg.com/) to prevent possible package inconsistencies, if you haven't installed it yet.
{{if UI=="Blazor" || UI=="BlazorServer"}}
### Bundling and Minification
`abp bundle` command offers bundling and minification support for client-side resources (JavaScript and CSS files) for Blazor projects. This command automatically run when you create a new solution with the [ABP CLI](../CLI.md).
However, sometimes you might need to run this command manually. To update script & style references without worrying about dependencies, ordering, etc. in a project, you can run this command in the directory of your blazor application:
```bash
abp bundle
```
> For more details about managing style and script references in Blazor or MAUI Blazor apps, see [Managing Global Scripts & Styles](../UI/Blazor/Global-Scripts-Styles.md).
{{end}}
## Create the Book Entity
**Domain layer** in the startup template is separated into two projects:
@ -204,7 +238,7 @@ This will add a new migration class to the project:
> It's good to have some initial data in the database before running the application. This section introduces the [Data Seeding](../Data-Seeding.md) system of the ABP framework. You can skip this section if you don't want to create the data seeding, but it is suggested to follow along and learn this useful ABP Framework feature.
Create a class deriving from the `IDataSeedContributor` in the `*.Domain` project by copying the following code:
Create a class that implements the `IDataSeedContributor` interface in the `*.Domain` project by copying the following code:
```csharp
using System;

32
docs/en/Tutorials/Todo/Index.md

@ -97,6 +97,38 @@ If you are using Visual Studio, right click on the `TodoApp.DbMigrator` project,
{{end}}
### Before Running the Application
#### Installing the Client-Side Packages
[ABP CLI](../../CLI.md) runs the `abp install-libs` command behind the scenes to install the required NPM packages for your solution while creating the application.
However, sometimes this command might need to be manually run. For example, you need to run this command, if you have cloned the application, or the resources from *node_modules* folder didn't copy to *wwwroot/libs* folder, or if you have added a new client-side package dependency to your solution.
For such cases, run the `abp install-libs` command on the root directory of your solution to install all required NPM packages:
```bash
abp install-libs
```
> We suggest you install [Yarn](https://classic.yarnpkg.com/) to prevent possible package inconsistencies, if you haven't installed it yet.
{{if UI=="Blazor" || UI=="BlazorServer"}}
#### Bundling and Minification
`abp bundle` command offers bundling and minification support for client-side resources (JavaScript and CSS files) for Blazor projects. This command automatically run when you create a new solution with the [ABP CLI](../../CLI.md).
However, sometimes you might need to run this command manually. To update script & style references without worrying about dependencies, ordering, etc. in a project, you can run this command in the directory of your blazor application:
```bash
abp bundle
```
> For more details about managing style and script references in Blazor or MAUI Blazor apps, see [Managing Global Scripts & Styles](../../UI/Blazor/Global-Scripts-Styles.md).
{{end}}
### Run the Application
{{if UI=="MVC" || UI=="BlazorServer"}}

32
docs/en/Tutorials/Todo/Single-Layer/Index.md

@ -101,6 +101,38 @@ dotnet run --migrate-database
This command will create the database and seed the initial data for you. Then you can run the application.
### Before Running the Application
#### Installing the Client-Side Packages
[ABP CLI](../../../CLI.md) runs the `abp install-libs` command behind the scenes to install the required NPM packages for your solution while creating the application.
However, sometimes this command might need to be manually run. For example, you need to run this command, if you have cloned the application, or the resources from *node_modules* folder didn't copy to *wwwroot/libs* folder, or if you have added a new client-side package dependency to your solution.
For such cases, run the `abp install-libs` command on the root directory of your solution to install all required NPM packages:
```bash
abp install-libs
```
> We suggest you install [Yarn](https://classic.yarnpkg.com/) to prevent possible package inconsistencies, if you haven't installed it yet.
{{if UI=="Blazor" || UI=="BlazorServer"}}
#### Bundling and Minification
`abp bundle` command offers bundling and minification support for client-side resources (JavaScript and CSS files) for Blazor projects. This command automatically run when you create a new solution with the [ABP CLI](../../../CLI.md).
However, sometimes you might need to run this command manually. To update script & style references without worrying about dependencies, ordering, etc. in a project, you can run this command in the directory of your blazor application:
```bash
abp bundle
```
> For more details about managing style and script references in Blazor or MAUI Blazor apps, see [Managing Global Scripts & Styles](../../../UI/Blazor/Global-Scripts-Styles.md).
{{end}}
### Run the Application
{{if UI=="MVC" || UI=="BlazorServer"}}

41
docs/en/UI/Angular/Abp-Window-Service.md

@ -0,0 +1,41 @@
# Abp Window Service
## Download Blob as File
AbpWindowService is an Angular service designed to provide utility methods related to window operations. The service has a `downloadBlob` function, which is used for downloading blobs as files within the context of a web application.
### Usage
To make use of the `AbpWindowService` in your Angular application, follow the steps below:
### Injection
Firstly, ensure that the service is injected into the component or any other Angular entity where you wish to use it.
```js
import { AbpWindowService } from '@abp/ng.core';
constructor(private abpWindowService: AbpWindowService) { }
// or
// private abpWindowService = inject(AbpWindowService)
```
### Downloading a Blob
Once you have the service injected, you can use the downloadBlob method to initiate the download of blob data as a file. For instance:
```js
someMethod() {
const myBlob = new Blob(["Hello, World!"], { type: "text/plain" });
this.abpWindowService.downloadBlob(myBlob, "hello.txt");
}
```
### Permissions & Considerations
Ensure that you have appropriate permissions and user interactions before triggering a download. Since downloadBlob initiates a download programmatically, it's best to tie this action to direct user interactions, such as button clicks, to prevent unexpected behaviors or browser restrictions.
### DOCUMENT Token in Service
Angular, being a platform-agnostic framework, is designed to support not only browser-based applications but also other environments like server-side rendering (SSR) through Angular Universal. This design philosophy introduces challenges when accessing global browser-specific objects like window or document directly. To address this, Angular provides a DOCUMENT token that can be used to inject the document object into Angular entities like components and services.

24
docs/en/UI/Angular/Service-Proxies.md

@ -18,7 +18,9 @@ Run the following command in the **root folder** of the angular application:
abp generate-proxy -t ng
```
The command without any parameters creates proxies only for your own application's services and places them in your default Angular application. There are several parameters you may use to modify this behavior. See the [CLI documentation](../../CLI) for details.
### Note
- If you're utilizing NX, be aware that the Angular schematics-based ABP package may not work as expected. Instead, there's a specialized package for NX-based repositories named @abp/nx.generators. We recommend using this generator for your package. For detailed instructions and more information, refer to this section.
- The command without any parameters creates proxies for your own application's services only and places them in your default Angular application. There are several parameters you may use to modify this behavior. See the [Details](#abp-nx-proxy-generator).
The generated files will be placed in a folder called `proxy` at the root of the target project.
@ -140,6 +142,26 @@ export class BookComponent implements OnInit {
> Please [see this article](https://github.com/abpframework/abp/blob/dev/docs/en/Blog-Posts/2020-09-07%20Angular-Service-Proxies/POST.md) to learn more about service proxies.
### ABP NX Proxy Generator
For projects that utilize NX, the @abp/nx.generators package offers seamless integration. Essentially, this package serves as a wrapper specifically tailored for NX-based repositories
**Installation**
To incorporate this package into your project, run the following command:
```bash
yarn add @abp/nx.generators
```
### Usage
To use the generator, execute the following command:
```bash
yarn nx generate @abp/nx.generators:generate-proxy
// or
yarn nx g @abp/nx.generators:generate-proxy
```
**Note:** The parameters you'd use with this generator are consistent with the standard ABP proxy generator.
### Known Limitations
When you run a project on Visual Studio using IIS Express as the web server, there will be no remote access to your endpoints. This is the default behavior of IIS Express since it explicitly protects you from the security risks of running over the network. However, that will cause the proxy generator to fail because it needs a response from the `/api/abp/api-definition` endpoint. You may serve your endpoints via Kestrel to avoid this. Running `dotnet run` in your command line (at your project folder) will do that for you.

8
docs/en/docs-nav.json

@ -1153,6 +1153,10 @@
{
"text": "Content Security Strategy",
"path": "UI/Angular/Content-Security-Strategy.md"
},
{
"text":"Abp Window Service",
"path":"UI/Angular/Abp-Window-Service.md"
}
]
},
@ -1359,6 +1363,10 @@
"text": "Deployment",
"path": "Deployment/Index.md",
"items": [
{
"text": "Configuring SSL certificate(HTTPS)",
"path": "Deployment/SSL.md"
},
{
"text": "Configuring OpenIddict",
"path": "Deployment/Configuring-OpenIddict.md"

BIN
docs/en/images/cmskit-module-pages-page.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 29 KiB

2
docs/zh-Hans/Data-Filtering.md

@ -176,7 +176,7 @@ protected override Expression<Func<TEntity, bool>> CreateFilterExpression<TEntit
e => !IsActiveFilterEnabled || EF.Property<bool>(e, "IsActive");
expression = expression == null
? isActiveFilter
: CombineExpressions(expression, isActiveFilter);
: QueryFilterExpressionHelper.CombineExpressions(expression, isActiveFilter);
}
return expression;

2
framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Volo.Abp.AspNetCore.Authentication.JwtBearer.csproj

@ -21,7 +21,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="$(MicrosoftAspNetCorePackageVersion)" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" />
</ItemGroup>
</Project>

4
framework/src/Volo.Abp.AspNetCore.Components.Server/Volo.Abp.AspNetCore.Components.Server.csproj

@ -19,8 +19,8 @@
<ProjectReference Include="..\Volo.Abp.EventBus\Volo.Abp.EventBus.csproj" />
<ProjectReference Include="..\Volo.Abp.Http.Client\Volo.Abp.Http.Client.csproj" />
<ProjectReference Include="..\Volo.Abp.AspNetCore.SignalR\Volo.Abp.AspNetCore.SignalR.csproj" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="$(MicrosoftAspNetCorePackageVersion)" />
<PackageReference Include="IdentityModel" Version="6.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" />
<PackageReference Include="IdentityModel" />
</ItemGroup>
</Project>

4
framework/src/Volo.Abp.AspNetCore.Components.Web/Volo.Abp.AspNetCore.Components.Web.csproj

@ -16,8 +16,8 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="$(MicrosoftAspNetCorePackageVersion)" />
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="$(MicrosoftAspNetCorePackageVersion)" />
<PackageReference Include="Microsoft.AspNetCore.Components.Web" />
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization" />
</ItemGroup>
</Project>

8
framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo.Abp.AspNetCore.Components.WebAssembly.csproj

@ -23,10 +23,10 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="$(MicrosoftAspNetCorePackageVersion)" />
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="$(MicrosoftAspNetCorePackageVersion)" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="$(MicrosoftAspNetCorePackageVersion)" />
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" />
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" />
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.AspNetCore.Components/Volo.Abp.AspNetCore.Components.csproj

@ -24,7 +24,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components" Version="$(MicrosoftAspNetCorePackageVersion)" />
<PackageReference Include="Microsoft.AspNetCore.Components" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo.Abp.AspNetCore.Mvc.Dapr.csproj

@ -16,7 +16,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Dapr.AspNetCore" Version="1.9.0" />
<PackageReference Include="Dapr.AspNetCore" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson.csproj

@ -25,7 +25,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="$(MicrosoftAspNetCorePackageVersion)" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.csproj

@ -28,7 +28,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" />
</ItemGroup>
<ItemGroup>

9
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js

@ -134,8 +134,15 @@ $.validator.defaults.ignore = ''; //TODO: Would be better if we can apply only f
_args = args || {};
var argsWithoutFunc = {};
for (a in _args) {
if (_args.hasOwnProperty(a) && typeof _args[a] !== 'function') {
argsWithoutFunc[a] = _args[a];
}
}
_createContainer(_modalId)
.load(options.viewUrl, $.param(_args), function (response, status, xhr) {
.load(options.viewUrl, $.param(argsWithoutFunc), function (response, status, xhr) {
if (status === "error") {
//TODO: Handle!
return;

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo.Abp.AspNetCore.Mvc.UI.csproj

@ -17,7 +17,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NUglify" Version="$(NUglifyPackageVersion)" />
<PackageReference Include="NUglify" />
</ItemGroup>
<ItemGroup>

4
framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj

@ -30,8 +30,8 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="$(MicrosoftAspNetCorePackageVersion)" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="5.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs

@ -214,6 +214,8 @@ public class AspNetCoreApiDescriptionModelProvider : IApiDescriptionModelProvide
type == typeof(void) ||
type == typeof(Enum) ||
type == typeof(ValueType) ||
type == typeof(DateOnly) ||
type == typeof(TimeOnly) ||
TypeHelper.IsPrimitiveExtended(type))
{
return;

2
framework/src/Volo.Abp.AspNetCore.Serilog/Volo.Abp.AspNetCore.Serilog.csproj

@ -25,7 +25,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Serilog" Version="2.11.0" />
<PackageReference Include="Serilog" />
</ItemGroup>
</Project>

4
framework/src/Volo.Abp.AspNetCore.TestBase/Volo.Abp.AspNetCore.TestBase.csproj

@ -27,8 +27,8 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="$(MicrosoftAspNetCorePackageVersion)" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="$(MicrosoftAspNetCorePackageVersion)" />
<PackageReference Include="Microsoft.AspNetCore.TestHost" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" />
</ItemGroup>
</Project>

4
framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj

@ -28,8 +28,8 @@
<ProjectReference Include="..\Volo.Abp.Uow\Volo.Abp.Uow.csproj" />
<ProjectReference Include="..\Volo.Abp.Validation\Volo.Abp.Validation.csproj" />
<ProjectReference Include="..\Volo.Abp.VirtualFileSystem\Volo.Abp.VirtualFileSystem.csproj" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="$(MicrosoftAspNetCorePackageVersion)" />
<PackageReference Include="IdentityModel" Version="6.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" />
<PackageReference Include="IdentityModel" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.Authorization.Abstractions/Volo.Abp.Authorization.Abstractions.csproj

@ -17,7 +17,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Authorization" Version="$(MicrosoftAspNetCorePackageVersion)" />
<PackageReference Include="Microsoft.AspNetCore.Authorization" />
</ItemGroup>
<ItemGroup>

2
framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj

@ -23,7 +23,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="AutoMapper" Version="12.0.1" />
<PackageReference Include="AutoMapper" />
</ItemGroup>
</Project>

10
framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj

@ -17,11 +17,11 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Autofac" Version="7.1.0" />
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
<PackageReference Include="Autofac.Extras.DynamicProxy" Version="7.1.0" />
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="Autofac" />
<PackageReference Include="Autofac.Extensions.DependencyInjection" />
<PackageReference Include="Autofac.Extras.DynamicProxy" />
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" />
</ItemGroup>
<ItemGroup>

2
framework/src/Volo.Abp.AzureServiceBus/Volo.Abp.AzureServiceBus.csproj

@ -17,7 +17,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Azure.Messaging.ServiceBus" Version="7.8.1" />
<PackageReference Include="Azure.Messaging.ServiceBus" />
<ProjectReference Include="..\Volo.Abp.Json\Volo.Abp.Json.csproj" />
<ProjectReference Include="..\Volo.Abp.Threading\Volo.Abp.Threading.csproj" />
</ItemGroup>

8
framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj

@ -16,10 +16,10 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Blazorise" Version="1.3.1" />
<PackageReference Include="Blazorise.DataGrid" Version="1.3.1" />
<PackageReference Include="Blazorise.Snackbar" Version="1.3.1" />
<PackageReference Include="Blazorise.Components" Version="1.3.1" />
<PackageReference Include="Blazorise" />
<PackageReference Include="Blazorise.DataGrid" />
<PackageReference Include="Blazorise.Snackbar" />
<PackageReference Include="Blazorise.Components" />
</ItemGroup>
</Project>

4
framework/src/Volo.Abp.BlobStoring.Aliyun/Volo.Abp.BlobStoring.Aliyun.csproj

@ -17,8 +17,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="aliyun-net-sdk-sts" Version="3.1.1" />
<PackageReference Include="Aliyun.OSS.SDK.NetCore" Version="2.13.0" />
<PackageReference Include="aliyun-net-sdk-sts" />
<PackageReference Include="Aliyun.OSS.SDK.NetCore" />
</ItemGroup>
<ItemGroup>

4
framework/src/Volo.Abp.BlobStoring.Aws/Volo.Abp.BlobStoring.Aws.csproj

@ -19,8 +19,8 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="AWSSDK.S3" Version="3.7.205.9" />
<PackageReference Include="AWSSDK.SecurityToken" Version="3.7.202.4" />
<PackageReference Include="AWSSDK.S3" />
<PackageReference Include="AWSSDK.SecurityToken" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.BlobStoring.Azure/Volo.Abp.BlobStoring.Azure.csproj

@ -18,7 +18,7 @@
<ItemGroup>
<ProjectReference Include="..\Volo.Abp.BlobStoring\Volo.Abp.BlobStoring.csproj" />
<PackageReference Include="Azure.Storage.Blobs" Version="12.18.0" />
<PackageReference Include="Azure.Storage.Blobs" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.BlobStoring.FileSystem/Volo.Abp.BlobStoring.FileSystem.csproj

@ -18,7 +18,7 @@
<ItemGroup>
<ProjectReference Include="..\Volo.Abp.BlobStoring\Volo.Abp.BlobStoring.csproj" />
<PackageReference Include="Polly" Version="$(PollyPackageVersion)" />
<PackageReference Include="Polly" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.BlobStoring.Minio/Volo.Abp.BlobStoring.Minio.csproj

@ -17,7 +17,7 @@
<ItemGroup>
<ProjectReference Include="..\Volo.Abp.BlobStoring\Volo.Abp.BlobStoring.csproj" />
<PackageReference Include="Minio" Version="6.0.0" />
<PackageReference Include="Minio" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo.Abp.Caching.StackExchangeRedis.csproj

@ -21,7 +21,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.Caching/Volo.Abp.Caching.csproj

@ -16,7 +16,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" />
</ItemGroup>
<ItemGroup>

4
framework/src/Volo.Abp.Castle.Core/Volo.Abp.Castle.Core.csproj

@ -17,8 +17,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Castle.Core" Version="5.1.1" />
<PackageReference Include="Castle.Core.AsyncInterceptor" Version="2.1.0" />
<PackageReference Include="Castle.Core" />
<PackageReference Include="Castle.Core.AsyncInterceptor" />
</ItemGroup>
<ItemGroup>

24
framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj

@ -13,17 +13,17 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileSystemGlobbing" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="SharpZipLib" Version="1.4.2" />
<PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions" Version="2.2.0" />
<PackageReference Include="NuGet.Versioning" Version="6.7.0" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="System.Security.Permissions" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="$(MicrosoftCodeAnalysisPackageVersion)" />
<PackageReference Include="Polly" Version="$(PollyPackageVersion)" />
<PackageReference Include="Polly.Extensions.Http" Version="3.0.0" />
<PackageReference Include="LibGit2Sharp" Version="0.27.2" />
<PackageReference Include="StackExchange.Redis" Version="2.6.122" />
<PackageReference Include="Microsoft.Extensions.FileSystemGlobbing" />
<PackageReference Include="SharpZipLib" />
<PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions" />
<PackageReference Include="NuGet.Versioning" />
<PackageReference Include="System.Text.Encoding.CodePages" />
<PackageReference Include="System.Security.Permissions" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" />
<PackageReference Include="Polly" />
<PackageReference Include="Polly.Extensions.Http" />
<PackageReference Include="LibGit2Sharp" />
<PackageReference Include="StackExchange.Redis" />
</ItemGroup>
<ItemGroup>
@ -31,6 +31,6 @@
<ProjectReference Include="..\Volo.Abp.Http\Volo.Abp.Http.csproj" />
<ProjectReference Include="..\Volo.Abp.IdentityModel\Volo.Abp.IdentityModel.csproj" />
<ProjectReference Include="..\Volo.Abp.Json\Volo.Abp.Json.csproj" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Newtonsoft.Json" />
</ItemGroup>
</Project>

24
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs

@ -450,7 +450,7 @@ public abstract class ProjectCreationCommandBase
var efCoreProjectPath = string.Empty;
bool isLayeredTemplate;
var isModuleTemplate = false;
switch (projectArgs.TemplateName)
{
case AppTemplate.TemplateName:
@ -464,11 +464,16 @@ public abstract class ProjectCreationCommandBase
?? Directory.GetFiles(projectArgs.OutputFolder, "*.csproj", SearchOption.AllDirectories).FirstOrDefault();
isLayeredTemplate = false;
break;
case ModuleTemplate.TemplateName:
case ModuleProTemplate.TemplateName:
isModuleTemplate = true;
isLayeredTemplate = false;
break;
default:
return;
}
if (string.IsNullOrWhiteSpace(efCoreProjectPath))
if (string.IsNullOrWhiteSpace(efCoreProjectPath) && !isModuleTemplate)
{
Logger.LogWarning("Couldn't find the project to create initial migrations!");
return;
@ -479,7 +484,20 @@ public abstract class ProjectCreationCommandBase
Message = "Creating the initial DB migration"
}, false);
await InitialMigrationCreator.CreateAsync(Path.GetDirectoryName(efCoreProjectPath), isLayeredTemplate);
if (!isModuleTemplate)
{
await InitialMigrationCreator.CreateAsync(Path.GetDirectoryName(efCoreProjectPath), isLayeredTemplate);
}
else
{
var hostProjectsWithEfCore = Directory.GetFiles(projectArgs.OutputFolder, "*.csproj", SearchOption.AllDirectories)
.Where(x => File.ReadAllText(x).Contains("Microsoft.EntityFrameworkCore.Tools"))
.ToList();
foreach (var project in hostProjectsWithEfCore)
{
await InitialMigrationCreator.CreateAsync(Path.GetDirectoryName(project));
}
}
}
protected Task CreateOpenIddictPfxFilesAsync(ProjectBuildArgs projectArgs)

113
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/AppModuleDatabaseManagementSystemChangeStep.cs

@ -0,0 +1,113 @@
using System;
using System.Linq;
using Volo.Abp.Cli.ProjectBuilding.Files;
using Volo.Abp.Cli.ProjectBuilding.Templates.App;
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps;
public class AppModuleDatabaseManagementSystemChangeStep : ProjectBuildPipelineStep
{
public override void Execute(ProjectBuildContext context)
{
switch (context.BuildArgs.DatabaseManagementSystem)
{
case DatabaseManagementSystem.MySQL:
ChangeEntityFrameworkCoreDependency(context, "Volo.Abp.EntityFrameworkCore.MySQL",
"Volo.Abp.EntityFrameworkCore.MySQL",
"AbpEntityFrameworkCoreMySQLModule");
AddMySqlServerVersion(context);
ChangeUseSqlServer(context, "UseMySQL", "UseMySql");
break;
case DatabaseManagementSystem.PostgreSQL:
ChangeEntityFrameworkCoreDependency(context, "Volo.Abp.EntityFrameworkCore.PostgreSql",
"Volo.Abp.EntityFrameworkCore.PostgreSql",
"AbpEntityFrameworkCorePostgreSqlModule");
ChangeUseSqlServer(context, "UseNpgsql");
break;
case DatabaseManagementSystem.Oracle:
ChangeEntityFrameworkCoreDependency(context, "Volo.Abp.EntityFrameworkCore.Oracle",
"Volo.Abp.EntityFrameworkCore.Oracle",
"AbpEntityFrameworkCoreOracleModule");
AdjustOracleDbContextOptionsBuilder(context);
ChangeUseSqlServer(context, "UseOracle");
break;
case DatabaseManagementSystem.OracleDevart:
ChangeEntityFrameworkCoreDependency(context, "Volo.Abp.EntityFrameworkCore.Oracle.Devart",
"Volo.Abp.EntityFrameworkCore.Oracle.Devart",
"AbpEntityFrameworkCoreOracleDevartModule");
AdjustOracleDbContextOptionsBuilder(context);
ChangeUseSqlServer(context, "UseOracle");
break;
case DatabaseManagementSystem.SQLite:
ChangeEntityFrameworkCoreDependency(context, "Volo.Abp.EntityFrameworkCore.Sqlite",
"Volo.Abp.EntityFrameworkCore.Sqlite",
"AbpEntityFrameworkCoreSqliteModule");
ChangeUseSqlServer(context, "UseSqlite");
break;
default:
return;
}
}
private void AdjustOracleDbContextOptionsBuilder(ProjectBuildContext context)
{
var dbContextFactoryFiles = context.Files.Where(f => f.Name.EndsWith("DbContextFactory.cs", StringComparison.OrdinalIgnoreCase));
foreach (var dbContextFactoryFile in dbContextFactoryFiles)
{
dbContextFactoryFile?.ReplaceText("new DbContextOptionsBuilder",
$"(DbContextOptionsBuilder<{context.BuildArgs.SolutionName.ProjectName}{(false ? "Migrations" : string.Empty)}DbContext>) new DbContextOptionsBuilder");
}
}
private void AddMySqlServerVersion(ProjectBuildContext context)
{
var dbContextFactoryFiles = context.Files.Where(f => f.Name.EndsWith("DbContextFactory.cs", StringComparison.OrdinalIgnoreCase));
foreach (var dbContextFactoryFile in dbContextFactoryFiles)
{
dbContextFactoryFile?.ReplaceText("configuration.GetConnectionString(\"Default\")", "configuration.GetConnectionString(\"Default\"), MySqlServerVersion.LatestSupportedServerVersion");
}
}
private void ChangeEntityFrameworkCoreDependency(ProjectBuildContext context, string newPackageName, string newModuleNamespace, string newModuleClass)
{
var efCoreProjectFiles = context.Files.Where(f => f.Name.EndsWith(".csproj", StringComparison.OrdinalIgnoreCase));
foreach (var efCoreProjectFile in efCoreProjectFiles)
{
efCoreProjectFile?.ReplaceText("Volo.Abp.EntityFrameworkCore.SqlServer", newPackageName);
}
var efCoreModuleClasses = context.Files.Where(f => f.Name.EndsWith("Module.cs", StringComparison.OrdinalIgnoreCase));
foreach (var efCoreModuleClass in efCoreModuleClasses)
{
efCoreModuleClass?.ReplaceText("Volo.Abp.EntityFrameworkCore.SqlServer", newModuleNamespace);
efCoreModuleClass?.ReplaceText("AbpEntityFrameworkCoreSqlServerModule", newModuleClass);
}
}
private void ChangeUseSqlServer(ProjectBuildContext context, string newUseMethodForEfModule, string newUseMethodForDbContext = null)
{
if (newUseMethodForDbContext == null)
{
newUseMethodForDbContext = newUseMethodForEfModule;
}
const string oldUseMethod = "UseSqlServer";
var efCoreModuleClasses = context.Files.Where(f => f.Name.EndsWith("Module.cs", StringComparison.OrdinalIgnoreCase));
foreach (var efCoreModuleClass in efCoreModuleClasses)
{
efCoreModuleClass.ReplaceText(oldUseMethod, newUseMethodForEfModule);
}
var dbContextFactoryFiles = context.Files.Where(f => f.Name.EndsWith("DbContextFactory.cs", StringComparison.OrdinalIgnoreCase));
foreach (var dbContextFactoryFile in dbContextFactoryFiles)
{
dbContextFactoryFile?.ReplaceText(oldUseMethod, newUseMethodForDbContext);
}
}
}

6
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/TemplateInfo.cs

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using JetBrains.Annotations;
using Volo.Abp.Cli.ProjectBuilding.Templates.App;
using Volo.Abp.Cli.ProjectBuilding.Templates;
namespace Volo.Abp.Cli.ProjectBuilding.Building;
@ -43,4 +44,9 @@ public abstract class TemplateInfo
{
return Name.EndsWith("-pro", StringComparison.OrdinalIgnoreCase);
}
public bool IsNoLayer()
{
return Name is AppNoLayersTemplate.TemplateName or AppNoLayersProTemplate.TemplateName;
}
}

6
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/TemplateProjectBuildPipelineBuilder.cs

@ -43,6 +43,12 @@ public static class TemplateProjectBuildPipelineBuilder
pipeline.Steps.Add(new AppNoLayersDatabaseManagementSystemChangeStep()); // todo: move to custom steps?
}
if (context.Template.Name == ModuleTemplate.TemplateName ||
context.Template.Name == ModuleProTemplate.TemplateName)
{
pipeline.Steps.Add(new AppModuleDatabaseManagementSystemChangeStep()); // todo: move to custom steps?
}
if ((context.BuildArgs.UiFramework == UiFramework.Mvc || context.BuildArgs.UiFramework == UiFramework.Blazor || context.BuildArgs.UiFramework == UiFramework.BlazorServer)
&& context.BuildArgs.MobileApp == MobileApp.None && context.Template.Name != MicroserviceProTemplate.TemplateName
&& context.Template.Name != MicroserviceServiceProTemplate.TemplateName)

5
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateRemoveMongodbCollectionFixtureStep.cs

@ -8,6 +8,11 @@ public class AppTemplateRemoveMongodbCollectionFixtureStep : ProjectBuildPipelin
{
public override void Execute(ProjectBuildContext context)
{
if (context.Template.IsNoLayer())
{
return;
}
//MyCompanyName.MyProjectName.Application.Tests
RemoveFile(context, "/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationCollection.cs");
RemoveKeyword(context,

12
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs

@ -27,6 +27,7 @@ public abstract class ModuleTemplateBase : TemplateInfo
DeleteUnrelatedProjects(context, steps);
RandomizeSslPorts(context, steps);
UpdateNuGetConfig(context, steps);
RemoveMigrations(context, steps);
ChangeConnectionString(context, steps);
CleanupFolderHierarchy(context, steps);
@ -103,6 +104,17 @@ public abstract class ModuleTemplateBase : TemplateInfo
steps.Add(new UpdateNuGetConfigStep("/NuGet.Config"));
}
protected void RemoveMigrations(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps)
{
steps.Add(new RemoveFolderStep("/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations"));
steps.Add(new RemoveFolderStep("/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations"));
steps.Add(new RemoveFolderStep("/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations"));
if (context.BuildArgs.TemplateName == ModuleProTemplate.TemplateName)
{
steps.Add(new RemoveFolderStep("/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations"));
}
}
private void ChangeConnectionString(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps)
{
if (context.BuildArgs.ConnectionString != null)

67
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularSourceCodeAdder.cs

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
@ -71,6 +72,7 @@ public class AngularSourceCodeAdder : ITransientDependency
{
await AddProjectToEnvironmentTsAsync(angularPath, moduleName);
await AddProjectToAppModuleTsAsync(angularPath, moduleName);
await AddProjectToAppRoutingTsAsync(angularPath, moduleName);
}
private async Task AddProjectsToAngularJsonAsync(string angularPath, List<string> projects)
@ -244,15 +246,15 @@ public class AngularSourceCodeAdder : ITransientDependency
{
return;
}
var fileContent = File.ReadAllText(filePath);
fileContent = Regex.Replace(fileContent, @"apis\s*:\s*{",
"apis: {"+ Environment.NewLine +
" " + moduleName.Split(".").Last() + ": {"+ Environment.NewLine +
" rootNamespace: '" + moduleName + "',"+ Environment.NewLine +
fileContent = Regex.Replace(fileContent, @"apis\s*:\s*{",
"apis: {" + Environment.NewLine +
" " + moduleName.Split(".").Last() + ": {" + Environment.NewLine +
" rootNamespace: '" + moduleName + "'," + Environment.NewLine +
" },");
File.WriteAllText(filePath, fileContent);
}
@ -264,23 +266,56 @@ public class AngularSourceCodeAdder : ITransientDependency
{
return;
}
var fileContent = File.ReadAllText(filePath);
var moduleNameAsConfigPath = moduleName.ToKebabCase();
if (moduleName.Contains("."))
{
var moduleNameSplited = moduleName.Split(".");
moduleNameAsConfigPath = moduleNameSplited.Take(moduleNameSplited.Length-1).JoinAsString(".").ToKebabCase() + "/" + moduleNameSplited.Last().ToKebabCase();
moduleNameAsConfigPath = moduleNameSplited.Take(moduleNameSplited.Length - 1).JoinAsString(".").ToKebabCase() + "/" + moduleNameSplited.Last().ToKebabCase();
}
fileContent = "import { "+moduleName.Split(".").Last()+"ConfigModule } from '@"+moduleNameAsConfigPath+"/config';" + Environment.NewLine + fileContent;
fileContent = Regex.Replace(fileContent, "imports\\s*:\\s*\\[",
"imports: ["+ Environment.NewLine +
fileContent = "import { " + moduleName.Split(".").Last() + "ConfigModule } from '@" + moduleNameAsConfigPath + "/config';" + Environment.NewLine + fileContent;
fileContent = Regex.Replace(fileContent, "imports\\s*:\\s*\\[",
"imports: [" + Environment.NewLine +
" " + moduleName.Split(".").Last() + "ConfigModule.forRoot(),");
File.WriteAllText(filePath, fileContent);
}
private async Task AddProjectToAppRoutingTsAsync(string angularPath, string moduleName)
{
string filePath = Path.Combine(angularPath, "src", "app", "app-routing.module.ts");
if (!File.Exists(filePath))
{
return;
}
string fileContent = File.ReadAllText(filePath);
string moduleNameAsConfigPath = moduleName.ToKebabCase();
string path = moduleName.ToKebabCase();
if (moduleName.Contains("."))
{
var moduleNameSplitted = moduleName.Split(".");
moduleNameAsConfigPath = moduleNameSplitted.Take(moduleNameSplitted.Length - 1).JoinAsString(".").ToKebabCase() + "/" + moduleNameSplitted.Last().ToKebabCase();
path = $"{moduleNameSplitted.Last().ToKebabCase()}";
}
string pattern = "Routes\\s*=\\s*\\[";
string newContent = $@"Routes = [
{{
path: '{path}',
loadChildren: () => import('@{moduleNameAsConfigPath}')
.then(m => m.{(moduleName.Split(".").Length > 1 ? moduleName.Split(".")[1] : moduleName)}Module.forLazy())
}},
";
fileContent = Regex.Replace(fileContent, pattern, newContent);
File.WriteAllText(filePath, fileContent);
}
@ -311,7 +346,7 @@ public class AngularSourceCodeAdder : ITransientDependency
{
Directory.Delete(vscodeFolder, true);
}
var projectsInFolder = Directory.GetDirectories(folder);
if (projectsInFolder.Length == 1 && Path.GetFileName(projectsInFolder[0]) == "projects")
@ -360,7 +395,7 @@ public class AngularSourceCodeAdder : ITransientDependency
return projects;
}
private async Task<string> GetProjectPackageNameAsync(string angularProjectsPath, string project)
{
var packageJsonPath = Path.Combine(angularProjectsPath, project, "package.json");

34
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs

@ -538,18 +538,9 @@ public class CSharpServiceProxyGenerator : ServiceProxyGeneratorBase<CSharpServi
usingNamespaceList?.AddIfNotContains($"using {GetTypeNamespace(typeName)};");
return NormalizeTypeName(typeName.Split(".").Last());
}
if (typeName.Contains("<") && typeName.Contains(">"))
{
var left = typeName.IndexOf("<", StringComparison.Ordinal);
var right = typeName.LastIndexOf(">", StringComparison.Ordinal);
var genericTypes = typeName.Substring(left + 1, right - left - 1);
foreach (var genericType in genericTypes.Split(",").Where(x => x.Contains(".")))
{
usingNamespaceList?.AddIfNotContains($"using {GetTypeNamespace(genericType)};");
}
}
AddGenericTypeUsingNamespace(typeName, usingNamespaceList);
var type = new StringBuilder();
var s1 = typeName.Split("<");
for (var i = 0; i < s1.Length; i++)
@ -579,6 +570,25 @@ public class CSharpServiceProxyGenerator : ServiceProxyGeneratorBase<CSharpServi
return type.ToString();
}
private static void AddGenericTypeUsingNamespace(string typeFullName, List<string> usingNamespaceList)
{
if(!typeFullName.Contains("<"))
{
usingNamespaceList.AddIfNotContains($"using {GetTypeNamespace(typeFullName)};");
}
if (typeFullName.Contains("<") && typeFullName.Contains(">"))
{
var left = typeFullName.IndexOf("<", StringComparison.Ordinal);
var right = typeFullName.LastIndexOf(">", StringComparison.Ordinal);
var genericTypes = typeFullName.Substring(left + 1, right - left - 1);
foreach (var genericType in genericTypes.Split(",").Where(x => x.Contains(".")))
{
AddGenericTypeUsingNamespace(genericType, usingNamespaceList);
}
}
}
private static string NormalizeTypeName(string typeName)
{
var nullable = string.Empty;

27
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/PackageVersionCheckerService.cs

@ -46,7 +46,7 @@ public class PackageVersionCheckerService : ITransientDependency
{
var versionList = await GetPackageVersionListAsync(packageId, false);
if (versionList == null)
if (!versionList.Any())
{
return false;
}
@ -121,10 +121,10 @@ public class PackageVersionCheckerService : ITransientDependency
}
var searchUrl = CliUrls.GetNuGetPackageSearchUrl(_apiKeyResult.ApiKey, packageId);
return await HasAnyPackageAsync(searchUrl);
return await HasAnyPackageAsync(searchUrl, packageId);
}
private async Task<bool> HasAnyPackageAsync(string url)
private async Task<bool> HasAnyPackageAsync(string url, string packageId)
{
try
{
@ -139,8 +139,9 @@ public class PackageVersionCheckerService : ITransientDependency
await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage);
var responseContent = await responseMessage.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<NuGetSearchResultDto>(responseContent).TotalHits > 0;
var nugetSearchResult = JsonSerializer.Deserialize<NuGetSearchResultDto>(responseContent);
return nugetSearchResult.TotalHits > 0 && nugetSearchResult.Packages.Any(package => package.Id.ToLowerInvariant() == packageId.ToLowerInvariant());
}
}
catch (Exception)
@ -182,7 +183,7 @@ public class PackageVersionCheckerService : ITransientDependency
if (responseMessage.StatusCode == HttpStatusCode.NotFound)
{
//the package doesn't exist...
return null;
return new List<string>();
}
await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage);
@ -193,7 +194,7 @@ public class PackageVersionCheckerService : ITransientDependency
}
catch (Exception)
{
return null;
return new List<string>();
}
}
@ -238,6 +239,18 @@ public class PackageVersionCheckerService : ITransientDependency
{
[JsonProperty("totalHits")]
public int TotalHits { get; set; }
[JsonProperty("data")]
public NuGetSearchResultPackagesDto[] Packages { get; set; }
}
public class NuGetSearchResultPackagesDto
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("version")]
public string Version { get; set; }
}
public class NuGetVersionResultDto

13
framework/src/Volo.Abp.Cli/Volo.Abp.Cli.csproj

@ -15,13 +15,12 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="NETStandard.Library" Version="2.0.3" />
<PackageReference Include="Serilog.Extensions.Logging" Version="7.0.0" />
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="Microsoft.CSharp" />
<PackageReference Include="Serilog.Extensions.Logging" />
<PackageReference Include="Serilog.Sinks.File" />
<PackageReference Include="Serilog.Sinks.Console" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" />
</ItemGroup>
<ItemGroup>

38
framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj

@ -16,29 +16,29 @@
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Collections.Immutable" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="Microsoft.Extensions.Localization" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="Microsoft.Extensions.Options" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="System.Text.Encodings.Web" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="System.Runtime.Loader" Version="4.3.0" />
<PackageReference Include="System.Linq.Dynamic.Core" Version="1.3.5" />
<PackageReference Include="System.Linq.Queryable" Version="4.3.0" />
<PackageReference Include="JetBrains.Annotations" Version="2023.2.0" />
<PackageReference Include="Nito.AsyncEx.Coordination" Version="5.1.2" />
<PackageReference Include="Nito.AsyncEx.Context" Version="5.1.2" />
<PackageReference Include="System.Collections.Immutable" />
<PackageReference Include="Microsoft.Extensions.Localization" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" />
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" />
<PackageReference Include="Microsoft.Extensions.Options" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" />
<PackageReference Include="Microsoft.Extensions.Logging" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" />
<PackageReference Include="System.Text.Encodings.Web" />
<PackageReference Include="System.Runtime.Loader" />
<PackageReference Include="System.Linq.Dynamic.Core" />
<PackageReference Include="System.Linq.Queryable" />
<PackageReference Include="JetBrains.Annotations" />
<PackageReference Include="Nito.AsyncEx.Coordination" />
<PackageReference Include="Nito.AsyncEx.Context" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFrameworkIdentifier)' == '.NETStandard' And $([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), '2.1')) ">
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
<PackageReference Include="System.ComponentModel.Annotations" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFrameworkIdentifier)' == '.NETStandard' And $([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), '2.0')) ">
<PackageReference Include="Nullable" Version="1.3.1">
<PackageReference Include="Nullable">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>

2
framework/src/Volo.Abp.Core/Volo/Abp/IO/FileHelper.cs

@ -69,7 +69,7 @@ public static class FileHelper
/// <returns>A string containing all lines of the file.</returns>
public static async Task<byte[]> ReadAllBytesAsync(string path)
{
using (var stream = File.Open(path, FileMode.Open))
using (var stream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read))
{
var result = new byte[stream.Length];
await stream.ReadAsync(result, 0, (int)stream.Length);

8
framework/src/Volo.Abp.Core/Volo/Abp/Reflection/TypeHelper.cs

@ -257,6 +257,14 @@ public static class TypeHelper
{
return "string";
}
else if (type.FullName == "System.DateOnly")
{
return "string";
}
else if (type.FullName == "System.TimeOnly")
{
return "string";
}
else if (type == typeof(TimeSpan))
{
return "string";

2
framework/src/Volo.Abp.Dapper/Volo.Abp.Dapper.csproj

@ -21,7 +21,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Dapper" Version="2.1.4" />
<PackageReference Include="Dapper" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.Dapr/Volo.Abp.Dapr.csproj

@ -15,7 +15,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Dapr.Client" Version="1.11.0" />
<PackageReference Include="Dapr.Client" />
</ItemGroup>
</Project>

4
framework/src/Volo.Abp.DistributedLocking.Abstractions/Volo.Abp.DistributedLocking.Abstractions.csproj

@ -18,8 +18,8 @@
<ItemGroup>
<ProjectReference Include="..\Volo.Abp.Core\Volo.Abp.Core.csproj" />
<PackageReference Include="AsyncKeyedLock" Version="6.2.2" />
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="AsyncKeyedLock" />
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.DistributedLocking/Volo.Abp.DistributedLocking.csproj

@ -22,7 +22,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="DistributedLock.Core" Version="1.0.5" />
<PackageReference Include="DistributedLock.Core" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo.Abp.EntityFrameworkCore.MySQL.csproj

@ -21,7 +21,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.0-beta.1" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj

@ -21,7 +21,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Devart.Data.Oracle.EFCore" Version="10.1.134.7" />
<PackageReference Include="Devart.Data.Oracle.EFCore" />
</ItemGroup>
</Project>

4
framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo.Abp.EntityFrameworkCore.Oracle.csproj

@ -21,8 +21,8 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="$(MicrosoftEntityFrameworkCorePackageVersion)" />
<PackageReference Include="Oracle.EntityFrameworkCore" Version="7.21.8" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" />
<PackageReference Include="Oracle.EntityFrameworkCore" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo.Abp.EntityFrameworkCore.PostgreSql.csproj

@ -21,7 +21,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.0-rc.2" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo.Abp.EntityFrameworkCore.SqlServer.csproj

@ -21,7 +21,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="$(MicrosoftEntityFrameworkCorePackageVersion)" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo.Abp.EntityFrameworkCore.Sqlite.csproj

@ -17,7 +17,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="$(MicrosoftEntityFrameworkCorePackageVersion)" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" />
</ItemGroup>
<ItemGroup>

4
framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj

@ -22,8 +22,8 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="$(MicrosoftEntityFrameworkCorePackageVersion)" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="$(MicrosoftEntityFrameworkCorePackageVersion)" />
<PackageReference Include="Microsoft.EntityFrameworkCore" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" />
</ItemGroup>
</Project>

8
framework/src/Volo.Abp.EventBus.Rebus/Volo.Abp.EventBus.Rebus.csproj

@ -21,10 +21,10 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Rebus" Version="7.2.1" />
<PackageReference Include="Rebus.ServiceProvider" Version="9.1.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="Rebus" />
<PackageReference Include="Rebus.ServiceProvider" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.ExceptionHandling/Volo.Abp.ExceptionHandling.csproj

@ -22,7 +22,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.FluentValidation/Volo.Abp.FluentValidation.csproj

@ -17,7 +17,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="FluentValidation" Version="11.7.1" />
<PackageReference Include="FluentValidation" />
</ItemGroup>
<ItemGroup>

2
framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj

@ -17,7 +17,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Hangfire.AspNetCore" Version="1.8.5" />
<PackageReference Include="Hangfire.AspNetCore" />
</ItemGroup>
<ItemGroup>

2
framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo.Abp.Http.Client.IdentityModel.WebAssembly.csproj

@ -17,7 +17,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="$(MicrosoftAspNetCorePackageVersion)" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" />
</ItemGroup>
<ItemGroup>

2
framework/src/Volo.Abp.Http.Client/Volo.Abp.Http.Client.csproj

@ -17,7 +17,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Http" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="Microsoft.Extensions.Http" />
</ItemGroup>
<ItemGroup>

4
framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj

@ -17,8 +17,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="IdentityModel" Version="6.2.0" />
<PackageReference Include="Microsoft.Extensions.Http" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="IdentityModel" />
<PackageReference Include="Microsoft.Extensions.Http" />
<ProjectReference Include="..\Volo.Abp.Caching\Volo.Abp.Caching.csproj" />
<ProjectReference Include="..\Volo.Abp.MultiTenancy\Volo.Abp.MultiTenancy.csproj" />
<ProjectReference Include="..\Volo.Abp.Threading\Volo.Abp.Threading.csproj" />

23
framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/ImageCompressor.cs

@ -28,10 +28,25 @@ public class ImageCompressor : IImageCompressor, ITransientDependency
{
Check.NotNull(stream, nameof(stream));
if(!stream.CanRead)
{
return new ImageCompressResult<Stream>(stream, ImageProcessState.Unsupported);
}
if(!stream.CanSeek)
{
var memoryStream = new MemoryStream();
await stream.CopyToAsync(memoryStream, CancellationTokenProvider.FallbackToProvider(cancellationToken));
SeekToBegin(memoryStream);
stream = memoryStream;
}
foreach (var imageCompressorContributor in ImageCompressorContributors)
{
var result = await imageCompressorContributor.TryCompressAsync(stream, mimeType, CancellationTokenProvider.FallbackToProvider(cancellationToken));
SeekToBegin(stream);
if (result.State == ImageProcessState.Unsupported)
{
continue;
@ -64,4 +79,12 @@ public class ImageCompressor : IImageCompressor, ITransientDependency
return new ImageCompressResult<byte[]>(bytes, ImageProcessState.Unsupported);
}
protected virtual void SeekToBegin(Stream stream)
{
if (stream.CanSeek)
{
stream.Seek(0, SeekOrigin.Begin);
}
}
}

23
framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/ImageResizer.cs

@ -38,9 +38,24 @@ public class ImageResizer : IImageResizer, ITransientDependency
ChangeDefaultResizeMode(resizeArgs);
if(!stream.CanRead)
{
return new ImageResizeResult<Stream>(stream, ImageProcessState.Unsupported);
}
if(!stream.CanSeek)
{
var memoryStream = new MemoryStream();
await stream.CopyToAsync(memoryStream, CancellationTokenProvider.FallbackToProvider(cancellationToken));
SeekToBegin(memoryStream);
stream = memoryStream;
}
foreach (var imageResizerContributor in ImageResizerContributors)
{
var result = await imageResizerContributor.TryResizeAsync(stream, resizeArgs, mimeType, CancellationTokenProvider.FallbackToProvider(cancellationToken));
SeekToBegin(stream);
if (result.State == ImageProcessState.Unsupported)
{
@ -85,4 +100,12 @@ public class ImageResizer : IImageResizer, ITransientDependency
resizeArgs.Mode = ImageResizeOptions.DefaultResizeMode;
}
}
protected virtual void SeekToBegin(Stream stream)
{
if (stream.CanSeek)
{
stream.Seek(0, SeekOrigin.Begin);
}
}
}

2
framework/src/Volo.Abp.Imaging.ImageSharp/Volo.Abp.Imaging.ImageSharp.csproj

@ -20,7 +20,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="SixLabors.ImageSharp" Version="2.1.6" />
<PackageReference Include="SixLabors.ImageSharp" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.Imaging.MagickNet/Volo.Abp.Imaging.MagickNet.csproj

@ -20,7 +20,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Magick.NET-Q16-AnyCPU" Version="13.3.0" />
<PackageReference Include="Magick.NET-Q16-AnyCPU" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.Json.Newtonsoft/Volo.Abp.Json.Newtonsoft.csproj

@ -19,7 +19,7 @@
<ItemGroup>
<ProjectReference Include="..\Volo.Abp.Json.Abstractions\Volo.Abp.Json.Abstractions.csproj" />
<ProjectReference Include="..\Volo.Abp.Timing\Volo.Abp.Timing.csproj" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Newtonsoft.Json" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.Json.SystemTextJson/Volo.Abp.Json.SystemTextJson.csproj

@ -20,7 +20,7 @@
<ProjectReference Include="..\Volo.Abp.Json.Abstractions\Volo.Abp.Json.Abstractions.csproj" />
<ProjectReference Include="..\Volo.Abp.Timing\Volo.Abp.Timing.csproj" />
<ProjectReference Include="..\Volo.Abp.Data\Volo.Abp.Data.csproj" />
<PackageReference Include="System.Text.Json" Version="$(MicrosoftPackageVersion)" />
<PackageReference Include="System.Text.Json" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.Kafka/Volo.Abp.Kafka.csproj

@ -11,7 +11,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Confluent.Kafka" Version="2.2.0" />
<PackageReference Include="Confluent.Kafka" />
<ProjectReference Include="..\Volo.Abp.Json\Volo.Abp.Json.csproj" />
<ProjectReference Include="..\Volo.Abp.Threading\Volo.Abp.Threading.csproj" />
</ItemGroup>

2
framework/src/Volo.Abp.Ldap/Volo.Abp.Ldap.csproj

@ -17,7 +17,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="LdapForNet" Version="2.7.15" />
<PackageReference Include="LdapForNet" />
</ItemGroup>
<ItemGroup>

2
framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj

@ -17,7 +17,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="MailKit" Version="4.2.0" />
<PackageReference Include="MailKit" />
</ItemGroup>
<ItemGroup>

2
framework/src/Volo.Abp.Minify/Volo.Abp.Minify.csproj

@ -21,7 +21,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="NUglify" Version="$(NUglifyPackageVersion)" />
<PackageReference Include="NUglify" />
</ItemGroup>
</Project>

2
framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj

@ -17,7 +17,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="MongoDB.Driver" Version="2.21.0" />
<PackageReference Include="MongoDB.Driver" />
</ItemGroup>
<ItemGroup>

6
framework/src/Volo.Abp.Quartz/Volo.Abp.Quartz.csproj

@ -17,9 +17,9 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Quartz" Version="3.7.0" />
<PackageReference Include="Quartz.Extensions.DependencyInjection" Version="3.7.0" />
<PackageReference Include="Quartz.Plugins.TimeZoneConverter" Version="3.7.0" />
<PackageReference Include="Quartz" />
<PackageReference Include="Quartz.Extensions.DependencyInjection" />
<PackageReference Include="Quartz.Plugins.TimeZoneConverter" />
</ItemGroup>
<ItemGroup>

2
framework/src/Volo.Abp.RabbitMQ/Volo.Abp.RabbitMQ.csproj

@ -17,7 +17,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="RabbitMQ.Client" Version="6.5.0" />
<PackageReference Include="RabbitMQ.Client" />
<ProjectReference Include="..\Volo.Abp.Json\Volo.Abp.Json.csproj" />
<ProjectReference Include="..\Volo.Abp.Threading\Volo.Abp.Threading.csproj" />
</ItemGroup>

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save