diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index 07bcae05ff..c8bed05d77 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -37,7 +37,7 @@ "NugetPackageTarget.HttpApi": "Http Api", "NugetPackageTarget.HttpApiClient": "Http Api Client", "NugetPackageTarget.Web": "Web", - "NugetPackageTarget.EntityFrameworkCore": "EntityFramework Core", + "NugetPackageTarget.EntityFrameworkCore": "DeleteAllEntityFramework Core", "NugetPackageTarget.MongoDB": "MongoDB", "Edit": "Edit", "Delete": "Delete", @@ -80,6 +80,8 @@ "LastSeenDate": "Last seen date", "{0}Computer{1}WillBeRemovedFromRecords": "Computer of {0} ({1}) will be removed from records", "OrganizationDeletionWarningMessage": "Organization will be deleted", - "This{0}AlreadyExistInThisOrganization": "This {0} already exist in this organization" + "This{0}AlreadyExistInThisOrganization": "This {0} already exist in this organization", + "AreYouSureYouWantToDeleteAllComputers": "Are you sure you want to delete all computers?", + "DeleteAll": "Delete all" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/zh-Hans.json index adab99ff64..bc78a54119 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/zh-Hans.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/zh-Hans.json @@ -79,6 +79,9 @@ "UniqueComputerId": "计算机唯一ID", "LastSeenDate": "上次查看日期", "{0}Computer{1}WillBeRemovedFromRecords": "计算机 {0} ({1}) 将从记录中删除", - "This{0}AlreadyExistInThisOrganization": "该组织中已经存在此 {0}" + "OrganizationDeletionWarningMessage": "组织将被删除", + "This{0}AlreadyExistInThisOrganization": "该组织中已经存在此 {0}", + "AreYouSureYouWantToDeleteAllComputers": "您确定要删除所有计算机吗?", + "DeleteAll": "删除所有" } } \ No newline at end of file diff --git a/docs/en/Tutorials/AspNetCore-Mvc/Part-I.md b/docs/en/Tutorials/AspNetCore-Mvc/Part-I.md index 669bd8c9ec..a1fbd1de54 100644 --- a/docs/en/Tutorials/AspNetCore-Mvc/Part-I.md +++ b/docs/en/Tutorials/AspNetCore-Mvc/Part-I.md @@ -50,6 +50,20 @@ namespace Acme.BookStore public DateTime PublishDate { get; set; } public float Price { get; set; } + + protected Book() + { + + } + + public Book(Guid id, string name, BookType type, DateTime publishDate, float price) + :base(id) + { + Name = name; + Type = type; + PublishDate = publishDate; + Price = price; + } } } ```` diff --git a/docs/en/Tutorials/AspNetCore-Mvc/Part-III.md b/docs/en/Tutorials/AspNetCore-Mvc/Part-III.md index b115eb27ea..f207d9df0c 100644 --- a/docs/en/Tutorials/AspNetCore-Mvc/Part-III.md +++ b/docs/en/Tutorials/AspNetCore-Mvc/Part-III.md @@ -57,25 +57,11 @@ namespace Acme.BookStore public async Task SeedAsync(DataSeedContext context) { await _bookRepository.InsertAsync( - new Book - { - Id = _guidGenerator.Create(), - Name = "Test book 1", - Type = BookType.Fantastic, - PublishDate = new DateTime(2015, 05, 24), - Price = 21 - } + new Book(_guidGenerator.Create(), "Test book 1", BookType.Fantastic, new DateTime(2015, 05, 24), 21) ); await _bookRepository.InsertAsync( - new Book - { - Id = _guidGenerator.Create(), - Name = "Test book 2", - Type = BookType.Science, - PublishDate = new DateTime(2014, 02, 11), - Price = 15 - } + new Book(_guidGenerator.Create(), "Test book 2", BookType.Science, new DateTime(2014, 02, 11), 15) ); } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/DeveloperApiKeyResult.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/DeveloperApiKeyResult.cs index 481aa6f404..fb3622f6eb 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/DeveloperApiKeyResult.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/DeveloperApiKeyResult.cs @@ -8,6 +8,7 @@ namespace Volo.Abp.Cli.Licensing public string OrganizationName { get; set; } public string ApiKey { get; set; } public DateTime? LicenseEndTime { get; set; } + public bool CanDownloadSourceCode { get; set; } public string LicenseCode { get; set; } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/IModuleInfoProvider.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/IModuleInfoProvider.cs index bb8d0d72cb..e9504ca3ef 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/IModuleInfoProvider.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/IModuleInfoProvider.cs @@ -1,4 +1,5 @@ -using System.Threading.Tasks; +using System.Collections.Generic; +using System.Threading.Tasks; using Volo.Abp.Cli.ProjectBuilding.Building; namespace Volo.Abp.Cli.ProjectBuilding @@ -6,5 +7,7 @@ namespace Volo.Abp.Cli.ProjectBuilding public interface IModuleInfoProvider { Task GetAsync(string name); + + Task> GetModuleListAsync(); } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ModuleInfoProvider.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ModuleInfoProvider.cs index 10b3a07172..f0472ad4df 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ModuleInfoProvider.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ModuleInfoProvider.cs @@ -28,7 +28,7 @@ namespace Volo.Abp.Cli.ProjectBuilding public async Task GetAsync(string name) { - var moduleList = await GetModuleListAsync(); + var moduleList = await GetModuleListInternalAsync(); var module = moduleList.FirstOrDefault(m => m.Name == name); @@ -40,7 +40,12 @@ namespace Volo.Abp.Cli.ProjectBuilding return module; } - private async Task> GetModuleListAsync() + public async Task> GetModuleListAsync() + { + return await GetModuleListInternalAsync(); + } + + private async Task> GetModuleListInternalAsync() { using (var client = new CliHttpClient()) { diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json index 0bd6ba5462..f56dc979b1 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json @@ -13,6 +13,7 @@ "DefaultErrorMessage404": "Resource not found!", "DefaultErrorMessage404Detail": "The resource requested could not found on the server!", "EntityNotFoundErrorMessage": "There is no entity {0} with id = {1}!", + "Languages": "Languages", "Error": "Error", "AreYouSure": "Are you sure?", "Cancel": "Cancel", diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/tr.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/tr.json index 2ebd7e06df..c24c381eca 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/tr.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/tr.json @@ -13,6 +13,7 @@ "DefaultErrorMessage404": "Kaynak bulunamadı!", "DefaultErrorMessage404Detail": "İstenilen kaynak sunucuda bulunamadı.", "EntityNotFoundErrorMessage": "Id değeri {1} olan {0} türünden bir nesne bulunamadı!", + "Languages": "Diller", "Error": "Hata", "AreYouSure": "Emin misiniz?", "Cancel": "Vazgeç", diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hans.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hans.json index 1030a3860f..d71cac388c 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hans.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hans.json @@ -13,6 +13,7 @@ "DefaultErrorMessage404": "未找到资源!", "DefaultErrorMessage404Detail": "未在服务中找到请求的资源!", "EntityNotFoundErrorMessage": "实体 {0} 不存在,id = {1}!", + "Languages": "语言", "Error": "错误", "AreYouSure": "你确定吗?", "Cancel": "取消", 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 0f732a8dd7..8723056452 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 @@ -25,7 +25,8 @@ namespace Volo.Abp.Identity IPasswordHasher passwordHasher, IEnumerable> userValidators, IEnumerable> passwordValidators, - ILookupNormalizer keyNormalizer, IdentityErrorDescriber errors, + ILookupNormalizer keyNormalizer, + IdentityErrorDescriber errors, IServiceProvider services, ILogger logger, ICancellationTokenProvider cancellationTokenProvider) diff --git a/npm/ng-packs/apps/dev-app/src/app/shared/shared.module.ts b/npm/ng-packs/apps/dev-app/src/app/shared/shared.module.ts index 6bae4ea332..6c4c9b016c 100644 --- a/npm/ng-packs/apps/dev-app/src/app/shared/shared.module.ts +++ b/npm/ng-packs/apps/dev-app/src/app/shared/shared.module.ts @@ -4,11 +4,26 @@ import { NgModule } from '@angular/core'; import { ThemeBasicModule } from '@abp/ng.theme.basic'; import { ThemeSharedModule } from '@abp/ng.theme.shared'; import { TableModule } from 'primeng/table'; +import { NgxValidateCoreModule } from '@ngx-validate/core'; @NgModule({ declarations: [], - imports: [CoreModule, ThemeSharedModule, ThemeBasicModule, TableModule, NgbDropdownModule], - exports: [CoreModule, ThemeSharedModule, ThemeBasicModule, TableModule, NgbDropdownModule], + imports: [ + CoreModule, + ThemeSharedModule, + ThemeBasicModule, + TableModule, + NgbDropdownModule, + NgxValidateCoreModule, + ], + exports: [ + CoreModule, + ThemeSharedModule, + ThemeBasicModule, + TableModule, + NgbDropdownModule, + NgxValidateCoreModule, + ], providers: [], }) export class SharedModule {} diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index 085cbc9d4f..bea13bfd8d 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -21,19 +21,19 @@ "generate:changelog": "conventional-changelog -p angular -i CHANGELOG.md -s" }, "devDependencies": { - "@abp/ng.account": "^2.0.0", - "@abp/ng.account.config": "^2.0.0", - "@abp/ng.core": "^2.0.0", - "@abp/ng.feature-management": "^2.0.0", - "@abp/ng.identity": "^2.0.0", - "@abp/ng.identity.config": "^2.0.0", - "@abp/ng.permission-management": "^2.0.0", - "@abp/ng.setting-management": "^2.0.0", - "@abp/ng.setting-management.config": "^2.0.0", - "@abp/ng.tenant-management": "^2.0.0", - "@abp/ng.tenant-management.config": "^2.0.0", - "@abp/ng.theme.basic": "^2.0.0", - "@abp/ng.theme.shared": "^2.0.0", + "@abp/ng.account": "^2.0.1", + "@abp/ng.account.config": "^2.0.1", + "@abp/ng.core": "^2.0.1", + "@abp/ng.feature-management": "^2.0.1", + "@abp/ng.identity": "^2.0.1", + "@abp/ng.identity.config": "^2.0.1", + "@abp/ng.permission-management": "^2.0.1", + "@abp/ng.setting-management": "^2.0.1", + "@abp/ng.setting-management.config": "^2.0.1", + "@abp/ng.tenant-management": "^2.0.1", + "@abp/ng.tenant-management.config": "^2.0.1", + "@abp/ng.theme.basic": "^2.0.1", + "@abp/ng.theme.shared": "^2.0.1", "@angular-builders/jest": "^8.2.0", "@angular-devkit/build-angular": "~0.803.21", "@angular-devkit/build-ng-packagr": "~0.803.21", diff --git a/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.html b/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.html index 5e7b292703..291d3f1cbd 100644 --- a/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.html +++ b/npm/ng-packs/packages/account/src/lib/components/personal-settings/personal-settings.component.html @@ -27,7 +27,8 @@
* + > *
{{ 'AbpIdentity::Save' | abpLocalization }} diff --git a/npm/ng-packs/packages/core/src/lib/services/auth.service.ts b/npm/ng-packs/packages/core/src/lib/services/auth.service.ts index 0fc69f62ff..5ae13a4012 100644 --- a/npm/ng-packs/packages/core/src/lib/services/auth.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/auth.service.ts @@ -48,4 +48,18 @@ export class AuthService { take(1), ); } + + logout(): Observable { + return this.rest + .request({ + method: 'GET', + url: '/api/account/logout', + }) + .pipe( + switchMap(() => { + this.oAuthService.logOut(); + return this.store.dispatch(new GetAppConfiguration()); + }), + ); + } } diff --git a/npm/ng-packs/packages/core/src/lib/states/config.state.ts b/npm/ng-packs/packages/core/src/lib/states/config.state.ts index 2232fd0419..debbc9b8a0 100644 --- a/npm/ng-packs/packages/core/src/lib/states/config.state.ts +++ b/npm/ng-packs/packages/core/src/lib/states/config.state.ts @@ -249,7 +249,7 @@ export class ConfigState { if (index < 0) return; const parent = flattedRoutes[index]; - if (parent.url.replace('/', '')) { + if ((parent.url || '').replace('/', '')) { route.url = `${parent.url}/${route.path}`; } else { route.url = `/${route.path}`; diff --git a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts index 47ef7cca23..f0a55f6bfe 100644 --- a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts +++ b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts @@ -119,7 +119,7 @@ export class UsersComponent implements OnInit { } buildForm() { - this.store.dispatch(new GetRoles()).subscribe(() => { + this.store.dispatch(new GetRoles({ maxResultCount: 1000, skipCount: 0 })).subscribe(() => { this.roles = this.store.selectSnapshot(IdentityState.getRoles); this.form = this.fb.group({ userName: [this.selected.userName || '', [Validators.required, Validators.maxLength(256)]], @@ -136,7 +136,7 @@ export class UsersComponent implements OnInit { this.roles.map(role => this.fb.group({ [role.name]: [ - this.selectedUserRoles.length + this.selected.id ? !!snq(() => this.selectedUserRoles.find(userRole => userRole.id === role.id)) : role.isDefault, ], @@ -181,7 +181,7 @@ export class UsersComponent implements OnInit { ) .subscribe((state: Identity.State) => { this.selected = state.selectedUser; - this.selectedUserRoles = state.selectedUserRoles; + this.selectedUserRoles = state.selectedUserRoles || []; this.openModal(); }); } diff --git a/npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.html b/npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.html index 5a5e70e2f5..59311f379e 100644 --- a/npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.html +++ b/npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.html @@ -22,7 +22,7 @@
-
+ -
+

{{ selectedGroup?.displayName }}


diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.ts index 78c358ca69..06f67c8e87 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.ts @@ -25,7 +25,6 @@ import { import { NgbDropdown } from '@ng-bootstrap/ng-bootstrap'; import { Navigate, RouterState } from '@ngxs/router-plugin'; import { Select, Store } from '@ngxs/store'; -import { OAuthService } from 'angular-oauth2-oidc'; import compare from 'just-compare'; import { fromEvent, Observable } from 'rxjs'; import { debounceTime, filter, map } from 'rxjs/operators'; @@ -33,6 +32,7 @@ import snq from 'snq'; import { AddNavigationElement } from '../../actions'; import { Layout } from '../../models/layout'; import { LayoutState } from '../../states'; +import { AuthService } from 'packages/core/src/lib/services/auth.service'; @Component({ selector: 'abp-layout-application', @@ -78,7 +78,10 @@ export class ApplicationLayoutComponent implements AfterViewInit, OnDestroy { get defaultLanguage$(): Observable { return this.languages$.pipe( map( - languages => snq(() => languages.find(lang => lang.cultureName === this.selectedLangCulture).displayName), + languages => + snq( + () => languages.find(lang => lang.cultureName === this.selectedLangCulture).displayName, + ), '', ), ); @@ -86,7 +89,11 @@ export class ApplicationLayoutComponent implements AfterViewInit, OnDestroy { get dropdownLanguages$(): Observable { return this.languages$.pipe( - map(languages => snq(() => languages.filter(lang => lang.cultureName !== this.selectedLangCulture)), []), + map( + languages => + snq(() => languages.filter(lang => lang.cultureName !== this.selectedLangCulture)), + [], + ), ); } @@ -100,7 +107,11 @@ export class ApplicationLayoutComponent implements AfterViewInit, OnDestroy { trackElementByFn: TrackByFunction = (_, element) => element; - constructor(private store: Store, private oauthService: OAuthService, private renderer: Renderer2) {} + constructor( + private store: Store, + private renderer: Renderer2, + private authService: AuthService, + ) {} private checkWindowWidth() { setTimeout(() => { @@ -121,7 +132,9 @@ export class ApplicationLayoutComponent implements AfterViewInit, OnDestroy { } ngAfterViewInit() { - const navigations = this.store.selectSnapshot(LayoutState.getNavigationElements).map(({ name }) => name); + const navigations = this.store + .selectSnapshot(LayoutState.getNavigationElements) + .map(({ name }) => name); if (navigations.indexOf('LanguageRef') < 0) { this.store.dispatch( @@ -145,10 +158,7 @@ export class ApplicationLayoutComponent implements AfterViewInit, OnDestroy { this.checkWindowWidth(); fromEvent(window, 'resize') - .pipe( - takeUntilDestroy(this), - debounceTime(150), - ) + .pipe(takeUntilDestroy(this), debounceTime(150)) .subscribe(() => { this.checkWindowWidth(); }); @@ -161,13 +171,13 @@ export class ApplicationLayoutComponent implements AfterViewInit, OnDestroy { } logout() { - this.oauthService.logOut(); - this.store.dispatch( - new Navigate(['/'], null, { - state: { redirectUrl: this.store.selectSnapshot(RouterState).state.url }, - }), - ); - this.store.dispatch(new GetAppConfiguration()); + this.authService.logout().subscribe(() => { + this.store.dispatch( + new Navigate(['/'], null, { + state: { redirectUrl: this.store.selectSnapshot(RouterState).state.url }, + }), + ); + }); } openChange(event: boolean, childrenContainer: HTMLDivElement) { diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock index 01e1a62823..7662445e41 100644 --- a/npm/ng-packs/yarn.lock +++ b/npm/ng-packs/yarn.lock @@ -2,26 +2,26 @@ # yarn lockfile v1 -"@abp/ng.account.config@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@abp/ng.account.config/-/ng.account.config-2.0.0.tgz#ed49d728e6cb5cac5bf562b2db6e65276a2d550c" - integrity sha512-r7n5NLaAg6xtMQK6KCoCwJALsj3+cftqbPU1mTJqoEiZQCejOUFA9Gk85i3t//MRUeD3j/ghzUYUa6b2elQwXQ== +"@abp/ng.account.config@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.account.config/-/ng.account.config-2.0.1.tgz#7777a09e434d2d592790f8598fd5ec0fbed70161" + integrity sha512-qyunC9FzC5cYL7IgExyVNIzvhBjKQN1Lk35uzCPr2vJTddyEUW+4bdFfSxtwg23O1LWAuMeE4sTAg/pv0R7AUQ== dependencies: tslib "^1.9.0" -"@abp/ng.account@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-2.0.0.tgz#ac1ea6b51190d68c647699fb9a6d185ad728ec3e" - integrity sha512-UC/mTFermfrnAmm2Y6ZrsbKi4EyPzoASeRzoZ5LL0usyEIKb4N9l7Z7kxr5ih2+OPVSW9TmDfgw/zwn3HlrrWw== +"@abp/ng.account@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-2.0.1.tgz#e1e25224a27472a28ff85337000e301174775191" + integrity sha512-bR8xolzq/rtQ+HZnOUDKpR/FT6SSGEFq0r0HMttPG9hiTD1HNthHfx8JaQjPBCAw43WhGIIxLgcRkitu6aXAyA== dependencies: - "@abp/ng.account.config" "^2.0.0" - "@abp/ng.theme.shared" "^2.0.0" + "@abp/ng.account.config" "^2.0.1" + "@abp/ng.theme.shared" "^2.0.1" tslib "^1.9.0" -"@abp/ng.core@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-2.0.0.tgz#9da38d0d3a32a5f7239034a37c3f4f14be745f30" - integrity sha512-pp3u+3bYMSygx88+t4929tkp7a5ja8k8IPeoho2SiJgC2ni546ecX10Yt02X1C8DBEhBr7b6Fn7eQI0VTA4zYA== +"@abp/ng.core@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-2.0.1.tgz#11471a2bc96f03c97c5bcea6d0c9fd81284a103a" + integrity sha512-fa2QK7x0VUovxX5JiXZMoBKuE23xjsW6Pp1+ZuFdKxRG8eP5yoAmkLuNKDEhzy9ancDac8wLUetvnUx/QZKCXQ== dependencies: "@ngxs/router-plugin" "^3.5.1" "@ngxs/storage-plugin" "^3.5.1" @@ -32,86 +32,86 @@ snq "^1.0.3" tslib "^1.9.0" -"@abp/ng.feature-management@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-2.0.0.tgz#a9192bb24ca66d9eb0cf653695da2502ebaa7710" - integrity sha512-7DQapIj28Bh7MtSGKJLLd98i2vWGJgA/4hx3jjQ0WT94NnuyZPKsYwSGcJbVgbTV3PyLWcDCdmhh2NloL2O0lw== +"@abp/ng.feature-management@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-2.0.1.tgz#884451d35f642f585eb9bdf7361c859e670f030d" + integrity sha512-11uoLEnTj2shFz3bFTOHsCKixWDQiuaJbsT66ui0Rs9bWUTwMQUu1s4yzAZPHi/ooAFJUTX+H52rWtUnHwpK2A== dependencies: - "@abp/ng.theme.shared" "^2.0.0" + "@abp/ng.theme.shared" "^2.0.1" tslib "^1.9.0" -"@abp/ng.identity.config@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@abp/ng.identity.config/-/ng.identity.config-2.0.0.tgz#4912b513e919778356cec45ceda4bc032e0cc9b6" - integrity sha512-LfEwy57+Yx8nZXvzgFn8aYVnZSFrhBxFvD1twrTrddQRKltO+wSXV8p6boem8KRU2KWpbH0NYhnBNOxPYGHF6g== +"@abp/ng.identity.config@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.identity.config/-/ng.identity.config-2.0.1.tgz#3f3b2c4f70fecb2e02ac35bdb1546f51e54b87fd" + integrity sha512-lNtrKq6+QGYokN59QjteupbMN/LjtwAQlnZ5J75LHK8YoEMMzyVpK2GVKdgO3xrgcvfDSpz+OVjePNxyykbejA== dependencies: tslib "^1.9.0" -"@abp/ng.identity@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-2.0.0.tgz#33ba9c94042a48c7c004a4df499a669f75997a25" - integrity sha512-qjtiIJy+fpn9JDZjndqtNPnGWPNc1pMQP4cV+UVm8RUG5U3nMI8RfEYyuDKluSGPAF2Qncl3husjpmZjZaEO9w== +"@abp/ng.identity@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-2.0.1.tgz#1168ef8186614a229d6e5ada2afecd8885a074af" + integrity sha512-+B2I/xsl3qOb56BZn9gZL8icu9/YS8i9CEYJmBvjxmtUzvUV6GfNhDf83BfThJO7wZn9d+GEbHY544kjKl+kwg== dependencies: - "@abp/ng.identity.config" "^2.0.0" - "@abp/ng.permission-management" "^2.0.0" - "@abp/ng.theme.shared" "^2.0.0" + "@abp/ng.identity.config" "^2.0.1" + "@abp/ng.permission-management" "^2.0.1" + "@abp/ng.theme.shared" "^2.0.1" tslib "^1.9.0" -"@abp/ng.permission-management@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-2.0.0.tgz#b7956a274945bac9b3bfb16cfcacd70af531d82e" - integrity sha512-ZCuitlFgP1S/Y1Us5nIS9Fw9Jz9Jb7RRboTb6ysbMcLcOkgYJn2d806fnEQh/TkJHpTJDNZYIk27/DlaOQN2xg== +"@abp/ng.permission-management@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-2.0.1.tgz#9e0abcc014db8bae08b8eb1380fdfbf05e988971" + integrity sha512-eKKvFtix8qoA+Il7o+39o9lMfQcSlcLme+H/Ry5crr865PcxJQ9j0nwoRBfkNRpUb8XbjyDkS3Paink7mSBZVQ== dependencies: - "@abp/ng.theme.shared" "^2.0.0" + "@abp/ng.theme.shared" "^2.0.1" tslib "^1.9.0" -"@abp/ng.setting-management.config@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@abp/ng.setting-management.config/-/ng.setting-management.config-2.0.0.tgz#4013b5d6bf7a34fc93ab1df3734c50bb60588b0e" - integrity sha512-eVIzsSQHMz1+Y4Pri8dec31NP3pGwqeX9oFN6YdiIlXL7i0Lqvf9o1ZvMvZ6iIX7GJsOilTgd9Rw7ccZnZTaEQ== +"@abp/ng.setting-management.config@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.setting-management.config/-/ng.setting-management.config-2.0.1.tgz#436e6d9ba20f93a7707548057a21cde30cfcd612" + integrity sha512-pizWCfGOCNp+zP3Pc7zPQ3NKHG9lZJTVeE+RxHXQ+TTlg9xKSlojvQnzIwTKfQPQv0lREalDimNA2PXWvzsTAQ== dependencies: tslib "^1.9.0" -"@abp/ng.setting-management@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-2.0.0.tgz#9babb94b66aba3d95b44457e9301bbf2d7ea10b5" - integrity sha512-tRYRW/SlS52o9kO3yojJarYf0IFYNigXJaJPBOla1RPWW9fM63irCUq+NAI5bRUkxPHDQPfpE8qJC32DPM6a1Q== +"@abp/ng.setting-management@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-2.0.1.tgz#7fc35fcae6db50ae6c9182feeb066dd91f26dd68" + integrity sha512-CiMzvhhimKn0B6jCcejUW5Io9rm7K2H6+gyIi6G3xrewMqVfyROB6bLebtX7KKy5291qzhqZH0MTQxZQnAMxUQ== dependencies: - "@abp/ng.setting-management.config" "^2.0.0" - "@abp/ng.theme.shared" "^2.0.0" + "@abp/ng.setting-management.config" "^2.0.1" + "@abp/ng.theme.shared" "^2.0.1" tslib "^1.9.0" -"@abp/ng.tenant-management.config@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management.config/-/ng.tenant-management.config-2.0.0.tgz#ee2357596263019eae9fcbefe8fd927242b81e87" - integrity sha512-HMZh7HBrFcMXLXGvEjwSOF0ncDcZUtUez1J4ll6oMBVbL4xgfJxIggODin9OMMdQOkLjzYY4BGS+Iwjzh5DR2g== +"@abp/ng.tenant-management.config@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management.config/-/ng.tenant-management.config-2.0.1.tgz#f65a0641dbe57f0128c220fa559c75ebee8e0531" + integrity sha512-EAk1+GEGFB0Uys9FFlrBo1frr8mFp32ogOviw4fCGl0rNZpI+uh7L7q5OQiP2EvK5CDu1OQd9wZm9IVbIWHpHw== dependencies: tslib "^1.9.0" -"@abp/ng.tenant-management@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-2.0.0.tgz#24dfbaf234e567244bdd4cc882ed6952d873e6b3" - integrity sha512-Qn/JLJcCMYYZ+5IuF5jSHzwB9dprnQqoVv8i8vuXS1dyooBoqIIKNMs0E/GOsNu5MPABYrd24YODGi2Nso/OxA== +"@abp/ng.tenant-management@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-2.0.1.tgz#182addc7bd800841681e75260173b90ccd88ba07" + integrity sha512-zosVzejfuUG/ZLralkZv860AHxVJ9ScED//ulst8IJG4QWg55pOTgMtHn27HkIb/z45QVWeVAbEENG2SS+ezkQ== dependencies: - "@abp/ng.feature-management" "^2.0.0" - "@abp/ng.tenant-management.config" "^2.0.0" - "@abp/ng.theme.shared" "^2.0.0" + "@abp/ng.feature-management" "^2.0.1" + "@abp/ng.tenant-management.config" "^2.0.1" + "@abp/ng.theme.shared" "^2.0.1" tslib "^1.9.0" -"@abp/ng.theme.basic@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-2.0.0.tgz#c492bd513bb8a14d4df7b1ed24316543b41cb710" - integrity sha512-WH7DKzF8MkK1fG8uCYGQWJmkJPliyKi2/UwimmFie5UxFsII05rvZZAa+/EILVfMyob+4AkDeU79gZ/EWUJeZg== +"@abp/ng.theme.basic@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-2.0.1.tgz#af7047dba43b2701ea1d4b9cec8c2bfd52227b1f" + integrity sha512-ExwgzHoyXgtWNhzcs/c2tmZJrJFZQgC0iDC5AWDmOQDf63U2aDujMHiTHRD4lmnB5O5odE9/aN631QnHXj987w== dependencies: - "@abp/ng.theme.shared" "^2.0.0" + "@abp/ng.theme.shared" "^2.0.1" tslib "^1.9.0" -"@abp/ng.theme.shared@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-2.0.0.tgz#d241d597d0bb58d50514522d133448f12672708f" - integrity sha512-akTvtNLKkpdWxLko6jMR261FSNEMNcRp1bvvOE2Auged9luXZYneNfaExnoLkBQhRuxmLKBYLPHyyueGRy2v2g== +"@abp/ng.theme.shared@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-2.0.1.tgz#16dd66f5b54d9b528a22bc48f209b413dc33f52d" + integrity sha512-Yle+dGpYNGMcTEc6/+P1tgKLSgnCkLvG9BfgNdOSFq3vBp5AHj2ip2w2+uX6Svo9Fll8Tth9P6BpRpwvQ3CqwQ== dependencies: - "@abp/ng.core" "^2.0.0" + "@abp/ng.core" "^2.0.1" "@angular/cdk" "^8.2.3" "@fortawesome/fontawesome-free" "^5.11.2" "@ng-bootstrap/ng-bootstrap" "^5.1.4" diff --git a/samples/BookStore-Angular-MongoDb/angular/src/app/shared/shared.module.ts b/samples/BookStore-Angular-MongoDb/angular/src/app/shared/shared.module.ts index 6bae4ea332..6c4c9b016c 100644 --- a/samples/BookStore-Angular-MongoDb/angular/src/app/shared/shared.module.ts +++ b/samples/BookStore-Angular-MongoDb/angular/src/app/shared/shared.module.ts @@ -4,11 +4,26 @@ import { NgModule } from '@angular/core'; import { ThemeBasicModule } from '@abp/ng.theme.basic'; import { ThemeSharedModule } from '@abp/ng.theme.shared'; import { TableModule } from 'primeng/table'; +import { NgxValidateCoreModule } from '@ngx-validate/core'; @NgModule({ declarations: [], - imports: [CoreModule, ThemeSharedModule, ThemeBasicModule, TableModule, NgbDropdownModule], - exports: [CoreModule, ThemeSharedModule, ThemeBasicModule, TableModule, NgbDropdownModule], + imports: [ + CoreModule, + ThemeSharedModule, + ThemeBasicModule, + TableModule, + NgbDropdownModule, + NgxValidateCoreModule, + ], + exports: [ + CoreModule, + ThemeSharedModule, + ThemeBasicModule, + TableModule, + NgbDropdownModule, + NgxValidateCoreModule, + ], providers: [], }) export class SharedModule {} diff --git a/templates/app/angular/src/app/shared/shared.module.ts b/templates/app/angular/src/app/shared/shared.module.ts index 6bae4ea332..6c4c9b016c 100644 --- a/templates/app/angular/src/app/shared/shared.module.ts +++ b/templates/app/angular/src/app/shared/shared.module.ts @@ -4,11 +4,26 @@ import { NgModule } from '@angular/core'; import { ThemeBasicModule } from '@abp/ng.theme.basic'; import { ThemeSharedModule } from '@abp/ng.theme.shared'; import { TableModule } from 'primeng/table'; +import { NgxValidateCoreModule } from '@ngx-validate/core'; @NgModule({ declarations: [], - imports: [CoreModule, ThemeSharedModule, ThemeBasicModule, TableModule, NgbDropdownModule], - exports: [CoreModule, ThemeSharedModule, ThemeBasicModule, TableModule, NgbDropdownModule], + imports: [ + CoreModule, + ThemeSharedModule, + ThemeBasicModule, + TableModule, + NgbDropdownModule, + NgxValidateCoreModule, + ], + exports: [ + CoreModule, + ThemeSharedModule, + ThemeBasicModule, + TableModule, + NgbDropdownModule, + NgxValidateCoreModule, + ], providers: [], }) export class SharedModule {} diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj index d208a0df1d..20d35f5d01 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj @@ -6,7 +6,7 @@ netcoreapp3.1 MyCompanyName.MyProjectName true - MyCompanyName-MyProjectName-4681b4fd-151f-4221-84a4-929d86723e4c + MyCompanyName.MyProjectName-4681b4fd-151f-4221-84a4-929d86723e4c diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj index 19f9c63c61..5b8db548fd 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj @@ -6,7 +6,7 @@ netcoreapp3.1 MyCompanyName.MyProjectName true - MyCompanyName-MyProjectName-4681b4fd-151f-4221-84a4-929d86723e4c + MyCompanyName.MyProjectName-4681b4fd-151f-4221-84a4-929d86723e4c diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj index 984821fafc..160fcffc46 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj @@ -12,7 +12,7 @@ true false true - MyCompanyName-MyProjectName-4681b4fd-151f-4221-84a4-929d86723e4c + MyCompanyName.MyProjectName-4681b4fd-151f-4221-84a4-929d86723e4c diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj index 13622179a2..697cbe1b44 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj @@ -12,7 +12,7 @@ true false true - MyCompanyName-MyProjectName-4681b4fd-151f-4221-84a4-929d86723e4c + MyCompanyName.MyProjectName-4681b4fd-151f-4221-84a4-929d86723e4c diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj index 83b9e6e7ec..ce1087911b 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj @@ -12,7 +12,7 @@ true false true - MyCompanyName-MyProjectName-4681b4fd-151f-4221-84a4-929d86723e4c + MyCompanyName.MyProjectName-4681b4fd-151f-4221-84a4-929d86723e4c diff --git a/templates/module/angular/src/app/shared/shared.module.ts b/templates/module/angular/src/app/shared/shared.module.ts index 6bae4ea332..6c4c9b016c 100644 --- a/templates/module/angular/src/app/shared/shared.module.ts +++ b/templates/module/angular/src/app/shared/shared.module.ts @@ -4,11 +4,26 @@ import { NgModule } from '@angular/core'; import { ThemeBasicModule } from '@abp/ng.theme.basic'; import { ThemeSharedModule } from '@abp/ng.theme.shared'; import { TableModule } from 'primeng/table'; +import { NgxValidateCoreModule } from '@ngx-validate/core'; @NgModule({ declarations: [], - imports: [CoreModule, ThemeSharedModule, ThemeBasicModule, TableModule, NgbDropdownModule], - exports: [CoreModule, ThemeSharedModule, ThemeBasicModule, TableModule, NgbDropdownModule], + imports: [ + CoreModule, + ThemeSharedModule, + ThemeBasicModule, + TableModule, + NgbDropdownModule, + NgxValidateCoreModule, + ], + exports: [ + CoreModule, + ThemeSharedModule, + ThemeBasicModule, + TableModule, + NgbDropdownModule, + NgxValidateCoreModule, + ], providers: [], }) export class SharedModule {} diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj index c54cea5cf0..897e84c66e 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj @@ -6,7 +6,7 @@ netcoreapp3.1 MyCompanyName.MyProjectName true - MyCompanyName-MyProjectName-c2d31439-b723-48e2-b061-5ebd7aeb6010 + MyCompanyName.MyProjectName-c2d31439-b723-48e2-b061-5ebd7aeb6010 diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj index 6474ec3675..946f3156f4 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj @@ -4,7 +4,7 @@ netcoreapp3.1 MyCompanyName.MyProjectName true - MyCompanyName-MyProjectName-c2d31439-b723-48e2-b061-5ebd7aeb6010 + MyCompanyName.MyProjectName-c2d31439-b723-48e2-b061-5ebd7aeb6010 diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj index b03bd7ddf0..338f55bc5f 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj @@ -6,7 +6,7 @@ netcoreapp3.1 MyCompanyName.MyProjectName true - MyCompanyName-MyProjectName-c2d31439-b723-48e2-b061-5ebd7aeb6010 + MyCompanyName.MyProjectName-c2d31439-b723-48e2-b061-5ebd7aeb6010 diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyCompanyName.MyProjectName.Web.Unified.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyCompanyName.MyProjectName.Web.Unified.csproj index 81d3d31a11..9277615d12 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyCompanyName.MyProjectName.Web.Unified.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyCompanyName.MyProjectName.Web.Unified.csproj @@ -6,7 +6,7 @@ netcoreapp3.1 MyCompanyName.MyProjectName true - MyCompanyName-MyProjectName-c2d31439-b723-48e2-b061-5ebd7aeb6010 + MyCompanyName.MyProjectName-c2d31439-b723-48e2-b061-5ebd7aeb6010