From 52525b44eea18bcb9f4eeff1e3908f17595bc796 Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Wed, 4 Oct 2023 17:46:19 +0300 Subject: [PATCH 01/70] refactor(dtos.ts): improve generic type naming and ordering for better readability and consistency --- npm/ng-packs/packages/core/src/lib/models/dtos.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/models/dtos.ts b/npm/ng-packs/packages/core/src/lib/models/dtos.ts index ee1f03fab3..e86a06a060 100644 --- a/npm/ng-packs/packages/core/src/lib/models/dtos.ts +++ b/npm/ng-packs/packages/core/src/lib/models/dtos.ts @@ -114,14 +114,14 @@ export class CreationAuditedEntityDto extends EntityDto extends CreationAuditedEntityDto { creator?: TUserDto; constructor( - initialValues: Partial> = {}, + initialValues: Partial> = {}, ) { super(initialValues); } @@ -136,14 +136,15 @@ export class AuditedEntityDto extends CreationAuditedEntit } } + export class AuditedEntityWithUserDto< - TUserDto, TPrimaryKey = string, + TUserDto = any, > extends AuditedEntityDto { creator?: TUserDto; lastModifier?: TUserDto; - constructor(initialValues: Partial> = {}) { + constructor(initialValues: Partial> = {}) { super(initialValues); } } @@ -159,14 +160,14 @@ export class FullAuditedEntityDto extends AuditedEntityDto } export class FullAuditedEntityWithUserDto< - TUserDto, TPrimaryKey = string, + TUserDto = any > extends FullAuditedEntityDto { creator?: TUserDto; lastModifier?: TUserDto; deleter?: TUserDto; - constructor(initialValues: Partial> = {}) { + constructor(initialValues: Partial> = {}) { super(initialValues); } } From ca8a86f236aad2e4a9c0c3663f833e95d10897a3 Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Tue, 10 Oct 2023 11:29:55 +0300 Subject: [PATCH 02/70] Mention `install-libs` and `bundle` command on the quick start documentations --- docs/en/Tutorials/Todo/Index.md | 32 ++++++++++++++++++++ docs/en/Tutorials/Todo/Single-Layer/Index.md | 32 ++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/docs/en/Tutorials/Todo/Index.md b/docs/en/Tutorials/Todo/Index.md index 20465b7820..0a0a080d8e 100644 --- a/docs/en/Tutorials/Todo/Index.md +++ b/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"}} diff --git a/docs/en/Tutorials/Todo/Single-Layer/Index.md b/docs/en/Tutorials/Todo/Single-Layer/Index.md index fe09c57e3f..e08acb1167 100644 --- a/docs/en/Tutorials/Todo/Single-Layer/Index.md +++ b/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"}} From 1733f37729d44e6640c04bec7b968ecdc8be102e Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Tue, 10 Oct 2023 11:38:27 +0300 Subject: [PATCH 03/70] Mention `install-libs` and `bundle` command on the getting started solution documentation --- ...g-Started-Running-Solution-Single-Layer.md | 30 ++++++++++++++++ docs/en/Getting-Started-Running-Solution.md | 36 ++++++++++++++++--- 2 files changed, 62 insertions(+), 4 deletions(-) diff --git a/docs/en/Getting-Started-Running-Solution-Single-Layer.md b/docs/en/Getting-Started-Running-Solution-Single-Layer.md index cef80c7807..8da0fc7912 100644 --- a/docs/en/Getting-Started-Running-Solution-Single-Layer.md +++ b/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 diff --git a/docs/en/Getting-Started-Running-Solution.md b/docs/en/Getting-Started-Running-Solution.md index 36cd5ffe0a..9be04c7612 100644 --- a/docs/en/Getting-Started-Running-Solution.md +++ b/docs/en/Getting-Started-Running-Solution.md @@ -89,12 +89,42 @@ 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. - {{ if Tiered == "Yes" }} > Tiered solutions use **Redis** as the distributed cache. Ensure that it is installed and running in your local computer. If you are using a remote Redis Server, set the configuration in the `appsettings.json` files of the projects below. @@ -163,8 +193,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. From fca306b1ec4e2d7d6c643e947ae63370eb4f5e3d Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Tue, 10 Oct 2023 11:49:56 +0300 Subject: [PATCH 04/70] Mention `install-libs` and `bundle` command on the web application tutorial doc --- docs/en/Tutorials/Part-1.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/docs/en/Tutorials/Part-1.md b/docs/en/Tutorials/Part-1.md index 0b50992274..f6c3f96649 100644 --- a/docs/en/Tutorials/Part-1.md +++ b/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 ** 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: From efc63f63c0c5e620295de415146291d5c01454c5 Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Wed, 11 Oct 2023 16:14:24 +0300 Subject: [PATCH 05/70] Add generic parser import method. Improve generic method, I can work with multiple generic params. --- .../src/tests/parse-generic-type.spec.ts | 129 ++++++++++++++++++ .../packages/schematics/src/utils/model.ts | 35 +++-- .../packages/schematics/src/utils/tree.ts | 31 ++++- 3 files changed, 185 insertions(+), 10 deletions(-) create mode 100644 npm/ng-packs/packages/schematics/src/tests/parse-generic-type.spec.ts diff --git a/npm/ng-packs/packages/schematics/src/tests/parse-generic-type.spec.ts b/npm/ng-packs/packages/schematics/src/tests/parse-generic-type.spec.ts new file mode 100644 index 0000000000..400fcdf6eb --- /dev/null +++ b/npm/ng-packs/packages/schematics/src/tests/parse-generic-type.spec.ts @@ -0,0 +1,129 @@ +import { parseBaseTypeWithGenericTypes } from '../utils/model'; +import { parseGenerics } from '../utils/tree'; + +import {test} from '@jest/globals'; + +const cases: Array<[string, string[]]> = [ + [ + 'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto', + ['Volo.Abp.Application.Dtos.AuditedEntityWithUserDto'], + ], + [ + 'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto', + ['Volo.Abp.Application.Dtos.AuditedEntityWithUserDto', 'Volo.Abp.Identity.IdentityUserDto'], + ], + [ + 'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto', + [ + 'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto', + 'string', + 'Volo.Abp.Identity.IdentityUserDto' + ], + ], + [ + 'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto>', + [ + 'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto', + 'string', + 'Volo.Abp.Identity.IdentityUserDto', + 'number', + ], + ], + [ + 'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto>>', + [ + 'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto', + 'string', + 'Volo.Abp.Identity.IdentityUserDto', + 'Volo.Abp.Core.Dummy', + 'System.String', + ], + ], + [ + 'AuditedEntityWithUserDto', + ['AuditedEntityWithUserDto'], + ], +]; + +test.each(cases)('should parse %s', (inputStr, expected) => { + const parsed = parseBaseTypeWithGenericTypes(inputStr); + expect(parsed).toEqual(expected); +}) + +describe('parseGenerics', () => { + + it('should work with simple type', function() { + const node = parseGenerics('System.String'); + expect(node.data).toEqual('System.String'); + expect(node.index).toBe(0); + expect(node.parent).toBe(null); + }); + it('should work with simple Array type', function() { + const node = parseGenerics('System.String[]'); + expect(node.data).toEqual('System.String[]'); + expect(node.index).toBe(0); + expect(node.parent).toBe(null); + }); + + it('should work with simple', function() { + const node = parseGenerics('Volo.Abp.Application.Dtos.AuditedEntityWithUserDto'); + expect(node.data).toEqual('Volo.Abp.Application.Dtos.AuditedEntityWithUserDto'); + expect(node.index).toBe(0); + expect(node.parent).toBe(null); + }); + + it('should work with `Volo.Abp.Application.Dtos.AuditedEntityWithUserDto`', function() { + const type = 'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto'; + const node = parseGenerics(type); + + expect(node.data).toEqual('Volo.Abp.Application.Dtos.AuditedEntityWithUserDto'); + expect(node.children.length).toBe(1); + const child = node.children[0]; + expect(node.children[0].data).toEqual('Volo.Abp.Identity.IdentityUserDto'); + expect(child.parent).toBe(node); + }); + + + it('should work with `Volo.Abp.Application.Dtos.AuditedEntityWithUserDto`', function() { + const type = 'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto'; + const node = parseGenerics(type); + + expect(node.data).toEqual('Volo.Abp.Application.Dtos.AuditedEntityWithUserDto'); + expect(node.children.length).toBe(2); + expect(node.children[0].data).toEqual('System.string'); + expect(node.children[0].index).toBe(0) + expect(node.children[1].data).toEqual('Volo.Abp.Identity.IdentityUserDto'); + expect(node.children[1].index).toBe(1); + + }); + it('should Volo.Abp.Application.Dtos.AuditedEntityWithUserDto>', function() { + const type = 'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto>'; + const node = parseGenerics(type); + expect(node.data).toEqual('Volo.Abp.Application.Dtos.AuditedEntityWithUserDto'); + expect(node.children.length).toBe(2); + expect(node.children[0].data).toEqual('System.string'); + expect((node.children[0]).parent).toBe(node); + + expect(node.children[1].data).toEqual('Volo.Abp.Identity.IdentityUserDto'); + expect(node.children[1].children.length).toBe(1); + expect(node.children[1].children[0].data).toEqual('System.Int'); + expect(node.children[1].children[0].parent).toBe(node.children[1]) + expect(node.children[1].children[0].index).toBe(0) + + }); + + it('should Volo.Abp.Application.Dtos.AuditedEntityWithUserDto,System.string>', function() { + const type = 'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto,System.string>'; + const node = parseGenerics(type); + expect(node.data).toEqual('Volo.Abp.Application.Dtos.AuditedEntityWithUserDto'); + expect(node.children.length).toBe(2); + expect(node.children[0].data).toEqual('Volo.Abp.Identity.IdentityUserDto'); + expect(node.children[0].children.length).toBe(1); + expect(node.children[0].children[0].data).toEqual('System.Int'); + expect(node.children[1].data).toEqual('System.string'); + + }); +}); + + + diff --git a/npm/ng-packs/packages/schematics/src/utils/model.ts b/npm/ng-packs/packages/schematics/src/utils/model.ts index 4ef8a4cb97..11ff88d15a 100644 --- a/npm/ng-packs/packages/schematics/src/utils/model.ts +++ b/npm/ng-packs/packages/schematics/src/utils/model.ts @@ -9,7 +9,7 @@ import { import { parseNamespace } from './namespace'; import { relativePathToModel } from './path'; import { camel } from './text'; -import { parseGenerics } from './tree'; +import { parseGenerics, TypeNode } from './tree'; import { createTypeParser, createTypeSimplifier, @@ -71,12 +71,16 @@ export function createImportRefsToModelReducer(params: ModelGeneratorParams) { model.interfaces.forEach(_interface => { const { baseType } = types[_interface.ref]; - if (baseType && parseNamespace(solution, baseType) !== model.namespace) - toBeImported.push({ - type: baseType.split('<')[0], - isEnum: false, - }); + if (baseType && parseNamespace(solution, baseType) !== model.namespace){ + const baseTypeWithGenericParams = parseBaseTypeWithGenericTypes(baseType); + baseTypeWithGenericParams.forEach(t => { + toBeImported.push({ + type: t, + isEnum: false, + }); + }) +} [..._interface.properties, ..._interface.generics].forEach(prop => { prop.refs.forEach(ref => { const propType = types[ref]; @@ -172,7 +176,20 @@ export function createRefToImportReducerCreator(params: ModelGeneratorParams) { } function isOptionalProperty(prop: PropertyDef) { - return ( - prop.typeSimple.endsWith('?') || (prop.typeSimple === 'string' && prop.isRequired === false) - ); + return (prop.typeSimple.endsWith('?') || (prop.typeSimple === 'string' && !prop.isRequired)); +} + +export function parseBaseTypeWithGenericTypes(type: string): string[] { + const parsedTypeNode = parseGenerics(type); + const nodeToText = (node: TypeNode,acc:string[] = []): string[] => { + + acc.push(node.data); + if(node.children && node.children.length > 0){ + node.children.forEach(child => { + nodeToText(child,acc); + }) + } + return acc; + } + return nodeToText(parsedTypeNode); } diff --git a/npm/ng-packs/packages/schematics/src/utils/tree.ts b/npm/ng-packs/packages/schematics/src/utils/tree.ts index 5fd8414f0c..489e0229fc 100644 --- a/npm/ng-packs/packages/schematics/src/utils/tree.ts +++ b/npm/ng-packs/packages/schematics/src/utils/tree.ts @@ -39,7 +39,7 @@ export class TypeNode { } } -export function parseGenerics(type: string, mapperFn?: TypeNodeMapperFn) { +export function parseGenericsOld(type: string, mapperFn?: TypeNodeMapperFn) { const [rootType, ...types] = type.split('<'); const root = new TypeNode(rootType, null, mapperFn); @@ -68,4 +68,33 @@ export function parseGenerics(type: string, mapperFn?: TypeNodeMapperFn) { return root; } +export function parseGenerics(type: string, mapperFn?: TypeNodeMapperFn, parent?: TypeNode | null): TypeNode { + const regex = /(?[\w.]+)<(?.*)>/; + + const match = type.match(regex); + if (!match) { + return new TypeNode(type, null, mapperFn); + } + + const mainType = match.groups?.MainType || ''; + const genericType = match.groups?.GenericType || ''; + const root = new TypeNode(mainType, parent ?? null, mapperFn); + if (genericType.includes(',')) { + const genericTypes = genericType.split(','); + genericTypes.forEach((genericType, index) => { + const child = parseGenerics(genericType, mapperFn, root); + child.index = index; + root.children.push(child); + child.parent = root; + }); + } else { + const child = parseGenerics(genericType, mapperFn, root); + child.index = root.children.length; + root.children.push(child); + child.parent = root; + } + return root; +} + + export type TypeNodeMapperFn = (node: TypeNode) => string; From a6105b38688561960b0d5c98ec487a33b2d3bcd6 Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Thu, 12 Oct 2023 10:36:42 +0300 Subject: [PATCH 06/70] Marked deprecated classed --- npm/ng-packs/packages/core/src/lib/models/dtos.ts | 3 ++- npm/ng-packs/packages/core/src/lib/utils/file-utils.ts | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/core/src/lib/models/dtos.ts b/npm/ng-packs/packages/core/src/lib/models/dtos.ts index ee1f03fab3..aa20a65833 100644 --- a/npm/ng-packs/packages/core/src/lib/models/dtos.ts +++ b/npm/ng-packs/packages/core/src/lib/models/dtos.ts @@ -136,6 +136,7 @@ export class AuditedEntityDto extends CreationAuditedEntit } } +/** @deprecated the class signature will change in v8.0 */ export class AuditedEntityWithUserDto< TUserDto, TPrimaryKey = string, @@ -157,7 +158,7 @@ export class FullAuditedEntityDto extends AuditedEntityDto super(initialValues); } } - +/** @deprecated the class signature will change in v8.0 */ export class FullAuditedEntityWithUserDto< TUserDto, TPrimaryKey = string, diff --git a/npm/ng-packs/packages/core/src/lib/utils/file-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/file-utils.ts index b5241ec096..71bbdd9600 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/file-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/file-utils.ts @@ -1,3 +1,4 @@ +/** @deprecated the method will change in v8.0 */ export function downloadBlob(blob: Blob, filename: string) { const blobUrl = URL.createObjectURL(blob); From b5fb03cc298a7b8b23228b7756514c76ad8db4b7 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 12 Oct 2023 15:48:28 +0800 Subject: [PATCH 07/70] Support to change dbms on module template. Resolve #17667 --- .../Commands/ProjectCreationCommandBase.cs | 24 +++- ...oduleDatabaseManagementSystemChangeStep.cs | 113 ++++++++++++++++++ .../TemplateProjectBuildPipelineBuilder.cs | 6 + .../Templates/Module/ModuleTemplateBase.cs | 12 ++ 4 files changed, 152 insertions(+), 3 deletions(-) create mode 100644 framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/AppModuleDatabaseManagementSystemChangeStep.cs diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs index 4eff9df5e6..2ee023445c 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs +++ b/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) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/AppModuleDatabaseManagementSystemChangeStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/AppModuleDatabaseManagementSystemChangeStep.cs new file mode 100644 index 0000000000..362fc14713 --- /dev/null +++ b/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); + } + } +} diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/TemplateProjectBuildPipelineBuilder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/TemplateProjectBuildPipelineBuilder.cs index d991c7101e..a453173095 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/TemplateProjectBuildPipelineBuilder.cs +++ b/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) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs index 428c1061a1..60cf5e7442 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs +++ b/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 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 steps) { if (context.BuildArgs.ConnectionString != null) From e99a7d47c92346edcb8cf1971dd085d1fc039379 Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Thu, 12 Oct 2023 15:56:50 +0300 Subject: [PATCH 08/70] add FileUtilsService to provide utility methods for file operations in Angular --- docs/en/UI/Angular/File-Utils-Service.md | 37 +++++++++++++++++++ docs/en/docs-nav.json | 4 ++ .../src/lib/services/file-utils.service.ts | 29 +++++++++++++++ .../packages/core/src/lib/services/index.ts | 1 + 4 files changed, 71 insertions(+) create mode 100644 docs/en/UI/Angular/File-Utils-Service.md create mode 100644 npm/ng-packs/packages/core/src/lib/services/file-utils.service.ts diff --git a/docs/en/UI/Angular/File-Utils-Service.md b/docs/en/UI/Angular/File-Utils-Service.md new file mode 100644 index 0000000000..ea6ed4a7cf --- /dev/null +++ b/docs/en/UI/Angular/File-Utils-Service.md @@ -0,0 +1,37 @@ +# File Utils Service +FileUtilsService is an Angular service designed to provide utility methods related to file 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 FileUtilsService 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 { FileUtilsService } from '@abp/ng.core'; + +constructor(private fileUtils: FileUtilsService) { } +// or +// private fileUtils = inject(FileUtilsService) +``` + +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.fileUtils.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. \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index afdf89657c..cfe52ffd78 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -1153,6 +1153,10 @@ { "text": "Content Security Strategy", "path": "UI/Angular/Content-Security-Strategy.md" + }, + { + "text":"File Utils Service", + "path":"UI/Angular/File-Utils-Service.md" } ] }, diff --git a/npm/ng-packs/packages/core/src/lib/services/file-utils.service.ts b/npm/ng-packs/packages/core/src/lib/services/file-utils.service.ts new file mode 100644 index 0000000000..32a5bea88b --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/services/file-utils.service.ts @@ -0,0 +1,29 @@ +import { Injectable, inject } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; + +@Injectable({ + providedIn: 'root', +}) +export class FileUtilsService { + protected readonly document = inject(DOCUMENT); + get window() { + return this.document.defaultView; + } + downloadBlob(blob: Blob, fileName: string) { + const blobUrl = this.window.URL.createObjectURL(blob); + const a = this.document.createElement('a'); + a.style.display = 'none'; + a.href = blobUrl; + a.download = fileName; + this.document.body.appendChild(a); + a.dispatchEvent( + new MouseEvent('click', { + bubbles: true, + cancelable: true, + view: this.window, + }), + ); + this.window.URL.revokeObjectURL(blobUrl); + this.document.body.removeChild(a); + } +} diff --git a/npm/ng-packs/packages/core/src/lib/services/index.ts b/npm/ng-packs/packages/core/src/lib/services/index.ts index 9b193ab67f..43b7865d95 100644 --- a/npm/ng-packs/packages/core/src/lib/services/index.ts +++ b/npm/ng-packs/packages/core/src/lib/services/index.ts @@ -21,3 +21,4 @@ export * from './track-by.service'; export * from './local-storage.service'; export * from './window.service'; export * from './internet-connection-service' +export * from './file-utils.service' From 213fd6234e9bf8efc7bf50e4b330c796cb750c89 Mon Sep 17 00:00:00 2001 From: Masum ULU <49063256+masumulu28@users.noreply.github.com> Date: Thu, 12 Oct 2023 16:08:04 +0300 Subject: [PATCH 09/70] Improve document for FileUtilsService --- docs/en/UI/Angular/File-Utils-Service.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/en/UI/Angular/File-Utils-Service.md b/docs/en/UI/Angular/File-Utils-Service.md index ea6ed4a7cf..27c8a57e1f 100644 --- a/docs/en/UI/Angular/File-Utils-Service.md +++ b/docs/en/UI/Angular/File-Utils-Service.md @@ -1,11 +1,11 @@ # File Utils Service FileUtilsService is an Angular service designed to provide utility methods related to file operations. The service has a `downloadBlob` function, which is used for downloading blobs as files within the context of a web application. -## Usage +### Usage To make use of the FileUtilsService in your Angular application, follow the steps below: -Injection: +### Injection Firstly, ensure that the service is injected into the component or any other Angular entity where you wish to use it. ```js @@ -16,7 +16,7 @@ constructor(private fileUtils: FileUtilsService) { } // private fileUtils = inject(FileUtilsService) ``` -Downloading a Blob: +### 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: @@ -27,11 +27,11 @@ someMethod() { } ``` -Permissions & Considerations: +### 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. \ No newline at end of file +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. From 6a5f08a97b1cac62ee30ef3a82e32e8e1a2e58f3 Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Thu, 12 Oct 2023 16:19:11 +0300 Subject: [PATCH 10/70] FileUtil Methods moved to Abp Window Service --- ...Utils-Service.md => Abp-Window-Service.md} | 15 ++++++---- docs/en/docs-nav.json | 4 +-- .../src/lib/services/file-utils.service.ts | 29 ------------------- .../packages/core/src/lib/services/index.ts | 3 +- .../core/src/lib/services/window.service.ts | 20 ++++++++++++- 5 files changed, 31 insertions(+), 40 deletions(-) rename docs/en/UI/Angular/{File-Utils-Service.md => Abp-Window-Service.md} (71%) delete mode 100644 npm/ng-packs/packages/core/src/lib/services/file-utils.service.ts diff --git a/docs/en/UI/Angular/File-Utils-Service.md b/docs/en/UI/Angular/Abp-Window-Service.md similarity index 71% rename from docs/en/UI/Angular/File-Utils-Service.md rename to docs/en/UI/Angular/Abp-Window-Service.md index ea6ed4a7cf..a27a7704c6 100644 --- a/docs/en/UI/Angular/File-Utils-Service.md +++ b/docs/en/UI/Angular/Abp-Window-Service.md @@ -1,5 +1,8 @@ -# File Utils Service -FileUtilsService is an Angular service designed to provide utility methods related to file operations. The service has a `downloadBlob` function, which is used for downloading blobs as files within the context of a web application. +# 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 @@ -9,11 +12,11 @@ Injection: Firstly, ensure that the service is injected into the component or any other Angular entity where you wish to use it. ```js -import { FileUtilsService } from '@abp/ng.core'; +import { AbpWindowService } from '@abp/ng.core'; -constructor(private fileUtils: FileUtilsService) { } +constructor(private abpWindowService: AbpWindowService) { } // or -// private fileUtils = inject(FileUtilsService) +// private abpWindowService = inject(AbpWindowService) ``` Downloading a Blob: @@ -23,7 +26,7 @@ Once you have the service injected, you can use the downloadBlob method to initi ```js someMethod() { const myBlob = new Blob(["Hello, World!"], { type: "text/plain" }); - this.fileUtils.downloadBlob(myBlob, "hello.txt"); + this.abpWindowService.downloadBlob(myBlob, "hello.txt"); } ``` diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index cfe52ffd78..582dcf98cc 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -1155,8 +1155,8 @@ "path": "UI/Angular/Content-Security-Strategy.md" }, { - "text":"File Utils Service", - "path":"UI/Angular/File-Utils-Service.md" + "text":"Abp Window Service", + "path":"UI/Angular/Abp-Window-Service.md" } ] }, diff --git a/npm/ng-packs/packages/core/src/lib/services/file-utils.service.ts b/npm/ng-packs/packages/core/src/lib/services/file-utils.service.ts deleted file mode 100644 index 32a5bea88b..0000000000 --- a/npm/ng-packs/packages/core/src/lib/services/file-utils.service.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Injectable, inject } from '@angular/core'; -import { DOCUMENT } from '@angular/common'; - -@Injectable({ - providedIn: 'root', -}) -export class FileUtilsService { - protected readonly document = inject(DOCUMENT); - get window() { - return this.document.defaultView; - } - downloadBlob(blob: Blob, fileName: string) { - const blobUrl = this.window.URL.createObjectURL(blob); - const a = this.document.createElement('a'); - a.style.display = 'none'; - a.href = blobUrl; - a.download = fileName; - this.document.body.appendChild(a); - a.dispatchEvent( - new MouseEvent('click', { - bubbles: true, - cancelable: true, - view: this.window, - }), - ); - this.window.URL.revokeObjectURL(blobUrl); - this.document.body.removeChild(a); - } -} diff --git a/npm/ng-packs/packages/core/src/lib/services/index.ts b/npm/ng-packs/packages/core/src/lib/services/index.ts index 43b7865d95..5d3e9d6d1e 100644 --- a/npm/ng-packs/packages/core/src/lib/services/index.ts +++ b/npm/ng-packs/packages/core/src/lib/services/index.ts @@ -20,5 +20,4 @@ export * from './subscription.service'; export * from './track-by.service'; export * from './local-storage.service'; export * from './window.service'; -export * from './internet-connection-service' -export * from './file-utils.service' +export * from './internet-connection-service' \ No newline at end of file diff --git a/npm/ng-packs/packages/core/src/lib/services/window.service.ts b/npm/ng-packs/packages/core/src/lib/services/window.service.ts index f4780ec10d..522bb19c94 100644 --- a/npm/ng-packs/packages/core/src/lib/services/window.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/window.service.ts @@ -3,7 +3,8 @@ import { DOCUMENT } from '@angular/common'; @Injectable({ providedIn: 'root' }) export class AbpWindowService { - protected readonly window = inject(DOCUMENT).defaultView; + protected readonly document = inject(DOCUMENT); + protected readonly window = this.document.defaultView; protected readonly navigator = this.window.navigator; copyToClipboard(text: string): Promise { @@ -17,4 +18,21 @@ export class AbpWindowService { reloadPage(): void { this.window.location.reload(); } + downloadBlob(blob: Blob, fileName: string) { + const blobUrl = this.window.URL.createObjectURL(blob); + const a = this.document.createElement('a'); + a.style.display = 'none'; + a.href = blobUrl; + a.download = fileName; + this.document.body.appendChild(a); + a.dispatchEvent( + new MouseEvent('click', { + bubbles: true, + cancelable: true, + view: this.window, + }), + ); + this.window.URL.revokeObjectURL(blobUrl); + this.document.body.removeChild(a); + } } From 69b92e5f5ed9b00c7ac7438db07b21bbaca1eedd Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Thu, 12 Oct 2023 16:22:31 +0300 Subject: [PATCH 11/70] fix typo --- docs/en/UI/Angular/Abp-Window-Service.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/en/UI/Angular/Abp-Window-Service.md b/docs/en/UI/Angular/Abp-Window-Service.md index ab0c059102..bc060f79b5 100644 --- a/docs/en/UI/Angular/Abp-Window-Service.md +++ b/docs/en/UI/Angular/Abp-Window-Service.md @@ -6,7 +6,7 @@ AbpWindowService is an Angular service designed to provide utility methods relat ### Usage -To make use of the FileUtilsService in your Angular application, follow the steps below: +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. @@ -38,3 +38,4 @@ Ensure that you have appropriate permissions and user interactions before trigge ### 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. + From 6bd43caee572af6acec744e768982430ea788b0d Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 13 Oct 2023 16:37:50 +0800 Subject: [PATCH 12/70] Enable `Central Package Management`. --- Directory.Build.props | 46 +---- Directory.Packages.props | 167 ++++++++++++++++++ common.props | 2 +- configureawait.props | 4 +- ...AspNetCore.Authentication.JwtBearer.csproj | 2 +- ...lo.Abp.AspNetCore.Components.Server.csproj | 4 +- .../Volo.Abp.AspNetCore.Components.Web.csproj | 4 +- ...p.AspNetCore.Components.WebAssembly.csproj | 8 +- .../Volo.Abp.AspNetCore.Components.csproj | 2 +- .../Volo.Abp.AspNetCore.Mvc.Dapr.csproj | 2 +- ...o.Abp.AspNetCore.Mvc.NewtonsoftJson.csproj | 2 +- ...AspNetCore.Mvc.UI.Theme.Shared.Demo.csproj | 2 +- .../Volo.Abp.AspNetCore.Mvc.UI.csproj | 2 +- .../Volo.Abp.AspNetCore.Mvc.csproj | 4 +- .../Volo.Abp.AspNetCore.Serilog.csproj | 2 +- .../Volo.Abp.AspNetCore.TestBase.csproj | 4 +- .../Volo.Abp.AspNetCore.csproj | 4 +- ...Volo.Abp.Authorization.Abstractions.csproj | 2 +- .../Volo.Abp.AutoMapper.csproj | 2 +- .../Volo.Abp.Autofac/Volo.Abp.Autofac.csproj | 10 +- .../Volo.Abp.AzureServiceBus.csproj | 2 +- .../Volo.Abp.BlazoriseUI.csproj | 8 +- .../Volo.Abp.BlobStoring.Aliyun.csproj | 4 +- .../Volo.Abp.BlobStoring.Aws.csproj | 4 +- .../Volo.Abp.BlobStoring.Azure.csproj | 2 +- .../Volo.Abp.BlobStoring.FileSystem.csproj | 2 +- .../Volo.Abp.BlobStoring.Minio.csproj | 2 +- ...Volo.Abp.Caching.StackExchangeRedis.csproj | 2 +- .../Volo.Abp.Caching/Volo.Abp.Caching.csproj | 2 +- .../Volo.Abp.Castle.Core.csproj | 4 +- .../Volo.Abp.Cli.Core.csproj | 24 +-- .../src/Volo.Abp.Cli/Volo.Abp.Cli.csproj | 13 +- .../src/Volo.Abp.Core/Volo.Abp.Core.csproj | 38 ++-- .../Volo.Abp.Dapper/Volo.Abp.Dapper.csproj | 2 +- .../src/Volo.Abp.Dapr/Volo.Abp.Dapr.csproj | 2 +- ...Abp.DistributedLocking.Abstractions.csproj | 4 +- .../Volo.Abp.DistributedLocking.csproj | 2 +- .../Volo.Abp.EntityFrameworkCore.MySQL.csproj | 2 +- ...p.EntityFrameworkCore.Oracle.Devart.csproj | 2 +- ...Volo.Abp.EntityFrameworkCore.Oracle.csproj | 4 +- ....Abp.EntityFrameworkCore.PostgreSql.csproj | 2 +- ...o.Abp.EntityFrameworkCore.SqlServer.csproj | 2 +- ...Volo.Abp.EntityFrameworkCore.Sqlite.csproj | 2 +- .../Volo.Abp.EntityFrameworkCore.csproj | 4 +- .../Volo.Abp.EventBus.Rebus.csproj | 8 +- .../Volo.Abp.ExceptionHandling.csproj | 2 +- .../Volo.Abp.FluentValidation.csproj | 2 +- .../Volo.Abp.HangFire.csproj | 2 +- ...tp.Client.IdentityModel.WebAssembly.csproj | 2 +- .../Volo.Abp.Http.Client.csproj | 2 +- .../Volo.Abp.IdentityModel.csproj | 4 +- .../Volo.Abp.Imaging.ImageSharp.csproj | 2 +- .../Volo.Abp.Imaging.MagickNet.csproj | 2 +- .../Volo.Abp.Json.Newtonsoft.csproj | 2 +- .../Volo.Abp.Json.SystemTextJson.csproj | 2 +- .../src/Volo.Abp.Kafka/Volo.Abp.Kafka.csproj | 2 +- .../src/Volo.Abp.Ldap/Volo.Abp.Ldap.csproj | 2 +- .../Volo.Abp.MailKit/Volo.Abp.MailKit.csproj | 2 +- .../Volo.Abp.Minify/Volo.Abp.Minify.csproj | 2 +- .../Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj | 2 +- .../Volo.Abp.Quartz/Volo.Abp.Quartz.csproj | 6 +- .../Volo.Abp.RabbitMQ.csproj | 2 +- .../Volo.Abp.Sms.Aliyun.csproj | 2 +- .../Volo.Abp.Swashbuckle.csproj | 2 +- .../Volo.Abp.TextTemplating.Razor.csproj | 6 +- .../Volo.Abp.TextTemplating.Scriban.csproj | 2 +- .../Volo.Abp.Timing/Volo.Abp.Timing.csproj | 2 +- .../Volo.Abp.VirtualFileSystem.csproj | 6 +- framework/test/AbpTestBase/AbpTestBase.csproj | 12 +- .../SimpleConsoleDemo.csproj | 2 +- ...pNetCore.Authentication.OAuth.Tests.csproj | 2 +- ...o.Abp.AspNetCore.MultiTenancy.Tests.csproj | 2 +- .../Volo.Abp.AspNetCore.Mvc.Tests.csproj | 4 +- .../Volo.Abp.AspNetCore.Mvc.UI.Tests.csproj | 2 +- ...Abp.AspNetCore.Mvc.Versioning.Tests.csproj | 2 +- .../Volo.Abp.AspNetCore.Serilog.Tests.csproj | 4 +- .../Volo.Abp.AspNetCore.SignalR.Tests.csproj | 2 +- .../Volo.Abp.AspNetCore.Tests.csproj | 2 +- .../Volo.Abp.Auditing.Tests.csproj | 2 +- .../Volo.Abp.Authorization.Tests.csproj | 2 +- .../Volo.Abp.AutoMapper.Tests.csproj | 2 +- .../Volo.Abp.Autofac.Tests.csproj | 2 +- .../Volo.Abp.BackgroundJobs.Tests.csproj | 2 +- .../Volo.Abp.BlobStoring.Aliyun.Tests.csproj | 4 +- .../Volo.Abp.BlobStoring.Aws.Tests.csproj | 2 +- .../Volo.Abp.BlobStoring.Azure.Tests.csproj | 2 +- ...lo.Abp.BlobStoring.FileSystem.Tests.csproj | 2 +- .../Volo.Abp.BlobStoring.Minio.Tests.csproj | 2 +- .../Volo.Abp.BlobStoring.Tests.csproj | 2 +- ...bp.Caching.StackExchangeRedis.Tests.csproj | 2 +- .../Volo.Abp.Caching.Tests.csproj | 2 +- .../Volo.Abp.Castle.Core.Tests.csproj | 2 +- .../Volo.Abp.Cli.Core.Tests.csproj | 2 +- .../Volo.Abp.Core.Tests.csproj | 2 +- .../Volo.Abp.Dapper.Tests.csproj | 2 +- .../Volo.Abp.Data.Tests.csproj | 2 +- .../Volo.Abp.Ddd.Tests.csproj | 2 +- ...stributedLocking.Abstractions.Tests.csproj | 2 +- .../Volo.Abp.Emailing.Tests.csproj | 2 +- .../Volo.Abp.EntityFrameworkCore.Tests.csproj | 2 +- .../Volo.Abp.EventBus.Tests.csproj | 2 +- .../Volo.Abp.Features.Tests.csproj | 2 +- .../Volo.Abp.FluentValidation.Tests.csproj | 2 +- .../Volo.Abp.GlobalFeatures.Tests.csproj | 2 +- ...Http.Client.IdentityModel.Web.Tests.csproj | 2 +- .../Volo.Abp.Http.Client.Tests.csproj | 2 +- .../Volo.Abp.Http.Tests.csproj | 2 +- .../Volo.Abp.IdentityModel.Tests.csproj | 2 +- ...Volo.Abp.Imaging.Abstractions.Tests.csproj | 2 +- .../Volo.Abp.Imaging.AspNetCore.Tests.csproj | 2 +- .../Volo.Abp.Imaging.ImageSharp.Tests.csproj | 2 +- .../Volo.Abp.Imaging.MagickNet.Tests.csproj | 2 +- .../Volo.Abp.Json.Tests.csproj | 2 +- .../Volo.Abp.Ldap.Tests.csproj | 2 +- .../Volo.Abp.Localization.Tests.csproj | 2 +- .../Volo.Abp.MailKit.Tests.csproj | 2 +- .../Volo.Abp.MemoryDb.Tests.csproj | 2 +- .../Volo.Abp.Minify.Tests.csproj | 2 +- .../Volo.Abp.MongoDB.Tests.csproj | 10 +- .../Volo.Abp.MultiLingualObjects.Tests.csproj | 2 +- .../Volo.Abp.MultiTenancy.Tests.csproj | 2 +- .../Volo.Abp.ObjectExtending.Tests.csproj | 2 +- .../Volo.Abp.ObjectMapping.Tests.csproj | 2 +- .../Volo.Abp.Security.Tests.csproj | 2 +- .../Volo.Abp.Serialization.Tests.csproj | 2 +- .../Volo.Abp.Settings.Tests.csproj | 2 +- .../Volo.Abp.Sms.Aliyun.Tests.csproj | 4 +- .../Volo.Abp.Specifications.Tests.csproj | 2 +- .../Volo.Abp.TestApp.Tests.csproj | 2 +- .../Volo.Abp.TestApp/Volo.Abp.TestApp.csproj | 2 +- ...Volo.Abp.TextTemplating.Razor.Tests.csproj | 2 +- ...lo.Abp.TextTemplating.Scriban.Tests.csproj | 2 +- .../Volo.Abp.TextTemplating.Tests.csproj | 2 +- .../Volo.Abp.Threading.Tests.csproj | 2 +- .../Volo.Abp.UI.Navigation.Tests.csproj | 2 +- .../Volo.Abp.Uow.Tests.csproj | 2 +- .../Volo.Abp.Validation.Tests.csproj | 2 +- .../Volo.Abp.VirtualFileSystem.Tests.csproj | 4 +- ...o.Abp.Account.Application.Contracts.csproj | 2 +- .../Volo.Abp.Account.Application.csproj | 4 +- ...Volo.Abp.Account.Web.IdentityServer.csproj | 4 +- .../Volo.Abp.Account.Web.OpenIddict.csproj | 4 +- .../Volo.Abp.Account.Web.csproj | 2 +- .../Volo.Abp.Account.Application.Tests.csproj | 14 +- ...Volo.Abp.AuditLogging.Domain.Shared.csproj | 2 +- ...itLogging.EntityFrameworkCore.Tests.csproj | 4 +- ...Volo.Abp.AuditLogging.MongoDB.Tests.csproj | 10 +- .../Volo.Abp.AuditLogging.TestBase.csproj | 12 +- .../Volo.Abp.AuditLogging.Tests.csproj | 2 +- ...Abp.BackgroundJobs.DemoApp.HangFire.csproj | 2 +- ...o.Abp.BackgroundJobs.DemoApp.Quartz.csproj | 2 +- ...o.Abp.BackgroundJobs.DemoApp.Shared.csproj | 2 +- .../Volo.Abp.BackgroundJobs.DemoApp.csproj | 2 +- ...olo.Abp.BackgroundJobs.Domain.Tests.csproj | 2 +- ...roundJobs.EntityFrameworkCore.Tests.csproj | 4 +- ...lo.Abp.BackgroundJobs.MongoDB.Tests.csproj | 10 +- .../Volo.Abp.BackgroundJobs.TestBase.csproj | 12 +- ...etCore.Components.Server.BasicTheme.csproj | 2 +- ...NetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj | 12 +- ...bp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj | 6 +- ....AspNetCore.Mvc.UI.Theme.Basic.Demo.csproj | 6 +- ...Database.Host.ConsoleApp.ConsoleApp.csproj | 14 +- ...p.BlobStoring.Database.Domain.Tests.csproj | 2 +- ....Database.EntityFrameworkCore.Tests.csproj | 8 +- ....BlobStoring.Database.MongoDB.Tests.csproj | 10 +- ...o.Abp.BlobStoring.Database.TestBase.csproj | 12 +- ...BloggingTestApp.EntityFrameworkCore.csproj | 4 +- .../Volo.BloggingTestApp.csproj | 6 +- .../Volo.Blogging.Admin.Application.csproj | 2 +- .../Volo.Blogging.Admin.Web.csproj | 4 +- .../Volo.Blogging.Application.csproj | 2 +- .../Volo.Blogging.Domain.Shared.csproj | 2 +- .../Volo.Blogging.Web.csproj | 4 +- .../Volo.Blogging.Application.Tests.csproj | 2 +- .../Volo.Blogging.Domain.Tests.csproj | 2 +- ....Blogging.EntityFrameworkCore.Tests.csproj | 2 +- .../Volo.Blogging.MongoDB.Tests.csproj | 10 +- .../Volo.Blogging.TestBase.csproj | 12 +- .../Volo.ClientSimulation.Demo.csproj | 4 +- .../Volo.CmsKit.HttpApi.Host.csproj | 14 +- .../Volo.CmsKit.IdentityServer.csproj | 10 +- .../Volo.CmsKit.Web.Host.csproj | 10 +- .../Volo.CmsKit.Web.Unified.csproj | 6 +- .../Volo.CmsKit.Admin.Web.csproj | 2 +- .../Volo.CmsKit.Common.Web.csproj | 6 +- .../Volo.CmsKit.Domain.Shared.csproj | 2 +- .../Volo.CmsKit.Domain.csproj | 4 +- .../Volo.CmsKit.Public.Web.csproj | 10 +- .../Volo.CmsKit.Web/Volo.CmsKit.Web.csproj | 2 +- .../Volo.CmsKit.Application.Tests.csproj | 2 +- .../Volo.CmsKit.Domain.Tests.csproj | 2 +- ...lo.CmsKit.EntityFrameworkCore.Tests.csproj | 4 +- ...msKit.HttpApi.Client.ConsoleTestApp.csproj | 2 +- .../Volo.CmsKit.MongoDB.Tests.csproj | 10 +- .../Volo.CmsKit.TestBase.csproj | 12 +- .../VoloDocs.EntityFrameworkCore.csproj | 4 +- .../docs/app/VoloDocs.Web/VoloDocs.Web.csproj | 6 +- ...lo.Docs.Admin.Application.Contracts.csproj | 2 +- .../Volo.Docs.Admin.Web.csproj | 4 +- .../Volo.Docs.Domain.Shared.csproj | 2 +- .../Volo.Docs.Domain/Volo.Docs.Domain.csproj | 8 +- .../src/Volo.Docs.Web/Volo.Docs.Web.csproj | 6 +- .../Volo.Docs.Admin.Application.Tests.csproj | 2 +- .../Volo.Docs.Application.Tests.csproj | 2 +- .../Volo.Docs.Domain.Tests.csproj | 2 +- ...Volo.Docs.EntityFrameworkCore.Tests.csproj | 4 +- .../Volo.Docs.MongoDB.Tests.csproj | 10 +- .../Volo.Docs.TestBase.csproj | 12 +- ...Abp.FeatureManagement.Domain.Shared.csproj | 2 +- .../Volo.Abp.FeatureManagement.Domain.csproj | 2 +- .../Volo.Abp.FeatureManagement.Web.csproj | 2 +- ...FeatureManagement.Application.Tests.csproj | 2 +- ....Abp.FeatureManagement.Domain.Tests.csproj | 2 +- ...anagement.EntityFrameworkCore.Tests.csproj | 4 +- ...Abp.FeatureManagement.MongoDB.Tests.csproj | 10 +- ...Volo.Abp.FeatureManagement.TestBase.csproj | 12 +- .../Volo.Abp.Identity.Domain.Shared.csproj | 2 +- .../Volo.Abp.Identity.Domain.csproj | 2 +- .../Volo.Abp.Identity.Web.csproj | 2 +- ...Volo.Abp.Identity.Application.Tests.csproj | 2 +- .../Volo.Abp.Identity.AspNetCore.Tests.csproj | 2 +- .../Volo.Abp.Identity.Domain.Tests.csproj | 4 +- ....Identity.EntityFrameworkCore.Tests.csproj | 4 +- .../Volo.Abp.Identity.MongoDB.Tests.csproj | 10 +- .../Volo.Abp.Identity.TestBase.csproj | 12 +- .../Volo.Abp.IdentityServer.Domain.csproj | 4 +- ...olo.Abp.IdentityServer.Domain.Tests.csproj | 2 +- ...ityServer.EntityFrameworkCore.Tests.csproj | 12 +- ...lo.Abp.IdentityServer.MongoDB.Tests.csproj | 10 +- .../Volo.Abp.IdentityServer.TestBase.csproj | 12 +- .../OpenIddict.Demo.API.csproj | 4 +- .../OpenIddict.Demo.Client.BlazorWASM.csproj | 8 +- .../OpenIddict.Demo.Client.Console.csproj | 2 +- .../OpenIddict.Demo.Client.Mvc.csproj | 4 +- .../OpenIddict.Demo.Server.csproj | 4 +- .../Volo.Abp.OpenIddict.AspNetCore.csproj | 6 +- .../Volo.Abp.OpenIddict.Domain.Shared.csproj | 4 +- .../Volo.Abp.OpenIddict.Domain.csproj | 2 +- .../Volo.Abp.OpenIddict.Domain.Tests.csproj | 2 +- ...penIddict.EntityFrameworkCore.Tests.csproj | 2 +- .../Volo.Abp.OpenIddict.MongoDB.Tests.csproj | 10 +- .../Volo.Abp.OpenIddict.TestBase.csproj | 14 +- ....PermissionManagement.Domain.Shared.csproj | 2 +- ...olo.Abp.PermissionManagement.Domain.csproj | 2 +- .../Volo.Abp.PermissionManagement.Web.csproj | 2 +- ...missionManagement.Application.Tests.csproj | 2 +- ...p.PermissionManagement.Domain.Tests.csproj | 4 +- ...anagement.EntityFrameworkCore.Tests.csproj | 4 +- ....PermissionManagement.MongoDB.Tests.csproj | 10 +- ...o.Abp.PermissionManagement.TestBase.csproj | 12 +- .../Volo.Abp.SettingManagement.DemoApp.csproj | 8 +- ...Abp.SettingManagement.Domain.Shared.csproj | 2 +- .../Volo.Abp.SettingManagement.Domain.csproj | 2 +- .../Volo.Abp.SettingManagement.Web.csproj | 2 +- ...anagement.EntityFrameworkCore.Tests.csproj | 2 +- ...Abp.SettingManagement.MongoDB.Tests.csproj | 10 +- ...Volo.Abp.SettingManagement.TestBase.csproj | 12 +- .../Volo.Abp.SettingManagement.Tests.csproj | 2 +- ....Abp.TenantManagement.Domain.Shared.csproj | 2 +- .../Volo.Abp.TenantManagement.Web.csproj | 2 +- ....TenantManagement.Application.Tests.csproj | 2 +- ...o.Abp.TenantManagement.Domain.Tests.csproj | 2 +- ...anagement.EntityFrameworkCore.Tests.csproj | 4 +- ....Abp.TenantManagement.MongoDB.Tests.csproj | 10 +- .../Volo.Abp.TenantManagement.TestBase.csproj | 12 +- ...olo.Abp.VirtualFileExplorer.DemoApp.csproj | 6 +- .../Volo.Abp.VirtualFileExplorer.Web.csproj | 2 +- templates/Directory.Packages.props | 5 + .../AbpPerfTest.WithAbp.csproj | 2 +- .../AbpPerfTest.WithoutAbp.csproj | 4 +- .../DistDemoApp.EfCoreRabbitMq.csproj | 2 +- .../DistDemoApp.Shared.csproj | 12 +- .../src/LocalizationKeySynchronizer.csproj | 4 +- 273 files changed, 743 insertions(+), 616 deletions(-) create mode 100644 Directory.Packages.props create mode 100644 templates/Directory.Packages.props diff --git a/Directory.Build.props b/Directory.Build.props index 654623ad5e..f601750180 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,54 +1,10 @@ - - - 8.0.0-rc.2.* - - - 8.0.0-rc.2.* - - - 8.0.0-rc.2.* - - - 17.2.2 - - - 5.1.0 - - - 4.2.1 - - - 2.5.1 - - - 2.5.1 - - - 2.5.1 - - - 3.1.3 - - - 4.5.0 - - - 1.21.0 - - - 8.0.0 - true - - - 4.8.0 - - + all runtime; build; native; contentfiles; analyzers diff --git a/Directory.Packages.props b/Directory.Packages.props new file mode 100644 index 0000000000..ae21b20429 --- /dev/null +++ b/Directory.Packages.props @@ -0,0 +1,167 @@ + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/common.props b/common.props index e956b17835..b39a45b734 100644 --- a/common.props +++ b/common.props @@ -18,7 +18,7 @@ - + all runtime; build; native; contentfiles; analyzers diff --git a/configureawait.props b/configureawait.props index 3895f31ca3..4356600b62 100644 --- a/configureawait.props +++ b/configureawait.props @@ -1,7 +1,7 @@ - - + + All runtime; build; native; contentfiles; analyzers diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Volo.Abp.AspNetCore.Authentication.JwtBearer.csproj b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Volo.Abp.AspNetCore.Authentication.JwtBearer.csproj index a22fed4cdd..a0f4b31158 100644 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Volo.Abp.AspNetCore.Authentication.JwtBearer.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Volo.Abp.AspNetCore.Authentication.JwtBearer.csproj @@ -21,7 +21,7 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo.Abp.AspNetCore.Components.Server.csproj b/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo.Abp.AspNetCore.Components.Server.csproj index df1c275b3a..338a538402 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo.Abp.AspNetCore.Components.Server.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo.Abp.AspNetCore.Components.Server.csproj @@ -19,8 +19,8 @@ - - + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo.Abp.AspNetCore.Components.Web.csproj b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo.Abp.AspNetCore.Components.Web.csproj index c0f9b21f87..f43a89e7cc 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo.Abp.AspNetCore.Components.Web.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo.Abp.AspNetCore.Components.Web.csproj @@ -16,8 +16,8 @@ - - + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo.Abp.AspNetCore.Components.WebAssembly.csproj b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo.Abp.AspNetCore.Components.WebAssembly.csproj index 757fcdbde5..8d720a19ee 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo.Abp.AspNetCore.Components.WebAssembly.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo.Abp.AspNetCore.Components.WebAssembly.csproj @@ -23,10 +23,10 @@ - - - - + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components/Volo.Abp.AspNetCore.Components.csproj b/framework/src/Volo.Abp.AspNetCore.Components/Volo.Abp.AspNetCore.Components.csproj index f76994a9fe..df1dc14e74 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components/Volo.Abp.AspNetCore.Components.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Components/Volo.Abp.AspNetCore.Components.csproj @@ -24,7 +24,7 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo.Abp.AspNetCore.Mvc.Dapr.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo.Abp.AspNetCore.Mvc.Dapr.csproj index ad439e4a43..a5d89d0ab4 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo.Abp.AspNetCore.Mvc.Dapr.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo.Abp.AspNetCore.Mvc.Dapr.csproj @@ -16,7 +16,7 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson.csproj index 90a66abecc..7f8fab67a5 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson.csproj @@ -25,7 +25,7 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.csproj index fba15cd166..fb63da0a26 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.csproj @@ -28,7 +28,7 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo.Abp.AspNetCore.Mvc.UI.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo.Abp.AspNetCore.Mvc.UI.csproj index 8869ce731b..8393744971 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo.Abp.AspNetCore.Mvc.UI.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo.Abp.AspNetCore.Mvc.UI.csproj @@ -17,7 +17,7 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj index cf1d31916f..14c7111a5c 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj @@ -30,8 +30,8 @@ - - + + diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo.Abp.AspNetCore.Serilog.csproj b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo.Abp.AspNetCore.Serilog.csproj index 9676d923f2..609b8c06f3 100644 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo.Abp.AspNetCore.Serilog.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo.Abp.AspNetCore.Serilog.csproj @@ -25,7 +25,7 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.TestBase/Volo.Abp.AspNetCore.TestBase.csproj b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo.Abp.AspNetCore.TestBase.csproj index 24ea01e789..d919581455 100644 --- a/framework/src/Volo.Abp.AspNetCore.TestBase/Volo.Abp.AspNetCore.TestBase.csproj +++ b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo.Abp.AspNetCore.TestBase.csproj @@ -27,8 +27,8 @@ - - + + diff --git a/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj b/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj index 240c642c16..88b4506dc5 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj +++ b/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj @@ -28,8 +28,8 @@ - - + + diff --git a/framework/src/Volo.Abp.Authorization.Abstractions/Volo.Abp.Authorization.Abstractions.csproj b/framework/src/Volo.Abp.Authorization.Abstractions/Volo.Abp.Authorization.Abstractions.csproj index bbeb52ff49..14d337d15a 100644 --- a/framework/src/Volo.Abp.Authorization.Abstractions/Volo.Abp.Authorization.Abstractions.csproj +++ b/framework/src/Volo.Abp.Authorization.Abstractions/Volo.Abp.Authorization.Abstractions.csproj @@ -17,7 +17,7 @@ - + diff --git a/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj b/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj index aa3edc8ca4..fdf3fef362 100644 --- a/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj +++ b/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj @@ -23,7 +23,7 @@ - + diff --git a/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj b/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj index a54f0e4bce..60a7418bb5 100644 --- a/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj +++ b/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj @@ -17,11 +17,11 @@ - - - - - + + + + + diff --git a/framework/src/Volo.Abp.AzureServiceBus/Volo.Abp.AzureServiceBus.csproj b/framework/src/Volo.Abp.AzureServiceBus/Volo.Abp.AzureServiceBus.csproj index 2ae71f93b6..151b54c7d6 100644 --- a/framework/src/Volo.Abp.AzureServiceBus/Volo.Abp.AzureServiceBus.csproj +++ b/framework/src/Volo.Abp.AzureServiceBus/Volo.Abp.AzureServiceBus.csproj @@ -17,7 +17,7 @@ - + diff --git a/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj b/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj index a6173ab366..b391a5c7ef 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj +++ b/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj @@ -16,10 +16,10 @@ - - - - + + + + diff --git a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo.Abp.BlobStoring.Aliyun.csproj b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo.Abp.BlobStoring.Aliyun.csproj index 7c18c6d53a..63490ca237 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo.Abp.BlobStoring.Aliyun.csproj +++ b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo.Abp.BlobStoring.Aliyun.csproj @@ -17,8 +17,8 @@ - - + + diff --git a/framework/src/Volo.Abp.BlobStoring.Aws/Volo.Abp.BlobStoring.Aws.csproj b/framework/src/Volo.Abp.BlobStoring.Aws/Volo.Abp.BlobStoring.Aws.csproj index a3eddab8fc..fb260147e1 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aws/Volo.Abp.BlobStoring.Aws.csproj +++ b/framework/src/Volo.Abp.BlobStoring.Aws/Volo.Abp.BlobStoring.Aws.csproj @@ -19,8 +19,8 @@ - - + + diff --git a/framework/src/Volo.Abp.BlobStoring.Azure/Volo.Abp.BlobStoring.Azure.csproj b/framework/src/Volo.Abp.BlobStoring.Azure/Volo.Abp.BlobStoring.Azure.csproj index 43c631e355..56bc02e89f 100644 --- a/framework/src/Volo.Abp.BlobStoring.Azure/Volo.Abp.BlobStoring.Azure.csproj +++ b/framework/src/Volo.Abp.BlobStoring.Azure/Volo.Abp.BlobStoring.Azure.csproj @@ -18,7 +18,7 @@ - + diff --git a/framework/src/Volo.Abp.BlobStoring.FileSystem/Volo.Abp.BlobStoring.FileSystem.csproj b/framework/src/Volo.Abp.BlobStoring.FileSystem/Volo.Abp.BlobStoring.FileSystem.csproj index dd0051475b..0b73a6b802 100644 --- a/framework/src/Volo.Abp.BlobStoring.FileSystem/Volo.Abp.BlobStoring.FileSystem.csproj +++ b/framework/src/Volo.Abp.BlobStoring.FileSystem/Volo.Abp.BlobStoring.FileSystem.csproj @@ -18,7 +18,7 @@ - + diff --git a/framework/src/Volo.Abp.BlobStoring.Minio/Volo.Abp.BlobStoring.Minio.csproj b/framework/src/Volo.Abp.BlobStoring.Minio/Volo.Abp.BlobStoring.Minio.csproj index f16e920569..07d86e4a89 100644 --- a/framework/src/Volo.Abp.BlobStoring.Minio/Volo.Abp.BlobStoring.Minio.csproj +++ b/framework/src/Volo.Abp.BlobStoring.Minio/Volo.Abp.BlobStoring.Minio.csproj @@ -17,7 +17,7 @@ - + diff --git a/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo.Abp.Caching.StackExchangeRedis.csproj b/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo.Abp.Caching.StackExchangeRedis.csproj index d1af8705b5..2e7683cee9 100644 --- a/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo.Abp.Caching.StackExchangeRedis.csproj +++ b/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo.Abp.Caching.StackExchangeRedis.csproj @@ -21,7 +21,7 @@ - + diff --git a/framework/src/Volo.Abp.Caching/Volo.Abp.Caching.csproj b/framework/src/Volo.Abp.Caching/Volo.Abp.Caching.csproj index 22548719f6..d2eb13d6aa 100644 --- a/framework/src/Volo.Abp.Caching/Volo.Abp.Caching.csproj +++ b/framework/src/Volo.Abp.Caching/Volo.Abp.Caching.csproj @@ -16,7 +16,7 @@ - + diff --git a/framework/src/Volo.Abp.Castle.Core/Volo.Abp.Castle.Core.csproj b/framework/src/Volo.Abp.Castle.Core/Volo.Abp.Castle.Core.csproj index 93cca251cd..7724e0b00e 100644 --- a/framework/src/Volo.Abp.Castle.Core/Volo.Abp.Castle.Core.csproj +++ b/framework/src/Volo.Abp.Castle.Core/Volo.Abp.Castle.Core.csproj @@ -17,8 +17,8 @@ - - + + diff --git a/framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj b/framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj index bf3bda53cf..15f7406f76 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj +++ b/framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj @@ -13,17 +13,17 @@ - - - - - - - - - - - + + + + + + + + + + + @@ -31,6 +31,6 @@ - + diff --git a/framework/src/Volo.Abp.Cli/Volo.Abp.Cli.csproj b/framework/src/Volo.Abp.Cli/Volo.Abp.Cli.csproj index 0abee3203b..2bc7af750a 100644 --- a/framework/src/Volo.Abp.Cli/Volo.Abp.Cli.csproj +++ b/framework/src/Volo.Abp.Cli/Volo.Abp.Cli.csproj @@ -15,13 +15,12 @@ - - - - - - - + + + + + + diff --git a/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj b/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj index 8b76e62824..042cbd270c 100644 --- a/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj +++ b/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj @@ -16,29 +16,29 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + - + all runtime; build; native; contentfiles; analyzers diff --git a/framework/src/Volo.Abp.Dapper/Volo.Abp.Dapper.csproj b/framework/src/Volo.Abp.Dapper/Volo.Abp.Dapper.csproj index 209d2ebb6f..bb40ed79ce 100644 --- a/framework/src/Volo.Abp.Dapper/Volo.Abp.Dapper.csproj +++ b/framework/src/Volo.Abp.Dapper/Volo.Abp.Dapper.csproj @@ -21,7 +21,7 @@ - + diff --git a/framework/src/Volo.Abp.Dapr/Volo.Abp.Dapr.csproj b/framework/src/Volo.Abp.Dapr/Volo.Abp.Dapr.csproj index 7c8be790ab..92377ef51a 100644 --- a/framework/src/Volo.Abp.Dapr/Volo.Abp.Dapr.csproj +++ b/framework/src/Volo.Abp.Dapr/Volo.Abp.Dapr.csproj @@ -15,7 +15,7 @@ - + diff --git a/framework/src/Volo.Abp.DistributedLocking.Abstractions/Volo.Abp.DistributedLocking.Abstractions.csproj b/framework/src/Volo.Abp.DistributedLocking.Abstractions/Volo.Abp.DistributedLocking.Abstractions.csproj index c91c88fcb1..39ed10cf0f 100644 --- a/framework/src/Volo.Abp.DistributedLocking.Abstractions/Volo.Abp.DistributedLocking.Abstractions.csproj +++ b/framework/src/Volo.Abp.DistributedLocking.Abstractions/Volo.Abp.DistributedLocking.Abstractions.csproj @@ -18,8 +18,8 @@ - - + + diff --git a/framework/src/Volo.Abp.DistributedLocking/Volo.Abp.DistributedLocking.csproj b/framework/src/Volo.Abp.DistributedLocking/Volo.Abp.DistributedLocking.csproj index 5d5329a49b..545d6556f0 100644 --- a/framework/src/Volo.Abp.DistributedLocking/Volo.Abp.DistributedLocking.csproj +++ b/framework/src/Volo.Abp.DistributedLocking/Volo.Abp.DistributedLocking.csproj @@ -22,7 +22,7 @@ - + diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo.Abp.EntityFrameworkCore.MySQL.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo.Abp.EntityFrameworkCore.MySQL.csproj index 913b1516e6..b3d594ba6a 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo.Abp.EntityFrameworkCore.MySQL.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo.Abp.EntityFrameworkCore.MySQL.csproj @@ -21,7 +21,7 @@ - + diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj index ed34ce0983..bb46006ac9 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj @@ -21,7 +21,7 @@ - + diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo.Abp.EntityFrameworkCore.Oracle.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo.Abp.EntityFrameworkCore.Oracle.csproj index bac8c634d0..93753e8586 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo.Abp.EntityFrameworkCore.Oracle.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo.Abp.EntityFrameworkCore.Oracle.csproj @@ -21,8 +21,8 @@ - - + + diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo.Abp.EntityFrameworkCore.PostgreSql.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo.Abp.EntityFrameworkCore.PostgreSql.csproj index fea3385273..4ddc65c713 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo.Abp.EntityFrameworkCore.PostgreSql.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo.Abp.EntityFrameworkCore.PostgreSql.csproj @@ -21,7 +21,7 @@ - + diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo.Abp.EntityFrameworkCore.SqlServer.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo.Abp.EntityFrameworkCore.SqlServer.csproj index bf4ac72829..cdd1836b67 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo.Abp.EntityFrameworkCore.SqlServer.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo.Abp.EntityFrameworkCore.SqlServer.csproj @@ -21,7 +21,7 @@ - + diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo.Abp.EntityFrameworkCore.Sqlite.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo.Abp.EntityFrameworkCore.Sqlite.csproj index e1b48ae42d..ad933fc388 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo.Abp.EntityFrameworkCore.Sqlite.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo.Abp.EntityFrameworkCore.Sqlite.csproj @@ -17,7 +17,7 @@ - + diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj b/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj index db6d1647d7..e1d9e41fa2 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj @@ -22,8 +22,8 @@ - - + + diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo.Abp.EventBus.Rebus.csproj b/framework/src/Volo.Abp.EventBus.Rebus/Volo.Abp.EventBus.Rebus.csproj index 76544793b8..8ece532ebf 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo.Abp.EventBus.Rebus.csproj +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo.Abp.EventBus.Rebus.csproj @@ -21,10 +21,10 @@ - - - - + + + + diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo.Abp.ExceptionHandling.csproj b/framework/src/Volo.Abp.ExceptionHandling/Volo.Abp.ExceptionHandling.csproj index fb247cc4de..87486ddb8c 100644 --- a/framework/src/Volo.Abp.ExceptionHandling/Volo.Abp.ExceptionHandling.csproj +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo.Abp.ExceptionHandling.csproj @@ -22,7 +22,7 @@ - + diff --git a/framework/src/Volo.Abp.FluentValidation/Volo.Abp.FluentValidation.csproj b/framework/src/Volo.Abp.FluentValidation/Volo.Abp.FluentValidation.csproj index 85454d4e02..f7e44a6608 100644 --- a/framework/src/Volo.Abp.FluentValidation/Volo.Abp.FluentValidation.csproj +++ b/framework/src/Volo.Abp.FluentValidation/Volo.Abp.FluentValidation.csproj @@ -17,7 +17,7 @@ - + diff --git a/framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj b/framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj index e53603b532..0018ea272d 100644 --- a/framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj +++ b/framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj @@ -17,7 +17,7 @@ - + diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo.Abp.Http.Client.IdentityModel.WebAssembly.csproj b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo.Abp.Http.Client.IdentityModel.WebAssembly.csproj index fae85873a6..986db5eee4 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo.Abp.Http.Client.IdentityModel.WebAssembly.csproj +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo.Abp.Http.Client.IdentityModel.WebAssembly.csproj @@ -17,7 +17,7 @@ - + diff --git a/framework/src/Volo.Abp.Http.Client/Volo.Abp.Http.Client.csproj b/framework/src/Volo.Abp.Http.Client/Volo.Abp.Http.Client.csproj index dcfcee3171..a657a49b05 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo.Abp.Http.Client.csproj +++ b/framework/src/Volo.Abp.Http.Client/Volo.Abp.Http.Client.csproj @@ -17,7 +17,7 @@ - + diff --git a/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj b/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj index eba088924e..f958f2d5af 100644 --- a/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj +++ b/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj @@ -17,8 +17,8 @@ - - + + diff --git a/framework/src/Volo.Abp.Imaging.ImageSharp/Volo.Abp.Imaging.ImageSharp.csproj b/framework/src/Volo.Abp.Imaging.ImageSharp/Volo.Abp.Imaging.ImageSharp.csproj index a8b8ff0767..6c6688cc89 100644 --- a/framework/src/Volo.Abp.Imaging.ImageSharp/Volo.Abp.Imaging.ImageSharp.csproj +++ b/framework/src/Volo.Abp.Imaging.ImageSharp/Volo.Abp.Imaging.ImageSharp.csproj @@ -20,7 +20,7 @@ - + diff --git a/framework/src/Volo.Abp.Imaging.MagickNet/Volo.Abp.Imaging.MagickNet.csproj b/framework/src/Volo.Abp.Imaging.MagickNet/Volo.Abp.Imaging.MagickNet.csproj index 56aabfcaf3..14b719c5be 100644 --- a/framework/src/Volo.Abp.Imaging.MagickNet/Volo.Abp.Imaging.MagickNet.csproj +++ b/framework/src/Volo.Abp.Imaging.MagickNet/Volo.Abp.Imaging.MagickNet.csproj @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Json.Newtonsoft/Volo.Abp.Json.Newtonsoft.csproj b/framework/src/Volo.Abp.Json.Newtonsoft/Volo.Abp.Json.Newtonsoft.csproj index 864ce9ec85..14891c1e8a 100644 --- a/framework/src/Volo.Abp.Json.Newtonsoft/Volo.Abp.Json.Newtonsoft.csproj +++ b/framework/src/Volo.Abp.Json.Newtonsoft/Volo.Abp.Json.Newtonsoft.csproj @@ -19,7 +19,7 @@ - + diff --git a/framework/src/Volo.Abp.Json.SystemTextJson/Volo.Abp.Json.SystemTextJson.csproj b/framework/src/Volo.Abp.Json.SystemTextJson/Volo.Abp.Json.SystemTextJson.csproj index 7117f7f034..e7adbb75de 100644 --- a/framework/src/Volo.Abp.Json.SystemTextJson/Volo.Abp.Json.SystemTextJson.csproj +++ b/framework/src/Volo.Abp.Json.SystemTextJson/Volo.Abp.Json.SystemTextJson.csproj @@ -20,7 +20,7 @@ - + diff --git a/framework/src/Volo.Abp.Kafka/Volo.Abp.Kafka.csproj b/framework/src/Volo.Abp.Kafka/Volo.Abp.Kafka.csproj index dfe7ef3022..e8d450d168 100644 --- a/framework/src/Volo.Abp.Kafka/Volo.Abp.Kafka.csproj +++ b/framework/src/Volo.Abp.Kafka/Volo.Abp.Kafka.csproj @@ -11,7 +11,7 @@ - + diff --git a/framework/src/Volo.Abp.Ldap/Volo.Abp.Ldap.csproj b/framework/src/Volo.Abp.Ldap/Volo.Abp.Ldap.csproj index 021b305182..ef49b53ba5 100644 --- a/framework/src/Volo.Abp.Ldap/Volo.Abp.Ldap.csproj +++ b/framework/src/Volo.Abp.Ldap/Volo.Abp.Ldap.csproj @@ -17,7 +17,7 @@ - + diff --git a/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj b/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj index 6307100803..c2d2cc0487 100644 --- a/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj +++ b/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj @@ -17,7 +17,7 @@ - + diff --git a/framework/src/Volo.Abp.Minify/Volo.Abp.Minify.csproj b/framework/src/Volo.Abp.Minify/Volo.Abp.Minify.csproj index f098df906d..8d9adfa7f2 100644 --- a/framework/src/Volo.Abp.Minify/Volo.Abp.Minify.csproj +++ b/framework/src/Volo.Abp.Minify/Volo.Abp.Minify.csproj @@ -21,7 +21,7 @@ - + diff --git a/framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj b/framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj index a80e9b4a78..789defab44 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj +++ b/framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj @@ -17,7 +17,7 @@ - + diff --git a/framework/src/Volo.Abp.Quartz/Volo.Abp.Quartz.csproj b/framework/src/Volo.Abp.Quartz/Volo.Abp.Quartz.csproj index eb711a6f0e..93f7b530f9 100644 --- a/framework/src/Volo.Abp.Quartz/Volo.Abp.Quartz.csproj +++ b/framework/src/Volo.Abp.Quartz/Volo.Abp.Quartz.csproj @@ -17,9 +17,9 @@ - - - + + + diff --git a/framework/src/Volo.Abp.RabbitMQ/Volo.Abp.RabbitMQ.csproj b/framework/src/Volo.Abp.RabbitMQ/Volo.Abp.RabbitMQ.csproj index cba3ab928e..751c73f4cc 100644 --- a/framework/src/Volo.Abp.RabbitMQ/Volo.Abp.RabbitMQ.csproj +++ b/framework/src/Volo.Abp.RabbitMQ/Volo.Abp.RabbitMQ.csproj @@ -17,7 +17,7 @@ - + diff --git a/framework/src/Volo.Abp.Sms.Aliyun/Volo.Abp.Sms.Aliyun.csproj b/framework/src/Volo.Abp.Sms.Aliyun/Volo.Abp.Sms.Aliyun.csproj index 5afbc73e4b..2f3677d5ea 100644 --- a/framework/src/Volo.Abp.Sms.Aliyun/Volo.Abp.Sms.Aliyun.csproj +++ b/framework/src/Volo.Abp.Sms.Aliyun/Volo.Abp.Sms.Aliyun.csproj @@ -20,7 +20,7 @@ - + diff --git a/framework/src/Volo.Abp.Swashbuckle/Volo.Abp.Swashbuckle.csproj b/framework/src/Volo.Abp.Swashbuckle/Volo.Abp.Swashbuckle.csproj index a12e87323e..576ea6c81e 100644 --- a/framework/src/Volo.Abp.Swashbuckle/Volo.Abp.Swashbuckle.csproj +++ b/framework/src/Volo.Abp.Swashbuckle/Volo.Abp.Swashbuckle.csproj @@ -17,7 +17,7 @@ - + diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo.Abp.TextTemplating.Razor.csproj b/framework/src/Volo.Abp.TextTemplating.Razor/Volo.Abp.TextTemplating.Razor.csproj index 471cb499df..b5b9f8bb33 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/Volo.Abp.TextTemplating.Razor.csproj +++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo.Abp.TextTemplating.Razor.csproj @@ -15,9 +15,9 @@ - - - + + + diff --git a/framework/src/Volo.Abp.TextTemplating.Scriban/Volo.Abp.TextTemplating.Scriban.csproj b/framework/src/Volo.Abp.TextTemplating.Scriban/Volo.Abp.TextTemplating.Scriban.csproj index 295d586695..aa91226b3d 100644 --- a/framework/src/Volo.Abp.TextTemplating.Scriban/Volo.Abp.TextTemplating.Scriban.csproj +++ b/framework/src/Volo.Abp.TextTemplating.Scriban/Volo.Abp.TextTemplating.Scriban.csproj @@ -15,7 +15,7 @@ - + diff --git a/framework/src/Volo.Abp.Timing/Volo.Abp.Timing.csproj b/framework/src/Volo.Abp.Timing/Volo.Abp.Timing.csproj index f5626fd0b0..65b175691e 100644 --- a/framework/src/Volo.Abp.Timing/Volo.Abp.Timing.csproj +++ b/framework/src/Volo.Abp.Timing/Volo.Abp.Timing.csproj @@ -27,7 +27,7 @@ - + diff --git a/framework/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj b/framework/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj index 636b3adb97..7f681519a6 100644 --- a/framework/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj +++ b/framework/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj @@ -17,9 +17,9 @@ - - - + + + diff --git a/framework/test/AbpTestBase/AbpTestBase.csproj b/framework/test/AbpTestBase/AbpTestBase.csproj index 9f46cc417c..cdad2ad3de 100644 --- a/framework/test/AbpTestBase/AbpTestBase.csproj +++ b/framework/test/AbpTestBase/AbpTestBase.csproj @@ -14,12 +14,12 @@ - - - - - - + + + + + + diff --git a/framework/test/SimpleConsoleDemo/SimpleConsoleDemo.csproj b/framework/test/SimpleConsoleDemo/SimpleConsoleDemo.csproj index 85b542e521..63c108f516 100644 --- a/framework/test/SimpleConsoleDemo/SimpleConsoleDemo.csproj +++ b/framework/test/SimpleConsoleDemo/SimpleConsoleDemo.csproj @@ -18,7 +18,7 @@ - + diff --git a/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo.Abp.AspNetCore.Authentication.OAuth.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo.Abp.AspNetCore.Authentication.OAuth.Tests.csproj index eaedf55c0c..9d0449e93e 100644 --- a/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo.Abp.AspNetCore.Authentication.OAuth.Tests.csproj +++ b/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo.Abp.AspNetCore.Authentication.OAuth.Tests.csproj @@ -17,7 +17,7 @@ - + diff --git a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo.Abp.AspNetCore.MultiTenancy.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo.Abp.AspNetCore.MultiTenancy.Tests.csproj index f904529186..a35f5526c8 100644 --- a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo.Abp.AspNetCore.MultiTenancy.Tests.csproj +++ b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo.Abp.AspNetCore.MultiTenancy.Tests.csproj @@ -12,7 +12,7 @@ - + diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo.Abp.AspNetCore.Mvc.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo.Abp.AspNetCore.Mvc.Tests.csproj index 8b63eb17c7..bca9cd4966 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo.Abp.AspNetCore.Mvc.Tests.csproj +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo.Abp.AspNetCore.Mvc.Tests.csproj @@ -19,8 +19,8 @@ - - + + diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo.Abp.AspNetCore.Mvc.UI.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo.Abp.AspNetCore.Mvc.UI.Tests.csproj index f4789ee0a5..2f25176452 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo.Abp.AspNetCore.Mvc.UI.Tests.csproj +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo.Abp.AspNetCore.Mvc.UI.Tests.csproj @@ -14,7 +14,7 @@ - + diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo.Abp.AspNetCore.Mvc.Versioning.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo.Abp.AspNetCore.Mvc.Versioning.Tests.csproj index 3d05f58158..e16ae0a6ab 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo.Abp.AspNetCore.Mvc.Versioning.Tests.csproj +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo.Abp.AspNetCore.Mvc.Versioning.Tests.csproj @@ -14,7 +14,7 @@ - + diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo.Abp.AspNetCore.Serilog.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo.Abp.AspNetCore.Serilog.Tests.csproj index d1c8756a64..e294d34934 100644 --- a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo.Abp.AspNetCore.Serilog.Tests.csproj +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo.Abp.AspNetCore.Serilog.Tests.csproj @@ -10,8 +10,8 @@ - - + + diff --git a/framework/test/Volo.Abp.AspNetCore.SignalR.Tests/Volo.Abp.AspNetCore.SignalR.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.SignalR.Tests/Volo.Abp.AspNetCore.SignalR.Tests.csproj index f1074d15b6..cf784b8917 100644 --- a/framework/test/Volo.Abp.AspNetCore.SignalR.Tests/Volo.Abp.AspNetCore.SignalR.Tests.csproj +++ b/framework/test/Volo.Abp.AspNetCore.SignalR.Tests/Volo.Abp.AspNetCore.SignalR.Tests.csproj @@ -8,7 +8,7 @@ - + diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/Volo.Abp.AspNetCore.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.Tests/Volo.Abp.AspNetCore.Tests.csproj index 116680687b..dbef0b6f14 100644 --- a/framework/test/Volo.Abp.AspNetCore.Tests/Volo.Abp.AspNetCore.Tests.csproj +++ b/framework/test/Volo.Abp.AspNetCore.Tests/Volo.Abp.AspNetCore.Tests.csproj @@ -24,7 +24,7 @@ - + diff --git a/framework/test/Volo.Abp.Auditing.Tests/Volo.Abp.Auditing.Tests.csproj b/framework/test/Volo.Abp.Auditing.Tests/Volo.Abp.Auditing.Tests.csproj index ea1d4e576c..5ff57d9dee 100644 --- a/framework/test/Volo.Abp.Auditing.Tests/Volo.Abp.Auditing.Tests.csproj +++ b/framework/test/Volo.Abp.Auditing.Tests/Volo.Abp.Auditing.Tests.csproj @@ -11,7 +11,7 @@ - + diff --git a/framework/test/Volo.Abp.Authorization.Tests/Volo.Abp.Authorization.Tests.csproj b/framework/test/Volo.Abp.Authorization.Tests/Volo.Abp.Authorization.Tests.csproj index 591be67359..7be6b11e40 100644 --- a/framework/test/Volo.Abp.Authorization.Tests/Volo.Abp.Authorization.Tests.csproj +++ b/framework/test/Volo.Abp.Authorization.Tests/Volo.Abp.Authorization.Tests.csproj @@ -15,7 +15,7 @@ - + diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/Volo.Abp.AutoMapper.Tests.csproj b/framework/test/Volo.Abp.AutoMapper.Tests/Volo.Abp.AutoMapper.Tests.csproj index 3ae2893df9..2d56e8d72e 100644 --- a/framework/test/Volo.Abp.AutoMapper.Tests/Volo.Abp.AutoMapper.Tests.csproj +++ b/framework/test/Volo.Abp.AutoMapper.Tests/Volo.Abp.AutoMapper.Tests.csproj @@ -12,7 +12,7 @@ - + diff --git a/framework/test/Volo.Abp.Autofac.Tests/Volo.Abp.Autofac.Tests.csproj b/framework/test/Volo.Abp.Autofac.Tests/Volo.Abp.Autofac.Tests.csproj index ec07709dff..680f2bec99 100644 --- a/framework/test/Volo.Abp.Autofac.Tests/Volo.Abp.Autofac.Tests.csproj +++ b/framework/test/Volo.Abp.Autofac.Tests/Volo.Abp.Autofac.Tests.csproj @@ -14,7 +14,7 @@ - + diff --git a/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo.Abp.BackgroundJobs.Tests.csproj b/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo.Abp.BackgroundJobs.Tests.csproj index 179da4c1e5..c3757cf194 100644 --- a/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo.Abp.BackgroundJobs.Tests.csproj +++ b/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo.Abp.BackgroundJobs.Tests.csproj @@ -13,7 +13,7 @@ - + diff --git a/framework/test/Volo.Abp.BlobStoring.Aliyun.Tests/Volo.Abp.BlobStoring.Aliyun.Tests.csproj b/framework/test/Volo.Abp.BlobStoring.Aliyun.Tests/Volo.Abp.BlobStoring.Aliyun.Tests.csproj index eb5b1ed401..ed8d5d3ae2 100644 --- a/framework/test/Volo.Abp.BlobStoring.Aliyun.Tests/Volo.Abp.BlobStoring.Aliyun.Tests.csproj +++ b/framework/test/Volo.Abp.BlobStoring.Aliyun.Tests/Volo.Abp.BlobStoring.Aliyun.Tests.csproj @@ -12,8 +12,8 @@ - - + + diff --git a/framework/test/Volo.Abp.BlobStoring.Aws.Tests/Volo.Abp.BlobStoring.Aws.Tests.csproj b/framework/test/Volo.Abp.BlobStoring.Aws.Tests/Volo.Abp.BlobStoring.Aws.Tests.csproj index 29bf3b4d78..232c2d8be3 100644 --- a/framework/test/Volo.Abp.BlobStoring.Aws.Tests/Volo.Abp.BlobStoring.Aws.Tests.csproj +++ b/framework/test/Volo.Abp.BlobStoring.Aws.Tests/Volo.Abp.BlobStoring.Aws.Tests.csproj @@ -12,7 +12,7 @@ - + diff --git a/framework/test/Volo.Abp.BlobStoring.Azure.Tests/Volo.Abp.BlobStoring.Azure.Tests.csproj b/framework/test/Volo.Abp.BlobStoring.Azure.Tests/Volo.Abp.BlobStoring.Azure.Tests.csproj index 17c8543cc6..cff3db9f5e 100644 --- a/framework/test/Volo.Abp.BlobStoring.Azure.Tests/Volo.Abp.BlobStoring.Azure.Tests.csproj +++ b/framework/test/Volo.Abp.BlobStoring.Azure.Tests/Volo.Abp.BlobStoring.Azure.Tests.csproj @@ -12,7 +12,7 @@ - + diff --git a/framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo.Abp.BlobStoring.FileSystem.Tests.csproj b/framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo.Abp.BlobStoring.FileSystem.Tests.csproj index 25df80c37d..82d972f9d5 100644 --- a/framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo.Abp.BlobStoring.FileSystem.Tests.csproj +++ b/framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo.Abp.BlobStoring.FileSystem.Tests.csproj @@ -11,7 +11,7 @@ - + diff --git a/framework/test/Volo.Abp.BlobStoring.Minio.Tests/Volo.Abp.BlobStoring.Minio.Tests.csproj b/framework/test/Volo.Abp.BlobStoring.Minio.Tests/Volo.Abp.BlobStoring.Minio.Tests.csproj index 4d0c9b291a..9f14818831 100644 --- a/framework/test/Volo.Abp.BlobStoring.Minio.Tests/Volo.Abp.BlobStoring.Minio.Tests.csproj +++ b/framework/test/Volo.Abp.BlobStoring.Minio.Tests/Volo.Abp.BlobStoring.Minio.Tests.csproj @@ -10,7 +10,7 @@ - + diff --git a/framework/test/Volo.Abp.BlobStoring.Tests/Volo.Abp.BlobStoring.Tests.csproj b/framework/test/Volo.Abp.BlobStoring.Tests/Volo.Abp.BlobStoring.Tests.csproj index 2ad63e51e2..f1fd5bdd99 100644 --- a/framework/test/Volo.Abp.BlobStoring.Tests/Volo.Abp.BlobStoring.Tests.csproj +++ b/framework/test/Volo.Abp.BlobStoring.Tests/Volo.Abp.BlobStoring.Tests.csproj @@ -11,7 +11,7 @@ - + diff --git a/framework/test/Volo.Abp.Caching.StackExchangeRedis.Tests/Volo.Abp.Caching.StackExchangeRedis.Tests.csproj b/framework/test/Volo.Abp.Caching.StackExchangeRedis.Tests/Volo.Abp.Caching.StackExchangeRedis.Tests.csproj index 63e99544ad..69387ccf92 100644 --- a/framework/test/Volo.Abp.Caching.StackExchangeRedis.Tests/Volo.Abp.Caching.StackExchangeRedis.Tests.csproj +++ b/framework/test/Volo.Abp.Caching.StackExchangeRedis.Tests/Volo.Abp.Caching.StackExchangeRedis.Tests.csproj @@ -11,7 +11,7 @@ - + diff --git a/framework/test/Volo.Abp.Caching.Tests/Volo.Abp.Caching.Tests.csproj b/framework/test/Volo.Abp.Caching.Tests/Volo.Abp.Caching.Tests.csproj index 1af0686cdf..0defb82f07 100644 --- a/framework/test/Volo.Abp.Caching.Tests/Volo.Abp.Caching.Tests.csproj +++ b/framework/test/Volo.Abp.Caching.Tests/Volo.Abp.Caching.Tests.csproj @@ -12,7 +12,7 @@ - + diff --git a/framework/test/Volo.Abp.Castle.Core.Tests/Volo.Abp.Castle.Core.Tests.csproj b/framework/test/Volo.Abp.Castle.Core.Tests/Volo.Abp.Castle.Core.Tests.csproj index 05e6e71a35..a7379d185e 100644 --- a/framework/test/Volo.Abp.Castle.Core.Tests/Volo.Abp.Castle.Core.Tests.csproj +++ b/framework/test/Volo.Abp.Castle.Core.Tests/Volo.Abp.Castle.Core.Tests.csproj @@ -10,7 +10,7 @@ - + diff --git a/framework/test/Volo.Abp.Cli.Core.Tests/Volo.Abp.Cli.Core.Tests.csproj b/framework/test/Volo.Abp.Cli.Core.Tests/Volo.Abp.Cli.Core.Tests.csproj index 185805f266..7751376511 100644 --- a/framework/test/Volo.Abp.Cli.Core.Tests/Volo.Abp.Cli.Core.Tests.csproj +++ b/framework/test/Volo.Abp.Cli.Core.Tests/Volo.Abp.Cli.Core.Tests.csproj @@ -10,7 +10,7 @@ - + diff --git a/framework/test/Volo.Abp.Core.Tests/Volo.Abp.Core.Tests.csproj b/framework/test/Volo.Abp.Core.Tests/Volo.Abp.Core.Tests.csproj index 81954021ba..dfc0fd3da0 100644 --- a/framework/test/Volo.Abp.Core.Tests/Volo.Abp.Core.Tests.csproj +++ b/framework/test/Volo.Abp.Core.Tests/Volo.Abp.Core.Tests.csproj @@ -10,7 +10,7 @@ - + diff --git a/framework/test/Volo.Abp.Dapper.Tests/Volo.Abp.Dapper.Tests.csproj b/framework/test/Volo.Abp.Dapper.Tests/Volo.Abp.Dapper.Tests.csproj index c715b0adde..c04f5dc194 100644 --- a/framework/test/Volo.Abp.Dapper.Tests/Volo.Abp.Dapper.Tests.csproj +++ b/framework/test/Volo.Abp.Dapper.Tests/Volo.Abp.Dapper.Tests.csproj @@ -13,7 +13,7 @@ - + diff --git a/framework/test/Volo.Abp.Data.Tests/Volo.Abp.Data.Tests.csproj b/framework/test/Volo.Abp.Data.Tests/Volo.Abp.Data.Tests.csproj index c0e11ad68c..f1a2551864 100644 --- a/framework/test/Volo.Abp.Data.Tests/Volo.Abp.Data.Tests.csproj +++ b/framework/test/Volo.Abp.Data.Tests/Volo.Abp.Data.Tests.csproj @@ -10,7 +10,7 @@ - + diff --git a/framework/test/Volo.Abp.Ddd.Tests/Volo.Abp.Ddd.Tests.csproj b/framework/test/Volo.Abp.Ddd.Tests/Volo.Abp.Ddd.Tests.csproj index e9d2da0064..bbfbb21265 100644 --- a/framework/test/Volo.Abp.Ddd.Tests/Volo.Abp.Ddd.Tests.csproj +++ b/framework/test/Volo.Abp.Ddd.Tests/Volo.Abp.Ddd.Tests.csproj @@ -13,7 +13,7 @@ - + diff --git a/framework/test/Volo.Abp.DistributedLocking.Abstractions.Tests/Volo.Abp.DistributedLocking.Abstractions.Tests.csproj b/framework/test/Volo.Abp.DistributedLocking.Abstractions.Tests/Volo.Abp.DistributedLocking.Abstractions.Tests.csproj index 1cd47b1901..de36c22cf5 100644 --- a/framework/test/Volo.Abp.DistributedLocking.Abstractions.Tests/Volo.Abp.DistributedLocking.Abstractions.Tests.csproj +++ b/framework/test/Volo.Abp.DistributedLocking.Abstractions.Tests/Volo.Abp.DistributedLocking.Abstractions.Tests.csproj @@ -12,7 +12,7 @@ - + diff --git a/framework/test/Volo.Abp.Emailing.Tests/Volo.Abp.Emailing.Tests.csproj b/framework/test/Volo.Abp.Emailing.Tests/Volo.Abp.Emailing.Tests.csproj index 19a4e170e9..71b4d48c66 100644 --- a/framework/test/Volo.Abp.Emailing.Tests/Volo.Abp.Emailing.Tests.csproj +++ b/framework/test/Volo.Abp.Emailing.Tests/Volo.Abp.Emailing.Tests.csproj @@ -11,7 +11,7 @@ - + diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo.Abp.EntityFrameworkCore.Tests.csproj b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo.Abp.EntityFrameworkCore.Tests.csproj index 7ad45ebe75..6642e42caf 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo.Abp.EntityFrameworkCore.Tests.csproj +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo.Abp.EntityFrameworkCore.Tests.csproj @@ -16,7 +16,7 @@ - + diff --git a/framework/test/Volo.Abp.EventBus.Tests/Volo.Abp.EventBus.Tests.csproj b/framework/test/Volo.Abp.EventBus.Tests/Volo.Abp.EventBus.Tests.csproj index e9b2a5d40c..f94cde3af0 100644 --- a/framework/test/Volo.Abp.EventBus.Tests/Volo.Abp.EventBus.Tests.csproj +++ b/framework/test/Volo.Abp.EventBus.Tests/Volo.Abp.EventBus.Tests.csproj @@ -12,7 +12,7 @@ - + diff --git a/framework/test/Volo.Abp.Features.Tests/Volo.Abp.Features.Tests.csproj b/framework/test/Volo.Abp.Features.Tests/Volo.Abp.Features.Tests.csproj index 071d94d017..80b750f618 100644 --- a/framework/test/Volo.Abp.Features.Tests/Volo.Abp.Features.Tests.csproj +++ b/framework/test/Volo.Abp.Features.Tests/Volo.Abp.Features.Tests.csproj @@ -12,7 +12,7 @@ - + diff --git a/framework/test/Volo.Abp.FluentValidation.Tests/Volo.Abp.FluentValidation.Tests.csproj b/framework/test/Volo.Abp.FluentValidation.Tests/Volo.Abp.FluentValidation.Tests.csproj index bcd3eb40a7..62603ef3a6 100644 --- a/framework/test/Volo.Abp.FluentValidation.Tests/Volo.Abp.FluentValidation.Tests.csproj +++ b/framework/test/Volo.Abp.FluentValidation.Tests/Volo.Abp.FluentValidation.Tests.csproj @@ -11,7 +11,7 @@ - + diff --git a/framework/test/Volo.Abp.GlobalFeatures.Tests/Volo.Abp.GlobalFeatures.Tests.csproj b/framework/test/Volo.Abp.GlobalFeatures.Tests/Volo.Abp.GlobalFeatures.Tests.csproj index 5ae95dd4aa..23e6ebfa3d 100644 --- a/framework/test/Volo.Abp.GlobalFeatures.Tests/Volo.Abp.GlobalFeatures.Tests.csproj +++ b/framework/test/Volo.Abp.GlobalFeatures.Tests/Volo.Abp.GlobalFeatures.Tests.csproj @@ -13,7 +13,7 @@ - + diff --git a/framework/test/Volo.Abp.Http.Client.IdentityModel.Web.Tests/Volo.Abp.Http.Client.IdentityModel.Web.Tests.csproj b/framework/test/Volo.Abp.Http.Client.IdentityModel.Web.Tests/Volo.Abp.Http.Client.IdentityModel.Web.Tests.csproj index 0e22080ae1..2046533f87 100644 --- a/framework/test/Volo.Abp.Http.Client.IdentityModel.Web.Tests/Volo.Abp.Http.Client.IdentityModel.Web.Tests.csproj +++ b/framework/test/Volo.Abp.Http.Client.IdentityModel.Web.Tests/Volo.Abp.Http.Client.IdentityModel.Web.Tests.csproj @@ -10,7 +10,7 @@ - + diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo.Abp.Http.Client.Tests.csproj b/framework/test/Volo.Abp.Http.Client.Tests/Volo.Abp.Http.Client.Tests.csproj index f232ce0f23..4afd08a8c8 100644 --- a/framework/test/Volo.Abp.Http.Client.Tests/Volo.Abp.Http.Client.Tests.csproj +++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo.Abp.Http.Client.Tests.csproj @@ -11,7 +11,7 @@ - + diff --git a/framework/test/Volo.Abp.Http.Tests/Volo.Abp.Http.Tests.csproj b/framework/test/Volo.Abp.Http.Tests/Volo.Abp.Http.Tests.csproj index 660ed8c97e..f697edc3f5 100644 --- a/framework/test/Volo.Abp.Http.Tests/Volo.Abp.Http.Tests.csproj +++ b/framework/test/Volo.Abp.Http.Tests/Volo.Abp.Http.Tests.csproj @@ -10,7 +10,7 @@ - + diff --git a/framework/test/Volo.Abp.IdentityModel.Tests/Volo.Abp.IdentityModel.Tests.csproj b/framework/test/Volo.Abp.IdentityModel.Tests/Volo.Abp.IdentityModel.Tests.csproj index dd356d370a..ad31038b1d 100644 --- a/framework/test/Volo.Abp.IdentityModel.Tests/Volo.Abp.IdentityModel.Tests.csproj +++ b/framework/test/Volo.Abp.IdentityModel.Tests/Volo.Abp.IdentityModel.Tests.csproj @@ -11,7 +11,7 @@ - + diff --git a/framework/test/Volo.Abp.Imaging.Abstractions.Tests/Volo.Abp.Imaging.Abstractions.Tests.csproj b/framework/test/Volo.Abp.Imaging.Abstractions.Tests/Volo.Abp.Imaging.Abstractions.Tests.csproj index f40dcf19d3..a0445e1c72 100644 --- a/framework/test/Volo.Abp.Imaging.Abstractions.Tests/Volo.Abp.Imaging.Abstractions.Tests.csproj +++ b/framework/test/Volo.Abp.Imaging.Abstractions.Tests/Volo.Abp.Imaging.Abstractions.Tests.csproj @@ -8,7 +8,7 @@ - + diff --git a/framework/test/Volo.Abp.Imaging.AspNetCore.Tests/Volo.Abp.Imaging.AspNetCore.Tests.csproj b/framework/test/Volo.Abp.Imaging.AspNetCore.Tests/Volo.Abp.Imaging.AspNetCore.Tests.csproj index e9fd8801e7..9efc1e789d 100644 --- a/framework/test/Volo.Abp.Imaging.AspNetCore.Tests/Volo.Abp.Imaging.AspNetCore.Tests.csproj +++ b/framework/test/Volo.Abp.Imaging.AspNetCore.Tests/Volo.Abp.Imaging.AspNetCore.Tests.csproj @@ -8,7 +8,7 @@ - + diff --git a/framework/test/Volo.Abp.Imaging.ImageSharp.Tests/Volo.Abp.Imaging.ImageSharp.Tests.csproj b/framework/test/Volo.Abp.Imaging.ImageSharp.Tests/Volo.Abp.Imaging.ImageSharp.Tests.csproj index 2f95697b30..b61ef43582 100644 --- a/framework/test/Volo.Abp.Imaging.ImageSharp.Tests/Volo.Abp.Imaging.ImageSharp.Tests.csproj +++ b/framework/test/Volo.Abp.Imaging.ImageSharp.Tests/Volo.Abp.Imaging.ImageSharp.Tests.csproj @@ -8,7 +8,7 @@ - + diff --git a/framework/test/Volo.Abp.Imaging.MagickNet.Tests/Volo.Abp.Imaging.MagickNet.Tests.csproj b/framework/test/Volo.Abp.Imaging.MagickNet.Tests/Volo.Abp.Imaging.MagickNet.Tests.csproj index 09ed1ad023..747bc6f7b9 100644 --- a/framework/test/Volo.Abp.Imaging.MagickNet.Tests/Volo.Abp.Imaging.MagickNet.Tests.csproj +++ b/framework/test/Volo.Abp.Imaging.MagickNet.Tests/Volo.Abp.Imaging.MagickNet.Tests.csproj @@ -8,7 +8,7 @@ - + diff --git a/framework/test/Volo.Abp.Json.Tests/Volo.Abp.Json.Tests.csproj b/framework/test/Volo.Abp.Json.Tests/Volo.Abp.Json.Tests.csproj index c5aed42285..bba73b272f 100644 --- a/framework/test/Volo.Abp.Json.Tests/Volo.Abp.Json.Tests.csproj +++ b/framework/test/Volo.Abp.Json.Tests/Volo.Abp.Json.Tests.csproj @@ -8,7 +8,7 @@ - + diff --git a/framework/test/Volo.Abp.Ldap.Tests/Volo.Abp.Ldap.Tests.csproj b/framework/test/Volo.Abp.Ldap.Tests/Volo.Abp.Ldap.Tests.csproj index 5d111d4a65..2ff378dd5b 100644 --- a/framework/test/Volo.Abp.Ldap.Tests/Volo.Abp.Ldap.Tests.csproj +++ b/framework/test/Volo.Abp.Ldap.Tests/Volo.Abp.Ldap.Tests.csproj @@ -8,7 +8,7 @@ - + diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo.Abp.Localization.Tests.csproj b/framework/test/Volo.Abp.Localization.Tests/Volo.Abp.Localization.Tests.csproj index 27dd0fd0d4..b3cb64d141 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo.Abp.Localization.Tests.csproj +++ b/framework/test/Volo.Abp.Localization.Tests/Volo.Abp.Localization.Tests.csproj @@ -14,7 +14,7 @@ - + diff --git a/framework/test/Volo.Abp.MailKit.Tests/Volo.Abp.MailKit.Tests.csproj b/framework/test/Volo.Abp.MailKit.Tests/Volo.Abp.MailKit.Tests.csproj index 0bc1b22553..3e9c389745 100644 --- a/framework/test/Volo.Abp.MailKit.Tests/Volo.Abp.MailKit.Tests.csproj +++ b/framework/test/Volo.Abp.MailKit.Tests/Volo.Abp.MailKit.Tests.csproj @@ -11,7 +11,7 @@ - + diff --git a/framework/test/Volo.Abp.MemoryDb.Tests/Volo.Abp.MemoryDb.Tests.csproj b/framework/test/Volo.Abp.MemoryDb.Tests/Volo.Abp.MemoryDb.Tests.csproj index 5b6bc783b8..2544a6303f 100644 --- a/framework/test/Volo.Abp.MemoryDb.Tests/Volo.Abp.MemoryDb.Tests.csproj +++ b/framework/test/Volo.Abp.MemoryDb.Tests/Volo.Abp.MemoryDb.Tests.csproj @@ -12,7 +12,7 @@ - + diff --git a/framework/test/Volo.Abp.Minify.Tests/Volo.Abp.Minify.Tests.csproj b/framework/test/Volo.Abp.Minify.Tests/Volo.Abp.Minify.Tests.csproj index e00fa63412..0c8ec44f1d 100644 --- a/framework/test/Volo.Abp.Minify.Tests/Volo.Abp.Minify.Tests.csproj +++ b/framework/test/Volo.Abp.Minify.Tests/Volo.Abp.Minify.Tests.csproj @@ -10,7 +10,7 @@ - + diff --git a/framework/test/Volo.Abp.MongoDB.Tests/Volo.Abp.MongoDB.Tests.csproj b/framework/test/Volo.Abp.MongoDB.Tests/Volo.Abp.MongoDB.Tests.csproj index 403055c57a..e36c148b05 100644 --- a/framework/test/Volo.Abp.MongoDB.Tests/Volo.Abp.MongoDB.Tests.csproj +++ b/framework/test/Volo.Abp.MongoDB.Tests/Volo.Abp.MongoDB.Tests.csproj @@ -15,11 +15,11 @@ - - - - - + + + + + diff --git a/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo.Abp.MultiLingualObjects.Tests.csproj b/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo.Abp.MultiLingualObjects.Tests.csproj index 6198d6bb08..acf78feb9f 100644 --- a/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo.Abp.MultiLingualObjects.Tests.csproj +++ b/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo.Abp.MultiLingualObjects.Tests.csproj @@ -15,7 +15,7 @@ - + diff --git a/framework/test/Volo.Abp.MultiTenancy.Tests/Volo.Abp.MultiTenancy.Tests.csproj b/framework/test/Volo.Abp.MultiTenancy.Tests/Volo.Abp.MultiTenancy.Tests.csproj index 1e7ce4beb7..df7bd56e35 100644 --- a/framework/test/Volo.Abp.MultiTenancy.Tests/Volo.Abp.MultiTenancy.Tests.csproj +++ b/framework/test/Volo.Abp.MultiTenancy.Tests/Volo.Abp.MultiTenancy.Tests.csproj @@ -10,7 +10,7 @@ - + diff --git a/framework/test/Volo.Abp.ObjectExtending.Tests/Volo.Abp.ObjectExtending.Tests.csproj b/framework/test/Volo.Abp.ObjectExtending.Tests/Volo.Abp.ObjectExtending.Tests.csproj index f1acea57ce..b8c9de1a28 100644 --- a/framework/test/Volo.Abp.ObjectExtending.Tests/Volo.Abp.ObjectExtending.Tests.csproj +++ b/framework/test/Volo.Abp.ObjectExtending.Tests/Volo.Abp.ObjectExtending.Tests.csproj @@ -10,7 +10,7 @@ - + diff --git a/framework/test/Volo.Abp.ObjectMapping.Tests/Volo.Abp.ObjectMapping.Tests.csproj b/framework/test/Volo.Abp.ObjectMapping.Tests/Volo.Abp.ObjectMapping.Tests.csproj index 354ac72007..78e2faef67 100644 --- a/framework/test/Volo.Abp.ObjectMapping.Tests/Volo.Abp.ObjectMapping.Tests.csproj +++ b/framework/test/Volo.Abp.ObjectMapping.Tests/Volo.Abp.ObjectMapping.Tests.csproj @@ -10,7 +10,7 @@ - + diff --git a/framework/test/Volo.Abp.Security.Tests/Volo.Abp.Security.Tests.csproj b/framework/test/Volo.Abp.Security.Tests/Volo.Abp.Security.Tests.csproj index 99d532828a..2672978f72 100644 --- a/framework/test/Volo.Abp.Security.Tests/Volo.Abp.Security.Tests.csproj +++ b/framework/test/Volo.Abp.Security.Tests/Volo.Abp.Security.Tests.csproj @@ -11,7 +11,7 @@ - + diff --git a/framework/test/Volo.Abp.Serialization.Tests/Volo.Abp.Serialization.Tests.csproj b/framework/test/Volo.Abp.Serialization.Tests/Volo.Abp.Serialization.Tests.csproj index d204912cb7..2a288ec31d 100644 --- a/framework/test/Volo.Abp.Serialization.Tests/Volo.Abp.Serialization.Tests.csproj +++ b/framework/test/Volo.Abp.Serialization.Tests/Volo.Abp.Serialization.Tests.csproj @@ -10,7 +10,7 @@ - + diff --git a/framework/test/Volo.Abp.Settings.Tests/Volo.Abp.Settings.Tests.csproj b/framework/test/Volo.Abp.Settings.Tests/Volo.Abp.Settings.Tests.csproj index df731f4f9b..c96aed4ae4 100644 --- a/framework/test/Volo.Abp.Settings.Tests/Volo.Abp.Settings.Tests.csproj +++ b/framework/test/Volo.Abp.Settings.Tests/Volo.Abp.Settings.Tests.csproj @@ -11,7 +11,7 @@ - + diff --git a/framework/test/Volo.Abp.Sms.Aliyun.Tests/Volo.Abp.Sms.Aliyun.Tests.csproj b/framework/test/Volo.Abp.Sms.Aliyun.Tests/Volo.Abp.Sms.Aliyun.Tests.csproj index e2d92760e8..b69fbe3191 100644 --- a/framework/test/Volo.Abp.Sms.Aliyun.Tests/Volo.Abp.Sms.Aliyun.Tests.csproj +++ b/framework/test/Volo.Abp.Sms.Aliyun.Tests/Volo.Abp.Sms.Aliyun.Tests.csproj @@ -12,8 +12,8 @@ - - + + diff --git a/framework/test/Volo.Abp.Specifications.Tests/Volo.Abp.Specifications.Tests.csproj b/framework/test/Volo.Abp.Specifications.Tests/Volo.Abp.Specifications.Tests.csproj index 49f99049fe..4f8b44e447 100644 --- a/framework/test/Volo.Abp.Specifications.Tests/Volo.Abp.Specifications.Tests.csproj +++ b/framework/test/Volo.Abp.Specifications.Tests/Volo.Abp.Specifications.Tests.csproj @@ -10,7 +10,7 @@ - + diff --git a/framework/test/Volo.Abp.TestApp.Tests/Volo.Abp.TestApp.Tests.csproj b/framework/test/Volo.Abp.TestApp.Tests/Volo.Abp.TestApp.Tests.csproj index de4ffe056f..1cb2ab1e5e 100644 --- a/framework/test/Volo.Abp.TestApp.Tests/Volo.Abp.TestApp.Tests.csproj +++ b/framework/test/Volo.Abp.TestApp.Tests/Volo.Abp.TestApp.Tests.csproj @@ -9,7 +9,7 @@ - + diff --git a/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj b/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj index eff7b8df0b..4737a1e906 100644 --- a/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj +++ b/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj @@ -15,7 +15,7 @@ - + diff --git a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo.Abp.TextTemplating.Razor.Tests.csproj b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo.Abp.TextTemplating.Razor.Tests.csproj index 972e63d268..ee718f907f 100644 --- a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo.Abp.TextTemplating.Razor.Tests.csproj +++ b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo.Abp.TextTemplating.Razor.Tests.csproj @@ -16,7 +16,7 @@ - + diff --git a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo.Abp.TextTemplating.Scriban.Tests.csproj b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo.Abp.TextTemplating.Scriban.Tests.csproj index bfe6cae5b3..f5a363b229 100644 --- a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo.Abp.TextTemplating.Scriban.Tests.csproj +++ b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo.Abp.TextTemplating.Scriban.Tests.csproj @@ -16,7 +16,7 @@ - + diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo.Abp.TextTemplating.Tests.csproj b/framework/test/Volo.Abp.TextTemplating.Tests/Volo.Abp.TextTemplating.Tests.csproj index c7dabe149a..03784c1eaf 100644 --- a/framework/test/Volo.Abp.TextTemplating.Tests/Volo.Abp.TextTemplating.Tests.csproj +++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo.Abp.TextTemplating.Tests.csproj @@ -27,7 +27,7 @@ - + diff --git a/framework/test/Volo.Abp.Threading.Tests/Volo.Abp.Threading.Tests.csproj b/framework/test/Volo.Abp.Threading.Tests/Volo.Abp.Threading.Tests.csproj index e7777b2674..160b9b1fe7 100644 --- a/framework/test/Volo.Abp.Threading.Tests/Volo.Abp.Threading.Tests.csproj +++ b/framework/test/Volo.Abp.Threading.Tests/Volo.Abp.Threading.Tests.csproj @@ -10,7 +10,7 @@ - + diff --git a/framework/test/Volo.Abp.UI.Navigation.Tests/Volo.Abp.UI.Navigation.Tests.csproj b/framework/test/Volo.Abp.UI.Navigation.Tests/Volo.Abp.UI.Navigation.Tests.csproj index f7cd34b43e..ceef63feed 100644 --- a/framework/test/Volo.Abp.UI.Navigation.Tests/Volo.Abp.UI.Navigation.Tests.csproj +++ b/framework/test/Volo.Abp.UI.Navigation.Tests/Volo.Abp.UI.Navigation.Tests.csproj @@ -12,7 +12,7 @@ - + diff --git a/framework/test/Volo.Abp.Uow.Tests/Volo.Abp.Uow.Tests.csproj b/framework/test/Volo.Abp.Uow.Tests/Volo.Abp.Uow.Tests.csproj index 0c9da70233..39b2b90a93 100644 --- a/framework/test/Volo.Abp.Uow.Tests/Volo.Abp.Uow.Tests.csproj +++ b/framework/test/Volo.Abp.Uow.Tests/Volo.Abp.Uow.Tests.csproj @@ -10,7 +10,7 @@ - + diff --git a/framework/test/Volo.Abp.Validation.Tests/Volo.Abp.Validation.Tests.csproj b/framework/test/Volo.Abp.Validation.Tests/Volo.Abp.Validation.Tests.csproj index 67f204128e..36112ef7d8 100644 --- a/framework/test/Volo.Abp.Validation.Tests/Volo.Abp.Validation.Tests.csproj +++ b/framework/test/Volo.Abp.Validation.Tests/Volo.Abp.Validation.Tests.csproj @@ -12,7 +12,7 @@ - + diff --git a/framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo.Abp.VirtualFileSystem.Tests.csproj b/framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo.Abp.VirtualFileSystem.Tests.csproj index fff8a834ad..052650b5a8 100644 --- a/framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo.Abp.VirtualFileSystem.Tests.csproj +++ b/framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo.Abp.VirtualFileSystem.Tests.csproj @@ -15,8 +15,8 @@ - - + + diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo.Abp.Account.Application.Contracts.csproj b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo.Abp.Account.Application.Contracts.csproj index cc38e9a047..67e5aeaf95 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo.Abp.Account.Application.Contracts.csproj +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo.Abp.Account.Application.Contracts.csproj @@ -21,7 +21,7 @@ - + diff --git a/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj b/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj index c62a4378f4..e43314c3d5 100644 --- a/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj +++ b/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj @@ -17,7 +17,7 @@ - + @@ -25,7 +25,7 @@ - + diff --git a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Volo.Abp.Account.Web.IdentityServer.csproj b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Volo.Abp.Account.Web.IdentityServer.csproj index 5e3eea54ed..7e7136d247 100644 --- a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Volo.Abp.Account.Web.IdentityServer.csproj +++ b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Volo.Abp.Account.Web.IdentityServer.csproj @@ -34,11 +34,11 @@ - + - + diff --git a/modules/account/src/Volo.Abp.Account.Web.OpenIddict/Volo.Abp.Account.Web.OpenIddict.csproj b/modules/account/src/Volo.Abp.Account.Web.OpenIddict/Volo.Abp.Account.Web.OpenIddict.csproj index 913ef5dcca..21d270b8d8 100644 --- a/modules/account/src/Volo.Abp.Account.Web.OpenIddict/Volo.Abp.Account.Web.OpenIddict.csproj +++ b/modules/account/src/Volo.Abp.Account.Web.OpenIddict/Volo.Abp.Account.Web.OpenIddict.csproj @@ -24,11 +24,11 @@ - + - + diff --git a/modules/account/src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.csproj b/modules/account/src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.csproj index 1e7446aaab..a2ad539865 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.csproj +++ b/modules/account/src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.csproj @@ -44,7 +44,7 @@ - + diff --git a/modules/account/test/Volo.Abp.Account.Application.Tests/Volo.Abp.Account.Application.Tests.csproj b/modules/account/test/Volo.Abp.Account.Application.Tests/Volo.Abp.Account.Application.Tests.csproj index 344f29d168..9065c6c774 100644 --- a/modules/account/test/Volo.Abp.Account.Application.Tests/Volo.Abp.Account.Application.Tests.csproj +++ b/modules/account/test/Volo.Abp.Account.Application.Tests/Volo.Abp.Account.Application.Tests.csproj @@ -6,13 +6,13 @@ - - - - - - - + + + + + + + diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo.Abp.AuditLogging.Domain.Shared.csproj b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo.Abp.AuditLogging.Domain.Shared.csproj index 9bd719de42..a7adfdf5f3 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo.Abp.AuditLogging.Domain.Shared.csproj +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo.Abp.AuditLogging.Domain.Shared.csproj @@ -20,7 +20,7 @@ - + diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests.csproj b/modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests.csproj index a936c9252b..ad777f43b5 100644 --- a/modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests.csproj +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests.csproj @@ -14,8 +14,8 @@ - - + + diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.MongoDB.Tests/Volo.Abp.AuditLogging.MongoDB.Tests.csproj b/modules/audit-logging/test/Volo.Abp.AuditLogging.MongoDB.Tests/Volo.Abp.AuditLogging.MongoDB.Tests.csproj index 6648985667..0c62b41672 100644 --- a/modules/audit-logging/test/Volo.Abp.AuditLogging.MongoDB.Tests/Volo.Abp.AuditLogging.MongoDB.Tests.csproj +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.MongoDB.Tests/Volo.Abp.AuditLogging.MongoDB.Tests.csproj @@ -13,11 +13,11 @@ - - - - - + + + + + diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo.Abp.AuditLogging.TestBase.csproj b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo.Abp.AuditLogging.TestBase.csproj index 5a39716dca..546026a607 100644 --- a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo.Abp.AuditLogging.TestBase.csproj +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo.Abp.AuditLogging.TestBase.csproj @@ -14,12 +14,12 @@ - - - - - - + + + + + + diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/Volo.Abp.AuditLogging.Tests.csproj b/modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/Volo.Abp.AuditLogging.Tests.csproj index e81818c3f2..9ac094b81c 100644 --- a/modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/Volo.Abp.AuditLogging.Tests.csproj +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/Volo.Abp.AuditLogging.Tests.csproj @@ -12,7 +12,7 @@ - + diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/Volo.Abp.BackgroundJobs.DemoApp.HangFire.csproj b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/Volo.Abp.BackgroundJobs.DemoApp.HangFire.csproj index 03367ef007..07fab0a446 100644 --- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/Volo.Abp.BackgroundJobs.DemoApp.HangFire.csproj +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/Volo.Abp.BackgroundJobs.DemoApp.HangFire.csproj @@ -6,7 +6,7 @@ - + diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Quartz/Volo.Abp.BackgroundJobs.DemoApp.Quartz.csproj b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Quartz/Volo.Abp.BackgroundJobs.DemoApp.Quartz.csproj index d067cb0761..62223b0fa5 100644 --- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Quartz/Volo.Abp.BackgroundJobs.DemoApp.Quartz.csproj +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Quartz/Volo.Abp.BackgroundJobs.DemoApp.Quartz.csproj @@ -6,7 +6,7 @@ - + diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/Volo.Abp.BackgroundJobs.DemoApp.Shared.csproj b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/Volo.Abp.BackgroundJobs.DemoApp.Shared.csproj index 8ba1cbfd27..324f6c95ea 100644 --- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/Volo.Abp.BackgroundJobs.DemoApp.Shared.csproj +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/Volo.Abp.BackgroundJobs.DemoApp.Shared.csproj @@ -7,7 +7,7 @@ - + diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/Volo.Abp.BackgroundJobs.DemoApp.csproj b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/Volo.Abp.BackgroundJobs.DemoApp.csproj index 33fa2074aa..c170d528f3 100644 --- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/Volo.Abp.BackgroundJobs.DemoApp.csproj +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/Volo.Abp.BackgroundJobs.DemoApp.csproj @@ -6,7 +6,7 @@ - + all runtime; build; native; contentfiles; analyzers diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/Volo.Abp.BackgroundJobs.Domain.Tests.csproj b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/Volo.Abp.BackgroundJobs.Domain.Tests.csproj index 58ba504d8d..0f83bd983b 100644 --- a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/Volo.Abp.BackgroundJobs.Domain.Tests.csproj +++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/Volo.Abp.BackgroundJobs.Domain.Tests.csproj @@ -12,7 +12,7 @@ - + diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests.csproj b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests.csproj index 26e76d8880..4e6bc983db 100644 --- a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests.csproj +++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests.csproj @@ -14,8 +14,8 @@ - - + + diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.MongoDB.Tests/Volo.Abp.BackgroundJobs.MongoDB.Tests.csproj b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.MongoDB.Tests/Volo.Abp.BackgroundJobs.MongoDB.Tests.csproj index b2a55fa8e3..73044de04f 100644 --- a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.MongoDB.Tests/Volo.Abp.BackgroundJobs.MongoDB.Tests.csproj +++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.MongoDB.Tests/Volo.Abp.BackgroundJobs.MongoDB.Tests.csproj @@ -13,11 +13,11 @@ - - - - - + + + + + diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/Volo.Abp.BackgroundJobs.TestBase.csproj b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/Volo.Abp.BackgroundJobs.TestBase.csproj index cf187379e1..2487119c48 100644 --- a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/Volo.Abp.BackgroundJobs.TestBase.csproj +++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/Volo.Abp.BackgroundJobs.TestBase.csproj @@ -14,12 +14,12 @@ - - - - - - + + + + + + diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Volo.Abp.AspNetCore.Components.Server.BasicTheme.csproj b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Volo.Abp.AspNetCore.Components.Server.BasicTheme.csproj index b55568b48d..50905eea49 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Volo.Abp.AspNetCore.Components.Server.BasicTheme.csproj +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Volo.Abp.AspNetCore.Components.Server.BasicTheme.csproj @@ -8,7 +8,7 @@ - + diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj index de7e6a992d..979e65689a 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj +++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj @@ -21,12 +21,12 @@ - - - - - - + + + + + + diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj index d2a17f63c6..d4d781f281 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj +++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj @@ -8,9 +8,9 @@ - - - + + + diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.csproj b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.csproj index 6bf357063e..1524092d59 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.csproj +++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.csproj @@ -16,9 +16,9 @@ - - - + + + diff --git a/modules/blob-storing-database/host/BlobStoring.Database.Host.ConsoleApp/src/BlobStoring.Database.Host.ConsoleApp.ConsoleApp/BlobStoring.Database.Host.ConsoleApp.ConsoleApp.csproj b/modules/blob-storing-database/host/BlobStoring.Database.Host.ConsoleApp/src/BlobStoring.Database.Host.ConsoleApp.ConsoleApp/BlobStoring.Database.Host.ConsoleApp.ConsoleApp.csproj index 3342d4cdc8..456278ece2 100644 --- a/modules/blob-storing-database/host/BlobStoring.Database.Host.ConsoleApp/src/BlobStoring.Database.Host.ConsoleApp.ConsoleApp/BlobStoring.Database.Host.ConsoleApp.ConsoleApp.csproj +++ b/modules/blob-storing-database/host/BlobStoring.Database.Host.ConsoleApp/src/BlobStoring.Database.Host.ConsoleApp.ConsoleApp/BlobStoring.Database.Host.ConsoleApp.ConsoleApp.csproj @@ -20,13 +20,13 @@ - - - - - - - + + + + + + + diff --git a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.Domain.Tests/Volo.Abp.BlobStoring.Database.Domain.Tests.csproj b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.Domain.Tests/Volo.Abp.BlobStoring.Database.Domain.Tests.csproj index 1308532c9b..5ca77576ca 100644 --- a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.Domain.Tests/Volo.Abp.BlobStoring.Database.Domain.Tests.csproj +++ b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.Domain.Tests/Volo.Abp.BlobStoring.Database.Domain.Tests.csproj @@ -6,7 +6,7 @@ - + diff --git a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests.csproj b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests.csproj index c0744de39f..59db9b77df 100644 --- a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests.csproj +++ b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests.csproj @@ -6,10 +6,10 @@ - - - - + + + + diff --git a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.MongoDB.Tests/Volo.Abp.BlobStoring.Database.MongoDB.Tests.csproj b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.MongoDB.Tests/Volo.Abp.BlobStoring.Database.MongoDB.Tests.csproj index 9d86889926..3c891425af 100644 --- a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.MongoDB.Tests/Volo.Abp.BlobStoring.Database.MongoDB.Tests.csproj +++ b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.MongoDB.Tests/Volo.Abp.BlobStoring.Database.MongoDB.Tests.csproj @@ -6,11 +6,11 @@ - - - - - + + + + + diff --git a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.TestBase/Volo.Abp.BlobStoring.Database.TestBase.csproj b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.TestBase/Volo.Abp.BlobStoring.Database.TestBase.csproj index 2922195a61..6b0aea6e03 100644 --- a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.TestBase/Volo.Abp.BlobStoring.Database.TestBase.csproj +++ b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.TestBase/Volo.Abp.BlobStoring.Database.TestBase.csproj @@ -6,12 +6,12 @@ - - - - - - + + + + + + diff --git a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.csproj b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.csproj index dae004bd4e..8e7342b580 100644 --- a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.csproj +++ b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.csproj @@ -16,8 +16,8 @@ - - + + diff --git a/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj b/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj index 83d89bfdb8..0653e75c25 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj +++ b/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj @@ -15,9 +15,9 @@ - - - + + + diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj index 8c0a96fbc9..515ce2de5d 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj +++ b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj @@ -11,7 +11,7 @@ - + diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/Volo.Blogging.Admin.Web.csproj b/modules/blogging/src/Volo.Blogging.Admin.Web/Volo.Blogging.Admin.Web.csproj index b8164edd6d..c6d757172d 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Web/Volo.Blogging.Admin.Web.csproj +++ b/modules/blogging/src/Volo.Blogging.Admin.Web/Volo.Blogging.Admin.Web.csproj @@ -20,11 +20,11 @@ - + - + diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj b/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj index c4e21f3d03..2d15d02620 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj +++ b/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj @@ -11,7 +11,7 @@ - + diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo.Blogging.Domain.Shared.csproj b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo.Blogging.Domain.Shared.csproj index a60f901cd8..f8f7b3560b 100644 --- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo.Blogging.Domain.Shared.csproj +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo.Blogging.Domain.Shared.csproj @@ -21,7 +21,7 @@ - + diff --git a/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.csproj b/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.csproj index 3fa4dd5309..84891ab800 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.csproj +++ b/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.csproj @@ -20,11 +20,11 @@ - + - + diff --git a/modules/blogging/test/Volo.Blogging.Application.Tests/Volo.Blogging.Application.Tests.csproj b/modules/blogging/test/Volo.Blogging.Application.Tests/Volo.Blogging.Application.Tests.csproj index 8df1940b6f..1d9f0b810d 100644 --- a/modules/blogging/test/Volo.Blogging.Application.Tests/Volo.Blogging.Application.Tests.csproj +++ b/modules/blogging/test/Volo.Blogging.Application.Tests/Volo.Blogging.Application.Tests.csproj @@ -6,7 +6,7 @@ - + diff --git a/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo.Blogging.Domain.Tests.csproj b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo.Blogging.Domain.Tests.csproj index 199b78c645..e379b5b016 100644 --- a/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo.Blogging.Domain.Tests.csproj +++ b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo.Blogging.Domain.Tests.csproj @@ -6,7 +6,7 @@ - + diff --git a/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo.Blogging.EntityFrameworkCore.Tests.csproj b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo.Blogging.EntityFrameworkCore.Tests.csproj index a9f63e4c72..1fdf71171b 100644 --- a/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo.Blogging.EntityFrameworkCore.Tests.csproj +++ b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo.Blogging.EntityFrameworkCore.Tests.csproj @@ -12,7 +12,7 @@ - + diff --git a/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo.Blogging.MongoDB.Tests.csproj b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo.Blogging.MongoDB.Tests.csproj index 589515ba00..e52a6dceb0 100644 --- a/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo.Blogging.MongoDB.Tests.csproj +++ b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo.Blogging.MongoDB.Tests.csproj @@ -6,11 +6,11 @@ - - - - - + + + + + diff --git a/modules/blogging/test/Volo.Blogging.TestBase/Volo.Blogging.TestBase.csproj b/modules/blogging/test/Volo.Blogging.TestBase/Volo.Blogging.TestBase.csproj index 4e3a30c52f..432081645b 100644 --- a/modules/blogging/test/Volo.Blogging.TestBase/Volo.Blogging.TestBase.csproj +++ b/modules/blogging/test/Volo.Blogging.TestBase/Volo.Blogging.TestBase.csproj @@ -12,12 +12,12 @@ - - - - - - + + + + + + diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj index 12d3f88584..0af72b5fbe 100644 --- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj +++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj @@ -9,8 +9,8 @@ - - + + diff --git a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Volo.CmsKit.HttpApi.Host.csproj b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Volo.CmsKit.HttpApi.Host.csproj index 5eff10f819..406fb16a62 100644 --- a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Volo.CmsKit.HttpApi.Host.csproj +++ b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Volo.CmsKit.HttpApi.Host.csproj @@ -8,13 +8,13 @@ - - - - - - - + + + + + + + diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Volo.CmsKit.IdentityServer.csproj b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Volo.CmsKit.IdentityServer.csproj index 0536e87c39..193dc4b29b 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Volo.CmsKit.IdentityServer.csproj +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Volo.CmsKit.IdentityServer.csproj @@ -8,11 +8,11 @@ - - - - - + + + + + diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/Volo.CmsKit.Web.Host.csproj b/modules/cms-kit/host/Volo.CmsKit.Web.Host/Volo.CmsKit.Web.Host.csproj index c6b2c63235..7f5d887af7 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/Volo.CmsKit.Web.Host.csproj +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/Volo.CmsKit.Web.Host.csproj @@ -8,11 +8,11 @@ - - - - - + + + + + diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Volo.CmsKit.Web.Unified.csproj b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Volo.CmsKit.Web.Unified.csproj index 5246ecaae4..dd8c3e8460 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Volo.CmsKit.Web.Unified.csproj +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Volo.CmsKit.Web.Unified.csproj @@ -9,8 +9,8 @@ - - + + @@ -50,7 +50,7 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Volo.CmsKit.Admin.Web.csproj b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Volo.CmsKit.Admin.Web.csproj index 4088b03208..67b21f4f81 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Volo.CmsKit.Admin.Web.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Volo.CmsKit.Admin.Web.csproj @@ -18,7 +18,7 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj index f4f9aa9dd4..b19f0d2ed6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj @@ -19,9 +19,9 @@ - - - + + + diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo.CmsKit.Domain.Shared.csproj b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo.CmsKit.Domain.Shared.csproj index 04573c9b51..5a3bcd90d4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo.CmsKit.Domain.Shared.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo.CmsKit.Domain.Shared.csproj @@ -13,7 +13,7 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.csproj b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.csproj index eb9d74edd2..cc8cfb53b5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.csproj @@ -9,8 +9,8 @@ - - + + diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj index 6b8afae9f6..e905ec5e68 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj @@ -15,11 +15,11 @@ - - - - - + + + + + diff --git a/modules/cms-kit/src/Volo.CmsKit.Web/Volo.CmsKit.Web.csproj b/modules/cms-kit/src/Volo.CmsKit.Web/Volo.CmsKit.Web.csproj index 915c202103..bc32c8d734 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Web/Volo.CmsKit.Web.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Web/Volo.CmsKit.Web.csproj @@ -25,7 +25,7 @@ - + diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Volo.CmsKit.Application.Tests.csproj b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Volo.CmsKit.Application.Tests.csproj index 15cf80dd4e..045432f8e9 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Volo.CmsKit.Application.Tests.csproj +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Volo.CmsKit.Application.Tests.csproj @@ -12,7 +12,7 @@ - + diff --git a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Volo.CmsKit.Domain.Tests.csproj b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Volo.CmsKit.Domain.Tests.csproj index 7db274b6f1..e460903a38 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Volo.CmsKit.Domain.Tests.csproj +++ b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Volo.CmsKit.Domain.Tests.csproj @@ -6,7 +6,7 @@ - + diff --git a/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/Volo.CmsKit.EntityFrameworkCore.Tests.csproj b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/Volo.CmsKit.EntityFrameworkCore.Tests.csproj index 5af037a49b..ae28eb3937 100644 --- a/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/Volo.CmsKit.EntityFrameworkCore.Tests.csproj +++ b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/Volo.CmsKit.EntityFrameworkCore.Tests.csproj @@ -6,8 +6,8 @@ - - + + diff --git a/modules/cms-kit/test/Volo.CmsKit.HttpApi.Client.ConsoleTestApp/Volo.CmsKit.HttpApi.Client.ConsoleTestApp.csproj b/modules/cms-kit/test/Volo.CmsKit.HttpApi.Client.ConsoleTestApp/Volo.CmsKit.HttpApi.Client.ConsoleTestApp.csproj index cef7ff1e2c..56d8f1057f 100644 --- a/modules/cms-kit/test/Volo.CmsKit.HttpApi.Client.ConsoleTestApp/Volo.CmsKit.HttpApi.Client.ConsoleTestApp.csproj +++ b/modules/cms-kit/test/Volo.CmsKit.HttpApi.Client.ConsoleTestApp/Volo.CmsKit.HttpApi.Client.ConsoleTestApp.csproj @@ -20,7 +20,7 @@ - + diff --git a/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/Volo.CmsKit.MongoDB.Tests.csproj b/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/Volo.CmsKit.MongoDB.Tests.csproj index 72b6bacc0a..1bc03be9ae 100644 --- a/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/Volo.CmsKit.MongoDB.Tests.csproj +++ b/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/Volo.CmsKit.MongoDB.Tests.csproj @@ -6,11 +6,11 @@ - - - - - + + + + + diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Volo.CmsKit.TestBase.csproj b/modules/cms-kit/test/Volo.CmsKit.TestBase/Volo.CmsKit.TestBase.csproj index 2cc42ea2b6..839be10d90 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/Volo.CmsKit.TestBase.csproj +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Volo.CmsKit.TestBase.csproj @@ -6,12 +6,12 @@ - - - - - - + + + + + + diff --git a/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.csproj b/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.csproj index 4e8ccc7ad8..6372a706b4 100644 --- a/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.csproj +++ b/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.csproj @@ -16,8 +16,8 @@ - - + + diff --git a/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj b/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj index 0722834311..98b3f1ff90 100644 --- a/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj +++ b/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj @@ -18,9 +18,9 @@ - - - + + + diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo.Docs.Admin.Application.Contracts.csproj b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo.Docs.Admin.Application.Contracts.csproj index a9ebc61cb7..7114f8531e 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo.Docs.Admin.Application.Contracts.csproj +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo.Docs.Admin.Application.Contracts.csproj @@ -23,7 +23,7 @@ - + diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Volo.Docs.Admin.Web.csproj b/modules/docs/src/Volo.Docs.Admin.Web/Volo.Docs.Admin.Web.csproj index 60002f7f60..09527663c7 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Volo.Docs.Admin.Web.csproj +++ b/modules/docs/src/Volo.Docs.Admin.Web/Volo.Docs.Admin.Web.csproj @@ -15,7 +15,7 @@ - + @@ -27,7 +27,7 @@ - + diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/Volo.Docs.Domain.Shared.csproj b/modules/docs/src/Volo.Docs.Domain.Shared/Volo.Docs.Domain.Shared.csproj index 0a0f503822..10c5bbaa14 100644 --- a/modules/docs/src/Volo.Docs.Domain.Shared/Volo.Docs.Domain.Shared.csproj +++ b/modules/docs/src/Volo.Docs.Domain.Shared/Volo.Docs.Domain.Shared.csproj @@ -11,7 +11,7 @@ - + diff --git a/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj b/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj index f11082c62b..d00f51e923 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj +++ b/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj @@ -17,10 +17,10 @@ - - - - + + + + diff --git a/modules/docs/src/Volo.Docs.Web/Volo.Docs.Web.csproj b/modules/docs/src/Volo.Docs.Web/Volo.Docs.Web.csproj index a9c07ee5f0..488cbd7d17 100644 --- a/modules/docs/src/Volo.Docs.Web/Volo.Docs.Web.csproj +++ b/modules/docs/src/Volo.Docs.Web/Volo.Docs.Web.csproj @@ -21,9 +21,9 @@ - - - + + + diff --git a/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo.Docs.Admin.Application.Tests.csproj b/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo.Docs.Admin.Application.Tests.csproj index edd24a0161..a42d7da5c9 100644 --- a/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo.Docs.Admin.Application.Tests.csproj +++ b/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo.Docs.Admin.Application.Tests.csproj @@ -6,7 +6,7 @@ - + diff --git a/modules/docs/test/Volo.Docs.Application.Tests/Volo.Docs.Application.Tests.csproj b/modules/docs/test/Volo.Docs.Application.Tests/Volo.Docs.Application.Tests.csproj index af85a5c5a8..e6c22e0a20 100644 --- a/modules/docs/test/Volo.Docs.Application.Tests/Volo.Docs.Application.Tests.csproj +++ b/modules/docs/test/Volo.Docs.Application.Tests/Volo.Docs.Application.Tests.csproj @@ -6,7 +6,7 @@ - + diff --git a/modules/docs/test/Volo.Docs.Domain.Tests/Volo.Docs.Domain.Tests.csproj b/modules/docs/test/Volo.Docs.Domain.Tests/Volo.Docs.Domain.Tests.csproj index 1c7b057444..959a14fac7 100644 --- a/modules/docs/test/Volo.Docs.Domain.Tests/Volo.Docs.Domain.Tests.csproj +++ b/modules/docs/test/Volo.Docs.Domain.Tests/Volo.Docs.Domain.Tests.csproj @@ -6,7 +6,7 @@ - + diff --git a/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo.Docs.EntityFrameworkCore.Tests.csproj b/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo.Docs.EntityFrameworkCore.Tests.csproj index 0b8d381400..f6b4cfcfe4 100644 --- a/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo.Docs.EntityFrameworkCore.Tests.csproj +++ b/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo.Docs.EntityFrameworkCore.Tests.csproj @@ -6,8 +6,8 @@ - - + + diff --git a/modules/docs/test/Volo.Docs.MongoDB.Tests/Volo.Docs.MongoDB.Tests.csproj b/modules/docs/test/Volo.Docs.MongoDB.Tests/Volo.Docs.MongoDB.Tests.csproj index 377c4220af..821ffee44a 100644 --- a/modules/docs/test/Volo.Docs.MongoDB.Tests/Volo.Docs.MongoDB.Tests.csproj +++ b/modules/docs/test/Volo.Docs.MongoDB.Tests/Volo.Docs.MongoDB.Tests.csproj @@ -6,11 +6,11 @@ - - - - - + + + + + diff --git a/modules/docs/test/Volo.Docs.TestBase/Volo.Docs.TestBase.csproj b/modules/docs/test/Volo.Docs.TestBase/Volo.Docs.TestBase.csproj index 292bf29b02..9b82d26ce1 100644 --- a/modules/docs/test/Volo.Docs.TestBase/Volo.Docs.TestBase.csproj +++ b/modules/docs/test/Volo.Docs.TestBase/Volo.Docs.TestBase.csproj @@ -6,12 +6,12 @@ - - - - - - + + + + + + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo.Abp.FeatureManagement.Domain.Shared.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo.Abp.FeatureManagement.Domain.Shared.csproj index 45d88a06a8..b1f2c7faa1 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo.Abp.FeatureManagement.Domain.Shared.csproj +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo.Abp.FeatureManagement.Domain.Shared.csproj @@ -15,7 +15,7 @@ - + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo.Abp.FeatureManagement.Domain.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo.Abp.FeatureManagement.Domain.csproj index ad2fc8368b..a78f9f2d36 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo.Abp.FeatureManagement.Domain.csproj +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo.Abp.FeatureManagement.Domain.csproj @@ -19,7 +19,7 @@ - + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Volo.Abp.FeatureManagement.Web.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Volo.Abp.FeatureManagement.Web.csproj index 7870061a0e..3da708dada 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Volo.Abp.FeatureManagement.Web.csproj +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Volo.Abp.FeatureManagement.Web.csproj @@ -28,7 +28,7 @@ - + diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo.Abp.FeatureManagement.Application.Tests.csproj b/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo.Abp.FeatureManagement.Application.Tests.csproj index 81de7d43c0..8d9e570c4f 100644 --- a/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo.Abp.FeatureManagement.Application.Tests.csproj +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo.Abp.FeatureManagement.Application.Tests.csproj @@ -13,7 +13,7 @@ - + diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo.Abp.FeatureManagement.Domain.Tests.csproj b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo.Abp.FeatureManagement.Domain.Tests.csproj index 688f2f423b..8449927e7a 100644 --- a/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo.Abp.FeatureManagement.Domain.Tests.csproj +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo.Abp.FeatureManagement.Domain.Tests.csproj @@ -8,7 +8,7 @@ - + diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests.csproj b/modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests.csproj index 7367ecb756..abf92185e2 100644 --- a/modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests.csproj +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests.csproj @@ -14,8 +14,8 @@ - - + + diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.MongoDB.Tests/Volo.Abp.FeatureManagement.MongoDB.Tests.csproj b/modules/feature-management/test/Volo.Abp.FeatureManagement.MongoDB.Tests/Volo.Abp.FeatureManagement.MongoDB.Tests.csproj index f3141d6601..065eb7c06e 100644 --- a/modules/feature-management/test/Volo.Abp.FeatureManagement.MongoDB.Tests/Volo.Abp.FeatureManagement.MongoDB.Tests.csproj +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.MongoDB.Tests/Volo.Abp.FeatureManagement.MongoDB.Tests.csproj @@ -13,11 +13,11 @@ - - - - - + + + + + diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo.Abp.FeatureManagement.TestBase.csproj b/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo.Abp.FeatureManagement.TestBase.csproj index 8b1b84db73..85e88061f8 100644 --- a/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo.Abp.FeatureManagement.TestBase.csproj +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo.Abp.FeatureManagement.TestBase.csproj @@ -14,12 +14,12 @@ - - - - - - + + + + + + diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo.Abp.Identity.Domain.Shared.csproj b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo.Abp.Identity.Domain.Shared.csproj index acd8a98162..88810a15c8 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo.Abp.Identity.Domain.Shared.csproj +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo.Abp.Identity.Domain.Shared.csproj @@ -28,7 +28,7 @@ - + diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj b/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj index 5e20e76f3f..5a3aa11ea8 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj @@ -28,7 +28,7 @@ - + diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Volo.Abp.Identity.Web.csproj b/modules/identity/src/Volo.Abp.Identity.Web/Volo.Abp.Identity.Web.csproj index 3d3d2a2d6b..14aeb0e98f 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Volo.Abp.Identity.Web.csproj +++ b/modules/identity/src/Volo.Abp.Identity.Web/Volo.Abp.Identity.Web.csproj @@ -45,7 +45,7 @@ - + diff --git a/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo.Abp.Identity.Application.Tests.csproj b/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo.Abp.Identity.Application.Tests.csproj index 8fceaa5478..5c9aa60fe3 100644 --- a/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo.Abp.Identity.Application.Tests.csproj +++ b/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo.Abp.Identity.Application.Tests.csproj @@ -17,7 +17,7 @@ - + diff --git a/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo.Abp.Identity.AspNetCore.Tests.csproj b/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo.Abp.Identity.AspNetCore.Tests.csproj index 366527df65..942b19aa65 100644 --- a/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo.Abp.Identity.AspNetCore.Tests.csproj +++ b/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo.Abp.Identity.AspNetCore.Tests.csproj @@ -19,7 +19,7 @@ - + diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo.Abp.Identity.Domain.Tests.csproj b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo.Abp.Identity.Domain.Tests.csproj index ad70b8bbec..9d1799e5ac 100644 --- a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo.Abp.Identity.Domain.Tests.csproj +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo.Abp.Identity.Domain.Tests.csproj @@ -18,8 +18,8 @@ - - + + diff --git a/modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/Volo.Abp.Identity.EntityFrameworkCore.Tests.csproj b/modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/Volo.Abp.Identity.EntityFrameworkCore.Tests.csproj index 8738bed3bc..279f967d04 100644 --- a/modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/Volo.Abp.Identity.EntityFrameworkCore.Tests.csproj +++ b/modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/Volo.Abp.Identity.EntityFrameworkCore.Tests.csproj @@ -19,8 +19,8 @@ - - + + diff --git a/modules/identity/test/Volo.Abp.Identity.MongoDB.Tests/Volo.Abp.Identity.MongoDB.Tests.csproj b/modules/identity/test/Volo.Abp.Identity.MongoDB.Tests/Volo.Abp.Identity.MongoDB.Tests.csproj index 93702d89cf..53277e236b 100644 --- a/modules/identity/test/Volo.Abp.Identity.MongoDB.Tests/Volo.Abp.Identity.MongoDB.Tests.csproj +++ b/modules/identity/test/Volo.Abp.Identity.MongoDB.Tests/Volo.Abp.Identity.MongoDB.Tests.csproj @@ -19,11 +19,11 @@ - - - - - + + + + + diff --git a/modules/identity/test/Volo.Abp.Identity.TestBase/Volo.Abp.Identity.TestBase.csproj b/modules/identity/test/Volo.Abp.Identity.TestBase/Volo.Abp.Identity.TestBase.csproj index d7b1b1e03d..7e7b09e0a8 100644 --- a/modules/identity/test/Volo.Abp.Identity.TestBase/Volo.Abp.Identity.TestBase.csproj +++ b/modules/identity/test/Volo.Abp.Identity.TestBase/Volo.Abp.Identity.TestBase.csproj @@ -19,12 +19,12 @@ - - - - - - + + + + + + diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo.Abp.IdentityServer.Domain.csproj b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo.Abp.IdentityServer.Domain.csproj index a24b083032..8adcd1b64e 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo.Abp.IdentityServer.Domain.csproj +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo.Abp.IdentityServer.Domain.csproj @@ -25,8 +25,8 @@ - - + + diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo.Abp.IdentityServer.Domain.Tests.csproj b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo.Abp.IdentityServer.Domain.Tests.csproj index 2500f0a183..9182b5c000 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo.Abp.IdentityServer.Domain.Tests.csproj +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo.Abp.IdentityServer.Domain.Tests.csproj @@ -17,7 +17,7 @@ - + diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests.csproj b/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests.csproj index 70ae31a885..544010110e 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests.csproj +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests.csproj @@ -20,12 +20,12 @@ - - - - - - + + + + + + diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo.Abp.IdentityServer.MongoDB.Tests.csproj b/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo.Abp.IdentityServer.MongoDB.Tests.csproj index 8ad82f76fc..18b4e020cd 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo.Abp.IdentityServer.MongoDB.Tests.csproj +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo.Abp.IdentityServer.MongoDB.Tests.csproj @@ -19,11 +19,11 @@ - - - - - + + + + + diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo.Abp.IdentityServer.TestBase.csproj b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo.Abp.IdentityServer.TestBase.csproj index dc549e0662..01ba3c46be 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo.Abp.IdentityServer.TestBase.csproj +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo.Abp.IdentityServer.TestBase.csproj @@ -19,12 +19,12 @@ - - - - - - + + + + + + diff --git a/modules/openiddict/app/OpenIddict.Demo.API/OpenIddict.Demo.API.csproj b/modules/openiddict/app/OpenIddict.Demo.API/OpenIddict.Demo.API.csproj index e14b166962..a04d196bf0 100644 --- a/modules/openiddict/app/OpenIddict.Demo.API/OpenIddict.Demo.API.csproj +++ b/modules/openiddict/app/OpenIddict.Demo.API/OpenIddict.Demo.API.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/modules/openiddict/app/OpenIddict.Demo.Client.BlazorWASM/OpenIddict.Demo.Client.BlazorWASM.csproj b/modules/openiddict/app/OpenIddict.Demo.Client.BlazorWASM/OpenIddict.Demo.Client.BlazorWASM.csproj index 7589dc62e8..36e3fbc1e2 100644 --- a/modules/openiddict/app/OpenIddict.Demo.Client.BlazorWASM/OpenIddict.Demo.Client.BlazorWASM.csproj +++ b/modules/openiddict/app/OpenIddict.Demo.Client.BlazorWASM/OpenIddict.Demo.Client.BlazorWASM.csproj @@ -7,10 +7,10 @@ - - - - + + + + diff --git a/modules/openiddict/app/OpenIddict.Demo.Client.Console/OpenIddict.Demo.Client.Console.csproj b/modules/openiddict/app/OpenIddict.Demo.Client.Console/OpenIddict.Demo.Client.Console.csproj index c7ba4e0c12..df2cf07651 100644 --- a/modules/openiddict/app/OpenIddict.Demo.Client.Console/OpenIddict.Demo.Client.Console.csproj +++ b/modules/openiddict/app/OpenIddict.Demo.Client.Console/OpenIddict.Demo.Client.Console.csproj @@ -8,7 +8,7 @@ - + diff --git a/modules/openiddict/app/OpenIddict.Demo.Client.Mvc/OpenIddict.Demo.Client.Mvc.csproj b/modules/openiddict/app/OpenIddict.Demo.Client.Mvc/OpenIddict.Demo.Client.Mvc.csproj index 7eac723e0f..de9010eadf 100644 --- a/modules/openiddict/app/OpenIddict.Demo.Client.Mvc/OpenIddict.Demo.Client.Mvc.csproj +++ b/modules/openiddict/app/OpenIddict.Demo.Client.Mvc/OpenIddict.Demo.Client.Mvc.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/modules/openiddict/app/OpenIddict.Demo.Server/OpenIddict.Demo.Server.csproj b/modules/openiddict/app/OpenIddict.Demo.Server/OpenIddict.Demo.Server.csproj index 22badfc612..eef34f037a 100644 --- a/modules/openiddict/app/OpenIddict.Demo.Server/OpenIddict.Demo.Server.csproj +++ b/modules/openiddict/app/OpenIddict.Demo.Server/OpenIddict.Demo.Server.csproj @@ -65,8 +65,8 @@ - - + + runtime; build; native; contentfiles; analyzers compile; contentFiles; build; buildMultitargeting; buildTransitive; analyzers; native diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo.Abp.OpenIddict.AspNetCore.csproj b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo.Abp.OpenIddict.AspNetCore.csproj index d914251edd..3abe215eaf 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo.Abp.OpenIddict.AspNetCore.csproj +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo.Abp.OpenIddict.AspNetCore.csproj @@ -20,8 +20,8 @@ - - - + + + diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo.Abp.OpenIddict.Domain.Shared.csproj b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo.Abp.OpenIddict.Domain.Shared.csproj index 6cd215abbb..af678beb83 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo.Abp.OpenIddict.Domain.Shared.csproj +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo.Abp.OpenIddict.Domain.Shared.csproj @@ -14,8 +14,8 @@ - - + + diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo.Abp.OpenIddict.Domain.csproj b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo.Abp.OpenIddict.Domain.csproj index 70b81ee6a7..abb764270e 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo.Abp.OpenIddict.Domain.csproj +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo.Abp.OpenIddict.Domain.csproj @@ -17,7 +17,7 @@ - + diff --git a/modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Volo.Abp.OpenIddict.Domain.Tests.csproj b/modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Volo.Abp.OpenIddict.Domain.Tests.csproj index 98c91e172d..89dbebe707 100644 --- a/modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Volo.Abp.OpenIddict.Domain.Tests.csproj +++ b/modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Volo.Abp.OpenIddict.Domain.Tests.csproj @@ -8,7 +8,7 @@ - + diff --git a/modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests.csproj b/modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests.csproj index 6eafc81a00..7641653d34 100644 --- a/modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests.csproj +++ b/modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests.csproj @@ -8,7 +8,7 @@ - + diff --git a/modules/openiddict/test/Volo.Abp.OpenIddict.MongoDB.Tests/Volo.Abp.OpenIddict.MongoDB.Tests.csproj b/modules/openiddict/test/Volo.Abp.OpenIddict.MongoDB.Tests/Volo.Abp.OpenIddict.MongoDB.Tests.csproj index 1c597e38b1..0f34eb5279 100644 --- a/modules/openiddict/test/Volo.Abp.OpenIddict.MongoDB.Tests/Volo.Abp.OpenIddict.MongoDB.Tests.csproj +++ b/modules/openiddict/test/Volo.Abp.OpenIddict.MongoDB.Tests/Volo.Abp.OpenIddict.MongoDB.Tests.csproj @@ -8,11 +8,11 @@ - - - - - + + + + + diff --git a/modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/Volo.Abp.OpenIddict.TestBase.csproj b/modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/Volo.Abp.OpenIddict.TestBase.csproj index 909825bd16..e37ded9c20 100644 --- a/modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/Volo.Abp.OpenIddict.TestBase.csproj +++ b/modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/Volo.Abp.OpenIddict.TestBase.csproj @@ -8,13 +8,13 @@ - - - - - - - + + + + + + + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo.Abp.PermissionManagement.Domain.Shared.csproj b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo.Abp.PermissionManagement.Domain.Shared.csproj index 3f4e1bccef..d51b4c0d6b 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo.Abp.PermissionManagement.Domain.Shared.csproj +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo.Abp.PermissionManagement.Domain.Shared.csproj @@ -25,7 +25,7 @@ - + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo.Abp.PermissionManagement.Domain.csproj b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo.Abp.PermissionManagement.Domain.csproj index abc0cbd6cd..da302b957f 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo.Abp.PermissionManagement.Domain.csproj +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo.Abp.PermissionManagement.Domain.csproj @@ -24,7 +24,7 @@ - + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Volo.Abp.PermissionManagement.Web.csproj b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Volo.Abp.PermissionManagement.Web.csproj index 57c21c363d..25cb96d41f 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Volo.Abp.PermissionManagement.Web.csproj +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Volo.Abp.PermissionManagement.Web.csproj @@ -35,7 +35,7 @@ - + diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/Volo.Abp.PermissionManagement.Application.Tests.csproj b/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/Volo.Abp.PermissionManagement.Application.Tests.csproj index 6549f25577..5b0cee6811 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/Volo.Abp.PermissionManagement.Application.Tests.csproj +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/Volo.Abp.PermissionManagement.Application.Tests.csproj @@ -5,7 +5,7 @@ - + diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Domain.Tests/Volo.Abp.PermissionManagement.Domain.Tests.csproj b/modules/permission-management/test/Volo.Abp.PermissionManagement.Domain.Tests/Volo.Abp.PermissionManagement.Domain.Tests.csproj index 1446f772a2..6e9a4482fe 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.Domain.Tests/Volo.Abp.PermissionManagement.Domain.Tests.csproj +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Domain.Tests/Volo.Abp.PermissionManagement.Domain.Tests.csproj @@ -19,8 +19,8 @@ - - + + diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.EntityFrameworkCore.Tests/Volo.Abp.PermissionManagement.EntityFrameworkCore.Tests.csproj b/modules/permission-management/test/Volo.Abp.PermissionManagement.EntityFrameworkCore.Tests/Volo.Abp.PermissionManagement.EntityFrameworkCore.Tests.csproj index 18f43dd8f1..557b11da6e 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.EntityFrameworkCore.Tests/Volo.Abp.PermissionManagement.EntityFrameworkCore.Tests.csproj +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.EntityFrameworkCore.Tests/Volo.Abp.PermissionManagement.EntityFrameworkCore.Tests.csproj @@ -18,8 +18,8 @@ - - + + diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.MongoDB.Tests/Volo.Abp.PermissionManagement.MongoDB.Tests.csproj b/modules/permission-management/test/Volo.Abp.PermissionManagement.MongoDB.Tests/Volo.Abp.PermissionManagement.MongoDB.Tests.csproj index cf4d733096..b1df40a0ba 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.MongoDB.Tests/Volo.Abp.PermissionManagement.MongoDB.Tests.csproj +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.MongoDB.Tests/Volo.Abp.PermissionManagement.MongoDB.Tests.csproj @@ -18,11 +18,11 @@ - - - - - + + + + + diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/Volo.Abp.PermissionManagement.TestBase.csproj b/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/Volo.Abp.PermissionManagement.TestBase.csproj index 3e8ddca154..3875a2d53a 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/Volo.Abp.PermissionManagement.TestBase.csproj +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/Volo.Abp.PermissionManagement.TestBase.csproj @@ -18,12 +18,12 @@ - - - - - - + + + + + + diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Volo.Abp.SettingManagement.DemoApp.csproj b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Volo.Abp.SettingManagement.DemoApp.csproj index 89c74be4cc..cdfcce8920 100644 --- a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Volo.Abp.SettingManagement.DemoApp.csproj +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Volo.Abp.SettingManagement.DemoApp.csproj @@ -9,10 +9,10 @@ - - - - + + + + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo.Abp.SettingManagement.Domain.Shared.csproj b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo.Abp.SettingManagement.Domain.Shared.csproj index 650ba4ec2a..a2fc69ee1a 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo.Abp.SettingManagement.Domain.Shared.csproj +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo.Abp.SettingManagement.Domain.Shared.csproj @@ -21,7 +21,7 @@ - + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo.Abp.SettingManagement.Domain.csproj b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo.Abp.SettingManagement.Domain.csproj index 6675dd2914..6ea7d63c35 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo.Abp.SettingManagement.Domain.csproj +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo.Abp.SettingManagement.Domain.csproj @@ -23,7 +23,7 @@ - + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Volo.Abp.SettingManagement.Web.csproj b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Volo.Abp.SettingManagement.Web.csproj index ba58d86251..025368fef1 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Volo.Abp.SettingManagement.Web.csproj +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Volo.Abp.SettingManagement.Web.csproj @@ -23,7 +23,7 @@ - + diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests.csproj b/modules/setting-management/test/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests.csproj index 9071bef63e..613cab8289 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests.csproj +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests.csproj @@ -18,7 +18,7 @@ - + diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.MongoDB.Tests/Volo.Abp.SettingManagement.MongoDB.Tests.csproj b/modules/setting-management/test/Volo.Abp.SettingManagement.MongoDB.Tests/Volo.Abp.SettingManagement.MongoDB.Tests.csproj index c28ec87771..417b689ec1 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.MongoDB.Tests/Volo.Abp.SettingManagement.MongoDB.Tests.csproj +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.MongoDB.Tests/Volo.Abp.SettingManagement.MongoDB.Tests.csproj @@ -17,11 +17,11 @@ - - - - - + + + + + diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/Volo.Abp.SettingManagement.TestBase.csproj b/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/Volo.Abp.SettingManagement.TestBase.csproj index d0b7a81b99..d68afd9a58 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/Volo.Abp.SettingManagement.TestBase.csproj +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/Volo.Abp.SettingManagement.TestBase.csproj @@ -18,12 +18,12 @@ - - - - - - + + + + + + diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo.Abp.SettingManagement.Tests.csproj b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo.Abp.SettingManagement.Tests.csproj index 4df24b0e5d..c5201187e1 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo.Abp.SettingManagement.Tests.csproj +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo.Abp.SettingManagement.Tests.csproj @@ -17,7 +17,7 @@ - + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo.Abp.TenantManagement.Domain.Shared.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo.Abp.TenantManagement.Domain.Shared.csproj index a7cddd82b9..5703cad735 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo.Abp.TenantManagement.Domain.Shared.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo.Abp.TenantManagement.Domain.Shared.csproj @@ -26,7 +26,7 @@ - + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Volo.Abp.TenantManagement.Web.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Volo.Abp.TenantManagement.Web.csproj index 7af26d92b2..3eaf89d80f 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Volo.Abp.TenantManagement.Web.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Volo.Abp.TenantManagement.Web.csproj @@ -39,7 +39,7 @@ - + diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/Volo.Abp.TenantManagement.Application.Tests.csproj b/modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/Volo.Abp.TenantManagement.Application.Tests.csproj index 64080531e1..b3c65da569 100644 --- a/modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/Volo.Abp.TenantManagement.Application.Tests.csproj +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/Volo.Abp.TenantManagement.Application.Tests.csproj @@ -17,7 +17,7 @@ - + diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo.Abp.TenantManagement.Domain.Tests.csproj b/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo.Abp.TenantManagement.Domain.Tests.csproj index cecff58fae..1dec079046 100644 --- a/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo.Abp.TenantManagement.Domain.Tests.csproj +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo.Abp.TenantManagement.Domain.Tests.csproj @@ -6,7 +6,7 @@ - + diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests.csproj b/modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests.csproj index 71b1dc7fff..ecbdecb242 100644 --- a/modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests.csproj +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests.csproj @@ -18,8 +18,8 @@ - - + + diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.MongoDB.Tests/Volo.Abp.TenantManagement.MongoDB.Tests.csproj b/modules/tenant-management/test/Volo.Abp.TenantManagement.MongoDB.Tests/Volo.Abp.TenantManagement.MongoDB.Tests.csproj index 968385c7ef..ab7113944a 100644 --- a/modules/tenant-management/test/Volo.Abp.TenantManagement.MongoDB.Tests/Volo.Abp.TenantManagement.MongoDB.Tests.csproj +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.MongoDB.Tests/Volo.Abp.TenantManagement.MongoDB.Tests.csproj @@ -17,11 +17,11 @@ - - - - - + + + + + diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/Volo.Abp.TenantManagement.TestBase.csproj b/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/Volo.Abp.TenantManagement.TestBase.csproj index 036f84329b..601af67523 100644 --- a/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/Volo.Abp.TenantManagement.TestBase.csproj +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/Volo.Abp.TenantManagement.TestBase.csproj @@ -18,12 +18,12 @@ - - - - - - + + + + + + diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/Volo.Abp.VirtualFileExplorer.DemoApp.csproj b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/Volo.Abp.VirtualFileExplorer.DemoApp.csproj index 1f475eb407..e6682e8200 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/Volo.Abp.VirtualFileExplorer.DemoApp.csproj +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/Volo.Abp.VirtualFileExplorer.DemoApp.csproj @@ -6,9 +6,9 @@ - - - + + + diff --git a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Volo.Abp.VirtualFileExplorer.Web.csproj b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Volo.Abp.VirtualFileExplorer.Web.csproj index 58ab53db28..a64ef7603f 100644 --- a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Volo.Abp.VirtualFileExplorer.Web.csproj +++ b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Volo.Abp.VirtualFileExplorer.Web.csproj @@ -34,7 +34,7 @@ - + diff --git a/templates/Directory.Packages.props b/templates/Directory.Packages.props new file mode 100644 index 0000000000..c416fb784b --- /dev/null +++ b/templates/Directory.Packages.props @@ -0,0 +1,5 @@ + + + false + + \ No newline at end of file diff --git a/test/AbpPerfTest/AbpPerfTest.WithAbp/AbpPerfTest.WithAbp.csproj b/test/AbpPerfTest/AbpPerfTest.WithAbp/AbpPerfTest.WithAbp.csproj index 49bfdba559..364987cb4c 100644 --- a/test/AbpPerfTest/AbpPerfTest.WithAbp/AbpPerfTest.WithAbp.csproj +++ b/test/AbpPerfTest/AbpPerfTest.WithAbp/AbpPerfTest.WithAbp.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/test/AbpPerfTest/AbpPerfTest.WithoutAbp/AbpPerfTest.WithoutAbp.csproj b/test/AbpPerfTest/AbpPerfTest.WithoutAbp/AbpPerfTest.WithoutAbp.csproj index 83ed8674b3..878fe0f1b7 100644 --- a/test/AbpPerfTest/AbpPerfTest.WithoutAbp/AbpPerfTest.WithoutAbp.csproj +++ b/test/AbpPerfTest/AbpPerfTest.WithoutAbp/AbpPerfTest.WithoutAbp.csproj @@ -5,11 +5,11 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/test/DistEvents/DistDemoApp.EfCoreRabbitMq/DistDemoApp.EfCoreRabbitMq.csproj b/test/DistEvents/DistDemoApp.EfCoreRabbitMq/DistDemoApp.EfCoreRabbitMq.csproj index 94c21254e1..440fc82aee 100644 --- a/test/DistEvents/DistDemoApp.EfCoreRabbitMq/DistDemoApp.EfCoreRabbitMq.csproj +++ b/test/DistEvents/DistDemoApp.EfCoreRabbitMq/DistDemoApp.EfCoreRabbitMq.csproj @@ -13,7 +13,7 @@ - + runtime; build; native; contentfiles; analyzers compile; contentFiles; build; buildMultitargeting; buildTransitive; analyzers; native diff --git a/test/DistEvents/DistDemoApp.Shared/DistDemoApp.Shared.csproj b/test/DistEvents/DistDemoApp.Shared/DistDemoApp.Shared.csproj index 8130fdb38f..936f29d9ec 100644 --- a/test/DistEvents/DistDemoApp.Shared/DistDemoApp.Shared.csproj +++ b/test/DistEvents/DistDemoApp.Shared/DistDemoApp.Shared.csproj @@ -6,12 +6,12 @@ - - - - - - + + + + + + diff --git a/tools/localization-key-synchronizer/src/LocalizationKeySynchronizer.csproj b/tools/localization-key-synchronizer/src/LocalizationKeySynchronizer.csproj index 0ea2261956..c5f6097cb6 100644 --- a/tools/localization-key-synchronizer/src/LocalizationKeySynchronizer.csproj +++ b/tools/localization-key-synchronizer/src/LocalizationKeySynchronizer.csproj @@ -8,8 +8,8 @@ - - + + From 975bf0ce9c90b9a9573062bafa03e48d6441ddec Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 16 Oct 2023 14:34:54 +0800 Subject: [PATCH 13/70] Abstract all db-related unit tests. Resolve #17488 --- .../MyProjectNameApplicationCollection.cs | 10 ---- .../MyProjectNameApplicationTestModule.cs | 2 +- .../Samples/SampleAppServiceTests.cs | 7 ++- ...panyName.MyProjectName.Domain.Tests.csproj | 5 +- .../MyProjectNameDomainCollection.cs | 10 ---- .../MyProjectNameDomainTestModule.cs | 8 +-- .../Samples/SampleDomainTests.cs | 6 +- .../EfCoreSampleAppServiceTests.cs | 10 ++++ .../Domains/EfCoreSampleDomainTests.cs | 10 ++++ ...rojectNameEntityFrameworkCoreTestModule.cs | 2 +- ...ojectName.EntityFrameworkCore.Tests.csproj | 2 +- .../MongoDBSampleAppServiceTests.cs | 11 ++++ .../Domains/MongoDBSampleDomainTests.cs | 10 ++++ .../MongoDb/MyProjectNameMongoDbTestModule.cs | 4 +- ...anyName.MyProjectName.MongoDB.Tests.csproj | 2 +- ...yCompanyName.MyProjectName.TestBase.csproj | 2 +- .../MyProjectNameTestBaseModule.cs | 7 +-- ...CompanyName.MyProjectName.Web.Tests.csproj | 1 + .../MyProjectNameWebCollection.cs | 10 ---- .../MyProjectNameWebTestModule.cs | 4 +- .../Pages/Index_Tests.cs | 1 - .../WebContentDirectoryFinder.cs | 59 ------------------- 22 files changed, 68 insertions(+), 115 deletions(-) delete mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationCollection.cs delete mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainCollection.cs create mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/Applications/EfCoreSampleAppServiceTests.cs create mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/Domains/EfCoreSampleDomainTests.cs create mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/Applications/MongoDBSampleAppServiceTests.cs create mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/Domains/MongoDBSampleDomainTests.cs delete mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebCollection.cs delete mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/WebContentDirectoryFinder.cs diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationCollection.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationCollection.cs deleted file mode 100644 index 89f3adcb06..0000000000 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationCollection.cs +++ /dev/null @@ -1,10 +0,0 @@ -using MyCompanyName.MyProjectName.EntityFrameworkCore; -using Xunit; - -namespace MyCompanyName.MyProjectName; - -[CollectionDefinition(MyProjectNameTestConsts.CollectionDefinitionName)] -public class MyProjectNameApplicationCollection : MyProjectNameEntityFrameworkCoreCollectionFixtureBase -{ - -} diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationTestModule.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationTestModule.cs index 95ba50122b..9903158828 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationTestModule.cs +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationTestModule.cs @@ -5,7 +5,7 @@ namespace MyCompanyName.MyProjectName; [DependsOn( typeof(MyProjectNameApplicationModule), typeof(MyProjectNameDomainTestModule) - )] +)] public class MyProjectNameApplicationTestModule : AbpModule { diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/Samples/SampleAppServiceTests.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/Samples/SampleAppServiceTests.cs index 1fa30d115a..c4baf0d4f3 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/Samples/SampleAppServiceTests.cs +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/Samples/SampleAppServiceTests.cs @@ -1,6 +1,7 @@ using Shouldly; using System.Threading.Tasks; using Volo.Abp.Identity; +using Volo.Abp.Modularity; using Xunit; namespace MyCompanyName.MyProjectName.Samples; @@ -10,12 +11,12 @@ namespace MyCompanyName.MyProjectName.Samples; * (like IIdentityUserAppService here). * Only test your own application services. */ -[Collection(MyProjectNameTestConsts.CollectionDefinitionName)] -public class SampleAppServiceTests : MyProjectNameApplicationTestBase +public abstract class SampleAppServiceTests : MyProjectNameTestBase + where TStartupModule : IAbpModule { private readonly IIdentityUserAppService _userAppService; - public SampleAppServiceTests() + protected SampleAppServiceTests() { _userAppService = GetRequiredService(); } diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyCompanyName.MyProjectName.Domain.Tests.csproj b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyCompanyName.MyProjectName.Domain.Tests.csproj index fadb31f943..0907ac6df0 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyCompanyName.MyProjectName.Domain.Tests.csproj +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyCompanyName.MyProjectName.Domain.Tests.csproj @@ -9,11 +9,12 @@ - + - + + diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainCollection.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainCollection.cs deleted file mode 100644 index b09e099e9a..0000000000 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainCollection.cs +++ /dev/null @@ -1,10 +0,0 @@ -using MyCompanyName.MyProjectName.EntityFrameworkCore; -using Xunit; - -namespace MyCompanyName.MyProjectName; - -[CollectionDefinition(MyProjectNameTestConsts.CollectionDefinitionName)] -public class MyProjectNameDomainCollection : MyProjectNameEntityFrameworkCoreCollectionFixtureBase -{ - -} diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestModule.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestModule.cs index 340c63cc8b..695903e189 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestModule.cs +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestModule.cs @@ -1,11 +1,11 @@ -using MyCompanyName.MyProjectName.EntityFrameworkCore; -using Volo.Abp.Modularity; +using Volo.Abp.Modularity; namespace MyCompanyName.MyProjectName; [DependsOn( - typeof(MyProjectNameEntityFrameworkCoreTestModule) - )] + typeof(MyProjectNameDomainModule), + typeof(MyProjectNameTestBaseModule) +)] public class MyProjectNameDomainTestModule : AbpModule { diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Samples/SampleDomainTests.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Samples/SampleDomainTests.cs index 1578cd4feb..cf411cf411 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Samples/SampleDomainTests.cs +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Samples/SampleDomainTests.cs @@ -1,6 +1,7 @@ using System.Threading.Tasks; using Shouldly; using Volo.Abp.Identity; +using Volo.Abp.Modularity; using Xunit; namespace MyCompanyName.MyProjectName.Samples; @@ -11,12 +12,13 @@ namespace MyCompanyName.MyProjectName.Samples; * Only test your own domain services. */ [Collection(MyProjectNameTestConsts.CollectionDefinitionName)] -public class SampleDomainTests : MyProjectNameDomainTestBase +public abstract class SampleDomainTests : MyProjectNameTestBase + where TStartupModule : IAbpModule { private readonly IIdentityUserRepository _identityUserRepository; private readonly IdentityUserManager _identityUserManager; - public SampleDomainTests() + protected SampleDomainTests() { _identityUserRepository = GetRequiredService(); _identityUserManager = GetRequiredService(); diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/Applications/EfCoreSampleAppServiceTests.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/Applications/EfCoreSampleAppServiceTests.cs new file mode 100644 index 0000000000..3908c7430b --- /dev/null +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/Applications/EfCoreSampleAppServiceTests.cs @@ -0,0 +1,10 @@ +using MyCompanyName.MyProjectName.Samples; +using Xunit; + +namespace MyCompanyName.MyProjectName.EntityFrameworkCore.Applications; + +[Collection(MyProjectNameTestConsts.CollectionDefinitionName)] +public class EfCoreSampleAppServiceTests : SampleAppServiceTests +{ + +} diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/Domains/EfCoreSampleDomainTests.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/Domains/EfCoreSampleDomainTests.cs new file mode 100644 index 0000000000..1d1b1054f8 --- /dev/null +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/Domains/EfCoreSampleDomainTests.cs @@ -0,0 +1,10 @@ +using MyCompanyName.MyProjectName.Samples; +using Xunit; + +namespace MyCompanyName.MyProjectName.EntityFrameworkCore.Domains; + +[Collection(MyProjectNameTestConsts.CollectionDefinitionName)] +public class EfCoreSampleDomainTests : SampleDomainTests +{ + +} diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs index 2f5d456244..1804d8cff7 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs @@ -14,8 +14,8 @@ using Volo.Abp.Uow; namespace MyCompanyName.MyProjectName.EntityFrameworkCore; [DependsOn( + typeof(MyProjectNameApplicationTestModule), typeof(MyProjectNameEntityFrameworkCoreModule), - typeof(MyProjectNameTestBaseModule), typeof(AbpEntityFrameworkCoreSqliteModule) )] public class MyProjectNameEntityFrameworkCoreTestModule : AbpModule diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj index f12e37d0b7..591cb81f35 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj @@ -10,7 +10,7 @@ - + diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/Applications/MongoDBSampleAppServiceTests.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/Applications/MongoDBSampleAppServiceTests.cs new file mode 100644 index 0000000000..c455d81e96 --- /dev/null +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/Applications/MongoDBSampleAppServiceTests.cs @@ -0,0 +1,11 @@ +using MyCompanyName.MyProjectName.MongoDB; +using MyCompanyName.MyProjectName.Samples; +using Xunit; + +namespace MyCompanyName.MyProjectName.MongoDb.Applications; + +[Collection(MyProjectNameTestConsts.CollectionDefinitionName)] +public class MongoDBSampleAppServiceTests : SampleAppServiceTests +{ + +} diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/Domains/MongoDBSampleDomainTests.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/Domains/MongoDBSampleDomainTests.cs new file mode 100644 index 0000000000..8a6fc63b91 --- /dev/null +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/Domains/MongoDBSampleDomainTests.cs @@ -0,0 +1,10 @@ +using MyCompanyName.MyProjectName.Samples; +using Xunit; + +namespace MyCompanyName.MyProjectName.MongoDB.Domains; + +[Collection(MyProjectNameTestConsts.CollectionDefinitionName)] +public class MongoDBSampleDomainTests : SampleDomainTests +{ + +} diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/MyProjectNameMongoDbTestModule.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/MyProjectNameMongoDbTestModule.cs index 6218a3030b..b2b1a931b7 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/MyProjectNameMongoDbTestModule.cs +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDb/MyProjectNameMongoDbTestModule.cs @@ -5,9 +5,9 @@ using Volo.Abp.Modularity; namespace MyCompanyName.MyProjectName.MongoDB; [DependsOn( - typeof(MyProjectNameTestBaseModule), + typeof(MyProjectNameApplicationTestModule), typeof(MyProjectNameMongoDbModule) - )] +)] public class MyProjectNameMongoDbTestModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MyCompanyName.MyProjectName.MongoDB.Tests.csproj b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MyCompanyName.MyProjectName.MongoDB.Tests.csproj index 1dcc1dd196..94a4a96721 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MyCompanyName.MyProjectName.MongoDB.Tests.csproj +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MyCompanyName.MyProjectName.MongoDB.Tests.csproj @@ -10,7 +10,7 @@ - + diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyCompanyName.MyProjectName.TestBase.csproj b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyCompanyName.MyProjectName.TestBase.csproj index 988b45b0bc..457ce53b2a 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyCompanyName.MyProjectName.TestBase.csproj +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyCompanyName.MyProjectName.TestBase.csproj @@ -12,7 +12,7 @@ - + diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBaseModule.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBaseModule.cs index 924ee6eb79..4832f18293 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBaseModule.cs +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBaseModule.cs @@ -13,15 +13,10 @@ namespace MyCompanyName.MyProjectName; typeof(AbpAutofacModule), typeof(AbpTestBaseModule), typeof(AbpAuthorizationModule), - typeof(MyProjectNameDomainModule) + typeof(AbpBackgroundJobsAbstractionsModule) )] public class MyProjectNameTestBaseModule : AbpModule { - public override void PreConfigureServices(ServiceConfigurationContext context) - { - - } - public override void ConfigureServices(ServiceConfigurationContext context) { Configure(options => diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyCompanyName.MyProjectName.Web.Tests.csproj b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyCompanyName.MyProjectName.Web.Tests.csproj index d6eba699a4..98470b1fa5 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyCompanyName.MyProjectName.Web.Tests.csproj +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyCompanyName.MyProjectName.Web.Tests.csproj @@ -19,6 +19,7 @@ + diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebCollection.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebCollection.cs deleted file mode 100644 index 36ff0836c2..0000000000 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebCollection.cs +++ /dev/null @@ -1,10 +0,0 @@ -using MyCompanyName.MyProjectName.EntityFrameworkCore; -using Xunit; - -namespace MyCompanyName.MyProjectName; - -[CollectionDefinition(MyProjectNameTestConsts.CollectionDefinitionName)] -public class MyProjectNameWebCollection : MyProjectNameEntityFrameworkCoreCollectionFixtureBase -{ - -} diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebTestModule.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebTestModule.cs index cc5450d0d8..34a9b32c8d 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebTestModule.cs +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebTestModule.cs @@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Localization; using Microsoft.AspNetCore.Mvc.ApplicationParts; using Microsoft.Extensions.DependencyInjection; +using MyCompanyName.MyProjectName.EntityFrameworkCore; using MyCompanyName.MyProjectName.Localization; using MyCompanyName.MyProjectName.Web; using MyCompanyName.MyProjectName.Web.Menus; @@ -20,7 +21,8 @@ namespace MyCompanyName.MyProjectName; [DependsOn( typeof(AbpAspNetCoreTestBaseModule), typeof(MyProjectNameWebModule), - typeof(MyProjectNameApplicationTestModule) + typeof(MyProjectNameApplicationTestModule), + typeof(MyProjectNameEntityFrameworkCoreTestModule) )] public class MyProjectNameWebTestModule : AbpModule { diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/Pages/Index_Tests.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/Pages/Index_Tests.cs index 9958e8a71a..f72b526e0e 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/Pages/Index_Tests.cs +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/Pages/Index_Tests.cs @@ -4,7 +4,6 @@ using Xunit; namespace MyCompanyName.MyProjectName.Pages; -[Collection(MyProjectNameTestConsts.CollectionDefinitionName)] public class Index_Tests : MyProjectNameWebTestBase { [Fact] diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/WebContentDirectoryFinder.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/WebContentDirectoryFinder.cs deleted file mode 100644 index f0a3149272..0000000000 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/WebContentDirectoryFinder.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System; -using System.IO; -using System.Linq; - -namespace MyCompanyName.MyProjectName; - -/// -/// This class is used to find root path of the web project. Used for; -/// 1. unit tests (to find views). -/// 2. entity framework core command line commands (to find the conn string). -/// -public static class WebContentDirectoryFinder -{ - public static string? CalculateContentRootFolder() - { - var domainAssemblyDirectoryPath = - Path.GetDirectoryName(typeof(MyProjectNameDomainModule).Assembly.Location); - if (domainAssemblyDirectoryPath == null) - { - throw new Exception( - $"Could not find location of {typeof(MyProjectNameDomainModule).Assembly.FullName} assembly!"); - } - - var directoryInfo = new DirectoryInfo(domainAssemblyDirectoryPath); - - if (Environment.GetEnvironmentVariable("NCrunch") == "1") - { - while (!DirectoryContains(directoryInfo.FullName, "MyCompanyName.MyProjectName.Web.csproj", SearchOption.AllDirectories)) - { - directoryInfo = directoryInfo.Parent ?? throw new Exception("Could not find content root folder!"); - } - - var webProject = Directory.GetFiles(directoryInfo.FullName, string.Empty, SearchOption.AllDirectories) - .First(filePath => string.Equals(Path.GetFileName(filePath), "MyCompanyName.MyProjectName.Web.csproj")); - - return Path.GetDirectoryName(webProject); - } - - while (!DirectoryContains(directoryInfo.FullName, "MyCompanyName.MyProjectName.sln")) - { - directoryInfo = directoryInfo.Parent ?? throw new Exception("Could not find content root folder!"); - } - - var webFolder = Path.Combine(directoryInfo.FullName, $"src{Path.DirectorySeparatorChar}MyCompanyName.MyProjectName.Web"); - if (Directory.Exists(webFolder)) - { - return webFolder; - } - - throw new Exception("Could not find root folder of the web project!"); - } - - private static bool DirectoryContains(string directory, string fileName, - SearchOption searchOption = SearchOption.TopDirectoryOnly) - { - return Directory.GetFiles(directory, string.Empty, searchOption) - .Any(filePath => string.Equals(Path.GetFileName(filePath), fileName)); - } -} From bde11c37acc24a56e1656008c523355f87296880 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 16 Oct 2023 15:28:17 +0800 Subject: [PATCH 14/70] Abstract all db-related unit tests in module template. --- .../MyProjectNameApplicationTestBase.cs | 7 +++++-- .../Samples/SampleAppServiceTests.cs | 2 +- .../MyProjectNameDomainTestBase.cs | 8 ++++++-- .../Samples/SampleDomainTests.cs | 3 +-- .../MyProjectNameApplicationTestBase.cs | 7 +++++-- .../Samples/SampleAppService_Tests.cs | 6 ++++-- .../MyCompanyName.MyProjectName.Domain.Tests.csproj | 7 ++++++- .../MyProjectNameDomainTestBase.cs | 7 +++++-- .../MyProjectNameDomainTestModule.cs | 12 ++++-------- .../Samples/SampleManager_Tests.cs | 4 +++- .../Applications/EfCoreSampleAppService_Tests.cs | 9 +++++++++ .../Domains/EfCoreSampleDomain_Tests.cs | 9 +++++++++ .../MyProjectNameEntityFrameworkCoreTestModule.cs | 4 ++-- ...me.MyProjectName.EntityFrameworkCore.Tests.csproj | 3 ++- .../Applications/MongoDBSampleAppService_Tests.cs | 11 +++++++++++ .../MongoDB/Domains/MongoDBSampleDomain_Tests.cs | 10 ++++++++++ .../MongoDB/MyProjectNameMongoDbTestModule.cs | 4 ++-- .../MyCompanyName.MyProjectName.MongoDB.Tests.csproj | 2 +- .../MyCompanyName.MyProjectName.TestBase.csproj | 2 +- .../MyProjectNameTestBaseModule.cs | 5 +++-- 20 files changed, 90 insertions(+), 32 deletions(-) create mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/Applications/EfCoreSampleAppService_Tests.cs create mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/Domains/EfCoreSampleDomain_Tests.cs create mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDB/Applications/MongoDBSampleAppService_Tests.cs create mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDB/Domains/MongoDBSampleDomain_Tests.cs diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationTestBase.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationTestBase.cs index 26a144d3a8..4bae1a4b22 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationTestBase.cs +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationTestBase.cs @@ -1,6 +1,9 @@ -namespace MyCompanyName.MyProjectName; +using Volo.Abp.Modularity; -public abstract class MyProjectNameApplicationTestBase : MyProjectNameTestBase +namespace MyCompanyName.MyProjectName; + +public abstract class MyProjectNameApplicationTestBase : MyProjectNameTestBase + where TStartupModule : IAbpModule { } diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/Samples/SampleAppServiceTests.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/Samples/SampleAppServiceTests.cs index c4baf0d4f3..efa9ed777e 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/Samples/SampleAppServiceTests.cs +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/Samples/SampleAppServiceTests.cs @@ -11,7 +11,7 @@ namespace MyCompanyName.MyProjectName.Samples; * (like IIdentityUserAppService here). * Only test your own application services. */ -public abstract class SampleAppServiceTests : MyProjectNameTestBase +public abstract class SampleAppServiceTests : MyProjectNameApplicationTestBase where TStartupModule : IAbpModule { private readonly IIdentityUserAppService _userAppService; diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestBase.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestBase.cs index 87a426d039..99059a9628 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestBase.cs +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestBase.cs @@ -1,6 +1,10 @@ -namespace MyCompanyName.MyProjectName; +using Volo.Abp.Modularity; -public abstract class MyProjectNameDomainTestBase : MyProjectNameTestBase +namespace MyCompanyName.MyProjectName; + +/* Inherit from this class for your domain layer tests. */ +public abstract class MyProjectNameDomainTestBase : MyProjectNameTestBase + where TStartupModule : IAbpModule { } diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Samples/SampleDomainTests.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Samples/SampleDomainTests.cs index cf411cf411..ecdb170842 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Samples/SampleDomainTests.cs +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Samples/SampleDomainTests.cs @@ -11,8 +11,7 @@ namespace MyCompanyName.MyProjectName.Samples; * (like IdentityUserManager here). * Only test your own domain services. */ -[Collection(MyProjectNameTestConsts.CollectionDefinitionName)] -public abstract class SampleDomainTests : MyProjectNameTestBase +public abstract class SampleDomainTests : MyProjectNameDomainTestBase where TStartupModule : IAbpModule { private readonly IIdentityUserRepository _identityUserRepository; diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationTestBase.cs b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationTestBase.cs index 94f5f13609..c58486600f 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationTestBase.cs +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationTestBase.cs @@ -1,9 +1,12 @@ -namespace MyCompanyName.MyProjectName; +using Volo.Abp.Modularity; + +namespace MyCompanyName.MyProjectName; /* Inherit from this class for your application layer tests. * See SampleAppService_Tests for example. */ -public abstract class MyProjectNameApplicationTestBase : MyProjectNameTestBase +public abstract class MyProjectNameApplicationTestBase : MyProjectNameTestBase + where TStartupModule : IAbpModule { } diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/Samples/SampleAppService_Tests.cs b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/Samples/SampleAppService_Tests.cs index b8b7422710..8e8a3fd898 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/Samples/SampleAppService_Tests.cs +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/Samples/SampleAppService_Tests.cs @@ -1,14 +1,16 @@ using System.Threading.Tasks; using Shouldly; +using Volo.Abp.Modularity; using Xunit; namespace MyCompanyName.MyProjectName.Samples; -public class SampleAppService_Tests : MyProjectNameApplicationTestBase +public abstract class SampleAppService_Tests : MyProjectNameApplicationTestBase + where TStartupModule : IAbpModule { private readonly ISampleAppService _sampleAppService; - public SampleAppService_Tests() + protected SampleAppService_Tests() { _sampleAppService = GetRequiredService(); } diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyCompanyName.MyProjectName.Domain.Tests.csproj b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyCompanyName.MyProjectName.Domain.Tests.csproj index 35e03b03e1..4d2fb016c5 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyCompanyName.MyProjectName.Domain.Tests.csproj +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyCompanyName.MyProjectName.Domain.Tests.csproj @@ -10,7 +10,12 @@ - + + + + + + diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestBase.cs b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestBase.cs index b0a1dadb5c..4902fdc7ae 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestBase.cs +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestBase.cs @@ -1,9 +1,12 @@ -namespace MyCompanyName.MyProjectName; +using Volo.Abp.Modularity; + +namespace MyCompanyName.MyProjectName; /* Inherit from this class for your domain layer tests. * See SampleManager_Tests for example. */ -public abstract class MyProjectNameDomainTestBase : MyProjectNameTestBase +public abstract class MyProjectNameDomainTestBase : MyProjectNameTestBase + where TStartupModule : IAbpModule { } diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestModule.cs b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestModule.cs index a4be6d894b..695903e189 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestModule.cs +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestModule.cs @@ -1,15 +1,11 @@ -using MyCompanyName.MyProjectName.EntityFrameworkCore; -using Volo.Abp.Modularity; +using Volo.Abp.Modularity; namespace MyCompanyName.MyProjectName; -/* Domain tests are configured to use the EF Core provider. - * You can switch to MongoDB, however your domain tests should be - * database independent anyway. - */ [DependsOn( - typeof(MyProjectNameEntityFrameworkCoreTestModule) - )] + typeof(MyProjectNameDomainModule), + typeof(MyProjectNameTestBaseModule) +)] public class MyProjectNameDomainTestModule : AbpModule { diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Samples/SampleManager_Tests.cs b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Samples/SampleManager_Tests.cs index d9c35ff3f9..9c0a416f96 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Samples/SampleManager_Tests.cs +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Samples/SampleManager_Tests.cs @@ -1,9 +1,11 @@ using System.Threading.Tasks; +using Volo.Abp.Modularity; using Xunit; namespace MyCompanyName.MyProjectName.Samples; -public class SampleManager_Tests : MyProjectNameDomainTestBase +public abstract class SampleManager_Tests : MyProjectNameDomainTestBase + where TStartupModule : IAbpModule { //private readonly SampleManager _sampleManager; diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/Applications/EfCoreSampleAppService_Tests.cs b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/Applications/EfCoreSampleAppService_Tests.cs new file mode 100644 index 0000000000..140ceb0ce0 --- /dev/null +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/Applications/EfCoreSampleAppService_Tests.cs @@ -0,0 +1,9 @@ +using MyCompanyName.MyProjectName.Samples; +using Xunit; + +namespace MyCompanyName.MyProjectName.EntityFrameworkCore.Applications; + +public class EfCoreSampleAppService_Tests : SampleAppService_Tests +{ + +} diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/Domains/EfCoreSampleDomain_Tests.cs b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/Domains/EfCoreSampleDomain_Tests.cs new file mode 100644 index 0000000000..0d353bbdaf --- /dev/null +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/Domains/EfCoreSampleDomain_Tests.cs @@ -0,0 +1,9 @@ +using MyCompanyName.MyProjectName.Samples; +using Xunit; + +namespace MyCompanyName.MyProjectName.EntityFrameworkCore.Domains; + +public class EfCoreSampleDomain_Tests : SampleManager_Tests +{ + +} diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs index 635310bb2f..7abdfb25f8 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs @@ -10,10 +10,10 @@ using Volo.Abp.Uow; namespace MyCompanyName.MyProjectName.EntityFrameworkCore; [DependsOn( - typeof(MyProjectNameTestBaseModule), + typeof(MyProjectNameApplicationTestModule), typeof(MyProjectNameEntityFrameworkCoreModule), typeof(AbpEntityFrameworkCoreSqliteModule) - )] +)] public class MyProjectNameEntityFrameworkCoreTestModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj index e292e1606b..3d10c91a58 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj @@ -12,8 +12,9 @@ - + + diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDB/Applications/MongoDBSampleAppService_Tests.cs b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDB/Applications/MongoDBSampleAppService_Tests.cs new file mode 100644 index 0000000000..c363e29eb3 --- /dev/null +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDB/Applications/MongoDBSampleAppService_Tests.cs @@ -0,0 +1,11 @@ +using MyCompanyName.MyProjectName.MongoDB; +using MyCompanyName.MyProjectName.Samples; +using Xunit; + +namespace MyCompanyName.MyProjectName.MongoDb.Applications; + +[Collection(MongoTestCollection.Name)] +public class MongoDBSampleAppService_Tests : SampleAppService_Tests +{ + +} diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDB/Domains/MongoDBSampleDomain_Tests.cs b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDB/Domains/MongoDBSampleDomain_Tests.cs new file mode 100644 index 0000000000..069bb88fe3 --- /dev/null +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDB/Domains/MongoDBSampleDomain_Tests.cs @@ -0,0 +1,10 @@ +using MyCompanyName.MyProjectName.Samples; +using Xunit; + +namespace MyCompanyName.MyProjectName.MongoDB.Domains; + +[Collection(MongoTestCollection.Name)] +public class MongoDBSampleDomain_Tests : SampleManager_Tests +{ + +} diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDB/MyProjectNameMongoDbTestModule.cs b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDB/MyProjectNameMongoDbTestModule.cs index c0e58deceb..59a3a8957c 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDB/MyProjectNameMongoDbTestModule.cs +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDB/MyProjectNameMongoDbTestModule.cs @@ -6,9 +6,9 @@ using Volo.Abp.Uow; namespace MyCompanyName.MyProjectName.MongoDB; [DependsOn( - typeof(MyProjectNameTestBaseModule), + typeof(MyProjectNameApplicationTestModule), typeof(MyProjectNameMongoDbModule) - )] +)] public class MyProjectNameMongoDbTestModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MyCompanyName.MyProjectName.MongoDB.Tests.csproj b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MyCompanyName.MyProjectName.MongoDB.Tests.csproj index 1002c973c0..1e4104d8bf 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MyCompanyName.MyProjectName.MongoDB.Tests.csproj +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MyCompanyName.MyProjectName.MongoDB.Tests.csproj @@ -15,7 +15,7 @@ - + diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyCompanyName.MyProjectName.TestBase.csproj b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyCompanyName.MyProjectName.TestBase.csproj index a5f50566ed..b28d658c1b 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyCompanyName.MyProjectName.TestBase.csproj +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyCompanyName.MyProjectName.TestBase.csproj @@ -21,8 +21,8 @@ + - diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBaseModule.cs b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBaseModule.cs index dcfdbfbe2c..2d054f822c 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBaseModule.cs +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBaseModule.cs @@ -3,6 +3,7 @@ using Volo.Abp; using Volo.Abp.Authorization; using Volo.Abp.Autofac; using Volo.Abp.Data; +using Volo.Abp.Guids; using Volo.Abp.Modularity; using Volo.Abp.Threading; @@ -12,8 +13,8 @@ namespace MyCompanyName.MyProjectName; typeof(AbpAutofacModule), typeof(AbpTestBaseModule), typeof(AbpAuthorizationModule), - typeof(MyProjectNameDomainModule) - )] + typeof(AbpGuidsModule) +)] public class MyProjectNameTestBaseModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) From 344fca116c847ee733488603286b01def5c406e5 Mon Sep 17 00:00:00 2001 From: Sinan997 Date: Mon, 16 Oct 2023 14:13:47 +0300 Subject: [PATCH 15/70] remove --- .../src/lib/components/empty-layout/empty-layout.component.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts index f961ecc321..b9a78ba06d 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts @@ -5,7 +5,6 @@ import { eLayoutType } from '@abp/ng.core'; selector: 'abp-layout-empty', template: ` - `, }) export class EmptyLayoutComponent { From c0ed6278081fce9fab313065b880d9793810b468 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 16 Oct 2023 15:35:09 +0300 Subject: [PATCH 16/70] Fix permissions spacing without children in the modal --- .../Components/PermissionManagementModal.razor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor index 3f6c931d9a..1f804c3c09 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor @@ -62,7 +62,7 @@ @foreach (var permission in group.Permissions) { - + Date: Mon, 16 Oct 2023 15:51:08 +0300 Subject: [PATCH 17/70] change version of leptonx stable --- npm/ng-packs/package.json | 2 +- templates/app-nolayers/angular/package.json | 2 +- templates/app/angular/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index 2a4fc7b861..8ec7c2f77c 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -55,7 +55,7 @@ "@abp/ng.setting-management": "~7.4.0", "@abp/ng.tenant-management": "~7.4.0", "@abp/ng.theme.basic": "~7.4.0", - "@abp/ng.theme.lepton-x": "^2.4.0-rc.4", + "@abp/ng.theme.lepton-x": "~2.4.0", "@abp/ng.theme.shared": "~7.4.0", "@abp/utils": "~7.4.0", "@angular-devkit/build-angular": "~16.0.0", diff --git a/templates/app-nolayers/angular/package.json b/templates/app-nolayers/angular/package.json index 3f9ae1e9d9..de32293bb3 100644 --- a/templates/app-nolayers/angular/package.json +++ b/templates/app-nolayers/angular/package.json @@ -20,7 +20,7 @@ "@abp/ng.setting-management": "~7.4.0", "@abp/ng.tenant-management": "~7.4.0", "@abp/ng.theme.shared": "~7.4.0", - "@abp/ng.theme.lepton-x": "~2.4.0-rc.4", + "@abp/ng.theme.lepton-x": "~2.4.0", "@angular/animations": "~16.0.0", "@angular/common": "~16.0.0", "@angular/compiler": "~16.0.0", diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json index a818915881..5a84ede9f5 100644 --- a/templates/app/angular/package.json +++ b/templates/app/angular/package.json @@ -20,7 +20,7 @@ "@abp/ng.setting-management": "~7.4.0", "@abp/ng.tenant-management": "~7.4.0", "@abp/ng.theme.shared": "~7.4.0", - "@abp/ng.theme.lepton-x": "~2.4.0-rc.4", + "@abp/ng.theme.lepton-x": "~2.4.0", "@angular/animations": "~16.0.0", "@angular/common": "~16.0.0", "@angular/compiler": "~16.0.0", From f6483b2f29532adeb938945213e4604fb1d55551 Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Mon, 16 Oct 2023 14:16:35 +0000 Subject: [PATCH 18/70] Add a section for @abp/nx.generators --- docs/en/UI/Angular/Service-Proxies.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/docs/en/UI/Angular/Service-Proxies.md b/docs/en/UI/Angular/Service-Proxies.md index dc8433f7de..c683f7e22b 100644 --- a/docs/en/UI/Angular/Service-Proxies.md +++ b/docs/en/UI/Angular/Service-Proxies.md @@ -18,7 +18,8 @@ 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 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 [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 +141,24 @@ 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 +nx generate @abp/nx.generators:generate-proxy +// or 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. From a7c142dac128eff273a5f153a69e29cb28b89b93 Mon Sep 17 00:00:00 2001 From: Masum ULU <49063256+masumulu28@users.noreply.github.com> Date: Mon, 16 Oct 2023 17:26:24 +0300 Subject: [PATCH 19/70] Format NX descriptions --- docs/en/UI/Angular/Service-Proxies.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/docs/en/UI/Angular/Service-Proxies.md b/docs/en/UI/Angular/Service-Proxies.md index c683f7e22b..71ba09df95 100644 --- a/docs/en/UI/Angular/Service-Proxies.md +++ b/docs/en/UI/Angular/Service-Proxies.md @@ -18,8 +18,9 @@ Run the following command in the **root folder** of the angular application: abp generate-proxy -t ng ``` -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 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 [Details](#abp-nx-proxy-generator). +### 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 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 [Details](#abp-nx-proxy-generator). The generated files will be placed in a folder called `proxy` at the root of the target project. @@ -144,19 +145,21 @@ export class BookComponent implements OnInit { ### 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 ** + **Installation** To incorporate this package into your project, run the following command: ```bash yarn add @abp/nx.generators ``` -** Usage ** +### Usage To use the generator, execute the following command: + ```bash -nx generate @abp/nx.generators:generate-proxy -// or nx g @abp/nx.generators:generate-proxy +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. +**Note:** The parameters you'd use with this generator are consistent with the standard ABP proxy generator. ### Known Limitations From bb2ab5ff68de4b5f675b50d22dd553ef597290f0 Mon Sep 17 00:00:00 2001 From: Sinan997 Date: Mon, 16 Oct 2023 22:40:00 +0300 Subject: [PATCH 20/70] fix null return problem in executeErrorHandle method --- .../packages/theme-shared/src/lib/handlers/error.handler.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts b/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts index 0a472a18cb..b61568f136 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts @@ -47,8 +47,7 @@ export class ErrorHandler { return (isObservable ? errHandler : of(null)).pipe( catchError(err => { - this.handleError(err); - return of(null); + return of(err); }), ); }; From 2800bd4fec2d6b370196289eab285276839ce703 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 17 Oct 2023 09:40:31 +0800 Subject: [PATCH 21/70] Update `Data-Filtering.md`. Close #17873 --- docs/en/Data-Filtering.md | 2 +- docs/zh-Hans/Data-Filtering.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Data-Filtering.md b/docs/en/Data-Filtering.md index be1d922fbd..830979e710 100644 --- a/docs/en/Data-Filtering.md +++ b/docs/en/Data-Filtering.md @@ -227,7 +227,7 @@ protected override Expression> CreateFilterExpression !IsActiveFilterEnabled || EF.Property(e, "IsActive"); expression = expression == null ? isActiveFilter - : CombineExpressions(expression, isActiveFilter); + : QueryFilterExpressionHelper.CombineExpressions(expression, isActiveFilter); } return expression; diff --git a/docs/zh-Hans/Data-Filtering.md b/docs/zh-Hans/Data-Filtering.md index b17a4ecf9b..8a43ad93b1 100644 --- a/docs/zh-Hans/Data-Filtering.md +++ b/docs/zh-Hans/Data-Filtering.md @@ -176,7 +176,7 @@ protected override Expression> CreateFilterExpression !IsActiveFilterEnabled || EF.Property(e, "IsActive"); expression = expression == null ? isActiveFilter - : CombineExpressions(expression, isActiveFilter); + : QueryFilterExpressionHelper.CombineExpressions(expression, isActiveFilter); } return expression; From d651a2abe217e0f6c6a9c28c44e24a3f74c21e41 Mon Sep 17 00:00:00 2001 From: Hamza Albreem <94292623+braim23@users.noreply.github.com> Date: Tue, 17 Oct 2023 09:30:43 +0300 Subject: [PATCH 22/70] Update Service-Proxies.md --- docs/en/UI/Angular/Service-Proxies.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/UI/Angular/Service-Proxies.md b/docs/en/UI/Angular/Service-Proxies.md index 71ba09df95..6cd79505c2 100644 --- a/docs/en/UI/Angular/Service-Proxies.md +++ b/docs/en/UI/Angular/Service-Proxies.md @@ -20,7 +20,7 @@ abp generate-proxy -t ng ### 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 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 [Details](#abp-nx-proxy-generator). +- 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. From 896c98077b9b3a180f41e5bc5b7694a5d003a47b Mon Sep 17 00:00:00 2001 From: Sinan997 Date: Tue, 17 Oct 2023 10:21:53 +0300 Subject: [PATCH 23/70] update executeErrorHandler --- .../packages/theme-shared/src/lib/handlers/error.handler.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts b/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts index b61568f136..480a647bbe 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts @@ -45,11 +45,7 @@ export class ErrorHandler { const errHandler = this.httpErrorHandler(this.injector, error); const isObservable = errHandler instanceof Observable; - return (isObservable ? errHandler : of(null)).pipe( - catchError(err => { - return of(err); - }), - ); + return (isObservable ? errHandler : of(null)).pipe(catchError(err => of(err))); }; protected sortHttpErrorHandlers( From d128d68609e7607a7009e2574550779cbcbe9e9a Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Tue, 17 Oct 2023 16:24:36 +0300 Subject: [PATCH 24/70] Show error instead of return 500 for Widget rendering --- .../Components/Contents/ContentFragment.cshtml | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragment.cshtml b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragment.cshtml index 80834dd7fc..fcd3801667 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragment.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragment.cshtml @@ -1,4 +1,5 @@ @using Microsoft.AspNetCore.Mvc.ViewComponents +@using Microsoft.Extensions.Logging @using Volo.Abp.Data @using Volo.Abp.Reflection @using Volo.CmsKit.Contents @@ -9,6 +10,7 @@ @inject IMarkdownToHtmlRenderer MarkdownRenderer @inject IViewComponentSelector ViewComponentSelector +@inject ILogger Logger @foreach (var contentFragment in Model.ContentDto.ContentFragments) { @@ -35,6 +37,18 @@ } } - @await Component.InvokeAsync(componentName, parameters) + @try + { + await Component.InvokeAsync(componentName, parameters); + } + catch (Exception ex) + { + + + Logger.LogWarning(ex, $"Couldn't load the widget: {componentName}"); + } } } \ No newline at end of file From e78e5abe2b699db70641eaed70845dbd7311d0ea Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Tue, 17 Oct 2023 16:27:45 +0300 Subject: [PATCH 25/70] Localize the error --- .../CmsKit/Components/Contents/ContentFragment.cshtml | 8 +++++--- .../Volo/CmsKit/Localization/Resources/ar.json | 3 ++- .../Volo/CmsKit/Localization/Resources/cs.json | 3 ++- .../Volo/CmsKit/Localization/Resources/de-DE.json | 3 ++- .../Volo/CmsKit/Localization/Resources/el.json | 3 ++- .../Volo/CmsKit/Localization/Resources/en.json | 3 ++- .../Volo/CmsKit/Localization/Resources/es.json | 3 ++- .../Volo/CmsKit/Localization/Resources/fa.json | 3 ++- .../Volo/CmsKit/Localization/Resources/fi.json | 3 ++- .../Volo/CmsKit/Localization/Resources/fr.json | 3 ++- .../Volo/CmsKit/Localization/Resources/hi.json | 3 ++- .../Volo/CmsKit/Localization/Resources/hu.json | 3 ++- .../Volo/CmsKit/Localization/Resources/is.json | 3 ++- .../Volo/CmsKit/Localization/Resources/it.json | 3 ++- .../Volo/CmsKit/Localization/Resources/nl.json | 3 ++- .../Volo/CmsKit/Localization/Resources/pl-PL.json | 3 ++- .../Volo/CmsKit/Localization/Resources/pt-BR.json | 3 ++- .../Volo/CmsKit/Localization/Resources/ro-RO.json | 3 ++- .../Volo/CmsKit/Localization/Resources/ru.json | 3 ++- .../Volo/CmsKit/Localization/Resources/sk.json | 3 ++- .../Volo/CmsKit/Localization/Resources/sl.json | 3 ++- .../Volo/CmsKit/Localization/Resources/tr.json | 3 ++- .../Volo/CmsKit/Localization/Resources/vi.json | 3 ++- .../Volo/CmsKit/Localization/Resources/zh-Hans.json | 3 ++- .../Volo/CmsKit/Localization/Resources/zh-Hant.json | 3 ++- 25 files changed, 53 insertions(+), 27 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragment.cshtml b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragment.cshtml index fcd3801667..aad3de1abf 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragment.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragment.cshtml @@ -1,8 +1,10 @@ @using Microsoft.AspNetCore.Mvc.ViewComponents +@using Microsoft.Extensions.Localization @using Microsoft.Extensions.Logging @using Volo.Abp.Data @using Volo.Abp.Reflection @using Volo.CmsKit.Contents +@using Volo.CmsKit.Localization @using Volo.CmsKit.Web.Renderers; @using Volo.CmsKit.Web.Pages.CmsKit.Components.Contents; @@ -11,6 +13,7 @@ @inject IMarkdownToHtmlRenderer MarkdownRenderer @inject IViewComponentSelector ViewComponentSelector @inject ILogger Logger +@inject IStringLocalizer L @foreach (var contentFragment in Model.ContentDto.ContentFragments) { @@ -43,9 +46,8 @@ } catch (Exception ex) { - - Logger.LogWarning(ex, $"Couldn't load the widget: {componentName}"); + Logger.LogError(ex, $"Couldn't load the widget: {componentName}"); } } } \ No newline at end of file From 08b29b77eb5a0a3be692eba8a1b56f5d89090c28 Mon Sep 17 00:00:00 2001 From: Maik Stegemann Date: Tue, 17 Oct 2023 15:48:12 +0200 Subject: [PATCH 27/70] specify mode and access-type in `ReadAllBytesAsync` method --- framework/src/Volo.Abp.Core/Volo/Abp/IO/FileHelper.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/IO/FileHelper.cs b/framework/src/Volo.Abp.Core/Volo/Abp/IO/FileHelper.cs index c4daaed745..f4adefd9c3 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/IO/FileHelper.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/IO/FileHelper.cs @@ -69,7 +69,7 @@ public static class FileHelper /// A string containing all lines of the file. public static async Task 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); From 15a430e2f1e8ed0bbaa2257cfbd3d50a49229738 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 17 Oct 2023 19:41:20 +0300 Subject: [PATCH 28/70] Fix inherit/implement sentence --- docs/en/Tutorials/Part-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Tutorials/Part-1.md b/docs/en/Tutorials/Part-1.md index f6c3f96649..0ed26ce557 100644 --- a/docs/en/Tutorials/Part-1.md +++ b/docs/en/Tutorials/Part-1.md @@ -238,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; From bfd09fcece56b18a561cee17a28b4c0acbbde9d1 Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Wed, 18 Oct 2023 09:35:25 +0300 Subject: [PATCH 29/70] Fix docs template rendering problems --- docs/en/Getting-Started-Running-Solution-Single-Layer.md | 2 +- docs/en/Getting-Started-Running-Solution.md | 4 +++- docs/en/Tutorials/Part-1.md | 2 +- docs/en/Tutorials/Todo/Index.md | 2 +- docs/en/Tutorials/Todo/Single-Layer/Index.md | 2 +- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/en/Getting-Started-Running-Solution-Single-Layer.md b/docs/en/Getting-Started-Running-Solution-Single-Layer.md index 8da0fc7912..b200720415 100644 --- a/docs/en/Getting-Started-Running-Solution-Single-Layer.md +++ b/docs/en/Getting-Started-Running-Solution-Single-Layer.md @@ -66,7 +66,7 @@ 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"}} +{{if UI=="Blazor" || UI=="BlazorServer"}} ### Bundling and Minification diff --git a/docs/en/Getting-Started-Running-Solution.md b/docs/en/Getting-Started-Running-Solution.md index 9be04c7612..a7771a0773 100644 --- a/docs/en/Getting-Started-Running-Solution.md +++ b/docs/en/Getting-Started-Running-Solution.md @@ -105,7 +105,7 @@ 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"}} +{{if UI=="Blazor" || UI=="BlazorServer"}} ### Bundling and Minification @@ -125,6 +125,8 @@ abp bundle {{ if UI == "MVC" || UI == "BlazorServer" }} +> **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" }} > Tiered solutions use **Redis** as the distributed cache. Ensure that it is installed and running in your local computer. If you are using a remote Redis Server, set the configuration in the `appsettings.json` files of the projects below. diff --git a/docs/en/Tutorials/Part-1.md b/docs/en/Tutorials/Part-1.md index 0ed26ce557..6795204936 100644 --- a/docs/en/Tutorials/Part-1.md +++ b/docs/en/Tutorials/Part-1.md @@ -66,7 +66,7 @@ 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"}} +{{if UI=="Blazor" || UI=="BlazorServer"}} ### Bundling and Minification diff --git a/docs/en/Tutorials/Todo/Index.md b/docs/en/Tutorials/Todo/Index.md index 0a0a080d8e..f316a9b7ed 100644 --- a/docs/en/Tutorials/Todo/Index.md +++ b/docs/en/Tutorials/Todo/Index.md @@ -113,7 +113,7 @@ 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"}} +{{if UI=="Blazor" || UI=="BlazorServer"}} #### Bundling and Minification diff --git a/docs/en/Tutorials/Todo/Single-Layer/Index.md b/docs/en/Tutorials/Todo/Single-Layer/Index.md index e08acb1167..ff075e613d 100644 --- a/docs/en/Tutorials/Todo/Single-Layer/Index.md +++ b/docs/en/Tutorials/Todo/Single-Layer/Index.md @@ -117,7 +117,7 @@ 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"}} +{{if UI=="Blazor" || UI=="BlazorServer"}} #### Bundling and Minification From 32e91a539795b3253f98d91d982bc0884376c465 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Wed, 18 Oct 2023 09:36:29 +0300 Subject: [PATCH 30/70] Downgrade ImageSharp version to `1.0.4` --- Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index ae21b20429..8fcd23a08d 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -138,7 +138,7 @@ - + From 6ee77a19ee2ebb9f537f31f2ca032abf91c1b603 Mon Sep 17 00:00:00 2001 From: Sinan997 Date: Wed, 18 Oct 2023 10:44:47 +0300 Subject: [PATCH 31/70] add angular update to 7.3, 7.4 migration docs --- docs/en/Migration-Guides/Abp-7_3.md | 5 ++++- docs/en/Migration-Guides/Abp-7_4.md | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/en/Migration-Guides/Abp-7_3.md b/docs/en/Migration-Guides/Abp-7_3.md index 9e09306ca3..1d8e5b1e36 100644 --- a/docs/en/Migration-Guides/Abp-7_3.md +++ b/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, `` will no longer work. However, you can use the C# code for an attribute of script tag, for example, `` 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. \ No newline at end of file +> 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/) \ No newline at end of file diff --git a/docs/en/Migration-Guides/Abp-7_4.md b/docs/en/Migration-Guides/Abp-7_4.md index 0c69dda74e..ee72da812f 100644 --- a/docs/en/Migration-Guides/Abp-7_4.md +++ b/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/) \ No newline at end of file From cfb43db0e08afeca42873be448968724ca763fc1 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 18 Oct 2023 03:01:53 -0500 Subject: [PATCH 32/70] Update build-and-test.yml --- .github/workflows/build-and-test.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 2285578fe2..5f974c2da8 100644 --- a/.github/workflows/build-and-test.yml +++ b/.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 From 44554e6354c7bafc38e0966633246b3520b5a156 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Wed, 18 Oct 2023 11:07:02 +0300 Subject: [PATCH 33/70] Revert "Downgrade ImageSharp version to `1.0.4`" --- Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 8fcd23a08d..ae21b20429 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -138,7 +138,7 @@ - + From a1a98913c32b60130d8ce7925c4de987dfb37f41 Mon Sep 17 00:00:00 2001 From: Salih Date: Wed, 18 Oct 2023 13:43:36 +0300 Subject: [PATCH 34/70] Fix missing method exception problem --- .../src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj index e905ec5e68..ac6f26aa08 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj @@ -18,7 +18,7 @@ - + From bcfbb53067321f8d7d4a3ab3415939960c2266fe Mon Sep 17 00:00:00 2001 From: Sinan997 Date: Wed, 18 Oct 2023 13:53:58 +0300 Subject: [PATCH 35/70] fix getModifierState is not a function error --- .../packages/core/src/lib/directives/caps-lock.directive.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/core/src/lib/directives/caps-lock.directive.ts b/npm/ng-packs/packages/core/src/lib/directives/caps-lock.directive.ts index 16b3c40757..4d66a77b50 100644 --- a/npm/ng-packs/packages/core/src/lib/directives/caps-lock.directive.ts +++ b/npm/ng-packs/packages/core/src/lib/directives/caps-lock.directive.ts @@ -21,7 +21,7 @@ export class TrackCapsLockDirective { if ( (s.toUpperCase() === s && s.toLowerCase() !== s && e.shiftKey) || (s.toUpperCase() !== s && s.toLowerCase() === s && e.shiftKey) || - e.getModifierState('CapsLock') + (e.getModifierState && e.getModifierState('CapsLock')) ) { return true; } From cdd14dbf4eb351861d53f44a02f05b1c09138306 Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Wed, 18 Oct 2023 17:29:47 +0300 Subject: [PATCH 36/70] CMS Kit: Prevent duplicate comment records --- .../Volo/CmsKit/Comments/CommentConsts.cs | 2 ++ .../CmsKit/Localization/Resources/en.json | 3 ++- .../Volo/CmsKit/Comments/Comment.cs | 4 +++- .../CmsKit/Comments/ICommentRepository.cs | 2 ++ .../Comments/EfCoreCommentRepository.cs | 5 ++++ .../CmsKitDbContextModelCreatingExtensions.cs | 1 + .../Comments/MongoCommentRepository.cs | 6 +++++ .../Public/Comments/CreateCommentInput.cs | 4 +++- .../CreateCommentWithParametersInput.cs | 2 ++ .../Comments/CommentPublicAppService.cs | 15 ++++++++++-- .../Components/Commenting/Default.cshtml | 1 + .../Shared/Components/Commenting/default.js | 23 +++++++++++++++---- 12 files changed, 59 insertions(+), 9 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Comments/CommentConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Comments/CommentConsts.cs index aa253c9593..59afde6a45 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Comments/CommentConsts.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Comments/CommentConsts.cs @@ -12,4 +12,6 @@ public static class CommentConsts public static int MaxTextLength { get; set; } = 512; public static int MaxUrlLength { get; set; } = 512; + + public static int MaxIdempotencyTokenLength { get; set; } = 32; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 40639fc46a..e879b7e339 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -225,6 +225,7 @@ "RemoveCoverImage": "Remove cover image", "CssClass": "CSS Class", "TagsHelpText": "Tags should be comma-separated (e.g.: tag1, tag2, tag3)", - "ThisPartOfContentCouldntBeLoaded": "This part of content couldn't be loaded." + "ThisPartOfContentCouldntBeLoaded": "This part of content couldn't be loaded.", + "DuplicateCommentAttemptMessage": "Duplicate comment post attempt detected. Your comment has already been submitted." } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Comments/Comment.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Comments/Comment.cs index 7a620b8655..7a09b18b63 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Comments/Comment.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Comments/Comment.cs @@ -25,9 +25,11 @@ public class Comment : AggregateRoot, IHasCreationTime, IMustHaveCreator, public virtual string Url { get; set; } + public virtual string IdempotencyToken { get; set; } + protected Comment() { - + } internal Comment( diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Comments/ICommentRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Comments/ICommentRepository.cs index 30541c2230..b054f11037 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Comments/ICommentRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Comments/ICommentRepository.cs @@ -44,4 +44,6 @@ public interface ICommentRepository : IBasicRepository Comment comment, CancellationToken cancellationToken = default ); + + Task ExistsAsync(string idempotencyToken, CancellationToken cancellationToken = default); } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Comments/EfCoreCommentRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Comments/EfCoreCommentRepository.cs index 3102bcc40b..2f626a5cd7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Comments/EfCoreCommentRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Comments/EfCoreCommentRepository.cs @@ -141,6 +141,11 @@ public class EfCoreCommentRepository : EfCoreRepository ExistsAsync(string idempotencyToken, CancellationToken cancellationToken = default) + { + return await (await GetDbSetAsync()).AnyAsync(x => x.IdempotencyToken == idempotencyToken, GetCancellationToken(cancellationToken)); + } + protected virtual async Task> GetListQueryAsync( string filter = null, string entityType = null, diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs index a6a92cced4..b81eb4f31d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs @@ -80,6 +80,7 @@ public static class CmsKitDbContextModelCreatingExtensions b.Property(x => x.Text).IsRequired().HasMaxLength(CommentConsts.MaxTextLength); b.Property(x => x.RepliedCommentId); b.Property(x => x.Url).HasMaxLength(CommentConsts.MaxUrlLength); + b.Property(x => x.IdempotencyToken).HasMaxLength(CommentConsts.MaxIdempotencyTokenLength); b.HasIndex(x => new { x.TenantId, x.EntityType, x.EntityId }); b.HasIndex(x => new { x.TenantId, x.RepliedCommentId }); diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Comments/MongoCommentRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Comments/MongoCommentRepository.cs index 089b86cc4f..698c533b4e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Comments/MongoCommentRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Comments/MongoCommentRepository.cs @@ -159,6 +159,12 @@ public class MongoCommentRepository : MongoDbRepository ExistsAsync(string idempotencyToken, CancellationToken cancellationToken = default) + { + return await (await GetMongoQueryableAsync(cancellationToken)) + .AnyAsync(x => x.IdempotencyToken == idempotencyToken, GetCancellationToken(cancellationToken)); + } + protected virtual async Task> GetListQueryAsync( string filter = null, string entityType = null, diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CreateCommentInput.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CreateCommentInput.cs index 316ffe2737..cc5ee3efec 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CreateCommentInput.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CreateCommentInput.cs @@ -7,7 +7,7 @@ using Volo.CmsKit.Comments; namespace Volo.CmsKit.Public.Comments; [Serializable] -public class CreateCommentInput: ExtensibleObject +public class CreateCommentInput : ExtensibleObject { [Required] [DynamicStringLength(typeof(CommentConsts), nameof(CommentConsts.MaxTextLength))] @@ -20,4 +20,6 @@ public class CreateCommentInput: ExtensibleObject public int CaptchaAnswer { get; set; } public string Url { get; set; } + + public string IdempotencyToken { get; set; } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CreateCommentWithParametersInput.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CreateCommentWithParametersInput.cs index 53f993cf2b..ec7aad1398 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CreateCommentWithParametersInput.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CreateCommentWithParametersInput.cs @@ -25,4 +25,6 @@ public class CreateCommentWithParametersInput public int CaptchaAnswer { get; set; } public string Url { get; set; } + + public string IdempotencyToken { get; set; } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Comments/CommentPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Comments/CommentPublicAppService.cs index c1b5e736ec..cda077bde7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Comments/CommentPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Comments/CommentPublicAppService.cs @@ -63,14 +63,15 @@ public class CommentPublicAppService : CmsKitPublicAppServiceBase, ICommentPubli public virtual async Task CreateAsync(string entityType, string entityId, CreateCommentInput input) { CheckExternalUrls(entityType, input.Text); - - var user = await CmsUserLookupService.GetByIdAsync(CurrentUser.GetId()); if (input.RepliedCommentId.HasValue) { await CommentRepository.GetAsync(input.RepliedCommentId.Value); } + await CheckIdempotencyTokenUniquenessAsync(input.IdempotencyToken); + + var user = await CmsUserLookupService.GetByIdAsync(CurrentUser.GetId()); var comment = await CommentRepository.InsertAsync( await CommentManager.CreateAsync( user, @@ -192,4 +193,14 @@ public class CommentPublicAppService : CmsKitPublicAppServiceBase, ICommentPubli { return ObjectMapper.Map(comments.Single(c => c.Comment.Id == commentId).Author); } + + private async Task CheckIdempotencyTokenUniquenessAsync(string idempotencyToken) + { + if(!await CommentRepository.ExistsAsync(idempotencyToken)) + { + return; + } + + throw new UserFriendlyException(L["DuplicateCommentAttemptMessage"]); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml index 8829df73c5..c1171d8ba6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml @@ -31,6 +31,7 @@ data-reply-id="@(repliedCommentId?.ToString() ?? "")" style="@(string.IsNullOrEmpty(repliedCommentId?.ToString() ?? "") ? "" : "display:none")">
+
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.js b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.js index 75f3288982..0d4616fe51 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.js +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.js @@ -107,10 +107,15 @@ function registerUpdateOfNewComment($container) { $container.find('.cms-comment-update-form').each(function () { - let $form = $(this); + var $form = $(this); + $form.submit(function (e) { e.preventDefault(); + + abp.ui.setBusy($form.find("button[type='submit']")); + let formAsObject = $form.serializeFormToObject(); + $.ajax({ type: 'POST', url: '/CmsKitPublicComments/Update/' + formAsObject.id, @@ -124,9 +129,11 @@ }), success: function () { widgetManager.refresh($widget); + abp.ui.clearBusy(); }, error: function (data) { abp.message.error(data.responseJSON.error.message); + abp.ui.clearBusy(); } }); }); @@ -135,10 +142,14 @@ function registerSubmissionOfNewComment($container) { $container.find('.cms-comment-form').each(function () { - let $form = $(this); + var $form = $(this); + $form.submit(function (e) { e.preventDefault(); - let formAsObject = $form.serializeFormToObject(); + + abp.ui.setBusy("button[type='submit']"); + + var formAsObject = $form.serializeFormToObject(); if (formAsObject.repliedCommentId == '') { formAsObject.repliedCommentId = null; @@ -146,6 +157,7 @@ if (formAsObject.commentText == '') { abp.message.error(l("CommentTextRequired")); + abp.ui.clearBusy(); return; } @@ -161,13 +173,16 @@ text: formAsObject.commentText, url: window.location.href, captchaToken: formAsObject.captchaId, - captchaAnswer: formAsObject.input?.captcha + captchaAnswer: formAsObject.input?.captcha, + idempotencyToken: formAsObject.idempotencyToken }), success: function () { widgetManager.refresh($widget); + abp.ui.clearBusy(); }, error: function (data) { abp.message.error(data.responseJSON.error.message); + abp.ui.clearBusy(); } }); }); From 705730339f72e02a1466f4c34937bcd652d88e16 Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Wed, 18 Oct 2023 20:40:51 +0300 Subject: [PATCH 37/70] CMS Kit: Fix tests and add new tests for CommentPublicAppService --- .../Public/Comments/CreateCommentInput.cs | 1 + .../CreateCommentWithParametersInput.cs | 1 + .../Comments/CommentPublicAppService_Tests.cs | 28 +++++++++++++++++-- .../CmsKitDataSeedContributor.cs | 2 +- .../Volo.CmsKit.TestBase/CmsKitTestData.cs | 2 ++ 5 files changed, 30 insertions(+), 4 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CreateCommentInput.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CreateCommentInput.cs index cc5ee3efec..d17e8c9deb 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CreateCommentInput.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CreateCommentInput.cs @@ -21,5 +21,6 @@ public class CreateCommentInput : ExtensibleObject public string Url { get; set; } + [Required] public string IdempotencyToken { get; set; } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CreateCommentWithParametersInput.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CreateCommentWithParametersInput.cs index ec7aad1398..fda4856ffb 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CreateCommentWithParametersInput.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CreateCommentWithParametersInput.cs @@ -26,5 +26,6 @@ public class CreateCommentWithParametersInput public string Url { get; set; } + [Required] public string IdempotencyToken { get; set; } } diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Comments/CommentPublicAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Comments/CommentPublicAppService_Tests.cs index cbb165c1cd..d01fc295cf 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Comments/CommentPublicAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Comments/CommentPublicAppService_Tests.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System; +using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using NSubstitute; @@ -48,7 +49,8 @@ public class CommentPublicAppService_Tests : CmsKitApplicationTestBase new CreateCommentInput { RepliedCommentId = null, - Text = "newComment" + Text = "newComment", + IdempotencyToken = Guid.NewGuid().ToString("N") } ); @@ -75,7 +77,8 @@ public class CommentPublicAppService_Tests : CmsKitApplicationTestBase new CreateCommentInput { RepliedCommentId = null, - Text = text + Text = text, + IdempotencyToken = Guid.NewGuid().ToString("N") } ); } @@ -95,6 +98,25 @@ public class CommentPublicAppService_Tests : CmsKitApplicationTestBase { RepliedCommentId = null, Text = text, //not allowed URL + IdempotencyToken = Guid.NewGuid().ToString("N") + } + )); + } + + [Fact] + public async Task CreateAsync_ShouldThrowUserFriendlyException_If_IdempotencyToken_Not_Unique() + { + _currentUser.Id.Returns(_cmsKitTestData.User2Id); + + await Should.ThrowAsync(async () => + await _commentAppService.CreateAsync( + _cmsKitTestData.EntityType1, + _cmsKitTestData.EntityId1, + new CreateCommentInput + { + RepliedCommentId = null, + Text = "", + IdempotencyToken = _cmsKitTestData.IdempotencyToken_1 } )); } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs index af5ee0754a..f17a95ddba 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs @@ -194,7 +194,7 @@ public class CmsKitDataSeedContributor : IDataSeedContributor, ITransientDepende "comment", null, _cmsKitTestData.User1Id - )); + ){ IdempotencyToken = _cmsKitTestData.IdempotencyToken_1 }); await _commentRepository.InsertAsync(new Comment(_guidGenerator.Create(), _cmsKitTestData.EntityType1, diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs index cfa54d2e55..8c4c07e283 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs @@ -131,4 +131,6 @@ public class CmsKitTestData : ISingletonDependency public string PollName { get; } = "Poll"; public string WidgetName { get; } = "CmsPollByCode"; + + public string IdempotencyToken_1 { get; } = Guid.NewGuid().ToString("N"); } From bbc620186a8f844fa4d69161cf0a684e0ca2a6cd Mon Sep 17 00:00:00 2001 From: Salih Date: Thu, 19 Oct 2023 12:00:56 +0300 Subject: [PATCH 38/70] Fix the version problem in cms kit --- Directory.Packages.props | 2 +- .../Captcha/SimpleMathsCaptchaGenerator.cs | 20 ++++++++++--------- .../Volo.CmsKit.Public.Web.csproj | 2 +- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index ae21b20429..91574ec319 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -139,7 +139,7 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Security/Captcha/SimpleMathsCaptchaGenerator.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Security/Captcha/SimpleMathsCaptchaGenerator.cs index bd7f9f0371..f3e1a46403 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Security/Captcha/SimpleMathsCaptchaGenerator.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Security/Captcha/SimpleMathsCaptchaGenerator.cs @@ -116,7 +116,9 @@ public class SimpleMathsCaptchaGenerator : ITransientDependency var random = new Random(); var startWith = (byte)random.Next(5, 10); image.Mutate(ctx => ctx.BackgroundColor(Color.Transparent)); - var fontFamily = SystemFonts.Families.FirstOrDefault(x => x.IsStyleAvailable(options.FontStyle))?.Name ?? SystemFonts.Families.First().Name; + var fontFamily = SystemFonts.Families + .FirstOrDefault(x => x.GetAvailableStyles().Contains(options.FontStyle), SystemFonts.Families.First()) + .Name; var font = SystemFonts.CreateFont(fontFamily, options.FontSize, options.FontStyle); foreach (var character in stringText) @@ -125,7 +127,7 @@ public class SimpleMathsCaptchaGenerator : ITransientDependency var color = options.TextColor[random.Next(0, options.TextColor.Length)]; var location = new PointF(startWith + position, random.Next(6, 13)); image.Mutate(ctx => ctx.DrawText(text, font, color, location)); - position += TextMeasurer.Measure(character.ToString(), new RendererOptions(font, location)).Width; + position += TextMeasurer.MeasureSize(character.ToString(), new TextOptions(font)).Width; } //add rotation @@ -133,7 +135,7 @@ public class SimpleMathsCaptchaGenerator : ITransientDependency image.Mutate(ctx => ctx.Transform(rotation)); // add the dynamic image to original image - var size = (ushort)TextMeasurer.Measure(stringText, new RendererOptions(font)).Width; + var size = (ushort)TextMeasurer.MeasureSize(stringText, new TextOptions(font)).Width; var img = new Image(size + 15, options.Height); img.Mutate(ctx => ctx.BackgroundColor(Color.White)); @@ -146,7 +148,7 @@ public class SimpleMathsCaptchaGenerator : ITransientDependency var y1 = random.Next(0, img.Height); img.Mutate(ctx => - ctx.DrawLines(options.TextColor[random.Next(0, options.TextColor.Length)], + ctx.DrawLine(options.TextColor[random.Next(0, options.TextColor.Length)], RandomTextGenerator.GenerateNextFloat(options.MinLineThickness, options.MaxLineThickness), new PointF[] { new PointF(x0, y0), new PointF(x1, y1) }) ); @@ -154,14 +156,14 @@ public class SimpleMathsCaptchaGenerator : ITransientDependency img.Mutate(ctx => ctx.DrawImage(image, 0.80f)); - Parallel.For(0, options.NoiseRate, i => + Parallel.For(0, options.NoiseRate, _ => { - var x0 = random.Next(0, img.Width); - var y0 = random.Next(0, img.Height); + var x0 = random.Next(0, img.Width - 1); + var y0 = random.Next(0, img.Height - 1); img.Mutate( ctx => ctx - .DrawLines(options.NoiseRateColor[random.Next(0, options.NoiseRateColor.Length)], - RandomTextGenerator.GenerateNextFloat(0.5, 1.5), new PointF[] { new Vector2(x0, y0), new Vector2(x0, y0) }) + .DrawLine(options.NoiseRateColor[random.Next(0, options.NoiseRateColor.Length)], + RandomTextGenerator.GenerateNextFloat(0.5, 1.5), new (x0, y0), new (x0 + 0.01f, y0 + 0.01f)) ); }); diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj index ac6f26aa08..81d3a66bea 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj @@ -18,7 +18,7 @@ - + From c80cf4a9a432708a9bd7d56478247e8f63a28206 Mon Sep 17 00:00:00 2001 From: Salih Date: Thu, 19 Oct 2023 13:47:42 +0300 Subject: [PATCH 39/70] Add new localizations --- .../Community/Localization/Resources/en.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json index f295468ded..d9326a3683 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json @@ -235,6 +235,13 @@ "SponsoredConferencesDescription": "We are honoring to support .NET communities and events for software developers.", "UpcomingEvents": "Upcoming 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" } } From 4b739927373d35156b7d0efb09e1b93b54a4d552 Mon Sep 17 00:00:00 2001 From: Sinan997 Date: Thu, 19 Oct 2023 16:39:59 +0300 Subject: [PATCH 40/70] lint test files --- .../packages/core/src/lib/tests/capsLock.directive.spec.ts | 2 +- .../core/src/lib/tests/show-password-directive.spec.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/tests/capsLock.directive.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/capsLock.directive.spec.ts index 3182dfa2dd..9ba6095206 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/capsLock.directive.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/capsLock.directive.spec.ts @@ -11,7 +11,7 @@ import { By } from '@angular/platform-browser'; imports:[TrackCapsLockDirective] }) class TestComponent { - capsLock:boolean = false + capsLock = false } describe('TrackCapsLockDirective',()=>{ diff --git a/npm/ng-packs/packages/core/src/lib/tests/show-password-directive.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/show-password-directive.spec.ts index 8babb472c4..a1e766dc51 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/show-password-directive.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/show-password-directive.spec.ts @@ -13,7 +13,7 @@ import { By } from '@angular/platform-browser'; imports:[ShowPasswordDirective] }) class TestComponent { - showPassword:boolean = false + showPassword = false } describe('ShowPasswordDirective',()=>{ @@ -46,7 +46,7 @@ describe('ShowPasswordDirective',()=>{ }); it('should have three input has ShowPasswordDirective elements', () => { - let input = des[2].nativeElement + const input = des[2].nativeElement expect(input.type).toBe('password') fixture.componentInstance.showPassword = true fixture.detectChanges() From efd17f7d2f6efa1a089591efef45525fa73b1309 Mon Sep 17 00:00:00 2001 From: Salih Date: Thu, 19 Oct 2023 16:57:59 +0300 Subject: [PATCH 41/70] Add new localizations --- .../AbpIoLocalization/Base/Localization/Resources/en.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json index 92c34ab456..69796af696 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json +++ b/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}EXTRA MONTHS" + "ExtraMonths": "{0}EXTRA MONTHS", + "RSS": "RSS", + "RSSFeed": "RSS Feed" } } From 5a200e7a065e6efdd73f488c24c4f747ef6c90e3 Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Thu, 19 Oct 2023 19:37:14 +0300 Subject: [PATCH 42/70] Update "CMS Kit: Pages" documentation --- docs/en/Modules/Cms-Kit/Pages.md | 10 +++++----- docs/en/images/cmskit-module-pages-page.png | Bin 28831 -> 29426 bytes 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/en/Modules/Cms-Kit/Pages.md b/docs/en/Modules/Cms-Kit/Pages.md index cc1f5074f4..04614dd74a 100644 --- a/docs/en/Modules/Cms-Kit/Pages.md +++ b/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. diff --git a/docs/en/images/cmskit-module-pages-page.png b/docs/en/images/cmskit-module-pages-page.png index b64915493c9351b598b12e73c9f75f93c5d0cf8b..526557756539169ebb5ea0698c623d2132063337 100644 GIT binary patch literal 29426 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 P&g8O7$9#x^bO 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 M)3{rD$0FoE0CS$`ssI20 literal 28831 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 MD%y9;Za)h87d1!~fB*mh From be8e065695087d5e989c599da4c3562b994fa66c Mon Sep 17 00:00:00 2001 From: Salih Date: Fri, 20 Oct 2023 17:52:16 +0300 Subject: [PATCH 43/70] Fix resize and compress problem --- .../Volo/Abp/Imaging/ImageCompressor.cs | 23 +++++++++++++++++++ .../Volo/Abp/Imaging/ImageResizer.cs | 23 +++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/ImageCompressor.cs b/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/ImageCompressor.cs index 11789776c7..e32a7d104e 100644 --- a/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/ImageCompressor.cs +++ b/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, 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(bytes, ImageProcessState.Unsupported); } + + protected virtual void SeekToBegin(Stream stream) + { + if (stream.CanSeek) + { + stream.Seek(0, SeekOrigin.Begin); + } + } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/ImageResizer.cs b/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/ImageResizer.cs index 139fc194dd..4afc879089 100644 --- a/framework/src/Volo.Abp.Imaging.Abstractions/Volo/Abp/Imaging/ImageResizer.cs +++ b/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, 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); + } + } } \ No newline at end of file From 1cf0dbe68597dd09359ac92a136e09eb065ed3b5 Mon Sep 17 00:00:00 2001 From: Salih Date: Fri, 20 Oct 2023 18:05:14 +0300 Subject: [PATCH 44/70] Update Image-Manipulation.md --- docs/en/Image-Manipulation.md | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/docs/en/Image-Manipulation.md b/docs/en/Image-Manipulation.md index 1050b6005e..e1715722aa 100644 --- a/docs/en/Image-Manipulation.md +++ b/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( ); ``` +> If `resizeResult.State` returns 'Done,' it means that the resize operation was successful. However, if it does not return 'Done,' the stream you're using might be corrupt. 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" ); ``` +> If `compressResult.State` returns 'Done,' it means that the compress operation was successful. However, if it does not return 'Done,' the stream you're using might be corrupt. 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: From 85d32f2378c48c8bfc2088f5a0220d1bd877bd2a Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Fri, 20 Oct 2023 21:03:10 +0300 Subject: [PATCH 45/70] Update PackageVersionCheckerService.cs --- .../Version/PackageVersionCheckerService.cs | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/PackageVersionCheckerService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/PackageVersionCheckerService.cs index f4b87ea047..ff35fcf17f 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/PackageVersionCheckerService.cs +++ b/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 HasAnyPackageAsync(string url) + private async Task 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(responseContent).TotalHits > 0; + var nugetSearchResult = JsonSerializer.Deserialize(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(); } await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage); @@ -193,7 +194,7 @@ public class PackageVersionCheckerService : ITransientDependency } catch (Exception) { - return null; + return new List(); } } @@ -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 From bff9fdbaac4b95426a2a736c869701f6ccd66614 Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Mon, 23 Oct 2023 09:45:01 +0300 Subject: [PATCH 46/70] CLI: Should not run `AppTemplateRemoveMongodbCollectionFixtureStep` in nolayers templates since they don't have test projects --- .../Volo/Abp/Cli/ProjectBuilding/Building/TemplateInfo.cs | 6 ++++++ .../App/AppTemplateRemoveMongodbCollectionFixtureStep.cs | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/TemplateInfo.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/TemplateInfo.cs index 88bdc27973..3cf039f5ae 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/TemplateInfo.cs +++ b/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; namespace Volo.Abp.Cli.ProjectBuilding.Building; @@ -35,4 +36,9 @@ public abstract class TemplateInfo { return Name.EndsWith("-pro", StringComparison.OrdinalIgnoreCase); } + + public bool IsNoLayer() + { + return Name is AppNoLayersTemplate.TemplateName or AppNoLayersProTemplate.TemplateName; + } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateRemoveMongodbCollectionFixtureStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateRemoveMongodbCollectionFixtureStep.cs index 842e194eeb..ed290508a2 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateRemoveMongodbCollectionFixtureStep.cs +++ b/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, From dfaee036f881f6e931ed9071d85e95b12aef0c6f Mon Sep 17 00:00:00 2001 From: Salih Date: Mon, 23 Oct 2023 10:56:57 +0300 Subject: [PATCH 47/70] Add new localization --- .../AbpIoLocalization/Admin/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index 22a73d35f7..f3c4c35a4d 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/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" } } From dbf46c481b519baa63f9246403bfb082b7fc2bf5 Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Mon, 23 Oct 2023 11:12:20 +0300 Subject: [PATCH 48/70] Update Image-Manipulation.md --- docs/en/Image-Manipulation.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Image-Manipulation.md b/docs/en/Image-Manipulation.md index e1715722aa..9d946e31dd 100644 --- a/docs/en/Image-Manipulation.md +++ b/docs/en/Image-Manipulation.md @@ -88,7 +88,7 @@ var resizeResult = await _imageResizer.ResizeAsync( ); ``` -> If `resizeResult.State` returns 'Done,' it means that the resize operation was successful. However, if it does not return 'Done,' the stream you're using might be corrupt. Therefore, you can perform a check like the one below and assign the correct stream to the main stream. +> **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) @@ -186,7 +186,7 @@ var compressResult = await _imageCompressor.CompressAsync( ); ``` -> If `compressResult.State` returns 'Done,' it means that the compress operation was successful. However, if it does not return 'Done,' the stream you're using might be corrupt. Therefore, you can perform a check like the one below and assign the correct stream to the main stream. +> **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 From 8c14d30a3d30a9f1945abcd8db076dcc1d71e1b8 Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Mon, 23 Oct 2023 11:15:58 +0300 Subject: [PATCH 49/70] update nx --- npm/ng-packs/migrations.json | 112 ++++++++++++++++++++++++++++++++--- npm/ng-packs/package.json | 80 +++++++++++-------------- 2 files changed, 139 insertions(+), 53 deletions(-) diff --git a/npm/ng-packs/migrations.json b/npm/ng-packs/migrations.json index a0b431b16a..0e2ed93d08 100644 --- a/npm/ng-packs/migrations.json +++ b/npm/ng-packs/migrations.json @@ -2,19 +2,115 @@ "migrations": [ { "cli": "nx", - "version": "16.2.0-beta.0", - "description": "Remove outputPath from run commands", - "implementation": "./src/migrations/update-16-2-0/remove-run-commands-output-path", + "version": "16.6.0-beta.6", + "description": "Prefix outputs with {workspaceRoot}/{projectRoot} if needed", + "implementation": "./src/migrations/update-15-0-0/prefix-outputs", "package": "nx", - "name": "16.2.0-remove-output-path-from-run-commands" + "name": "16.6.0-prefix-outputs" }, { "cli": "nx", - "version": "16.2.0-beta.0", - "description": "Normalize tsconfig.cy.json files to be located at '/cypress/tsconfig.json'", - "implementation": "./src/migrations/update-16-2-0/update-cy-tsconfig", + "version": "16.8.0-beta.3", + "description": "Escape $ in env variables", + "implementation": "./src/migrations/update-16-8-0/escape-dollar-sign-env-variables", + "package": "nx", + "name": "16.8.0-escape-dollar-sign-env" + }, + { + "version": "16.8.0", + "description": "update-16-8-0-add-ignored-files", + "implementation": "./src/migrations/update-16-8-0-add-ignored-files/update-16-8-0-add-ignored-files", + "package": "@nx/linter", + "name": "update-16-8-0-add-ignored-files" + }, + { + "cli": "nx", + "version": "16.9.0-beta.1", + "description": "Replace imports of Module Federation utils frm @nx/devkit to @nx/webpack", + "implementation": "./src/migrations/update-16-9-0/migrate-mf-util-usage", + "package": "@nx/devkit", + "name": "update-16-9-0-migrate-mf-usage-to-webpack" + }, + { + "cli": "nx", + "version": "16.4.0-beta.6", + "requires": { + "@angular-eslint/eslint-plugin-template": ">=16.0.0" + }, + "description": "Remove the 'accessibility-' prefix from '@angular-eslint/eslint-plugin-template' rules.", + "factory": "./src/migrations/update-16-4-0/rename-angular-eslint-accesibility-rules", + "package": "@nx/angular", + "name": "rename-angular-eslint-accesibility-rules" + }, + { + "cli": "nx", + "version": "16.4.0-beta.11", + "requires": { + "@angular/core": ">=16.1.0" + }, + "description": "Update the @angular/cli package version to ~16.1.0.", + "factory": "./src/migrations/update-16-4-0/update-angular-cli", + "package": "@nx/angular", + "name": "update-angular-cli-version-16-1-0" + }, + { + "cli": "nx", + "version": "16.6.0-beta.0", + "description": "Explicitly set 'updateBuildableProjectDepsInPackageJson' to 'true' in targets that rely on that value as the default.", + "factory": "./src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps", + "package": "@nx/angular", + "name": "explicitly-set-projects-to-update-buildable-deps" + }, + { + "cli": "nx", + "version": "16.7.0-beta.6", + "requires": { + "@angular/core": ">=16.2.0" + }, + "description": "Update the @angular/cli package version to ~16.2.0.", + "factory": "./src/migrations/update-16-7-0/update-angular-cli", + "package": "@nx/angular", + "name": "update-angular-cli-version-16-2-0" + }, + { + "cli": "nx", + "version": "16.4.0-beta.10", + "description": "Remove tsconfig.e2e.json and add settings to project tsconfig.json. tsConfigs executor option is now deprecated. The project level tsconfig.json file should be used instead.", + "implementation": "./src/migrations/update-16-4-0/tsconfig-sourcemaps", "package": "@nx/cypress", - "name": "update-16-2-0-normalize-tsconfigs" + "name": "update-16-3-0-remove-old-tsconfigs" + }, + { + "cli": "nx", + "version": "16.8.0-beta.4", + "description": "Update to Cypress v13. Most noteable change is video recording is off by default. This migration will only update if the workspace is already on Cypress v12. https://docs.cypress.io/guides/references/migration-guide#Migrating-to-Cypress-130", + "implementation": "./src/migrations/update-16-8-0/cypress-13", + "package": "@nx/cypress", + "name": "update-16-8-0-cypress-13" + }, + { + "cli": "nx", + "version": "16.5.0-beta.2", + "description": "Add test-setup.ts to ignored files in production input", + "implementation": "./src/migrations/update-16-5-0/add-test-setup-to-inputs-ignore", + "package": "@nx/jest", + "name": "add-test-setup-to-inputs-ignore" + }, + { + "cli": "nx", + "version": "16.6.0-beta.0", + "description": "Explicitly set 'updateBuildableProjectDepsInPackageJson' to 'true' in targets that rely on that value as the default.", + "factory": "./src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps", + "package": "@nx/js", + "name": "explicitly-set-projects-to-update-buildable-deps" + }, + { + "cli": "nx", + "version": "16.8.2-beta.0", + "description": "Remove invalid options (strict, noInterop) for ES6 type modules.", + "factory": "./src/migrations/update-16-8-2/update-swcrc", + "package": "@nx/js", + "name": "16-8-2-update-swcrc" } ] } diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index 8ec7c2f77c..9ca15c0eb6 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -44,69 +44,58 @@ }, "private": true, "devDependencies": { - "@abp/ng.account": "~7.4.0", - "@abp/ng.account.core": "~7.4.0", - "@abp/ng.core": "~7.4.0", - "@abp/ng.feature-management": "~7.4.0", - "@abp/ng.identity": "~7.4.0", - "@abp/ng.oauth": "~7.4.0", - "@abp/ng.permission-management": "~7.4.0", - "@abp/ng.schematics": "~7.4.0", - "@abp/ng.setting-management": "~7.4.0", - "@abp/ng.tenant-management": "~7.4.0", - "@abp/ng.theme.basic": "~7.4.0", + "@abp/ng.theme.lepton-x": "~2.4.0", - "@abp/ng.theme.shared": "~7.4.0", "@abp/utils": "~7.4.0", - "@angular-devkit/build-angular": "~16.0.0", - "@angular-devkit/core": "~16.0.0", - "@angular-devkit/schematics": "~16.0.0", + "@angular-devkit/build-angular": "16.2.7", + "@angular-devkit/core": "16.2.7", + "@angular-devkit/schematics": "16.2.7", "@angular-devkit/schematics-cli": "~16.0.0", "@angular-eslint/eslint-plugin": "~16.0.0", "@angular-eslint/eslint-plugin-template": "~16.0.0", "@angular-eslint/template-parser": "~16.0.0", - "@angular/animations": "~16.0.0", + "@angular/animations": "16.2.10", "@angular/cli": "~16.0.0", - "@angular/common": "~16.0.0", - "@angular/compiler": "~16.0.0", - "@angular/compiler-cli": "~16.0.0", - "@angular/core": "~16.0.0", - "@angular/forms": "~16.0.0", - "@angular/language-service": "~16.0.0", - "@angular/localize": "~16.0.0", - "@angular/platform-browser": "~16.0.0", - "@angular/platform-browser-dynamic": "~16.0.0", - "@angular/router": "~16.0.0", + "@angular/common": "16.2.10", + "@angular/compiler": "16.2.10", + "@angular/compiler-cli": "16.2.10", + "@angular/core": "16.2.10", + "@angular/forms": "16.2.10", + "@angular/language-service": "16.2.10", + "@angular/localize": "16.2.10", + "@angular/platform-browser": "16.2.10", + "@angular/platform-browser-dynamic": "16.2.10", + "@angular/router": "16.2.10", "@fortawesome/fontawesome-free": "^5.15.4", "@ng-bootstrap/ng-bootstrap": "^15.0.0", "@ngneat/spectator": "^10.0.0", "@ngx-validate/core": "^0.2.0", - "@nx/angular": "16.2.2", - "@nx/cypress": "16.2.2", - "@nx/eslint-plugin": "16.2.2", - "@nx/jest": "16.2.2", - "@nx/js": "16.2.2", - "@nx/linter": "16.2.2", - "@nx/workspace": "16.2.2", + "@nx/angular": "16.9.0", + "@nx/cypress": "16.9.0", + "@nx/eslint-plugin": "16.9.0", + "@nx/jest": "16.9.0", + "@nx/js": "16.9.0", + "@nx/linter": "16.9.0", + "@nx/workspace": "16.9.0", "@popperjs/core": "~2.11.2", - "@schematics/angular": "~16.0.0", + "@schematics/angular": "16.2.7", "@swc-node/register": "~1.4.2", "@swc/cli": "~0.1.62", - "@swc/core": "~1.3.51", + "@swc/core": "1.3.94", "@swimlane/ngx-datatable": "^20.0.0", "@types/jest": "29.4.4", "@types/node": "20.2.5", - "@typescript-eslint/eslint-plugin": "5.59.5", - "@typescript-eslint/parser": "5.59.5", + "@typescript-eslint/eslint-plugin": "5.62.0", + "@typescript-eslint/parser": "5.62.0", "angular-oauth2-oidc": "^15.0.1", "bootstrap": "^5.1.1", "bootstrap-icons": "^1.10.3", "chart.js": "^3.5.1", "cypress": "^7.3.0", "dotenv": "10.0.0", - "eslint": "8.15.0", + "eslint": "8.46.0", "eslint-config-prettier": "8.1.0", - "eslint-plugin-cypress": "^2.10.3", + "eslint-plugin-cypress": "2.15.1", "got": "^11.5.2", "jest": "29.4.3", "jest-canvas-mock": "^2.3.1", @@ -118,9 +107,9 @@ "just-compare": "^2.3.0", "lerna": "^4.0.0", "lint-staged": "^13.0.3", - "ng-packagr": "~16.0.0", + "ng-packagr": "16.2.3", "ng-zorro-antd": "^16.0.0", - "nx": "16.2.2", + "nx": "16.9.0", "perfect-scrollbar": "^1.5.5", "postcss": "^8.3.9", "postcss-import": "14.1.0", @@ -135,11 +124,11 @@ "ts-toolbelt": "6.15.4", "tslib": "^2.3.0", "tslint": "~6.1.0", - "typescript": "5.0.4", + "typescript": "5.1.6", "zone.js": "~0.13.0", - "@nx/devkit": "16.2.2", - "@nx/plugin": "^16.2.2", - "@swc/helpers": "~0.5.0" + "@nx/devkit": "16.9.0", + "@nx/plugin": "16.9.0", + "@swc/helpers": "0.5.3" }, "lint-staged": { "**/*.{js,jsx,ts,tsx,html,css,scss}": [ @@ -148,3 +137,4 @@ }, "dependencies": {} } + From 0a5fa631f8fe66061cdfc344645b28264cb3ed69 Mon Sep 17 00:00:00 2001 From: Salih Date: Mon, 23 Oct 2023 14:23:52 +0300 Subject: [PATCH 50/70] Update en.json --- .../AbpIoLocalization/Community/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json index d9326a3683..4c7cda3a27 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json @@ -242,6 +242,7 @@ "{0}Posts": "{0} Posts", "LATESTPOSTS": "LATEST POSTS", "NoContributorsFound": "No contributors found!", - "LatestPost": "Latest post" + "LatestPost": "Latest post", + "MEMBERSINCE{0}": "MEMBER SINCE {0}" } } From e6d530b02cffd9d83f1e0b2621b30a713430416a Mon Sep 17 00:00:00 2001 From: Salih Date: Mon, 23 Oct 2023 16:05:35 +0300 Subject: [PATCH 51/70] Update en.json --- .../Community/Localization/Resources/en.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json index 4c7cda3a27..3c8c8ac397 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json @@ -243,6 +243,11 @@ "LATESTPOSTS": "LATEST POSTS", "NoContributorsFound": "No contributors found!", "LatestPost": "Latest post", - "MEMBERSINCE{0}": "MEMBER SINCE {0}" + "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}" } } From 4e1429c70901dfc1a5f31f296847ef4e9f751e72 Mon Sep 17 00:00:00 2001 From: masumulu28 Date: Tue, 24 Oct 2023 11:17:32 +0300 Subject: [PATCH 52/70] fix: add route item to app-routing after create module --- .../AngularSourceCodeAdder.cs | 67 ++++++++++++++----- 1 file changed, 51 insertions(+), 16 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularSourceCodeAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularSourceCodeAdder.cs index 42e23ab7c8..7cf083fa1a 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularSourceCodeAdder.cs +++ b/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 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 GetProjectPackageNameAsync(string angularProjectsPath, string project) { var packageJsonPath = Path.Combine(angularProjectsPath, project, "package.json"); From e9c8804fb6d91f6e55c537eb2f8f2b4ab0219201 Mon Sep 17 00:00:00 2001 From: selman koc <64414348+skoc10@users.noreply.github.com> Date: Tue, 24 Oct 2023 11:33:54 +0300 Subject: [PATCH 53/70] Update version to release 7.4.1 --- common.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common.props b/common.props index 90cd1a1b4a..b2e66d8dd0 100644 --- a/common.props +++ b/common.props @@ -1,7 +1,7 @@ latest - 7.4.0 + 7.4.1 $(NoWarn);CS1591;CS0436 https://abp.io/assets/abp_nupkg.png https://abp.io/ From 3b2fb353d4efeef1de3bcc6c2bbe7282cf8463a4 Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Tue, 24 Oct 2023 16:43:27 +0300 Subject: [PATCH 54/70] bump version on abp templates --- npm/ng-packs/package.json | 11 +++-- templates/app-nolayers/angular/package.json | 42 +++++++++---------- templates/app/angular/package.json | 40 +++++++++--------- templates/module/angular/package.json | 46 ++++++++++----------- 4 files changed, 67 insertions(+), 72 deletions(-) diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index 9ca15c0eb6..146e04e56c 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -44,18 +44,17 @@ }, "private": true, "devDependencies": { - "@abp/ng.theme.lepton-x": "~2.4.0", "@abp/utils": "~7.4.0", "@angular-devkit/build-angular": "16.2.7", "@angular-devkit/core": "16.2.7", "@angular-devkit/schematics": "16.2.7", - "@angular-devkit/schematics-cli": "~16.0.0", - "@angular-eslint/eslint-plugin": "~16.0.0", - "@angular-eslint/eslint-plugin-template": "~16.0.0", - "@angular-eslint/template-parser": "~16.0.0", + "@angular-devkit/schematics-cli": "~16.2.0", + "@angular-eslint/eslint-plugin": "~16.2.0", + "@angular-eslint/eslint-plugin-template": "~16.2.0", + "@angular-eslint/template-parser": "~16.1.0", "@angular/animations": "16.2.10", - "@angular/cli": "~16.0.0", + "@angular/cli": "~16.2.0", "@angular/common": "16.2.10", "@angular/compiler": "16.2.10", "@angular/compiler-cli": "16.2.10", diff --git a/templates/app-nolayers/angular/package.json b/templates/app-nolayers/angular/package.json index de32293bb3..5e5a446743 100644 --- a/templates/app-nolayers/angular/package.json +++ b/templates/app-nolayers/angular/package.json @@ -21,31 +21,31 @@ "@abp/ng.tenant-management": "~7.4.0", "@abp/ng.theme.shared": "~7.4.0", "@abp/ng.theme.lepton-x": "~2.4.0", - "@angular/animations": "~16.0.0", - "@angular/common": "~16.0.0", - "@angular/compiler": "~16.0.0", - "@angular/core": "~16.0.0", - "@angular/forms": "~16.0.0", - "@angular/localize": "~16.0.0", - "@angular/platform-browser": "~16.0.0", - "@angular/platform-browser-dynamic": "~16.0.0", - "@angular/router": "~16.0.0", - "rxjs": "7.8.1", + "@angular/animations": "~16.2.0", + "@angular/common": "~16.2.0", + "@angular/compiler": "~16.2.0", + "@angular/core": "~16.2.0", + "@angular/forms": "~16.2.0", + "@angular/localize": "~16.2.0", + "@angular/platform-browser": "~16.2.0", + "@angular/platform-browser-dynamic": "~16.2.0", + "@angular/router": "~16.2.0", + "rxjs": "~7.4.0", "tslib": "^2.1.0", "bootstrap-icons": "~1.8.3", "zone.js": "~0.13.0" }, "devDependencies": { + "@angular-devkit/build-angular": "~16.2.0", + "@angular-eslint/builder": "~16.2.0", + "@angular-eslint/eslint-plugin": "~16.2.0", + "@angular-eslint/eslint-plugin-template": "~16.2.0", + "@angular-eslint/schematics": "~16.2.0", + "@angular-eslint/template-parser": "~16.2.0", "@abp/ng.schematics": "~7.4.0", - "@angular-devkit/build-angular": "~16.0.0", - "@angular-eslint/builder": "~16.0.0", - "@angular-eslint/eslint-plugin": "~16.0.0", - "@angular-eslint/eslint-plugin-template": "~16.0.0", - "@angular-eslint/schematics": "~16.0.0", - "@angular-eslint/template-parser": "~16.0.0", - "@angular/cli": "~16.0.0", - "@angular/compiler-cli": "~16.0.0", - "@angular/language-service": "~16.0.0", + "@angular/cli": "~16.2.0", + "@angular/compiler-cli": "~16.2.0", + "@angular/language-service": "~16.2.0", "@types/jasmine": "~3.6.0", "@types/node": "^12.11.1", "@typescript-eslint/eslint-plugin": "^5.36.2", @@ -57,7 +57,7 @@ "karma-coverage": "~2.1.0", "karma-jasmine": "~4.0.0", "karma-jasmine-html-reporter": "^1.7.0", - "ng-packagr": "^16.0.0", + "ng-packagr": "~16.2.0", "typescript": "~5.0.4" } -} \ No newline at end of file +} diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json index 5a84ede9f5..428834d181 100644 --- a/templates/app/angular/package.json +++ b/templates/app/angular/package.json @@ -21,31 +21,31 @@ "@abp/ng.tenant-management": "~7.4.0", "@abp/ng.theme.shared": "~7.4.0", "@abp/ng.theme.lepton-x": "~2.4.0", - "@angular/animations": "~16.0.0", - "@angular/common": "~16.0.0", - "@angular/compiler": "~16.0.0", - "@angular/core": "~16.0.0", - "@angular/forms": "~16.0.0", - "@angular/localize": "~16.0.0", - "@angular/platform-browser": "~16.0.0", - "@angular/platform-browser-dynamic": "~16.0.0", - "@angular/router": "~16.0.0", + "@angular/animations": "~16.2.0", + "@angular/common": "~16.2.0", + "@angular/compiler": "~16.2.0", + "@angular/core": "~16.2.0", + "@angular/forms": "~16.2.0", + "@angular/localize": "~16.2.0", + "@angular/platform-browser": "~16.2.0", + "@angular/platform-browser-dynamic": "~16.2.0", + "@angular/router": "~16.2.0", "bootstrap-icons": "~1.8.3", - "rxjs": "7.8.1", + "rxjs": "~7.4.0", "tslib": "^2.1.0", "zone.js": "~0.13.0" }, "devDependencies": { - "@angular-devkit/build-angular": "~16.0.0", - "@angular-eslint/builder": "~16.0.0", - "@angular-eslint/eslint-plugin": "~16.0.0", - "@angular-eslint/eslint-plugin-template": "~16.0.0", - "@angular-eslint/schematics": "~16.0.0", - "@angular-eslint/template-parser": "~16.0.0", + "@angular-devkit/build-angular": "~16.2.0", + "@angular-eslint/builder": "~16.2.0", + "@angular-eslint/eslint-plugin": "~16.2.0", + "@angular-eslint/eslint-plugin-template": "~16.2.0", + "@angular-eslint/schematics": "~16.2.0", + "@angular-eslint/template-parser": "~16.2.0", "@abp/ng.schematics": "~7.4.0", - "@angular/cli": "~16.0.0", - "@angular/compiler-cli": "~16.0.0", - "@angular/language-service": "~16.0.0", + "@angular/cli": "~16.2.0", + "@angular/compiler-cli": "~16.2.0", + "@angular/language-service": "~16.2.0", "@types/jasmine": "~3.6.0", "@types/node": "^12.11.1", "@typescript-eslint/eslint-plugin": "^5.36.2", @@ -59,4 +59,4 @@ "karma-jasmine-html-reporter": "^1.7.0", "typescript": "~5.0.4" } -} \ No newline at end of file +} diff --git a/templates/module/angular/package.json b/templates/module/angular/package.json index 531a13de51..59093f8585 100644 --- a/templates/module/angular/package.json +++ b/templates/module/angular/package.json @@ -6,12 +6,9 @@ "start": "ng serve dev-app --open", "build": "ng build my-project-name --configuration production", "build:app": "npm run symlink:copy -- --no-watch && ng build dev-app --configuration production", - "symlink:copy": "symlink copy --angular --packages @my-company-name/my-project-name --configuration production", "test": "ng test", "lint": "ng lint", - "e2e": "ng e2e", - "compile:ivy": "yarn ngcc --properties es2015 browser module main --first-only --create-ivy-entry-points --tsconfig './tsconfig.prod.json' --source node_modules --async false", - "postinstall": "npm run compile:ivy" + "e2e": "ng e2e" }, "private": true, "dependencies": { @@ -24,30 +21,30 @@ "@abp/ng.tenant-management": "~7.4.0", "@abp/ng.theme.basic": "~7.4.0", "@abp/ng.theme.shared": "~7.4.0", - "@angular/animations": "~16.0.0", - "@angular/common": "~16.0.0", - "@angular/compiler": "~16.0.0", - "@angular/core": "~16.0.0", - "@angular/forms": "~16.0.0", - "@angular/localize": "~16.0.0", - "@angular/platform-browser": "~16.0.0", - "@angular/platform-browser-dynamic": "~16.0.0", - "@angular/router": "~16.0.0", - "rxjs": "7.8.1", + "@angular/animations": "~16.2.0", + "@angular/common": "~16.2.0", + "@angular/compiler": "~16.2.0", + "@angular/core": "~16.2.0", + "@angular/forms": "~16.2.0", + "@angular/localize": "~16.2.0", + "@angular/platform-browser": "~16.2.0", + "@angular/platform-browser-dynamic": "~16.2.0", + "@angular/router": "~16.2.0", + "rxjs": "~7.4.0", "tslib": "^2.1.0", "zone.js": "~0.13.0" }, "devDependencies": { + "@angular-devkit/build-angular": "~16.2.0", + "@angular-eslint/builder": "~16.2.0", + "@angular-eslint/eslint-plugin": "~16.2.0", + "@angular-eslint/eslint-plugin-template": "~16.2.0", + "@angular-eslint/schematics": "~16.2.0", + "@angular-eslint/template-parser": "~16.2.0", "@abp/ng.schematics": "~7.4.0", - "@angular-devkit/build-angular": "~16.0.0", - "@angular-eslint/builder": "~16.0.0", - "@angular-eslint/eslint-plugin": "~16.0.0", - "@angular-eslint/eslint-plugin-template": "~16.0.0", - "@angular-eslint/schematics": "~16.0.0", - "@angular-eslint/template-parser": "~16.0.0", - "@angular/cli": "~16.0.0", - "@angular/compiler-cli": "~16.0.0", - "@angular/language-service": "~16.0.0", + "@angular/cli": "~16.2.0", + "@angular/compiler-cli": "~16.2.0", + "@angular/language-service": "~16.2.0", "@types/jasmine": "~3.6.0", "@types/node": "^12.11.1", "@typescript-eslint/eslint-plugin": "^5.36.2", @@ -59,7 +56,6 @@ "karma-coverage": "~2.1.0", "karma-jasmine": "~4.0.0", "karma-jasmine-html-reporter": "^1.7.0", - "symlink-manager": "^1.5.0", "typescript": "~5.0.4" } -} \ No newline at end of file +} From 70c46b3c1c96ba944d7ff665cd24fff212b3a564 Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Tue, 24 Oct 2023 16:46:50 +0300 Subject: [PATCH 55/70] bump angular version on schematic package --- npm/ng-packs/packages/schematics/package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/npm/ng-packs/packages/schematics/package.json b/npm/ng-packs/packages/schematics/package.json index 2389ce3f45..e8655768b9 100644 --- a/npm/ng-packs/packages/schematics/package.json +++ b/npm/ng-packs/packages/schematics/package.json @@ -4,16 +4,16 @@ "author": "", "schematics": "./collection.json", "dependencies": { - "@angular-devkit/core": "~16.0.0", - "@angular-devkit/schematics": "~16.0.0", - "@angular/cli": "~16.0.0", + "@angular-devkit/core": "~16.2.0", + "@angular-devkit/schematics": "~16.2.0", + "@angular/cli": "~16.2.0", "got": "^11.5.2", "jsonc-parser": "^2.3.0", "should-quote": "^1.0.0", "typescript": "5.0.4" }, "devDependencies": { - "@schematics/angular": "~16.0.0", + "@schematics/angular": "~16.2.0", "@types/jest": "29.4.4", "@types/node": "20.2.5", "jest": "29.4.3", From a1499840b881ab2fd5cb8dec46dce7a385f6f6c8 Mon Sep 17 00:00:00 2001 From: masumulu28 Date: Tue, 24 Oct 2023 17:39:27 +0300 Subject: [PATCH 56/70] Normalize angular package's versions --- npm/ng-packs/package.json | 72 +++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index 146e04e56c..376fc1daa5 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -46,26 +46,26 @@ "devDependencies": { "@abp/ng.theme.lepton-x": "~2.4.0", "@abp/utils": "~7.4.0", - "@angular-devkit/build-angular": "16.2.7", - "@angular-devkit/core": "16.2.7", - "@angular-devkit/schematics": "16.2.7", + "@angular-devkit/build-angular": "~16.2.0", + "@angular-devkit/core": "~16.2.0", + "@angular-devkit/schematics": "~16.2.0", "@angular-devkit/schematics-cli": "~16.2.0", "@angular-eslint/eslint-plugin": "~16.2.0", "@angular-eslint/eslint-plugin-template": "~16.2.0", - "@angular-eslint/template-parser": "~16.1.0", - "@angular/animations": "16.2.10", + "@angular-eslint/template-parser": "~16.2.0", + "@angular/animations": "~16.2.0", "@angular/cli": "~16.2.0", - "@angular/common": "16.2.10", - "@angular/compiler": "16.2.10", - "@angular/compiler-cli": "16.2.10", - "@angular/core": "16.2.10", - "@angular/forms": "16.2.10", - "@angular/language-service": "16.2.10", - "@angular/localize": "16.2.10", - "@angular/platform-browser": "16.2.10", - "@angular/platform-browser-dynamic": "16.2.10", - "@angular/router": "16.2.10", - "@fortawesome/fontawesome-free": "^5.15.4", + "@angular/common": "~16.2.0", + "@angular/compiler": "~16.2.0", + "@angular/compiler-cli": "~16.2.0", + "@angular/core": "~16.2.0", + "@angular/forms": "~16.2.0", + "@angular/language-service": "~16.2.0", + "@angular/localize": "~16.2.0", + "@angular/platform-browser": "~16.2.0", + "@angular/platform-browser-dynamic": "~16.2.0", + "@angular/router": "~16.2.0", + "@fortawesome/fontawesome-free": "^5.0.0", "@ng-bootstrap/ng-bootstrap": "^15.0.0", "@ngneat/spectator": "^10.0.0", "@ngx-validate/core": "^0.2.0", @@ -76,41 +76,41 @@ "@nx/js": "16.9.0", "@nx/linter": "16.9.0", "@nx/workspace": "16.9.0", - "@popperjs/core": "~2.11.2", - "@schematics/angular": "16.2.7", - "@swc-node/register": "~1.4.2", - "@swc/cli": "~0.1.62", + "@popperjs/core": "~2.11.0", + "@schematics/angular": "~16.2.0", + "@swc-node/register": "~1.4.0", + "@swc/cli": "~0.1.0", "@swc/core": "1.3.94", "@swimlane/ngx-datatable": "^20.0.0", "@types/jest": "29.4.4", "@types/node": "20.2.5", "@typescript-eslint/eslint-plugin": "5.62.0", "@typescript-eslint/parser": "5.62.0", - "angular-oauth2-oidc": "^15.0.1", - "bootstrap": "^5.1.1", - "bootstrap-icons": "^1.10.3", - "chart.js": "^3.5.1", - "cypress": "^7.3.0", + "angular-oauth2-oidc": "^15.0.0", + "bootstrap": "^5.0.0", + "bootstrap-icons": "^1.0.0", + "chart.js": "^3.0.0", + "cypress": "^7.0.0", "dotenv": "10.0.0", "eslint": "8.46.0", "eslint-config-prettier": "8.1.0", "eslint-plugin-cypress": "2.15.1", - "got": "^11.5.2", + "got": "^11.0.0", "jest": "29.4.3", - "jest-canvas-mock": "^2.3.1", + "jest-canvas-mock": "^2.0.0", "jest-environment-jsdom": "29.4.3", "jest-preset-angular": "13.1.0", - "jsonc-eslint-parser": "^2.1.0", - "jsonc-parser": "^2.3.0", - "just-clone": "^6.1.1", - "just-compare": "^2.3.0", + "jsonc-eslint-parser": "^2.0.0", + "jsonc-parser": "^2.0.0", + "just-clone": "^6.0.0", + "just-compare": "^2.0.0", "lerna": "^4.0.0", - "lint-staged": "^13.0.3", - "ng-packagr": "16.2.3", + "lint-staged": "^13.0.0", + "ng-packagr": "~16.2.0", "ng-zorro-antd": "^16.0.0", "nx": "16.9.0", - "perfect-scrollbar": "^1.5.5", - "postcss": "^8.3.9", + "perfect-scrollbar": "^1.0.0", + "postcss": "^8.0.0", "postcss-import": "14.1.0", "postcss-preset-env": "7.5.0", "postcss-url": "10.1.3", @@ -121,7 +121,7 @@ "ts-jest": "29.1.0", "ts-node": "10.9.1", "ts-toolbelt": "6.15.4", - "tslib": "^2.3.0", + "tslib": "^2.0.0", "tslint": "~6.1.0", "typescript": "5.1.6", "zone.js": "~0.13.0", From 11517bfb3bd9b14eb14d60322f314d9cc0cf160d Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 25 Oct 2023 10:32:23 +0800 Subject: [PATCH 57/70] Generate-proxy support with complex generic types --- .../CSharp/CSharpServiceProxyGenerator.cs | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs index 45b93423c4..5c17296272 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs @@ -538,18 +538,9 @@ public class CSharpServiceProxyGenerator : ServiceProxyGeneratorBase")) - { - 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 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; From 1be36f1a51512e5e55ca3a23999cc4908e687c69 Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Wed, 25 Oct 2023 11:16:53 +0300 Subject: [PATCH 58/70] fix lint issues --- .../packages/core/src/lib/tests/capsLock.directive.spec.ts | 2 +- .../core/src/lib/tests/show-password-directive.spec.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/tests/capsLock.directive.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/capsLock.directive.spec.ts index 3182dfa2dd..9ba6095206 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/capsLock.directive.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/capsLock.directive.spec.ts @@ -11,7 +11,7 @@ import { By } from '@angular/platform-browser'; imports:[TrackCapsLockDirective] }) class TestComponent { - capsLock:boolean = false + capsLock = false } describe('TrackCapsLockDirective',()=>{ diff --git a/npm/ng-packs/packages/core/src/lib/tests/show-password-directive.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/show-password-directive.spec.ts index 8babb472c4..a1e766dc51 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/show-password-directive.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/show-password-directive.spec.ts @@ -13,7 +13,7 @@ import { By } from '@angular/platform-browser'; imports:[ShowPasswordDirective] }) class TestComponent { - showPassword:boolean = false + showPassword = false } describe('ShowPasswordDirective',()=>{ @@ -46,7 +46,7 @@ describe('ShowPasswordDirective',()=>{ }); it('should have three input has ShowPasswordDirective elements', () => { - let input = des[2].nativeElement + const input = des[2].nativeElement expect(input.type).toBe('password') fixture.componentInstance.showPassword = true fixture.detectChanges() From e9a73c0670806d394dd4cbf5aa5d968e82735d5e Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 26 Oct 2023 10:29:57 +0800 Subject: [PATCH 59/70] Add `Configuring SSL certificate` document. Resolve #17974 --- docs/en/Deployment/Index.md | 1 + docs/en/Deployment/SSL.md | 34 ++++++++++++++++++++++++++++++++++ docs/en/docs-nav.json | 4 ++++ 3 files changed, 39 insertions(+) create mode 100644 docs/en/Deployment/SSL.md diff --git a/docs/en/Deployment/Index.md b/docs/en/Deployment/Index.md index 3eb299b483..37d6c5bcc5 100644 --- a/docs/en/Deployment/Index.md +++ b/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. diff --git a/docs/en/Deployment/SSL.md b/docs/en/Deployment/SSL.md new file mode 100644 index 0000000000..c48c916d93 --- /dev/null +++ b/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/) \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 582dcf98cc..fa0a98915a 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -1363,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" From d5c3619e25c7707fc73f4d907f64cdf9fc392fc0 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 26 Oct 2023 15:00:36 +0800 Subject: [PATCH 60/70] Support `DateOnly` and `TimeOnly` in `AspNetCoreApiDescriptionModelProvider`. --- .../Mvc/AspNetCoreApiDescriptionModelProvider.cs | 2 ++ .../src/Volo.Abp.Core/Volo/Abp/Reflection/TypeHelper.cs | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs index f1d014b76a..0a10835e3c 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AspNetCoreApiDescriptionModelProvider.cs +++ b/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; diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Reflection/TypeHelper.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Reflection/TypeHelper.cs index b439a5a07b..1efa6c4f29 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Reflection/TypeHelper.cs +++ b/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"; From ba11a233fe8c2f1e5f8f55f3fac8e93ff8f1b8c9 Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Thu, 26 Oct 2023 10:26:58 +0300 Subject: [PATCH 61/70] fix canHandle method to correctly handle error status code --- .../src/lib/services/status-code-error-handler.service.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/services/status-code-error-handler.service.ts b/npm/ng-packs/packages/theme-shared/src/lib/services/status-code-error-handler.service.ts index 35239819bf..976bb11702 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/services/status-code-error-handler.service.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/services/status-code-error-handler.service.ts @@ -57,9 +57,9 @@ export class StatusCodeErrorHandlerService implements CustomHttpErrorHandlerServ this.createErrorComponentService.execute(instance); } - canHandle({ status }): boolean { - this.status = status || 0; - return this.handledStatusCodes.indexOf(status) > -1; + canHandle(error): boolean { + this.status = error?.status || 0; + return this.handledStatusCodes.indexOf(this.status) > -1; } execute(): void { From 1c3054454c74188ed1344407a755208740cbb5d9 Mon Sep 17 00:00:00 2001 From: masumulu28 Date: Thu, 26 Oct 2023 12:07:36 +0300 Subject: [PATCH 62/70] Add mapping for DateOnly & TimeOnly structs --- npm/ng-packs/packages/schematics/src/constants/system-types.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/npm/ng-packs/packages/schematics/src/constants/system-types.ts b/npm/ng-packs/packages/schematics/src/constants/system-types.ts index 19a8eee259..d64c36d1b8 100644 --- a/npm/ng-packs/packages/schematics/src/constants/system-types.ts +++ b/npm/ng-packs/packages/schematics/src/constants/system-types.ts @@ -5,6 +5,8 @@ export const SYSTEM_TYPES = new Map([ ['Collections.Generic.Dictionary', 'Record'], ['DateTime', 'string'], ['DateTimeOffset', 'string'], + ['DateOnly', 'string'], + ['TimeOnly', 'string'], ['Decimal', 'number'], ['Double', 'number'], ['Guid', 'string'], From d3832495f06b4396affeedaf418a21c342a04e12 Mon Sep 17 00:00:00 2001 From: Salih Date: Thu, 26 Oct 2023 13:24:54 +0300 Subject: [PATCH 63/70] Add email and userName changed event --- .../Identity/IdentityUserEmailChangedEto.cs | 16 +++++++ .../IdentityUserUserNameChangedEto.cs | 13 ++++++ .../Volo/Abp/Identity/IdentityUserManager.cs | 45 ++++++++++++++++++- 3 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserEmailChangedEto.cs create mode 100644 modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserUserNameChangedEto.cs diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserEmailChangedEto.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserEmailChangedEto.cs new file mode 100644 index 0000000000..c0b1dea34f --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserEmailChangedEto.cs @@ -0,0 +1,16 @@ +using System; +using Volo.Abp.MultiTenancy; + +namespace Volo.Abp.Identity; + +[Serializable] +public class IdentityUserEmailChangedEto : IMultiTenant +{ + public Guid Id { get; set; } + + public Guid? TenantId { get; set; } + + public string Email { get; set; } + + public string OldEmail { get; set; } +} \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserUserNameChangedEto.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserUserNameChangedEto.cs new file mode 100644 index 0000000000..3f86845dca --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserUserNameChangedEto.cs @@ -0,0 +1,13 @@ +using System; +using Volo.Abp.MultiTenancy; + +namespace Volo.Abp.Identity; + +[Serializable] +public class IdentityUserUserNameChangedEto : IMultiTenant +{ + public Guid Id { get; set; } + public Guid? TenantId { get; set; } + public string UserName { get; set; } + public string OldUserName { get; set; } +} \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs index cdbb289597..46f23d2866 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs @@ -10,6 +10,7 @@ using Microsoft.Extensions.Options; using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Services; +using Volo.Abp.EventBus.Distributed; using Volo.Abp.Identity.Settings; using Volo.Abp.Settings; using Volo.Abp.Threading; @@ -25,6 +26,7 @@ public class IdentityUserManager : UserManager, IDomainService protected IOrganizationUnitRepository OrganizationUnitRepository { get; } protected ISettingProvider SettingProvider { get; } protected ICancellationTokenProvider CancellationTokenProvider { get; } + protected IDistributedEventBus DistributedEventBus { get; } protected override CancellationToken CancellationToken => CancellationTokenProvider.Token; @@ -42,7 +44,8 @@ public class IdentityUserManager : UserManager, IDomainService ILogger logger, ICancellationTokenProvider cancellationTokenProvider, IOrganizationUnitRepository organizationUnitRepository, - ISettingProvider settingProvider) + ISettingProvider settingProvider, + IDistributedEventBus distributedEventBus) : base( store, optionsAccessor, @@ -56,6 +59,7 @@ public class IdentityUserManager : UserManager, IDomainService { OrganizationUnitRepository = organizationUnitRepository; SettingProvider = settingProvider; + DistributedEventBus = distributedEventBus; RoleRepository = roleRepository; UserRepository = userRepository; CancellationTokenProvider = cancellationTokenProvider; @@ -285,4 +289,43 @@ public class IdentityUserManager : UserManager, IDomainService await identityUserStore.SetTokenAsync(user, await identityUserStore.GetInternalLoginProviderAsync(), await identityUserStore.GetRecoveryCodeTokenNameAsync(), string.Empty, CancellationToken); } + + public async override Task SetEmailAsync(IdentityUser user, string email) + { + var oldMail = user.Email; + + var result = await base.SetEmailAsync(user, email); + + result.CheckErrors(); + + await DistributedEventBus.PublishAsync( + new IdentityUserEmailChangedEto + { + Id = user.Id, + TenantId = user.TenantId, + Email = email, + OldEmail = oldMail + }); + + return result; + } + + public async override Task SetUserNameAsync(IdentityUser user, string userName) + { + var oldUserName = user.UserName; + + var result = await base.SetUserNameAsync(user, userName); + + result.CheckErrors(); + + await DistributedEventBus.PublishAsync( + new IdentityUserUserNameChangedEto { + Id = user.Id, + TenantId = user.TenantId, + UserName = userName, + OldUserName = oldUserName + }); + + return result; + } } From 9a29530cecaddc1b584ce7baa379dd0a8823715a Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 27 Oct 2023 10:58:08 +0800 Subject: [PATCH 64/70] Exclude `function` parameters in querystrings. --- .../bootstrap/modal-manager.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js index e524881176..1907ec9e23 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js +++ b/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; From fddad4ae70834dd7edf0e3216ec28f66637dfb0d Mon Sep 17 00:00:00 2001 From: Jadyn Date: Fri, 27 Oct 2023 13:16:56 +0800 Subject: [PATCH 65/70] Update zh translate --- .../Volo/Abp/Identity/Localization/zh-Hans.json | 9 ++++++++- .../Volo/Abp/Identity/Localization/zh-Hant.json | 9 ++++++++- .../Resources/AbpSettingManagement/zh-Hans.json | 2 +- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hans.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hans.json index 165ba09b41..eaab0eb3ea 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hans.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hans.json @@ -114,6 +114,13 @@ "Description:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "用户是否可以确认电话号码", "Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "登录时是否需要验证的手机号码.", "Description:Abp.Identity.User.IsUserNameUpdateEnabled": "是否允许用户更新用户名.", - "Description:Abp.Identity.User.IsEmailUpdateEnabled": "是否允许用户更新电子邮箱." + "Description:Abp.Identity.User.IsEmailUpdateEnabled": "是否允许用户更新电子邮箱.", + "Details": "详情", + "CreatedBy": "创建者", + "ModifiedBy": "修改者", + "ModificationTime": "修改时间", + "PasswordUpdateTime": "密码更新时间", + "LockoutEndTime": "锁定结束时间", + "FailedAccessCount": "访问失败次数" } } diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json index d12c44890a..eddabe3446 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json @@ -114,6 +114,13 @@ "Description:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "是否啟用電話認證.", "Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "決定使用者是否需電話認證後才能登入.", "Description:Abp.Identity.User.IsUserNameUpdateEnabled": "決定使用者是否能更新帳號.", - "Description:Abp.Identity.User.IsEmailUpdateEnabled": "決定使用者是否能更新信箱." + "Description:Abp.Identity.User.IsEmailUpdateEnabled": "決定使用者是否能更新信箱.", + "Details": "詳情", + "CreatedBy": "創建者", + "ModifiedBy": "修改者", + "ModificationTime": "修改時間", + "PasswordUpdateTime": "密碼更新時間", + "LockoutEndTime": "鎖定結束時間", + "FailedAccessCount": "訪問失敗次數" } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hans.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hans.json index d229235563..0d1b0226ab 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hans.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hans.json @@ -25,7 +25,7 @@ "SmtpPassword": "密码", "SmtpDomain": "域", "SmtpEnableSsl": "启用ssl", - "SmtpUseDefaultCredentials": "使用默认证书", + "SmtpUseDefaultCredentials": "使用默认凭据", "DefaultFromAddress": "默认发件人", "DefaultFromDisplayName": "默认显示名称", "Feature:SettingManagementGroup": "设置管理", From 1f20fb6466731b73692a11690c31d9e6951e543a Mon Sep 17 00:00:00 2001 From: Salih Date: Fri, 27 Oct 2023 09:47:29 +0300 Subject: [PATCH 66/70] Update IdentityUserManager.cs --- .../Volo/Abp/Identity/IdentityUserManager.cs | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs index 46f23d2866..008ec0fc62 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs @@ -297,15 +297,20 @@ public class IdentityUserManager : UserManager, IDomainService var result = await base.SetEmailAsync(user, email); result.CheckErrors(); - + + if (string.IsNullOrEmpty(oldMail) || oldMail.Equals(email, StringComparison.OrdinalIgnoreCase)) + { + return result; + } + await DistributedEventBus.PublishAsync( - new IdentityUserEmailChangedEto - { - Id = user.Id, - TenantId = user.TenantId, - Email = email, - OldEmail = oldMail - }); + new IdentityUserEmailChangedEto + { + Id = user.Id, + TenantId = user.TenantId, + Email = email, + OldEmail = oldMail + }); return result; } @@ -317,6 +322,11 @@ public class IdentityUserManager : UserManager, IDomainService var result = await base.SetUserNameAsync(user, userName); result.CheckErrors(); + + if (string.IsNullOrEmpty(oldUserName) || oldUserName == userName) + { + return result; + } await DistributedEventBus.PublishAsync( new IdentityUserUserNameChangedEto { From 0eac81d5f4b01de1e03bcf7431e4c055645b8954 Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 27 Oct 2023 16:00:59 +0800 Subject: [PATCH 67/70] Add unit tests. --- .../IdentityUserUserNameChangedEto.cs | 5 +- .../Volo/Abp/Identity/IdentityUserManager.cs | 51 ++++++------- .../Abp/Identity/IdentityUserManager_Tests.cs | 74 +++++++++++++++++++ 3 files changed, 102 insertions(+), 28 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserUserNameChangedEto.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserUserNameChangedEto.cs index 3f86845dca..7745b3cc4f 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserUserNameChangedEto.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserUserNameChangedEto.cs @@ -7,7 +7,10 @@ namespace Volo.Abp.Identity; public class IdentityUserUserNameChangedEto : IMultiTenant { public Guid Id { get; set; } + public Guid? TenantId { get; set; } + public string UserName { get; set; } + public string OldUserName { get; set; } -} \ No newline at end of file +} diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs index 008ec0fc62..fc71966c09 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs @@ -44,7 +44,7 @@ public class IdentityUserManager : UserManager, IDomainService ILogger logger, ICancellationTokenProvider cancellationTokenProvider, IOrganizationUnitRepository organizationUnitRepository, - ISettingProvider settingProvider, + ISettingProvider settingProvider, IDistributedEventBus distributedEventBus) : base( store, @@ -293,49 +293,46 @@ public class IdentityUserManager : UserManager, IDomainService public async override Task SetEmailAsync(IdentityUser user, string email) { var oldMail = user.Email; - + var result = await base.SetEmailAsync(user, email); - + result.CheckErrors(); - if (string.IsNullOrEmpty(oldMail) || oldMail.Equals(email, StringComparison.OrdinalIgnoreCase)) + if (!string.IsNullOrEmpty(oldMail) && !oldMail.Equals(email, StringComparison.OrdinalIgnoreCase)) { - return result; + await DistributedEventBus.PublishAsync( + new IdentityUserEmailChangedEto + { + Id = user.Id, + TenantId = user.TenantId, + Email = email, + OldEmail = oldMail + }); } - await DistributedEventBus.PublishAsync( - new IdentityUserEmailChangedEto - { - Id = user.Id, - TenantId = user.TenantId, - Email = email, - OldEmail = oldMail - }); - return result; } public async override Task SetUserNameAsync(IdentityUser user, string userName) { var oldUserName = user.UserName; - + var result = await base.SetUserNameAsync(user, userName); - + result.CheckErrors(); - - if (string.IsNullOrEmpty(oldUserName) || oldUserName == userName) + + if (!string.IsNullOrEmpty(oldUserName) && !oldUserName.Equals(userName, StringComparison.OrdinalIgnoreCase)) { - return result; + await DistributedEventBus.PublishAsync( + new IdentityUserUserNameChangedEto + { + Id = user.Id, + TenantId = user.TenantId, + UserName = userName, + OldUserName = oldUserName + }); } - await DistributedEventBus.PublishAsync( - new IdentityUserUserNameChangedEto { - Id = user.Id, - TenantId = user.TenantId, - UserName = userName, - OldUserName = oldUserName - }); - return result; } } diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityUserManager_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityUserManager_Tests.cs index 517313abcd..191972d13b 100644 --- a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityUserManager_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityUserManager_Tests.cs @@ -3,9 +3,14 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Identity; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Options; +using NSubstitute; using Shouldly; +using Volo.Abp.EventBus.Distributed; using Volo.Abp.Identity.Settings; +using Volo.Abp.MultiTenancy; using Volo.Abp.Uow; using Xunit; @@ -20,7 +25,9 @@ public class IdentityUserManager_Tests : AbpIdentityDomainTestBase private readonly ILookupNormalizer _lookupNormalizer; private readonly IUnitOfWorkManager _unitOfWorkManager; private readonly IdentityTestData _testData; + private readonly ICurrentTenant _currentTenant; protected IOptions _identityOptions { get; } + protected IDistributedEventBus DistributedEventBus { get; set; } public IdentityUserManager_Tests() { @@ -31,9 +38,16 @@ public class IdentityUserManager_Tests : AbpIdentityDomainTestBase _lookupNormalizer = GetRequiredService(); _testData = GetRequiredService(); _unitOfWorkManager = GetRequiredService(); + _currentTenant = GetRequiredService(); _identityOptions = GetRequiredService>(); } + protected override void AfterAddApplication(IServiceCollection services) + { + DistributedEventBus = Substitute.For(); + services.Replace(ServiceDescriptor.Singleton(DistributedEventBus)); + } + [Fact] public async Task GetByIdAsync() { @@ -249,6 +263,66 @@ public class IdentityUserManager_Tests : AbpIdentityDomainTestBase (await _identityUserManager.ShouldPeriodicallyChangePasswordAsync(user)).ShouldBeTrue(); } + [Fact] + public async Task IdentityUserUserNameChangedEto_Test() + { + var user = CreateRandomUser(); + + (await _identityUserManager.CreateAsync(user)).CheckErrors(); + + await DistributedEventBus.DidNotReceive() + .PublishAsync(Arg.Any(), Arg.Any(), Arg.Any()); + + var newUser = await _identityUserManager.FindByIdAsync(user.Id.ToString()); + newUser.ShouldNotBeNull(); + + using (_currentTenant.Change(Guid.NewGuid())) + { + var oldUsername = newUser.UserName; + await _identityUserManager.SetUserNameAsync(newUser, "newUserName"); + await DistributedEventBus.Received() + .PublishAsync( + Arg.Is(x => + x.Id == newUser.Id && x.TenantId == newUser.TenantId && x.OldUserName == oldUsername && x.UserName == "newUserName"), + Arg.Any(), Arg.Any()); + } + + DistributedEventBus.ClearReceivedCalls(); + await _identityUserManager.SetUserNameAsync(newUser, newUser.UserName); + await DistributedEventBus.DidNotReceive() + .PublishAsync(Arg.Any(), Arg.Any(), Arg.Any()); + } + + [Fact] + public async Task IdentityUserEmailChangedEto_Test() + { + var user = CreateRandomUser(); + + (await _identityUserManager.CreateAsync(user)).CheckErrors(); + + await DistributedEventBus.DidNotReceive() + .PublishAsync(Arg.Any(), Arg.Any(), Arg.Any()); + + var newUser = await _identityUserManager.FindByIdAsync(user.Id.ToString()); + newUser.ShouldNotBeNull(); + + using (_currentTenant.Change(Guid.NewGuid())) + { + var oldEmail = newUser.Email; + await _identityUserManager.SetEmailAsync(newUser, "newEmail@abp.io"); + await DistributedEventBus.Received() + .PublishAsync( + Arg.Is(x => + x.Id == newUser.Id && x.TenantId == newUser.TenantId && x.OldEmail == oldEmail && x.Email == "newEmail@abp.io"), + Arg.Any(), Arg.Any()); + } + + DistributedEventBus.ClearReceivedCalls(); + await _identityUserManager.SetEmailAsync(newUser, newUser.Email); + await DistributedEventBus.DidNotReceive() + .PublishAsync(Arg.Any(), Arg.Any(), Arg.Any()); + } + private async Task CreateRandomDefaultRoleAsync() { await _identityRoleRepository.InsertAsync( From c0a7762b2a0c06bfbf739ffddef4298eac1e08eb Mon Sep 17 00:00:00 2001 From: Salih Date: Fri, 27 Oct 2023 11:12:22 +0300 Subject: [PATCH 68/70] Update IdentityUserManager.cs --- .../Volo/Abp/Identity/IdentityUserManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs index fc71966c09..5ce3663e14 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs @@ -321,7 +321,7 @@ public class IdentityUserManager : UserManager, IDomainService result.CheckErrors(); - if (!string.IsNullOrEmpty(oldUserName) && !oldUserName.Equals(userName, StringComparison.OrdinalIgnoreCase)) + if (!string.IsNullOrEmpty(oldUserName) && oldUserName != userName) { await DistributedEventBus.PublishAsync( new IdentityUserUserNameChangedEto From b78910b6c7a80dfe6d4ab603ac221da15d9f7b06 Mon Sep 17 00:00:00 2001 From: Salih Date: Fri, 27 Oct 2023 14:32:17 +0300 Subject: [PATCH 69/70] Update en.json --- .../Commercial/Localization/Resources/en.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index df6333ea0c..b14d1ffa70 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/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 ABP Commercial.", + "CoolestCompaniesUseABPCommercial": "The coolest companies already use ABP Commercial.", "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 get an additional 2 months 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" } } From 24b9e40b598133873c651012a1250c3022fc6ef3 Mon Sep 17 00:00:00 2001 From: Salih Date: Fri, 27 Oct 2023 17:05:19 +0300 Subject: [PATCH 70/70] Update en.json --- .../AbpIoLocalization/Www/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json index 5d4890331e..0fff7ed719 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json @@ -432,6 +432,7 @@ "PackageDetailPage_ManualInstallationDescription2": "Then add the {0} dependency to your module class as shown in the following example", "PackageDetailPage_SeeDocumentation": "See the documentation to learn how to use this package in your applications.", "PackageDetailPage_InstallingUsingPMC": "3: Installing with the Package Manager Console", - "PackageDetailPage_InstallingUsingPMCDescription1": "Open the Package Manager Console in Visual Studio (Tools -> Nuget Package Manager -> Package Manager Console) and execute the following command" + "PackageDetailPage_InstallingUsingPMCDescription1": "Open the Package Manager Console in Visual Studio (Tools -> Nuget Package Manager -> Package Manager Console) and execute the following command", + "UIOptions": "UI Options" } }