From c00778d18747c8e57744dfb07594244e94a7971b Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 25 Dec 2019 15:16:13 +0800 Subject: [PATCH 001/411] Set value comparer for ExtraProperties and Properties dictionary. Resolve #2459 --- .../Volo/Abp/EntityFrameworkCore/AbpDbContext.cs | 7 ++++++- .../Modeling/AbpEntityTypeBuilderExtensions.cs | 8 +++++++- ...dentityServerDbContextModelCreatingExtensions.cs | 13 +++++++++++-- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index 18758d98e3..9ecb7e8c73 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; +using System.IO.Compression; using System.Linq; using System.Linq.Expressions; using System.Reflection; @@ -390,7 +391,11 @@ namespace Volo.Abp.EntityFrameworkCore d => JsonConvert.SerializeObject(d, Formatting.None), s => JsonConvert.DeserializeObject>(s) ) - .HasColumnName(nameof(IHasExtraProperties.ExtraProperties)); + .HasColumnName(nameof(IHasExtraProperties.ExtraProperties)) + .Metadata.SetValueComparer(new ValueComparer>( + (d1, d2) => d1.SequenceEqual(d2), + d => d.Aggregate(0, (k, v) => HashCode.Combine(k, v.GetHashCode())), + d => d.ToDictionary(k => k.Key, v => v.Value))); }); } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs index 132e91c079..b1824d2706 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; +using System.Linq; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.Metadata.Builders; using Newtonsoft.Json; using Volo.Abp.Auditing; @@ -61,7 +63,11 @@ namespace Volo.Abp.EntityFrameworkCore.Modeling d => JsonConvert.SerializeObject(d, Formatting.None), s => JsonConvert.DeserializeObject>(s) ) - .HasColumnName(nameof(IHasExtraProperties.ExtraProperties)); + .HasColumnName(nameof(IHasExtraProperties.ExtraProperties)) + .Metadata.SetValueComparer(new ValueComparer>( + (d1, d2) => d1.SequenceEqual(d2), + d => d.Aggregate(0, (k, v) => HashCode.Combine(k, v.GetHashCode())), + d => d.ToDictionary(k => k.Key, v => v.Value))); } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs index bd69f6948f..7ab2e2d5f7 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs @@ -1,6 +1,9 @@ using System; using System.Collections.Generic; +using System.Linq; +using System.IO.Compression; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; using Newtonsoft.Json; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.Modeling; @@ -205,7 +208,10 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore .HasConversion( d => JsonConvert.SerializeObject(d, Formatting.None), s => JsonConvert.DeserializeObject>(s) - ); + ).Metadata.SetValueComparer(new ValueComparer>( + (d1, d2) => d1.SequenceEqual(d2), + d => d.Aggregate(0, (k, v) => HashCode.Combine(k, v.GetHashCode())), + d => d.ToDictionary(k => k.Key, v => v.Value))); identityResource.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.IdentityResourceId).IsRequired(); }); @@ -232,7 +238,10 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore .HasConversion( d => JsonConvert.SerializeObject(d, Formatting.None), s => JsonConvert.DeserializeObject>(s) - ); + ).Metadata.SetValueComparer(new ValueComparer>( + (d1, d2) => d1.SequenceEqual(d2), + d => d.Aggregate(0, (k, v) => HashCode.Combine(k, v.GetHashCode())), + d => d.ToDictionary(k => k.Key, v => v.Value))); apiResource.HasMany(x => x.Secrets).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); apiResource.HasMany(x => x.Scopes).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); From 25a654dac0f188340e45b103ff6785034c8b41cb Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 25 Dec 2019 15:33:02 +0800 Subject: [PATCH 002/411] Remove unnecessary namespaces. --- .../Volo/Abp/EntityFrameworkCore/AbpDbContext.cs | 1 - .../IdentityServerDbContextModelCreatingExtensions.cs | 1 - 2 files changed, 2 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index 9ecb7e8c73..3df9219877 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; -using System.IO.Compression; using System.Linq; using System.Linq.Expressions; using System.Reflection; diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs index 7ab2e2d5f7..c7726c37e7 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.IO.Compression; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using Newtonsoft.Json; From 8f74373f5f5b92ae4f90c2570ee47cda726feda1 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 26 Dec 2019 13:33:18 +0800 Subject: [PATCH 003/411] Add ConfigureJsonConversionWithValueComparer extension method. --- .../Abp/EntityFrameworkCore/AbpDbContext.cs | 148 +----------------- .../AbpEntityTypeBuilderExtensions.cs | 11 +- .../Modeling/AbpPropertyBuilderExtensions.cs | 28 ++++ ...yServerDbContextModelCreatingExtensions.cs | 7 +- 4 files changed, 35 insertions(+), 159 deletions(-) create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpPropertyBuilderExtensions.cs diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index 3df9219877..c911c7f461 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -11,13 +11,13 @@ using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; -using Newtonsoft.Json; using Volo.Abp.Auditing; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Entities.Events; using Volo.Abp.EntityFrameworkCore.EntityHistory; +using Volo.Abp.EntityFrameworkCore.Modeling; using Volo.Abp.EntityFrameworkCore.ValueConverters; using Volo.Abp.Guids; using Volo.Abp.MultiTenancy; @@ -352,151 +352,9 @@ namespace Volo.Abp.EntityFrameworkCore return; } - ConfigureConcurrencyStampProperty(modelBuilder, mutableEntityType); - ConfigureExtraProperties(modelBuilder, mutableEntityType); - ConfigureAuditProperties(modelBuilder, mutableEntityType); - ConfigureTenantIdProperty(modelBuilder, mutableEntityType); - ConfigureGlobalFilters(modelBuilder, mutableEntityType); - } - - protected virtual void ConfigureConcurrencyStampProperty(ModelBuilder modelBuilder, IMutableEntityType mutableEntityType) - where TEntity : class - { - if (!typeof(IHasConcurrencyStamp).IsAssignableFrom(typeof(TEntity))) - { - return; - } - - modelBuilder.Entity(b => - { - b.Property(x => ((IHasConcurrencyStamp) x).ConcurrencyStamp) - .IsConcurrencyToken() - .HasColumnName(nameof(IHasConcurrencyStamp.ConcurrencyStamp)); - }); - } - - protected virtual void ConfigureExtraProperties(ModelBuilder modelBuilder, IMutableEntityType mutableEntityType) - where TEntity : class - { - if (!typeof(IHasExtraProperties).IsAssignableFrom(typeof(TEntity))) - { - return; - } - - modelBuilder.Entity(b => - { - b.Property(x => ((IHasExtraProperties) x).ExtraProperties) - .HasConversion( - d => JsonConvert.SerializeObject(d, Formatting.None), - s => JsonConvert.DeserializeObject>(s) - ) - .HasColumnName(nameof(IHasExtraProperties.ExtraProperties)) - .Metadata.SetValueComparer(new ValueComparer>( - (d1, d2) => d1.SequenceEqual(d2), - d => d.Aggregate(0, (k, v) => HashCode.Combine(k, v.GetHashCode())), - d => d.ToDictionary(k => k.Key, v => v.Value))); - }); - } - - protected virtual void ConfigureAuditProperties(ModelBuilder modelBuilder, IMutableEntityType mutableEntityType) - where TEntity : class - { - if (typeof(TEntity).IsAssignableTo()) - { - modelBuilder.Entity(b => - { - b.Property(x => ((IHasCreationTime)x).CreationTime) - .IsRequired() - .HasColumnName(nameof(IHasCreationTime.CreationTime)); - }); - } + modelBuilder.Entity().ConfigureByConvention(); - if (typeof(TEntity).IsAssignableTo()) - { - modelBuilder.Entity(b => - { - b.Property(x => ((IMayHaveCreator)x).CreatorId) - .IsRequired(false) - .HasColumnName(nameof(IMayHaveCreator.CreatorId)); - }); - } - - if (typeof(TEntity).IsAssignableTo()) - { - modelBuilder.Entity(b => - { - b.Property(x => ((IMustHaveCreator)x).CreatorId) - .IsRequired() - .HasColumnName(nameof(IMustHaveCreator.CreatorId)); - }); - } - - if (typeof(TEntity).IsAssignableTo()) - { - modelBuilder.Entity(b => - { - b.Property(x => ((IHasModificationTime)x).LastModificationTime) - .IsRequired(false) - .HasColumnName(nameof(IHasModificationTime.LastModificationTime)); - }); - } - - if (typeof(TEntity).IsAssignableTo()) - { - modelBuilder.Entity(b => - { - b.Property(x => ((IModificationAuditedObject)x).LastModifierId) - .IsRequired(false) - .HasColumnName(nameof(IModificationAuditedObject.LastModifierId)); - }); - } - - if (typeof(TEntity).IsAssignableTo()) - { - modelBuilder.Entity(b => - { - b.Property(x => ((ISoftDelete) x).IsDeleted) - .IsRequired() - .HasDefaultValue(false) - .HasColumnName(nameof(ISoftDelete.IsDeleted)); - }); - } - - if (typeof(TEntity).IsAssignableTo()) - { - modelBuilder.Entity(b => - { - b.Property(x => ((IHasDeletionTime)x).DeletionTime) - .IsRequired(false) - .HasColumnName(nameof(IHasDeletionTime.DeletionTime)); - }); - } - - if (typeof(TEntity).IsAssignableTo()) - { - modelBuilder.Entity(b => - { - b.Property(x => ((IDeletionAuditedObject)x).DeleterId) - .IsRequired(false) - .HasColumnName(nameof(IDeletionAuditedObject.DeleterId)); - }); - } - } - - protected virtual void ConfigureTenantIdProperty(ModelBuilder modelBuilder, IMutableEntityType mutableEntityType) - where TEntity : class - { - if (!typeof(TEntity).IsAssignableTo()) - { - return; - } - - modelBuilder.Entity(b => - { - b.Property(x => ((IMultiTenant)x).TenantId) - .IsRequired(false) - .HasColumnName(nameof(IMultiTenant.TenantId)); - }); + ConfigureGlobalFilters(modelBuilder, mutableEntityType); } protected virtual void ConfigureGlobalFilters(ModelBuilder modelBuilder, IMutableEntityType mutableEntityType) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs index b1824d2706..b1e59a6c95 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs @@ -2,13 +2,10 @@ using System.Collections.Generic; using System.Linq; using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.Metadata.Builders; -using Newtonsoft.Json; using Volo.Abp.Auditing; using Volo.Abp.Data; using Volo.Abp.Domain.Entities; -using Volo.Abp.Domain.Entities.Auditing; using Volo.Abp.MultiTenancy; namespace Volo.Abp.EntityFrameworkCore.Modeling @@ -59,15 +56,11 @@ namespace Volo.Abp.EntityFrameworkCore.Modeling if (b.Metadata.ClrType.IsAssignableTo()) { b.Property>(nameof(IHasExtraProperties.ExtraProperties)) - .HasConversion( - d => JsonConvert.SerializeObject(d, Formatting.None), - s => JsonConvert.DeserializeObject>(s) - ) .HasColumnName(nameof(IHasExtraProperties.ExtraProperties)) - .Metadata.SetValueComparer(new ValueComparer>( + .ConfigureJsonConversionWithValueComparer( (d1, d2) => d1.SequenceEqual(d2), d => d.Aggregate(0, (k, v) => HashCode.Combine(k, v.GetHashCode())), - d => d.ToDictionary(k => k.Key, v => v.Value))); + d => d.ToDictionary(k => k.Key, v => v.Value)); } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpPropertyBuilderExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpPropertyBuilderExtensions.cs new file mode 100644 index 0000000000..5dae5b4771 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpPropertyBuilderExtensions.cs @@ -0,0 +1,28 @@ +using System; +using System.Linq.Expressions; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Microsoft.EntityFrameworkCore.Metadata.Builders; +using Newtonsoft.Json; + +namespace Volo.Abp.EntityFrameworkCore.Modeling +{ + public static class AbpPropertyBuilderExtensions + { + public static void ConfigureJsonConversionWithValueComparer( + this PropertyBuilder propertyBuilder, + Expression> equalsExpression, + Expression> hashCodeExpression, + Expression> snapshotExpression) + { + propertyBuilder.HasConversion( + d => JsonConvert.SerializeObject(d, Formatting.None), + s => JsonConvert.DeserializeObject(s) + ) + .Metadata.SetValueComparer(new ValueComparer( + equalsExpression, + hashCodeExpression, + snapshotExpression)); + } + } +} \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs index c7726c37e7..3b29cbf2a0 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs @@ -204,13 +204,10 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore identityResource.Property(x => x.DisplayName).HasMaxLength(IdentityResourceConsts.DisplayNameMaxLength); identityResource.Property(x => x.Description).HasMaxLength(IdentityResourceConsts.DescriptionMaxLength); identityResource.Property(x => x.Properties) - .HasConversion( - d => JsonConvert.SerializeObject(d, Formatting.None), - s => JsonConvert.DeserializeObject>(s) - ).Metadata.SetValueComparer(new ValueComparer>( + .ConfigureJsonConversionWithValueComparer( (d1, d2) => d1.SequenceEqual(d2), d => d.Aggregate(0, (k, v) => HashCode.Combine(k, v.GetHashCode())), - d => d.ToDictionary(k => k.Key, v => v.Value))); + d => d.ToDictionary(k => k.Key, v => v.Value)); identityResource.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.IdentityResourceId).IsRequired(); }); From cf6fc616e594492f6ce02dc733355f8b03503d7e Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 26 Dec 2019 13:43:26 +0800 Subject: [PATCH 004/411] ConfigureJsonConversionWithValueComparer for Properties of ApiResource. --- .../IdentityServerDbContextModelCreatingExtensions.cs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs index 3b29cbf2a0..f0278e7633 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs @@ -231,13 +231,10 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore apiResource.Property(x => x.DisplayName).HasMaxLength(ApiResourceConsts.DisplayNameMaxLength); apiResource.Property(x => x.Description).HasMaxLength(ApiResourceConsts.DescriptionMaxLength); apiResource.Property(x => x.Properties) - .HasConversion( - d => JsonConvert.SerializeObject(d, Formatting.None), - s => JsonConvert.DeserializeObject>(s) - ).Metadata.SetValueComparer(new ValueComparer>( + .ConfigureJsonConversionWithValueComparer( (d1, d2) => d1.SequenceEqual(d2), d => d.Aggregate(0, (k, v) => HashCode.Combine(k, v.GetHashCode())), - d => d.ToDictionary(k => k.Key, v => v.Value))); + d => d.ToDictionary(k => k.Key, v => v.Value)); apiResource.HasMany(x => x.Secrets).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); apiResource.HasMany(x => x.Scopes).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); From 59ade77831012899a30d9502b3e4d0fcdf75373e Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 26 Dec 2019 16:25:38 +0800 Subject: [PATCH 005/411] Add more ConfigureJsonConversionWithValueComparer extension methods. --- .../Modeling/AbpPropertyBuilderExtensions.cs | 84 ++++++++++++++++++- 1 file changed, 83 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpPropertyBuilderExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpPropertyBuilderExtensions.cs index 5dae5b4771..93aeb792da 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpPropertyBuilderExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpPropertyBuilderExtensions.cs @@ -9,7 +9,87 @@ namespace Volo.Abp.EntityFrameworkCore.Modeling { public static class AbpPropertyBuilderExtensions { - public static void ConfigureJsonConversionWithValueComparer( + /// + /// Serialize and property attributes using json(JsonConvert). + /// + /// The builder for the property being configured. + /// Sets the custom ValueComparer for this property. + public static PropertyBuilder ConfigureJsonConversionWithValueComparer( + this PropertyBuilder propertyBuilder, + ValueComparer valueComparer) + { + propertyBuilder.HasConversion( + d => JsonConvert.SerializeObject(d, Formatting.None), + s => JsonConvert.DeserializeObject(s) + ) + .Metadata.SetValueComparer(valueComparer); + + return propertyBuilder; + } + + /// + /// Serialize and property attributes using json(JsonConvert). + /// + /// The builder for the property being configured. + /// + /// If true, then EF will use ValueComparer if the type + /// implements it. This is usually used when byte arrays act as keys. + /// + public static PropertyBuilder ConfigureJsonConversionWithValueComparer( + this PropertyBuilder propertyBuilder, + bool favorStructuralComparisons) + { + propertyBuilder.HasConversion( + d => JsonConvert.SerializeObject(d, Formatting.None), + s => JsonConvert.DeserializeObject(s) + ) + .Metadata.SetValueComparer(new ValueComparer(favorStructuralComparisons)); + + return propertyBuilder; + } + + /// + /// Serialize and property attributes using json(JsonConvert). + /// Creates a new ValueComparer with the given comparison expression. + /// A shallow copy will be used for the snapshot. + /// + /// The builder for the property being configured. + /// The comparison expression. + /// The associated hash code generator. + public static PropertyBuilder ConfigureJsonConversionWithValueComparer( + this PropertyBuilder propertyBuilder, + Expression> equalsExpression, + Expression> hashCodeExpression) + { + propertyBuilder.HasConversion( + d => JsonConvert.SerializeObject(d, Formatting.None), + s => JsonConvert.DeserializeObject(s) + ) + .Metadata.SetValueComparer(new ValueComparer( + equalsExpression, + hashCodeExpression)); + + return propertyBuilder; + } + + /// + /// Serialize and property attributes using json(JsonConvert). + /// + /// Creates a new ValueComparer with the given comparison and + /// snapshotting expressions. + /// + /// + /// Snapshotting is the process of creating a copy of the value into a snapshot so it can + /// later be compared to determine if it has changed. For some types, such as collections, + /// this needs to be a deep copy of the collection rather than just a shallow copy of the + /// reference. + /// + /// + /// The builder for the property being configured. + /// The comparison expression. + /// The associated hash code generator. + /// The snapshot expression. + public static PropertyBuilder ConfigureJsonConversionWithValueComparer( this PropertyBuilder propertyBuilder, Expression> equalsExpression, Expression> hashCodeExpression, @@ -23,6 +103,8 @@ namespace Volo.Abp.EntityFrameworkCore.Modeling equalsExpression, hashCodeExpression, snapshotExpression)); + + return propertyBuilder; } } } \ No newline at end of file From 908f28297a5bb61e5e6662bbcb4b094280965184 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Tu=CC=88ken?= Date: Thu, 2 Jan 2020 02:31:47 +0300 Subject: [PATCH 006/411] Implement IDisposable on AutofacServiceProvider. --- .../AutofacServiceProvider.cs | 53 +++++++++++++++---- 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacServiceProvider.cs b/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacServiceProvider.cs index ff2d45b2a4..1c1a24ff66 100644 --- a/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacServiceProvider.cs +++ b/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacServiceProvider.cs @@ -1,6 +1,6 @@ // This software is part of the Autofac IoC container // Copyright © 2015 Autofac Contributors -// http://autofac.org +// https://autofac.org // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation @@ -33,19 +33,21 @@ namespace Autofac.Extensions.DependencyInjection /// /// /// - public class AutofacServiceProvider : IServiceProvider, ISupportRequiredService + public class AutofacServiceProvider : IServiceProvider, ISupportRequiredService, IDisposable { - private readonly IComponentContext _componentContext; + private readonly ILifetimeScope _lifetimeScope; + + private bool _disposed = false; /// /// Initializes a new instance of the class. /// - /// - /// The component context from which services should be resolved. + /// + /// The lifetime scope from which services will be resolved. /// - public AutofacServiceProvider(IComponentContext componentContext) + public AutofacServiceProvider(ILifetimeScope lifetimeScope) { - this._componentContext = componentContext; + this._lifetimeScope = lifetimeScope; } /// @@ -66,7 +68,7 @@ namespace Autofac.Extensions.DependencyInjection /// public object GetRequiredService(Type serviceType) { - return this._componentContext.Resolve(serviceType); + return this._lifetimeScope.Resolve(serviceType); } /// @@ -81,7 +83,40 @@ namespace Autofac.Extensions.DependencyInjection /// public object GetService(Type serviceType) { - return this._componentContext.ResolveOptional(serviceType); + return this._lifetimeScope.ResolveOptional(serviceType); + } + + /// + /// Gets the underlying instance of . + /// + public ILifetimeScope LifetimeScope => _lifetimeScope; + + /// + /// Releases unmanaged and - optionally - managed resources. + /// + /// + /// to release both managed and unmanaged resources; + /// to release only unmanaged resources. + /// + protected virtual void Dispose(bool disposing) + { + if (!this._disposed) + { + this._disposed = true; + if (disposing) + { + this._lifetimeScope.Dispose(); + } + } + } + + /// + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// + public void Dispose() + { + this.Dispose(true); + GC.SuppressFinalize(this); } } } \ No newline at end of file From bf1960213fb5aa319454a095226ba1ec82018369 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Tu=CC=88ken?= Date: Thu, 2 Jan 2020 02:33:52 +0300 Subject: [PATCH 007/411] Listen IHostApplicationLifetime Stopping and Stopped event. --- .../AbpApplicationBuilderExtensions.cs | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs index 22c0079571..033fef813f 100644 --- a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs @@ -2,6 +2,7 @@ using JetBrains.Annotations; using Microsoft.AspNetCore.RequestLocalization; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Volo.Abp; using Volo.Abp.AspNetCore.Auditing; using Volo.Abp.AspNetCore.ExceptionHandling; @@ -19,8 +20,21 @@ namespace Microsoft.AspNetCore.Builder { Check.NotNull(app, nameof(app)); + var application = app.ApplicationServices.GetRequiredService(); + var applicationLifetime = app.ApplicationServices.GetRequiredService(); + + applicationLifetime.ApplicationStopping.Register(() => + { + application.Shutdown(); + }); + + applicationLifetime.ApplicationStopped.Register(() => + { + application.Dispose(); + }); + app.ApplicationServices.GetRequiredService>().Value = app; - app.ApplicationServices.GetRequiredService().Initialize(app.ApplicationServices); + application.Initialize(app.ApplicationServices); } public static IApplicationBuilder UseAuditing(this IApplicationBuilder app) @@ -42,7 +56,8 @@ namespace Microsoft.AspNetCore.Builder .UseMiddleware(); } - public static IApplicationBuilder UseAbpRequestLocalization(this IApplicationBuilder app, Action optionsAction = null) + public static IApplicationBuilder UseAbpRequestLocalization(this IApplicationBuilder app, + Action optionsAction = null) { app.ApplicationServices .GetRequiredService() @@ -62,4 +77,4 @@ namespace Microsoft.AspNetCore.Builder return app.UseMiddleware(); } } -} +} \ No newline at end of file From 8d5d0adb83f261b9e51188146638ea2b4339325d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Tu=CC=88ken?= Date: Thu, 2 Jan 2020 02:35:33 +0300 Subject: [PATCH 008/411] Disposing AbpApplicationWithExternalServiceProvider. --- .../Abp/AbpApplicationWithExternalServiceProvider.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationWithExternalServiceProvider.cs b/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationWithExternalServiceProvider.cs index 1becd3be9b..58f75f3b96 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationWithExternalServiceProvider.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationWithExternalServiceProvider.cs @@ -26,5 +26,15 @@ namespace Volo.Abp InitializeModules(); } + + public override void Dispose() + { + base.Dispose(); + + if (ServiceProvider is IDisposable disposableServiceProvider) + { + disposableServiceProvider.Dispose(); + } + } } } From 1257581c9b105e55d135f1a3edc8348480cd6617 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 2 Jan 2020 08:56:40 +0300 Subject: [PATCH 009/411] Complete the "Switch to EF Core MySQL Provider" document. --- docs/en/Entity-Framework-Core-MySQL.md | 49 +++++++++++++++++++-- docs/en/Entity-Framework-Core-PostgreSQL.md | 16 +++---- docs/en/Modules/IdentityServer.md | 3 ++ docs/en/Modules/Index.md | 2 +- docs/en/docs-nav.json | 8 +++- 5 files changed, 63 insertions(+), 15 deletions(-) create mode 100644 docs/en/Modules/IdentityServer.md diff --git a/docs/en/Entity-Framework-Core-MySQL.md b/docs/en/Entity-Framework-Core-MySQL.md index 911db6a010..8effd5159d 100644 --- a/docs/en/Entity-Framework-Core-MySQL.md +++ b/docs/en/Entity-Framework-Core-MySQL.md @@ -1,4 +1,4 @@ -# Entity Framework Core MySQL Database Provider +# Switch to EF Core MySQL Provider This document explains how to switch to the **MySQL** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured. @@ -10,8 +10,49 @@ This document explains how to switch to the **MySQL** database provider for **[t Find ***YourProjectName*EntityFrameworkCoreModule** class inside the `.EntityFrameworkCore` project, remove `typeof(AbpEntityFrameworkCoreSqlServerModule)` from the `DependsOn` attribute, add `typeof(AbpEntityFrameworkCoreMySQLModule)` (also replace `using Volo.Abp.EntityFrameworkCore.SqlServer;` with `using Volo.Abp.EntityFrameworkCore.MySQL;`). -## Call UseMySQL +## UseMySQL() -Find `UseSqlServer()` calls in your solution, replace with `UseMySQL()` +Find `UseSqlServer()` calls in your solution, replace with `UseMySQL()`. Check the following files: -TODO \ No newline at end of file +* *YourProjectName*EntityFrameworkCoreModule.cs inside the `.EntityFrameworkCore` project. +* *YourProjectName*MigrationsDbContextFactory.cs inside the `.EntityFrameworkCore.DbMigrations` project. + +> Depending on your solution structure, you may find more code files need to be changed. + +## Change the Connection Strings + +MySQL connection strings are different than SQL Server connection strings. So, check all `appsettings.json` files in your solution and replace the connection strings inside them. See the [connectionstrings.com]( https://www.connectionstrings.com/mysql/ ) for details of MySQL connection string options. + +You typically will change the `appsettings.json` inside the `.DbMigrator` and `.Web` projects, but it depends on your solution structure. + +## Change the Migrations DbContext + +MySQL DBMS has some slight differences than the SQL Server. Some module database mapping configuration (especially the field lengths) causes problems with MySQL. For example, some of the the [IdentityServer module](Modules/IdentityServer.md) tables has such problems and it provides an option to configure the fields based on your DBMS. + +The startup template contains a *YourProjectName*MigrationsDbContext which is responsible to maintain and migrate the database schema. This DbContext basically calls extension methods of the depended modules to configure their database tables. + +Open the *YourProjectName*MigrationsDbContext and change the `builder.ConfigureIdentityServer();` line as shown below: + +````csharp +builder.ConfigureIdentityServer(options => +{ + options.DatabaseProvider = EfCoreDatabaseProvider.MySql; +}); +```` + +Then `ConfigureIdentityServer()` method will set the field lengths to not exceed the MySQL limits. Refer to related module documentation if you have any problem while creating or executing the database migrations. + +## Re-Generate the Migrations + +The startup template uses [Entity Framework Core's Code First Migrations](https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/). EF Core Migrations depend on the selected DBMS provider. So, changing the DBMS provider will cause the migration fails. + +* Delete the Migrations folder under the `.EntityFrameworkCore.DbMigrations` project and re-build the solution. +* Run `Add-Migration "Initial"` on the Package Manager Console (select the `.DbMigrator` (or `.Web`) project as the startup project in the Solution Explorer and select the `.EntityFrameworkCore.DbMigrations` project as the default project in de Package Manager Console). + +This will create a database migration with all database objects (tables) configured. + +Run the `.DbMigrator` project to create the database and seed the initial data. + +## Run the Application + +It is ready. Just run the application and enjoy coding. \ No newline at end of file diff --git a/docs/en/Entity-Framework-Core-PostgreSQL.md b/docs/en/Entity-Framework-Core-PostgreSQL.md index 2f6dd03be7..541554020a 100644 --- a/docs/en/Entity-Framework-Core-PostgreSQL.md +++ b/docs/en/Entity-Framework-Core-PostgreSQL.md @@ -1,8 +1,8 @@ -## Entity Framework Core PostgreSQL Integration +# Switch to EF Core PostgreSQL Provider > See [Entity Framework Core Integration document](../Entity-Framework-Core.md) for the basics of the EF Core integration. -### EntityFrameworkCore Project Update +## EntityFrameworkCore Project Update - In `Acme.BookStore.EntityFrameworkCore` project replace package `Volo.Abp.EntityFrameworkCore.SqlServer` with `Volo.Abp.EntityFrameworkCore.PostgreSql` - Update to use PostgreSQL in `BookStoreEntityFrameworkCoreModule` @@ -11,17 +11,17 @@ - In other projects update the PostgreSQL connection string in necessary `appsettings.json` files - more info of [PostgreSQL connection strings](https://www.connectionstrings.com/postgresql/),You need to pay attention to `Npgsql` in this document -### EntityFrameworkCore.DbMigrations Project Update +## EntityFrameworkCore.DbMigrations Project Update - Update to use PostgreSQL in `XXXMigrationsDbContextFactory` - Replace the `new DbContextOptionsBuilder().UseSqlServer()` with the `new DbContextOptionsBuilder().UseNpgsql()` -### Delete Existing Migrations +## Delete Existing Migrations Delete all existing migration files (including `DbContextModelSnapshot`) ![postgresql-delete-initial-migrations](images/postgresql-delete-initial-migrations.png) -### Regenerate Initial Migration +## Regenerate Initial Migration Set the correct startup project (usually a web project) @@ -34,11 +34,11 @@ Run `Add-Migration` command. PM> Add-Migration Initial ```` -### Update the Database +## Update the Database You have two options to create the database. -#### Using the DbMigrator Application +## Using the DbMigrator Application The solution contains a console application (named `Acme.BookStore.DbMigrator` in this sample) that can create database, apply migrations and seed initial data. It is useful on development as well as on production environment. @@ -52,7 +52,7 @@ Hit F5 (or Ctrl+F5) to run the application. It will have an output like shown be ![set-as-startup-project](../images/db-migrator-app.png) -#### Using EF Core Update-Database Command +### Using EF Core Update-Database Command Ef Core has `Update-Database` command which creates database if necessary and applies pending migrations. diff --git a/docs/en/Modules/IdentityServer.md b/docs/en/Modules/IdentityServer.md new file mode 100644 index 0000000000..0d2ab35c21 --- /dev/null +++ b/docs/en/Modules/IdentityServer.md @@ -0,0 +1,3 @@ +# IdentityServer Module + +TODO \ No newline at end of file diff --git a/docs/en/Modules/Index.md b/docs/en/Modules/Index.md index 9d1c1d301f..8616ed2281 100644 --- a/docs/en/Modules/Index.md +++ b/docs/en/Modules/Index.md @@ -17,7 +17,7 @@ There are some **free and open source** application modules developed and mainta * **Blogging**: Used to create fancy blogs. ABP's [own blog](https://abp.io/blog/abp/) already using this module. * [**Docs**](Docs.md): Used to create technical documentation pages. ABP's [own documentation](https://docs.abp.io) already using this module. * **Identity**: Used to manage roles, users and their permissions. -* **Identity Server**: Integrates to IdentityServer4. +* **IdentityServer**: Integrates to IdentityServer4. * **Permission Management**: Used to persist permissions. * **[Setting Management](Setting-Management.md)**: Used to persist and manage the [settings](../Settings.md). * **Tenant Management**: Used to manage tenants for a [multi-tenant](../Multi-Tenancy.md) application. diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index c4a864f4de..f42a484b02 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -262,9 +262,13 @@ { "text": "Entity Framework Core Integration", "path": "Entity-Framework-Core.md", - "items": [ + "items": [ { - "text": "PostgreSQL Integration", + "text": "Switch to MySQL", + "path": "Entity-Framework-Core-MySQL.md" + }, + { + "text": "Switch to PostgreSQL", "path": "Entity-Framework-Core-PostgreSQL.md" } ] From 4aeb2d747fe4ecd8f238f373da958393b007eec0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 2 Jan 2020 08:56:59 +0300 Subject: [PATCH 010/411] Update IdentityServerDbContextModelCreatingExtensions.cs --- .../IdentityServerDbContextModelCreatingExtensions.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs index bd69f6948f..a4ca63afa7 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs @@ -246,6 +246,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore apiSecret.HasKey(x => new { x.ApiResourceId, x.Type, x.Value }); apiSecret.Property(x => x.Type).HasMaxLength(SecretConsts.TypeMaxLength).IsRequired(); + apiSecret.Property(x => x.Description).HasMaxLength(SecretConsts.DescriptionMaxLength); if (options.DatabaseProvider == EfCoreDatabaseProvider.MySql) { @@ -255,8 +256,6 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore { apiSecret.Property(x => x.Value).HasMaxLength(SecretConsts.ValueMaxLength).IsRequired(); } - - apiSecret.Property(x => x.Description).HasMaxLength(SecretConsts.DescriptionMaxLength); }); builder.Entity(apiClaim => From e434fc30c48ded94d6d1fa8a9aa54c7802ce02fe Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 2 Jan 2020 14:24:46 +0800 Subject: [PATCH 011/411] Fixed unit test failure due to NoContent method filter. --- .../Abp/AspNetCore/Mvc/Features/FeatureTestController_Tests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Features/FeatureTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Features/FeatureTestController_Tests.cs index 8b8ad14da4..52ff323be6 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Features/FeatureTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Features/FeatureTestController_Tests.cs @@ -10,7 +10,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Features public async Task Should_Allow_Enabled_Features() { await GetResponseAsStringAsync( - "/api/feature-test/allowed-feature" + "/api/feature-test/allowed-feature", HttpStatusCode.NoContent ).ConfigureAwait(false); } From 063bf1721f3939b27ecac407c42cd528fcf1ecab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 2 Jan 2020 11:05:28 +0300 Subject: [PATCH 012/411] Complete the Connection Strings document --- docs/en/Best-Practices/Index.md | 2 +- docs/en/Connection-Strings.md | 67 +++++++++++++++++++++++++++++---- docs/en/docs-nav.json | 41 ++++++++++++-------- 3 files changed, 86 insertions(+), 24 deletions(-) diff --git a/docs/en/Best-Practices/Index.md b/docs/en/Best-Practices/Index.md index 1a48c6b46b..f3f626ca63 100644 --- a/docs/en/Best-Practices/Index.md +++ b/docs/en/Best-Practices/Index.md @@ -23,5 +23,5 @@ Also, this guide is mostly usable for general **application development**. * [Data Transfer Objects](Data-Transfer-Objects.md) * Data Access * [Entity Framework Core Integration](Entity-Framework-Core-Integration.md) - * [MongoDB Integration](MongoDB-Integration.md) + * [MongoDB Integration](MongoDB-Integration.md) diff --git a/docs/en/Connection-Strings.md b/docs/en/Connection-Strings.md index 36103011e1..a080e10dea 100644 --- a/docs/en/Connection-Strings.md +++ b/docs/en/Connection-Strings.md @@ -1,11 +1,64 @@ -# Data Access +# Connection Strings -ABP framework was designed as database agnostic, it can work any type of data source by the help of the [repository](Repositories.md) and [unit of work](Unit-Of-Work.md) abstractions. +ABP Framework is designed to be [modular](Module-Development-Basics.md), [microservice compatible](Microservice-Architecture.md) and [multi-tenancy](Multi-Tenancy.md) aware. Connection string management is also designed to support these scenarios; -However, currently the following providers are implements: +* Allows to set separate connection strings for every module, so every module can have its own physical database. Modules even might be configured to use different DBMSs. +* Allows to set separate connection string and use a separate database per tenant (in a SaaS application). -* [Entity Framework Core](Entity-Framework-Core.md) (works with [various DBMS and providers](https://docs.microsoft.com/en-us/ef/core/providers/?tabs=dotnet-core-cli).) -* [MongoDB](MongoDB.md) -* [Dapper](Dapper.md) +It also supports hybrid scenarios; -More providers might be added in the next releases. \ No newline at end of file +* Allows to group modules into databases (all modules into a single shared database, 2 modules to database A, 3 modules to database B, 1 module to database C and rest of the modules to database D... etc.) +* Allows to group tenants into databases, just like the modules. +* Allows to separate databases per tenant per module (which might be harder to maintain for you because of too many databases, but the ABP framework supports it). + +All the [pre-built application modules](Modules/Index.md) are designed to be compatible these scenarios. + +## Configure the Connection Strings + +See the following configuration: + +````json +"ConnectionStrings": { + "Default": "Server=localhost;Database=MyMainDb;Trusted_Connection=True;", + "AbpIdentityServer": "Server=localhost;Database=MyIdsDb;Trusted_Connection=True;", + "AbpPermissionManagement": "Server=localhost;Database=MyPermissionDb;Trusted_Connection=True;" +} +```` + +> ABP uses the `IConfiguration` service to get the application configuration. While the simplest way to write configuration into the `appsettings.json` file, it is not limited to this file. You can use environment variables, user secrets, Azure Key Vault... etc. See the [configuration](Configuration.md) document for more. + +This configuration defines three different connection strings: + +* `MyMainDb` (the `Default` connection string) is the main connection string of the application. If you don't specify a connection string for a module, it fallbacks to the `Default` connection string. The [application startup template](Startup-Templates/Application.md) is configured to use a single connection string, so all the modules uses a single shared database. +* `MyIdsDb` is used by the [IdentityServer](Modules/IdentityServer.md) module. +* `MyPermissionDb` is used by the [Permission Management](Modules/Permission-Management.md) module. + +[Pre-built application modules](Modules/Index.md) define constants for the connection string names. For example, the IdentityServer module defines a ` ConnectionStringName ` constant in the ` AbpIdentityServerDbProperties ` class (located in the ` Volo.Abp.IdentityServer ` namespace). Other modules similarly define constants, so you can investigate the connection string name. + +## Set the Connection String Name + +A module typically has a unique connection string name associated to its `DbContext` class using the `ConnectionStringName` attribute. Example: + +````csharp +[ConnectionStringName("AbpIdentityServer")] +public class IdentityServerDbContext + : AbpDbContext, IIdentityServerDbContext +{ +} +```` + +For [Entity Framework Core](Entity-Framework-Core.md) and [MongoDB](MongoDB.md), write this to your `DbContext` class (and the interface if it has). + +> If you are developing a reusable, database provider independent module see also [the best practices guide](Best-Practices/Index.md). + +## Database Migrations for the Entity Framework Core + +Relational databases require to create the database and the database schema (tables, views... etc.) before using it. + +The startup template (with EF Core ORM) comes with a single database and a `.EntityFrameworkCore.DbMigrations` project that contains the migration files for that database. This project mainly defines a *YourProjectName*MigrationsDbContext that calls the `Configure...()` methods of the used modules, like `builder.ConfigurePermissionManagement()`. + +Once you want to separate a module's database, you typically will need to create a second migration path. The easiest way to create a copy of the `.EntityFrameworkCore.DbMigrations` project with the `DbContext` inside it, change its content to only call the `Configure...()` methods of the modules needs to be stored in the second database and re-create the initial migration. In this case, you also need to change the `.DbMigrator` application to be able to work with these second database too. In this way, you will have a separate migrations DbContext per database. + +## Multi-Tenancy + +See [the multi-tenancy document](Multi-Tenancy.md) to learn how to use separate databases for tenants. \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index f42a484b02..e7370a5d05 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -257,29 +257,38 @@ }, { "text": "Data Access", - "path": "Data-Access.md", + "path": "Data-Access.md", "items": [ { - "text": "Entity Framework Core Integration", - "path": "Entity-Framework-Core.md", + "text": "Connection Strings", + "path": "Connection-Strings.md" + }, + { + "text": "Database Providers", "items": [ { - "text": "Switch to MySQL", - "path": "Entity-Framework-Core-MySQL.md" + "text": "Entity Framework Core", + "path": "Entity-Framework-Core.md", + "items": [ + { + "text": "Switch to MySQL", + "path": "Entity-Framework-Core-MySQL.md" + }, + { + "text": "Switch to PostgreSQL", + "path": "Entity-Framework-Core-PostgreSQL.md" + } + ] }, - { - "text": "Switch to PostgreSQL", - "path": "Entity-Framework-Core-PostgreSQL.md" + { + "text": "MongoDB", + "path": "MongoDB.md" + }, + { + "text": "Dapper", + "path": "Dapper.md" } ] - }, - { - "text": "MongoDB Integration", - "path": "MongoDB.md" - }, - { - "text": "Dapper Integration", - "path": "Dapper.md" } ] }, From 6ce0ded3712d7f87b09ef84765d04f7b9b8b91b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 2 Jan 2020 11:10:03 +0300 Subject: [PATCH 013/411] Update Data-Access.md --- docs/en/Data-Access.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/en/Data-Access.md b/docs/en/Data-Access.md index c1a45366a8..a37f77eb65 100644 --- a/docs/en/Data-Access.md +++ b/docs/en/Data-Access.md @@ -1,9 +1,15 @@ # Data Access +## Database Providers + ABP framework was designed as database agnostic. It can work any type of data source by the help of the [repository](Repositories.md) and [unit of work](Unit-Of-Work.md) abstractions. However, currently the following providers are implemented: * [Entity Framework Core](Entity-Framework-Core.md) (works with [various DBMS and providers](https://docs.microsoft.com/en-us/ef/core/providers/).) * [MongoDB](MongoDB.md) * [Dapper](Dapper.md) -More providers will be added in the future. \ No newline at end of file +More providers will be added in the future. + +## See Also + +* [Connection Strings](Connection-Strings.md) \ No newline at end of file From a7695a34cb96d6486f68ac7c952647a9f52d2026 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 2 Jan 2020 11:33:12 +0300 Subject: [PATCH 014/411] ci(scripts): convert all scripts extensions to ts --- npm/ng-packs/package.json | 2 +- npm/ng-packs/scripts/{build.js => build.ts} | 2 - npm/ng-packs/scripts/index.js | 4 - ...dencies.js => install-new-dependencies.ts} | 1 - npm/ng-packs/scripts/package-lock.json | 1382 ----------------- npm/ng-packs/scripts/package.json | 19 +- .../scripts/{prod-build.js => prod-build.ts} | 1 - .../scripts/{publish.js => publish.ts} | 1 - npm/ng-packs/scripts/{push.js => push.ts} | 0 npm/ng-packs/scripts/{sync.js => sync.ts} | 9 +- npm/ng-packs/scripts/tsconfig.json | 16 + npm/ng-packs/scripts/yarn.lock | 1193 ++++++++++++++ 12 files changed, 1226 insertions(+), 1404 deletions(-) rename npm/ng-packs/scripts/{build.js => build.ts} (96%) rename npm/ng-packs/scripts/{install-new-dependencies.js => install-new-dependencies.ts} (97%) delete mode 100644 npm/ng-packs/scripts/package-lock.json rename npm/ng-packs/scripts/{prod-build.js => prod-build.ts} (94%) rename npm/ng-packs/scripts/{publish.js => publish.ts} (98%) rename npm/ng-packs/scripts/{push.js => push.ts} (100%) rename npm/ng-packs/scripts/{sync.js => sync.ts} (89%) create mode 100644 npm/ng-packs/scripts/tsconfig.json create mode 100644 npm/ng-packs/scripts/yarn.lock diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index 920fe7a595..c831267d7d 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -12,7 +12,7 @@ "test": "ng test --watchAll --runInBand", "commit": "git-cz", "lint": "ng lint", - "scripts:build": "cd scripts && npm install && yarn build", + "scripts:build": "cd scripts && yarn && yarn build", "prepare:workspace": "yarn scripts:build", "ci": "yarn prepare:workspace && yarn ci:test && yarn ng lint && yarn ci:build", "ci:test": "ng test --coverage=false", diff --git a/npm/ng-packs/scripts/build.js b/npm/ng-packs/scripts/build.ts similarity index 96% rename from npm/ng-packs/scripts/build.js rename to npm/ng-packs/scripts/build.ts index a38dd53a61..049b044033 100644 --- a/npm/ng-packs/scripts/build.js +++ b/npm/ng-packs/scripts/build.ts @@ -1,6 +1,4 @@ -// ESM syntax is supported. import execa from 'execa'; -import fse from 'fs-extra'; import program from 'commander'; (async () => { diff --git a/npm/ng-packs/scripts/index.js b/npm/ng-packs/scripts/index.js index a82d62f972..e69de29bb2 100644 --- a/npm/ng-packs/scripts/index.js +++ b/npm/ng-packs/scripts/index.js @@ -1,4 +0,0 @@ -// Set options as a parameter, environment variable, or rc file. -// eslint-disable-next-line no-global-assign -require = require('esm')(module /* , options */); -module.exports = require('./main.js'); diff --git a/npm/ng-packs/scripts/install-new-dependencies.js b/npm/ng-packs/scripts/install-new-dependencies.ts similarity index 97% rename from npm/ng-packs/scripts/install-new-dependencies.js rename to npm/ng-packs/scripts/install-new-dependencies.ts index c856631ffa..52f93f23d4 100644 --- a/npm/ng-packs/scripts/install-new-dependencies.js +++ b/npm/ng-packs/scripts/install-new-dependencies.ts @@ -1,4 +1,3 @@ -// ESM syntax is supported. import execa from 'execa'; import fse from 'fs-extra'; diff --git a/npm/ng-packs/scripts/package-lock.json b/npm/ng-packs/scripts/package-lock.json deleted file mode 100644 index fcce2fbb08..0000000000 --- a/npm/ng-packs/scripts/package-lock.json +++ /dev/null @@ -1,1382 +0,0 @@ -{ - "name": "scripts", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "ansi-bgblack": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-bgblack/-/ansi-bgblack-0.1.1.tgz", - "integrity": "sha1-poulAHiHcBtqr74/oNrf36juPKI=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-bgblue": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-bgblue/-/ansi-bgblue-0.1.1.tgz", - "integrity": "sha1-Z73ATtybm1J4lp2hlt6j11yMNhM=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-bgcyan": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-bgcyan/-/ansi-bgcyan-0.1.1.tgz", - "integrity": "sha1-WEiUJWAL3p9VBwaN2Wnr/bUP52g=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-bggreen": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-bggreen/-/ansi-bggreen-0.1.1.tgz", - "integrity": "sha1-TjGRJIUplD9DIelr8THRwTgWr0k=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-bgmagenta": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-bgmagenta/-/ansi-bgmagenta-0.1.1.tgz", - "integrity": "sha1-myhDLAduqpmUGGcqPvvhk5HCx6E=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-bgred": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-bgred/-/ansi-bgred-0.1.1.tgz", - "integrity": "sha1-p2+Sg4OCukMpCmwXeEJPmE1vEEE=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-bgwhite": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-bgwhite/-/ansi-bgwhite-0.1.1.tgz", - "integrity": "sha1-ZQRlE3elim7OzQMxmU5IAljhG6g=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-bgyellow": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-bgyellow/-/ansi-bgyellow-0.1.1.tgz", - "integrity": "sha1-w/4usIzUdmSAKeaHTRWgs49h1E8=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-black": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-black/-/ansi-black-0.1.1.tgz", - "integrity": "sha1-9hheiJNgslRaHsUMC/Bj/EMDJFM=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-blue": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-blue/-/ansi-blue-0.1.1.tgz", - "integrity": "sha1-FbgEmQ6S/JyoxUds6PaZd3wh7b8=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-bold": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-bold/-/ansi-bold-0.1.1.tgz", - "integrity": "sha1-PmOVCvWswq4uZw5vZ96xFdGl9QU=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-colors": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-0.2.0.tgz", - "integrity": "sha1-csMd4qDZoszQysMMyYI+6y9kNLU=", - "requires": { - "ansi-bgblack": "^0.1.1", - "ansi-bgblue": "^0.1.1", - "ansi-bgcyan": "^0.1.1", - "ansi-bggreen": "^0.1.1", - "ansi-bgmagenta": "^0.1.1", - "ansi-bgred": "^0.1.1", - "ansi-bgwhite": "^0.1.1", - "ansi-bgyellow": "^0.1.1", - "ansi-black": "^0.1.1", - "ansi-blue": "^0.1.1", - "ansi-bold": "^0.1.1", - "ansi-cyan": "^0.1.1", - "ansi-dim": "^0.1.1", - "ansi-gray": "^0.1.1", - "ansi-green": "^0.1.1", - "ansi-grey": "^0.1.1", - "ansi-hidden": "^0.1.1", - "ansi-inverse": "^0.1.1", - "ansi-italic": "^0.1.1", - "ansi-magenta": "^0.1.1", - "ansi-red": "^0.1.1", - "ansi-reset": "^0.1.1", - "ansi-strikethrough": "^0.1.1", - "ansi-underline": "^0.1.1", - "ansi-white": "^0.1.1", - "ansi-yellow": "^0.1.1", - "lazy-cache": "^2.0.1" - } - }, - "ansi-cyan": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", - "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-dim": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-dim/-/ansi-dim-0.1.1.tgz", - "integrity": "sha1-QN5MYDqoCG2Oeoa4/5mNXDbu/Ww=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-green": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-green/-/ansi-green-0.1.1.tgz", - "integrity": "sha1-il2al55FjVfEDjNYCzc5C44Q0Pc=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-grey": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-grey/-/ansi-grey-0.1.1.tgz", - "integrity": "sha1-WdmLasK6GfilF5jphT+6eDOaM8E=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-hidden": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-hidden/-/ansi-hidden-0.1.1.tgz", - "integrity": "sha1-7WpMSY0rt8uyidvyqNHcyFZ/rg8=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-inverse": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-inverse/-/ansi-inverse-0.1.1.tgz", - "integrity": "sha1-tq9Fgm/oJr+1KKbHmIV5Q1XM0mk=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-italic": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-italic/-/ansi-italic-0.1.1.tgz", - "integrity": "sha1-EEdDRj9iXBQqA2c5z4XtpoiYbyM=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-magenta": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-magenta/-/ansi-magenta-0.1.1.tgz", - "integrity": "sha1-BjtboW+z8j4c/aKwfAqJ3hHkMK4=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-red": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", - "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-reset": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-reset/-/ansi-reset-0.1.1.tgz", - "integrity": "sha1-5+cSksPH3c1NYu9KbHwFmAkRw7c=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-strikethrough": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-strikethrough/-/ansi-strikethrough-0.1.1.tgz", - "integrity": "sha1-2Eh3FAss/wfRyT685pkE9oiF5Wg=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "ansi-underline": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-underline/-/ansi-underline-0.1.1.tgz", - "integrity": "sha1-38kg9Ml7WXfqFi34/7mIMIqqcaQ=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-white": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-white/-/ansi-white-0.1.1.tgz", - "integrity": "sha1-nHe3wZPF7pkuYBHTbsTJIbRXiUQ=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" - }, - "ansi-yellow": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-yellow/-/ansi-yellow-0.1.1.tgz", - "integrity": "sha1-y5NW8vRscy8OMZnmEClVp32oPB0=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-swap": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arr-swap/-/arr-swap-1.0.1.tgz", - "integrity": "sha1-FHWQ7WX8gVvAf+8Jl8Llgj1kNTQ=", - "requires": { - "is-number": "^3.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - } - } - } - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=" - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", - "requires": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-preset-node6": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/babel-preset-node6/-/babel-preset-node6-11.0.0.tgz", - "integrity": "sha1-CDWZRRckiYWinRj21GXasWu4p9g=", - "requires": { - "babel-plugin-syntax-trailing-function-commas": "^6.5.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.7.4" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "choices-separator": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/choices-separator/-/choices-separator-2.0.0.tgz", - "integrity": "sha1-kv0XYxgteQM/XFxR0Lo1LlVnxpY=", - "requires": { - "ansi-dim": "^0.1.1", - "debug": "^2.6.6", - "strip-color": "^0.1.0" - } - }, - "clone-deep": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-1.0.0.tgz", - "integrity": "sha512-hmJRX8x1QOJVV+GUjOBzi6iauhPqc9hIF6xitWRBbiPZOBb6vGo/mDRIK9P74RTKSQK7AE8B0DDWY/vpRrPmQw==", - "requires": { - "for-own": "^1.0.0", - "is-plain-object": "^2.0.4", - "kind-of": "^5.0.0", - "shallow-clone": "^1.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "commander": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.0.1.tgz", - "integrity": "sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA==" - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, - "core-js": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", - "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==" - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "^1.4.0" - } - }, - "error-symbol": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/error-symbol/-/error-symbol-0.1.0.tgz", - "integrity": "sha1-Ck2uN9YA0VopukU9jvkg8YRDM/Y=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "esm": { - "version": "3.2.25", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", - "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" - }, - "execa": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/execa/-/execa-2.0.3.tgz", - "integrity": "sha512-iM124nlyGSrXmuyZF1EMe83ESY2chIYVyDRZKgmcDynid2Q2v/+GuE7gNMl6Sy9Niwf4MC0DDxagOxeMPjuLsw==", - "requires": { - "cross-spawn": "^6.0.5", - "get-stream": "^5.0.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^3.0.0", - "onetime": "^5.1.0", - "p-finally": "^2.0.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "requires": { - "for-in": "^1.0.1" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "requires": { - "pump": "^3.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" - }, - "graceful-fs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", - "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==" - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "info-symbol": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/info-symbol/-/info-symbol-0.1.0.tgz", - "integrity": "sha1-J4QdcoZ920JCzWEtecEGM4gcang=" - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "is-number": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-6.0.0.tgz", - "integrity": "sha512-Wu1VHeILBK8KAWJUAiSZQX94GmOE45Rg6/538fKwiloUu21KncEkYGPqob2oSZ5mUT73vLGrHQjKw3KMPwfDzg==" - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - }, - "koalas": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/koalas/-/koalas-1.0.2.tgz", - "integrity": "sha1-MYQz8HQjXbePrlZhoCqMpT7ilc0=" - }, - "lazy-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", - "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", - "requires": { - "set-getter": "^0.1.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" - }, - "log-ok": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/log-ok/-/log-ok-0.1.1.tgz", - "integrity": "sha1-vqPdNqzQuKckDXhza1uXxlREozQ=", - "requires": { - "ansi-green": "^0.1.1", - "success-symbol": "^0.1.0" - } - }, - "log-utils": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/log-utils/-/log-utils-0.2.1.tgz", - "integrity": "sha1-pMIXoN2aUFFdm5ICBgkas9TgMc8=", - "requires": { - "ansi-colors": "^0.2.0", - "error-symbol": "^0.1.0", - "info-symbol": "^0.1.0", - "log-ok": "^0.1.1", - "success-symbol": "^0.1.0", - "time-stamp": "^1.0.1", - "warning-symbol": "^0.1.0" - } - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", - "requires": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=" - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "npm-run-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz", - "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==", - "requires": { - "path-key": "^3.0.0" - }, - "dependencies": { - "path-key": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.0.tgz", - "integrity": "sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg==" - } - } - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - } - } - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", - "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==" - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "pointer-symbol": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pointer-symbol/-/pointer-symbol-1.0.0.tgz", - "integrity": "sha1-YPkRAgTqepKbYmRKITFVQ8uz1Ec=" - }, - "prompt-actions": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/prompt-actions/-/prompt-actions-3.0.2.tgz", - "integrity": "sha512-dhz2Fl7vK+LPpmnQ/S/eSut4BnH4NZDLyddHKi5uTU/2PDn3grEMGkgsll16V5RpVUh/yxdiam0xsM0RD4xvtg==", - "requires": { - "debug": "^2.6.8" - } - }, - "prompt-base": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/prompt-base/-/prompt-base-4.1.0.tgz", - "integrity": "sha512-svGzgLUKZoqomz9SGMkf1hBG8Wl3K7JGuRCXc/Pv7xw8239hhaTBXrmjt7EXA9P/QZzdyT8uNWt9F/iJTXq75g==", - "requires": { - "component-emitter": "^1.2.1", - "debug": "^3.0.1", - "koalas": "^1.0.2", - "log-utils": "^0.2.1", - "prompt-actions": "^3.0.2", - "prompt-question": "^5.0.1", - "readline-ui": "^2.2.3", - "readline-utils": "^2.2.3", - "static-extend": "^0.1.2" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "prompt-choices": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/prompt-choices/-/prompt-choices-4.1.0.tgz", - "integrity": "sha512-ZNYLv6rW9z9n0WdwCkEuS+w5nUAGzRgtRt6GQ5aFNFz6MIcU7nHFlHOwZtzy7RQBk80KzUGPSRQphvMiQzB8pg==", - "requires": { - "arr-flatten": "^1.1.0", - "arr-swap": "^1.0.1", - "choices-separator": "^2.0.0", - "clone-deep": "^4.0.0", - "collection-visit": "^1.0.0", - "define-property": "^2.0.2", - "is-number": "^6.0.0", - "kind-of": "^6.0.2", - "koalas": "^1.0.2", - "log-utils": "^0.2.1", - "pointer-symbol": "^1.0.0", - "radio-symbol": "^2.0.0", - "set-value": "^3.0.0", - "strip-color": "^0.1.0", - "terminal-paginator": "^2.0.2", - "toggle-array": "^1.0.1" - }, - "dependencies": { - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "requires": { - "kind-of": "^6.0.2" - } - } - } - }, - "prompt-confirm": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/prompt-confirm/-/prompt-confirm-2.0.4.tgz", - "integrity": "sha512-X5lzbC8/kMNHdPOqQPfMKpH4VV2f7v2OTRJoN69ZYBirSwTeQaf9ZhmzPEO9ybMA0YV2Pha5MV27u2/U4ahWfg==", - "requires": { - "ansi-cyan": "^0.1.1", - "prompt-base": "^4.0.1" - } - }, - "prompt-question": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/prompt-question/-/prompt-question-5.0.2.tgz", - "integrity": "sha512-wreaLbbu8f5+7zXds199uiT11Ojp59Z4iBi6hONlSLtsKGTvL2UY8VglcxQ3t/X4qWIxsNCg6aT4O8keO65v6Q==", - "requires": { - "clone-deep": "^1.0.0", - "debug": "^3.0.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "kind-of": "^5.0.2", - "koalas": "^1.0.2", - "prompt-choices": "^4.0.5" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "radio-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/radio-symbol/-/radio-symbol-2.0.0.tgz", - "integrity": "sha1-eqm/xQSFY21S3XbWqOYxspB5muE=", - "requires": { - "ansi-gray": "^0.1.1", - "ansi-green": "^0.1.1", - "is-windows": "^1.0.1" - } - }, - "readline-ui": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/readline-ui/-/readline-ui-2.2.3.tgz", - "integrity": "sha512-ix7jz0PxqQqcIuq3yQTHv1TOhlD2IHO74aNO+lSuXsRYm1d+pdyup1yF3zKyLK1wWZrVNGjkzw5tUegO2IDy+A==", - "requires": { - "component-emitter": "^1.2.1", - "debug": "^2.6.8", - "readline-utils": "^2.2.1", - "string-width": "^2.0.0" - } - }, - "readline-utils": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/readline-utils/-/readline-utils-2.2.3.tgz", - "integrity": "sha1-b4R9a48ZFcORtYHDZ81HhzhiNRo=", - "requires": { - "arr-flatten": "^1.1.0", - "extend-shallow": "^2.0.1", - "is-buffer": "^1.1.5", - "is-number": "^3.0.0", - "is-windows": "^1.0.1", - "koalas": "^1.0.2", - "mute-stream": "0.0.7", - "strip-color": "^0.1.0", - "window-size": "^1.1.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - } - } - } - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" - }, - "set-getter": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", - "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", - "requires": { - "to-object-path": "^0.3.0" - } - }, - "set-value": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-3.0.1.tgz", - "integrity": "sha512-w6n3GUPYAWQj4ZyHWzD7K2FnFXHx9OTwJYbWg+6nXjG8sCLfs9DGv+KlqglKIIJx+ks7MlFuwFW2RBPb+8V+xg==", - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "shallow-clone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", - "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", - "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^5.0.0", - "mixin-object": "^2.0.1" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-color": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/strip-color/-/strip-color-0.1.0.tgz", - "integrity": "sha1-EG9l09PmotlAHKwOsM6LinArT3s=" - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - }, - "success-symbol": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/success-symbol/-/success-symbol-0.1.0.tgz", - "integrity": "sha1-JAIuSG878c3KCUKDt2nEctO3KJc=" - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - }, - "terminal-paginator": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/terminal-paginator/-/terminal-paginator-2.0.2.tgz", - "integrity": "sha512-IZMT5ECF9p4s+sNCV8uvZSW9E1+9zy9Ji9xz2oee8Jfo7hUFpauyjxkhfRcIH6Lu3Wdepv5D1kVRc8Hx74/LfQ==", - "requires": { - "debug": "^2.6.6", - "extend-shallow": "^2.0.1", - "log-utils": "^0.2.1" - } - }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "toggle-array": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toggle-array/-/toggle-array-1.0.1.tgz", - "integrity": "sha1-y/WEB5K9UJfzMReugkyTKv/ofVg=", - "requires": { - "isobject": "^3.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "warning-symbol": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/warning-symbol/-/warning-symbol-0.1.0.tgz", - "integrity": "sha1-uzHdEbeg+dZ6su2V9Fe2WCW7rSE=" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - }, - "window-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-1.1.1.tgz", - "integrity": "sha512-5D/9vujkmVQ7pSmc0SCBmHXbkv6eaHwXEx65MywhmUMsI8sGqJ972APq1lotfcwMKPFLuCFfL8xGHLIp7jaBmA==", - "requires": { - "define-property": "^1.0.0", - "is-number": "^3.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - } - } -} diff --git a/npm/ng-packs/scripts/package.json b/npm/ng-packs/scripts/package.json index 14e83b6d51..ebca65352a 100644 --- a/npm/ng-packs/scripts/package.json +++ b/npm/ng-packs/scripts/package.json @@ -3,14 +3,12 @@ "version": "1.0.0", "description": "ABP helper scripts", "main": "index.js", - "modules": "[build.js, sync.js]", "scripts": { - "build": "node -r esm build.js", - "build:prod": "node -r esm prod-build.js", - "publish-packages": "node -r esm publish.js", - "install-new-dependencies": "node -r esm install-new-dependencies.js", - "sync": "node -r esm sync.js", - "test": "echo \"Error: no test specified\" && exit 1" + "build": "ts-node -r tsconfig-paths/register build.ts", + "build:prod": "ts-node -r tsconfig-paths/register prod-build.ts", + "publish-packages": "ts-node -r tsconfig-paths/register publish.ts", + "install-new-dependencies": "ts-node -r tsconfig-paths/register install-new-dependencies.ts", + "sync": "ts-node -r tsconfig-paths/register sync.ts" }, "author": "", "dependencies": { @@ -18,9 +16,12 @@ "commander": "^4.0.1", "execa": "^2.0.3", "fs-extra": "^8.1.0", - "prompt-confirm": "^2.0.4" + "prompt-confirm": "^2.0.4", + "typescript": "^3.7.4" }, "devDependencies": { - "esm": "^3.2.25" + "esm": "^3.2.25", + "ts-node": "^8.5.4", + "tsconfig-paths": "^3.9.0" } } diff --git a/npm/ng-packs/scripts/prod-build.js b/npm/ng-packs/scripts/prod-build.ts similarity index 94% rename from npm/ng-packs/scripts/prod-build.js rename to npm/ng-packs/scripts/prod-build.ts index 2f204b11d7..a6bad4c8c9 100644 --- a/npm/ng-packs/scripts/prod-build.js +++ b/npm/ng-packs/scripts/prod-build.ts @@ -1,4 +1,3 @@ -// ESM syntax is supported. import execa from 'execa'; import fse from 'fs-extra'; diff --git a/npm/ng-packs/scripts/publish.js b/npm/ng-packs/scripts/publish.ts similarity index 98% rename from npm/ng-packs/scripts/publish.js rename to npm/ng-packs/scripts/publish.ts index f5698dedfa..04907b451f 100644 --- a/npm/ng-packs/scripts/publish.js +++ b/npm/ng-packs/scripts/publish.ts @@ -1,4 +1,3 @@ -// ESM syntax is supported. import execa from 'execa'; import fse from 'fs-extra'; diff --git a/npm/ng-packs/scripts/push.js b/npm/ng-packs/scripts/push.ts similarity index 100% rename from npm/ng-packs/scripts/push.js rename to npm/ng-packs/scripts/push.ts diff --git a/npm/ng-packs/scripts/sync.js b/npm/ng-packs/scripts/sync.ts similarity index 89% rename from npm/ng-packs/scripts/sync.js rename to npm/ng-packs/scripts/sync.ts index f2c08d0623..60615a1027 100644 --- a/npm/ng-packs/scripts/sync.js +++ b/npm/ng-packs/scripts/sync.ts @@ -1,4 +1,3 @@ -// ESM syntax is supported. import fse from 'fs-extra'; import execa from 'execa'; @@ -8,7 +7,9 @@ import execa from 'execa'; for (let i = 0; i < projectNames.length; i++) { const project = projectNames[i]; - const { dependencies: distDependencies, version } = await fse.readJson(`../dist/${project}/package.json`); + const { dependencies: distDependencies, version } = await fse.readJson( + `../dist/${project}/package.json`, + ); const srcPackagePath = `../packages/${project}/package.json`; const srcPackage = await fse.readJson(srcPackagePath); @@ -25,7 +26,9 @@ import execa from 'execa'; try { await execa('git', ['add', '../packages/*', '../package.json'], { stdout: 'inherit' }); - await execa('git', ['commit', '-m', 'Update source packages versions', '--no-verify'], { stdout: 'inherit' }); + await execa('git', ['commit', '-m', 'Update source packages versions', '--no-verify'], { + stdout: 'inherit', + }); } catch (error) { console.error(error.stderr); } diff --git a/npm/ng-packs/scripts/tsconfig.json b/npm/ng-packs/scripts/tsconfig.json new file mode 100644 index 0000000000..f007616af1 --- /dev/null +++ b/npm/ng-packs/scripts/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "module": "commonjs", + "declaration": true, + "removeComments": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "target": "es2017", + "sourceMap": true, + "outDir": "./dist", + "baseUrl": "./", + "incremental": true, + "esModuleInterop": true + }, + "exclude": ["node_modules", "dist"] +} diff --git a/npm/ng-packs/scripts/yarn.lock b/npm/ng-packs/scripts/yarn.lock new file mode 100644 index 0000000000..9531840238 --- /dev/null +++ b/npm/ng-packs/scripts/yarn.lock @@ -0,0 +1,1193 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + +ansi-bgblack@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-bgblack/-/ansi-bgblack-0.1.1.tgz#a68ba5007887701b6aafbe3fa0dadfdfa8ee3ca2" + integrity sha1-poulAHiHcBtqr74/oNrf36juPKI= + dependencies: + ansi-wrap "0.1.0" + +ansi-bgblue@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-bgblue/-/ansi-bgblue-0.1.1.tgz#67bdc04edc9b9b5278969da196dea3d75c8c3613" + integrity sha1-Z73ATtybm1J4lp2hlt6j11yMNhM= + dependencies: + ansi-wrap "0.1.0" + +ansi-bgcyan@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-bgcyan/-/ansi-bgcyan-0.1.1.tgz#58489425600bde9f5507068dd969ebfdb50fe768" + integrity sha1-WEiUJWAL3p9VBwaN2Wnr/bUP52g= + dependencies: + ansi-wrap "0.1.0" + +ansi-bggreen@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-bggreen/-/ansi-bggreen-0.1.1.tgz#4e3191248529943f4321e96bf131d1c13816af49" + integrity sha1-TjGRJIUplD9DIelr8THRwTgWr0k= + dependencies: + ansi-wrap "0.1.0" + +ansi-bgmagenta@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-bgmagenta/-/ansi-bgmagenta-0.1.1.tgz#9b28432c076eaa999418672a3efbe19391c2c7a1" + integrity sha1-myhDLAduqpmUGGcqPvvhk5HCx6E= + dependencies: + ansi-wrap "0.1.0" + +ansi-bgred@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-bgred/-/ansi-bgred-0.1.1.tgz#a76f92838382ba43290a6c1778424f984d6f1041" + integrity sha1-p2+Sg4OCukMpCmwXeEJPmE1vEEE= + dependencies: + ansi-wrap "0.1.0" + +ansi-bgwhite@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-bgwhite/-/ansi-bgwhite-0.1.1.tgz#6504651377a58a6ececd0331994e480258e11ba8" + integrity sha1-ZQRlE3elim7OzQMxmU5IAljhG6g= + dependencies: + ansi-wrap "0.1.0" + +ansi-bgyellow@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-bgyellow/-/ansi-bgyellow-0.1.1.tgz#c3fe2eb08cd476648029e6874d15a0b38f61d44f" + integrity sha1-w/4usIzUdmSAKeaHTRWgs49h1E8= + dependencies: + ansi-wrap "0.1.0" + +ansi-black@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-black/-/ansi-black-0.1.1.tgz#f6185e889360b2545a1ec50c0bf063fc43032453" + integrity sha1-9hheiJNgslRaHsUMC/Bj/EMDJFM= + dependencies: + ansi-wrap "0.1.0" + +ansi-blue@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-blue/-/ansi-blue-0.1.1.tgz#15b804990e92fc9ca8c5476ce8f699777c21edbf" + integrity sha1-FbgEmQ6S/JyoxUds6PaZd3wh7b8= + dependencies: + ansi-wrap "0.1.0" + +ansi-bold@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-bold/-/ansi-bold-0.1.1.tgz#3e63950af5acc2ae2e670e6f67deb115d1a5f505" + integrity sha1-PmOVCvWswq4uZw5vZ96xFdGl9QU= + dependencies: + ansi-wrap "0.1.0" + +ansi-colors@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-0.2.0.tgz#72c31de2a0d9a2ccd0cac30cc9823eeb2f6434b5" + integrity sha1-csMd4qDZoszQysMMyYI+6y9kNLU= + dependencies: + ansi-bgblack "^0.1.1" + ansi-bgblue "^0.1.1" + ansi-bgcyan "^0.1.1" + ansi-bggreen "^0.1.1" + ansi-bgmagenta "^0.1.1" + ansi-bgred "^0.1.1" + ansi-bgwhite "^0.1.1" + ansi-bgyellow "^0.1.1" + ansi-black "^0.1.1" + ansi-blue "^0.1.1" + ansi-bold "^0.1.1" + ansi-cyan "^0.1.1" + ansi-dim "^0.1.1" + ansi-gray "^0.1.1" + ansi-green "^0.1.1" + ansi-grey "^0.1.1" + ansi-hidden "^0.1.1" + ansi-inverse "^0.1.1" + ansi-italic "^0.1.1" + ansi-magenta "^0.1.1" + ansi-red "^0.1.1" + ansi-reset "^0.1.1" + ansi-strikethrough "^0.1.1" + ansi-underline "^0.1.1" + ansi-white "^0.1.1" + ansi-yellow "^0.1.1" + lazy-cache "^2.0.1" + +ansi-cyan@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-cyan/-/ansi-cyan-0.1.1.tgz#538ae528af8982f28ae30d86f2f17456d2609873" + integrity sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM= + dependencies: + ansi-wrap "0.1.0" + +ansi-dim@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-dim/-/ansi-dim-0.1.1.tgz#40de4c603aa8086d8e7a86b8ff998d5c36eefd6c" + integrity sha1-QN5MYDqoCG2Oeoa4/5mNXDbu/Ww= + dependencies: + ansi-wrap "0.1.0" + +ansi-gray@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" + integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE= + dependencies: + ansi-wrap "0.1.0" + +ansi-green@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-green/-/ansi-green-0.1.1.tgz#8a5d9a979e458d57c40e33580b37390b8e10d0f7" + integrity sha1-il2al55FjVfEDjNYCzc5C44Q0Pc= + dependencies: + ansi-wrap "0.1.0" + +ansi-grey@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-grey/-/ansi-grey-0.1.1.tgz#59d98b6ac2ba19f8a51798e9853fba78339a33c1" + integrity sha1-WdmLasK6GfilF5jphT+6eDOaM8E= + dependencies: + ansi-wrap "0.1.0" + +ansi-hidden@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-hidden/-/ansi-hidden-0.1.1.tgz#ed6a4c498d2bb7cbb289dbf2a8d1dcc8567fae0f" + integrity sha1-7WpMSY0rt8uyidvyqNHcyFZ/rg8= + dependencies: + ansi-wrap "0.1.0" + +ansi-inverse@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-inverse/-/ansi-inverse-0.1.1.tgz#b6af45826fe826bfb528a6c79885794355ccd269" + integrity sha1-tq9Fgm/oJr+1KKbHmIV5Q1XM0mk= + dependencies: + ansi-wrap "0.1.0" + +ansi-italic@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-italic/-/ansi-italic-0.1.1.tgz#104743463f625c142a036739cf85eda688986f23" + integrity sha1-EEdDRj9iXBQqA2c5z4XtpoiYbyM= + dependencies: + ansi-wrap "0.1.0" + +ansi-magenta@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-magenta/-/ansi-magenta-0.1.1.tgz#063b5ba16fb3f23e1cfda2b07c0a89de11e430ae" + integrity sha1-BjtboW+z8j4c/aKwfAqJ3hHkMK4= + dependencies: + ansi-wrap "0.1.0" + +ansi-red@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c" + integrity sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw= + dependencies: + ansi-wrap "0.1.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-reset@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-reset/-/ansi-reset-0.1.1.tgz#e7e71292c3c7ddcd4d62ef4a6c7c05980911c3b7" + integrity sha1-5+cSksPH3c1NYu9KbHwFmAkRw7c= + dependencies: + ansi-wrap "0.1.0" + +ansi-strikethrough@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-strikethrough/-/ansi-strikethrough-0.1.1.tgz#d84877140b2cff07d1c93ebce69904f68885e568" + integrity sha1-2Eh3FAss/wfRyT685pkE9oiF5Wg= + dependencies: + ansi-wrap "0.1.0" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-underline@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-underline/-/ansi-underline-0.1.1.tgz#dfc920f4c97b5977ea162df8ffb988308aaa71a4" + integrity sha1-38kg9Ml7WXfqFi34/7mIMIqqcaQ= + dependencies: + ansi-wrap "0.1.0" + +ansi-white@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-white/-/ansi-white-0.1.1.tgz#9c77b7c193c5ee992e6011d36ec4c921b4578944" + integrity sha1-nHe3wZPF7pkuYBHTbsTJIbRXiUQ= + dependencies: + ansi-wrap "0.1.0" + +ansi-wrap@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" + integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= + +ansi-yellow@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-yellow/-/ansi-yellow-0.1.1.tgz#cb9356f2f46c732f0e3199e6102955a77da83c1d" + integrity sha1-y5NW8vRscy8OMZnmEClVp32oPB0= + dependencies: + ansi-wrap "0.1.0" + +arg@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.2.tgz#e70c90579e02c63d80e3ad4e31d8bfdb8bd50064" + integrity sha512-+ytCkGcBtHZ3V2r2Z06AncYO8jz46UEamcspGoU8lHcEbpn6J77QK0vdWvChsclg/tM5XIJC5tnjmPp7Eq6Obg== + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-swap@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arr-swap/-/arr-swap-1.0.1.tgz#147590ed65fc815bc07fef0997c2e5823d643534" + integrity sha1-FHWQ7WX8gVvAf+8Jl8Llgj1kNTQ= + dependencies: + is-number "^3.0.0" + +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-syntax-trailing-function-commas@^6.5.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= + +babel-plugin-transform-es2015-modules-commonjs@^6.7.4: + version "6.26.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" + integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-preset-node6@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-node6/-/babel-preset-node6-11.0.0.tgz#0835994517248985a29d18f6d465dab16bb8a7d8" + integrity sha1-CDWZRRckiYWinRj21GXasWu4p9g= + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.5.0" + babel-plugin-transform-es2015-modules-commonjs "^6.7.4" + +babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +choices-separator@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/choices-separator/-/choices-separator-2.0.0.tgz#92fd1763182d79033f5c5c51d0ba352e5567c696" + integrity sha1-kv0XYxgteQM/XFxR0Lo1LlVnxpY= + dependencies: + ansi-dim "^0.1.1" + debug "^2.6.6" + strip-color "^0.1.0" + +clone-deep@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-1.0.0.tgz#b2f354444b5d4a0ce58faca337ef34da2b14a6c7" + integrity sha512-hmJRX8x1QOJVV+GUjOBzi6iauhPqc9hIF6xitWRBbiPZOBb6vGo/mDRIK9P74RTKSQK7AE8B0DDWY/vpRrPmQw== + dependencies: + for-own "^1.0.0" + is-plain-object "^2.0.4" + kind-of "^5.0.0" + shallow-clone "^1.0.0" + +clone-deep@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +commander@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.0.1.tgz#b67622721785993182e807f4883633e6401ba53c" + integrity sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA== + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js@^2.4.0: + version "2.6.11" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + +cross-spawn@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" + integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@^2.6.6, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.0.1: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +diff@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" + integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +error-symbol@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/error-symbol/-/error-symbol-0.1.0.tgz#0a4dae37d600d15a29ba453d8ef920f1844333f6" + integrity sha1-Ck2uN9YA0VopukU9jvkg8YRDM/Y= + +escape-string-regexp@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +esm@^3.2.25: + version "3.2.25" + resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" + integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +execa@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-2.1.0.tgz#e5d3ecd837d2a60ec50f3da78fd39767747bbe99" + integrity sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^3.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +for-in@^0.1.3: + version "0.1.8" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" + integrity sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE= + +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +for-own@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" + integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs= + dependencies: + for-in "^1.0.1" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +get-stream@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" + integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== + dependencies: + pump "^3.0.0" + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +info-symbol@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/info-symbol/-/info-symbol-0.1.0.tgz#27841d72867ddb4242cd612d79c10633881c6a78" + integrity sha1-J4QdcoZ920JCzWEtecEGM4gcang= + +invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-6.0.0.tgz#e6d15ad31fc262887cccf217ae5f9316f81b1995" + integrity sha512-Wu1VHeILBK8KAWJUAiSZQX94GmOE45Rg6/538fKwiloUu21KncEkYGPqob2oSZ5mUT73vLGrHQjKw3KMPwfDzg== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-windows@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +kind-of@^3.0.2, kind-of@^3.0.3: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0, kind-of@^5.0.2: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + +koalas@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/koalas/-/koalas-1.0.2.tgz#318433f074235db78fae5661a02a8ca53ee295cd" + integrity sha1-MYQz8HQjXbePrlZhoCqMpT7ilc0= + +lazy-cache@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264" + integrity sha1-uRkKT5EzVGlIQIWfio9whNiCImQ= + dependencies: + set-getter "^0.1.0" + +lodash@^4.17.4: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +log-ok@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/log-ok/-/log-ok-0.1.1.tgz#bea3dd36acd0b8a7240d78736b5b97c65444a334" + integrity sha1-vqPdNqzQuKckDXhza1uXxlREozQ= + dependencies: + ansi-green "^0.1.1" + success-symbol "^0.1.0" + +log-utils@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/log-utils/-/log-utils-0.2.1.tgz#a4c217a0dd9a50515d9b920206091ab3d4e031cf" + integrity sha1-pMIXoN2aUFFdm5ICBgkas9TgMc8= + dependencies: + ansi-colors "^0.2.0" + error-symbol "^0.1.0" + info-symbol "^0.1.0" + log-ok "^0.1.1" + success-symbol "^0.1.0" + time-stamp "^1.0.1" + warning-symbol "^0.1.0" + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +make-error@^1.1.1: + version "1.3.5" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" + integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +mixin-object@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" + integrity sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4= + dependencies: + for-in "^0.1.3" + is-extendable "^0.1.1" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +npm-run-path@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-3.1.0.tgz#7f91be317f6a466efed3c9f2980ad8a4ee8b0fa5" + integrity sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg== + dependencies: + path-key "^3.0.0" + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + dependencies: + mimic-fn "^2.1.0" + +p-finally@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" + integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +pointer-symbol@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pointer-symbol/-/pointer-symbol-1.0.0.tgz#60f9110204ea7a929b62644a21315543cbb3d447" + integrity sha1-YPkRAgTqepKbYmRKITFVQ8uz1Ec= + +prompt-actions@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/prompt-actions/-/prompt-actions-3.0.2.tgz#537eee52241c940379f354a06eae8528e44ceeba" + integrity sha512-dhz2Fl7vK+LPpmnQ/S/eSut4BnH4NZDLyddHKi5uTU/2PDn3grEMGkgsll16V5RpVUh/yxdiam0xsM0RD4xvtg== + dependencies: + debug "^2.6.8" + +prompt-base@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/prompt-base/-/prompt-base-4.1.0.tgz#7b88e4c01b096c83d2f4e501a7e85f0d369ecd1f" + integrity sha512-svGzgLUKZoqomz9SGMkf1hBG8Wl3K7JGuRCXc/Pv7xw8239hhaTBXrmjt7EXA9P/QZzdyT8uNWt9F/iJTXq75g== + dependencies: + component-emitter "^1.2.1" + debug "^3.0.1" + koalas "^1.0.2" + log-utils "^0.2.1" + prompt-actions "^3.0.2" + prompt-question "^5.0.1" + readline-ui "^2.2.3" + readline-utils "^2.2.3" + static-extend "^0.1.2" + +prompt-choices@^4.0.5: + version "4.1.0" + resolved "https://registry.yarnpkg.com/prompt-choices/-/prompt-choices-4.1.0.tgz#6094202c4e55d0762e49c1e53735727e53fd484f" + integrity sha512-ZNYLv6rW9z9n0WdwCkEuS+w5nUAGzRgtRt6GQ5aFNFz6MIcU7nHFlHOwZtzy7RQBk80KzUGPSRQphvMiQzB8pg== + dependencies: + arr-flatten "^1.1.0" + arr-swap "^1.0.1" + choices-separator "^2.0.0" + clone-deep "^4.0.0" + collection-visit "^1.0.0" + define-property "^2.0.2" + is-number "^6.0.0" + kind-of "^6.0.2" + koalas "^1.0.2" + log-utils "^0.2.1" + pointer-symbol "^1.0.0" + radio-symbol "^2.0.0" + set-value "^3.0.0" + strip-color "^0.1.0" + terminal-paginator "^2.0.2" + toggle-array "^1.0.1" + +prompt-confirm@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/prompt-confirm/-/prompt-confirm-2.0.4.tgz#42c06907333e876f2ae8867281e0b9521a4796ca" + integrity sha512-X5lzbC8/kMNHdPOqQPfMKpH4VV2f7v2OTRJoN69ZYBirSwTeQaf9ZhmzPEO9ybMA0YV2Pha5MV27u2/U4ahWfg== + dependencies: + ansi-cyan "^0.1.1" + prompt-base "^4.0.1" + +prompt-question@^5.0.1: + version "5.0.2" + resolved "https://registry.yarnpkg.com/prompt-question/-/prompt-question-5.0.2.tgz#81a479f38f0bafecc758e5d6f7bc586e599610b3" + integrity sha512-wreaLbbu8f5+7zXds199uiT11Ojp59Z4iBi6hONlSLtsKGTvL2UY8VglcxQ3t/X4qWIxsNCg6aT4O8keO65v6Q== + dependencies: + clone-deep "^1.0.0" + debug "^3.0.1" + define-property "^1.0.0" + isobject "^3.0.1" + kind-of "^5.0.2" + koalas "^1.0.2" + prompt-choices "^4.0.5" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +radio-symbol@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/radio-symbol/-/radio-symbol-2.0.0.tgz#7aa9bfc50485636d52dd76d6a8e631b290799ae1" + integrity sha1-eqm/xQSFY21S3XbWqOYxspB5muE= + dependencies: + ansi-gray "^0.1.1" + ansi-green "^0.1.1" + is-windows "^1.0.1" + +readline-ui@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/readline-ui/-/readline-ui-2.2.3.tgz#9e873a7668bbd8ca8a5573ce810a6bafb70a5089" + integrity sha512-ix7jz0PxqQqcIuq3yQTHv1TOhlD2IHO74aNO+lSuXsRYm1d+pdyup1yF3zKyLK1wWZrVNGjkzw5tUegO2IDy+A== + dependencies: + component-emitter "^1.2.1" + debug "^2.6.8" + readline-utils "^2.2.1" + string-width "^2.0.0" + +readline-utils@^2.2.1, readline-utils@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/readline-utils/-/readline-utils-2.2.3.tgz#6f847d6b8f1915c391b581c367cd47873862351a" + integrity sha1-b4R9a48ZFcORtYHDZ81HhzhiNRo= + dependencies: + arr-flatten "^1.1.0" + extend-shallow "^2.0.1" + is-buffer "^1.1.5" + is-number "^3.0.0" + is-windows "^1.0.1" + koalas "^1.0.2" + mute-stream "0.0.7" + strip-color "^0.1.0" + window-size "^1.1.0" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +set-getter@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376" + integrity sha1-12nBgsnVpR9AkUXy+6guXoboA3Y= + dependencies: + to-object-path "^0.3.0" + +set-value@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-3.0.1.tgz#52c82af7653ba69eb1db92e81f5cdb32739b9e95" + integrity sha512-w6n3GUPYAWQj4ZyHWzD7K2FnFXHx9OTwJYbWg+6nXjG8sCLfs9DGv+KlqglKIIJx+ks7MlFuwFW2RBPb+8V+xg== + dependencies: + is-plain-object "^2.0.4" + +shallow-clone@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571" + integrity sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA== + dependencies: + is-extendable "^0.1.1" + kind-of "^5.0.0" + mixin-object "^2.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +source-map-support@^0.5.6: + version "0.5.16" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" + integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +static-extend@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +string-width@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-color@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/strip-color/-/strip-color-0.1.0.tgz#106f65d3d3e6a2d9401cac0eb0ce8b8a702b4f7b" + integrity sha1-EG9l09PmotlAHKwOsM6LinArT3s= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +success-symbol@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/success-symbol/-/success-symbol-0.1.0.tgz#24022e486f3bf1cdca094283b769c472d3b72897" + integrity sha1-JAIuSG878c3KCUKDt2nEctO3KJc= + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +terminal-paginator@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/terminal-paginator/-/terminal-paginator-2.0.2.tgz#967e66056f28fe8f55ba7c1eebfb7c3ef371c1d3" + integrity sha512-IZMT5ECF9p4s+sNCV8uvZSW9E1+9zy9Ji9xz2oee8Jfo7hUFpauyjxkhfRcIH6Lu3Wdepv5D1kVRc8Hx74/LfQ== + dependencies: + debug "^2.6.6" + extend-shallow "^2.0.1" + log-utils "^0.2.1" + +time-stamp@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" + integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +toggle-array@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toggle-array/-/toggle-array-1.0.1.tgz#cbf5840792bd5097f33117ae824c932affe87d58" + integrity sha1-y/WEB5K9UJfzMReugkyTKv/ofVg= + dependencies: + isobject "^3.0.0" + +ts-node@^8.5.4: + version "8.5.4" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.5.4.tgz#a152add11fa19c221d0b48962c210cf467262ab2" + integrity sha512-izbVCRV68EasEPQ8MSIGBNK9dc/4sYJJKYA+IarMQct1RtEot6Xp0bXuClsbUSnKpg50ho+aOAx8en5c+y4OFw== + dependencies: + arg "^4.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.6" + yn "^3.0.0" + +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +warning-symbol@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/warning-symbol/-/warning-symbol-0.1.0.tgz#bb31dd11b7a0f9d67ab2ed95f457b65825bbad21" + integrity sha1-uzHdEbeg+dZ6su2V9Fe2WCW7rSE= + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +window-size@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-1.1.1.tgz#9858586580ada78ab26ecd6978a6e03115c1af20" + integrity sha512-5D/9vujkmVQ7pSmc0SCBmHXbkv6eaHwXEx65MywhmUMsI8sGqJ972APq1lotfcwMKPFLuCFfL8xGHLIp7jaBmA== + dependencies: + define-property "^1.0.0" + is-number "^3.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +yn@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== From 7a2197bd1b265c8d15e1b6502d3a41d8fed587a0 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Thu, 2 Jan 2020 12:08:45 +0300 Subject: [PATCH 015/411] add update database powershell script. --- modules/blogging/app/update-database.ps1 | 1 + 1 file changed, 1 insertion(+) create mode 100644 modules/blogging/app/update-database.ps1 diff --git a/modules/blogging/app/update-database.ps1 b/modules/blogging/app/update-database.ps1 new file mode 100644 index 0000000000..39297dd2c9 --- /dev/null +++ b/modules/blogging/app/update-database.ps1 @@ -0,0 +1 @@ +dotnet ef database update -s Volo.BloggingTestApp/Volo.BloggingTestApp.csproj -p Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.csproj \ No newline at end of file From f06b7a79fce74951d46357541747911b07772b00 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Thu, 2 Jan 2020 12:08:55 +0300 Subject: [PATCH 016/411] add EfCore packages for Package Manager Console commands --- .../app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj b/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj index c1bb7c8a85..750481d6a1 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj +++ b/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj @@ -15,6 +15,8 @@ + + From d1f93c7ebdeed6f6dbc66a891160bd82eb9b38e1 Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Thu, 2 Jan 2020 13:13:35 +0300 Subject: [PATCH 017/411] Switch to PostgreSql Documentation Updated PostgreSql documentation based on documentation template --- docs/en/Entity-Framework-Core-PostgreSQL.md | 74 ++++++--------------- 1 file changed, 21 insertions(+), 53 deletions(-) diff --git a/docs/en/Entity-Framework-Core-PostgreSQL.md b/docs/en/Entity-Framework-Core-PostgreSQL.md index 541554020a..85ce3197f2 100644 --- a/docs/en/Entity-Framework-Core-PostgreSQL.md +++ b/docs/en/Entity-Framework-Core-PostgreSQL.md @@ -1,73 +1,41 @@ # Switch to EF Core PostgreSQL Provider -> See [Entity Framework Core Integration document](../Entity-Framework-Core.md) for the basics of the EF Core integration. +This document explains how to switch to the **PostgreSQL** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured. -## EntityFrameworkCore Project Update +## Replace the Volo.Abp.EntityFrameworkCore.SqlServer Package -- In `Acme.BookStore.EntityFrameworkCore` project replace package `Volo.Abp.EntityFrameworkCore.SqlServer` with `Volo.Abp.EntityFrameworkCore.PostgreSql` -- Update to use PostgreSQL in `BookStoreEntityFrameworkCoreModule` - - Replace the `AbpEntityFrameworkCoreSqlServerModule` with the `AbpEntityFrameworkCorePostgreSqlModule` - - Replace the `options.UseSqlServer()` with the `options.UsePostgreSql()` -- In other projects update the PostgreSQL connection string in necessary `appsettings.json` files - - more info of [PostgreSQL connection strings](https://www.connectionstrings.com/postgresql/),You need to pay attention to `Npgsql` in this document +`.EntityFrameworkCore` project in the solution depends on the [Volo.Abp.EntityFrameworkCore.SqlServer](https://www.nuget.org/packages/Volo.Abp.EntityFrameworkCore.SqlServer) NuGet package. Remove this package and add the same version of the [Volo.Abp.EntityFrameworkCore.PostgreSql](https://www.nuget.org/packages/Volo.Abp.EntityFrameworkCore.PostgreSql) package. -## EntityFrameworkCore.DbMigrations Project Update -- Update to use PostgreSQL in `XXXMigrationsDbContextFactory` - - Replace the `new DbContextOptionsBuilder().UseSqlServer()` with the `new DbContextOptionsBuilder().UseNpgsql()` +## Replace the Module Dependency -## Delete Existing Migrations +Find ***YourProjectName*EntityFrameworkCoreModule** class inside the `.EntityFrameworkCore` project, remove `typeof(AbpEntityFrameworkCoreSqlServerModule)` from the `DependsOn` attribute, add `typeof(AbpEntityFrameworkCorePostgreSqlModule)` (also replace `using Volo.Abp.EntityFrameworkCore.SqlServer;` with `using Volo.Abp.EntityFrameworkCore.PostgreSql;`). -Delete all existing migration files (including `DbContextModelSnapshot`) +## UsePostgreSql() -![postgresql-delete-initial-migrations](images/postgresql-delete-initial-migrations.png) +Find `UseSqlServer()` calls in your solution, replace with `UsePostgreSql()`. Check the following files: -## Regenerate Initial Migration +* *YourProjectName*EntityFrameworkCoreModule.cs inside the `.EntityFrameworkCore` project. +* *YourProjectName*MigrationsDbContextFactory.cs inside the `.EntityFrameworkCore.DbMigrations` project. -Set the correct startup project (usually a web project) +> Depending on your solution structure, you may find more code files need to be changed. -![set-as-startup-project](../images/set-as-startup-project.png) +## Change the Connection Strings -Open the **Package Manager Console** (Tools -> Nuget Package Manager -> Package Manager Console), select the `.EntityFrameworkCore.DbMigrations` as the **Default project** and execute the following command: +PostgreSql connection strings are different than SQL Server connection strings. So, check all `appsettings.json` files in your solution and replace the connection strings inside them. See the [connectionstrings.com]( https://www.connectionstrings.com/postgresql/ ) for details of PostgreSql connection string options. -Run `Add-Migration` command. -```` -PM> Add-Migration Initial -```` +You typically will change the `appsettings.json` inside the `.DbMigrator` and `.Web` projects, but it depends on your solution structure. -## Update the Database +## Re-Generate the Migrations -You have two options to create the database. +The startup template uses [Entity Framework Core's Code First Migrations](https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/). EF Core Migrations depend on the selected DBMS provider. So, changing the DBMS provider will cause the migration fails. -## Using the DbMigrator Application +* Delete the Migrations folder under the `.EntityFrameworkCore.DbMigrations` project and re-build the solution. +* Run `Add-Migration "Initial"` on the Package Manager Console (select the `.DbMigrator` (or `.Web`) project as the startup project in the Solution Explorer and select the `.EntityFrameworkCore.DbMigrations` project as the default project in the Package Manager Console). -The solution contains a console application (named `Acme.BookStore.DbMigrator` in this sample) that can create database, apply migrations and seed initial data. It is useful on development as well as on production environment. +This will create a database migration with all database objects (tables) configured. -> `.DbMigrator` project has its own `appsettings.json`. So, if you have changed the connection string above, you should also change this one. +Run the `.DbMigrator` project to create the database and seed the initial data. -Right click to the `.DbMigrator` project and select **Set as StartUp Project**: +## Run the Application -![set-as-startup-project](../images/set-as-startup-project.png) - -Hit F5 (or Ctrl+F5) to run the application. It will have an output like shown below: - -![set-as-startup-project](../images/db-migrator-app.png) - -### Using EF Core Update-Database Command - -Ef Core has `Update-Database` command which creates database if necessary and applies pending migrations. - -Set the correct startup project (usually a web project) - -![set-as-startup-project](../images/set-as-startup-project.png) - -Open the **Package Manager Console** (Tools -> Nuget Package Manager -> Package Manager Console), select the `.EntityFrameworkCore.DbMigrations` as the **Default project** and execute the following command: - -```` -PM> Update-Database -```` - -This will create a new database based on the configured connection string. - -![postgresql-update-database](images/postgresql-update-database.png) - -> Using the `.DbMigrator` tool is the suggested way, because it also seeds the initial data to be able to properly run the web application. +It is ready. Just run the application and enjoy coding. \ No newline at end of file From 6de99aa3f346372dfa1d9c0986f5a8ed70d78b9d Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Thu, 2 Jan 2020 13:14:10 +0300 Subject: [PATCH 018/411] Update Entity-Framework-Core-MySQL.md Typo fix --- docs/en/Entity-Framework-Core-MySQL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Entity-Framework-Core-MySQL.md b/docs/en/Entity-Framework-Core-MySQL.md index 8effd5159d..d1fa66e1a4 100644 --- a/docs/en/Entity-Framework-Core-MySQL.md +++ b/docs/en/Entity-Framework-Core-MySQL.md @@ -47,7 +47,7 @@ Then `ConfigureIdentityServer()` method will set the field lengths to not exceed The startup template uses [Entity Framework Core's Code First Migrations](https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/). EF Core Migrations depend on the selected DBMS provider. So, changing the DBMS provider will cause the migration fails. * Delete the Migrations folder under the `.EntityFrameworkCore.DbMigrations` project and re-build the solution. -* Run `Add-Migration "Initial"` on the Package Manager Console (select the `.DbMigrator` (or `.Web`) project as the startup project in the Solution Explorer and select the `.EntityFrameworkCore.DbMigrations` project as the default project in de Package Manager Console). +* Run `Add-Migration "Initial"` on the Package Manager Console (select the `.DbMigrator` (or `.Web`) project as the startup project in the Solution Explorer and select the `.EntityFrameworkCore.DbMigrations` project as the default project in the Package Manager Console). This will create a database migration with all database objects (tables) configured. From b885bc12399ff757fe117eb76a9fe57f2ca213e0 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 2 Jan 2020 13:35:30 +0300 Subject: [PATCH 019/411] refactor(theme-shared): change modal-backdrop width --- npm/ng-packs/packages/theme-shared/src/lib/constants/styles.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/constants/styles.ts b/npm/ng-packs/packages/theme-shared/src/lib/constants/styles.ts index 99c651f736..2361cb8b87 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/constants/styles.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/constants/styles.ts @@ -48,7 +48,7 @@ export default ` position: fixed; top: 0; left: 0; - width: calc(100% - 7px); + width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.6); z-index: 1040; From 27d9f690566466170e950d93b7bf7d79b5b851f6 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 2 Jan 2020 14:00:45 +0300 Subject: [PATCH 020/411] refactor(theme-shared): change modal-backdrop size --- .../packages/theme-shared/src/lib/constants/styles.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/constants/styles.ts b/npm/ng-packs/packages/theme-shared/src/lib/constants/styles.ts index 2361cb8b87..6e88c18530 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/constants/styles.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/constants/styles.ts @@ -48,8 +48,8 @@ export default ` position: fixed; top: 0; left: 0; - width: 100%; - height: 100%; + width: 100vw; + height: 100vh; background-color: rgba(0, 0, 0, 0.6); z-index: 1040; } From 4f1bd2d69d8995d296d48dd4916b2ba878ff31a6 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Thu, 2 Jan 2020 14:04:30 +0300 Subject: [PATCH 021/411] blogging refactor --- .../wwwroot/libs/squire-rte/squire.js | 4 ++-- modules/blogging/app/Volo.BloggingTestApp/yarn.lock | 4 ++-- .../Volo/Blogging/Posts/PostAppService.cs | 10 +++++----- .../Volo.Blogging.Domain/Volo/Blogging/Tagging/Tag.cs | 3 ++- .../Volo/Abp/Blogging/Tagging/Tag_Tests.cs | 10 +++++----- .../Volo/Blogging/BloggingTestDataBuilder.cs | 4 ++-- 6 files changed, 18 insertions(+), 17 deletions(-) diff --git a/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/squire-rte/squire.js b/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/squire-rte/squire.js index 7ce7ef2258..870905984b 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/squire-rte/squire.js +++ b/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/squire-rte/squire.js @@ -1,2 +1,2 @@ -!function(e,t){"use strict";function n(e,t,n){this.root=this.currentNode=e,this.nodeType=t,this.filter=n||ue}function o(e,t){for(var n=e.length;n--;)if(!t(e[n]))return!1;return!0}function i(e){return e.nodeType===M&&!!pe[e.nodeName]}function r(e){switch(e.nodeType){case H:return me;case M:case z:if(de&&Ce.has(e))return Ce.get(e);break;default:return ge}var t;return t=o(e.childNodes,a)?fe.test(e.nodeName)?me:ve:Ne,de&&Ce.set(e,t),t}function a(e){return r(e)===me}function s(e){return r(e)===ve}function d(e){return r(e)===Ne}function l(e,t){var o=new n(t,q,s);return o.currentNode=e,o}function c(e,t){return e=l(e,t).previousNode(),e!==t?e:null}function h(e,t){return e=l(e,t).nextNode(),e!==t?e:null}function u(e){return!e.textContent&&!e.querySelector("IMG")}function f(e,t){return!i(e)&&e.nodeType===t.nodeType&&e.nodeName===t.nodeName&&"A"!==e.nodeName&&e.className===t.className&&(!e.style&&!t.style||e.style.cssText===t.style.cssText)}function p(e,t,n){if(e.nodeName!==t)return!1;for(var o in n)if(e.getAttribute(o)!==n[o])return!1;return!0}function g(e,t,n,o){for(;e&&e!==t;){if(p(e,n,o))return e;e=e.parentNode}return null}function m(e,t,n){for(;e&&e!==t;){if(n.test(e.nodeName))return e;e=e.parentNode}return null}function v(e,t){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}function N(e,t,n){var o,i,r,a,s,d="";return e&&e!==t&&(d=N(e.parentNode,t,n),e.nodeType===M&&(d+=(d?">":"")+e.nodeName,(o=e.id)&&(d+="#"+o),(i=e.className.trim())&&(r=i.split(/\s\s*/),r.sort(),d+=".",d+=r.join(".")),(a=e.dir)&&(d+="[dir="+a+"]"),r&&(s=n.classNames,ce.call(r,s.highlight)>-1&&(d+="[backgroundColor="+e.style.backgroundColor.replace(/ /g,"")+"]"),ce.call(r,s.colour)>-1&&(d+="[color="+e.style.color.replace(/ /g,"")+"]"),ce.call(r,s.fontFamily)>-1&&(d+="[fontFamily="+e.style.fontFamily.replace(/ /g,"")+"]"),ce.call(r,s.fontSize)>-1&&(d+="[fontSize="+e.style.fontSize+"]")))),d}function C(e){var t=e.nodeType;return t===M||t===z?e.childNodes.length:e.length||0}function _(e){var t=e.parentNode;return t&&t.removeChild(e),e}function S(e,t){var n=e.parentNode;n&&n.replaceChild(t,e)}function y(e){for(var t=e.ownerDocument.createDocumentFragment(),n=e.childNodes,o=n?n.length:0;o--;)t.appendChild(e.firstChild);return t}function T(e,n,o,i){var r,a,s,d=e.createElement(n);if(o instanceof Array&&(i=o,o=null),o)for(r in o)o[r]!==t&&d.setAttribute(r,o[r]);if(i)for(a=0,s=i.length;as?t.startOffset-=1:t.startOffset===s&&(t.startContainer=o,t.startOffset=C(o))),t.endContainer===e&&(t.endOffset>s?t.endOffset-=1:t.endOffset===s&&(t.endContainer=o,t.endOffset=C(o))),_(n),n.nodeType===H?o.appendData(n.data):d.push(y(n));else if(n.nodeType===M){for(i=d.length;i--;)n.appendChild(d.pop());k(n,t)}}function A(e,t){if(e.nodeType===H&&(e=e.parentNode),e.nodeType===M){var n={startContainer:t.startContainer,startOffset:t.startOffset,endContainer:t.endContainer,endOffset:t.endOffset};k(e,n),t.setStart(n.startContainer,n.startOffset),t.setEnd(n.endContainer,n.endOffset)}}function L(e){var t=e.nodeName;return"TD"===t||"TH"===t||"TR"===t||"TBODY"===t||"THEAD"===t}function O(e,t,n,o){var i,r,a,s=t;if(!L(e)||!L(t)){for(;(i=s.parentNode)&&i!==o&&i.nodeType===M&&1===i.childNodes.length;)s=i;_(s),a=e.childNodes.length,r=e.lastChild,r&&"BR"===r.nodeName&&(e.removeChild(r),a-=1),e.appendChild(y(t)),n.setStart(e,a),n.collapse(!0),A(e,n),J&&(r=e.lastChild)&&"BR"===r.nodeName&&e.removeChild(r)}}function B(e,t){var n,o,i=e.previousSibling,r=e.firstChild,a=e.ownerDocument,s="LI"===e.nodeName;if((!s||r&&/^[OU]L$/.test(r.nodeName))&&!L(e))if(i&&f(i,e)&&i.isContentEditable&&e.isContentEditable){if(!d(i)){if(!s)return;o=T(a,"DIV"),o.appendChild(y(i)),i.appendChild(o)}_(e),n=!d(e),i.appendChild(y(e)),n&&b(i,t),r&&B(r,t)}else s&&(i=T(a,"DIV"),e.insertBefore(i,r),E(i,t))}function D(e){this.isShiftDown=e.shiftKey}function R(e,t,n){var o,i;if(e||(e={}),t)for(o in t)!n&&o in e||(i=t[o],e[o]=i&&i.constructor===Object?R(e[o],i,n):i);return e}function P(e,t){e.nodeType===W&&(e=e.body);var n,o=e.ownerDocument,i=o.defaultView;this._win=i,this._doc=o,this._root=e,this._events={},this._isFocused=!1,this._lastSelection=null,ae&&this.addEventListener("beforedeactivate",this.getSelection),this._hasZWS=!1,this._lastAnchorNode=null,this._lastFocusNode=null,this._path="",this._willUpdatePath=!1,"onselectionchange"in o?this.addEventListener("selectionchange",this._updatePathOnEvent):(this.addEventListener("keyup",this._updatePathOnEvent),this.addEventListener("mouseup",this._updatePathOnEvent)),this._undoIndex=-1,this._undoStack=[],this._undoStackLength=0,this._isInUndoState=!1,this._ignoreChange=!1,this._ignoreAllChanges=!1,se?(n=new MutationObserver(this._docWasChanged.bind(this)),n.observe(e,{childList:!0,attributes:!0,characterData:!0,subtree:!0}),this._mutation=n):this.addEventListener("keyup",this._keyUpDetectChange),this._restoreSelection=!1,this.addEventListener("blur",U),this.addEventListener("mousedown",I),this.addEventListener("touchstart",I),this.addEventListener("focus",w),this._awaitingPaste=!1,this.addEventListener(X?"beforecut":"cut",tt),this.addEventListener("copy",nt),this.addEventListener("keydown",D),this.addEventListener("keyup",D),this.addEventListener(X?"beforepaste":"paste",ot),this.addEventListener("drop",it),this.addEventListener(J?"keypress":"keydown",Ie),this._keyHandlers=Object.create(He),this.setConfig(t),X&&(i.Text.prototype.splitText=function(e){var t=this.ownerDocument.createTextNode(this.data.slice(e)),n=this.nextSibling,o=this.parentNode,i=this.length-e;return n?o.insertBefore(t,n):o.appendChild(t),i&&this.deleteData(e,i),t}),e.setAttribute("contenteditable","true");try{o.execCommand("enableObjectResizing",!1,"false"),o.execCommand("enableInlineTableEditing",!1,"false")}catch(e){}e.__squire__=this,this.setHTML("")}function U(){this._restoreSelection=!0}function I(){this._restoreSelection=!1}function w(){this._restoreSelection&&this.setSelection(this._lastSelection)}function F(e,t,n){var o,i;for(o=t.firstChild;o;o=i){if(i=o.nextSibling,a(o)){if(o.nodeType===H||"BR"===o.nodeName||"IMG"===o.nodeName){n.appendChild(o);continue}}else if(s(o)){n.appendChild(e.createDefaultBlock([F(e,o,e._doc.createDocumentFragment())]));continue}F(e,o,n)}return n}var M=1,H=3,W=9,z=11,q=1,K="​",G=e.defaultView,Z=navigator.userAgent,j=/Android/.test(Z),Q=/iP(?:ad|hone|od)/.test(Z),$=/Mac OS X/.test(Z),V=/Windows NT/.test(Z),Y=/Gecko\//.test(Z),X=/Trident\/[456]\./.test(Z),J=!!G.opera,ee=/Edge\//.test(Z),te=!ee&&/WebKit\//.test(Z),ne=/Trident\/[4567]\./.test(Z),oe=$?"meta-":"ctrl-",ie=X||J,re=X||te,ae=X,se="undefined"!=typeof MutationObserver,de="undefined"!=typeof WeakMap,le=/[^ \t\r\n]/,ce=Array.prototype.indexOf;Object.create||(Object.create=function(e){var t=function(){};return t.prototype=e,new t});var he={1:1,2:2,3:4,8:128,9:256,11:1024},ue=function(){return!0};n.prototype.nextNode=function(){for(var e,t=this.currentNode,n=this.root,o=this.nodeType,i=this.filter;;){for(e=t.firstChild;!e&&t&&t!==n;)(e=t.nextSibling)||(t=t.parentNode);if(!e)return null;if(he[e.nodeType]&o&&i(e))return this.currentNode=e,e;t=e}},n.prototype.previousNode=function(){for(var e,t=this.currentNode,n=this.root,o=this.nodeType,i=this.filter;;){if(t===n)return null;if(e=t.previousSibling)for(;t=e.lastChild;)e=t;else e=t.parentNode;if(!e)return null;if(he[e.nodeType]&o&&i(e))return this.currentNode=e,e;t=e}},n.prototype.previousPONode=function(){for(var e,t=this.currentNode,n=this.root,o=this.nodeType,i=this.filter;;){for(e=t.lastChild;!e&&t&&t!==n;)(e=t.previousSibling)||(t=t.parentNode);if(!e)return null;if(he[e.nodeType]&o&&i(e))return this.currentNode=e,e;t=e}};var fe=/^(?:#text|A(?:BBR|CRONYM)?|B(?:R|D[IO])?|C(?:ITE|ODE)|D(?:ATA|EL|FN)|EM|FONT|I(?:FRAME|MG|NPUT|NS)?|KBD|Q|R(?:P|T|UBY)|S(?:AMP|MALL|PAN|TR(?:IKE|ONG)|U[BP])?|TIME|U|VAR|WBR)$/,pe={BR:1,HR:1,IFRAME:1,IMG:1,INPUT:1},ge=0,me=1,ve=2,Ne=3,Ce=de?new WeakMap:null,_e=function(e,t){for(var n=e.childNodes;t&&e.nodeType===M;)e=n[t-1],n=e.childNodes,t=n.length;return e},Se=function(e,t){if(e.nodeType===M){var n=e.childNodes;if(t-1,r=e.compareBoundaryPoints(1,o)<1;return!i&&!r}var a=e.compareBoundaryPoints(0,o)<1,s=e.compareBoundaryPoints(2,o)>-1;return a&&s},ke=function(e){for(var t,n=e.startContainer,o=e.startOffset,r=e.endContainer,a=e.endOffset,s=!0;n.nodeType!==H&&(t=n.childNodes[o])&&!i(t);)n=t,o=0;if(a)for(;r.nodeType!==H;){if(!(t=r.childNodes[a-1])||i(t)){if(s&&t&&"BR"===t.nodeName){a-=1,s=!1;continue}break}r=t,a=C(r)}else for(;r.nodeType!==H&&(t=r.firstChild)&&!i(t);)r=t;e.collapsed?(e.setStart(r,a),e.setEnd(n,o)):(e.setStart(n,o),e.setEnd(r,a))},Ae=function(e,t,n,o){var i,r=e.startContainer,a=e.startOffset,s=e.endContainer,d=e.endOffset,l=!0;for(t||(t=e.commonAncestorContainer),n||(n=t);!a&&r!==t&&r!==o;)i=r.parentNode,a=ce.call(i.childNodes,r),r=i;for(;;){if(l&&s.nodeType!==H&&s.childNodes[d]&&"BR"===s.childNodes[d].nodeName&&(d+=1,l=!1),s===n||s===o||d!==C(s))break;i=s.parentNode,d=ce.call(i.childNodes,s)+1,s=i}e.setStart(r,a),e.setEnd(s,d)},Le=function(e,t){var n,o=e.startContainer;return a(o)?n=c(o,t):o!==t&&s(o)?n=o:(n=_e(o,e.startOffset),n=h(n,t)),n&&xe(e,n,!0)?n:null},Oe=function(e,t){var n,o,i=e.endContainer;if(a(i))n=c(i,t);else if(i!==t&&s(i))n=i;else{if(!(n=Se(i,e.endOffset))||!v(t,n))for(n=t;o=n.lastChild;)n=o;n=c(n,t)}return n&&xe(e,n,!0)?n:null},Be=new n(null,4|q,function(e){return e.nodeType===H?le.test(e.data):"IMG"===e.nodeName}),De=function(e,t){var n,o=e.startContainer,i=e.startOffset;if(Be.root=null,o.nodeType===H){if(i)return!1;n=o}else if(n=Se(o,i),n&&!v(t,n)&&(n=null),!n&&(n=_e(o,i),n.nodeType===H&&n.length))return!1;return Be.currentNode=n,Be.root=Le(e,t),!Be.previousNode()},Re=function(e,t){var n,o=e.endContainer,i=e.endOffset;if(Be.root=null,o.nodeType===H){if((n=o.data.length)&&i-1||!Y&&ce.call(i,"text/plain")>-1&&ce.call(i,"text/rtf")<0))return e.preventDefault(),void(!d&&(r=a.getData("text/html"))?this.insertHTML(r,!0):((r=a.getData("text/plain"))||(r=a.getData("text/uri-list")))&&this.insertPlainText(r,!0));this._awaitingPaste=!0;var f=this._doc.body,p=this.getSelection(),g=p.startContainer,m=p.startOffset,v=p.endContainer,N=p.endOffset,C=this.createElement("DIV",{contenteditable:"true",style:"position:fixed; overflow:hidden; top:0; right:100%; width:1px; height:1px;"});f.appendChild(C),p.selectNodeContents(C),this.setSelection(p),setTimeout(function(){try{u._awaitingPaste=!1;for(var e,t,n="",o=C;C=o;)o=C.nextSibling,_(C),e=C.firstChild,e&&e===C.lastChild&&"DIV"===e.nodeName&&(C=e),n+=C.innerHTML;t=u.createRange(g,m,v,N),u.setSelection(t),n&&u.insertHTML(n,!0)}catch(e){u.didError(e)}},0)},it=function(e){for(var t=e.dataTransfer.types,n=t.length,o=!1,i=!1;n--;)switch(t[n]){case"text/plain":o=!0;break;case"text/html":i=!0;break;default:return}(i||o)&&this.saveUndoState()},rt=P.prototype,at=function(e,t,n){var o=n._doc,i=e?DOMPurify.sanitize(e,{ALLOW_UNKNOWN_PROTOCOLS:!0,WHOLE_DOCUMENT:!1,RETURN_DOM:!0,RETURN_DOM_FRAGMENT:!0}):null;return i?o.importNode(i,!0):o.createDocumentFragment()};rt.setConfig=function(e){return e=R({blockTag:"DIV",blockAttributes:null,tagAttributes:{blockquote:null,ul:null,ol:null,li:null,a:null},classNames:{colour:"colour",fontFamily:"font",fontSize:"size",highlight:"highlight"},leafNodeNames:pe,undo:{documentSizeThreshold:-1,undoLimit:-1},isInsertedHTMLSanitized:!0,isSetHTMLSanitized:!0,sanitizeToDOMFragment:"undefined"!=typeof DOMPurify&&DOMPurify.isSupported?at:null,willCutCopy:null},e,!0),e.blockTag=e.blockTag.toUpperCase(),this._config=e,this},rt.createElement=function(e,t,n){return T(this._doc,e,t,n)},rt.createDefaultBlock=function(e){var t=this._config;return E(this.createElement(t.blockTag,t.blockAttributes,e),this._root)},rt.didError=function(e){console.log(e)},rt.getDocument=function(){return this._doc},rt.getRoot=function(){return this._root},rt.modifyDocument=function(e){var t=this._mutation;t&&(t.takeRecords().length&&this._docWasChanged(),t.disconnect()),this._ignoreAllChanges=!0,e(),this._ignoreAllChanges=!1,t&&(t.observe(this._root,{childList:!0,attributes:!0,characterData:!0,subtree:!0}),this._ignoreChange=!1)};var st={pathChange:1,select:1,input:1,undoStateChange:1};rt.fireEvent=function(e,t){var n,o,i,r=this._events[e];if(/^(?:focus|blur)/.test(e))if(n=this._root===this._doc.activeElement,"focus"===e){if(!n||this._isFocused)return this;this._isFocused=!0}else{if(n||!this._isFocused)return this;this._isFocused=!1}if(r)for(t||(t={}),t.type!==e&&(t.type=e),r=r.slice(),o=r.length;o--;){i=r[o];try{i.handleEvent?i.handleEvent(t):i.call(this,t)}catch(t){t.details="Squire: fireEvent error. Event type: "+e,this.didError(t)}}return this},rt.destroy=function(){var e,t=this._events;for(e in t)this.removeEventListener(e);this._mutation&&this._mutation.disconnect(),delete this._root.__squire__,this._undoIndex=-1,this._undoStack=[],this._undoStackLength=0},rt.handleEvent=function(e){this.fireEvent(e.type,e)},rt.addEventListener=function(e,t){var n=this._events[e],o=this._root;return t?(n||(n=this._events[e]=[],st[e]||("selectionchange"===e&&(o=this._doc),o.addEventListener(e,this,!0))),n.push(t),this):(this.didError({name:"Squire: addEventListener with null or undefined fn",message:"Event type: "+e}),this)},rt.removeEventListener=function(e,t){var n,o=this._events[e],i=this._root;if(o){if(t)for(n=o.length;n--;)o[n]===t&&o.splice(n,1);else o.length=0;o.length||(delete this._events[e],st[e]||("selectionchange"===e&&(i=this._doc),i.removeEventListener(e,this,!0)))}return this},rt.createRange=function(e,t,n,o){if(e instanceof this._win.Range)return e.cloneRange();var i=this._doc.createRange();return i.setStart(e,t),n?i.setEnd(n,o):i.setEnd(e,t),i},rt.getCursorPosition=function(e){if(!e&&!(e=this.getSelection())||!e.getBoundingClientRect)return null;var t,n,o=e.getBoundingClientRect();return o&&!o.top&&(this._ignoreChange=!0,t=this._doc.createElement("SPAN"),t.textContent=K,ye(e,t),o=t.getBoundingClientRect(),n=t.parentNode,n.removeChild(t),A(n,e)),o},rt._moveCursorTo=function(e){var t=this._root,n=this.createRange(t,e?0:t.childNodes.length);return ke(n),this.setSelection(n),this},rt.moveCursorToStart=function(){return this._moveCursorTo(!0)},rt.moveCursorToEnd=function(){return this._moveCursorTo(!1)};var dt=function(e){return e._win.getSelection()||null};rt.setSelection=function(e){if(e)if(this._lastSelection=e,this._isFocused)if(j&&!this._restoreSelection)U.call(this),this.blur(),this.focus();else{Q&&this._win.focus();var t=dt(this);t&&(t.removeAllRanges(),t.addRange(e))}else U.call(this);return this},rt.getSelection=function(){var e,t,n,o,r=dt(this),a=this._root;return this._isFocused&&r&&r.rangeCount&&(e=r.getRangeAt(0).cloneRange(),t=e.startContainer,n=e.endContainer,t&&i(t)&&e.setStartBefore(t),n&&i(n)&&e.setEndBefore(n)),e&&v(a,e.commonAncestorContainer)?this._lastSelection=e:(e=this._lastSelection,o=e.commonAncestorContainer,v(o.ownerDocument,o)||(e=null)),e||(e=this.createRange(a.firstChild,0)),e},rt.getSelectedText=function(){var e=this.getSelection();if(!e||e.collapsed)return"";var t,o=new n(e.commonAncestorContainer,4|q,function(t){return xe(e,t,!0)}),i=e.startContainer,r=e.endContainer,s=o.currentNode=i,d="",l=!1;for(o.filter(s)||(s=o.nextNode());s;)s.nodeType===H?(t=s.data)&&/\S/.test(t)&&(s===r&&(t=t.slice(0,e.endOffset)),s===i&&(t=t.slice(e.startOffset)),d+=t,l=!0):("BR"===s.nodeName||l&&!a(s))&&(d+="\n",l=!1),s=o.nextNode();return d},rt.getPath=function(){return this._path};var lt=function(e,t){for(var o,i,r,s=new n(e,4);i=s.nextNode();)for(;(r=i.data.indexOf(K))>-1&&(!t||i.parentNode!==t);){if(1===i.length){do{o=i.parentNode,o.removeChild(i),i=o,s.currentNode=o}while(a(i)&&!C(i));break}i.deleteData(r,1)}};rt._didAddZWS=function(){this._hasZWS=!0},rt._removeZWS=function(){this._hasZWS&&(lt(this._root),this._hasZWS=!1)},rt._updatePath=function(e,t){if(e){var n,o=e.startContainer,i=e.endContainer;(t||o!==this._lastAnchorNode||i!==this._lastFocusNode)&&(this._lastAnchorNode=o,this._lastFocusNode=i,n=o&&i?o===i?N(i,this._root,this._config):"(selection)":"",this._path!==n&&(this._path=n,this.fireEvent("pathChange",{path:n}))),this.fireEvent(e.collapsed?"cursor":"select",{range:e})}}, -rt._updatePathOnEvent=function(e){var t=this;t._isFocused&&!t._willUpdatePath&&(t._willUpdatePath=!0,setTimeout(function(){t._willUpdatePath=!1,t._updatePath(t.getSelection())},0))},rt.focus=function(){if(ne){try{this._root.setActive()}catch(e){}this.fireEvent("focus")}else this._root.focus();return this},rt.blur=function(){return this._root.blur(),ne&&this.fireEvent("blur"),this};var ct="squire-selection-end";rt._saveRangeToBookmark=function(e){var t,n=this.createElement("INPUT",{id:"squire-selection-start",type:"hidden"}),o=this.createElement("INPUT",{id:ct,type:"hidden"});ye(e,n),e.collapse(!1),ye(e,o),2&n.compareDocumentPosition(o)&&(n.id=ct,o.id="squire-selection-start",t=n,n=o,o=t),e.setStartAfter(n),e.setEndBefore(o)},rt._getRangeAndRemoveBookmark=function(e){var t=this._root,n=t.querySelector("#squire-selection-start"),o=t.querySelector("#"+ct);if(n&&o){var i=n.parentNode,r=o.parentNode,a=ce.call(i.childNodes,n),s=ce.call(r.childNodes,o);i===r&&(s-=1),_(n),_(o),e||(e=this._doc.createRange()),e.setStart(i,a),e.setEnd(r,s),A(i,e),i!==r&&A(r,e),e.collapsed&&(i=e.startContainer,i.nodeType===H&&(r=i.childNodes[e.startOffset],r&&r.nodeType===H||(r=i.childNodes[e.startOffset-1]),r&&r.nodeType===H&&(e.setStart(r,0),e.collapse(!0))))}return e||null},rt._keyUpDetectChange=function(e){var t=e.keyCode;e.ctrlKey||e.metaKey||e.altKey||!(t<16||t>20)||!(t<33||t>45)||this._docWasChanged()},rt._docWasChanged=function(){if(de&&(Ce=new WeakMap),!this._ignoreAllChanges){if(se&&this._ignoreChange)return void(this._ignoreChange=!1);this._isInUndoState&&(this._isInUndoState=!1,this.fireEvent("undoStateChange",{canUndo:!0,canRedo:!1})),this.fireEvent("input")}},rt._recordUndoState=function(e,t){if(!this._isInUndoState||t){var n,o=this._undoIndex,i=this._undoStack,r=this._config.undo,a=r.documentSizeThreshold,s=r.undoLimit;t||(o+=1),o-1&&2*n.length>a&&s>-1&&o>s&&(i.splice(0,o-s),o=s,this._undoStackLength=s),i[o]=n,this._undoIndex=o,this._undoStackLength+=1,this._isInUndoState=!0}},rt.saveUndoState=function(e){return e===t&&(e=this.getSelection()),this._recordUndoState(e,this._isInUndoState),this._getRangeAndRemoveBookmark(e),this},rt.undo=function(){if(0!==this._undoIndex||!this._isInUndoState){this._recordUndoState(this.getSelection(),!1),this._undoIndex-=1,this._setHTML(this._undoStack[this._undoIndex]);var e=this._getRangeAndRemoveBookmark();e&&this.setSelection(e),this._isInUndoState=!0,this.fireEvent("undoStateChange",{canUndo:0!==this._undoIndex,canRedo:!0}),this.fireEvent("input")}return this},rt.redo=function(){var e=this._undoIndex,t=this._undoStackLength;if(e+1c&&h.splitText(c),h===s&&l&&(h=h.splitText(l),d===s&&(d=h,c-=l),s=h,l=0),i=this.createElement(e,t),S(h,i),i.appendChild(h))}while(r.nextNode());d.nodeType!==H&&(h.nodeType===H?(d=h,c=h.length):(d=h.parentNode,c=1)),o=this.createRange(s,l,d,c)}return o},rt._removeFormat=function(e,t,n,o){this._saveRangeToBookmark(n);var i,r=this._doc;n.collapsed&&(re?(i=r.createTextNode(K),this._didAddZWS()):i=r.createTextNode(""),ye(n,i));for(var s=n.commonAncestorContainer;a(s);)s=s.parentNode;var d=n.startContainer,l=n.startOffset,c=n.endContainer,h=n.endOffset,u=[],f=function(e,t){if(!xe(n,e,!1)){var o,i,r=e.nodeType===H;if(!xe(n,e,!0))return void("INPUT"===e.nodeName||r&&!e.data||u.push([t,e]));if(r)e===c&&h!==e.length&&u.push([t,e.splitText(h)]),e===d&&l&&(e.splitText(l),u.push([t,e]));else for(o=e.firstChild;o;o=i)i=o.nextSibling,f(o,t)}},g=Array.prototype.filter.call(s.getElementsByTagName(e),function(o){return xe(n,o,!0)&&p(o,e,t)});return o||g.forEach(function(e){f(e,e)}),u.forEach(function(e){var t=e[0].cloneNode(!1),n=e[1];S(n,t),t.appendChild(n)}),g.forEach(function(e){S(e,y(e))}),this._getRangeAndRemoveBookmark(n),i&&n.collapse(!1),A(s,n),n},rt.changeFormat=function(e,t,n,o){return n||(n=this.getSelection())?(this.saveUndoState(n),t&&(n=this._removeFormat(t.tag.toUpperCase(),t.attributes||{},n,o)),e&&(n=this._addFormat(e.tag.toUpperCase(),e.attributes||{},n)),this.setSelection(n),this._updatePath(n,!0),se||this._docWasChanged(),this):this};var ht={DT:"DD",DD:"DT",LI:"LI",PRE:"PRE"},ut=function(e,t,n,o){var i=ht[t.nodeName],r=null,a=x(n,o,t.parentNode,e._root),s=e._config;return i||(i=s.blockTag,r=s.blockAttributes),p(a,i,r)||(t=T(a.ownerDocument,i,r),a.dir&&(t.dir=a.dir),S(a,t),t.appendChild(y(a)),a=t),a};rt.forEachBlock=function(e,t,n){if(!n&&!(n=this.getSelection()))return this;t&&this.saveUndoState(n);var o=this._root,i=Le(n,o),r=Oe(n,o);if(i&&r)do{if(e(i)||i===r)break}while(i=h(i,o));return t&&(this.setSelection(n),this._updatePath(n,!0),se||this._docWasChanged()),this},rt.modifyBlocks=function(e,t){if(!t&&!(t=this.getSelection()))return this;this._recordUndoState(t,this._isInUndoState);var n,o=this._root;return Pe(t,o),Ae(t,o,o,o),n=Te(t,o,o),ye(t,e.call(this,n)),t.endOffset]+|\([^\s()<>]+\))+(?:\((?:[^\s()<>]+|(?:\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))|([\w\-.%+]+@(?:[\w\-]+\.)+[A-Z]{2,}\b)(?:\?[^&?\s]+=[^&?\s]+(?:&[^&?\s]+=[^&?\s]+)*)?/i;var St=function(e,t,o){var i,r,a,s,d,l,c,h=e.ownerDocument,u=new n(e,4,function(e){return!g(e,t,"A")}),f=o.linkRegExp,p=o._config.tagAttributes.a;if(f)for(;i=u.nextNode();)for(r=i.data,a=i.parentNode;s=f.exec(r);)d=s.index,l=d+s[0].length,d&&(c=h.createTextNode(r.slice(0,d)),a.insertBefore(c,i)),c=o.createElement("A",R({href:s[1]?/^(?:ht|f)tps?:/i.test(s[1])?s[1]:"http://"+s[1]:"mailto:"+s[0]},p,!1)),c.textContent=r.slice(d,l),a.insertBefore(c,i),i.data=r=r.slice(l)};rt.insertHTML=function(e,t){var n,o,i,r,a,s,d,l=this._config,c=l.isInsertedHTMLSanitized?l.sanitizeToDOMFragment:null,u=this.getSelection(),f=this._doc;"function"==typeof c?r=c(e,t,this):(t&&(n=e.indexOf("\x3c!--StartFragment--\x3e"),o=e.lastIndexOf("\x3c!--EndFragment--\x3e"),n>-1&&o>-1&&(e=e.slice(n+20,o))),/<\/td>((?!<\/tr>)[\s\S])*$/i.test(e)&&(e=""+e+""),/<\/tr>((?!<\/table>)[\s\S])*$/i.test(e)&&(e=""+e+"
"),i=this.createElement("DIV"),i.innerHTML=e,r=f.createDocumentFragment(),r.appendChild(y(i))),this.saveUndoState(u);try{for(a=this._root,s=r,d={fragment:r,preventDefault:function(){this.defaultPrevented=!0},defaultPrevented:!1},St(r,r,this),$e(r,l),Je(r,a,!1),Ve(r),r.normalize();s=h(s,r);)E(s,a);t&&this.fireEvent("willPaste",d),d.defaultPrevented||(be(u,d.fragment,a),se||this._docWasChanged(),u.collapse(!1),this._ensureBottomLine()),this.setSelection(u),this._updatePath(u,!0),t&&this.focus()}catch(e){this.didError(e)}return this};var yt=function(e){return e.split("&").join("&").split("<").join("<").split(">").join(">").split('"').join(""")};rt.insertPlainText=function(e,t){var n=this.getSelection();if(n.collapsed&&g(n.startContainer,this._root,"PRE")){var o,i,r=n.startContainer,a=n.startOffset;return r&&r.nodeType===H||(o=this._doc.createTextNode(""),r.insertBefore(o,r.childNodes[a]),r=o,a=0),i={text:e,preventDefault:function(){this.defaultPrevented=!0},defaultPrevented:!1},t&&this.fireEvent("willPaste",i),i.defaultPrevented||(e=i.text,r.insertData(a,e),n.setStart(r,a+e.length),n.collapse(!0)),this.setSelection(n),this}var s,d,l,c,h=e.split("\n"),u=this._config,f=u.blockTag,p=u.blockAttributes,m="",v="<"+f;for(s in p)v+=" "+s+'="'+yt(p[s])+'"';for(v+=">",d=0,l=h.length;d")+m;return this.insertHTML(h.join(""),t)};var Tt=function(e,t,n){return function(){return this[e](t,n),this.focus()}};rt.addStyles=function(e){if(e){var t=this._doc.documentElement.firstChild,n=this.createElement("STYLE",{type:"text/css"});n.appendChild(this._doc.createTextNode(e)),t.appendChild(n)}return this},rt.bold=Tt("changeFormat",{tag:"B"}),rt.italic=Tt("changeFormat",{tag:"I"}),rt.underline=Tt("changeFormat",{tag:"U"}),rt.strikethrough=Tt("changeFormat",{tag:"S"}),rt.subscript=Tt("changeFormat",{tag:"SUB"},{tag:"SUP"}),rt.superscript=Tt("changeFormat",{tag:"SUP"},{tag:"SUB"}),rt.removeBold=Tt("changeFormat",null,{tag:"B"}),rt.removeItalic=Tt("changeFormat",null,{tag:"I"}),rt.removeUnderline=Tt("changeFormat",null,{tag:"U"}),rt.removeStrikethrough=Tt("changeFormat",null,{tag:"S"}),rt.removeSubscript=Tt("changeFormat",null,{tag:"SUB"}),rt.removeSuperscript=Tt("changeFormat",null,{tag:"SUP"}),rt.makeLink=function(e,t){var n=this.getSelection();if(n.collapsed){var o=e.indexOf(":")+1;if(o)for(;"/"===e[o];)o+=1;ye(n,this._doc.createTextNode(e.slice(o)))}return t=R(R({href:e},t,!0),this._config.tagAttributes.a,!1),this.changeFormat({tag:"A",attributes:t},{tag:"A"},n),this.focus()},rt.removeLink=function(){return this.changeFormat(null,{tag:"A"},this.getSelection(),!0),this.focus()},rt.setFontFace=function(e){var t=this._config.classNames.fontFamily;return this.changeFormat(e?{tag:"SPAN",attributes:{class:t,style:"font-family: "+e+", sans-serif;"}}:null,{tag:"SPAN",attributes:{class:t}}),this.focus()},rt.setFontSize=function(e){var t=this._config.classNames.fontSize;return this.changeFormat(e?{tag:"SPAN",attributes:{class:t,style:"font-size: "+("number"==typeof e?e+"px":e)}}:null,{tag:"SPAN",attributes:{class:t}}),this.focus()},rt.setTextColour=function(e){var t=this._config.classNames.colour;return this.changeFormat(e?{tag:"SPAN",attributes:{class:t,style:"color:"+e}}:null,{tag:"SPAN",attributes:{class:t}}),this.focus()},rt.setHighlightColour=function(e){var t=this._config.classNames.highlight;return this.changeFormat(e?{tag:"SPAN",attributes:{class:t,style:"background-color:"+e}}:e,{tag:"SPAN",attributes:{class:t}}),this.focus()},rt.setTextAlignment=function(e){return this.forEachBlock(function(t){var n=t.className.split(/\s+/).filter(function(e){return!!e&&!/^align/.test(e)}).join(" ");e?(t.className=n+" align-"+e,t.style.textAlign=e):(t.className=n,t.style.textAlign="")},!0),this.focus()},rt.setTextDirection=function(e){return this.forEachBlock(function(t){e?t.dir=e:t.removeAttribute("dir")},!0),this.focus()};var Et=function(e){for(var t,o=this._root,i=this._doc,r=i.createDocumentFragment(),a=l(e,o);t=a.nextNode();){var s,d,c=t.querySelectorAll("BR"),h=[],u=c.length;for(s=0;s-1;)a.appendChild(d.createTextNode(r.slice(0,s))),a.appendChild(d.createElement("BR")),r=r.slice(s+1);i.parentNode.insertBefore(a,i),i.data=r}b(t,l),S(t,y(t))}return e};rt.code=function(){var e=this.getSelection();return e.collapsed||d(e.commonAncestorContainer)?this.modifyBlocks(Et,e):this.changeFormat({tag:"CODE",attributes:this._config.tagAttributes.code},null,e),this.focus()},rt.removeCode=function(){var e=this.getSelection();return g(e.commonAncestorContainer,this._root,"PRE")?this.modifyBlocks(bt,e):this.changeFormat(null,{tag:"CODE"},e),this.focus()},rt.toggleCode=function(){return this.hasFormat("PRE")||this.hasFormat("CODE")?this.removeCode():this.code(),this},rt.removeAllFormatting=function(e){if(!e&&!(e=this.getSelection())||e.collapsed)return this;for(var t=this._root,n=e.commonAncestorContainer;n&&!s(n);)n=n.parentNode;if(n||(Pe(e,t),n=t),n.nodeType===H)return this;this.saveUndoState(e),Ae(e,n,n,t);for(var o,i,r=n.ownerDocument,a=e.startContainer,d=e.startOffset,l=e.endContainer,c=e.endOffset,h=r.createDocumentFragment(),u=r.createDocumentFragment(),f=x(l,c,n,t),p=x(a,d,n,t);p!==f;)o=p.nextSibling,h.appendChild(p),p=o;return F(this,h,u),u.normalize(),p=u.firstChild,o=u.lastChild,i=n.childNodes,p?(n.insertBefore(u,f),d=ce.call(i,p),c=ce.call(i,o)+1):(d=ce.call(i,f),c=d),e.setStart(n,d),e.setEnd(n,c),A(n,e),ke(e),this.setSelection(e),this._updatePath(e,!0),this.focus()},rt.increaseQuoteLevel=Tt("modifyBlocks",ft),rt.decreaseQuoteLevel=Tt("modifyBlocks",pt),rt.makeUnorderedList=Tt("modifyBlocks",vt),rt.makeOrderedList=Tt("modifyBlocks",Nt),rt.removeList=Tt("modifyBlocks",Ct),P.isInline=a,P.isBlock=s,P.isContainer=d,P.getBlockWalker=l,P.getPreviousBlock=c,P.getNextBlock=h,P.areAlike=f,P.hasTagAttributes=p,P.getNearest=g,P.isOrContains=v,P.detach=_,P.replaceWith=S,P.empty=y,P.getNodeBefore=_e,P.getNodeAfter=Se,P.insertNodeInRange=ye,P.extractContentsOfRange=Te,P.deleteContentsOfRange=Ee,P.insertTreeFragmentIntoRange=be,P.isNodeContainedInRange=xe,P.moveRangeBoundariesDownTree=ke,P.moveRangeBoundariesUpTree=Ae,P.getStartBlockOfRange=Le,P.getEndBlockOfRange=Oe,P.contentWalker=Be,P.rangeDoesStartAtBlockBoundary=De,P.rangeDoesEndAtBlockBoundary=Re,P.expandRangeToBlockBoundaries=Pe,P.onPaste=ot,P.addLinks=St,P.splitBlock=ut,P.startSelectionId="squire-selection-start",P.endSelectionId=ct,"object"==typeof exports?module.exports=P:"function"==typeof define&&define.amd?define(function(){return P}):(G.Squire=P,top!==G&&"true"===e.documentElement.getAttribute("data-squireinit")&&(G.editor=new P(e),G.onEditorLoad&&(G.onEditorLoad(G.editor),G.onEditorLoad=null)))}(document); \ No newline at end of file +!function(e,t){"use strict";function n(e,t,n){this.root=this.currentNode=e,this.nodeType=t,this.filter=n||ue}function o(e,t){for(var n=e.length;n--;)if(!t(e[n]))return!1;return!0}function i(e){return e.nodeType===M&&!!pe[e.nodeName]}function r(e){switch(e.nodeType){case H:return me;case M:case z:if(de&&Ce.has(e))return Ce.get(e);break;default:return ge}var t;return t=o(e.childNodes,a)?fe.test(e.nodeName)?me:ve:Ne,de&&Ce.set(e,t),t}function a(e){return r(e)===me}function s(e){return r(e)===ve}function d(e){return r(e)===Ne}function l(e,t){var o=new n(t,q,s);return o.currentNode=e,o}function c(e,t){return e=l(e,t).previousNode(),e!==t?e:null}function h(e,t){return e=l(e,t).nextNode(),e!==t?e:null}function u(e){return!e.textContent&&!e.querySelector("IMG")}function f(e,t){return!i(e)&&e.nodeType===t.nodeType&&e.nodeName===t.nodeName&&"A"!==e.nodeName&&e.className===t.className&&(!e.style&&!t.style||e.style.cssText===t.style.cssText)}function p(e,t,n){if(e.nodeName!==t)return!1;for(var o in n)if(e.getAttribute(o)!==n[o])return!1;return!0}function g(e,t,n,o){for(;e&&e!==t;){if(p(e,n,o))return e;e=e.parentNode}return null}function m(e,t,n){for(;e&&e!==t;){if(n.test(e.nodeName))return e;e=e.parentNode}return null}function v(e,t){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}function N(e,t,n){var o,i,r,a,s,d="";return e&&e!==t&&(d=N(e.parentNode,t,n),e.nodeType===M&&(d+=(d?">":"")+e.nodeName,(o=e.id)&&(d+="#"+o),(i=e.className.trim())&&(r=i.split(/\s\s*/),r.sort(),d+=".",d+=r.join(".")),(a=e.dir)&&(d+="[dir="+a+"]"),r&&(s=n.classNames,ce.call(r,s.highlight)>-1&&(d+="[backgroundColor="+e.style.backgroundColor.replace(/ /g,"")+"]"),ce.call(r,s.colour)>-1&&(d+="[color="+e.style.color.replace(/ /g,"")+"]"),ce.call(r,s.fontFamily)>-1&&(d+="[fontFamily="+e.style.fontFamily.replace(/ /g,"")+"]"),ce.call(r,s.fontSize)>-1&&(d+="[fontSize="+e.style.fontSize+"]")))),d}function C(e){var t=e.nodeType;return t===M||t===z?e.childNodes.length:e.length||0}function _(e){var t=e.parentNode;return t&&t.removeChild(e),e}function S(e,t){var n=e.parentNode;n&&n.replaceChild(t,e)}function y(e){for(var t=e.ownerDocument.createDocumentFragment(),n=e.childNodes,o=n?n.length:0;o--;)t.appendChild(e.firstChild);return t}function T(e,n,o,i){var r,a,s,d=e.createElement(n);if(o instanceof Array&&(i=o,o=null),o)for(r in o)o[r]!==t&&d.setAttribute(r,o[r]);if(i)for(a=0,s=i.length;as?t.startOffset-=1:t.startOffset===s&&(t.startContainer=o,t.startOffset=C(o))),t.endContainer===e&&(t.endOffset>s?t.endOffset-=1:t.endOffset===s&&(t.endContainer=o,t.endOffset=C(o))),_(n),n.nodeType===H?o.appendData(n.data):d.push(y(n));else if(n.nodeType===M){for(i=d.length;i--;)n.appendChild(d.pop());k(n,t)}}function L(e,t){if(e.nodeType===H&&(e=e.parentNode),e.nodeType===M){var n={startContainer:t.startContainer,startOffset:t.startOffset,endContainer:t.endContainer,endOffset:t.endOffset};k(e,n),t.setStart(n.startContainer,n.startOffset),t.setEnd(n.endContainer,n.endOffset)}}function A(e){var t=e.nodeName;return"TD"===t||"TH"===t||"TR"===t||"TBODY"===t||"THEAD"===t}function O(e,t,n,o){var i,r,a,s=t;if(!A(e)||!A(t)){for(;(i=s.parentNode)&&i!==o&&i.nodeType===M&&1===i.childNodes.length;)s=i;_(s),a=e.childNodes.length,r=e.lastChild,r&&"BR"===r.nodeName&&(e.removeChild(r),a-=1),e.appendChild(y(t)),n.setStart(e,a),n.collapse(!0),L(e,n),J&&(r=e.lastChild)&&"BR"===r.nodeName&&e.removeChild(r)}}function B(e,t){var n,o,i=e.previousSibling,r=e.firstChild,a=e.ownerDocument,s="LI"===e.nodeName;if((!s||r&&/^[OU]L$/.test(r.nodeName))&&!A(e))if(i&&f(i,e)){if(!d(i)){if(!s)return;o=T(a,"DIV"),o.appendChild(y(i)),i.appendChild(o)}_(e),n=!d(e),i.appendChild(y(e)),n&&b(i,t),r&&B(r,t)}else s&&(i=T(a,"DIV"),e.insertBefore(i,r),E(i,t))}function D(e){this.isShiftDown=e.shiftKey}function R(e,t,n){var o,i;if(e||(e={}),t)for(o in t)!n&&o in e||(i=t[o],e[o]=i&&i.constructor===Object?R(e[o],i,n):i);return e}function P(e,t){e.nodeType===W&&(e=e.body);var n,o=e.ownerDocument,i=o.defaultView;this._win=i,this._doc=o,this._root=e,this._events={},this._isFocused=!1,this._lastSelection=null,ae&&this.addEventListener("beforedeactivate",this.getSelection),this._hasZWS=!1,this._lastAnchorNode=null,this._lastFocusNode=null,this._path="",this._willUpdatePath=!1,"onselectionchange"in o?this.addEventListener("selectionchange",this._updatePathOnEvent):(this.addEventListener("keyup",this._updatePathOnEvent),this.addEventListener("mouseup",this._updatePathOnEvent)),this._undoIndex=-1,this._undoStack=[],this._undoStackLength=0,this._isInUndoState=!1,this._ignoreChange=!1,this._ignoreAllChanges=!1,se?(n=new MutationObserver(this._docWasChanged.bind(this)),n.observe(e,{childList:!0,attributes:!0,characterData:!0,subtree:!0}),this._mutation=n):this.addEventListener("keyup",this._keyUpDetectChange),this._restoreSelection=!1,this.addEventListener("blur",U),this.addEventListener("mousedown",I),this.addEventListener("touchstart",I),this.addEventListener("focus",w),this._awaitingPaste=!1,this.addEventListener(X?"beforecut":"cut",tt),this.addEventListener("copy",nt),this.addEventListener("keydown",D),this.addEventListener("keyup",D),this.addEventListener(X?"beforepaste":"paste",ot),this.addEventListener("drop",it),this.addEventListener(J?"keypress":"keydown",Ie),this._keyHandlers=Object.create(He),this.setConfig(t),X&&(i.Text.prototype.splitText=function(e){var t=this.ownerDocument.createTextNode(this.data.slice(e)),n=this.nextSibling,o=this.parentNode,i=this.length-e;return n?o.insertBefore(t,n):o.appendChild(t),i&&this.deleteData(e,i),t}),e.setAttribute("contenteditable","true");try{o.execCommand("enableObjectResizing",!1,"false"),o.execCommand("enableInlineTableEditing",!1,"false")}catch(e){}e.__squire__=this,this.setHTML("")}function U(){this._restoreSelection=!0}function I(){this._restoreSelection=!1}function w(){this._restoreSelection&&this.setSelection(this._lastSelection)}function F(e,t,n){var o,i;for(o=t.firstChild;o;o=i){if(i=o.nextSibling,a(o)){if(o.nodeType===H||"BR"===o.nodeName||"IMG"===o.nodeName){n.appendChild(o);continue}}else if(s(o)){n.appendChild(e.createDefaultBlock([F(e,o,e._doc.createDocumentFragment())]));continue}F(e,o,n)}return n}var M=1,H=3,W=9,z=11,q=1,K="​",G=e.defaultView,Z=navigator.userAgent,j=/Android/.test(Z),Q=/iP(?:ad|hone|od)/.test(Z),$=/Mac OS X/.test(Z),V=/Windows NT/.test(Z),Y=/Gecko\//.test(Z),X=/Trident\/[456]\./.test(Z),J=!!G.opera,ee=/Edge\//.test(Z),te=!ee&&/WebKit\//.test(Z),ne=/Trident\/[4567]\./.test(Z),oe=$?"meta-":"ctrl-",ie=X||J,re=X||te,ae=X,se="undefined"!=typeof MutationObserver,de="undefined"!=typeof WeakMap,le=/[^ \t\r\n]/,ce=Array.prototype.indexOf;Object.create||(Object.create=function(e){var t=function(){};return t.prototype=e,new t});var he={1:1,2:2,3:4,8:128,9:256,11:1024},ue=function(){return!0};n.prototype.nextNode=function(){for(var e,t=this.currentNode,n=this.root,o=this.nodeType,i=this.filter;;){for(e=t.firstChild;!e&&t&&t!==n;)(e=t.nextSibling)||(t=t.parentNode);if(!e)return null;if(he[e.nodeType]&o&&i(e))return this.currentNode=e,e;t=e}},n.prototype.previousNode=function(){for(var e,t=this.currentNode,n=this.root,o=this.nodeType,i=this.filter;;){if(t===n)return null;if(e=t.previousSibling)for(;t=e.lastChild;)e=t;else e=t.parentNode;if(!e)return null;if(he[e.nodeType]&o&&i(e))return this.currentNode=e,e;t=e}},n.prototype.previousPONode=function(){for(var e,t=this.currentNode,n=this.root,o=this.nodeType,i=this.filter;;){for(e=t.lastChild;!e&&t&&t!==n;)(e=t.previousSibling)||(t=t.parentNode);if(!e)return null;if(he[e.nodeType]&o&&i(e))return this.currentNode=e,e;t=e}};var fe=/^(?:#text|A(?:BBR|CRONYM)?|B(?:R|D[IO])?|C(?:ITE|ODE)|D(?:ATA|EL|FN)|EM|FONT|I(?:FRAME|MG|NPUT|NS)?|KBD|Q|R(?:P|T|UBY)|S(?:AMP|MALL|PAN|TR(?:IKE|ONG)|U[BP])?|TIME|U|VAR|WBR)$/,pe={BR:1,HR:1,IFRAME:1,IMG:1,INPUT:1},ge=0,me=1,ve=2,Ne=3,Ce=de?new WeakMap:null,_e=function(e,t){for(var n=e.childNodes;t&&e.nodeType===M;)e=n[t-1],n=e.childNodes,t=n.length;return e},Se=function(e,t){if(e.nodeType===M){var n=e.childNodes;if(t-1,r=e.compareBoundaryPoints(1,o)<1;return!i&&!r}var a=e.compareBoundaryPoints(0,o)<1,s=e.compareBoundaryPoints(2,o)>-1;return a&&s},ke=function(e){for(var t,n=e.startContainer,o=e.startOffset,r=e.endContainer,a=e.endOffset,s=!0;n.nodeType!==H&&(t=n.childNodes[o])&&!i(t);)n=t,o=0;if(a)for(;r.nodeType!==H;){if(!(t=r.childNodes[a-1])||i(t)){if(s&&t&&"BR"===t.nodeName){a-=1,s=!1;continue}break}r=t,a=C(r)}else for(;r.nodeType!==H&&(t=r.firstChild)&&!i(t);)r=t;e.collapsed?(e.setStart(r,a),e.setEnd(n,o)):(e.setStart(n,o),e.setEnd(r,a))},Le=function(e,t,n,o){var i,r=e.startContainer,a=e.startOffset,s=e.endContainer,d=e.endOffset,l=!0;for(t||(t=e.commonAncestorContainer),n||(n=t);!a&&r!==t&&r!==o;)i=r.parentNode,a=ce.call(i.childNodes,r),r=i;for(;;){if(l&&s.nodeType!==H&&s.childNodes[d]&&"BR"===s.childNodes[d].nodeName&&(d+=1,l=!1),s===n||s===o||d!==C(s))break;i=s.parentNode,d=ce.call(i.childNodes,s)+1,s=i}e.setStart(r,a),e.setEnd(s,d)},Ae=function(e,t){var n,o=e.startContainer;return a(o)?n=c(o,t):o!==t&&s(o)?n=o:(n=_e(o,e.startOffset),n=h(n,t)),n&&xe(e,n,!0)?n:null},Oe=function(e,t){var n,o,i=e.endContainer;if(a(i))n=c(i,t);else if(i!==t&&s(i))n=i;else{if(!(n=Se(i,e.endOffset))||!v(t,n))for(n=t;o=n.lastChild;)n=o;n=c(n,t)}return n&&xe(e,n,!0)?n:null},Be=new n(null,4|q,function(e){return e.nodeType===H?le.test(e.data):"IMG"===e.nodeName}),De=function(e,t){var n,o=e.startContainer,i=e.startOffset;if(Be.root=null,o.nodeType===H){if(i)return!1;n=o}else if(n=Se(o,i),n&&!v(t,n)&&(n=null),!n&&(n=_e(o,i),n.nodeType===H&&n.length))return!1;return Be.currentNode=n,Be.root=Ae(e,t),!Be.previousNode()},Re=function(e,t){var n,o=e.endContainer,i=e.endOffset;if(Be.root=null,o.nodeType===H){if((n=o.data.length)&&i-1||!Y&&ce.call(i,"text/plain")>-1&&ce.call(i,"text/rtf")<0))return e.preventDefault(),void(!d&&(r=a.getData("text/html"))?this.insertHTML(r,!0):((r=a.getData("text/plain"))||(r=a.getData("text/uri-list")))&&this.insertPlainText(r,!0));this._awaitingPaste=!0;var f=this._doc.body,p=this.getSelection(),g=p.startContainer,m=p.startOffset,v=p.endContainer,N=p.endOffset,C=this.createElement("DIV",{contenteditable:"true",style:"position:fixed; overflow:hidden; top:0; right:100%; width:1px; height:1px;"});f.appendChild(C),p.selectNodeContents(C),this.setSelection(p),setTimeout(function(){try{u._awaitingPaste=!1;for(var e,t,n="",o=C;C=o;)o=C.nextSibling,_(C),e=C.firstChild,e&&e===C.lastChild&&"DIV"===e.nodeName&&(C=e),n+=C.innerHTML;t=u.createRange(g,m,v,N),u.setSelection(t),n&&u.insertHTML(n,!0)}catch(e){u.didError(e)}},0)},it=function(e){for(var t=e.dataTransfer.types,n=t.length,o=!1,i=!1;n--;)switch(t[n]){case"text/plain":o=!0;break;case"text/html":i=!0;break;default:return}(i||o)&&this.saveUndoState()},rt=P.prototype,at=function(e,t,n){var o=n._doc,i=e?DOMPurify.sanitize(e,{ALLOW_UNKNOWN_PROTOCOLS:!0,WHOLE_DOCUMENT:!1,RETURN_DOM:!0,RETURN_DOM_FRAGMENT:!0}):null;return i?o.importNode(i,!0):o.createDocumentFragment()};rt.setConfig=function(e){return e=R({blockTag:"DIV",blockAttributes:null,tagAttributes:{blockquote:null,ul:null,ol:null,li:null,a:null},classNames:{colour:"colour",fontFamily:"font",fontSize:"size",highlight:"highlight"},leafNodeNames:pe,undo:{documentSizeThreshold:-1,undoLimit:-1},isInsertedHTMLSanitized:!0,isSetHTMLSanitized:!0,sanitizeToDOMFragment:"undefined"!=typeof DOMPurify&&DOMPurify.isSupported?at:null,willCutCopy:null},e,!0),e.blockTag=e.blockTag.toUpperCase(),this._config=e,this},rt.createElement=function(e,t,n){return T(this._doc,e,t,n)},rt.createDefaultBlock=function(e){var t=this._config;return E(this.createElement(t.blockTag,t.blockAttributes,e),this._root)},rt.didError=function(e){console.log(e)},rt.getDocument=function(){return this._doc},rt.getRoot=function(){return this._root},rt.modifyDocument=function(e){var t=this._mutation;t&&(t.takeRecords().length&&this._docWasChanged(),t.disconnect()),this._ignoreAllChanges=!0,e(),this._ignoreAllChanges=!1,t&&(t.observe(this._root,{childList:!0,attributes:!0,characterData:!0,subtree:!0}),this._ignoreChange=!1)};var st={pathChange:1,select:1,input:1,undoStateChange:1};rt.fireEvent=function(e,t){var n,o,i,r=this._events[e];if(/^(?:focus|blur)/.test(e))if(n=this._root===this._doc.activeElement,"focus"===e){if(!n||this._isFocused)return this;this._isFocused=!0}else{if(n||!this._isFocused)return this;this._isFocused=!1}if(r)for(t||(t={}),t.type!==e&&(t.type=e),r=r.slice(),o=r.length;o--;){i=r[o];try{i.handleEvent?i.handleEvent(t):i.call(this,t)}catch(t){t.details="Squire: fireEvent error. Event type: "+e,this.didError(t)}}return this},rt.destroy=function(){var e,t=this._events;for(e in t)this.removeEventListener(e);this._mutation&&this._mutation.disconnect(),delete this._root.__squire__,this._undoIndex=-1,this._undoStack=[],this._undoStackLength=0},rt.handleEvent=function(e){this.fireEvent(e.type,e)},rt.addEventListener=function(e,t){var n=this._events[e],o=this._root;return t?(n||(n=this._events[e]=[],st[e]||("selectionchange"===e&&(o=this._doc),o.addEventListener(e,this,!0))),n.push(t),this):(this.didError({name:"Squire: addEventListener with null or undefined fn",message:"Event type: "+e}),this)},rt.removeEventListener=function(e,t){var n,o=this._events[e],i=this._root;if(o){if(t)for(n=o.length;n--;)o[n]===t&&o.splice(n,1);else o.length=0;o.length||(delete this._events[e],st[e]||("selectionchange"===e&&(i=this._doc),i.removeEventListener(e,this,!0)))}return this},rt.createRange=function(e,t,n,o){if(e instanceof this._win.Range)return e.cloneRange();var i=this._doc.createRange();return i.setStart(e,t),n?i.setEnd(n,o):i.setEnd(e,t),i},rt.getCursorPosition=function(e){if(!e&&!(e=this.getSelection())||!e.getBoundingClientRect)return null;var t,n,o=e.getBoundingClientRect();return o&&!o.top&&(this._ignoreChange=!0,t=this._doc.createElement("SPAN"),t.textContent=K,ye(e,t),o=t.getBoundingClientRect(),n=t.parentNode,n.removeChild(t),L(n,e)),o},rt._moveCursorTo=function(e){var t=this._root,n=this.createRange(t,e?0:t.childNodes.length);return ke(n),this.setSelection(n),this},rt.moveCursorToStart=function(){return this._moveCursorTo(!0)},rt.moveCursorToEnd=function(){return this._moveCursorTo(!1)};var dt=function(e){return e._win.getSelection()||null};rt.setSelection=function(e){if(e)if(this._lastSelection=e,this._isFocused)if(j&&!this._restoreSelection)U.call(this),this.blur(),this.focus();else{Q&&this._win.focus();var t=dt(this);t&&(t.removeAllRanges(),t.addRange(e))}else U.call(this);return this},rt.getSelection=function(){var e,t,n,o,r=dt(this),a=this._root;return this._isFocused&&r&&r.rangeCount&&(e=r.getRangeAt(0).cloneRange(),t=e.startContainer,n=e.endContainer,t&&i(t)&&e.setStartBefore(t),n&&i(n)&&e.setEndBefore(n)),e&&v(a,e.commonAncestorContainer)?this._lastSelection=e:(e=this._lastSelection,o=e.commonAncestorContainer,v(o.ownerDocument,o)||(e=null)),e||(e=this.createRange(a.firstChild,0)),e},rt.getSelectedText=function(){var e=this.getSelection();if(!e||e.collapsed)return"";var t,o=new n(e.commonAncestorContainer,4|q,function(t){return xe(e,t,!0)}),i=e.startContainer,r=e.endContainer,s=o.currentNode=i,d="",l=!1;for(o.filter(s)||(s=o.nextNode());s;)s.nodeType===H?(t=s.data)&&/\S/.test(t)&&(s===r&&(t=t.slice(0,e.endOffset)),s===i&&(t=t.slice(e.startOffset)),d+=t,l=!0):("BR"===s.nodeName||l&&!a(s))&&(d+="\n",l=!1),s=o.nextNode();return d},rt.getPath=function(){return this._path};var lt=function(e,t){for(var o,i,r,s=new n(e,4);i=s.nextNode();)for(;(r=i.data.indexOf(K))>-1&&(!t||i.parentNode!==t);){if(1===i.length){do{o=i.parentNode,o.removeChild(i),i=o,s.currentNode=o}while(a(i)&&!C(i));break}i.deleteData(r,1)}};rt._didAddZWS=function(){this._hasZWS=!0},rt._removeZWS=function(){this._hasZWS&&(lt(this._root),this._hasZWS=!1)},rt._updatePath=function(e,t){if(e){var n,o=e.startContainer,i=e.endContainer;(t||o!==this._lastAnchorNode||i!==this._lastFocusNode)&&(this._lastAnchorNode=o,this._lastFocusNode=i,n=o&&i?o===i?N(i,this._root,this._config):"(selection)":"",this._path!==n&&(this._path=n,this.fireEvent("pathChange",{path:n}))),this.fireEvent(e.collapsed?"cursor":"select",{range:e})}},rt._updatePathOnEvent=function(e){var t=this;t._isFocused&&!t._willUpdatePath&&(t._willUpdatePath=!0,setTimeout(function(){t._willUpdatePath=!1,t._updatePath(t.getSelection())},0))}, +rt.focus=function(){return this._root.focus(),ne&&this.fireEvent("focus"),this},rt.blur=function(){return this._root.blur(),ne&&this.fireEvent("blur"),this};var ct="squire-selection-end";rt._saveRangeToBookmark=function(e){var t,n=this.createElement("INPUT",{id:"squire-selection-start",type:"hidden"}),o=this.createElement("INPUT",{id:ct,type:"hidden"});ye(e,n),e.collapse(!1),ye(e,o),2&n.compareDocumentPosition(o)&&(n.id=ct,o.id="squire-selection-start",t=n,n=o,o=t),e.setStartAfter(n),e.setEndBefore(o)},rt._getRangeAndRemoveBookmark=function(e){var t=this._root,n=t.querySelector("#squire-selection-start"),o=t.querySelector("#"+ct);if(n&&o){var i=n.parentNode,r=o.parentNode,a=ce.call(i.childNodes,n),s=ce.call(r.childNodes,o);i===r&&(s-=1),_(n),_(o),e||(e=this._doc.createRange()),e.setStart(i,a),e.setEnd(r,s),L(i,e),i!==r&&L(r,e),e.collapsed&&(i=e.startContainer,i.nodeType===H&&(r=i.childNodes[e.startOffset],r&&r.nodeType===H||(r=i.childNodes[e.startOffset-1]),r&&r.nodeType===H&&(e.setStart(r,0),e.collapse(!0))))}return e||null},rt._keyUpDetectChange=function(e){var t=e.keyCode;e.ctrlKey||e.metaKey||e.altKey||!(t<16||t>20)||!(t<33||t>45)||this._docWasChanged()},rt._docWasChanged=function(){if(de&&(Ce=new WeakMap),!this._ignoreAllChanges){if(se&&this._ignoreChange)return void(this._ignoreChange=!1);this._isInUndoState&&(this._isInUndoState=!1,this.fireEvent("undoStateChange",{canUndo:!0,canRedo:!1})),this.fireEvent("input")}},rt._recordUndoState=function(e,t){if(!this._isInUndoState||t){var n,o=this._undoIndex,i=this._undoStack,r=this._config.undo,a=r.documentSizeThreshold,s=r.undoLimit;t||(o+=1),o-1&&2*n.length>a&&s>-1&&o>s&&(i.splice(0,o-s),o=s,this._undoStackLength=s),i[o]=n,this._undoIndex=o,this._undoStackLength+=1,this._isInUndoState=!0}},rt.saveUndoState=function(e){return e===t&&(e=this.getSelection()),this._recordUndoState(e,this._isInUndoState),this._getRangeAndRemoveBookmark(e),this},rt.undo=function(){if(0!==this._undoIndex||!this._isInUndoState){this._recordUndoState(this.getSelection(),!1),this._undoIndex-=1,this._setHTML(this._undoStack[this._undoIndex]);var e=this._getRangeAndRemoveBookmark();e&&this.setSelection(e),this._isInUndoState=!0,this.fireEvent("undoStateChange",{canUndo:0!==this._undoIndex,canRedo:!0}),this.fireEvent("input")}return this},rt.redo=function(){var e=this._undoIndex,t=this._undoStackLength;if(e+1c&&h.splitText(c),h===s&&l&&(h=h.splitText(l),d===s&&(d=h,c-=l),s=h,l=0),i=this.createElement(e,t),S(h,i),i.appendChild(h))}while(r.nextNode());d.nodeType!==H&&(h.nodeType===H?(d=h,c=h.length):(d=h.parentNode,c=1)),o=this.createRange(s,l,d,c)}return o},rt._removeFormat=function(e,t,n,o){this._saveRangeToBookmark(n);var i,r=this._doc;n.collapsed&&(re?(i=r.createTextNode(K),this._didAddZWS()):i=r.createTextNode(""),ye(n,i));for(var s=n.commonAncestorContainer;a(s);)s=s.parentNode;var d=n.startContainer,l=n.startOffset,c=n.endContainer,h=n.endOffset,u=[],f=function(e,t){if(!xe(n,e,!1)){var o,i,r=e.nodeType===H;if(!xe(n,e,!0))return void("INPUT"===e.nodeName||r&&!e.data||u.push([t,e]));if(r)e===c&&h!==e.length&&u.push([t,e.splitText(h)]),e===d&&l&&(e.splitText(l),u.push([t,e]));else for(o=e.firstChild;o;o=i)i=o.nextSibling,f(o,t)}},g=Array.prototype.filter.call(s.getElementsByTagName(e),function(o){return xe(n,o,!0)&&p(o,e,t)});return o||g.forEach(function(e){f(e,e)}),u.forEach(function(e){var t=e[0].cloneNode(!1),n=e[1];S(n,t),t.appendChild(n)}),g.forEach(function(e){S(e,y(e))}),this._getRangeAndRemoveBookmark(n),i&&n.collapse(!1),L(s,n),n},rt.changeFormat=function(e,t,n,o){return n||(n=this.getSelection())?(this.saveUndoState(n),t&&(n=this._removeFormat(t.tag.toUpperCase(),t.attributes||{},n,o)),e&&(n=this._addFormat(e.tag.toUpperCase(),e.attributes||{},n)),this.setSelection(n),this._updatePath(n,!0),se||this._docWasChanged(),this):this};var ht={DT:"DD",DD:"DT",LI:"LI",PRE:"PRE"},ut=function(e,t,n,o){var i=ht[t.nodeName],r=null,a=x(n,o,t.parentNode,e._root),s=e._config;return i||(i=s.blockTag,r=s.blockAttributes),p(a,i,r)||(t=T(a.ownerDocument,i,r),a.dir&&(t.dir=a.dir),S(a,t),t.appendChild(y(a)),a=t),a};rt.forEachBlock=function(e,t,n){if(!n&&!(n=this.getSelection()))return this;t&&this.saveUndoState(n);var o=this._root,i=Ae(n,o),r=Oe(n,o);if(i&&r)do{if(e(i)||i===r)break}while(i=h(i,o));return t&&(this.setSelection(n),this._updatePath(n,!0),se||this._docWasChanged()),this},rt.modifyBlocks=function(e,t){if(!t&&!(t=this.getSelection()))return this;this._recordUndoState(t,this._isInUndoState);var n,o=this._root;return Pe(t,o),Le(t,o,o,o),n=Te(t,o,o),ye(t,e.call(this,n)),t.endOffset]+|\([^\s()<>]+\))+(?:\((?:[^\s()<>]+|(?:\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))|([\w\-.%+]+@(?:[\w\-]+\.)+[A-Z]{2,}\b)(?:\?[^&?\s]+=[^&?\s]+(?:&[^&?\s]+=[^&?\s]+)*)?/i;var St=function(e,t,o){var i,r,a,s,d,l,c,h=e.ownerDocument,u=new n(e,4,function(e){return!g(e,t,"A")}),f=o.linkRegExp,p=o._config.tagAttributes.a;if(f)for(;i=u.nextNode();)for(r=i.data,a=i.parentNode;s=f.exec(r);)d=s.index,l=d+s[0].length,d&&(c=h.createTextNode(r.slice(0,d)),a.insertBefore(c,i)),c=o.createElement("A",R({href:s[1]?/^(?:ht|f)tps?:/i.test(s[1])?s[1]:"http://"+s[1]:"mailto:"+s[0]},p,!1)),c.textContent=r.slice(d,l),a.insertBefore(c,i),i.data=r=r.slice(l)};rt.insertHTML=function(e,t){var n,o,i,r,a,s,d,l=this._config,c=l.isInsertedHTMLSanitized?l.sanitizeToDOMFragment:null,u=this.getSelection(),f=this._doc;"function"==typeof c?r=c(e,t,this):(t&&(n=e.indexOf("\x3c!--StartFragment--\x3e"),o=e.lastIndexOf("\x3c!--EndFragment--\x3e"),n>-1&&o>-1&&(e=e.slice(n+20,o))),/<\/td>((?!<\/tr>)[\s\S])*$/i.test(e)&&(e=""+e+""),/<\/tr>((?!<\/table>)[\s\S])*$/i.test(e)&&(e=""+e+"
"),i=this.createElement("DIV"),i.innerHTML=e,r=f.createDocumentFragment(),r.appendChild(y(i))),this.saveUndoState(u);try{for(a=this._root,s=r,d={fragment:r,preventDefault:function(){this.defaultPrevented=!0},defaultPrevented:!1},St(r,r,this),$e(r,l),Je(r,a,!1),Ve(r),r.normalize();s=h(s,r);)E(s,a);t&&this.fireEvent("willPaste",d),d.defaultPrevented||(be(u,d.fragment,a),se||this._docWasChanged(),u.collapse(!1),this._ensureBottomLine()),this.setSelection(u),this._updatePath(u,!0),t&&this.focus()}catch(e){this.didError(e)}return this};var yt=function(e){return e.split("&").join("&").split("<").join("<").split(">").join(">").split('"').join(""")};rt.insertPlainText=function(e,t){var n=this.getSelection();if(n.collapsed&&g(n.startContainer,this._root,"PRE")){var o,i,r=n.startContainer,a=n.startOffset;return r&&r.nodeType===H||(o=this._doc.createTextNode(""),r.insertBefore(o,r.childNodes[a]),r=o,a=0),i={text:e,preventDefault:function(){this.defaultPrevented=!0},defaultPrevented:!1},t&&this.fireEvent("willPaste",i),i.defaultPrevented||(e=i.text,r.insertData(a,e),n.setStart(r,a+e.length),n.collapse(!0)),this.setSelection(n),this}var s,d,l,c,h=e.split("\n"),u=this._config,f=u.blockTag,p=u.blockAttributes,m="",v="<"+f;for(s in p)v+=" "+s+'="'+yt(p[s])+'"';for(v+=">",d=0,l=h.length;d")+m;return this.insertHTML(h.join(""),t)};var Tt=function(e,t,n){return function(){return this[e](t,n),this.focus()}};rt.addStyles=function(e){if(e){var t=this._doc.documentElement.firstChild,n=this.createElement("STYLE",{type:"text/css"});n.appendChild(this._doc.createTextNode(e)),t.appendChild(n)}return this},rt.bold=Tt("changeFormat",{tag:"B"}),rt.italic=Tt("changeFormat",{tag:"I"}),rt.underline=Tt("changeFormat",{tag:"U"}),rt.strikethrough=Tt("changeFormat",{tag:"S"}),rt.subscript=Tt("changeFormat",{tag:"SUB"},{tag:"SUP"}),rt.superscript=Tt("changeFormat",{tag:"SUP"},{tag:"SUB"}),rt.removeBold=Tt("changeFormat",null,{tag:"B"}),rt.removeItalic=Tt("changeFormat",null,{tag:"I"}),rt.removeUnderline=Tt("changeFormat",null,{tag:"U"}),rt.removeStrikethrough=Tt("changeFormat",null,{tag:"S"}),rt.removeSubscript=Tt("changeFormat",null,{tag:"SUB"}),rt.removeSuperscript=Tt("changeFormat",null,{tag:"SUP"}),rt.makeLink=function(e,t){var n=this.getSelection();if(n.collapsed){var o=e.indexOf(":")+1;if(o)for(;"/"===e[o];)o+=1;ye(n,this._doc.createTextNode(e.slice(o)))}return t=R(R({href:e},t,!0),this._config.tagAttributes.a,!1),this.changeFormat({tag:"A",attributes:t},{tag:"A"},n),this.focus()},rt.removeLink=function(){return this.changeFormat(null,{tag:"A"},this.getSelection(),!0),this.focus()},rt.setFontFace=function(e){var t=this._config.classNames.fontFamily;return this.changeFormat(e?{tag:"SPAN",attributes:{class:t,style:"font-family: "+e+", sans-serif;"}}:null,{tag:"SPAN",attributes:{class:t}}),this.focus()},rt.setFontSize=function(e){var t=this._config.classNames.fontSize;return this.changeFormat(e?{tag:"SPAN",attributes:{class:t,style:"font-size: "+("number"==typeof e?e+"px":e)}}:null,{tag:"SPAN",attributes:{class:t}}),this.focus()},rt.setTextColour=function(e){var t=this._config.classNames.colour;return this.changeFormat(e?{tag:"SPAN",attributes:{class:t,style:"color:"+e}}:null,{tag:"SPAN",attributes:{class:t}}),this.focus()},rt.setHighlightColour=function(e){var t=this._config.classNames.highlight;return this.changeFormat(e?{tag:"SPAN",attributes:{class:t,style:"background-color:"+e}}:e,{tag:"SPAN",attributes:{class:t}}),this.focus()},rt.setTextAlignment=function(e){return this.forEachBlock(function(t){var n=t.className.split(/\s+/).filter(function(e){return!!e&&!/^align/.test(e)}).join(" ");e?(t.className=n+" align-"+e,t.style.textAlign=e):(t.className=n,t.style.textAlign="")},!0),this.focus()},rt.setTextDirection=function(e){return this.forEachBlock(function(t){e?t.dir=e:t.removeAttribute("dir")},!0),this.focus()};var Et=function(e){for(var t,o=this._root,i=this._doc,r=i.createDocumentFragment(),a=l(e,o);t=a.nextNode();){var s,d,c=t.querySelectorAll("BR"),h=[],u=c.length;for(s=0;s-1;)a.appendChild(d.createTextNode(r.slice(0,s))),a.appendChild(d.createElement("BR")),r=r.slice(s+1);i.parentNode.insertBefore(a,i),i.data=r}b(t,l),S(t,y(t))}return e};rt.code=function(){var e=this.getSelection();return e.collapsed||d(e.commonAncestorContainer)?this.modifyBlocks(Et,e):this.changeFormat({tag:"CODE",attributes:this._config.tagAttributes.code},null,e),this.focus()},rt.removeCode=function(){var e=this.getSelection();return g(e.commonAncestorContainer,this._root,"PRE")?this.modifyBlocks(bt,e):this.changeFormat(null,{tag:"CODE"},e),this.focus()},rt.toggleCode=function(){return this.hasFormat("PRE")||this.hasFormat("CODE")?this.removeCode():this.code(),this},rt.removeAllFormatting=function(e){if(!e&&!(e=this.getSelection())||e.collapsed)return this;for(var t=this._root,n=e.commonAncestorContainer;n&&!s(n);)n=n.parentNode;if(n||(Pe(e,t),n=t),n.nodeType===H)return this;this.saveUndoState(e),Le(e,n,n,t);for(var o,i,r=n.ownerDocument,a=e.startContainer,d=e.startOffset,l=e.endContainer,c=e.endOffset,h=r.createDocumentFragment(),u=r.createDocumentFragment(),f=x(l,c,n,t),p=x(a,d,n,t);p!==f;)o=p.nextSibling,h.appendChild(p),p=o;return F(this,h,u),u.normalize(),p=u.firstChild,o=u.lastChild,i=n.childNodes,p?(n.insertBefore(u,f),d=ce.call(i,p),c=ce.call(i,o)+1):(d=ce.call(i,f),c=d),e.setStart(n,d),e.setEnd(n,c),L(n,e),ke(e),this.setSelection(e),this._updatePath(e,!0),this.focus()},rt.increaseQuoteLevel=Tt("modifyBlocks",ft),rt.decreaseQuoteLevel=Tt("modifyBlocks",pt),rt.makeUnorderedList=Tt("modifyBlocks",vt),rt.makeOrderedList=Tt("modifyBlocks",Nt),rt.removeList=Tt("modifyBlocks",Ct),P.isInline=a,P.isBlock=s,P.isContainer=d,P.getBlockWalker=l,P.getPreviousBlock=c,P.getNextBlock=h,P.areAlike=f,P.hasTagAttributes=p,P.getNearest=g,P.isOrContains=v,P.detach=_,P.replaceWith=S,P.empty=y,P.getNodeBefore=_e,P.getNodeAfter=Se,P.insertNodeInRange=ye,P.extractContentsOfRange=Te,P.deleteContentsOfRange=Ee,P.insertTreeFragmentIntoRange=be,P.isNodeContainedInRange=xe,P.moveRangeBoundariesDownTree=ke,P.moveRangeBoundariesUpTree=Le,P.getStartBlockOfRange=Ae,P.getEndBlockOfRange=Oe,P.contentWalker=Be,P.rangeDoesStartAtBlockBoundary=De,P.rangeDoesEndAtBlockBoundary=Re,P.expandRangeToBlockBoundaries=Pe,P.onPaste=ot,P.addLinks=St,P.splitBlock=ut,P.startSelectionId="squire-selection-start",P.endSelectionId=ct,"object"==typeof exports?module.exports=P:"function"==typeof define&&define.amd?define(function(){return P}):(G.Squire=P,top!==G&&"true"===e.documentElement.getAttribute("data-squireinit")&&(G.editor=new P(e),G.onEditorLoad&&(G.onEditorLoad(G.editor),G.onEditorLoad=null)))}(document); \ No newline at end of file diff --git a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock index 6f0078f2c9..13a712e13c 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock +++ b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock @@ -2213,9 +2213,9 @@ pumpify@^1.3.5: inherits "^2.0.3" pump "^2.0.0" -"raphael@git+https://github.com/nhn/raphael.git#2.2.0-c": +"raphael@https://github.com/nhn/raphael.git#2.2.0-c": version "2.2.0-c" - resolved "git+https://github.com/nhn/raphael.git#78a6ed3ec269f33b6457b0ec66f8c3d1f2ed70e0" + resolved "https://github.com/nhn/raphael.git#78a6ed3ec269f33b6457b0ec66f8c3d1f2ed70e0" dependencies: eve "git://github.com/adobe-webplatform/eve.git#eef80ed" diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs index be51085f86..d798814caa 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs +++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs @@ -180,14 +180,14 @@ namespace Volo.Blogging.Posts return url; } - private async Task SaveTags(List newTags, Post post) + private async Task SaveTags(ICollection newTags, Post post) { await RemoveOldTags(newTags, post); await AddNewTags(newTags, post); } - private async Task RemoveOldTags(List newTags, Post post) + private async Task RemoveOldTags(ICollection newTags, Post post) { foreach (var oldTag in post.Tags) { @@ -209,7 +209,7 @@ namespace Volo.Blogging.Posts } } - private async Task AddNewTags(List newTags, Post post) + private async Task AddNewTags(IEnumerable newTags, Post post) { var tags = await _tagRepository.GetListAsync(post.BlogId); @@ -219,7 +219,7 @@ namespace Volo.Blogging.Posts if (tag == null) { - tag = await _tagRepository.InsertAsync(new Tag(post.BlogId, newTag, 1)); + tag = await _tagRepository.InsertAsync(new Tag(GuidGenerator.Create(), post.BlogId, newTag, 1)); } else { @@ -249,7 +249,7 @@ namespace Volo.Blogging.Posts return new List(tags.Split(",").Select(t => t.Trim())); } - private Task> FilterPostsByTag(List allPostDtos, Tag tag) + private Task> FilterPostsByTag(IEnumerable allPostDtos, Tag tag) { var filteredPostDtos = allPostDtos.Where(p => p.Tags?.Any(t => t.Id == tag.Id) ?? false).ToList(); diff --git a/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Tagging/Tag.cs b/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Tagging/Tag.cs index 28d14d885d..fb8f97a4dc 100644 --- a/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Tagging/Tag.cs +++ b/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Tagging/Tag.cs @@ -20,8 +20,9 @@ namespace Volo.Blogging.Tagging } - public Tag(Guid blogId, [NotNull] string name, int usageCount = 0, string description = null) + public Tag(Guid id, Guid blogId, [NotNull] string name, int usageCount = 0, string description = null) { + Id = id; Name = Check.NotNullOrWhiteSpace(name, nameof(name)); BlogId = blogId; Description = description; diff --git a/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/Tagging/Tag_Tests.cs b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/Tagging/Tag_Tests.cs index a4368a6341..25ded93f72 100644 --- a/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/Tagging/Tag_Tests.cs +++ b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo/Abp/Blogging/Tagging/Tag_Tests.cs @@ -14,7 +14,7 @@ namespace Volo.Blogging [InlineData("bbb")] public void SetName(string name) { - var tag = new Tag(Guid.NewGuid(), "abp", 0, "abp tag"); + var tag = new Tag(Guid.NewGuid(), Guid.NewGuid(), "abp", 0, "abp tag"); tag.SetName(name); tag.Name.ShouldBe(name); } @@ -25,7 +25,7 @@ namespace Volo.Blogging [InlineData(3)] public void IncreaseUsageCount(int number) { - var tag = new Tag(Guid.NewGuid(), "abp", 0, "abp tag"); + var tag = new Tag(Guid.NewGuid(), Guid.NewGuid(), "abp", 0, "abp tag"); tag.IncreaseUsageCount(number); tag.UsageCount.ShouldBe(number); } @@ -36,7 +36,7 @@ namespace Volo.Blogging [InlineData(3)] public void DecreaseUsageCount(int number) { - var tag = new Tag(Guid.NewGuid(), "abp", 10, "abp tag"); + var tag = new Tag(Guid.NewGuid(), Guid.NewGuid(), "abp", 10, "abp tag"); tag.DecreaseUsageCount(number); tag.UsageCount.ShouldBe(10 - number); } @@ -44,7 +44,7 @@ namespace Volo.Blogging [Fact] public void DecreaseUsageCount_Should_Greater_ThanOrEqual_Zero() { - var tag = new Tag(Guid.NewGuid(), "abp", 10, "abp tag"); + var tag = new Tag(Guid.NewGuid(), Guid.NewGuid(), "abp", 10, "abp tag"); tag.DecreaseUsageCount(100); tag.UsageCount.ShouldBe(0); } @@ -54,7 +54,7 @@ namespace Volo.Blogging [InlineData("bbb")] public void SetDescription(string description) { - var tag = new Tag(Guid.NewGuid(), "abp", 0, "abp tag"); + var tag = new Tag(Guid.NewGuid(), Guid.NewGuid(), "abp", 0, "abp tag"); tag.SetDescription(description); tag.Description.ShouldBe(description); } diff --git a/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/BloggingTestDataBuilder.cs b/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/BloggingTestDataBuilder.cs index 67d8049a06..cd2168d9df 100644 --- a/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/BloggingTestDataBuilder.cs +++ b/modules/blogging/test/Volo.Blogging.TestBase/Volo/Blogging/BloggingTestDataBuilder.cs @@ -43,8 +43,8 @@ namespace Volo.Blogging await _postRepository.InsertAsync(new Post(_testData.Blog1Post2Id, _testData.Blog1Id, "title2", "coverImage2", "url2")); await _commentRepository.InsertAsync(new Comment(_testData.Blog1Post1Comment1Id,_testData.Blog1Post1Id,null,"text")); await _commentRepository.InsertAsync(new Comment(_testData.Blog1Post1Comment2Id, _testData.Blog1Post1Id, _testData.Blog1Post1Comment1Id, "text")); - await _tagRepository.InsertAsync(new Tag(_testData.Blog1Id, _testData.Tag1Name, 10)); - await _tagRepository.InsertAsync(new Tag(_testData.Blog1Id, _testData.Tag2Name)); + await _tagRepository.InsertAsync(new Tag(Guid.NewGuid(), _testData.Blog1Id, _testData.Tag1Name, 10)); + await _tagRepository.InsertAsync(new Tag(Guid.NewGuid(), _testData.Blog1Id, _testData.Tag2Name)); } } From fc45935d1bbfc3ba06fed23724e466b29c3f80f4 Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Thu, 2 Jan 2020 14:05:22 +0300 Subject: [PATCH 022/411] Added Entity-Framework-Core-SQLite documentation Added SQLite documentation and updated docs-nav. --- docs/en/Entity-Framework-Core-SQLite.md | 41 +++++++++++++++++++++++++ docs/en/docs-nav.json | 4 +++ 2 files changed, 45 insertions(+) create mode 100644 docs/en/Entity-Framework-Core-SQLite.md diff --git a/docs/en/Entity-Framework-Core-SQLite.md b/docs/en/Entity-Framework-Core-SQLite.md new file mode 100644 index 0000000000..62a8ef815d --- /dev/null +++ b/docs/en/Entity-Framework-Core-SQLite.md @@ -0,0 +1,41 @@ +# Switch to EF Core SQLite Provider + +This document explains how to switch to the **SQLite** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured. + +## Replace the Volo.Abp.EntityFrameworkCore.SqlServer Package + +`.EntityFrameworkCore` project in the solution depends on the [Volo.Abp.EntityFrameworkCore.SqlServer](https://www.nuget.org/packages/Volo.Abp.EntityFrameworkCore.SqlServer) NuGet package. Remove this package and add the same version of the [Volo.Abp.EntityFrameworkCore.Sqlite](https://www.nuget.org/packages/Volo.Abp.EntityFrameworkCore.Sqlite) package. + +## Replace the Module Dependency + +Find ***YourProjectName*EntityFrameworkCoreModule** class inside the `.EntityFrameworkCore` project, remove `typeof(AbpEntityFrameworkCoreSqlServerModule)` from the `DependsOn` attribute, add `typeof(AbpEntityFrameworkCoreSqliteModule)` (also replace `using Volo.Abp.EntityFrameworkCore.SqlServer;` with `using Volo.Abp.EntityFrameworkCore.Sqlite;`). + +## UseSqlite() + +Find `UseSqlServer()` calls in your solution, replace with `UseSqlite()`. Check the following files: + +* *YourProjectName*EntityFrameworkCoreModule.cs inside the `.EntityFrameworkCore` project. +* *YourProjectName*MigrationsDbContextFactory.cs inside the `.EntityFrameworkCore.DbMigrations` project. + +> Depending on your solution structure, you may find more code files need to be changed. + +## Change the Connection Strings + +SQLite connection strings are different than SQL Server connection strings. So, check all `appsettings.json` files in your solution and replace the connection strings inside them. See the [connectionstrings.com]( https://www.connectionstrings.com/sqlite/ ) for details of SQLite connection string options. + +You typically will change the `appsettings.json` inside the `.DbMigrator` and `.Web` projects, but it depends on your solution structure. + +## Re-Generate the Migrations + +The startup template uses [Entity Framework Core's Code First Migrations](https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/). EF Core Migrations depend on the selected DBMS provider. So, changing the DBMS provider will cause the migration fails. + +* Delete the Migrations folder under the `.EntityFrameworkCore.DbMigrations` project and re-build the solution. +* Run `Add-Migration "Initial"` on the Package Manager Console (select the `.DbMigrator` (or `.Web`) project as the startup project in the Solution Explorer and select the `.EntityFrameworkCore.DbMigrations` project as the default project in the Package Manager Console). + +This will create a database migration with all database objects (tables) configured. + +Run the `.DbMigrator` project to create the database and seed the initial data. + +## Run the Application + +It is ready. Just run the application and enjoy coding. \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index e7370a5d05..a8943e2f38 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -277,6 +277,10 @@ { "text": "Switch to PostgreSQL", "path": "Entity-Framework-Core-PostgreSQL.md" + }, + { + "text": "Switch to SQLite", + "path": "Entity-Framework-Core-SQLite.md" } ] }, From 4b5c6a28b75d2ceb88888ee49f33c5b22ac47700 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 2 Jan 2020 14:13:46 +0300 Subject: [PATCH 023/411] refactor(theme-shared): change modal backdrop style --- .../packages/theme-shared/src/lib/constants/styles.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/constants/styles.ts b/npm/ng-packs/packages/theme-shared/src/lib/constants/styles.ts index 6e88c18530..30185ec6c6 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/constants/styles.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/constants/styles.ts @@ -45,13 +45,7 @@ export default ` } .modal-backdrop { - position: fixed; - top: 0; - left: 0; - width: 100vw; - height: 100vh; background-color: rgba(0, 0, 0, 0.6); - z-index: 1040; } .modal::-webkit-scrollbar { From 525387654af80129f0836af8ca665b39c5e028ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 2 Jan 2020 18:22:18 +0300 Subject: [PATCH 024/411] Fix tabs --- docs/en/docs-nav.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index a8943e2f38..9943c3b6af 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -278,7 +278,7 @@ "text": "Switch to PostgreSQL", "path": "Entity-Framework-Core-PostgreSQL.md" }, - { + { "text": "Switch to SQLite", "path": "Entity-Framework-Core-SQLite.md" } From df7c5f61cb4a72df67f05132acf8b7ac7edebba4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 2 Jan 2020 18:51:58 +0300 Subject: [PATCH 025/411] Added DeviceFlowCodes and related classes. --- .../Volo/Abp/IdentityServer/Clients/Client.cs | 2 +- .../IdentityServer/Devices/DeviceFlowCodes.cs | 31 +++++++++++++++++++ .../Devices/IDeviceFlowCodesRepository.cs | 10 ++++++ .../Devices/DeviceFlowCodesRepository.cs | 17 ++++++++++ ...IdentityServerEntityFrameworkCoreModule.cs | 2 ++ .../IIdentityServerDbContext.cs | 3 ++ .../IdentityServerDbContext.cs | 4 +++ ...yServerDbContextModelCreatingExtensions.cs | 19 ++++++++++++ .../AbpIdentityServerMongoDbContext.cs | 3 ++ ...pIdentityServerMongoDbContextExtensions.cs | 6 ++++ .../MongoDB/AbpIdentityServerMongoDbModule.cs | 2 ++ .../IAbpIdentityServerMongoDbContext.cs | 3 ++ .../MongoDB/MongoDeviceFlowCodesRepository.cs | 16 ++++++++++ 13 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowCodes.cs create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/IDeviceFlowCodesRepository.cs create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/Client.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/Client.cs index 031aa86bfc..b7a53ad66f 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/Client.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/Client.cs @@ -108,10 +108,10 @@ namespace Volo.Abp.IdentityServer.Clients } public Client(Guid id, [NotNull] string clientId) + : base(id) { Check.NotNull(clientId, nameof(clientId)); - Id = id; ClientId = clientId; //TODO: Replace magics with constants? diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowCodes.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowCodes.cs new file mode 100644 index 0000000000..8814519cd4 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowCodes.cs @@ -0,0 +1,31 @@ +using System; +using Volo.Abp.Domain.Entities.Auditing; + +namespace Volo.Abp.IdentityServer.Devices +{ + public class DeviceFlowCodes : CreationAuditedAggregateRoot + { + public virtual string DeviceCode { get; set; } + + public virtual string UserCode { get; set; } + + public virtual string SubjectId { get; set; } + + public virtual string ClientId { get; set; } + + public virtual DateTime? Expiration { get; set; } + + public virtual string Data { get; set; } + + private DeviceFlowCodes() + { + + } + + public DeviceFlowCodes(Guid id) + : base(id) + { + + } + } +} \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/IDeviceFlowCodesRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/IDeviceFlowCodesRepository.cs new file mode 100644 index 0000000000..7dbbcaff69 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/IDeviceFlowCodesRepository.cs @@ -0,0 +1,10 @@ +using System; +using Volo.Abp.Domain.Repositories; + +namespace Volo.Abp.IdentityServer.Devices +{ + public interface IDeviceFlowCodesRepository : IBasicRepository + { + + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs new file mode 100644 index 0000000000..f8882d743d --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs @@ -0,0 +1,17 @@ +using System; +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.IdentityServer.EntityFrameworkCore; + +namespace Volo.Abp.IdentityServer.Devices +{ + public class DeviceFlowCodesRepository : EfCoreRepository, + IDeviceFlowCodesRepository + { + public DeviceFlowCodesRepository(IDbContextProvider dbContextProvider) + : base(dbContextProvider) + { + + } + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/AbpIdentityServerEntityFrameworkCoreModule.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/AbpIdentityServerEntityFrameworkCoreModule.cs index 74a4ce754f..a932cd3351 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/AbpIdentityServerEntityFrameworkCoreModule.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/AbpIdentityServerEntityFrameworkCoreModule.cs @@ -2,6 +2,7 @@ using Volo.Abp.EntityFrameworkCore; using Volo.Abp.IdentityServer.ApiResources; using Volo.Abp.IdentityServer.Clients; +using Volo.Abp.IdentityServer.Devices; using Volo.Abp.IdentityServer.Grants; using Volo.Abp.IdentityServer.IdentityResources; using Volo.Abp.Modularity; @@ -34,6 +35,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore options.AddRepository(); options.AddRepository(); options.AddRepository(); + options.AddRepository(); }); } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IIdentityServerDbContext.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IIdentityServerDbContext.cs index 3c7f425dc9..52ba7c8e6c 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IIdentityServerDbContext.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IIdentityServerDbContext.cs @@ -3,6 +3,7 @@ using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.IdentityServer.ApiResources; using Volo.Abp.IdentityServer.Clients; +using Volo.Abp.IdentityServer.Devices; using Volo.Abp.IdentityServer.Grants; using Volo.Abp.IdentityServer.IdentityResources; @@ -46,5 +47,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore DbSet ClientProperties { get; set; } DbSet PersistedGrants { get; set; } + + DbSet DeviceFlowCodes { get; set; } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContext.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContext.cs index 800aa8b8be..f63cd6bf1c 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContext.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContext.cs @@ -3,6 +3,7 @@ using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.IdentityServer.ApiResources; using Volo.Abp.IdentityServer.Clients; +using Volo.Abp.IdentityServer.Devices; using Volo.Abp.IdentityServer.Grants; using Volo.Abp.IdentityServer.IdentityResources; @@ -47,6 +48,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore public DbSet PersistedGrants { get; set; } + public DbSet DeviceFlowCodes { get; set; } + public IdentityServerDbContext(DbContextOptions options) : base(options) { @@ -56,6 +59,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); + builder.ConfigureIdentityServer(); } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs index a4ca63afa7..ad74721eb4 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs @@ -6,6 +6,7 @@ using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.Modeling; using Volo.Abp.IdentityServer.ApiResources; using Volo.Abp.IdentityServer.Clients; +using Volo.Abp.IdentityServer.Devices; using Volo.Abp.IdentityServer.Grants; using Volo.Abp.IdentityServer.IdentityResources; @@ -289,6 +290,24 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore apiScopeClaim.Property(x => x.Type).HasMaxLength(UserClaimConsts.TypeMaxLength).IsRequired(); apiScopeClaim.Property(x => x.Name).HasMaxLength(ApiScopeConsts.NameMaxLength).IsRequired(); }); + + builder.Entity(b => + { + b.ToTable(options.TablePrefix + "DeviceFlowCodes", options.Schema); + + b.ConfigureByConvention(); + + b.Property(x => x.DeviceCode).HasMaxLength(200).IsRequired(); + b.Property(x => x.UserCode).HasMaxLength(200).IsRequired(); + b.Property(x => x.SubjectId).HasMaxLength(200); + b.Property(x => x.ClientId).HasMaxLength(200).IsRequired(); + b.Property(x => x.Expiration).IsRequired(); + b.Property(x => x.Data).HasMaxLength(50000).IsRequired(); + + b.HasIndex(x => new { x.UserCode }).IsUnique(); + b.HasIndex(x => x.DeviceCode).IsUnique(); + b.HasIndex(x => x.Expiration); + }); } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContext.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContext.cs index 16f99b9119..b4b5fe9b60 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContext.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContext.cs @@ -2,6 +2,7 @@ using Volo.Abp.Data; using Volo.Abp.IdentityServer.ApiResources; using Volo.Abp.IdentityServer.Clients; +using Volo.Abp.IdentityServer.Devices; using Volo.Abp.IdentityServer.Grants; using Volo.Abp.MongoDB; using IdentityResource = Volo.Abp.IdentityServer.IdentityResources.IdentityResource; @@ -19,6 +20,8 @@ namespace Volo.Abp.IdentityServer.MongoDB public IMongoCollection PersistedGrants => Collection(); + public IMongoCollection DeviceFlowCodes => Collection(); + protected override void CreateModel(IMongoModelBuilder modelBuilder) { base.CreateModel(modelBuilder); diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContextExtensions.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContextExtensions.cs index 474188a0e1..b6a20d842a 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContextExtensions.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContextExtensions.cs @@ -1,6 +1,7 @@ using System; using Volo.Abp.IdentityServer.ApiResources; using Volo.Abp.IdentityServer.Clients; +using Volo.Abp.IdentityServer.Devices; using Volo.Abp.IdentityServer.Grants; using Volo.Abp.IdentityServer.IdentityResources; using Volo.Abp.MongoDB; @@ -39,6 +40,11 @@ namespace Volo.Abp.IdentityServer.MongoDB { b.CollectionName = options.CollectionPrefix + "PersistedGrants"; }); + + builder.Entity(b => + { + b.CollectionName = options.CollectionPrefix + "DeviceFlowCodes"; + }); } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbModule.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbModule.cs index 1076d19ecf..251378e087 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbModule.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbModule.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.IdentityServer.Devices; using Volo.Abp.IdentityServer.Grants; using Volo.Abp.Modularity; using Volo.Abp.MongoDB; @@ -32,6 +33,7 @@ namespace Volo.Abp.IdentityServer.MongoDB options.AddRepository(); options.AddRepository(); options.AddRepository(); + options.AddRepository(); }); } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/IAbpIdentityServerMongoDbContext.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/IAbpIdentityServerMongoDbContext.cs index cda4718896..3bb21a8198 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/IAbpIdentityServerMongoDbContext.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/IAbpIdentityServerMongoDbContext.cs @@ -1,6 +1,7 @@ using MongoDB.Driver; using Volo.Abp.Data; using Volo.Abp.IdentityServer.Clients; +using Volo.Abp.IdentityServer.Devices; using Volo.Abp.IdentityServer.Grants; using Volo.Abp.IdentityServer.IdentityResources; using Volo.Abp.MongoDB; @@ -18,5 +19,7 @@ namespace Volo.Abp.IdentityServer.MongoDB IMongoCollection IdentityResources { get; } IMongoCollection PersistedGrants { get; } + + IMongoCollection DeviceFlowCodes { get; } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs new file mode 100644 index 0000000000..6589376e52 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs @@ -0,0 +1,16 @@ +using System; +using Volo.Abp.Domain.Repositories.MongoDB; +using Volo.Abp.IdentityServer.Devices; +using Volo.Abp.MongoDB; + +namespace Volo.Abp.IdentityServer.MongoDB +{ + public class MongoDeviceFlowCodesRepository : + MongoDbRepository, IDeviceFlowCodesRepository + { + public MongoDeviceFlowCodesRepository( + IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + } +} \ No newline at end of file From a022b003a7ba4f3fa3a36f0f33e20232292225bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 2 Jan 2020 19:23:28 +0300 Subject: [PATCH 026/411] Rename ClientAutoMapperProfile to IdentityServerAutoMapperProfile and move to the Volo.Abp.IdentityServer namespace --- .../Abp/IdentityServer/AbpIdentityServerDomainModule.cs | 2 +- ...MapperProfile.cs => IdentityServerAutoMapperProfile.cs} | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) rename modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/{Clients/ClientAutoMapperProfile.cs => IdentityServerAutoMapperProfile.cs} (94%) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs index c89e7e74d2..f6f811ad96 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs @@ -28,7 +28,7 @@ namespace Volo.Abp.IdentityServer Configure(options => { - options.AddProfile(validate: true); + options.AddProfile(validate: true); }); AddIdentityServer(context.Services); diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientAutoMapperProfile.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityServerAutoMapperProfile.cs similarity index 94% rename from modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientAutoMapperProfile.cs rename to modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityServerAutoMapperProfile.cs index 81e5841d6b..ba1f44953c 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientAutoMapperProfile.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityServerAutoMapperProfile.cs @@ -2,14 +2,15 @@ using System.Security.Claims; using AutoMapper; using Volo.Abp.IdentityServer.ApiResources; +using Volo.Abp.IdentityServer.Clients; using Volo.Abp.IdentityServer.Grants; using Volo.Abp.IdentityServer.IdentityResources; -namespace Volo.Abp.IdentityServer.Clients +namespace Volo.Abp.IdentityServer { - public class ClientAutoMapperProfile : Profile + public class IdentityServerAutoMapperProfile : Profile { - public ClientAutoMapperProfile() + public IdentityServerAutoMapperProfile() { //TODO: Reverse maps will not used probably. Remove those will not used From bbb689cd7b0479a3382f03c563c4dfef6f8271a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 2 Jan 2020 19:44:43 +0300 Subject: [PATCH 027/411] Add initial --- .../IdentityServer/Devices/DeviceFlowStore.cs | 98 +++++++++++++++++++ .../Devices/IDeviceFlowCodesRepository.cs | 7 +- .../Devices/DeviceFlowCodesRepository.cs | 12 +++ .../Grants/PersistedGrantRepository.cs | 3 +- .../MongoDB/MongoDeviceFlowCodesRepository.cs | 13 +++ 5 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowStore.cs diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowStore.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowStore.cs new file mode 100644 index 0000000000..bfc5e62f7c --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowStore.cs @@ -0,0 +1,98 @@ +using System; +using System.IdentityModel.Tokens.Jwt; +using System.Threading.Tasks; +using IdentityModel; +using IdentityServer4.Models; +using IdentityServer4.Stores; +using IdentityServer4.Stores.Serialization; +using JetBrains.Annotations; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Guids; + +namespace Volo.Abp.IdentityServer.Devices +{ + public class DeviceFlowStore : IDeviceFlowStore, ITransientDependency + { + protected IDeviceFlowCodesRepository DeviceFlowCodesRepository { get; } + protected IGuidGenerator GuidGenerator { get; } + protected IPersistentGrantSerializer PersistentGrantSerializer { get; } + + public DeviceFlowStore( + IDeviceFlowCodesRepository deviceFlowCodesRepository, + IGuidGenerator guidGenerator, + IPersistentGrantSerializer persistentGrantSerializer) + { + DeviceFlowCodesRepository = deviceFlowCodesRepository; + GuidGenerator = guidGenerator; + PersistentGrantSerializer = persistentGrantSerializer; + } + + public async Task StoreDeviceAuthorizationAsync(string deviceCode, string userCode, DeviceCode data) + { + Check.NotNull(deviceCode, nameof(deviceCode)); + Check.NotNull(userCode, nameof(userCode)); + Check.NotNull(data, nameof(data)); + + await DeviceFlowCodesRepository.InsertAsync( + new DeviceFlowCodes(GuidGenerator.Create()) + { + DeviceCode = deviceCode, + UserCode = userCode, + ClientId = data.ClientId, + SubjectId = data.Subject?.FindFirst(JwtClaimTypes.Subject).Value, + CreationTime = data.CreationTime, + Expiration = data.CreationTime.AddSeconds(data.Lifetime), + Data = Serialize(data) + } + ).ConfigureAwait(false); + } + + public async Task FindByUserCodeAsync(string userCode) + { + Check.NotNull(userCode, nameof(userCode)); + + var deviceCodes = await DeviceFlowCodesRepository.FindByUserCodeAsync(userCode).ConfigureAwait(false); + if (deviceCodes == null) + { + return null; + } + + return DeserializeToDeviceCode(deviceCodes.Data); + } + + public Task FindByDeviceCodeAsync(string deviceCode) + { + throw new NotImplementedException(); + } + + public Task UpdateByUserCodeAsync(string userCode, DeviceCode data) + { + throw new NotImplementedException(); + } + + public Task RemoveByDeviceCodeAsync(string deviceCode) + { + throw new NotImplementedException(); + } + + private string Serialize([CanBeNull] DeviceCode deviceCode) + { + if (deviceCode == null) + { + return null; + } + + return PersistentGrantSerializer.Serialize(deviceCode); + } + + protected virtual DeviceCode DeserializeToDeviceCode([CanBeNull] string data) + { + if (data == null) + { + return null; + } + + return PersistentGrantSerializer.Deserialize(data); + } + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/IDeviceFlowCodesRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/IDeviceFlowCodesRepository.cs index 7dbbcaff69..f40f8f0353 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/IDeviceFlowCodesRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/IDeviceFlowCodesRepository.cs @@ -1,10 +1,15 @@ using System; +using System.Threading; +using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; namespace Volo.Abp.IdentityServer.Devices { public interface IDeviceFlowCodesRepository : IBasicRepository { - + Task FindByUserCodeAsync( + string userCode, + CancellationToken cancellationToken = default + ); } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs index f8882d743d..c722d3b99a 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs @@ -1,4 +1,7 @@ using System; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.IdentityServer.EntityFrameworkCore; @@ -13,5 +16,14 @@ namespace Volo.Abp.IdentityServer.Devices { } + + public async Task FindByUserCodeAsync( + string userCode, + CancellationToken cancellationToken = default) + { + return await DbSet + .FirstOrDefaultAsync(d => d.UserCode == userCode, GetCancellationToken(cancellationToken)) + .ConfigureAwait(false); + } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistedGrantRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistedGrantRepository.cs index e0af04c53e..ca404c84e5 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistedGrantRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistedGrantRepository.cs @@ -12,7 +12,8 @@ namespace Volo.Abp.IdentityServer.Grants { public class PersistentGrantRepository : EfCoreRepository, IPersistentGrantRepository { - public PersistentGrantRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) + public PersistentGrantRepository(IDbContextProvider dbContextProvider) + : base(dbContextProvider) { } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs index 6589376e52..8357c116f4 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs @@ -1,4 +1,7 @@ using System; +using System.Threading; +using System.Threading.Tasks; +using MongoDB.Driver.Linq; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.IdentityServer.Devices; using Volo.Abp.MongoDB; @@ -11,6 +14,16 @@ namespace Volo.Abp.IdentityServer.MongoDB public MongoDeviceFlowCodesRepository( IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) { + + } + + public async Task FindByUserCodeAsync( + string userCode, + CancellationToken cancellationToken = default) + { + return await GetMongoQueryable() + .FirstOrDefaultAsync(d => d.UserCode == userCode, GetCancellationToken(cancellationToken)) + .ConfigureAwait(false); } } } \ No newline at end of file From 5ec0362dd15c0d526167ded7ce2616c6ad6b7a72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 2 Jan 2020 20:28:47 +0300 Subject: [PATCH 028/411] Complete the DeviceFlowStore --- .../AbpIdentityServerDomainModule.cs | 14 ++-- .../IdentityServer/Devices/DeviceFlowStore.cs | 84 ++++++++++++++----- .../Devices/IDeviceFlowCodesRepository.cs | 5 ++ .../IdentityServerBuilderExtensions.cs | 2 + .../Devices/DeviceFlowCodesRepository.cs | 9 ++ .../MongoDB/MongoDeviceFlowCodesRepository.cs | 7 ++ 6 files changed, 97 insertions(+), 24 deletions(-) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs index f6f811ad96..7c22dccf0e 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs @@ -1,11 +1,10 @@ -using System.Security.Cryptography.X509Certificates; -using IdentityServer4.Services; +using IdentityServer4.Services; using IdentityServer4.Stores; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; using Volo.Abp.AutoMapper; using Volo.Abp.Caching; using Volo.Abp.Identity; -using Volo.Abp.IdentityServer.Clients; using Volo.Abp.Modularity; using Volo.Abp.Security; using Volo.Abp.Validation; @@ -33,7 +32,7 @@ namespace Volo.Abp.IdentityServer AddIdentityServer(context.Services); } - + private static void AddIdentityServer(IServiceCollection services) { var configuration = services.GetConfiguration(); @@ -58,7 +57,12 @@ namespace Volo.Abp.IdentityServer if (!services.IsAdded()) { - identityServerBuilder.AddInMemoryPersistedGrants(); + services.TryAddSingleton(); + } + + if (!services.IsAdded()) + { + services.TryAddSingleton(); } if (!services.IsAdded()) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowStore.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowStore.cs index bfc5e62f7c..771e3acbde 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowStore.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowStore.cs @@ -33,25 +33,29 @@ namespace Volo.Abp.IdentityServer.Devices Check.NotNull(userCode, nameof(userCode)); Check.NotNull(data, nameof(data)); - await DeviceFlowCodesRepository.InsertAsync( - new DeviceFlowCodes(GuidGenerator.Create()) - { - DeviceCode = deviceCode, - UserCode = userCode, - ClientId = data.ClientId, - SubjectId = data.Subject?.FindFirst(JwtClaimTypes.Subject).Value, - CreationTime = data.CreationTime, - Expiration = data.CreationTime.AddSeconds(data.Lifetime), - Data = Serialize(data) - } - ).ConfigureAwait(false); + await DeviceFlowCodesRepository + .InsertAsync( + new DeviceFlowCodes(GuidGenerator.Create()) + { + DeviceCode = deviceCode, + UserCode = userCode, + ClientId = data.ClientId, + SubjectId = data.Subject?.FindFirst(JwtClaimTypes.Subject).Value, + CreationTime = data.CreationTime, + Expiration = data.CreationTime.AddSeconds(data.Lifetime), + Data = Serialize(data) + } + ).ConfigureAwait(false); } public async Task FindByUserCodeAsync(string userCode) { Check.NotNull(userCode, nameof(userCode)); - var deviceCodes = await DeviceFlowCodesRepository.FindByUserCodeAsync(userCode).ConfigureAwait(false); + var deviceCodes = await DeviceFlowCodesRepository + .FindByUserCodeAsync(userCode) + .ConfigureAwait(false); + if (deviceCodes == null) { return null; @@ -60,19 +64,61 @@ namespace Volo.Abp.IdentityServer.Devices return DeserializeToDeviceCode(deviceCodes.Data); } - public Task FindByDeviceCodeAsync(string deviceCode) + public async Task FindByDeviceCodeAsync(string deviceCode) { - throw new NotImplementedException(); + Check.NotNull(deviceCode, nameof(deviceCode)); + + var deviceCodes = await DeviceFlowCodesRepository + .FindByDeviceCodeAsync(deviceCode) + .ConfigureAwait(false); + + if (deviceCodes == null) + { + return null; + } + + return DeserializeToDeviceCode(deviceCodes.Data); } - public Task UpdateByUserCodeAsync(string userCode, DeviceCode data) + public async Task UpdateByUserCodeAsync(string userCode, DeviceCode data) { - throw new NotImplementedException(); + Check.NotNull(userCode, nameof(userCode)); + Check.NotNull(data, nameof(data)); + + + var deviceCodes = await DeviceFlowCodesRepository + .FindByUserCodeAsync(userCode) + .ConfigureAwait(false); + + if (deviceCodes == null) + { + throw new InvalidOperationException($"Could not update device code by the given userCode: {userCode}"); + } + + deviceCodes.SubjectId = data.Subject?.FindFirst(JwtClaimTypes.Subject).Value; + deviceCodes.Data = Serialize(data); + + await DeviceFlowCodesRepository + .UpdateAsync(deviceCodes, autoSave: true) + .ConfigureAwait(false); } - public Task RemoveByDeviceCodeAsync(string deviceCode) + public async Task RemoveByDeviceCodeAsync(string deviceCode) { - throw new NotImplementedException(); + Check.NotNull(deviceCode, nameof(deviceCode)); + + var deviceCodes = await DeviceFlowCodesRepository + .FindByDeviceCodeAsync(deviceCode) + .ConfigureAwait(false); + + if (deviceCodes == null) + { + return; + } + + await DeviceFlowCodesRepository + .DeleteAsync(deviceCodes, autoSave: true) + .ConfigureAwait(false); } private string Serialize([CanBeNull] DeviceCode deviceCode) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/IDeviceFlowCodesRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/IDeviceFlowCodesRepository.cs index f40f8f0353..41c7e92574 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/IDeviceFlowCodesRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/IDeviceFlowCodesRepository.cs @@ -11,5 +11,10 @@ namespace Volo.Abp.IdentityServer.Devices string userCode, CancellationToken cancellationToken = default ); + + Task FindByDeviceCodeAsync( + string deviceCode, + CancellationToken cancellationToken = default + ); } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityServerBuilderExtensions.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityServerBuilderExtensions.cs index 2168b2067e..516d400db6 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityServerBuilderExtensions.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityServerBuilderExtensions.cs @@ -1,6 +1,7 @@ using IdentityServer4.Stores; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.IdentityServer.Clients; +using Volo.Abp.IdentityServer.Devices; using Volo.Abp.IdentityServer.Grants; namespace Volo.Abp.IdentityServer @@ -10,6 +11,7 @@ namespace Volo.Abp.IdentityServer public static IIdentityServerBuilder AddAbpStores(this IIdentityServerBuilder builder) { builder.Services.AddTransient(); + builder.Services.AddTransient(); return builder .AddClientStore() diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs index c722d3b99a..d5ac9ae815 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs @@ -25,5 +25,14 @@ namespace Volo.Abp.IdentityServer.Devices .FirstOrDefaultAsync(d => d.UserCode == userCode, GetCancellationToken(cancellationToken)) .ConfigureAwait(false); } + + public async Task FindByDeviceCodeAsync( + string deviceCode, + CancellationToken cancellationToken = default) + { + return await DbSet + .FirstOrDefaultAsync(d => d.DeviceCode == deviceCode, GetCancellationToken(cancellationToken)) + .ConfigureAwait(false); + } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs index 8357c116f4..3ad3ecf104 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs @@ -25,5 +25,12 @@ namespace Volo.Abp.IdentityServer.MongoDB .FirstOrDefaultAsync(d => d.UserCode == userCode, GetCancellationToken(cancellationToken)) .ConfigureAwait(false); } + + public async Task FindByDeviceCodeAsync(string deviceCode, CancellationToken cancellationToken = default) + { + return await GetMongoQueryable() + .FirstOrDefaultAsync(d => d.DeviceCode == deviceCode, GetCancellationToken(cancellationToken)) + .ConfigureAwait(false); + } } } \ No newline at end of file From 360a74bd5a3e81b53b7286fa7d9b519d4c830593 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 3 Jan 2020 09:25:36 +0300 Subject: [PATCH 029/411] refactor(theme-shared): add click, focus, blur outputs --- .../src/lib/components/button/button.component.ts | 14 +++++++++++--- npm/ng-packs/scripts/yarn.lock | 5 +++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/button/button.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/button/button.component.ts index 9ff4d1e24e..83bef06f26 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/button/button.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/button/button.component.ts @@ -19,9 +19,9 @@ import { ABP } from '@abp/ng.core'; [attr.type]="buttonType" [ngClass]="buttonClass" [disabled]="loading || disabled" - (click.stop)="abpClick.next($event)" - (focus)="abpFocus.next($event)" - (blur)="abpBlur.next($event)" + (click.stop)="click.next($event); abpClick.next($event)" + (focus)="focus.next($event); abpFocus.next($event)" + (blur)="blur.next($event); abpBlur.next($event)" > @@ -49,6 +49,14 @@ export class ButtonComponent implements OnInit { @Input() attributes: ABP.Dictionary; + // tslint:disable + @Output() readonly click = new EventEmitter(); + + @Output() readonly focus = new EventEmitter(); + + @Output() readonly blur = new EventEmitter(); + // tslint:enable + @Output() readonly abpClick = new EventEmitter(); @Output() readonly abpFocus = new EventEmitter(); diff --git a/npm/ng-packs/scripts/yarn.lock b/npm/ng-packs/scripts/yarn.lock index 9531840238..78d1cae14b 100644 --- a/npm/ng-packs/scripts/yarn.lock +++ b/npm/ng-packs/scripts/yarn.lock @@ -1157,6 +1157,11 @@ tsconfig-paths@^3.9.0: minimist "^1.2.0" strip-bom "^3.0.0" +typescript@^3.7.4: + version "3.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.4.tgz#1743a5ec5fef6a1fa9f3e4708e33c81c73876c19" + integrity sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw== + universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" From bd9cfdd0aed1aeac1d4b19df21ef87834dfa0ea0 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 3 Jan 2020 09:41:23 +0300 Subject: [PATCH 030/411] style(account): change tslint disable style --- .../packages/account/src/lib/models/account.ts | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/npm/ng-packs/packages/account/src/lib/models/account.ts b/npm/ng-packs/packages/account/src/lib/models/account.ts index fc455758cb..04a37709c6 100644 --- a/npm/ng-packs/packages/account/src/lib/models/account.ts +++ b/npm/ng-packs/packages/account/src/lib/models/account.ts @@ -6,24 +6,13 @@ export namespace Account { readonly cancelContentRef?: TemplateRef; } - // tslint:disable-next-line: no-empty-interface + //tslint:disable export interface AuthWrapperComponentOutputs {} - - // tslint:disable-next-line: no-empty-interface export interface TenantBoxComponentInputs {} - - // tslint:disable-next-line: no-empty-interface export interface TenantBoxComponentOutputs {} - - // tslint:disable-next-line: no-empty-interface export interface PersonalSettingsComponentInputs {} - - // tslint:disable-next-line: no-empty-interface export interface PersonalSettingsComponentOutputs {} - - // tslint:disable-next-line: no-empty-interface export interface ChangePasswordComponentInputs {} - - // tslint:disable-next-line: no-empty-interface export interface ChangePasswordComponentOutputs {} + // tslint:enable } From 7d3a9b30d719814390d6fb1c62bd5acf328cc7e7 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 3 Jan 2020 10:53:03 +0300 Subject: [PATCH 031/411] ci(scripts): add types property to tsconfig --- npm/ng-packs/scripts/package.json | 1 + npm/ng-packs/scripts/tsconfig.json | 3 ++- npm/ng-packs/scripts/yarn.lock | 5 +++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/npm/ng-packs/scripts/package.json b/npm/ng-packs/scripts/package.json index ebca65352a..14550a8277 100644 --- a/npm/ng-packs/scripts/package.json +++ b/npm/ng-packs/scripts/package.json @@ -20,6 +20,7 @@ "typescript": "^3.7.4" }, "devDependencies": { + "@types/node": "^13.1.2", "esm": "^3.2.25", "ts-node": "^8.5.4", "tsconfig-paths": "^3.9.0" diff --git a/npm/ng-packs/scripts/tsconfig.json b/npm/ng-packs/scripts/tsconfig.json index f007616af1..b8a62178eb 100644 --- a/npm/ng-packs/scripts/tsconfig.json +++ b/npm/ng-packs/scripts/tsconfig.json @@ -10,7 +10,8 @@ "outDir": "./dist", "baseUrl": "./", "incremental": true, - "esModuleInterop": true + "esModuleInterop": true, + "types": ["node"] }, "exclude": ["node_modules", "dist"] } diff --git a/npm/ng-packs/scripts/yarn.lock b/npm/ng-packs/scripts/yarn.lock index 78d1cae14b..2e14671cb5 100644 --- a/npm/ng-packs/scripts/yarn.lock +++ b/npm/ng-packs/scripts/yarn.lock @@ -7,6 +7,11 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= +"@types/node@^13.1.2": + version "13.1.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.1.2.tgz#fe94285bf5e0782e1a9e5a8c482b1c34465fa385" + integrity sha512-B8emQA1qeKerqd1dmIsQYnXi+mmAzTB7flExjmy5X1aVAKFNNNDubkavwR13kR6JnpeLp3aLoJhwn9trWPAyFQ== + ansi-bgblack@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ansi-bgblack/-/ansi-bgblack-0.1.1.tgz#a68ba5007887701b6aafbe3fa0dadfdfa8ee3ca2" From fe59b90e5a60ab0f9a27f3e9f2050cfca3509eee Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Fri, 3 Jan 2020 12:06:58 +0300 Subject: [PATCH 032/411] fixes #2538 --- .../Volo/Docs/Documents/DocumentAppService.cs | 7 ++++++- .../Pages/Documents/Project/Index.cshtml.cs | 18 +++++++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs index b3b2a05b53..839c63860b 100644 --- a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs +++ b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs @@ -23,7 +23,7 @@ namespace Volo.Docs.Documents IDocumentStoreFactory documentStoreFactory, IDistributedCache documentCache, IDistributedCache languageCache, - IDistributedCache resourceCache, + IDistributedCache resourceCache, IHostEnvironment hostEnvironment) { _projectRepository = projectRepository; @@ -107,6 +107,11 @@ namespace Volo.Docs.Documents try { + if (string.IsNullOrWhiteSpace(project.ParametersDocumentName)) + { + return await Task.FromResult(null); + } + var document = await GetDocumentWithDetailsDtoAsync( project, project.ParametersDocumentName, diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs index b4ba841169..7cc398ecd0 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs @@ -91,7 +91,7 @@ namespace Volo.Docs.Pages.Documents.Project try { - await SetProjectAsync(); + await SetProjectAsync(); } catch (EntityNotFoundException e) { @@ -391,7 +391,8 @@ namespace Volo.Docs.Pages.Documents.Project private async Task ConvertDocumentContentToHtmlAsync() { - await SetDocumentPreferences(); + await SetDocumentPreferencesAsync(); + SetUserPreferences(); Document.Content = await _documentSectionRenderer.RenderAsync(Document.Content, UserPreferences); @@ -431,12 +432,13 @@ namespace Volo.Docs.Pages.Documents.Project { continue; } + var key = keyValue.Split("=")[0]; var value = keyValue.Split("=")[1]; UserPreferences.Add(key, value); - UserPreferences.Add(key + "_Value", DocumentPreferences.Parameters?.FirstOrDefault(p=>p.Name == key) - ?.Values.FirstOrDefault(v=>v.Key == value).Value); + UserPreferences.Add(key + "_Value", DocumentPreferences.Parameters?.FirstOrDefault(p => p.Name == key) + ?.Values.FirstOrDefault(v => v.Key == value).Value); } } @@ -449,9 +451,11 @@ namespace Volo.Docs.Pages.Documents.Project UserPreferences.Remove(keyValue.Key); UserPreferences.Remove(keyValue.Key + "_Value"); } + UserPreferences.Add(keyValue.Key, keyValue.Value); - UserPreferences.Add(keyValue.Key + "_Value", DocumentPreferences.Parameters?.FirstOrDefault(p => p.Name == keyValue.Key) - ?.Values.FirstOrDefault(v => v.Key == keyValue.Value).Value); + UserPreferences.Add(keyValue.Key + "_Value", + DocumentPreferences.Parameters?.FirstOrDefault(p => p.Name == keyValue.Key)?.Values + .FirstOrDefault(v => v.Key == keyValue.Value).Value); } if (DocumentPreferences?.Parameters == null) @@ -469,7 +473,7 @@ namespace Volo.Docs.Pages.Documents.Project } } - public async Task SetDocumentPreferences() + public async Task SetDocumentPreferencesAsync() { var projectParameters = await _documentAppService.GetParametersAsync( new GetParametersDocumentInput From d815b9cfeea830574e5aa777c6bdff8a7ff70210 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 3 Jan 2020 12:41:17 +0300 Subject: [PATCH 033/411] Refactor AbpTabLinkTagHelperService: Remove unnecessary async. --- .../TagHelpers/Tab/AbpTabLinkTagHelperService.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabLinkTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabLinkTagHelperService.cs index ba5e3e811a..54a29bf691 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabLinkTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabLinkTagHelperService.cs @@ -7,7 +7,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab { public class AbpTabLinkTagHelperService : AbpTagHelperService { - public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) + public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { SetPlaceholderForNameIfNotProvided(); @@ -18,6 +18,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab tabHeaderItems.Add(new TabItem(tabHeader, "", false, TagHelper.Name, TagHelper.ParentDropdownName, false)); output.SuppressOutput(); + + return Task.CompletedTask; } protected virtual string GetTabHeaderItem(TagHelperContext context, TagHelperOutput output) From 401376e10951fc5a33d9111a5d9b1c20ee63e51e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 3 Jan 2020 12:44:50 +0300 Subject: [PATCH 034/411] Resolved #2540. Resolved #2539. * Send IServiceProvider to DoWork method of the periodic background worker #2539 * Introduce AsyncPeriodicBackgroundWorkerBase #2540 --- .../BackgroundJobs/BackgroundJobExecuter.cs | 5 +- .../BackgroundJobs/IBackgroundJobExecuter.cs | 6 +- .../Hangfire/HangfireJobExecutionAdapter.cs | 3 +- .../Abp/BackgroundJobs/RabbitMQ/JobQueue.cs | 3 +- .../Abp/BackgroundJobs/BackgroundJobWorker.cs | 93 +++++++++---------- .../AsyncPeriodicBackgroundWorkerBase.cs | 55 +++++++++++ .../BackgroundWorkerContext.cs | 14 +++ .../PeriodicBackgroundWorkerBase.cs | 22 +++-- 8 files changed, 137 insertions(+), 64 deletions(-) create mode 100644 framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/AsyncPeriodicBackgroundWorkerBase.cs create mode 100644 framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkerContext.cs diff --git a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobExecuter.cs b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobExecuter.cs index ec0ac8ee3f..c9b5790003 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobExecuter.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobExecuter.cs @@ -4,7 +4,6 @@ using Microsoft.Extensions.Options; using System; using System.Threading.Tasks; using Volo.Abp.DependencyInjection; -using Volo.Abp.Threading; namespace Volo.Abp.BackgroundJobs { @@ -21,7 +20,7 @@ namespace Volo.Abp.BackgroundJobs Logger = NullLogger.Instance; } - public virtual void Execute(JobExecutionContext context) + public virtual async Task ExecuteAsync(JobExecutionContext context) { var job = context.ServiceProvider.GetService(context.JobType); if (job == null) @@ -41,7 +40,7 @@ namespace Volo.Abp.BackgroundJobs { if (jobExecuteMethod.Name == nameof(IAsyncBackgroundJob.ExecuteAsync)) { - AsyncHelper.RunSync(() => (Task) jobExecuteMethod.Invoke(job, new[] {context.JobArgs})); + await ((Task) jobExecuteMethod.Invoke(job, new[] {context.JobArgs})).ConfigureAwait(false); } else { diff --git a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/IBackgroundJobExecuter.cs b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/IBackgroundJobExecuter.cs index 2470b2945b..eaea1764f3 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/IBackgroundJobExecuter.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/IBackgroundJobExecuter.cs @@ -1,7 +1,9 @@ -namespace Volo.Abp.BackgroundJobs +using System.Threading.Tasks; + +namespace Volo.Abp.BackgroundJobs { public interface IBackgroundJobExecuter { - void Execute(JobExecutionContext context); + Task ExecuteAsync(JobExecutionContext context); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundJobs.HangFire/Volo/Abp/BackgroundJobs/Hangfire/HangfireJobExecutionAdapter.cs b/framework/src/Volo.Abp.BackgroundJobs.HangFire/Volo/Abp/BackgroundJobs/Hangfire/HangfireJobExecutionAdapter.cs index 4a61aa2845..676a3eaafc 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.HangFire/Volo/Abp/BackgroundJobs/Hangfire/HangfireJobExecutionAdapter.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.HangFire/Volo/Abp/BackgroundJobs/Hangfire/HangfireJobExecutionAdapter.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; +using Volo.Abp.Threading; namespace Volo.Abp.BackgroundJobs.Hangfire { @@ -25,7 +26,7 @@ namespace Volo.Abp.BackgroundJobs.Hangfire { var jobType = Options.GetJob(typeof(TArgs)).JobType; var context = new JobExecutionContext(scope.ServiceProvider, jobType, args); - JobExecuter.Execute(context); + AsyncHelper.RunSync(() => JobExecuter.ExecuteAsync(context)); } } } diff --git a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs index 7675a64ca0..fb18ca00f9 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs @@ -10,6 +10,7 @@ using Nito.AsyncEx; using RabbitMQ.Client; using RabbitMQ.Client.Events; using Volo.Abp.RabbitMQ; +using Volo.Abp.Threading; namespace Volo.Abp.BackgroundJobs.RabbitMQ { @@ -181,7 +182,7 @@ namespace Volo.Abp.BackgroundJobs.RabbitMQ try { - JobExecuter.Execute(context); + AsyncHelper.RunSync(() => JobExecuter.ExecuteAsync(context)); ChannelAccessor.Channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); } catch (BackgroundJobExecutionException) diff --git a/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs b/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs index 74a3f6128f..a16690f346 100644 --- a/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs +++ b/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; @@ -9,92 +10,88 @@ using Volo.Abp.Timing; namespace Volo.Abp.BackgroundJobs { - public class BackgroundJobWorker : PeriodicBackgroundWorkerBase, IBackgroundJobWorker + public class BackgroundJobWorker : AsyncPeriodicBackgroundWorkerBase, IBackgroundJobWorker { protected AbpBackgroundJobOptions JobOptions { get; } protected AbpBackgroundJobWorkerOptions WorkerOptions { get; } - protected IServiceScopeFactory ServiceScopeFactory { get; } - public BackgroundJobWorker( AbpTimer timer, IOptions jobOptions, IOptions workerOptions, IServiceScopeFactory serviceScopeFactory) - : base(timer) + : base( + timer, + serviceScopeFactory) { - ServiceScopeFactory = serviceScopeFactory; WorkerOptions = workerOptions.Value; JobOptions = jobOptions.Value; Timer.Period = WorkerOptions.JobPollPeriod; } - protected override void DoWork() + protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext) { - using (var scope = ServiceScopeFactory.CreateScope()) - { - var store = scope.ServiceProvider.GetRequiredService(); + var store = workerContext.ServiceProvider.GetRequiredService(); - var waitingJobs = AsyncHelper.RunSync(() => store.GetWaitingJobsAsync(WorkerOptions.MaxJobFetchCount)); + var waitingJobs = await store.GetWaitingJobsAsync(WorkerOptions.MaxJobFetchCount).ConfigureAwait(false); - if (!waitingJobs.Any()) - { - return; - } + if (!waitingJobs.Any()) + { + return; + } + + var jobExecuter = workerContext.ServiceProvider.GetRequiredService(); + var clock = workerContext.ServiceProvider.GetRequiredService(); + var serializer = workerContext.ServiceProvider.GetRequiredService(); - var jobExecuter = scope.ServiceProvider.GetRequiredService(); - var clock = scope.ServiceProvider.GetRequiredService(); - var serializer = scope.ServiceProvider.GetRequiredService(); + foreach (var jobInfo in waitingJobs) + { + jobInfo.TryCount++; + jobInfo.LastTryTime = clock.Now; - foreach (var jobInfo in waitingJobs) + try { - jobInfo.TryCount++; - jobInfo.LastTryTime = clock.Now; + var jobConfiguration = JobOptions.GetJob(jobInfo.JobName); + var jobArgs = serializer.Deserialize(jobInfo.JobArgs, jobConfiguration.ArgsType); + var context = new JobExecutionContext(workerContext.ServiceProvider, jobConfiguration.JobType, jobArgs); try { - var jobConfiguration = JobOptions.GetJob(jobInfo.JobName); - var jobArgs = serializer.Deserialize(jobInfo.JobArgs, jobConfiguration.ArgsType); - var context = new JobExecutionContext(scope.ServiceProvider, jobConfiguration.JobType, jobArgs); + await jobExecuter.ExecuteAsync(context).ConfigureAwait(false); - try - { - jobExecuter.Execute(context); + await store.DeleteAsync(jobInfo.Id).ConfigureAwait(false); + } + catch (BackgroundJobExecutionException) + { + var nextTryTime = CalculateNextTryTime(jobInfo, clock); - AsyncHelper.RunSync(() => store.DeleteAsync(jobInfo.Id)); + if (nextTryTime.HasValue) + { + jobInfo.NextTryTime = nextTryTime.Value; } - catch (BackgroundJobExecutionException) + else { - var nextTryTime = CalculateNextTryTime(jobInfo, clock); - - if (nextTryTime.HasValue) - { - jobInfo.NextTryTime = nextTryTime.Value; - } - else - { - jobInfo.IsAbandoned = true; - } - - TryUpdate(store, jobInfo); + jobInfo.IsAbandoned = true; } + + await TryUpdateAsync(store, jobInfo).ConfigureAwait(false); } - catch (Exception ex) - { - Logger.LogException(ex); - jobInfo.IsAbandoned = true; - TryUpdate(store, jobInfo); - } + } + catch (Exception ex) + { + Logger.LogException(ex); + jobInfo.IsAbandoned = true; + await TryUpdateAsync(store, jobInfo).ConfigureAwait(false); } } } - protected virtual void TryUpdate(IBackgroundJobStore store, BackgroundJobInfo jobInfo) + protected virtual async Task TryUpdateAsync(IBackgroundJobStore store, BackgroundJobInfo jobInfo) { try { - AsyncHelper.RunSync(() => store.UpdateAsync(jobInfo)); + await store.UpdateAsync(jobInfo).ConfigureAwait(false); } catch (Exception updateEx) { diff --git a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/AsyncPeriodicBackgroundWorkerBase.cs b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/AsyncPeriodicBackgroundWorkerBase.cs new file mode 100644 index 0000000000..cd8474e654 --- /dev/null +++ b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/AsyncPeriodicBackgroundWorkerBase.cs @@ -0,0 +1,55 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Volo.Abp.Threading; + +namespace Volo.Abp.BackgroundWorkers +{ + public abstract class AsyncPeriodicBackgroundWorkerBase : BackgroundWorkerBase + { + protected IServiceScopeFactory ServiceScopeFactory { get; } + protected AbpTimer Timer { get; } + + protected AsyncPeriodicBackgroundWorkerBase( + AbpTimer timer, + IServiceScopeFactory serviceScopeFactory) + { + ServiceScopeFactory = serviceScopeFactory; + Timer = timer; + Timer.Elapsed += Timer_Elapsed; + } + + public override async Task StartAsync(CancellationToken cancellationToken = default) + { + await base.StartAsync(cancellationToken).ConfigureAwait(false); + Timer.Start(cancellationToken); + } + + public override async Task StopAsync(CancellationToken cancellationToken = default) + { + Timer.Stop(cancellationToken); + await base.StopAsync(cancellationToken).ConfigureAwait(false); + } + + private void Timer_Elapsed(object sender, System.EventArgs e) + { + try + { + using (var scope = ServiceScopeFactory.CreateScope()) + { + AsyncHelper.RunSync( + () => DoWorkAsync(new PeriodicBackgroundWorkerContext(scope.ServiceProvider)) + ); + } + } + catch (Exception ex) + { + Logger.LogException(ex); + } + } + + protected abstract Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkerContext.cs b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkerContext.cs new file mode 100644 index 0000000000..dc5635ae88 --- /dev/null +++ b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkerContext.cs @@ -0,0 +1,14 @@ +using System; + +namespace Volo.Abp.BackgroundWorkers +{ + public class PeriodicBackgroundWorkerContext + { + public IServiceProvider ServiceProvider { get; } + + public PeriodicBackgroundWorkerContext(IServiceProvider serviceProvider) + { + ServiceProvider = serviceProvider; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/PeriodicBackgroundWorkerBase.cs b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/PeriodicBackgroundWorkerBase.cs index e2b0f5b53a..863657ab79 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/PeriodicBackgroundWorkerBase.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/PeriodicBackgroundWorkerBase.cs @@ -1,6 +1,7 @@ using System; using System.Threading; using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Volo.Abp.Threading; @@ -11,14 +12,14 @@ namespace Volo.Abp.BackgroundWorkers /// public abstract class PeriodicBackgroundWorkerBase : BackgroundWorkerBase { - protected readonly AbpTimer Timer; + protected IServiceScopeFactory ServiceScopeFactory { get; } + protected AbpTimer Timer { get; } - /// - /// Initializes a new instance of the class. - /// - /// A timer. - protected PeriodicBackgroundWorkerBase(AbpTimer timer) + protected PeriodicBackgroundWorkerBase( + AbpTimer timer, + IServiceScopeFactory serviceScopeFactory) { + ServiceScopeFactory = serviceScopeFactory; Timer = timer; Timer.Elapsed += Timer_Elapsed; } @@ -34,12 +35,15 @@ namespace Volo.Abp.BackgroundWorkers Timer.Stop(cancellationToken); await base.StopAsync(cancellationToken).ConfigureAwait(false); } - + private void Timer_Elapsed(object sender, System.EventArgs e) { try { - DoWork(); + using (var scope = ServiceScopeFactory.CreateScope()) + { + DoWork(new PeriodicBackgroundWorkerContext(scope.ServiceProvider)); + } } catch (Exception ex) { @@ -50,6 +54,6 @@ namespace Volo.Abp.BackgroundWorkers /// /// Periodic works should be done by implementing this method. /// - protected abstract void DoWork(); + protected abstract void DoWork(PeriodicBackgroundWorkerContext workerContext); } } \ No newline at end of file From 4ba43061651219e0228b25f7951ec2b3c7102d54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 3 Jan 2020 12:45:24 +0300 Subject: [PATCH 035/411] Remove unnecessary async usages. --- .../Volo/Abp/Cli/Commands/HelpCommand.cs | 6 ++++-- .../ProjectNugetPackageAdder.cs | 4 +++- framework/test/SimpleConsoleDemo/Program.cs | 3 +-- .../BackgroundJobExecuter_Tests.cs | 4 ++-- .../Abp/Caching/DistributedCache_Tests.cs | 20 +++++++++---------- .../Volo/Abp/Uow/UnitOfWork_Events_Tests.cs | 7 ++++++- 6 files changed, 26 insertions(+), 18 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/HelpCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/HelpCommand.cs index 2da6b82c8a..060bd91cc7 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/HelpCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/HelpCommand.cs @@ -24,12 +24,12 @@ namespace Volo.Abp.Cli.Commands AbpCliOptions = cliOptions.Value; } - public async Task ExecuteAsync(CommandLineArgs commandLineArgs) + public Task ExecuteAsync(CommandLineArgs commandLineArgs) { if (string.IsNullOrWhiteSpace(commandLineArgs.Target)) { Logger.LogInformation(GetUsageInfo()); - return; + return Task.CompletedTask; } var commandType = AbpCliOptions.Commands[commandLineArgs.Target]; @@ -39,6 +39,8 @@ namespace Volo.Abp.Cli.Commands var command = (IConsoleCommand) scope.ServiceProvider.GetRequiredService(commandType); Logger.LogInformation(command.GetUsageInfo()); } + + return Task.CompletedTask; } public string GetUsageInfo() diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs index 4bfe3ef4b8..76b7584ae8 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs @@ -48,7 +48,7 @@ namespace Volo.Abp.Cli.ProjectModification .ConfigureAwait(false)).ConfigureAwait(false); } - public async Task AddAsync(string projectFile, NugetPackageInfo package) + public Task AddAsync(string projectFile, NugetPackageInfo package) { using (DirectoryHelper.ChangeCurrentDirectory(Path.GetDirectoryName(projectFile))) { @@ -71,6 +71,8 @@ namespace Volo.Abp.Cli.ProjectModification Logger.LogInformation("Successfully installed."); } + + return Task.CompletedTask; } protected virtual async Task FindNugetPackageInfoAsync(string moduleName) diff --git a/framework/test/SimpleConsoleDemo/Program.cs b/framework/test/SimpleConsoleDemo/Program.cs index 82e6d0a660..3ac0c8b23b 100644 --- a/framework/test/SimpleConsoleDemo/Program.cs +++ b/framework/test/SimpleConsoleDemo/Program.cs @@ -10,7 +10,7 @@ namespace SimpleConsoleDemo { class Program { - static async Task Main(string[] args) + static void Main(string[] args) { using (var application = AbpApplicationFactory.Create(options => { @@ -42,7 +42,6 @@ namespace SimpleConsoleDemo writer.Write(); } - Console.WriteLine(); Console.WriteLine("Press ENTER to exit!"); Console.ReadLine(); diff --git a/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo/Abp/BackgroundJobs/BackgroundJobExecuter_Tests.cs b/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo/Abp/BackgroundJobs/BackgroundJobExecuter_Tests.cs index 81c76f2559..50d90d0196 100644 --- a/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo/Abp/BackgroundJobs/BackgroundJobExecuter_Tests.cs +++ b/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo/Abp/BackgroundJobs/BackgroundJobExecuter_Tests.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.BackgroundJobs //Act - _backgroundJobExecuter.Execute( + await _backgroundJobExecuter.ExecuteAsync( new JobExecutionContext( ServiceProvider, typeof(MyJob), @@ -46,7 +46,7 @@ namespace Volo.Abp.BackgroundJobs //Act - _backgroundJobExecuter.Execute( + await _backgroundJobExecuter.ExecuteAsync( new JobExecutionContext( ServiceProvider, typeof(MyAsyncJob), diff --git a/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/DistributedCache_Tests.cs b/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/DistributedCache_Tests.cs index 3db7fa9aaf..50a4a76763 100644 --- a/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/DistributedCache_Tests.cs +++ b/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/DistributedCache_Tests.cs @@ -38,7 +38,7 @@ namespace Volo.Abp.Caching } [Fact] - public async Task GetOrAddAsync() + public void GetOrAdd() { var personCache = GetRequiredService>(); @@ -49,12 +49,12 @@ namespace Volo.Abp.Caching bool factoryExecuted = false; - var cacheItem = await personCache.GetOrAddAsync(cacheKey, - async () => + var cacheItem = personCache.GetOrAdd(cacheKey, + () => { factoryExecuted = true; return new PersonCacheItem(personName); - }).ConfigureAwait(false); + }); factoryExecuted.ShouldBeTrue(); cacheItem.Name.ShouldBe(personName); @@ -63,12 +63,12 @@ namespace Volo.Abp.Caching factoryExecuted = false; - cacheItem = await personCache.GetOrAddAsync(cacheKey, - async () => + cacheItem = personCache.GetOrAdd(cacheKey, + () => { factoryExecuted = true; return new PersonCacheItem(personName); - }).ConfigureAwait(false); + }); factoryExecuted.ShouldBeFalse(); cacheItem.Name.ShouldBe(personName); @@ -165,12 +165,12 @@ namespace Volo.Abp.Caching bool factoryExecuted = false; - var cacheItem = await personCache.GetOrAddAsync(cacheKey, - async () => + var cacheItem = personCache.GetOrAdd(cacheKey, + () => { factoryExecuted = true; return new PersonCacheItem(personName); - }).ConfigureAwait(false); + }); factoryExecuted.ShouldBeTrue(); cacheItem.Name.ShouldBe(personName); diff --git a/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWork_Events_Tests.cs b/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWork_Events_Tests.cs index 9ee2cae2f3..7d9a176076 100644 --- a/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWork_Events_Tests.cs +++ b/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWork_Events_Tests.cs @@ -24,7 +24,12 @@ namespace Volo.Abp.Uow using (var uow = _unitOfWorkManager.Begin()) { - uow.OnCompleted(async () => completed = true); + uow.OnCompleted(() => + { + completed = true; + return Task.CompletedTask; + }); + uow.Disposed += (sender, args) => disposed = true; await uow.CompleteAsync().ConfigureAwait(false); From c1f02ba06621d381a86b3ff2a36036b7a7dfcd8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 3 Jan 2020 14:55:04 +0300 Subject: [PATCH 036/411] Implemented TokenCleanupService --- .../Volo.Abp.IdentityServer.Domain.csproj | 1 + .../IdentityServer/Devices/DeviceFlowStore.cs | 1 - .../Devices/IDeviceFlowCodesRepository.cs | 7 ++ .../Grants/IPersistentGrantRepository.cs | 6 ++ .../Tokens/TokenCleanupBackgroundWorker.cs | 34 +++++++ .../Tokens/TokenCleanupOptions.cs | 34 +++++++ .../Tokens/TokenCleanupService.cs | 88 +++++++++++++++++++ .../Devices/DeviceFlowCodesRepository.cs | 13 +++ .../Grants/PersistedGrantRepository.cs | 27 ++++-- .../MongoDB/MongoDeviceFlowCodesRepository.cs | 15 ++++ .../MongoDB/MongoPersistedGrantRepository.cs | 14 ++- 11 files changed, 232 insertions(+), 8 deletions(-) create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupBackgroundWorker.cs create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupOptions.cs create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupService.cs 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 70d0fbcba7..e7f4a6bc43 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 @@ -20,6 +20,7 @@ + diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowStore.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowStore.cs index 771e3acbde..4bd55ab2c6 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowStore.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowStore.cs @@ -1,5 +1,4 @@ using System; -using System.IdentityModel.Tokens.Jwt; using System.Threading.Tasks; using IdentityModel; using IdentityServer4.Models; diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/IDeviceFlowCodesRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/IDeviceFlowCodesRepository.cs index 41c7e92574..b6bcb69bed 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/IDeviceFlowCodesRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/IDeviceFlowCodesRepository.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; @@ -16,5 +17,11 @@ namespace Volo.Abp.IdentityServer.Devices string deviceCode, CancellationToken cancellationToken = default ); + + Task> GetListByExpirationAsync( + DateTime maxExpirationDate, + int maxResultCount, + CancellationToken cancellationToken = default + ); } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/IPersistentGrantRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/IPersistentGrantRepository.cs index 6e316806b6..65cfabd7e7 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/IPersistentGrantRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/IPersistentGrantRepository.cs @@ -18,6 +18,12 @@ namespace Volo.Abp.IdentityServer.Grants CancellationToken cancellationToken = default ); + Task> GetListByExpirationAsync( + DateTime maxExpirationDate, + int maxResultCount, + CancellationToken cancellationToken = default + ); + Task DeleteAsync( string subjectId, string clientId, diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupBackgroundWorker.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupBackgroundWorker.cs new file mode 100644 index 0000000000..4bec8318eb --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupBackgroundWorker.cs @@ -0,0 +1,34 @@ +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Volo.Abp.BackgroundWorkers; +using Volo.Abp.Threading; + +namespace Volo.Abp.IdentityServer.Tokens +{ + public class TokenCleanupBackgroundWorker : AsyncPeriodicBackgroundWorkerBase + { + protected TokenCleanupOptions Options { get; } + + public TokenCleanupBackgroundWorker( + AbpTimer timer, + IServiceScopeFactory serviceScopeFactory, + IOptions options) + : base( + timer, + serviceScopeFactory) + { + Options = options.Value; + timer.Period = Options.CleanupPeriod; + } + + protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext) + { + await workerContext + .ServiceProvider + .GetRequiredService() + .CleanAsync() + .ConfigureAwait(false); + } + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupOptions.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupOptions.cs new file mode 100644 index 0000000000..3252008506 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupOptions.cs @@ -0,0 +1,34 @@ +using Volo.Abp.BackgroundWorkers; + +namespace Volo.Abp.IdentityServer.Tokens +{ + public class TokenCleanupOptions + { + /// + /// Default: 3,600,000 ms. + /// + public int CleanupPeriod { get; set; } = 3_600_000; + + /// + /// Default value: 100. + /// + public int CleanupBatchSize { get; set; } = 100; + + /// + /// The number of loop if there are + /// more than tokens in the database. + /// So, if is 10 and is 100, + /// then the cleanup worker will clean 1,000 items in one at max. + /// + /// Default value: 10. + /// + public int CleanupLoopCount { get; set; } = 10; + + /// + /// Default value: true. + /// If is false, + /// this property is ignored and the cleanup worker doesn't work for this application instance. + /// + public bool EnableCleanup { get; set; } = true; + } +} \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupService.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupService.cs new file mode 100644 index 0000000000..ac38f792c1 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupService.cs @@ -0,0 +1,88 @@ +using System.Threading.Tasks; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; +using Volo.Abp.IdentityServer.Devices; +using Volo.Abp.IdentityServer.Grants; +using Volo.Abp.Timing; +using Volo.Abp.Uow; + +namespace Volo.Abp.IdentityServer.Tokens +{ + public class TokenCleanupService : ITransientDependency + { + protected IPersistentGrantRepository PersistentGrantRepository { get; } + protected IDeviceFlowCodesRepository DeviceFlowCodesRepository { get; } + protected IClock Clock { get; } + protected TokenCleanupOptions Options { get; } + + public TokenCleanupService( + IPersistentGrantRepository persistentGrantRepository, + IDeviceFlowCodesRepository deviceFlowCodesRepository, + IClock clock, + IOptions options) + { + PersistentGrantRepository = persistentGrantRepository; + DeviceFlowCodesRepository = deviceFlowCodesRepository; + Clock = clock; + Options = options.Value; + } + + public virtual async Task CleanAsync() + { + await RemoveGrantsAsync() + .ConfigureAwait(false); + + await RemoveDeviceCodesAsync() + .ConfigureAwait(false); + } + + [UnitOfWork] + protected virtual async Task RemoveGrantsAsync() + { + for (int i = 0; i < Options.CleanupLoopCount; i++) + { + var persistentGrants = await PersistentGrantRepository + .GetListByExpirationAsync(Clock.Now, Options.CleanupBatchSize) + .ConfigureAwait(false); + + //TODO: Can be optimized if the repository implements the batch deletion + foreach (var persistentGrant in persistentGrants) + { + await PersistentGrantRepository + .DeleteAsync(persistentGrant) + .ConfigureAwait(false); + } + + //No need to continue to query if it gets more than max items. + if (persistentGrants.Count < Options.CleanupBatchSize) + { + break; + } + } + } + + protected virtual async Task RemoveDeviceCodesAsync() + { + for (int i = 0; i < Options.CleanupLoopCount; i++) + { + var deviceFlowCodeses = await DeviceFlowCodesRepository + .GetListByExpirationAsync(Clock.Now, Options.CleanupBatchSize) + .ConfigureAwait(false); + + //TODO: Can be optimized if the repository implements the batch deletion + foreach (var deviceFlowCodes in deviceFlowCodeses) + { + await DeviceFlowCodesRepository + .DeleteAsync(deviceFlowCodes) + .ConfigureAwait(false); + } + + //No need to continue to query if it gets more than max items. + if (deviceFlowCodeses.Count < Options.CleanupBatchSize) + { + break; + } + } + } + } +} \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs index d5ac9ae815..a8d2bce3ce 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using System.Linq; using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; @@ -34,5 +36,16 @@ namespace Volo.Abp.IdentityServer.Devices .FirstOrDefaultAsync(d => d.DeviceCode == deviceCode, GetCancellationToken(cancellationToken)) .ConfigureAwait(false); } + + public async Task> GetListByExpirationAsync(DateTime maxExpirationDate, int maxResultCount, + CancellationToken cancellationToken = default) + { + return await DbSet + .Where(x => x.Expiration != null && x.Expiration < maxExpirationDate) + .OrderBy(x => x.ClientId) + .Take(maxResultCount) + .ToListAsync(GetCancellationToken(cancellationToken)) + .ConfigureAwait(false); + } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistedGrantRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistedGrantRepository.cs index ca404c84e5..cf208c7875 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistedGrantRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistedGrantRepository.cs @@ -18,21 +18,36 @@ namespace Volo.Abp.IdentityServer.Grants } - public Task FindByKeyAsync( + public async Task FindByKeyAsync( string key, CancellationToken cancellationToken = default) { - return DbSet - .FirstOrDefaultAsync(x => x.Key == key, GetCancellationToken(cancellationToken)); + return await DbSet + .FirstOrDefaultAsync(x => x.Key == key, GetCancellationToken(cancellationToken)) + .ConfigureAwait(false); } - public Task> GetListBySubjectIdAsync( + public async Task> GetListBySubjectIdAsync( string subjectId, CancellationToken cancellationToken = default) { - return DbSet + return await DbSet .Where(x => x.SubjectId == subjectId) - .ToListAsync(GetCancellationToken(cancellationToken)); + .ToListAsync(GetCancellationToken(cancellationToken)) + .ConfigureAwait(false); + } + + public async Task> GetListByExpirationAsync( + DateTime maxExpirationDate, + int maxResultCount, + CancellationToken cancellationToken = default) + { + return await DbSet + .Where(x => x.Expiration != null && x.Expiration < maxExpirationDate) + .OrderBy(x => x.ClientId) + .Take(maxResultCount) + .ToListAsync(GetCancellationToken(cancellationToken)) + .ConfigureAwait(false); } public async Task DeleteAsync( diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs index 3ad3ecf104..86daac80a9 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs @@ -1,6 +1,8 @@ using System; +using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; +using MongoDB.Driver; using MongoDB.Driver.Linq; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.IdentityServer.Devices; @@ -32,5 +34,18 @@ namespace Volo.Abp.IdentityServer.MongoDB .FirstOrDefaultAsync(d => d.DeviceCode == deviceCode, GetCancellationToken(cancellationToken)) .ConfigureAwait(false); } + + public async Task> GetListByExpirationAsync( + DateTime maxExpirationDate, + int maxResultCount, + CancellationToken cancellationToken = default) + { + return await GetMongoQueryable() + .Where(x => x.Expiration != null && x.Expiration < maxExpirationDate) + .OrderBy(x => x.ClientId) + .Take(maxResultCount) + .ToListAsync(GetCancellationToken(cancellationToken)) + .ConfigureAwait(false); + } } } \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoPersistedGrantRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoPersistedGrantRepository.cs index 3ee17df174..4b414482db 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoPersistedGrantRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoPersistedGrantRepository.cs @@ -27,7 +27,19 @@ namespace Volo.Abp.IdentityServer.MongoDB { return await GetMongoQueryable() .Where(x => x.SubjectId == subjectId) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)) + .ConfigureAwait(false); + } + + public async Task> GetListByExpirationAsync(DateTime maxExpirationDate, int maxResultCount, + CancellationToken cancellationToken = default) + { + return await GetMongoQueryable() + .Where(x => x.Expiration != null && x.Expiration < maxExpirationDate) + .OrderBy(x => x.ClientId) + .Take(maxResultCount) + .ToListAsync(GetCancellationToken(cancellationToken)) + .ConfigureAwait(false); } public async Task DeleteAsync(string subjectId, string clientId, CancellationToken cancellationToken = default) From 2d7df8e75e83c1e21ec831d331c5c5ad62602c4b Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Fri, 3 Jan 2020 15:11:51 +0300 Subject: [PATCH 037/411] docs scribn parameter language code --- .../src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs index b4ba841169..d2173f8790 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs @@ -393,7 +393,7 @@ namespace Volo.Docs.Pages.Documents.Project { await SetDocumentPreferences(); SetUserPreferences(); - + UserPreferences.Add("Document_Language_Code", LanguageCode); Document.Content = await _documentSectionRenderer.RenderAsync(Document.Content, UserPreferences); var converter = _documentToHtmlConverterFactory.Create(Document.Format ?? Project.Format); From aea7eed317250fcd584c7a4972f9f369e80e5c2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 3 Jan 2020 15:13:05 +0300 Subject: [PATCH 038/411] Added test for the TokenCleanupService --- .../Tokens/TokenCleanupService_Tests.cs | 37 +++++++++++++ .../AbpIdentityServerTestDataBuilder.cs | 52 ++++++++++++++++++- 2 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Tokens/TokenCleanupService_Tests.cs diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Tokens/TokenCleanupService_Tests.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Tokens/TokenCleanupService_Tests.cs new file mode 100644 index 0000000000..8de564cc23 --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Tokens/TokenCleanupService_Tests.cs @@ -0,0 +1,37 @@ +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp.IdentityServer.Devices; +using Volo.Abp.IdentityServer.Grants; +using Xunit; + +namespace Volo.Abp.IdentityServer.Tokens +{ + public class TokenCleanupService_Tests : AbpIdentityServerTestBase + { + private readonly IPersistentGrantRepository _persistentGrantRepository; + private readonly IDeviceFlowCodesRepository _deviceFlowCodesRepository; + private readonly TokenCleanupService _tokenCleanupService; + + public TokenCleanupService_Tests() + { + _persistentGrantRepository = GetRequiredService(); + _deviceFlowCodesRepository = GetRequiredService(); + _tokenCleanupService = GetRequiredService(); + } + + [Fact] + public async Task Should_Clear_Expired_Tokens() + { + var persistentGrantCount = await _persistentGrantRepository.GetCountAsync(); + var deviceFlowCodesCount = await _deviceFlowCodesRepository.GetCountAsync(); + + await _tokenCleanupService.CleanAsync(); + + (await _persistentGrantRepository.GetCountAsync()) + .ShouldBe(persistentGrantCount - 1); + + (await _deviceFlowCodesRepository.GetCountAsync()) + .ShouldBe(deviceFlowCodesCount - 1); + } + } +} diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs index e1676f2408..849dd874d5 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs @@ -6,8 +6,10 @@ using Volo.Abp.Guids; using Volo.Abp.Identity; using Volo.Abp.IdentityServer.ApiResources; using Volo.Abp.IdentityServer.Clients; +using Volo.Abp.IdentityServer.Devices; using Volo.Abp.IdentityServer.Grants; using Volo.Abp.IdentityServer.IdentityResources; +using Volo.Abp.Timing; namespace Volo.Abp.IdentityServer { @@ -19,7 +21,9 @@ namespace Volo.Abp.IdentityServer private readonly IIdentityResourceRepository _identityResourceRepository; private readonly IIdentityClaimTypeRepository _identityClaimTypeRepository; private readonly IPersistentGrantRepository _persistentGrantRepository; + private readonly IDeviceFlowCodesRepository _deviceFlowCodesRepository; private readonly AbpIdentityServerTestData _testData; + private readonly IClock _clock; public AbpIdentityServerTestDataBuilder( IGuidGenerator guidGenerator, @@ -28,7 +32,9 @@ namespace Volo.Abp.IdentityServer IIdentityResourceRepository identityResourceRepository, IIdentityClaimTypeRepository identityClaimTypeRepository, AbpIdentityServerTestData testData, - IPersistentGrantRepository persistentGrantRepository) + IPersistentGrantRepository persistentGrantRepository, + IDeviceFlowCodesRepository deviceFlowCodesRepository, + IClock clock) { _testData = testData; _guidGenerator = guidGenerator; @@ -37,10 +43,13 @@ namespace Volo.Abp.IdentityServer _identityResourceRepository = identityResourceRepository; _identityClaimTypeRepository = identityClaimTypeRepository; _persistentGrantRepository = persistentGrantRepository; + _clock = clock; + _deviceFlowCodesRepository = deviceFlowCodesRepository; } public async Task BuildAsync() { + await AddDeviceFlowCodes().ConfigureAwait(false); await AddPersistedGrants().ConfigureAwait(false); await AddIdentityResources().ConfigureAwait(false); await AddApiResources().ConfigureAwait(false); @@ -48,6 +57,34 @@ namespace Volo.Abp.IdentityServer await AddClaimTypes().ConfigureAwait(false); } + private async Task AddDeviceFlowCodes() + { + await _deviceFlowCodesRepository.InsertAsync( + new DeviceFlowCodes(_guidGenerator.Create()) + { + ClientId = "c1", + DeviceCode = "DeviceCode1", + Expiration = _clock.Now.AddDays(1), + Data = "", + UserCode = "DeviceFlowCodesUserCode1", + SubjectId = "DeviceFlowCodesSubjectId1" + } + ); + + await _deviceFlowCodesRepository.InsertAsync( + new DeviceFlowCodes(_guidGenerator.Create()) + { + ClientId = "c1", + DeviceCode = "DeviceCode2", + Expiration = _clock.Now.AddDays(-1), + Data = "", + UserCode = "DeviceFlowCodesUserCode2", + SubjectId = "DeviceFlowCodesSubjectId2" + } + ); + + } + private async Task AddPersistedGrants() { await _persistentGrantRepository.InsertAsync(new PersistedGrant(_guidGenerator.Create()) @@ -74,7 +111,18 @@ namespace Volo.Abp.IdentityServer SubjectId = "PersistedGrantSubjectId3", ClientId = "c1", Type = "c1type", - Data = "" + Data = "", + Expiration = _clock.Now.AddDays(1), + }).ConfigureAwait(false); + + await _persistentGrantRepository.InsertAsync(new PersistedGrant(_guidGenerator.Create()) + { + Key = "PersistedGrantKey_Expired1", + SubjectId = "PersistedGrantSubjectId_Expired1", + ClientId = "c1", + Type = "c1type", + Data = "", + Expiration = _clock.Now.AddDays(-1) }).ConfigureAwait(false); } From 26e8c88d2f434be408f7e7332192cc53b18aee02 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Fri, 3 Jan 2020 15:17:09 +0300 Subject: [PATCH 039/411] docs scriban pass parameter document_version --- .../src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs index 75672afdf1..be0c95d5ea 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs @@ -392,9 +392,11 @@ namespace Volo.Docs.Pages.Documents.Project private async Task ConvertDocumentContentToHtmlAsync() { await SetDocumentPreferencesAsync(); - SetUserPreferences(); + UserPreferences.Add("Document_Language_Code", LanguageCode); + UserPreferences.Add("Document_Version", Version); + Document.Content = await _documentSectionRenderer.RenderAsync(Document.Content, UserPreferences); var converter = _documentToHtmlConverterFactory.Create(Document.Format ?? Project.Format); From 70a2b13d43dcb88ab7cb299fe9b7c38cdd7b4d87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 3 Jan 2020 15:47:03 +0300 Subject: [PATCH 040/411] Added tests for the DeviceFlowStore. --- .../Devices/DeviceFlowStore_Tests.cs | 95 +++++++++++++++++++ .../AbpIdentityServerTestDataBuilder.cs | 2 +- 2 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Devices/DeviceFlowStore_Tests.cs diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Devices/DeviceFlowStore_Tests.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Devices/DeviceFlowStore_Tests.cs new file mode 100644 index 0000000000..7d4c630de7 --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Devices/DeviceFlowStore_Tests.cs @@ -0,0 +1,95 @@ +using System.Linq; +using System.Security.Claims; +using System.Threading.Tasks; +using IdentityModel; +using IdentityServer4.Models; +using IdentityServer4.Stores; +using Shouldly; +using Xunit; + +namespace Volo.Abp.IdentityServer.Devices +{ + public class DeviceFlowStore_Tests : AbpIdentityServerTestBase + { + private readonly IDeviceFlowStore _deviceFlowStore; + + public DeviceFlowStore_Tests() + { + _deviceFlowStore = GetRequiredService(); + } + + [Fact] + public async Task StoreDeviceAuthorizationAsync() + { + await _deviceFlowStore.StoreDeviceAuthorizationAsync( + "DeviceCode-Test1", + "UserCode-Test1", + new DeviceCode + { + ClientId = "ClientId1", + AuthorizedScopes = new string[] { "s1", "s2" }, + IsAuthorized = true, + Lifetime = 42, + RequestedScopes = new string[] { "rs1" }, + Subject = new ClaimsPrincipal( + new[] + { + new ClaimsIdentity(new[] + { + new Claim(JwtClaimTypes.Subject, "sid1") + }) + } + ) + } + ); + + void Check(DeviceCode deviceCode) + { + deviceCode.ClientId.ShouldBe("ClientId1"); + deviceCode.AuthorizedScopes.ShouldNotBeNull(); + deviceCode.AuthorizedScopes.Count().ShouldBe(2); + deviceCode.AuthorizedScopes.ShouldContain("s1"); + deviceCode.AuthorizedScopes.ShouldContain("s2"); + deviceCode.IsAuthorized.ShouldBeTrue(); + deviceCode.Lifetime.ShouldBe(42); + deviceCode.RequestedScopes.ShouldNotBeNull(); + deviceCode.RequestedScopes.Count().ShouldBe(1); + deviceCode.RequestedScopes.ShouldContain("rs1"); + deviceCode.Subject.ShouldNotBeNull(); + deviceCode.Subject.Claims.ShouldContain(x => x.Type == JwtClaimTypes.Subject && x.Value == "sid1"); + } + + Check(await _deviceFlowStore.FindByUserCodeAsync("UserCode-Test1")); + Check(await _deviceFlowStore.FindByDeviceCodeAsync("DeviceCode-Test1")); + } + + [Fact] + public async Task RemoveByDeviceCodeAsync() + { + (await _deviceFlowStore.FindByDeviceCodeAsync("DeviceCode1")).ShouldNotBeNull(); + + await _deviceFlowStore.RemoveByDeviceCodeAsync("DeviceCode1"); + + (await _deviceFlowStore.FindByDeviceCodeAsync("DeviceCode1")).ShouldBeNull(); + } + + [Fact] + public async Task UpdateByDeviceCodeAsync() + { + var deviceCode = await _deviceFlowStore.FindByDeviceCodeAsync("DeviceCode1"); + deviceCode.ShouldNotBeNull(); + deviceCode.Lifetime.ShouldBe(42); + + await _deviceFlowStore.UpdateByUserCodeAsync( + "DeviceFlowCodesUserCode1", + new DeviceCode + { + Lifetime = 43 + } + ); + + deviceCode = await _deviceFlowStore.FindByDeviceCodeAsync("DeviceCode1"); + deviceCode.Lifetime.ShouldBe(43); + } + } +} diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs index 849dd874d5..ee6c8c59b6 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs @@ -65,7 +65,7 @@ namespace Volo.Abp.IdentityServer ClientId = "c1", DeviceCode = "DeviceCode1", Expiration = _clock.Now.AddDays(1), - Data = "", + Data = "{\"Lifetime\":\"42\"}", UserCode = "DeviceFlowCodesUserCode1", SubjectId = "DeviceFlowCodesSubjectId1" } From cc9ea5983cae04be8044b00f3dbd344bb61c49e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 3 Jan 2020 15:59:19 +0300 Subject: [PATCH 041/411] Add TokenCleanupBackgroundWorker to the BackgroundWorkerManager. --- .../AbpIdentityServerDomainModule.cs | 17 +++++++++++++++++ .../Tokens/TokenCleanupOptions.cs | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs index 7c22dccf0e..fa1a65f556 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs @@ -2,9 +2,12 @@ using IdentityServer4.Stores; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; +using Microsoft.Extensions.Options; using Volo.Abp.AutoMapper; +using Volo.Abp.BackgroundWorkers; using Volo.Abp.Caching; using Volo.Abp.Identity; +using Volo.Abp.IdentityServer.Tokens; using Volo.Abp.Modularity; using Volo.Abp.Security; using Volo.Abp.Validation; @@ -76,5 +79,19 @@ namespace Volo.Abp.IdentityServer identityServerBuilder.AddInMemoryIdentityResources(configuration.GetSection("IdentityServer:IdentityResources")); } } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + var options = context.ServiceProvider.GetRequiredService>().Value; + if (options.IsCleanupEnabled) + { + context.ServiceProvider + .GetRequiredService() + .Add( + context.ServiceProvider + .GetRequiredService() + ); + } + } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupOptions.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupOptions.cs index 3252008506..816ef6af15 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupOptions.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupOptions.cs @@ -29,6 +29,6 @@ namespace Volo.Abp.IdentityServer.Tokens /// If is false, /// this property is ignored and the cleanup worker doesn't work for this application instance. /// - public bool EnableCleanup { get; set; } = true; + public bool IsCleanupEnabled { get; set; } = true; } } \ No newline at end of file From e134be0fec07b2a4a601cafa3d6d72b16df72f23 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Fri, 3 Jan 2020 16:00:13 +0300 Subject: [PATCH 042/411] Update Docs.md --- docs/en/Modules/Docs.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/en/Modules/Docs.md b/docs/en/Modules/Docs.md index 0a74d7ebde..dbafe910da 100644 --- a/docs/en/Modules/Docs.md +++ b/docs/en/Modules/Docs.md @@ -501,6 +501,10 @@ You can also use variables in a text, adding **_Value** postfix to its key: This document assumes that you prefer to use **{{ UI_Value }}** as the UI framework and **{{ DB_Value }}** as the database provider. ```` +Also, **Document_Language_Code** and **Document_Version** keys are pre-defined if you want to get the language code or the version of the current document (This may be useful for creating links that redirects to another documentation system in another domain). + +------ + **IMPORTANT NOTICE**: Scriban uses "{{" and "}}" for syntax. Therefore, you must use escape blocks if you are going to use those in your document (an Angular document, for example). See [Scriban docs]( ) for more information. ### 8- Creating the Navigation Document From 42f80ecdbbb6fe6248f56eb3fda8e434f3a0b97f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 3 Jan 2020 16:00:34 +0300 Subject: [PATCH 043/411] Add missing AbpBackgroundWorkersModule dependency. --- .../Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs index fa1a65f556..0ff798e7fd 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs @@ -20,7 +20,8 @@ namespace Volo.Abp.IdentityServer typeof(AbpIdentityDomainModule), typeof(AbpSecurityModule), typeof(AbpCachingModule), - typeof(AbpValidationModule) + typeof(AbpValidationModule), + typeof(AbpBackgroundWorkersModule) )] public class AbpIdentityServerDomainModule : AbpModule { From a36106c51fc0e471c548c62ec126dbfe5b62ebe5 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Fri, 3 Jan 2020 16:32:39 +0300 Subject: [PATCH 044/411] refactor --- .../Pages/Documents/Project/Index.cshtml.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs index be0c95d5ea..c5188b3760 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs @@ -446,18 +446,18 @@ namespace Volo.Docs.Pages.Documents.Project var query = Request.Query; - foreach (var keyValue in query) + foreach (var (key, value) in query) { - if (UserPreferences.ContainsKey(keyValue.Key)) + if (UserPreferences.ContainsKey(key)) { - UserPreferences.Remove(keyValue.Key); - UserPreferences.Remove(keyValue.Key + "_Value"); + UserPreferences.Remove(key); + UserPreferences.Remove(key + "_Value"); } - UserPreferences.Add(keyValue.Key, keyValue.Value); - UserPreferences.Add(keyValue.Key + "_Value", - DocumentPreferences.Parameters?.FirstOrDefault(p => p.Name == keyValue.Key)?.Values - .FirstOrDefault(v => v.Key == keyValue.Value).Value); + UserPreferences.Add(key, value); + UserPreferences.Add(key + "_Value", + DocumentPreferences.Parameters?.FirstOrDefault(p => p.Name == key)?.Values + .FirstOrDefault(v => v.Key == value).Value); } if (DocumentPreferences?.Parameters == null) From 383e3e1e50ea0788a8bd3ba0ceaeef37061e0fa4 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 3 Jan 2020 17:52:13 +0300 Subject: [PATCH 045/411] feat(theme-shared): create paginator component #2537 --- .../paginator/paginator.component.html | 38 ++++++++++++++ .../paginator/paginator.component.ts | 51 +++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/components/paginator/paginator.component.html create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/components/paginator/paginator.component.ts diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/paginator/paginator.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/paginator/paginator.component.html new file mode 100644 index 0000000000..56e1e5545f --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/paginator/paginator.component.html @@ -0,0 +1,38 @@ + diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/paginator/paginator.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/paginator/paginator.component.ts new file mode 100644 index 0000000000..453b79193d --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/paginator/paginator.component.ts @@ -0,0 +1,51 @@ +import { Component, Input, OnInit, Output, EventEmitter } from '@angular/core'; + +@Component({ + selector: 'abp-paginator', + templateUrl: 'paginator.component.html', +}) +export class PaginatorComponent implements OnInit { + private _value = 1; + @Input() + get value(): number { + return this._value; + } + set value(newValue: number) { + if (newValue < 1) return; + else if (newValue > this.totalPages) return; + + this._value = newValue; + this.valueChange.emit(newValue); + } + + @Output() + readonly valueChange = new EventEmitter(); + + @Input() + totalPages = 0; + + get pageArray(): number[] { + const count = this.totalPages < 5 ? this.totalPages : 5; + + if (this.value === 1 || this.value === 2) { + return Array.from(new Array(count)).map((_, index) => index + 1); + } else if (this.value === this.totalPages || this.value === this.totalPages - 1) { + return Array.from(new Array(count)).map((_, index) => this.totalPages - count + 1 + index); + } else { + return [this.value - 2, this.value - 1, this.value, this.value + 1, this.value + 2]; + } + } + + ngOnInit() { + if (!this.value || this.value < 1 || this.value > this.totalPages) { + this.value = 1; + } + } + + changePage(page: number) { + if (page < 1) return; + else if (page > this.totalPages) return; + + this.value = page; + } +} From a262ac1a8dc8b5eb80048f5e1cfe63bbb1904517 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 3 Jan 2020 18:19:21 +0300 Subject: [PATCH 046/411] feat(theme-shared): create table component #2537 --- .../theme-shared/src/lib/components/index.ts | 4 +- .../lib/components/table/table.component.html | 26 ++++++++ .../lib/components/table/table.component.scss | 3 + .../lib/components/table/table.component.ts | 64 +++++++++++++++++++ .../src/lib/theme-shared.module.ts | 15 +++-- 5 files changed, 106 insertions(+), 6 deletions(-) create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.scss create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts index c812fc601e..13fe3365d3 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts @@ -4,6 +4,8 @@ export * from './chart/chart.component'; export * from './confirmation/confirmation.component'; export * from './loader-bar/loader-bar.component'; export * from './modal/modal.component'; +export * from './paginator/paginator.component'; +export * from './sort-order-icon/sort-order-icon.component'; export * from './table-empty-message/table-empty-message.component'; +export * from './table/table.component'; export * from './toast/toast.component'; -export * from './sort-order-icon/sort-order-icon.component'; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html new file mode 100644 index 0000000000..6f0d080e9d --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html @@ -0,0 +1,26 @@ +
+
+
+ + + + + + + + + + +
+
+ +
+
diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.scss new file mode 100644 index 0000000000..4881816a52 --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.scss @@ -0,0 +1,3 @@ +.ui-table-scrollable-wrapper { + overflow: auto; +} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts new file mode 100644 index 0000000000..f9811c219c --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts @@ -0,0 +1,64 @@ +import { Component, OnInit, Input, TemplateRef, Output, EventEmitter } from '@angular/core'; + +@Component({ + selector: 'abp-table', + templateUrl: 'table.component.html', + styleUrls: ['table.component.scss'], +}) +export class TableComponent implements OnInit { + private _totalRecords: number; + + @Input() + value: any[]; + + @Input() + headerTemplate: TemplateRef; + + @Input() + bodyTemplate: TemplateRef; + + @Input() + colgroupTemplate: TemplateRef; + + @Input() + maxHeight: number; + + @Input() + rows: number; + + @Output() + readonly pageChange = new EventEmitter(); + + page = 1; + + @Input() + get totalRecords(): number { + return this._totalRecords || this.value.length; + } + set totalRecords(newValue: number) { + if (newValue < 0) this._totalRecords = 0; + + this._totalRecords = newValue; + } + + get totalPages(): number { + if (!this.rows) { + return; + } + + return Math.ceil(this.totalRecords / this.rows); + } + + get slicedValue(): any[] { + if (!this.rows || this.rows > this.value.length) { + return this.value; + } + + const start = (this.page - 1) * this.rows; + return this.value.slice(start, start + this.rows); + } + + constructor() {} + + ngOnInit() {} +} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts index b40a4ea05a..370262be97 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts @@ -1,9 +1,10 @@ import { CoreModule, LazyLoadService } from '@abp/ng.core'; +import { DatePipe } from '@angular/common'; import { APP_INITIALIZER, Injector, ModuleWithProviders, NgModule } from '@angular/core'; +import { NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap'; import { NgxValidateCoreModule } from '@ngx-validate/core'; import { MessageService } from 'primeng/components/common/messageservice'; import { ToastModule } from 'primeng/toast'; -import { forkJoin } from 'rxjs'; import { BreadcrumbComponent } from './components/breadcrumb/breadcrumb.component'; import { ButtonComponent } from './components/button/button.component'; import { ChartComponent } from './components/chart/chart.component'; @@ -13,16 +14,16 @@ import { LoaderBarComponent } from './components/loader-bar/loader-bar.component import { ModalComponent } from './components/modal/modal.component'; import { SortOrderIconComponent } from './components/sort-order-icon/sort-order-icon.component'; import { TableEmptyMessageComponent } from './components/table-empty-message/table-empty-message.component'; +import { TableComponent } from './components/table/table.component'; import { ToastComponent } from './components/toast/toast.component'; import styles from './constants/styles'; import { TableSortDirective } from './directives/table-sort.directive'; import { ErrorHandler } from './handlers/error.handler'; -import { chartJsLoaded$ } from './utils/widget-utils'; import { RootParams } from './models/common'; -import { HTTP_ERROR_CONFIG, httpErrorConfigFactory } from './tokens/http-error.token'; -import { NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap'; +import { httpErrorConfigFactory, HTTP_ERROR_CONFIG } from './tokens/http-error.token'; import { DateParserFormatter } from './utils/date-parser-formatter'; -import { DatePipe } from '@angular/common'; +import { chartJsLoaded$ } from './utils/widget-utils'; +import { PaginatorComponent } from './components/paginator/paginator.component'; export function appendScript(injector: Injector) { const fn = () => { @@ -45,6 +46,8 @@ export function appendScript(injector: Injector) { HttpErrorWrapperComponent, LoaderBarComponent, ModalComponent, + PaginatorComponent, + TableComponent, TableEmptyMessageComponent, ToastComponent, SortOrderIconComponent, @@ -57,6 +60,8 @@ export function appendScript(injector: Injector) { ConfirmationComponent, LoaderBarComponent, ModalComponent, + PaginatorComponent, + TableComponent, TableEmptyMessageComponent, ToastComponent, SortOrderIconComponent, From 6c7363c4f98efd88715881780250325a2c0b7f50 Mon Sep 17 00:00:00 2001 From: maliming Date: Sat, 4 Jan 2020 13:10:33 +0800 Subject: [PATCH 047/411] Fix DocumentPreferences may be null. --- .../src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs index c5188b3760..c653068baa 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs @@ -439,7 +439,7 @@ namespace Volo.Docs.Pages.Documents.Project var value = keyValue.Split("=")[1]; UserPreferences.Add(key, value); - UserPreferences.Add(key + "_Value", DocumentPreferences.Parameters?.FirstOrDefault(p => p.Name == key) + UserPreferences.Add(key + "_Value", DocumentPreferences?.Parameters?.FirstOrDefault(p => p.Name == key) ?.Values.FirstOrDefault(v => v.Key == value).Value); } } @@ -456,7 +456,7 @@ namespace Volo.Docs.Pages.Documents.Project UserPreferences.Add(key, value); UserPreferences.Add(key + "_Value", - DocumentPreferences.Parameters?.FirstOrDefault(p => p.Name == key)?.Values + DocumentPreferences?.Parameters?.FirstOrDefault(p => p.Name == key)?.Values .FirstOrDefault(v => v.Key == value).Value); } From 7cece34818c15bffadc10b2711681eacef4a7625 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Sat, 4 Jan 2020 13:59:16 +0800 Subject: [PATCH 048/411] Translate setting management module document --- docs/en/Modules/Setting-Management.md | 2 +- docs/zh-Hans/Modules/Setting-Management.md | 85 +++++++++++++++++++++- 2 files changed, 84 insertions(+), 3 deletions(-) diff --git a/docs/en/Modules/Setting-Management.md b/docs/en/Modules/Setting-Management.md index 39e8f8a0df..c64f1014ca 100644 --- a/docs/en/Modules/Setting-Management.md +++ b/docs/en/Modules/Setting-Management.md @@ -76,7 +76,7 @@ Setting values are cached using the [distributed cache](../Caching.md) system. A Setting Management module is extensible, just like the [setting system](../Settings.md). You can extend it by defining setting management providers. There are 5 pre-built setting management providers registered by the order below: * `DefaultValueSettingManagementProvider`: Gets the value from the default value of the setting definition. It can not set the default value since default values are hard-coded on the setting definition. -* `ConfigurationSettingManagementProvider`: Gets the value from the [IConfiguration service](Configuration.md). It can not set the configuration value because it is not possible to change the configuration values on runtime. +* `ConfigurationSettingManagementProvider`: Gets the value from the [IConfiguration service](../Configuration.md). It can not set the configuration value because it is not possible to change the configuration values on runtime. * `GlobalSettingManagementProvider`: Gets or sets the global (system-wide) value for a setting. * `TenantSettingManagementProvider`: Gets or sets the setting value for a tenant. * `UserSettingManagementProvider`: Gets the setting value for a user. diff --git a/docs/zh-Hans/Modules/Setting-Management.md b/docs/zh-Hans/Modules/Setting-Management.md index 97e8c2f3e1..31ea2505ea 100644 --- a/docs/zh-Hans/Modules/Setting-Management.md +++ b/docs/zh-Hans/Modules/Setting-Management.md @@ -1,3 +1,84 @@ -# Setting Management Module +# 设置管理模块 -TODO \ No newline at end of file +设置管理模块实现了 `ISettingStore` (参阅 [设置系统](../Settings.md)) 将设置值存储在数据库中, 并提供 `ISettingManager` 管理 (更改) 数据库中设置值的功能. + +> [启动模板](../Startup-Templates/Index.md)默认安装并配置了设置管理模块. 大部分情况下你不需要手动的添加该到模块到应用程序中. + +## ISettingManager + +`ISettingManager` 用于获取和设定设置值. 示例: + +````csharp +using System; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.SettingManagement; + +namespace Demo +{ + public class MyService : ITransientDependency + { + private readonly ISettingManager _settingManager; + + //Inject ISettingManager service + public MyService(ISettingManager settingManager) + { + _settingManager = settingManager; + } + + public async Task FooAsync() + { + Guid user1Id = ...; + Guid tenant1Id = ...; + + //Get/set a setting value for the current user or the specified user + + string layoutType1 = + await _settingManager.GetOrNullForCurrentUserAsync("App.UI.LayoutType"); + string layoutType2 = + await _settingManager.GetOrNullForUserAsync("App.UI.LayoutType", user1Id); + + await _settingManager.SetForCurrentUserAsync("App.UI.LayoutType", "LeftMenu"); + await _settingManager.SetForUserAsync(user1Id, "App.UI.LayoutType", "LeftMenu"); + + //Get/set a setting value for the current tenant or the specified tenant + + string layoutType3 = + await _settingManager.GetOrNullForCurrentTenantAsync("App.UI.LayoutType"); + string layoutType4 = + await _settingManager.GetOrNullForTenantAsync("App.UI.LayoutType", tenant1Id); + + await _settingManager.SetForCurrentTenantAsync("App.UI.LayoutType", "LeftMenu"); + await _settingManager.SetForTenantAsync(tenant1Id, "App.UI.LayoutType", "LeftMenu"); + + //Get/set a global and default setting value + + string layoutType5 = + await _settingManager.GetOrNullGlobalAsync("App.UI.LayoutType"); + string layoutType6 = + await _settingManager.GetOrNullDefaultAsync("App.UI.LayoutType"); + + await _settingManager.SetGlobalAsync("App.UI.LayoutType", "TopMenu"); + } + } +} + +```` + +你可以从不同的设置值提供程序中(默认,全局,用户,租户...等)中获取或设定设置值. + +### Setting Cache + +设置值缓存在 [分布式缓存](../Caching.md) 系统中. 建议始终使用 `ISettingManager` 更改设置值. + +## Setting Management Providers + +设置管理模块是可扩展的,像[设置系统](../Settings.md)一样. 你可以通过自定义设置管理提供程序进行扩展. 有5个预构建的设置管理程序程序按以下顺序注册: + +* `DefaultValueSettingManagementProvider`: 从设置定义的默认值中获取值,由于默认值是硬编码在设置定义上的,所以无法更改默认值. +* `ConfigurationSettingManagementProvider`:从 [IConfiguration 服务](../Configuration.md)中获取值. 由于无法在运行时更改配置值,所以无法更改配置值. +* `GlobalSettingManagementProvider`: 获取或设定设置的全局 (系统范围)值. +* `TenantSettingManagementProvider`: 获取或设定租户的设置值. +* `UserSettingManagementProvider`: 获取或设定用户的设置值. + +`ISettingManager` 在 `get/set` 方法中使用设置管理提供程序. 通常每个设置程序提供程序都在 `ISettingManagement` 服务上定义了模块方法 (比如用户设置管理程序提供定义了 `SetForUserAsync` 方法). \ No newline at end of file From c033476d0e6f6c89df92666aba52b46a9ead7459 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Sat, 4 Jan 2020 15:53:24 +0800 Subject: [PATCH 049/411] Translate connection-strings document --- docs/zh-Hans/Connection-Strings.md | 64 ++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 docs/zh-Hans/Connection-Strings.md diff --git a/docs/zh-Hans/Connection-Strings.md b/docs/zh-Hans/Connection-Strings.md new file mode 100644 index 0000000000..2df4137b2b --- /dev/null +++ b/docs/zh-Hans/Connection-Strings.md @@ -0,0 +1,64 @@ +# 连接字符串 + +ABP框架的设计是[模块化](Module-Development-Basics.md), [微服务兼容](Microservice-Architecture.md) 和 [多租户](Multi-Tenancy.md). 同时设计了连接字符串管理来支持这些场景; + +* 允许为每个模块设置单独的连接字符串,这样每个模块都可以有自己的物理数据库. 甚至可以将模块配置为使用不同的DBMS. +* 允许为每个租户设置单独的连接字符串使用单独的数据库(在SaaS应用程序中). + +它还支持混合场景; + +* 允许将模块分组到数据库 (所有的模块分组到一个共享数据库, 两个模块使用数据库A, 3个模块使用数据库B, 一个数据库使用数据库C其余的数据库使用数据库D...等.) +* 允许将租户分组到数据库中,像模块一样. +* 允许为每个租户每个模块分离数据库 (数据库过多会增加维护成本,但ABP框架支持这种需求). + +所有[预构建应用模块](Modules/Index.md)已设计为与以上场景兼容. + +## 配置连接字符串 + +参见以下配置: + +````json +"ConnectionStrings": { + "Default": "Server=localhost;Database=MyMainDb;Trusted_Connection=True;", + "AbpIdentityServer": "Server=localhost;Database=MyIdsDb;Trusted_Connection=True;", + "AbpPermissionManagement": "Server=localhost;Database=MyPermissionDb;Trusted_Connection=True;" +} +```` + +> ABP使用 `IConfiguration` 服务获取应用程序配置. 虽然在 `appsettings.json` 文件中写入配置是最简单的方法, 但它不仅限于此文件. 你可以使用环境变量, user secrets, Azure Key Vault... 等. 更多信息参阅 [配置](Configuration.md) 文档. + +以上配置定义了三个不同的连接字符串: + +* `MyMainDb` (`Default` 连接字符串)是应用程序的主连接字符串. 如果没有为模块指定连接字符串,则回退到 `Default` 连接字符串. [应用程序启动模板](Startup-Templates/Application.md) 配置为使用单个字符串, 所以所有的模块都使用单个数据库. +* `MyIdsDb` 由 [IdentityServer](Modules/IdentityServer.md) 模块使用. +* `MyPermissionDb` 由 [权限管理](Modules/Permission-Management.md) 模块使用. + +[预构建的应用程序模块](Modules/Index.md) 为连接字符串名称定义常量. 例如IdentityServer模块在 `AbpIdentityServerDbProperties` 类(位于 `Volo.Abp.IdentityServer` 命名空间)定义了 `ConnectionStringName` 常量 . 其他的模块类似的定义常量,你可以查看连接字符串的名称. + +## 设置连接字符串名称 + +模块通常使用 `ConnectionStringName` attribute 为 `DbContext` 类关联一个唯一的连接字符串名称. 示例: + +````csharp +[ConnectionStringName("AbpIdentityServer")] +public class IdentityServerDbContext + : AbpDbContext, IIdentityServerDbContext +{ +} +```` + +对于 [Entity Framework Core](Entity-Framework-Core.md) 和 [MongoDB](MongoDB.md), 写入到 `DbContext` 类 (和接口,如果有的话). + +> 如果你开发的是与数据库提供程序无关的可重用模块, 请参见 [最佳实践指南](Best-Practices/Index.md). + +## Entity Framework Core的数据库迁移 + +关系数据库需要在使用数据库之前创建数据库和数据库架构 (表, 视图...等). + +启动模板(使用 EF Core ORM) 带有一个数据库和一个 `.EntityFrameworkCore.DbMigrations` 项目,其中包含数据库的迁移文件. 该项目主要定义了一个*YourProjectName*MigrationsDbContext,它调用所有模块的 `Configure...()` 方法,例如 `builder.ConfigurePermissionManagement()`. + +一旦要分离模块的数据库,通常需要创建第二个迁移路径. 最简单的方法是创建一个带有 `DbContext` 的 `.EntityFrameworkCore.DbMigrations` 项目副本, 更改为只调用需要存储在第二个数据库中的模块的 `Configure...()` 方法并重新创建迁移. 这时你还需要更改 `.DbMigrator` 应用程序使其兼容第二个数据库,这样每个数据库将有一个单独的迁移DbContext. + +## 多租户 + +参阅 [多租户文档](Multi-Tenancy.md)了解如何为租户使用单独的数据库. \ No newline at end of file From 6b39a4db32f383ac9561cd4aa9092a1af62d9e30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 5 Jan 2020 23:22:39 +0300 Subject: [PATCH 050/411] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index c22fe5ec4b..1b4d56dd26 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,8 @@ Framework solution is located under the `framework` folder. It has no external d [Modules](modules/) and [Templates](templates/) have their own solutions and have **local references** to the framework and each other. +Visual Studio can not work properly with the local references out of the solution folder. When you open a module/sample solution in the Visual Studio, you may get some errors related to the dependencies. In this case, run the `dotnet restore` on the command prompt for the related solution's folder. You need to run it after you first open the solution or change a dependency. + ### Contribution ABP is an open source platform. Check [the contribution guide](docs/en/Contribution/Index.md) if you want to contribute to the project. From 881aa82b9d416984777448a2f899e062e9c1a677 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 6 Jan 2020 14:04:11 +0800 Subject: [PATCH 051/411] Correcting the path of error page. Resolve #2552 --- .../Controllers/ErrorController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Controllers/ErrorController.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Controllers/ErrorController.cs index 371b886382..1fb4c12cf2 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Controllers/ErrorController.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Controllers/ErrorController.cs @@ -61,7 +61,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Controllers if (string.IsNullOrWhiteSpace(page)) { - return "~/Pages/Error/Default.cshtml"; + return "~/Views/Error/Default.cshtml"; } return page; From d2cca7306e65076f38d73b63df865168217df75a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Tu=CC=88ken?= Date: Mon, 6 Jan 2020 09:36:09 +0300 Subject: [PATCH 052/411] Add ValidationInterceptor. --- ...lectionDynamicHttpClientProxyExtensions.cs | 6 ++++ .../Volo.Abp.Http.Client.csproj | 1 + .../Abp/Http/Client/AbpHttpClientModule.cs | 4 ++- .../PersonAppServiceClientProxy_Tests.cs | 32 ++++++++++++++----- .../Application/PersonAppService_Tests.cs | 15 ++++++--- .../Abp/TestApp/Application/Dto/PersonDto.cs | 2 ++ 6 files changed, 46 insertions(+), 14 deletions(-) diff --git a/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionDynamicHttpClientProxyExtensions.cs b/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionDynamicHttpClientProxyExtensions.cs index f34a732cb0..e3fd273026 100644 --- a/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionDynamicHttpClientProxyExtensions.cs +++ b/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionDynamicHttpClientProxyExtensions.cs @@ -8,6 +8,7 @@ using Volo.Abp; using Volo.Abp.Castle.DynamicProxy; using Volo.Abp.Http.Client; using Volo.Abp.Http.Client.DynamicProxying; +using Volo.Abp.Validation; namespace Microsoft.Extensions.DependencyInjection { @@ -154,6 +155,9 @@ namespace Microsoft.Extensions.DependencyInjection services.AddTransient(interceptorType); var interceptorAdapterType = typeof(AbpAsyncDeterminationInterceptor<>).MakeGenericType(interceptorType); + + var validationInterceptorAdapterType = + typeof(AbpAsyncDeterminationInterceptor<>).MakeGenericType(typeof(ValidationInterceptor)); if (asDefaultService) { @@ -162,6 +166,7 @@ namespace Microsoft.Extensions.DependencyInjection serviceProvider => ProxyGeneratorInstance .CreateInterfaceProxyWithoutTarget( type, + (IInterceptor)serviceProvider.GetRequiredService(validationInterceptorAdapterType), (IInterceptor)serviceProvider.GetRequiredService(interceptorAdapterType) ) ); @@ -174,6 +179,7 @@ namespace Microsoft.Extensions.DependencyInjection var service = ProxyGeneratorInstance .CreateInterfaceProxyWithoutTarget( type, + (IInterceptor)serviceProvider.GetRequiredService(validationInterceptorAdapterType), (IInterceptor)serviceProvider.GetRequiredService(interceptorAdapterType) ); 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 8a5172db8b..e7198718b1 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 @@ -24,6 +24,7 @@ +
\ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs index f2a7540956..e98c0738fd 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs @@ -3,6 +3,7 @@ using Volo.Abp.Castle; using Volo.Abp.Modularity; using Volo.Abp.MultiTenancy; using Volo.Abp.Threading; +using Volo.Abp.Validation; namespace Volo.Abp.Http.Client { @@ -10,7 +11,8 @@ namespace Volo.Abp.Http.Client typeof(AbpHttpModule), typeof(AbpCastleCoreModule), typeof(AbpThreadingModule), - typeof(AbpMultiTenancyModule) + typeof(AbpMultiTenancyModule), + typeof(AbpValidationModule) )] public class AbpHttpClientModule : AbpModule { diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/PersonAppServiceClientProxy_Tests.cs b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/PersonAppServiceClientProxy_Tests.cs index 80a68e5a18..4dddcd6ce8 100644 --- a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/PersonAppServiceClientProxy_Tests.cs +++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/PersonAppServiceClientProxy_Tests.cs @@ -2,6 +2,7 @@ using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; +using NSubstitute.Extensions; using Shouldly; using Volo.Abp.Application.Dtos; using Volo.Abp.Domain.Repositories; @@ -9,6 +10,7 @@ using Volo.Abp.Http.Client; using Volo.Abp.TestApp.Application; using Volo.Abp.TestApp.Application.Dto; using Volo.Abp.TestApp.Domain; +using Volo.Abp.Validation; using Xunit; namespace Volo.Abp.Http.DynamicProxying @@ -38,7 +40,8 @@ namespace Volo.Abp.Http.DynamicProxying [Fact] public async Task GetList() { - var people = await _peopleAppService.GetListAsync(new PagedAndSortedResultRequestDto()).ConfigureAwait(false); + var people = await _peopleAppService.GetListAsync(new PagedAndSortedResultRequestDto()) + .ConfigureAwait(false); people.TotalCount.ShouldBeGreaterThan(0); people.Items.Count.ShouldBe((int) people.TotalCount); } @@ -59,11 +62,11 @@ namespace Volo.Abp.Http.DynamicProxying { var uniquePersonName = Guid.NewGuid().ToString(); - var person = await _peopleAppService.CreateAsync(new PersonDto - { - Name = uniquePersonName, - Age = 42 - } + var person = await _peopleAppService.CreateAsync(new PersonDto + { + Name = uniquePersonName, + Age = 42 + } ).ConfigureAwait(false); person.ShouldNotBeNull(); @@ -74,7 +77,20 @@ namespace Volo.Abp.Http.DynamicProxying personInDb.ShouldNotBeNull(); personInDb.Id.ShouldBe(person.Id); } - + + [Fact] + public async Task Create_Validate_Exception() + { + await Assert.ThrowsAsync(async () => + { + var person = await _peopleAppService.CreateAsync(new PersonDto + { + Age = 42 + } + ).ConfigureAwait(false); + }).ConfigureAwait(false); + } + [Fact] public async Task Update() { @@ -135,4 +151,4 @@ namespace Volo.Abp.Http.DynamicProxying result.Inner1.Inner2.Value3.ShouldBe("value three"); } } -} +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.TestApp.Tests/Volo/Abp/TestApp/Application/PersonAppService_Tests.cs b/framework/test/Volo.Abp.TestApp.Tests/Volo/Abp/TestApp/Application/PersonAppService_Tests.cs index fc38b437b8..47fa69d64f 100644 --- a/framework/test/Volo.Abp.TestApp.Tests/Volo/Abp/TestApp/Application/PersonAppService_Tests.cs +++ b/framework/test/Volo.Abp.TestApp.Tests/Volo/Abp/TestApp/Application/PersonAppService_Tests.cs @@ -19,7 +19,7 @@ namespace Volo.Abp.TestApp.Application public PersonAppService_Tests() { - _peopleAppService = ServiceProvider.GetRequiredService(); + _peopleAppService = ServiceProvider.GetRequiredService(); } protected override void AfterAddApplication(IServiceCollection services) @@ -31,14 +31,17 @@ namespace Volo.Abp.TestApp.Application [Fact] public async Task GetList() { - var people = await _peopleAppService.GetListAsync(new PagedAndSortedResultRequestDto()).ConfigureAwait(false); + var people = await _peopleAppService.GetListAsync(new PagedAndSortedResultRequestDto()) + .ConfigureAwait(false); people.Items.Count.ShouldBeGreaterThan(0); } [Fact] public async Task Create() { - var personDto = await _peopleAppService.CreateAsync(new PersonDto()).ConfigureAwait(false); + var uniquePersonName = Guid.NewGuid().ToString(); + var personDto = await _peopleAppService.CreateAsync(new PersonDto {Name = uniquePersonName}) + .ConfigureAwait(false); var repository = ServiceProvider.GetService>(); var person = await repository.FindAsync(personDto.Id).ConfigureAwait(false); @@ -52,7 +55,9 @@ namespace Volo.Abp.TestApp.Application { _fakeCurrentTenant.Id.Returns(TestDataBuilder.TenantId1); - var personDto = await _peopleAppService.CreateAsync(new PersonDto()).ConfigureAwait(false); + var uniquePersonName = Guid.NewGuid().ToString(); + var personDto = await _peopleAppService.CreateAsync(new PersonDto {Name = uniquePersonName}) + .ConfigureAwait(false); var repository = ServiceProvider.GetService>(); var person = await repository.FindAsync(personDto.Id).ConfigureAwait(false); @@ -63,4 +68,4 @@ namespace Volo.Abp.TestApp.Application person.TenantId.ShouldBe(TestDataBuilder.TenantId1); } } -} +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/Dto/PersonDto.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/Dto/PersonDto.cs index b878b4f9c4..88ed3452af 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/Dto/PersonDto.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/Dto/PersonDto.cs @@ -1,4 +1,5 @@ using System; +using System.ComponentModel.DataAnnotations; using Volo.Abp.Application.Dtos; using Volo.Abp.MultiTenancy; @@ -6,6 +7,7 @@ namespace Volo.Abp.TestApp.Application.Dto { public class PersonDto : EntityDto, IMultiTenant { + [Required] public string Name { get; set; } public int Age { get; set; } From db1cd57787d6ee8dfe7f9f76aa12b05f7ca0ebbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 6 Jan 2020 11:22:07 +0300 Subject: [PATCH 053/411] Resolved #2558: Add options to IUnitOfWorkManager.Begin(). --- .../Volo/Abp/Uow/AbpUnitOfWorkOptions.cs | 12 ++++++++++++ .../Abp/Uow/UnitOfWorkManagerExtensions.cs | 18 +++++++++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/AbpUnitOfWorkOptions.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/AbpUnitOfWorkOptions.cs index dd39612921..a8f3f75a11 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/AbpUnitOfWorkOptions.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/AbpUnitOfWorkOptions.cs @@ -14,6 +14,18 @@ namespace Volo.Abp.Uow public TimeSpan? Timeout { get; set; } + public AbpUnitOfWorkOptions() + { + + } + + public AbpUnitOfWorkOptions(bool isTransactional = false, IsolationLevel? isolationLevel = null, TimeSpan? timeout = null) + { + IsTransactional = isTransactional; + IsolationLevel = isolationLevel; + Timeout = timeout; + } + public AbpUnitOfWorkOptions Clone() { return new AbpUnitOfWorkOptions diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkManagerExtensions.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkManagerExtensions.cs index bf8859d6ac..a0c52a49f4 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkManagerExtensions.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkManagerExtensions.cs @@ -1,15 +1,27 @@ -using JetBrains.Annotations; +using System; +using System.Data; +using JetBrains.Annotations; namespace Volo.Abp.Uow { public static class UnitOfWorkManagerExtensions { [NotNull] - public static IUnitOfWork Begin([NotNull] this IUnitOfWorkManager unitOfWorkManager, bool requiresNew = false) + public static IUnitOfWork Begin( + [NotNull] this IUnitOfWorkManager unitOfWorkManager, + bool requiresNew = false, + bool isTransactional = false, + IsolationLevel? isolationLevel = null, + TimeSpan? timeout = null) { Check.NotNull(unitOfWorkManager, nameof(unitOfWorkManager)); - return unitOfWorkManager.Begin(new AbpUnitOfWorkOptions(), requiresNew); + return unitOfWorkManager.Begin(new AbpUnitOfWorkOptions + { + IsTransactional = isTransactional, + IsolationLevel = isolationLevel, + Timeout = timeout + }, requiresNew); } public static void BeginReserved([NotNull] this IUnitOfWorkManager unitOfWorkManager, [NotNull] string reservationName) From 314d46d81cdd7680c5bae4b3429c95f9e65558db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 6 Jan 2020 11:22:41 +0300 Subject: [PATCH 054/411] Explicitly set TransactionBehavior to Auto --- .../Volo.Abp.Uow/Volo/Abp/Uow/AbpUnitOfWorkDefaultOptions.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/AbpUnitOfWorkDefaultOptions.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/AbpUnitOfWorkDefaultOptions.cs index 789e4f8e58..02d80e82a5 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/AbpUnitOfWorkDefaultOptions.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/AbpUnitOfWorkDefaultOptions.cs @@ -10,7 +10,10 @@ namespace Volo.Abp.Uow /// public class AbpUnitOfWorkDefaultOptions { - public UnitOfWorkTransactionBehavior TransactionBehavior { get; set; } + /// + /// Default value: . + /// + public UnitOfWorkTransactionBehavior TransactionBehavior { get; set; } = UnitOfWorkTransactionBehavior.Auto; public IsolationLevel? IsolationLevel { get; set; } From 0d10a61b7b20fe6d6f30dae6383ac1f701ee2807 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 6 Jan 2020 16:38:53 +0800 Subject: [PATCH 055/411] Re-generate EF Core migrations for the startup templates. Resolve #2547 --- .../BookStoreDomainSharedModule.cs | 2 +- .../BookStoreTestBase.cs | 42 +- .../BookStoreDomainSharedModule.cs | 2 +- ....cs => 20200106083302_Initial.Designer.cs} | 125 +- .../Migrations/20200106083302_Initial.cs} | 48 +- ...200106083327_Added_Book_Entity.Designer.cs | 1811 +++++++++++++++++ ...cs => 20200106083327_Added_Book_Entity.cs} | 0 ...okStoreMigrationsDbContextModelSnapshot.cs | 71 +- .../BookStoreTestBase.cs | 40 - .../BookStoreWebTestModule.cs | 2 +- .../20191018081038_Initial.Designer.cs | 1610 --------------- .../Migrations/20191018081038_Initial.cs | 982 --------- .../20200106082830_Initial.Designer.cs} | 165 +- .../Migrations/20200106082830_Initial.cs | 1022 ++++++++++ ...verHostMigrationsDbContextModelSnapshot.cs | 71 +- .../20190527144415_Initial.Designer.cs | 716 ------- .../20200106082340_Initial.Designer.cs} | 844 ++------ ...5_Initial.cs => 20200106082340_Initial.cs} | 31 +- .../UnifiedDbContextModelSnapshot.cs | 398 +++- ...kStore.BookManagement.Domain.Shared.csproj | 2 +- .../BookManagementDomainSharedModule.cs | 2 +- .../BookManagementTestBase.cs | 40 - .../BookStoreDomainSharedModule.cs | 2 +- ....cs => 20200106080124_Initial.Designer.cs} | 125 +- .../Migrations/20200106080124_Initial.cs} | 48 +- ...0106080206_Created_Book_Entity.Designer.cs | 1811 +++++++++++++++++ ... => 20200106080206_Created_Book_Entity.cs} | 0 ...okStoreMigrationsDbContextModelSnapshot.cs | 71 +- .../BookStoreTestBase.cs | 40 - .../BookStoreWebTestModule.cs | 2 +- .../DashboardDemoDomainSharedModule.cs | 2 +- ....cs => 20200106080501_Initial.Designer.cs} | 73 +- ...4_Initial.cs => 20200106080501_Initial.cs} | 48 +- ...ardDemoMigrationsDbContextModelSnapshot.cs | 71 +- .../DashboardDemoTestBase.cs | 40 - .../DashboardDemoWebTestModule.cs | 2 +- .../Migrations/20191018081320_Initial.cs | 930 --------- .../20200106080946_Initial.Designer.cs | 161 +- .../Migrations/20200106080946_Initial.cs | 98 +- .../AuthServerDbContextModelSnapshot.cs | 68 +- .../ProductManagementWebModule.cs | 2 +- .../ProductManagementDomainTestBase.cs | 40 - .../20200106080719_Initial.Designer.cs | 79 +- ...7_Initial.cs => 20200106080719_Initial.cs} | 41 + ...ectNameMigrationsDbContextModelSnapshot.cs | 64 + .../20200106080828_Initial.Designer.cs} | 154 +- .../Migrations/20200106080828_Initial.cs | 1022 ++++++++++ ...verHostMigrationsDbContextModelSnapshot.cs | 68 +- ....cs => 20200106080643_Initial.Designer.cs} | 2 +- ...7_Initial.cs => 20200106080643_Initial.cs} | 0 50 files changed, 7297 insertions(+), 5793 deletions(-) rename samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/{20191018081734_Added_Book_Entity.Designer.cs => 20200106083302_Initial.Designer.cs} (97%) rename samples/{BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018075950_Initial.cs => BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106083302_Initial.cs} (96%) create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106083327_Added_Book_Entity.Designer.cs rename samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/{20191018081734_Added_Book_Entity.cs => 20200106083327_Added_Book_Entity.cs} (100%) delete mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Migrations/20191018081038_Initial.Designer.cs delete mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Migrations/20191018081038_Initial.cs rename samples/BookStore-Modular/{application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018081718_Initial.Designer.cs => modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Migrations/20200106082830_Initial.Designer.cs} (96%) create mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Migrations/20200106082830_Initial.cs delete mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Migrations/20190527144415_Initial.Designer.cs rename samples/{MicroserviceDemo/applications/AuthServer.Host/Migrations/20191018081320_Initial.Designer.cs => BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Migrations/20200106082340_Initial.Designer.cs} (56%) rename samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Migrations/{20190527144415_Initial.cs => 20200106082340_Initial.cs} (95%) rename samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/{20191018080014_Created_Book_Entity.Designer.cs => 20200106080124_Initial.Designer.cs} (97%) rename samples/{BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018081718_Initial.cs => BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106080124_Initial.cs} (96%) create mode 100644 samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106080206_Created_Book_Entity.Designer.cs rename samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/{20191018080014_Created_Book_Entity.cs => 20200106080206_Created_Book_Entity.cs} (100%) rename samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/Migrations/{20191018081444_Initial.Designer.cs => 20200106080501_Initial.Designer.cs} (96%) rename samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/Migrations/{20191018081444_Initial.cs => 20200106080501_Initial.cs} (96%) delete mode 100644 samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20191018081320_Initial.cs rename templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20191127124541_Initial.Designer.cs => samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200106080946_Initial.Designer.cs (96%) rename templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20191127124541_Initial.cs => samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200106080946_Initial.cs (96%) rename samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018075950_Initial.Designer.cs => templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200106080719_Initial.Designer.cs (96%) rename templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/{20191218090017_Initial.cs => 20200106080719_Initial.cs} (96%) rename templates/{app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20191218090017_Initial.Designer.cs => module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20200106080828_Initial.Designer.cs} (96%) create mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20200106080828_Initial.cs rename templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/{20191218090727_Initial.Designer.cs => 20200106080643_Initial.Designer.cs} (99%) rename templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/{20191218090727_Initial.cs => 20200106080643_Initial.cs} (100%) diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/BookStoreDomainSharedModule.cs b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/BookStoreDomainSharedModule.cs index 95241feeb8..6ac58cef9e 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/BookStoreDomainSharedModule.cs +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/BookStoreDomainSharedModule.cs @@ -5,7 +5,7 @@ using Volo.Abp.FeatureManagement; using Volo.Abp.Identity; using Volo.Abp.IdentityServer; using Volo.Abp.Localization; -using Volo.Abp.Localization.Resources.AbpValidation; +using Volo.Abp.Validation.Localization; using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement; using Volo.Abp.SettingManagement; diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/BookStoreTestBase.cs b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/BookStoreTestBase.cs index 0f44532e7a..9bf254bf5b 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/BookStoreTestBase.cs +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/BookStoreTestBase.cs @@ -18,26 +18,6 @@ namespace Acme.BookStore options.UseAutofac(); } - protected virtual void WithUnitOfWork(Action action) - { - WithUnitOfWork(new AbpUnitOfWorkOptions(), action); - } - - protected virtual void WithUnitOfWork(AbpUnitOfWorkOptions options, Action action) - { - using (var scope = ServiceProvider.CreateScope()) - { - var uowManager = scope.ServiceProvider.GetRequiredService(); - - using (var uow = uowManager.Begin(options)) - { - action(); - - uow.Complete(); - } - } - } - protected virtual Task WithUnitOfWorkAsync(Func func) { return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func); @@ -57,27 +37,7 @@ namespace Acme.BookStore } } } - - protected virtual TResult WithUnitOfWork(Func func) - { - return WithUnitOfWork(new AbpUnitOfWorkOptions(), func); - } - - protected virtual TResult WithUnitOfWork(AbpUnitOfWorkOptions options, Func func) - { - using (var scope = ServiceProvider.CreateScope()) - { - var uowManager = scope.ServiceProvider.GetRequiredService(); - - using (var uow = uowManager.Begin(options)) - { - var result = func(); - uow.Complete(); - return result; - } - } - } - + protected virtual Task WithUnitOfWorkAsync(Func> func) { return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func); diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/BookStoreDomainSharedModule.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/BookStoreDomainSharedModule.cs index 8d6172ee28..188a73118f 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/BookStoreDomainSharedModule.cs +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/BookStoreDomainSharedModule.cs @@ -6,7 +6,7 @@ using Volo.Abp.FeatureManagement; using Volo.Abp.Identity; using Volo.Abp.IdentityServer; using Volo.Abp.Localization; -using Volo.Abp.Localization.Resources.AbpValidation; +using Volo.Abp.Validation.Localization; using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement; using Volo.Abp.SettingManagement; diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018081734_Added_Book_Entity.Designer.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106083302_Initial.Designer.cs similarity index 97% rename from samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018081734_Added_Book_Entity.Designer.cs rename to samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106083302_Initial.Designer.cs index 105259f357..f1c515923e 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018081734_Added_Book_Entity.Designer.cs +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106083302_Initial.Designer.cs @@ -10,67 +10,17 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace Acme.BookStore.Migrations { [DbContext(typeof(BookStoreMigrationsDbContext))] - [Migration("20191018081734_Added_Book_Entity")] - partial class Added_Book_Entity + [Migration("20200106083302_Initial")] + partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "3.0.0") + .HasAnnotation("ProductVersion", "3.1.0") .HasAnnotation("Relational:MaxIdentifierLength", 128) .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - modelBuilder.Entity("Acme.BookStore.BookManagement.Books.Book", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") - .HasColumnType("nvarchar(max)"); - - b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); - - b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); - - b.Property("LastModificationTime") - .HasColumnName("LastModificationTime") - .HasColumnType("datetime2"); - - b.Property("LastModifierId") - .HasColumnName("LastModifierId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); - - b.Property("Price") - .HasColumnType("real"); - - b.Property("PublishDate") - .HasColumnType("datetime2"); - - b.Property("Type") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("BmBooks"); - }); - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => { b.Property("Id") @@ -562,6 +512,7 @@ namespace Acme.BookStore.Migrations .HasColumnType("datetime2"); b.Property("Email") + .IsRequired() .HasColumnName("Email") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -605,6 +556,7 @@ namespace Acme.BookStore.Migrations .HasMaxLength(64); b.Property("NormalizedEmail") + .IsRequired() .HasColumnName("NormalizedEmail") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -1247,6 +1199,70 @@ namespace Acme.BookStore.Migrations b.ToTable("IdentityServerClientSecrets"); }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("DeviceCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Expiration") + .IsRequired() + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("Id"); + + b.HasIndex("DeviceCode") + .IsUnique(); + + b.HasIndex("Expiration"); + + b.HasIndex("UserCode") + .IsUnique(); + + b.ToTable("IdentityServerDeviceFlowCodes"); + }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => { b.Property("Key") @@ -1503,8 +1519,7 @@ namespace Acme.BookStore.Migrations b.HasKey("Id"); - b.HasIndex("Name") - .IsUnique(); + b.HasIndex("Name"); b.ToTable("AbpTenants"); }); diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018075950_Initial.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106083302_Initial.cs similarity index 96% rename from samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018075950_Initial.cs rename to samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106083302_Initial.cs index cc04cddbf2..de6dd334dd 100644 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018075950_Initial.cs +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106083302_Initial.cs @@ -184,8 +184,8 @@ namespace Acme.BookStore.Migrations NormalizedUserName = table.Column(maxLength: 256, nullable: false), Name = table.Column(maxLength: 64, nullable: true), Surname = table.Column(maxLength: 64, nullable: true), - Email = table.Column(maxLength: 256, nullable: true), - NormalizedEmail = table.Column(maxLength: 256, nullable: true), + Email = table.Column(maxLength: 256, nullable: false), + NormalizedEmail = table.Column(maxLength: 256, nullable: false), EmailConfirmed = table.Column(nullable: false, defaultValue: false), PasswordHash = table.Column(maxLength: 256, nullable: true), SecurityStamp = table.Column(maxLength: 256, nullable: false), @@ -283,6 +283,27 @@ namespace Acme.BookStore.Migrations table.PrimaryKey("PK_IdentityServerClients", x => x.Id); }); + migrationBuilder.CreateTable( + name: "IdentityServerDeviceFlowCodes", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + DeviceCode = table.Column(maxLength: 200, nullable: false), + UserCode = table.Column(maxLength: 200, nullable: false), + SubjectId = table.Column(maxLength: 200, nullable: true), + ClientId = table.Column(maxLength: 200, nullable: false), + Expiration = table.Column(nullable: false), + Data = table.Column(maxLength: 50000, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerDeviceFlowCodes", x => x.Id); + }); + migrationBuilder.CreateTable( name: "IdentityServerIdentityResources", columns: table => new @@ -866,8 +887,7 @@ namespace Acme.BookStore.Migrations migrationBuilder.CreateIndex( name: "IX_AbpTenants_Name", table: "AbpTenants", - column: "Name", - unique: true); + column: "Name"); migrationBuilder.CreateIndex( name: "IX_AbpUserClaims_UserId", @@ -909,6 +929,23 @@ namespace Acme.BookStore.Migrations table: "IdentityServerClients", column: "ClientId"); + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_DeviceCode", + table: "IdentityServerDeviceFlowCodes", + column: "DeviceCode", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_Expiration", + table: "IdentityServerDeviceFlowCodes", + column: "Expiration"); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_UserCode", + table: "IdentityServerDeviceFlowCodes", + column: "UserCode", + unique: true); + migrationBuilder.CreateIndex( name: "IX_IdentityServerPersistedGrants_Expiration", table: "IdentityServerPersistedGrants", @@ -997,6 +1034,9 @@ namespace Acme.BookStore.Migrations migrationBuilder.DropTable( name: "IdentityServerClientSecrets"); + migrationBuilder.DropTable( + name: "IdentityServerDeviceFlowCodes"); + migrationBuilder.DropTable( name: "IdentityServerIdentityClaims"); diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106083327_Added_Book_Entity.Designer.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106083327_Added_Book_Entity.Designer.cs new file mode 100644 index 0000000000..fd3a713e5d --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106083327_Added_Book_Entity.Designer.cs @@ -0,0 +1,1811 @@ +// +using System; +using Acme.BookStore.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace Acme.BookStore.Migrations +{ + [DbContext(typeof(BookStoreMigrationsDbContext))] + [Migration("20200106083327_Added_Book_Entity")] + partial class Added_Book_Entity + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.1.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("Acme.BookStore.BookManagement.Books.Book", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Price") + .HasColumnType("real"); + + b.Property("PublishDate") + .HasColumnType("datetime2"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("BmBooks"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicationName") + .HasColumnName("ApplicationName") + .HasColumnType("nvarchar(96)") + .HasMaxLength(96); + + b.Property("BrowserInfo") + .HasColumnName("BrowserInfo") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("ClientId") + .HasColumnName("ClientId") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ClientIpAddress") + .HasColumnName("ClientIpAddress") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ClientName") + .HasColumnName("ClientName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Comments") + .HasColumnName("Comments") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CorrelationId") + .HasColumnName("CorrelationId") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Exceptions") + .HasColumnName("Exceptions") + .HasColumnType("nvarchar(4000)") + .HasMaxLength(4000); + + b.Property("ExecutionDuration") + .HasColumnName("ExecutionDuration") + .HasColumnType("int"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("HttpMethod") + .HasColumnName("HttpMethod") + .HasColumnType("nvarchar(16)") + .HasMaxLength(16); + + b.Property("HttpStatusCode") + .HasColumnName("HttpStatusCode") + .HasColumnType("int"); + + b.Property("ImpersonatorTenantId") + .HasColumnName("ImpersonatorTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("ImpersonatorUserId") + .HasColumnName("ImpersonatorUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantName") + .HasColumnType("nvarchar(max)"); + + b.Property("Url") + .HasColumnName("Url") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("UserId") + .HasColumnName("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .HasColumnName("UserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("AbpAuditLogs"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnName("AuditLogId") + .HasColumnType("uniqueidentifier"); + + b.Property("ExecutionDuration") + .HasColumnName("ExecutionDuration") + .HasColumnType("int"); + + b.Property("ExecutionTime") + .HasColumnName("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("MethodName") + .HasColumnName("MethodName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Parameters") + .HasColumnName("Parameters") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("ServiceName") + .HasColumnName("ServiceName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("AbpAuditLogActions"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnName("AuditLogId") + .HasColumnType("uniqueidentifier"); + + b.Property("ChangeTime") + .HasColumnName("ChangeTime") + .HasColumnType("datetime2"); + + b.Property("ChangeType") + .HasColumnName("ChangeType") + .HasColumnType("tinyint"); + + b.Property("EntityId") + .IsRequired() + .HasColumnName("EntityId") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("EntityTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasColumnName("EntityTypeFullName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("AbpEntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("EntityChangeId") + .HasColumnType("uniqueidentifier"); + + b.Property("NewValue") + .HasColumnName("NewValue") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("OriginalValue") + .HasColumnName("OriginalValue") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("PropertyName") + .IsRequired() + .HasColumnName("PropertyName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasColumnName("PropertyTypeFullName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.BackgroundJobs.BackgroundJobRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsAbandoned") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("JobArgs") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(1048576); + + b.Property("JobName") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("LastTryTime") + .HasColumnType("datetime2"); + + b.Property("NextTryTime") + .HasColumnType("datetime2"); + + b.Property("Priority") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint") + .HasDefaultValue((byte)15); + + b.Property("TryCount") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)0); + + b.HasKey("Id"); + + b.HasIndex("IsAbandoned", "NextTryTime"); + + b.ToTable("AbpBackgroundJobs"); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpFeatureValues"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("Description") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("Regex") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("RegexDescription") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ValueType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDefault") + .HasColumnName("IsDefault") + .HasColumnType("bit"); + + b.Property("IsPublic") + .HasColumnName("IsPublic") + .HasColumnType("bit"); + + b.Property("IsStatic") + .HasColumnName("IsStatic") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnName("AccessFailedCount") + .HasColumnType("int") + .HasDefaultValue(0); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Email") + .IsRequired() + .HasColumnName("Email") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnName("EmailConfirmed") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnName("LockoutEnabled") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .HasColumnName("Name") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("NormalizedEmail") + .IsRequired() + .HasColumnName("NormalizedEmail") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("NormalizedUserName") + .IsRequired() + .HasColumnName("NormalizedUserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("PasswordHash") + .HasColumnName("PasswordHash") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("PhoneNumber") + .HasColumnName("PhoneNumber") + .HasColumnType("nvarchar(16)") + .HasMaxLength(16); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnName("PhoneNumberConfirmed") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("SecurityStamp") + .IsRequired() + .HasColumnName("SecurityStamp") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("Surname") + .HasColumnName("Surname") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnName("TwoFactorEnabled") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("UserName") + .IsRequired() + .HasColumnName("UserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("AbpUsers"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserClaims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .IsRequired() + .HasColumnType("nvarchar(196)") + .HasMaxLength(196); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("UserId", "LoginProvider"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("AbpUserLogins"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("AbpUserRoles"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Name") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AbpUserTokens"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResource", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DisplayName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Properties") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("IdentityServerApiResources"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ApiResourceId", "Type"); + + b.ToTable("IdentityServerApiClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DisplayName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Emphasize") + .HasColumnType("bit"); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ShowInDiscoveryDocument") + .HasColumnType("bit"); + + b.HasKey("ApiResourceId", "Name"); + + b.ToTable("IdentityServerApiScopes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Type") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ApiResourceId", "Name", "Type"); + + b.ToTable("IdentityServerApiScopeClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .HasColumnType("nvarchar(4000)") + .HasMaxLength(4000); + + b.Property("Description") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("Expiration") + .HasColumnType("datetime2"); + + b.HasKey("ApiResourceId", "Type", "Value"); + + b.ToTable("IdentityServerApiSecrets"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.Client", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AbsoluteRefreshTokenLifetime") + .HasColumnType("int"); + + b.Property("AccessTokenLifetime") + .HasColumnType("int"); + + b.Property("AccessTokenType") + .HasColumnType("int"); + + b.Property("AllowAccessTokensViaBrowser") + .HasColumnType("bit"); + + b.Property("AllowOfflineAccess") + .HasColumnType("bit"); + + b.Property("AllowPlainTextPkce") + .HasColumnType("bit"); + + b.Property("AllowRememberConsent") + .HasColumnType("bit"); + + b.Property("AlwaysIncludeUserClaimsInIdToken") + .HasColumnType("bit"); + + b.Property("AlwaysSendClientClaims") + .HasColumnType("bit"); + + b.Property("AuthorizationCodeLifetime") + .HasColumnType("int"); + + b.Property("BackChannelLogoutSessionRequired") + .HasColumnType("bit"); + + b.Property("BackChannelLogoutUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("ClientClaimsPrefix") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("ConsentLifetime") + .HasColumnType("int"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DeviceCodeLifetime") + .HasColumnType("int"); + + b.Property("EnableLocalLogin") + .HasColumnType("bit"); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("FrontChannelLogoutSessionRequired") + .HasColumnType("bit"); + + b.Property("FrontChannelLogoutUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("IdentityTokenLifetime") + .HasColumnType("int"); + + b.Property("IncludeJwtId") + .HasColumnType("bit"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("LogoUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("PairWiseSubjectSalt") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ProtocolType") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("RefreshTokenExpiration") + .HasColumnType("int"); + + b.Property("RefreshTokenUsage") + .HasColumnType("int"); + + b.Property("RequireClientSecret") + .HasColumnType("bit"); + + b.Property("RequireConsent") + .HasColumnType("bit"); + + b.Property("RequirePkce") + .HasColumnType("bit"); + + b.Property("SlidingRefreshTokenLifetime") + .HasColumnType("int"); + + b.Property("UpdateAccessTokenClaimsOnRefresh") + .HasColumnType("bit"); + + b.Property("UserCodeType") + .HasColumnType("nvarchar(100)") + .HasMaxLength(100); + + b.Property("UserSsoLifetime") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("IdentityServerClients"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.HasKey("ClientId", "Type", "Value"); + + b.ToTable("IdentityServerClientClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Origin") + .HasColumnType("nvarchar(150)") + .HasMaxLength(150); + + b.HasKey("ClientId", "Origin"); + + b.ToTable("IdentityServerClientCorsOrigins"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("GrantType") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.HasKey("ClientId", "GrantType"); + + b.ToTable("IdentityServerClientGrantTypes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Provider") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ClientId", "Provider"); + + b.ToTable("IdentityServerClientIdPRestrictions"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("PostLogoutRedirectUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.HasKey("ClientId", "PostLogoutRedirectUri"); + + b.ToTable("IdentityServerClientPostLogoutRedirectUris"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Key") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.HasKey("ClientId", "Key"); + + b.ToTable("IdentityServerClientProperties"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("RedirectUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.HasKey("ClientId", "RedirectUri"); + + b.ToTable("IdentityServerClientRedirectUris"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Scope") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ClientId", "Scope"); + + b.ToTable("IdentityServerClientScopes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .HasColumnType("nvarchar(4000)") + .HasMaxLength(4000); + + b.Property("Description") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("Expiration") + .HasColumnType("datetime2"); + + b.HasKey("ClientId", "Type", "Value"); + + b.ToTable("IdentityServerClientSecrets"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("DeviceCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Expiration") + .IsRequired() + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("Id"); + + b.HasIndex("DeviceCode") + .IsUnique(); + + b.HasIndex("Expiration"); + + b.HasIndex("UserCode") + .IsUnique(); + + b.ToTable("IdentityServerDeviceFlowCodes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => + { + b.Property("Key") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnType("datetime2"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("Expiration") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Type") + .IsRequired() + .HasColumnType("nvarchar(50)") + .HasMaxLength(50); + + b.HasKey("Key"); + + b.HasIndex("Expiration"); + + b.HasIndex("SubjectId", "ClientId", "Type"); + + b.ToTable("IdentityServerPersistedGrants"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b => + { + b.Property("IdentityResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("IdentityResourceId", "Type"); + + b.ToTable("IdentityServerIdentityClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DisplayName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Emphasize") + .HasColumnType("bit"); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Properties") + .HasColumnType("nvarchar(max)"); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ShowInDiscoveryDocument") + .HasColumnType("bit"); + + b.HasKey("Id"); + + b.ToTable("IdentityServerIdentityResources"); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderName") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpPermissionGrants"); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(2048)") + .HasMaxLength(2048); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpSettings"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AbpTenants"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.HasKey("TenantId", "Name"); + + b.ToTable("AbpTenantConnectionStrings"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) + .WithMany("UserClaims") + .HasForeignKey("ApiResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) + .WithMany("Scopes") + .HasForeignKey("ApiResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiScope", null) + .WithMany("UserClaims") + .HasForeignKey("ApiResourceId", "Name") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) + .WithMany("Secrets") + .HasForeignKey("ApiResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("Claims") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("AllowedCorsOrigins") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("AllowedGrantTypes") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("IdentityProviderRestrictions") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("PostLogoutRedirectUris") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("Properties") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("RedirectUris") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("AllowedScopes") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("ClientSecrets") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", null) + .WithMany("UserClaims") + .HasForeignKey("IdentityResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.HasOne("Volo.Abp.TenantManagement.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018081734_Added_Book_Entity.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106083327_Added_Book_Entity.cs similarity index 100% rename from samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018081734_Added_Book_Entity.cs rename to samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106083327_Added_Book_Entity.cs diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/BookStoreMigrationsDbContextModelSnapshot.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/BookStoreMigrationsDbContextModelSnapshot.cs index 0577f0d399..4848f244de 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/BookStoreMigrationsDbContextModelSnapshot.cs +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/BookStoreMigrationsDbContextModelSnapshot.cs @@ -15,7 +15,7 @@ namespace Acme.BookStore.Migrations { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "3.0.0") + .HasAnnotation("ProductVersion", "3.1.0") .HasAnnotation("Relational:MaxIdentifierLength", 128) .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); @@ -560,6 +560,7 @@ namespace Acme.BookStore.Migrations .HasColumnType("datetime2"); b.Property("Email") + .IsRequired() .HasColumnName("Email") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -603,6 +604,7 @@ namespace Acme.BookStore.Migrations .HasMaxLength(64); b.Property("NormalizedEmail") + .IsRequired() .HasColumnName("NormalizedEmail") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -1245,6 +1247,70 @@ namespace Acme.BookStore.Migrations b.ToTable("IdentityServerClientSecrets"); }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("DeviceCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Expiration") + .IsRequired() + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("Id"); + + b.HasIndex("DeviceCode") + .IsUnique(); + + b.HasIndex("Expiration"); + + b.HasIndex("UserCode") + .IsUnique(); + + b.ToTable("IdentityServerDeviceFlowCodes"); + }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => { b.Property("Key") @@ -1501,8 +1567,7 @@ namespace Acme.BookStore.Migrations b.HasKey("Id"); - b.HasIndex("Name") - .IsUnique(); + b.HasIndex("Name"); b.ToTable("AbpTenants"); }); diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/BookStoreTestBase.cs b/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/BookStoreTestBase.cs index 0f44532e7a..979c344f93 100644 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/BookStoreTestBase.cs +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/BookStoreTestBase.cs @@ -18,26 +18,6 @@ namespace Acme.BookStore options.UseAutofac(); } - protected virtual void WithUnitOfWork(Action action) - { - WithUnitOfWork(new AbpUnitOfWorkOptions(), action); - } - - protected virtual void WithUnitOfWork(AbpUnitOfWorkOptions options, Action action) - { - using (var scope = ServiceProvider.CreateScope()) - { - var uowManager = scope.ServiceProvider.GetRequiredService(); - - using (var uow = uowManager.Begin(options)) - { - action(); - - uow.Complete(); - } - } - } - protected virtual Task WithUnitOfWorkAsync(Func func) { return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func); @@ -58,26 +38,6 @@ namespace Acme.BookStore } } - protected virtual TResult WithUnitOfWork(Func func) - { - return WithUnitOfWork(new AbpUnitOfWorkOptions(), func); - } - - protected virtual TResult WithUnitOfWork(AbpUnitOfWorkOptions options, Func func) - { - using (var scope = ServiceProvider.CreateScope()) - { - var uowManager = scope.ServiceProvider.GetRequiredService(); - - using (var uow = uowManager.Begin(options)) - { - var result = func(); - uow.Complete(); - return result; - } - } - } - protected virtual Task WithUnitOfWorkAsync(Func> func) { return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func); diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/BookStoreWebTestModule.cs b/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/BookStoreWebTestModule.cs index b9d79b1baa..d92f3bbfcf 100644 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/BookStoreWebTestModule.cs +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/BookStoreWebTestModule.cs @@ -12,7 +12,7 @@ using Acme.BookStore.Web.Menus; using Volo.Abp; using Volo.Abp.AspNetCore.TestBase; using Volo.Abp.Localization; -using Volo.Abp.Localization.Resources.AbpValidation; +using Volo.Abp.Validation.Localization; using Volo.Abp.Modularity; using Volo.Abp.UI.Navigation; diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Migrations/20191018081038_Initial.Designer.cs b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Migrations/20191018081038_Initial.Designer.cs deleted file mode 100644 index 0e8868dd77..0000000000 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Migrations/20191018081038_Initial.Designer.cs +++ /dev/null @@ -1,1610 +0,0 @@ -// -using System; -using Acme.BookStore.BookManagement.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -namespace Acme.BookStore.BookManagement.Migrations -{ - [DbContext(typeof(IdentityServerHostMigrationsDbContext))] - [Migration("20191018081038_Initial")] - partial class Initial - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "3.0.0") - .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ApplicationName") - .HasColumnName("ApplicationName") - .HasColumnType("nvarchar(96)") - .HasMaxLength(96); - - b.Property("BrowserInfo") - .HasColumnName("BrowserInfo") - .HasColumnType("nvarchar(512)") - .HasMaxLength(512); - - b.Property("ClientId") - .HasColumnName("ClientId") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.Property("ClientIpAddress") - .HasColumnName("ClientIpAddress") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.Property("ClientName") - .HasColumnName("ClientName") - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); - - b.Property("Comments") - .HasColumnName("Comments") - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); - - b.Property("ConcurrencyStamp") - .HasColumnType("nvarchar(max)"); - - b.Property("CorrelationId") - .HasColumnName("CorrelationId") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.Property("Exceptions") - .HasColumnName("Exceptions") - .HasColumnType("nvarchar(4000)") - .HasMaxLength(4000); - - b.Property("ExecutionDuration") - .HasColumnName("ExecutionDuration") - .HasColumnType("int"); - - b.Property("ExecutionTime") - .HasColumnType("datetime2"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); - - b.Property("HttpMethod") - .HasColumnName("HttpMethod") - .HasColumnType("nvarchar(16)") - .HasMaxLength(16); - - b.Property("HttpStatusCode") - .HasColumnName("HttpStatusCode") - .HasColumnType("int"); - - b.Property("ImpersonatorTenantId") - .HasColumnName("ImpersonatorTenantId") - .HasColumnType("uniqueidentifier"); - - b.Property("ImpersonatorUserId") - .HasColumnName("ImpersonatorUserId") - .HasColumnType("uniqueidentifier"); - - b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); - - b.Property("TenantName") - .HasColumnType("nvarchar(max)"); - - b.Property("Url") - .HasColumnName("Url") - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); - - b.Property("UserId") - .HasColumnName("UserId") - .HasColumnType("uniqueidentifier"); - - b.Property("UserName") - .HasColumnName("UserName") - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "ExecutionTime"); - - b.HasIndex("TenantId", "UserId", "ExecutionTime"); - - b.ToTable("AbpAuditLogs"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("AuditLogId") - .HasColumnName("AuditLogId") - .HasColumnType("uniqueidentifier"); - - b.Property("ExecutionDuration") - .HasColumnName("ExecutionDuration") - .HasColumnType("int"); - - b.Property("ExecutionTime") - .HasColumnName("ExecutionTime") - .HasColumnType("datetime2"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); - - b.Property("MethodName") - .HasColumnName("MethodName") - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); - - b.Property("Parameters") - .HasColumnName("Parameters") - .HasColumnType("nvarchar(2000)") - .HasMaxLength(2000); - - b.Property("ServiceName") - .HasColumnName("ServiceName") - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("Id"); - - b.HasIndex("AuditLogId"); - - b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); - - b.ToTable("AbpAuditLogActions"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("AuditLogId") - .HasColumnName("AuditLogId") - .HasColumnType("uniqueidentifier"); - - b.Property("ChangeTime") - .HasColumnName("ChangeTime") - .HasColumnType("datetime2"); - - b.Property("ChangeType") - .HasColumnName("ChangeType") - .HasColumnType("tinyint"); - - b.Property("EntityId") - .IsRequired() - .HasColumnName("EntityId") - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); - - b.Property("EntityTenantId") - .HasColumnType("uniqueidentifier"); - - b.Property("EntityTypeFullName") - .IsRequired() - .HasColumnName("EntityTypeFullName") - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); - - b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("Id"); - - b.HasIndex("AuditLogId"); - - b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); - - b.ToTable("AbpEntityChanges"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("EntityChangeId") - .HasColumnType("uniqueidentifier"); - - b.Property("NewValue") - .HasColumnName("NewValue") - .HasColumnType("nvarchar(512)") - .HasMaxLength(512); - - b.Property("OriginalValue") - .HasColumnName("OriginalValue") - .HasColumnType("nvarchar(512)") - .HasMaxLength(512); - - b.Property("PropertyName") - .IsRequired() - .HasColumnName("PropertyName") - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); - - b.Property("PropertyTypeFullName") - .IsRequired() - .HasColumnName("PropertyTypeFullName") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("Id"); - - b.HasIndex("EntityChangeId"); - - b.ToTable("AbpEntityPropertyChanges"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasColumnName("ConcurrencyStamp") - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); - - b.Property("Description") - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); - - b.Property("IsStatic") - .HasColumnType("bit"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); - - b.Property("Regex") - .HasColumnType("nvarchar(512)") - .HasMaxLength(512); - - b.Property("RegexDescription") - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); - - b.Property("Required") - .HasColumnType("bit"); - - b.Property("ValueType") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("AbpClaimTypes"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasColumnName("ConcurrencyStamp") - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); - - b.Property("IsDefault") - .HasColumnName("IsDefault") - .HasColumnType("bit"); - - b.Property("IsPublic") - .HasColumnName("IsPublic") - .HasColumnType("bit"); - - b.Property("IsStatic") - .HasColumnName("IsStatic") - .HasColumnType("bit"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); - - b.Property("NormalizedName") - .IsRequired() - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName"); - - b.ToTable("AbpRoles"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("ClaimType") - .IsRequired() - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); - - b.Property("ClaimValue") - .HasColumnType("nvarchar(1024)") - .HasMaxLength(1024); - - b.Property("RoleId") - .HasColumnType("uniqueidentifier"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AbpRoleClaims"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("AccessFailedCount") - .ValueGeneratedOnAdd() - .HasColumnName("AccessFailedCount") - .HasColumnType("int") - .HasDefaultValue(0); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") - .HasColumnType("nvarchar(max)"); - - b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); - - b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); - - b.Property("DeleterId") - .HasColumnName("DeleterId") - .HasColumnType("uniqueidentifier"); - - b.Property("DeletionTime") - .HasColumnName("DeletionTime") - .HasColumnType("datetime2"); - - b.Property("Email") - .HasColumnName("Email") - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); - - b.Property("EmailConfirmed") - .ValueGeneratedOnAdd() - .HasColumnName("EmailConfirmed") - .HasColumnType("bit") - .HasDefaultValue(false); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnName("IsDeleted") - .HasColumnType("bit") - .HasDefaultValue(false); - - b.Property("LastModificationTime") - .HasColumnName("LastModificationTime") - .HasColumnType("datetime2"); - - b.Property("LastModifierId") - .HasColumnName("LastModifierId") - .HasColumnType("uniqueidentifier"); - - b.Property("LockoutEnabled") - .ValueGeneratedOnAdd() - .HasColumnName("LockoutEnabled") - .HasColumnType("bit") - .HasDefaultValue(false); - - b.Property("LockoutEnd") - .HasColumnType("datetimeoffset"); - - b.Property("Name") - .HasColumnName("Name") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.Property("NormalizedEmail") - .HasColumnName("NormalizedEmail") - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); - - b.Property("NormalizedUserName") - .IsRequired() - .HasColumnName("NormalizedUserName") - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); - - b.Property("PasswordHash") - .HasColumnName("PasswordHash") - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); - - b.Property("PhoneNumber") - .HasColumnName("PhoneNumber") - .HasColumnType("nvarchar(16)") - .HasMaxLength(16); - - b.Property("PhoneNumberConfirmed") - .ValueGeneratedOnAdd() - .HasColumnName("PhoneNumberConfirmed") - .HasColumnType("bit") - .HasDefaultValue(false); - - b.Property("SecurityStamp") - .IsRequired() - .HasColumnName("SecurityStamp") - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); - - b.Property("Surname") - .HasColumnName("Surname") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.Property("TenantId") - .HasColumnName("TenantId") - .HasColumnType("uniqueidentifier"); - - b.Property("TwoFactorEnabled") - .ValueGeneratedOnAdd() - .HasColumnName("TwoFactorEnabled") - .HasColumnType("bit") - .HasDefaultValue(false); - - b.Property("UserName") - .IsRequired() - .HasColumnName("UserName") - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); - - b.HasKey("Id"); - - b.HasIndex("Email"); - - b.HasIndex("NormalizedEmail"); - - b.HasIndex("NormalizedUserName"); - - b.HasIndex("UserName"); - - b.ToTable("AbpUsers"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("ClaimType") - .IsRequired() - .HasColumnType("nvarchar(256)") - .HasMaxLength(256); - - b.Property("ClaimValue") - .HasColumnType("nvarchar(1024)") - .HasMaxLength(1024); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier"); - - b.Property("UserId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AbpUserClaims"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => - { - b.Property("UserId") - .HasColumnType("uniqueidentifier"); - - b.Property("LoginProvider") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.Property("ProviderDisplayName") - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); - - b.Property("ProviderKey") - .IsRequired() - .HasColumnType("nvarchar(196)") - .HasMaxLength(196); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("UserId", "LoginProvider"); - - b.HasIndex("LoginProvider", "ProviderKey"); - - b.ToTable("AbpUserLogins"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("uniqueidentifier"); - - b.Property("RoleId") - .HasColumnType("uniqueidentifier"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId", "UserId"); - - b.ToTable("AbpUserRoles"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("uniqueidentifier"); - - b.Property("LoginProvider") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.Property("Name") - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier"); - - b.Property("Value") - .HasColumnType("nvarchar(max)"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AbpUserTokens"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResource", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") - .HasColumnType("nvarchar(max)"); - - b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); - - b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); - - b.Property("DeleterId") - .HasColumnName("DeleterId") - .HasColumnType("uniqueidentifier"); - - b.Property("DeletionTime") - .HasColumnName("DeletionTime") - .HasColumnType("datetime2"); - - b.Property("Description") - .HasColumnType("nvarchar(1000)") - .HasMaxLength(1000); - - b.Property("DisplayName") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("Enabled") - .HasColumnType("bit"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnName("IsDeleted") - .HasColumnType("bit") - .HasDefaultValue(false); - - b.Property("LastModificationTime") - .HasColumnName("LastModificationTime") - .HasColumnType("datetime2"); - - b.Property("LastModifierId") - .HasColumnName("LastModifierId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("Properties") - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("IdentityServerApiResources"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b => - { - b.Property("ApiResourceId") - .HasColumnType("uniqueidentifier"); - - b.Property("Type") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.HasKey("ApiResourceId", "Type"); - - b.ToTable("IdentityServerApiClaims"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b => - { - b.Property("ApiResourceId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("Description") - .HasColumnType("nvarchar(1000)") - .HasMaxLength(1000); - - b.Property("DisplayName") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("Emphasize") - .HasColumnType("bit"); - - b.Property("Required") - .HasColumnType("bit"); - - b.Property("ShowInDiscoveryDocument") - .HasColumnType("bit"); - - b.HasKey("ApiResourceId", "Name"); - - b.ToTable("IdentityServerApiScopes"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b => - { - b.Property("ApiResourceId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("Type") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.HasKey("ApiResourceId", "Name", "Type"); - - b.ToTable("IdentityServerApiScopeClaims"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b => - { - b.Property("ApiResourceId") - .HasColumnType("uniqueidentifier"); - - b.Property("Type") - .HasColumnType("nvarchar(250)") - .HasMaxLength(250); - - b.Property("Value") - .HasColumnType("nvarchar(4000)") - .HasMaxLength(4000); - - b.Property("Description") - .HasColumnType("nvarchar(2000)") - .HasMaxLength(2000); - - b.Property("Expiration") - .HasColumnType("datetime2"); - - b.HasKey("ApiResourceId", "Type", "Value"); - - b.ToTable("IdentityServerApiSecrets"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.Client", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("AbsoluteRefreshTokenLifetime") - .HasColumnType("int"); - - b.Property("AccessTokenLifetime") - .HasColumnType("int"); - - b.Property("AccessTokenType") - .HasColumnType("int"); - - b.Property("AllowAccessTokensViaBrowser") - .HasColumnType("bit"); - - b.Property("AllowOfflineAccess") - .HasColumnType("bit"); - - b.Property("AllowPlainTextPkce") - .HasColumnType("bit"); - - b.Property("AllowRememberConsent") - .HasColumnType("bit"); - - b.Property("AlwaysIncludeUserClaimsInIdToken") - .HasColumnType("bit"); - - b.Property("AlwaysSendClientClaims") - .HasColumnType("bit"); - - b.Property("AuthorizationCodeLifetime") - .HasColumnType("int"); - - b.Property("BackChannelLogoutSessionRequired") - .HasColumnType("bit"); - - b.Property("BackChannelLogoutUri") - .HasColumnType("nvarchar(2000)") - .HasMaxLength(2000); - - b.Property("ClientClaimsPrefix") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("ClientId") - .IsRequired() - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("ClientName") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("ClientUri") - .HasColumnType("nvarchar(2000)") - .HasMaxLength(2000); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") - .HasColumnType("nvarchar(max)"); - - b.Property("ConsentLifetime") - .HasColumnType("int"); - - b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); - - b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); - - b.Property("DeleterId") - .HasColumnName("DeleterId") - .HasColumnType("uniqueidentifier"); - - b.Property("DeletionTime") - .HasColumnName("DeletionTime") - .HasColumnType("datetime2"); - - b.Property("Description") - .HasColumnType("nvarchar(1000)") - .HasMaxLength(1000); - - b.Property("DeviceCodeLifetime") - .HasColumnType("int"); - - b.Property("EnableLocalLogin") - .HasColumnType("bit"); - - b.Property("Enabled") - .HasColumnType("bit"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); - - b.Property("FrontChannelLogoutSessionRequired") - .HasColumnType("bit"); - - b.Property("FrontChannelLogoutUri") - .HasColumnType("nvarchar(2000)") - .HasMaxLength(2000); - - b.Property("IdentityTokenLifetime") - .HasColumnType("int"); - - b.Property("IncludeJwtId") - .HasColumnType("bit"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnName("IsDeleted") - .HasColumnType("bit") - .HasDefaultValue(false); - - b.Property("LastModificationTime") - .HasColumnName("LastModificationTime") - .HasColumnType("datetime2"); - - b.Property("LastModifierId") - .HasColumnName("LastModifierId") - .HasColumnType("uniqueidentifier"); - - b.Property("LogoUri") - .HasColumnType("nvarchar(2000)") - .HasMaxLength(2000); - - b.Property("PairWiseSubjectSalt") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("ProtocolType") - .IsRequired() - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("RefreshTokenExpiration") - .HasColumnType("int"); - - b.Property("RefreshTokenUsage") - .HasColumnType("int"); - - b.Property("RequireClientSecret") - .HasColumnType("bit"); - - b.Property("RequireConsent") - .HasColumnType("bit"); - - b.Property("RequirePkce") - .HasColumnType("bit"); - - b.Property("SlidingRefreshTokenLifetime") - .HasColumnType("int"); - - b.Property("UpdateAccessTokenClaimsOnRefresh") - .HasColumnType("bit"); - - b.Property("UserCodeType") - .HasColumnType("nvarchar(100)") - .HasMaxLength(100); - - b.Property("UserSsoLifetime") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.HasIndex("ClientId"); - - b.ToTable("IdentityServerClients"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => - { - b.Property("ClientId") - .HasColumnType("uniqueidentifier"); - - b.Property("Type") - .HasColumnType("nvarchar(250)") - .HasMaxLength(250); - - b.Property("Value") - .HasColumnType("nvarchar(250)") - .HasMaxLength(250); - - b.HasKey("ClientId", "Type", "Value"); - - b.ToTable("IdentityServerClientClaims"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => - { - b.Property("ClientId") - .HasColumnType("uniqueidentifier"); - - b.Property("Origin") - .HasColumnType("nvarchar(150)") - .HasMaxLength(150); - - b.HasKey("ClientId", "Origin"); - - b.ToTable("IdentityServerClientCorsOrigins"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => - { - b.Property("ClientId") - .HasColumnType("uniqueidentifier"); - - b.Property("GrantType") - .HasColumnType("nvarchar(250)") - .HasMaxLength(250); - - b.HasKey("ClientId", "GrantType"); - - b.ToTable("IdentityServerClientGrantTypes"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => - { - b.Property("ClientId") - .HasColumnType("uniqueidentifier"); - - b.Property("Provider") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.HasKey("ClientId", "Provider"); - - b.ToTable("IdentityServerClientIdPRestrictions"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => - { - b.Property("ClientId") - .HasColumnType("uniqueidentifier"); - - b.Property("PostLogoutRedirectUri") - .HasColumnType("nvarchar(2000)") - .HasMaxLength(2000); - - b.HasKey("ClientId", "PostLogoutRedirectUri"); - - b.ToTable("IdentityServerClientPostLogoutRedirectUris"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => - { - b.Property("ClientId") - .HasColumnType("uniqueidentifier"); - - b.Property("Key") - .HasColumnType("nvarchar(250)") - .HasMaxLength(250); - - b.Property("Value") - .IsRequired() - .HasColumnType("nvarchar(2000)") - .HasMaxLength(2000); - - b.HasKey("ClientId", "Key"); - - b.ToTable("IdentityServerClientProperties"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => - { - b.Property("ClientId") - .HasColumnType("uniqueidentifier"); - - b.Property("RedirectUri") - .HasColumnType("nvarchar(2000)") - .HasMaxLength(2000); - - b.HasKey("ClientId", "RedirectUri"); - - b.ToTable("IdentityServerClientRedirectUris"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => - { - b.Property("ClientId") - .HasColumnType("uniqueidentifier"); - - b.Property("Scope") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.HasKey("ClientId", "Scope"); - - b.ToTable("IdentityServerClientScopes"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => - { - b.Property("ClientId") - .HasColumnType("uniqueidentifier"); - - b.Property("Type") - .HasColumnType("nvarchar(250)") - .HasMaxLength(250); - - b.Property("Value") - .HasColumnType("nvarchar(4000)") - .HasMaxLength(4000); - - b.Property("Description") - .HasColumnType("nvarchar(2000)") - .HasMaxLength(2000); - - b.Property("Expiration") - .HasColumnType("datetime2"); - - b.HasKey("ClientId", "Type", "Value"); - - b.ToTable("IdentityServerClientSecrets"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => - { - b.Property("Key") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("ClientId") - .IsRequired() - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("ConcurrencyStamp") - .HasColumnType("nvarchar(max)"); - - b.Property("CreationTime") - .HasColumnType("datetime2"); - - b.Property("Data") - .IsRequired() - .HasColumnType("nvarchar(max)") - .HasMaxLength(50000); - - b.Property("Expiration") - .HasColumnType("datetime2"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); - - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("SubjectId") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("Type") - .IsRequired() - .HasColumnType("nvarchar(50)") - .HasMaxLength(50); - - b.HasKey("Key"); - - b.HasIndex("Expiration"); - - b.HasIndex("SubjectId", "ClientId", "Type"); - - b.ToTable("IdentityServerPersistedGrants"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b => - { - b.Property("IdentityResourceId") - .HasColumnType("uniqueidentifier"); - - b.Property("Type") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.HasKey("IdentityResourceId", "Type"); - - b.ToTable("IdentityServerIdentityClaims"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") - .HasColumnType("nvarchar(max)"); - - b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); - - b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); - - b.Property("DeleterId") - .HasColumnName("DeleterId") - .HasColumnType("uniqueidentifier"); - - b.Property("DeletionTime") - .HasColumnName("DeletionTime") - .HasColumnType("datetime2"); - - b.Property("Description") - .HasColumnType("nvarchar(1000)") - .HasMaxLength(1000); - - b.Property("DisplayName") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("Emphasize") - .HasColumnType("bit"); - - b.Property("Enabled") - .HasColumnType("bit"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnName("IsDeleted") - .HasColumnType("bit") - .HasDefaultValue(false); - - b.Property("LastModificationTime") - .HasColumnName("LastModificationTime") - .HasColumnType("datetime2"); - - b.Property("LastModifierId") - .HasColumnName("LastModifierId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("Properties") - .HasColumnType("nvarchar(max)"); - - b.Property("Required") - .HasColumnType("bit"); - - b.Property("ShowInDiscoveryDocument") - .HasColumnType("bit"); - - b.HasKey("Id"); - - b.ToTable("IdentityServerIdentityResources"); - }); - - modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); - - b.Property("ProviderKey") - .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.Property("ProviderName") - .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey"); - - b.ToTable("AbpPermissionGrants"); - }); - - modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); - - b.Property("ProviderKey") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.Property("ProviderName") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.Property("Value") - .IsRequired() - .HasColumnType("nvarchar(2048)") - .HasMaxLength(2048); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey"); - - b.ToTable("AbpSettings"); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") - .HasColumnType("nvarchar(max)"); - - b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); - - b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); - - b.Property("DeleterId") - .HasColumnName("DeleterId") - .HasColumnType("uniqueidentifier"); - - b.Property("DeletionTime") - .HasColumnName("DeletionTime") - .HasColumnType("datetime2"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnName("IsDeleted") - .HasColumnType("bit") - .HasDefaultValue(false); - - b.Property("LastModificationTime") - .HasColumnName("LastModificationTime") - .HasColumnType("datetime2"); - - b.Property("LastModifierId") - .HasColumnName("LastModifierId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.HasKey("Id"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("AbpTenants"); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => - { - b.Property("TenantId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.Property("Value") - .IsRequired() - .HasColumnType("nvarchar(1024)") - .HasMaxLength(1024); - - b.HasKey("TenantId", "Name"); - - b.ToTable("AbpTenantConnectionStrings"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => - { - b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) - .WithMany("Actions") - .HasForeignKey("AuditLogId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => - { - b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) - .WithMany("EntityChanges") - .HasForeignKey("AuditLogId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => - { - b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) - .WithMany("PropertyChanges") - .HasForeignKey("EntityChangeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => - { - b.HasOne("Volo.Abp.Identity.IdentityRole", null) - .WithMany("Claims") - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Claims") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Logins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => - { - b.HasOne("Volo.Abp.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Roles") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Tokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b => - { - b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) - .WithMany("UserClaims") - .HasForeignKey("ApiResourceId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b => - { - b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) - .WithMany("Scopes") - .HasForeignKey("ApiResourceId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b => - { - b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiScope", null) - .WithMany("UserClaims") - .HasForeignKey("ApiResourceId", "Name") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b => - { - b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) - .WithMany("Secrets") - .HasForeignKey("ApiResourceId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => - { - b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) - .WithMany("Claims") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => - { - b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) - .WithMany("AllowedCorsOrigins") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => - { - b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) - .WithMany("AllowedGrantTypes") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => - { - b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) - .WithMany("IdentityProviderRestrictions") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => - { - b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) - .WithMany("PostLogoutRedirectUris") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => - { - b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) - .WithMany("Properties") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => - { - b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) - .WithMany("RedirectUris") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => - { - b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) - .WithMany("AllowedScopes") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => - { - b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) - .WithMany("ClientSecrets") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b => - { - b.HasOne("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", null) - .WithMany("UserClaims") - .HasForeignKey("IdentityResourceId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => - { - b.HasOne("Volo.Abp.TenantManagement.Tenant", null) - .WithMany("ConnectionStrings") - .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Migrations/20191018081038_Initial.cs b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Migrations/20191018081038_Initial.cs deleted file mode 100644 index 5fea609471..0000000000 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Migrations/20191018081038_Initial.cs +++ /dev/null @@ -1,982 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -namespace Acme.BookStore.BookManagement.Migrations -{ - public partial class Initial : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "AbpAuditLogs", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(nullable: true), - ApplicationName = table.Column(maxLength: 96, nullable: true), - UserId = table.Column(nullable: true), - UserName = table.Column(maxLength: 256, nullable: true), - TenantId = table.Column(nullable: true), - TenantName = table.Column(nullable: true), - ImpersonatorUserId = table.Column(nullable: true), - ImpersonatorTenantId = table.Column(nullable: true), - ExecutionTime = table.Column(nullable: false), - ExecutionDuration = table.Column(nullable: false), - ClientIpAddress = table.Column(maxLength: 64, nullable: true), - ClientName = table.Column(maxLength: 128, nullable: true), - ClientId = table.Column(maxLength: 64, nullable: true), - CorrelationId = table.Column(maxLength: 64, nullable: true), - BrowserInfo = table.Column(maxLength: 512, nullable: true), - HttpMethod = table.Column(maxLength: 16, nullable: true), - Url = table.Column(maxLength: 256, nullable: true), - Exceptions = table.Column(maxLength: 4000, nullable: true), - Comments = table.Column(maxLength: 256, nullable: true), - HttpStatusCode = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpAuditLogs", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpClaimTypes", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(maxLength: 256, nullable: false), - Name = table.Column(maxLength: 256, nullable: false), - Required = table.Column(nullable: false), - IsStatic = table.Column(nullable: false), - Regex = table.Column(maxLength: 512, nullable: true), - RegexDescription = table.Column(maxLength: 128, nullable: true), - Description = table.Column(maxLength: 256, nullable: true), - ValueType = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpClaimTypes", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpPermissionGrants", - columns: table => new - { - Id = table.Column(nullable: false), - TenantId = table.Column(nullable: true), - Name = table.Column(maxLength: 128, nullable: false), - ProviderName = table.Column(maxLength: 64, nullable: false), - ProviderKey = table.Column(maxLength: 64, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpPermissionGrants", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpRoles", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(maxLength: 256, nullable: false), - TenantId = table.Column(nullable: true), - Name = table.Column(maxLength: 256, nullable: false), - NormalizedName = table.Column(maxLength: 256, nullable: false), - IsDefault = table.Column(nullable: false), - IsStatic = table.Column(nullable: false), - IsPublic = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpRoles", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpSettings", - columns: table => new - { - Id = table.Column(nullable: false), - Name = table.Column(maxLength: 128, nullable: false), - Value = table.Column(maxLength: 2048, nullable: false), - ProviderName = table.Column(maxLength: 64, nullable: true), - ProviderKey = table.Column(maxLength: 64, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpSettings", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpTenants", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(nullable: true), - CreationTime = table.Column(nullable: false), - CreatorId = table.Column(nullable: true), - LastModificationTime = table.Column(nullable: true), - LastModifierId = table.Column(nullable: true), - IsDeleted = table.Column(nullable: false, defaultValue: false), - DeleterId = table.Column(nullable: true), - DeletionTime = table.Column(nullable: true), - Name = table.Column(maxLength: 64, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpTenants", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpUsers", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(nullable: true), - CreationTime = table.Column(nullable: false), - CreatorId = table.Column(nullable: true), - LastModificationTime = table.Column(nullable: true), - LastModifierId = table.Column(nullable: true), - IsDeleted = table.Column(nullable: false, defaultValue: false), - DeleterId = table.Column(nullable: true), - DeletionTime = table.Column(nullable: true), - TenantId = table.Column(nullable: true), - UserName = table.Column(maxLength: 256, nullable: false), - NormalizedUserName = table.Column(maxLength: 256, nullable: false), - Name = table.Column(maxLength: 64, nullable: true), - Surname = table.Column(maxLength: 64, nullable: true), - Email = table.Column(maxLength: 256, nullable: true), - NormalizedEmail = table.Column(maxLength: 256, nullable: true), - EmailConfirmed = table.Column(nullable: false, defaultValue: false), - PasswordHash = table.Column(maxLength: 256, nullable: true), - SecurityStamp = table.Column(maxLength: 256, nullable: false), - PhoneNumber = table.Column(maxLength: 16, nullable: true), - PhoneNumberConfirmed = table.Column(nullable: false, defaultValue: false), - TwoFactorEnabled = table.Column(nullable: false, defaultValue: false), - LockoutEnd = table.Column(nullable: true), - LockoutEnabled = table.Column(nullable: false, defaultValue: false), - AccessFailedCount = table.Column(nullable: false, defaultValue: 0) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUsers", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerApiResources", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(nullable: true), - CreationTime = table.Column(nullable: false), - CreatorId = table.Column(nullable: true), - LastModificationTime = table.Column(nullable: true), - LastModifierId = table.Column(nullable: true), - IsDeleted = table.Column(nullable: false, defaultValue: false), - DeleterId = table.Column(nullable: true), - DeletionTime = table.Column(nullable: true), - Name = table.Column(maxLength: 200, nullable: false), - DisplayName = table.Column(maxLength: 200, nullable: true), - Description = table.Column(maxLength: 1000, nullable: true), - Enabled = table.Column(nullable: false), - Properties = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerApiResources", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerClients", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(nullable: true), - CreationTime = table.Column(nullable: false), - CreatorId = table.Column(nullable: true), - LastModificationTime = table.Column(nullable: true), - LastModifierId = table.Column(nullable: true), - IsDeleted = table.Column(nullable: false, defaultValue: false), - DeleterId = table.Column(nullable: true), - DeletionTime = table.Column(nullable: true), - ClientId = table.Column(maxLength: 200, nullable: false), - ClientName = table.Column(maxLength: 200, nullable: true), - Description = table.Column(maxLength: 1000, nullable: true), - ClientUri = table.Column(maxLength: 2000, nullable: true), - LogoUri = table.Column(maxLength: 2000, nullable: true), - Enabled = table.Column(nullable: false), - ProtocolType = table.Column(maxLength: 200, nullable: false), - RequireClientSecret = table.Column(nullable: false), - RequireConsent = table.Column(nullable: false), - AllowRememberConsent = table.Column(nullable: false), - AlwaysIncludeUserClaimsInIdToken = table.Column(nullable: false), - RequirePkce = table.Column(nullable: false), - AllowPlainTextPkce = table.Column(nullable: false), - AllowAccessTokensViaBrowser = table.Column(nullable: false), - FrontChannelLogoutUri = table.Column(maxLength: 2000, nullable: true), - FrontChannelLogoutSessionRequired = table.Column(nullable: false), - BackChannelLogoutUri = table.Column(maxLength: 2000, nullable: true), - BackChannelLogoutSessionRequired = table.Column(nullable: false), - AllowOfflineAccess = table.Column(nullable: false), - IdentityTokenLifetime = table.Column(nullable: false), - AccessTokenLifetime = table.Column(nullable: false), - AuthorizationCodeLifetime = table.Column(nullable: false), - ConsentLifetime = table.Column(nullable: true), - AbsoluteRefreshTokenLifetime = table.Column(nullable: false), - SlidingRefreshTokenLifetime = table.Column(nullable: false), - RefreshTokenUsage = table.Column(nullable: false), - UpdateAccessTokenClaimsOnRefresh = table.Column(nullable: false), - RefreshTokenExpiration = table.Column(nullable: false), - AccessTokenType = table.Column(nullable: false), - EnableLocalLogin = table.Column(nullable: false), - IncludeJwtId = table.Column(nullable: false), - AlwaysSendClientClaims = table.Column(nullable: false), - ClientClaimsPrefix = table.Column(maxLength: 200, nullable: true), - PairWiseSubjectSalt = table.Column(maxLength: 200, nullable: true), - UserSsoLifetime = table.Column(nullable: true), - UserCodeType = table.Column(maxLength: 100, nullable: true), - DeviceCodeLifetime = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerClients", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerIdentityResources", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(nullable: true), - CreationTime = table.Column(nullable: false), - CreatorId = table.Column(nullable: true), - LastModificationTime = table.Column(nullable: true), - LastModifierId = table.Column(nullable: true), - IsDeleted = table.Column(nullable: false, defaultValue: false), - DeleterId = table.Column(nullable: true), - DeletionTime = table.Column(nullable: true), - Name = table.Column(maxLength: 200, nullable: false), - DisplayName = table.Column(maxLength: 200, nullable: true), - Description = table.Column(maxLength: 1000, nullable: true), - Enabled = table.Column(nullable: false), - Required = table.Column(nullable: false), - Emphasize = table.Column(nullable: false), - ShowInDiscoveryDocument = table.Column(nullable: false), - Properties = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerIdentityResources", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerPersistedGrants", - columns: table => new - { - Key = table.Column(maxLength: 200, nullable: false), - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(nullable: true), - Type = table.Column(maxLength: 50, nullable: false), - SubjectId = table.Column(maxLength: 200, nullable: true), - ClientId = table.Column(maxLength: 200, nullable: false), - CreationTime = table.Column(nullable: false), - Expiration = table.Column(nullable: true), - Data = table.Column(maxLength: 50000, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerPersistedGrants", x => x.Key); - }); - - migrationBuilder.CreateTable( - name: "AbpAuditLogActions", - columns: table => new - { - Id = table.Column(nullable: false), - TenantId = table.Column(nullable: true), - AuditLogId = table.Column(nullable: false), - ServiceName = table.Column(maxLength: 256, nullable: true), - MethodName = table.Column(maxLength: 128, nullable: true), - Parameters = table.Column(maxLength: 2000, nullable: true), - ExecutionTime = table.Column(nullable: false), - ExecutionDuration = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpAuditLogActions", x => x.Id); - table.ForeignKey( - name: "FK_AbpAuditLogActions_AbpAuditLogs_AuditLogId", - column: x => x.AuditLogId, - principalTable: "AbpAuditLogs", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpEntityChanges", - columns: table => new - { - Id = table.Column(nullable: false), - AuditLogId = table.Column(nullable: false), - TenantId = table.Column(nullable: true), - ChangeTime = table.Column(nullable: false), - ChangeType = table.Column(nullable: false), - EntityTenantId = table.Column(nullable: true), - EntityId = table.Column(maxLength: 128, nullable: false), - EntityTypeFullName = table.Column(maxLength: 128, nullable: false), - ExtraProperties = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpEntityChanges", x => x.Id); - table.ForeignKey( - name: "FK_AbpEntityChanges_AbpAuditLogs_AuditLogId", - column: x => x.AuditLogId, - principalTable: "AbpAuditLogs", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpRoleClaims", - columns: table => new - { - Id = table.Column(nullable: false), - TenantId = table.Column(nullable: true), - ClaimType = table.Column(maxLength: 256, nullable: false), - ClaimValue = table.Column(maxLength: 1024, nullable: true), - RoleId = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpRoleClaims", x => x.Id); - table.ForeignKey( - name: "FK_AbpRoleClaims_AbpRoles_RoleId", - column: x => x.RoleId, - principalTable: "AbpRoles", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpTenantConnectionStrings", - columns: table => new - { - TenantId = table.Column(nullable: false), - Name = table.Column(maxLength: 64, nullable: false), - Value = table.Column(maxLength: 1024, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpTenantConnectionStrings", x => new { x.TenantId, x.Name }); - table.ForeignKey( - name: "FK_AbpTenantConnectionStrings_AbpTenants_TenantId", - column: x => x.TenantId, - principalTable: "AbpTenants", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpUserClaims", - columns: table => new - { - Id = table.Column(nullable: false), - TenantId = table.Column(nullable: true), - ClaimType = table.Column(maxLength: 256, nullable: false), - ClaimValue = table.Column(maxLength: 1024, nullable: true), - UserId = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserClaims", x => x.Id); - table.ForeignKey( - name: "FK_AbpUserClaims_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpUserLogins", - columns: table => new - { - UserId = table.Column(nullable: false), - LoginProvider = table.Column(maxLength: 64, nullable: false), - TenantId = table.Column(nullable: true), - ProviderKey = table.Column(maxLength: 196, nullable: false), - ProviderDisplayName = table.Column(maxLength: 128, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserLogins", x => new { x.UserId, x.LoginProvider }); - table.ForeignKey( - name: "FK_AbpUserLogins_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpUserRoles", - columns: table => new - { - UserId = table.Column(nullable: false), - RoleId = table.Column(nullable: false), - TenantId = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserRoles", x => new { x.UserId, x.RoleId }); - table.ForeignKey( - name: "FK_AbpUserRoles_AbpRoles_RoleId", - column: x => x.RoleId, - principalTable: "AbpRoles", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_AbpUserRoles_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpUserTokens", - columns: table => new - { - UserId = table.Column(nullable: false), - LoginProvider = table.Column(maxLength: 64, nullable: false), - Name = table.Column(maxLength: 128, nullable: false), - TenantId = table.Column(nullable: true), - Value = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); - table.ForeignKey( - name: "FK_AbpUserTokens_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerApiClaims", - columns: table => new - { - Type = table.Column(maxLength: 200, nullable: false), - ApiResourceId = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerApiClaims", x => new { x.ApiResourceId, x.Type }); - table.ForeignKey( - name: "FK_IdentityServerApiClaims_IdentityServerApiResources_ApiResourceId", - column: x => x.ApiResourceId, - principalTable: "IdentityServerApiResources", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerApiScopes", - columns: table => new - { - ApiResourceId = table.Column(nullable: false), - Name = table.Column(maxLength: 200, nullable: false), - DisplayName = table.Column(maxLength: 200, nullable: true), - Description = table.Column(maxLength: 1000, nullable: true), - Required = table.Column(nullable: false), - Emphasize = table.Column(nullable: false), - ShowInDiscoveryDocument = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerApiScopes", x => new { x.ApiResourceId, x.Name }); - table.ForeignKey( - name: "FK_IdentityServerApiScopes_IdentityServerApiResources_ApiResourceId", - column: x => x.ApiResourceId, - principalTable: "IdentityServerApiResources", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerApiSecrets", - columns: table => new - { - Type = table.Column(maxLength: 250, nullable: false), - Value = table.Column(maxLength: 4000, nullable: false), - ApiResourceId = table.Column(nullable: false), - Description = table.Column(maxLength: 2000, nullable: true), - Expiration = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerApiSecrets", x => new { x.ApiResourceId, x.Type, x.Value }); - table.ForeignKey( - name: "FK_IdentityServerApiSecrets_IdentityServerApiResources_ApiResourceId", - column: x => x.ApiResourceId, - principalTable: "IdentityServerApiResources", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerClientClaims", - columns: table => new - { - ClientId = table.Column(nullable: false), - Type = table.Column(maxLength: 250, nullable: false), - Value = table.Column(maxLength: 250, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerClientClaims", x => new { x.ClientId, x.Type, x.Value }); - table.ForeignKey( - name: "FK_IdentityServerClientClaims_IdentityServerClients_ClientId", - column: x => x.ClientId, - principalTable: "IdentityServerClients", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerClientCorsOrigins", - columns: table => new - { - ClientId = table.Column(nullable: false), - Origin = table.Column(maxLength: 150, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerClientCorsOrigins", x => new { x.ClientId, x.Origin }); - table.ForeignKey( - name: "FK_IdentityServerClientCorsOrigins_IdentityServerClients_ClientId", - column: x => x.ClientId, - principalTable: "IdentityServerClients", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerClientGrantTypes", - columns: table => new - { - ClientId = table.Column(nullable: false), - GrantType = table.Column(maxLength: 250, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerClientGrantTypes", x => new { x.ClientId, x.GrantType }); - table.ForeignKey( - name: "FK_IdentityServerClientGrantTypes_IdentityServerClients_ClientId", - column: x => x.ClientId, - principalTable: "IdentityServerClients", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerClientIdPRestrictions", - columns: table => new - { - ClientId = table.Column(nullable: false), - Provider = table.Column(maxLength: 200, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerClientIdPRestrictions", x => new { x.ClientId, x.Provider }); - table.ForeignKey( - name: "FK_IdentityServerClientIdPRestrictions_IdentityServerClients_ClientId", - column: x => x.ClientId, - principalTable: "IdentityServerClients", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerClientPostLogoutRedirectUris", - columns: table => new - { - ClientId = table.Column(nullable: false), - PostLogoutRedirectUri = table.Column(maxLength: 2000, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerClientPostLogoutRedirectUris", x => new { x.ClientId, x.PostLogoutRedirectUri }); - table.ForeignKey( - name: "FK_IdentityServerClientPostLogoutRedirectUris_IdentityServerClients_ClientId", - column: x => x.ClientId, - principalTable: "IdentityServerClients", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerClientProperties", - columns: table => new - { - ClientId = table.Column(nullable: false), - Key = table.Column(maxLength: 250, nullable: false), - Value = table.Column(maxLength: 2000, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerClientProperties", x => new { x.ClientId, x.Key }); - table.ForeignKey( - name: "FK_IdentityServerClientProperties_IdentityServerClients_ClientId", - column: x => x.ClientId, - principalTable: "IdentityServerClients", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerClientRedirectUris", - columns: table => new - { - ClientId = table.Column(nullable: false), - RedirectUri = table.Column(maxLength: 2000, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerClientRedirectUris", x => new { x.ClientId, x.RedirectUri }); - table.ForeignKey( - name: "FK_IdentityServerClientRedirectUris_IdentityServerClients_ClientId", - column: x => x.ClientId, - principalTable: "IdentityServerClients", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerClientScopes", - columns: table => new - { - ClientId = table.Column(nullable: false), - Scope = table.Column(maxLength: 200, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerClientScopes", x => new { x.ClientId, x.Scope }); - table.ForeignKey( - name: "FK_IdentityServerClientScopes_IdentityServerClients_ClientId", - column: x => x.ClientId, - principalTable: "IdentityServerClients", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerClientSecrets", - columns: table => new - { - Type = table.Column(maxLength: 250, nullable: false), - Value = table.Column(maxLength: 4000, nullable: false), - ClientId = table.Column(nullable: false), - Description = table.Column(maxLength: 2000, nullable: true), - Expiration = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerClientSecrets", x => new { x.ClientId, x.Type, x.Value }); - table.ForeignKey( - name: "FK_IdentityServerClientSecrets_IdentityServerClients_ClientId", - column: x => x.ClientId, - principalTable: "IdentityServerClients", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerIdentityClaims", - columns: table => new - { - Type = table.Column(maxLength: 200, nullable: false), - IdentityResourceId = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerIdentityClaims", x => new { x.IdentityResourceId, x.Type }); - table.ForeignKey( - name: "FK_IdentityServerIdentityClaims_IdentityServerIdentityResources_IdentityResourceId", - column: x => x.IdentityResourceId, - principalTable: "IdentityServerIdentityResources", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpEntityPropertyChanges", - columns: table => new - { - Id = table.Column(nullable: false), - TenantId = table.Column(nullable: true), - EntityChangeId = table.Column(nullable: false), - NewValue = table.Column(maxLength: 512, nullable: true), - OriginalValue = table.Column(maxLength: 512, nullable: true), - PropertyName = table.Column(maxLength: 128, nullable: false), - PropertyTypeFullName = table.Column(maxLength: 64, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpEntityPropertyChanges", x => x.Id); - table.ForeignKey( - name: "FK_AbpEntityPropertyChanges_AbpEntityChanges_EntityChangeId", - column: x => x.EntityChangeId, - principalTable: "AbpEntityChanges", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerApiScopeClaims", - columns: table => new - { - Type = table.Column(maxLength: 200, nullable: false), - ApiResourceId = table.Column(nullable: false), - Name = table.Column(maxLength: 200, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerApiScopeClaims", x => new { x.ApiResourceId, x.Name, x.Type }); - table.ForeignKey( - name: "FK_IdentityServerApiScopeClaims_IdentityServerApiScopes_ApiResourceId_Name", - columns: x => new { x.ApiResourceId, x.Name }, - principalTable: "IdentityServerApiScopes", - principalColumns: new[] { "ApiResourceId", "Name" }, - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateIndex( - name: "IX_AbpAuditLogActions_AuditLogId", - table: "AbpAuditLogActions", - column: "AuditLogId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpAuditLogActions_TenantId_ServiceName_MethodName_ExecutionTime", - table: "AbpAuditLogActions", - columns: new[] { "TenantId", "ServiceName", "MethodName", "ExecutionTime" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpAuditLogs_TenantId_ExecutionTime", - table: "AbpAuditLogs", - columns: new[] { "TenantId", "ExecutionTime" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpAuditLogs_TenantId_UserId_ExecutionTime", - table: "AbpAuditLogs", - columns: new[] { "TenantId", "UserId", "ExecutionTime" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpEntityChanges_AuditLogId", - table: "AbpEntityChanges", - column: "AuditLogId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpEntityChanges_TenantId_EntityTypeFullName_EntityId", - table: "AbpEntityChanges", - columns: new[] { "TenantId", "EntityTypeFullName", "EntityId" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpEntityPropertyChanges_EntityChangeId", - table: "AbpEntityPropertyChanges", - column: "EntityChangeId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpPermissionGrants_Name_ProviderName_ProviderKey", - table: "AbpPermissionGrants", - columns: new[] { "Name", "ProviderName", "ProviderKey" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpRoleClaims_RoleId", - table: "AbpRoleClaims", - column: "RoleId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpRoles_NormalizedName", - table: "AbpRoles", - column: "NormalizedName"); - - migrationBuilder.CreateIndex( - name: "IX_AbpSettings_Name_ProviderName_ProviderKey", - table: "AbpSettings", - columns: new[] { "Name", "ProviderName", "ProviderKey" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpTenants_Name", - table: "AbpTenants", - column: "Name", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_AbpUserClaims_UserId", - table: "AbpUserClaims", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUserLogins_LoginProvider_ProviderKey", - table: "AbpUserLogins", - columns: new[] { "LoginProvider", "ProviderKey" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpUserRoles_RoleId_UserId", - table: "AbpUserRoles", - columns: new[] { "RoleId", "UserId" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpUsers_Email", - table: "AbpUsers", - column: "Email"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUsers_NormalizedEmail", - table: "AbpUsers", - column: "NormalizedEmail"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUsers_NormalizedUserName", - table: "AbpUsers", - column: "NormalizedUserName"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUsers_UserName", - table: "AbpUsers", - column: "UserName"); - - migrationBuilder.CreateIndex( - name: "IX_IdentityServerClients_ClientId", - table: "IdentityServerClients", - column: "ClientId"); - - migrationBuilder.CreateIndex( - name: "IX_IdentityServerPersistedGrants_Expiration", - table: "IdentityServerPersistedGrants", - column: "Expiration"); - - migrationBuilder.CreateIndex( - name: "IX_IdentityServerPersistedGrants_SubjectId_ClientId_Type", - table: "IdentityServerPersistedGrants", - columns: new[] { "SubjectId", "ClientId", "Type" }); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "AbpAuditLogActions"); - - migrationBuilder.DropTable( - name: "AbpClaimTypes"); - - migrationBuilder.DropTable( - name: "AbpEntityPropertyChanges"); - - migrationBuilder.DropTable( - name: "AbpPermissionGrants"); - - migrationBuilder.DropTable( - name: "AbpRoleClaims"); - - migrationBuilder.DropTable( - name: "AbpSettings"); - - migrationBuilder.DropTable( - name: "AbpTenantConnectionStrings"); - - migrationBuilder.DropTable( - name: "AbpUserClaims"); - - migrationBuilder.DropTable( - name: "AbpUserLogins"); - - migrationBuilder.DropTable( - name: "AbpUserRoles"); - - migrationBuilder.DropTable( - name: "AbpUserTokens"); - - migrationBuilder.DropTable( - name: "IdentityServerApiClaims"); - - migrationBuilder.DropTable( - name: "IdentityServerApiScopeClaims"); - - migrationBuilder.DropTable( - name: "IdentityServerApiSecrets"); - - migrationBuilder.DropTable( - name: "IdentityServerClientClaims"); - - migrationBuilder.DropTable( - name: "IdentityServerClientCorsOrigins"); - - migrationBuilder.DropTable( - name: "IdentityServerClientGrantTypes"); - - migrationBuilder.DropTable( - name: "IdentityServerClientIdPRestrictions"); - - migrationBuilder.DropTable( - name: "IdentityServerClientPostLogoutRedirectUris"); - - migrationBuilder.DropTable( - name: "IdentityServerClientProperties"); - - migrationBuilder.DropTable( - name: "IdentityServerClientRedirectUris"); - - migrationBuilder.DropTable( - name: "IdentityServerClientScopes"); - - migrationBuilder.DropTable( - name: "IdentityServerClientSecrets"); - - migrationBuilder.DropTable( - name: "IdentityServerIdentityClaims"); - - migrationBuilder.DropTable( - name: "IdentityServerPersistedGrants"); - - migrationBuilder.DropTable( - name: "AbpEntityChanges"); - - migrationBuilder.DropTable( - name: "AbpTenants"); - - migrationBuilder.DropTable( - name: "AbpRoles"); - - migrationBuilder.DropTable( - name: "AbpUsers"); - - migrationBuilder.DropTable( - name: "IdentityServerApiScopes"); - - migrationBuilder.DropTable( - name: "IdentityServerClients"); - - migrationBuilder.DropTable( - name: "IdentityServerIdentityResources"); - - migrationBuilder.DropTable( - name: "AbpAuditLogs"); - - migrationBuilder.DropTable( - name: "IdentityServerApiResources"); - } - } -} diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018081718_Initial.Designer.cs b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Migrations/20200106082830_Initial.Designer.cs similarity index 96% rename from samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018081718_Initial.Designer.cs rename to samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Migrations/20200106082830_Initial.Designer.cs index 58a98448a6..226a9a8c6c 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018081718_Initial.Designer.cs +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Migrations/20200106082830_Initial.Designer.cs @@ -1,23 +1,23 @@ // using System; -using Acme.BookStore.EntityFrameworkCore; +using Acme.BookStore.BookManagement.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -namespace Acme.BookStore.Migrations +namespace Acme.BookStore.BookManagement.Migrations { - [DbContext(typeof(BookStoreMigrationsDbContext))] - [Migration("20191018081718_Initial")] + [DbContext(typeof(IdentityServerHostMigrationsDbContext))] + [Migration("20200106082830_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "3.0.0") + .HasAnnotation("ProductVersion", "3.1.0") .HasAnnotation("Relational:MaxIdentifierLength", 128) .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); @@ -268,92 +268,6 @@ namespace Acme.BookStore.Migrations b.ToTable("AbpEntityPropertyChanges"); }); - modelBuilder.Entity("Volo.Abp.BackgroundJobs.BackgroundJobRecord", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .HasColumnType("nvarchar(max)"); - - b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); - - b.Property("IsAbandoned") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false); - - b.Property("JobArgs") - .IsRequired() - .HasColumnType("nvarchar(max)") - .HasMaxLength(1048576); - - b.Property("JobName") - .IsRequired() - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); - - b.Property("LastTryTime") - .HasColumnType("datetime2"); - - b.Property("NextTryTime") - .HasColumnType("datetime2"); - - b.Property("Priority") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint") - .HasDefaultValue((byte)15); - - b.Property("TryCount") - .ValueGeneratedOnAdd() - .HasColumnType("smallint") - .HasDefaultValue((short)0); - - b.HasKey("Id"); - - b.HasIndex("IsAbandoned", "NextTryTime"); - - b.ToTable("AbpBackgroundJobs"); - }); - - modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); - - b.Property("ProviderKey") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.Property("ProviderName") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.Property("Value") - .IsRequired() - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey"); - - b.ToTable("AbpFeatureValues"); - }); - modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => { b.Property("Id") @@ -512,6 +426,7 @@ namespace Acme.BookStore.Migrations .HasColumnType("datetime2"); b.Property("Email") + .IsRequired() .HasColumnName("Email") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -555,6 +470,7 @@ namespace Acme.BookStore.Migrations .HasMaxLength(64); b.Property("NormalizedEmail") + .IsRequired() .HasColumnName("NormalizedEmail") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -1197,6 +1113,70 @@ namespace Acme.BookStore.Migrations b.ToTable("IdentityServerClientSecrets"); }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("DeviceCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Expiration") + .IsRequired() + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("Id"); + + b.HasIndex("DeviceCode") + .IsUnique(); + + b.HasIndex("Expiration"); + + b.HasIndex("UserCode") + .IsUnique(); + + b.ToTable("IdentityServerDeviceFlowCodes"); + }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => { b.Property("Key") @@ -1453,8 +1433,7 @@ namespace Acme.BookStore.Migrations b.HasKey("Id"); - b.HasIndex("Name") - .IsUnique(); + b.HasIndex("Name"); b.ToTable("AbpTenants"); }); diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Migrations/20200106082830_Initial.cs b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Migrations/20200106082830_Initial.cs new file mode 100644 index 0000000000..29fd4e6387 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Migrations/20200106082830_Initial.cs @@ -0,0 +1,1022 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace Acme.BookStore.BookManagement.Migrations +{ + public partial class Initial : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AbpAuditLogs", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + ApplicationName = table.Column(maxLength: 96, nullable: true), + UserId = table.Column(nullable: true), + UserName = table.Column(maxLength: 256, nullable: true), + TenantId = table.Column(nullable: true), + TenantName = table.Column(nullable: true), + ImpersonatorUserId = table.Column(nullable: true), + ImpersonatorTenantId = table.Column(nullable: true), + ExecutionTime = table.Column(nullable: false), + ExecutionDuration = table.Column(nullable: false), + ClientIpAddress = table.Column(maxLength: 64, nullable: true), + ClientName = table.Column(maxLength: 128, nullable: true), + ClientId = table.Column(maxLength: 64, nullable: true), + CorrelationId = table.Column(maxLength: 64, nullable: true), + BrowserInfo = table.Column(maxLength: 512, nullable: true), + HttpMethod = table.Column(maxLength: 16, nullable: true), + Url = table.Column(maxLength: 256, nullable: true), + Exceptions = table.Column(maxLength: 4000, nullable: true), + Comments = table.Column(maxLength: 256, nullable: true), + HttpStatusCode = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAuditLogs", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpClaimTypes", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(maxLength: 256, nullable: false), + Name = table.Column(maxLength: 256, nullable: false), + Required = table.Column(nullable: false), + IsStatic = table.Column(nullable: false), + Regex = table.Column(maxLength: 512, nullable: true), + RegexDescription = table.Column(maxLength: 128, nullable: true), + Description = table.Column(maxLength: 256, nullable: true), + ValueType = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpClaimTypes", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpPermissionGrants", + columns: table => new + { + Id = table.Column(nullable: false), + TenantId = table.Column(nullable: true), + Name = table.Column(maxLength: 128, nullable: false), + ProviderName = table.Column(maxLength: 64, nullable: false), + ProviderKey = table.Column(maxLength: 64, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpPermissionGrants", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpRoles", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(maxLength: 256, nullable: false), + TenantId = table.Column(nullable: true), + Name = table.Column(maxLength: 256, nullable: false), + NormalizedName = table.Column(maxLength: 256, nullable: false), + IsDefault = table.Column(nullable: false), + IsStatic = table.Column(nullable: false), + IsPublic = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpRoles", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpSettings", + columns: table => new + { + Id = table.Column(nullable: false), + Name = table.Column(maxLength: 128, nullable: false), + Value = table.Column(maxLength: 2048, nullable: false), + ProviderName = table.Column(maxLength: 64, nullable: true), + ProviderKey = table.Column(maxLength: 64, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpSettings", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpTenants", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + LastModificationTime = table.Column(nullable: true), + LastModifierId = table.Column(nullable: true), + IsDeleted = table.Column(nullable: false, defaultValue: false), + DeleterId = table.Column(nullable: true), + DeletionTime = table.Column(nullable: true), + Name = table.Column(maxLength: 64, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpTenants", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpUsers", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + LastModificationTime = table.Column(nullable: true), + LastModifierId = table.Column(nullable: true), + IsDeleted = table.Column(nullable: false, defaultValue: false), + DeleterId = table.Column(nullable: true), + DeletionTime = table.Column(nullable: true), + TenantId = table.Column(nullable: true), + UserName = table.Column(maxLength: 256, nullable: false), + NormalizedUserName = table.Column(maxLength: 256, nullable: false), + Name = table.Column(maxLength: 64, nullable: true), + Surname = table.Column(maxLength: 64, nullable: true), + Email = table.Column(maxLength: 256, nullable: false), + NormalizedEmail = table.Column(maxLength: 256, nullable: false), + EmailConfirmed = table.Column(nullable: false, defaultValue: false), + PasswordHash = table.Column(maxLength: 256, nullable: true), + SecurityStamp = table.Column(maxLength: 256, nullable: false), + PhoneNumber = table.Column(maxLength: 16, nullable: true), + PhoneNumberConfirmed = table.Column(nullable: false, defaultValue: false), + TwoFactorEnabled = table.Column(nullable: false, defaultValue: false), + LockoutEnd = table.Column(nullable: true), + LockoutEnabled = table.Column(nullable: false, defaultValue: false), + AccessFailedCount = table.Column(nullable: false, defaultValue: 0) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUsers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerApiResources", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + LastModificationTime = table.Column(nullable: true), + LastModifierId = table.Column(nullable: true), + IsDeleted = table.Column(nullable: false, defaultValue: false), + DeleterId = table.Column(nullable: true), + DeletionTime = table.Column(nullable: true), + Name = table.Column(maxLength: 200, nullable: false), + DisplayName = table.Column(maxLength: 200, nullable: true), + Description = table.Column(maxLength: 1000, nullable: true), + Enabled = table.Column(nullable: false), + Properties = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerApiResources", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClients", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + LastModificationTime = table.Column(nullable: true), + LastModifierId = table.Column(nullable: true), + IsDeleted = table.Column(nullable: false, defaultValue: false), + DeleterId = table.Column(nullable: true), + DeletionTime = table.Column(nullable: true), + ClientId = table.Column(maxLength: 200, nullable: false), + ClientName = table.Column(maxLength: 200, nullable: true), + Description = table.Column(maxLength: 1000, nullable: true), + ClientUri = table.Column(maxLength: 2000, nullable: true), + LogoUri = table.Column(maxLength: 2000, nullable: true), + Enabled = table.Column(nullable: false), + ProtocolType = table.Column(maxLength: 200, nullable: false), + RequireClientSecret = table.Column(nullable: false), + RequireConsent = table.Column(nullable: false), + AllowRememberConsent = table.Column(nullable: false), + AlwaysIncludeUserClaimsInIdToken = table.Column(nullable: false), + RequirePkce = table.Column(nullable: false), + AllowPlainTextPkce = table.Column(nullable: false), + AllowAccessTokensViaBrowser = table.Column(nullable: false), + FrontChannelLogoutUri = table.Column(maxLength: 2000, nullable: true), + FrontChannelLogoutSessionRequired = table.Column(nullable: false), + BackChannelLogoutUri = table.Column(maxLength: 2000, nullable: true), + BackChannelLogoutSessionRequired = table.Column(nullable: false), + AllowOfflineAccess = table.Column(nullable: false), + IdentityTokenLifetime = table.Column(nullable: false), + AccessTokenLifetime = table.Column(nullable: false), + AuthorizationCodeLifetime = table.Column(nullable: false), + ConsentLifetime = table.Column(nullable: true), + AbsoluteRefreshTokenLifetime = table.Column(nullable: false), + SlidingRefreshTokenLifetime = table.Column(nullable: false), + RefreshTokenUsage = table.Column(nullable: false), + UpdateAccessTokenClaimsOnRefresh = table.Column(nullable: false), + RefreshTokenExpiration = table.Column(nullable: false), + AccessTokenType = table.Column(nullable: false), + EnableLocalLogin = table.Column(nullable: false), + IncludeJwtId = table.Column(nullable: false), + AlwaysSendClientClaims = table.Column(nullable: false), + ClientClaimsPrefix = table.Column(maxLength: 200, nullable: true), + PairWiseSubjectSalt = table.Column(maxLength: 200, nullable: true), + UserSsoLifetime = table.Column(nullable: true), + UserCodeType = table.Column(maxLength: 100, nullable: true), + DeviceCodeLifetime = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClients", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerDeviceFlowCodes", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + DeviceCode = table.Column(maxLength: 200, nullable: false), + UserCode = table.Column(maxLength: 200, nullable: false), + SubjectId = table.Column(maxLength: 200, nullable: true), + ClientId = table.Column(maxLength: 200, nullable: false), + Expiration = table.Column(nullable: false), + Data = table.Column(maxLength: 50000, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerDeviceFlowCodes", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerIdentityResources", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + LastModificationTime = table.Column(nullable: true), + LastModifierId = table.Column(nullable: true), + IsDeleted = table.Column(nullable: false, defaultValue: false), + DeleterId = table.Column(nullable: true), + DeletionTime = table.Column(nullable: true), + Name = table.Column(maxLength: 200, nullable: false), + DisplayName = table.Column(maxLength: 200, nullable: true), + Description = table.Column(maxLength: 1000, nullable: true), + Enabled = table.Column(nullable: false), + Required = table.Column(nullable: false), + Emphasize = table.Column(nullable: false), + ShowInDiscoveryDocument = table.Column(nullable: false), + Properties = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerIdentityResources", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerPersistedGrants", + columns: table => new + { + Key = table.Column(maxLength: 200, nullable: false), + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + Type = table.Column(maxLength: 50, nullable: false), + SubjectId = table.Column(maxLength: 200, nullable: true), + ClientId = table.Column(maxLength: 200, nullable: false), + CreationTime = table.Column(nullable: false), + Expiration = table.Column(nullable: true), + Data = table.Column(maxLength: 50000, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerPersistedGrants", x => x.Key); + }); + + migrationBuilder.CreateTable( + name: "AbpAuditLogActions", + columns: table => new + { + Id = table.Column(nullable: false), + TenantId = table.Column(nullable: true), + AuditLogId = table.Column(nullable: false), + ServiceName = table.Column(maxLength: 256, nullable: true), + MethodName = table.Column(maxLength: 128, nullable: true), + Parameters = table.Column(maxLength: 2000, nullable: true), + ExecutionTime = table.Column(nullable: false), + ExecutionDuration = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAuditLogActions", x => x.Id); + table.ForeignKey( + name: "FK_AbpAuditLogActions_AbpAuditLogs_AuditLogId", + column: x => x.AuditLogId, + principalTable: "AbpAuditLogs", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpEntityChanges", + columns: table => new + { + Id = table.Column(nullable: false), + AuditLogId = table.Column(nullable: false), + TenantId = table.Column(nullable: true), + ChangeTime = table.Column(nullable: false), + ChangeType = table.Column(nullable: false), + EntityTenantId = table.Column(nullable: true), + EntityId = table.Column(maxLength: 128, nullable: false), + EntityTypeFullName = table.Column(maxLength: 128, nullable: false), + ExtraProperties = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpEntityChanges", x => x.Id); + table.ForeignKey( + name: "FK_AbpEntityChanges_AbpAuditLogs_AuditLogId", + column: x => x.AuditLogId, + principalTable: "AbpAuditLogs", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpRoleClaims", + columns: table => new + { + Id = table.Column(nullable: false), + TenantId = table.Column(nullable: true), + ClaimType = table.Column(maxLength: 256, nullable: false), + ClaimValue = table.Column(maxLength: 1024, nullable: true), + RoleId = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpRoleClaims", x => x.Id); + table.ForeignKey( + name: "FK_AbpRoleClaims_AbpRoles_RoleId", + column: x => x.RoleId, + principalTable: "AbpRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpTenantConnectionStrings", + columns: table => new + { + TenantId = table.Column(nullable: false), + Name = table.Column(maxLength: 64, nullable: false), + Value = table.Column(maxLength: 1024, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpTenantConnectionStrings", x => new { x.TenantId, x.Name }); + table.ForeignKey( + name: "FK_AbpTenantConnectionStrings_AbpTenants_TenantId", + column: x => x.TenantId, + principalTable: "AbpTenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserClaims", + columns: table => new + { + Id = table.Column(nullable: false), + TenantId = table.Column(nullable: true), + ClaimType = table.Column(maxLength: 256, nullable: false), + ClaimValue = table.Column(maxLength: 1024, nullable: true), + UserId = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserClaims", x => x.Id); + table.ForeignKey( + name: "FK_AbpUserClaims_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserLogins", + columns: table => new + { + UserId = table.Column(nullable: false), + LoginProvider = table.Column(maxLength: 64, nullable: false), + TenantId = table.Column(nullable: true), + ProviderKey = table.Column(maxLength: 196, nullable: false), + ProviderDisplayName = table.Column(maxLength: 128, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserLogins", x => new { x.UserId, x.LoginProvider }); + table.ForeignKey( + name: "FK_AbpUserLogins_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserRoles", + columns: table => new + { + UserId = table.Column(nullable: false), + RoleId = table.Column(nullable: false), + TenantId = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserRoles", x => new { x.UserId, x.RoleId }); + table.ForeignKey( + name: "FK_AbpUserRoles_AbpRoles_RoleId", + column: x => x.RoleId, + principalTable: "AbpRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AbpUserRoles_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserTokens", + columns: table => new + { + UserId = table.Column(nullable: false), + LoginProvider = table.Column(maxLength: 64, nullable: false), + Name = table.Column(maxLength: 128, nullable: false), + TenantId = table.Column(nullable: true), + Value = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); + table.ForeignKey( + name: "FK_AbpUserTokens_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerApiClaims", + columns: table => new + { + Type = table.Column(maxLength: 200, nullable: false), + ApiResourceId = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerApiClaims", x => new { x.ApiResourceId, x.Type }); + table.ForeignKey( + name: "FK_IdentityServerApiClaims_IdentityServerApiResources_ApiResourceId", + column: x => x.ApiResourceId, + principalTable: "IdentityServerApiResources", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerApiScopes", + columns: table => new + { + ApiResourceId = table.Column(nullable: false), + Name = table.Column(maxLength: 200, nullable: false), + DisplayName = table.Column(maxLength: 200, nullable: true), + Description = table.Column(maxLength: 1000, nullable: true), + Required = table.Column(nullable: false), + Emphasize = table.Column(nullable: false), + ShowInDiscoveryDocument = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerApiScopes", x => new { x.ApiResourceId, x.Name }); + table.ForeignKey( + name: "FK_IdentityServerApiScopes_IdentityServerApiResources_ApiResourceId", + column: x => x.ApiResourceId, + principalTable: "IdentityServerApiResources", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerApiSecrets", + columns: table => new + { + Type = table.Column(maxLength: 250, nullable: false), + Value = table.Column(maxLength: 4000, nullable: false), + ApiResourceId = table.Column(nullable: false), + Description = table.Column(maxLength: 2000, nullable: true), + Expiration = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerApiSecrets", x => new { x.ApiResourceId, x.Type, x.Value }); + table.ForeignKey( + name: "FK_IdentityServerApiSecrets_IdentityServerApiResources_ApiResourceId", + column: x => x.ApiResourceId, + principalTable: "IdentityServerApiResources", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientClaims", + columns: table => new + { + ClientId = table.Column(nullable: false), + Type = table.Column(maxLength: 250, nullable: false), + Value = table.Column(maxLength: 250, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientClaims", x => new { x.ClientId, x.Type, x.Value }); + table.ForeignKey( + name: "FK_IdentityServerClientClaims_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientCorsOrigins", + columns: table => new + { + ClientId = table.Column(nullable: false), + Origin = table.Column(maxLength: 150, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientCorsOrigins", x => new { x.ClientId, x.Origin }); + table.ForeignKey( + name: "FK_IdentityServerClientCorsOrigins_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientGrantTypes", + columns: table => new + { + ClientId = table.Column(nullable: false), + GrantType = table.Column(maxLength: 250, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientGrantTypes", x => new { x.ClientId, x.GrantType }); + table.ForeignKey( + name: "FK_IdentityServerClientGrantTypes_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientIdPRestrictions", + columns: table => new + { + ClientId = table.Column(nullable: false), + Provider = table.Column(maxLength: 200, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientIdPRestrictions", x => new { x.ClientId, x.Provider }); + table.ForeignKey( + name: "FK_IdentityServerClientIdPRestrictions_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientPostLogoutRedirectUris", + columns: table => new + { + ClientId = table.Column(nullable: false), + PostLogoutRedirectUri = table.Column(maxLength: 2000, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientPostLogoutRedirectUris", x => new { x.ClientId, x.PostLogoutRedirectUri }); + table.ForeignKey( + name: "FK_IdentityServerClientPostLogoutRedirectUris_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientProperties", + columns: table => new + { + ClientId = table.Column(nullable: false), + Key = table.Column(maxLength: 250, nullable: false), + Value = table.Column(maxLength: 2000, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientProperties", x => new { x.ClientId, x.Key }); + table.ForeignKey( + name: "FK_IdentityServerClientProperties_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientRedirectUris", + columns: table => new + { + ClientId = table.Column(nullable: false), + RedirectUri = table.Column(maxLength: 2000, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientRedirectUris", x => new { x.ClientId, x.RedirectUri }); + table.ForeignKey( + name: "FK_IdentityServerClientRedirectUris_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientScopes", + columns: table => new + { + ClientId = table.Column(nullable: false), + Scope = table.Column(maxLength: 200, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientScopes", x => new { x.ClientId, x.Scope }); + table.ForeignKey( + name: "FK_IdentityServerClientScopes_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientSecrets", + columns: table => new + { + Type = table.Column(maxLength: 250, nullable: false), + Value = table.Column(maxLength: 4000, nullable: false), + ClientId = table.Column(nullable: false), + Description = table.Column(maxLength: 2000, nullable: true), + Expiration = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientSecrets", x => new { x.ClientId, x.Type, x.Value }); + table.ForeignKey( + name: "FK_IdentityServerClientSecrets_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerIdentityClaims", + columns: table => new + { + Type = table.Column(maxLength: 200, nullable: false), + IdentityResourceId = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerIdentityClaims", x => new { x.IdentityResourceId, x.Type }); + table.ForeignKey( + name: "FK_IdentityServerIdentityClaims_IdentityServerIdentityResources_IdentityResourceId", + column: x => x.IdentityResourceId, + principalTable: "IdentityServerIdentityResources", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpEntityPropertyChanges", + columns: table => new + { + Id = table.Column(nullable: false), + TenantId = table.Column(nullable: true), + EntityChangeId = table.Column(nullable: false), + NewValue = table.Column(maxLength: 512, nullable: true), + OriginalValue = table.Column(maxLength: 512, nullable: true), + PropertyName = table.Column(maxLength: 128, nullable: false), + PropertyTypeFullName = table.Column(maxLength: 64, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpEntityPropertyChanges", x => x.Id); + table.ForeignKey( + name: "FK_AbpEntityPropertyChanges_AbpEntityChanges_EntityChangeId", + column: x => x.EntityChangeId, + principalTable: "AbpEntityChanges", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerApiScopeClaims", + columns: table => new + { + Type = table.Column(maxLength: 200, nullable: false), + ApiResourceId = table.Column(nullable: false), + Name = table.Column(maxLength: 200, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerApiScopeClaims", x => new { x.ApiResourceId, x.Name, x.Type }); + table.ForeignKey( + name: "FK_IdentityServerApiScopeClaims_IdentityServerApiScopes_ApiResourceId_Name", + columns: x => new { x.ApiResourceId, x.Name }, + principalTable: "IdentityServerApiScopes", + principalColumns: new[] { "ApiResourceId", "Name" }, + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogActions_AuditLogId", + table: "AbpAuditLogActions", + column: "AuditLogId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogActions_TenantId_ServiceName_MethodName_ExecutionTime", + table: "AbpAuditLogActions", + columns: new[] { "TenantId", "ServiceName", "MethodName", "ExecutionTime" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogs_TenantId_ExecutionTime", + table: "AbpAuditLogs", + columns: new[] { "TenantId", "ExecutionTime" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogs_TenantId_UserId_ExecutionTime", + table: "AbpAuditLogs", + columns: new[] { "TenantId", "UserId", "ExecutionTime" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpEntityChanges_AuditLogId", + table: "AbpEntityChanges", + column: "AuditLogId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpEntityChanges_TenantId_EntityTypeFullName_EntityId", + table: "AbpEntityChanges", + columns: new[] { "TenantId", "EntityTypeFullName", "EntityId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpEntityPropertyChanges_EntityChangeId", + table: "AbpEntityPropertyChanges", + column: "EntityChangeId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpPermissionGrants_Name_ProviderName_ProviderKey", + table: "AbpPermissionGrants", + columns: new[] { "Name", "ProviderName", "ProviderKey" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpRoleClaims_RoleId", + table: "AbpRoleClaims", + column: "RoleId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpRoles_NormalizedName", + table: "AbpRoles", + column: "NormalizedName"); + + migrationBuilder.CreateIndex( + name: "IX_AbpSettings_Name_ProviderName_ProviderKey", + table: "AbpSettings", + columns: new[] { "Name", "ProviderName", "ProviderKey" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpTenants_Name", + table: "AbpTenants", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserClaims_UserId", + table: "AbpUserClaims", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserLogins_LoginProvider_ProviderKey", + table: "AbpUserLogins", + columns: new[] { "LoginProvider", "ProviderKey" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserRoles_RoleId_UserId", + table: "AbpUserRoles", + columns: new[] { "RoleId", "UserId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpUsers_Email", + table: "AbpUsers", + column: "Email"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUsers_NormalizedEmail", + table: "AbpUsers", + column: "NormalizedEmail"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUsers_NormalizedUserName", + table: "AbpUsers", + column: "NormalizedUserName"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUsers_UserName", + table: "AbpUsers", + column: "UserName"); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerClients_ClientId", + table: "IdentityServerClients", + column: "ClientId"); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_DeviceCode", + table: "IdentityServerDeviceFlowCodes", + column: "DeviceCode", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_Expiration", + table: "IdentityServerDeviceFlowCodes", + column: "Expiration"); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_UserCode", + table: "IdentityServerDeviceFlowCodes", + column: "UserCode", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerPersistedGrants_Expiration", + table: "IdentityServerPersistedGrants", + column: "Expiration"); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerPersistedGrants_SubjectId_ClientId_Type", + table: "IdentityServerPersistedGrants", + columns: new[] { "SubjectId", "ClientId", "Type" }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpAuditLogActions"); + + migrationBuilder.DropTable( + name: "AbpClaimTypes"); + + migrationBuilder.DropTable( + name: "AbpEntityPropertyChanges"); + + migrationBuilder.DropTable( + name: "AbpPermissionGrants"); + + migrationBuilder.DropTable( + name: "AbpRoleClaims"); + + migrationBuilder.DropTable( + name: "AbpSettings"); + + migrationBuilder.DropTable( + name: "AbpTenantConnectionStrings"); + + migrationBuilder.DropTable( + name: "AbpUserClaims"); + + migrationBuilder.DropTable( + name: "AbpUserLogins"); + + migrationBuilder.DropTable( + name: "AbpUserRoles"); + + migrationBuilder.DropTable( + name: "AbpUserTokens"); + + migrationBuilder.DropTable( + name: "IdentityServerApiClaims"); + + migrationBuilder.DropTable( + name: "IdentityServerApiScopeClaims"); + + migrationBuilder.DropTable( + name: "IdentityServerApiSecrets"); + + migrationBuilder.DropTable( + name: "IdentityServerClientClaims"); + + migrationBuilder.DropTable( + name: "IdentityServerClientCorsOrigins"); + + migrationBuilder.DropTable( + name: "IdentityServerClientGrantTypes"); + + migrationBuilder.DropTable( + name: "IdentityServerClientIdPRestrictions"); + + migrationBuilder.DropTable( + name: "IdentityServerClientPostLogoutRedirectUris"); + + migrationBuilder.DropTable( + name: "IdentityServerClientProperties"); + + migrationBuilder.DropTable( + name: "IdentityServerClientRedirectUris"); + + migrationBuilder.DropTable( + name: "IdentityServerClientScopes"); + + migrationBuilder.DropTable( + name: "IdentityServerClientSecrets"); + + migrationBuilder.DropTable( + name: "IdentityServerDeviceFlowCodes"); + + migrationBuilder.DropTable( + name: "IdentityServerIdentityClaims"); + + migrationBuilder.DropTable( + name: "IdentityServerPersistedGrants"); + + migrationBuilder.DropTable( + name: "AbpEntityChanges"); + + migrationBuilder.DropTable( + name: "AbpTenants"); + + migrationBuilder.DropTable( + name: "AbpRoles"); + + migrationBuilder.DropTable( + name: "AbpUsers"); + + migrationBuilder.DropTable( + name: "IdentityServerApiScopes"); + + migrationBuilder.DropTable( + name: "IdentityServerClients"); + + migrationBuilder.DropTable( + name: "IdentityServerIdentityResources"); + + migrationBuilder.DropTable( + name: "AbpAuditLogs"); + + migrationBuilder.DropTable( + name: "IdentityServerApiResources"); + } + } +} diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Migrations/IdentityServerHostMigrationsDbContextModelSnapshot.cs b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Migrations/IdentityServerHostMigrationsDbContextModelSnapshot.cs index 6dceb1571b..57cf043bd1 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Migrations/IdentityServerHostMigrationsDbContextModelSnapshot.cs +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Migrations/IdentityServerHostMigrationsDbContextModelSnapshot.cs @@ -15,7 +15,7 @@ namespace Acme.BookStore.BookManagement.Migrations { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "3.0.0") + .HasAnnotation("ProductVersion", "3.1.0") .HasAnnotation("Relational:MaxIdentifierLength", 128) .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); @@ -424,6 +424,7 @@ namespace Acme.BookStore.BookManagement.Migrations .HasColumnType("datetime2"); b.Property("Email") + .IsRequired() .HasColumnName("Email") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -467,6 +468,7 @@ namespace Acme.BookStore.BookManagement.Migrations .HasMaxLength(64); b.Property("NormalizedEmail") + .IsRequired() .HasColumnName("NormalizedEmail") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -1109,6 +1111,70 @@ namespace Acme.BookStore.BookManagement.Migrations b.ToTable("IdentityServerClientSecrets"); }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("DeviceCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Expiration") + .IsRequired() + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("Id"); + + b.HasIndex("DeviceCode") + .IsUnique(); + + b.HasIndex("Expiration"); + + b.HasIndex("UserCode") + .IsUnique(); + + b.ToTable("IdentityServerDeviceFlowCodes"); + }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => { b.Property("Key") @@ -1365,8 +1431,7 @@ namespace Acme.BookStore.BookManagement.Migrations b.HasKey("Id"); - b.HasIndex("Name") - .IsUnique(); + b.HasIndex("Name"); b.ToTable("AbpTenants"); }); diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Migrations/20190527144415_Initial.Designer.cs b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Migrations/20190527144415_Initial.Designer.cs deleted file mode 100644 index 1ed05a4c4b..0000000000 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Migrations/20190527144415_Initial.Designer.cs +++ /dev/null @@ -1,716 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Acme.BookStore.BookManagement.EntityFrameworkCore; - -namespace Acme.BookStore.BookManagement.Migrations -{ - [DbContext(typeof(UnifiedDbContext))] - [Migration("20190527144415_Initial")] - partial class Initial - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "2.2.4-servicing-10062") - .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("ApplicationName") - .HasColumnName("ApplicationName") - .HasMaxLength(96); - - b.Property("BrowserInfo") - .HasColumnName("BrowserInfo") - .HasMaxLength(512); - - b.Property("ClientId") - .HasColumnName("ClientId") - .HasMaxLength(64); - - b.Property("ClientIpAddress") - .HasColumnName("ClientIpAddress") - .HasMaxLength(64); - - b.Property("ClientName") - .HasColumnName("ClientName") - .HasMaxLength(128); - - b.Property("Comments") - .HasColumnName("Comments") - .HasMaxLength(256); - - b.Property("ConcurrencyStamp"); - - b.Property("CorrelationId") - .HasColumnName("CorrelationId") - .HasMaxLength(64); - - b.Property("Exceptions") - .HasColumnName("Exceptions") - .HasMaxLength(4000); - - b.Property("ExecutionDuration") - .HasColumnName("ExecutionDuration"); - - b.Property("ExecutionTime"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); - - b.Property("HttpMethod") - .HasColumnName("HttpMethod") - .HasMaxLength(16); - - b.Property("HttpStatusCode") - .HasColumnName("HttpStatusCode"); - - b.Property("ImpersonatorTenantId") - .HasColumnName("ImpersonatorTenantId"); - - b.Property("ImpersonatorUserId") - .HasColumnName("ImpersonatorUserId"); - - b.Property("TenantId") - .HasColumnName("TenantId"); - - b.Property("TenantName"); - - b.Property("Url") - .HasColumnName("Url") - .HasMaxLength(256); - - b.Property("UserId") - .HasColumnName("UserId"); - - b.Property("UserName") - .HasColumnName("UserName") - .HasMaxLength(256); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "ExecutionTime"); - - b.HasIndex("TenantId", "UserId", "ExecutionTime"); - - b.ToTable("AbpAuditLogs"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("AuditLogId") - .HasColumnName("AuditLogId"); - - b.Property("ExecutionDuration") - .HasColumnName("ExecutionDuration"); - - b.Property("ExecutionTime") - .HasColumnName("ExecutionTime"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); - - b.Property("MethodName") - .HasColumnName("MethodName") - .HasMaxLength(128); - - b.Property("Parameters") - .HasColumnName("Parameters") - .HasMaxLength(2000); - - b.Property("ServiceName") - .HasColumnName("ServiceName") - .HasMaxLength(256); - - b.Property("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("AuditLogId"); - - b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); - - b.ToTable("AbpAuditLogActions"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("AuditLogId") - .HasColumnName("AuditLogId"); - - b.Property("ChangeTime") - .HasColumnName("ChangeTime"); - - b.Property("ChangeType") - .HasColumnName("ChangeType"); - - b.Property("EntityId") - .IsRequired() - .HasColumnName("EntityId") - .HasMaxLength(128); - - b.Property("EntityTenantId"); - - b.Property("EntityTypeFullName") - .IsRequired() - .HasColumnName("EntityTypeFullName") - .HasMaxLength(128); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); - - b.Property("TenantId") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("AuditLogId"); - - b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); - - b.ToTable("AbpEntityChanges"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("EntityChangeId"); - - b.Property("NewValue") - .HasColumnName("NewValue") - .HasMaxLength(512); - - b.Property("OriginalValue") - .HasColumnName("OriginalValue") - .HasMaxLength(512); - - b.Property("PropertyName") - .IsRequired() - .HasColumnName("PropertyName") - .HasMaxLength(128); - - b.Property("PropertyTypeFullName") - .IsRequired() - .HasColumnName("PropertyTypeFullName") - .HasMaxLength(64); - - b.Property("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("EntityChangeId"); - - b.ToTable("AbpEntityPropertyChanges"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasColumnName("ConcurrencyStamp") - .HasMaxLength(256); - - b.Property("Description") - .HasMaxLength(256); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); - - b.Property("IsStatic"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(256); - - b.Property("Regex") - .HasMaxLength(512); - - b.Property("RegexDescription") - .HasMaxLength(128); - - b.Property("Required"); - - b.Property("ValueType"); - - b.HasKey("Id"); - - b.ToTable("AbpClaimTypes"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasColumnName("ConcurrencyStamp") - .HasMaxLength(256); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); - - b.Property("IsDefault") - .HasColumnName("IsDefault"); - - b.Property("IsPublic") - .HasColumnName("IsPublic"); - - b.Property("IsStatic") - .HasColumnName("IsStatic"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(256); - - b.Property("NormalizedName") - .IsRequired() - .HasMaxLength(256); - - b.Property("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName"); - - b.ToTable("AbpRoles"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("ClaimType") - .IsRequired() - .HasMaxLength(256); - - b.Property("ClaimValue") - .HasMaxLength(1024); - - b.Property("RoleId"); - - b.Property("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AbpRoleClaims"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("AccessFailedCount") - .ValueGeneratedOnAdd() - .HasColumnName("AccessFailedCount") - .HasDefaultValue(0); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnName("DeletionTime"); - - b.Property("Email") - .HasColumnName("Email") - .HasMaxLength(256); - - b.Property("EmailConfirmed") - .ValueGeneratedOnAdd() - .HasColumnName("EmailConfirmed") - .HasDefaultValue(false); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnName("IsDeleted") - .HasDefaultValue(false); - - b.Property("LastModificationTime") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnName("LastModifierId"); - - b.Property("LockoutEnabled") - .ValueGeneratedOnAdd() - .HasColumnName("LockoutEnabled") - .HasDefaultValue(false); - - b.Property("LockoutEnd"); - - b.Property("Name") - .HasColumnName("Name") - .HasMaxLength(64); - - b.Property("NormalizedEmail") - .HasColumnName("NormalizedEmail") - .HasMaxLength(256); - - b.Property("NormalizedUserName") - .IsRequired() - .HasColumnName("NormalizedUserName") - .HasMaxLength(256); - - b.Property("PasswordHash") - .HasColumnName("PasswordHash") - .HasMaxLength(256); - - b.Property("PhoneNumber") - .HasColumnName("PhoneNumber") - .HasMaxLength(16); - - b.Property("PhoneNumberConfirmed") - .ValueGeneratedOnAdd() - .HasColumnName("PhoneNumberConfirmed") - .HasDefaultValue(false); - - b.Property("SecurityStamp") - .IsRequired() - .HasColumnName("SecurityStamp") - .HasMaxLength(256); - - b.Property("Surname") - .HasColumnName("Surname") - .HasMaxLength(64); - - b.Property("TenantId") - .HasColumnName("TenantId"); - - b.Property("TwoFactorEnabled") - .ValueGeneratedOnAdd() - .HasColumnName("TwoFactorEnabled") - .HasDefaultValue(false); - - b.Property("UserName") - .IsRequired() - .HasColumnName("UserName") - .HasMaxLength(256); - - b.HasKey("Id"); - - b.HasIndex("Email"); - - b.HasIndex("NormalizedEmail"); - - b.HasIndex("NormalizedUserName"); - - b.HasIndex("UserName"); - - b.ToTable("AbpUsers"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("ClaimType") - .IsRequired() - .HasMaxLength(256); - - b.Property("ClaimValue") - .HasMaxLength(1024); - - b.Property("TenantId"); - - b.Property("UserId"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AbpUserClaims"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => - { - b.Property("UserId"); - - b.Property("LoginProvider") - .HasMaxLength(64); - - b.Property("ProviderDisplayName") - .HasMaxLength(128); - - b.Property("ProviderKey") - .IsRequired() - .HasMaxLength(196); - - b.Property("TenantId"); - - b.HasKey("UserId", "LoginProvider"); - - b.HasIndex("LoginProvider", "ProviderKey"); - - b.ToTable("AbpUserLogins"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => - { - b.Property("UserId"); - - b.Property("RoleId"); - - b.Property("TenantId"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId", "UserId"); - - b.ToTable("AbpUserRoles"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => - { - b.Property("UserId"); - - b.Property("LoginProvider") - .HasMaxLength(64); - - b.Property("Name") - .HasMaxLength(128); - - b.Property("TenantId"); - - b.Property("Value"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AbpUserTokens"); - }); - - modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128); - - b.Property("ProviderKey") - .IsRequired() - .HasMaxLength(64); - - b.Property("ProviderName") - .IsRequired() - .HasMaxLength(64); - - b.Property("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey"); - - b.ToTable("AbpPermissionGrants"); - }); - - modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128); - - b.Property("ProviderKey") - .HasMaxLength(64); - - b.Property("ProviderName") - .HasMaxLength(64); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2048); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey"); - - b.ToTable("AbpSettings"); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => - { - b.Property("Id") - .ValueGeneratedOnAdd(); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnName("DeletionTime"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnName("IsDeleted") - .HasDefaultValue(false); - - b.Property("LastModificationTime") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnName("LastModifierId"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(64); - - b.HasKey("Id"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("AbpTenants"); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => - { - b.Property("TenantId"); - - b.Property("Name") - .HasMaxLength(64); - - b.Property("Value") - .IsRequired() - .HasMaxLength(1024); - - b.HasKey("TenantId", "Name"); - - b.ToTable("AbpTenantConnectionStrings"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => - { - b.HasOne("Volo.Abp.AuditLogging.AuditLog") - .WithMany("Actions") - .HasForeignKey("AuditLogId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => - { - b.HasOne("Volo.Abp.AuditLogging.AuditLog") - .WithMany("EntityChanges") - .HasForeignKey("AuditLogId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => - { - b.HasOne("Volo.Abp.AuditLogging.EntityChange") - .WithMany("PropertyChanges") - .HasForeignKey("EntityChangeId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => - { - b.HasOne("Volo.Abp.Identity.IdentityRole") - .WithMany("Claims") - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser") - .WithMany("Claims") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser") - .WithMany("Logins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => - { - b.HasOne("Volo.Abp.Identity.IdentityRole") - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("Volo.Abp.Identity.IdentityUser") - .WithMany("Roles") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser") - .WithMany("Tokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => - { - b.HasOne("Volo.Abp.TenantManagement.Tenant") - .WithMany("ConnectionStrings") - .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20191018081320_Initial.Designer.cs b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Migrations/20200106082340_Initial.Designer.cs similarity index 56% rename from samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20191018081320_Initial.Designer.cs rename to samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Migrations/20200106082340_Initial.Designer.cs index 874183e1ee..caf8dac8ce 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20191018081320_Initial.Designer.cs +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Migrations/20200106082340_Initial.Designer.cs @@ -1,26 +1,76 @@ // using System; -using AuthServer.Host.EntityFrameworkCore; +using Acme.BookStore.BookManagement.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -namespace AuthServer.Host.Migrations +namespace Acme.BookStore.BookManagement.Migrations { - [DbContext(typeof(AuthServerDbContext))] - [Migration("20191018081320_Initial")] + [DbContext(typeof(UnifiedDbContext))] + [Migration("20200106082340_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "3.0.0") + .HasAnnotation("ProductVersion", "3.1.0") .HasAnnotation("Relational:MaxIdentifierLength", 128) .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + modelBuilder.Entity("Acme.BookStore.BookManagement.Books.Book", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Price") + .HasColumnType("real"); + + b.Property("PublishDate") + .HasColumnType("datetime2"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("BmBooks"); + }); + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => { b.Property("Id") @@ -426,6 +476,7 @@ namespace AuthServer.Host.Migrations .HasColumnType("datetime2"); b.Property("Email") + .IsRequired() .HasColumnName("Email") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -469,6 +520,7 @@ namespace AuthServer.Host.Migrations .HasMaxLength(64); b.Property("NormalizedEmail") + .IsRequired() .HasColumnName("NormalizedEmail") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -632,231 +684,79 @@ namespace AuthServer.Host.Migrations b.ToTable("AbpUserTokens"); }); - modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResource", b => + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("uniqueidentifier"); - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") - .HasColumnType("nvarchar(max)"); - - b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); - - b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); - - b.Property("DeleterId") - .HasColumnName("DeleterId") - .HasColumnType("uniqueidentifier"); - - b.Property("DeletionTime") - .HasColumnName("DeletionTime") - .HasColumnType("datetime2"); - - b.Property("Description") - .HasColumnType("nvarchar(1000)") - .HasMaxLength(1000); - - b.Property("DisplayName") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("Enabled") - .HasColumnType("bit"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnName("IsDeleted") - .HasColumnType("bit") - .HasDefaultValue(false); - - b.Property("LastModificationTime") - .HasColumnName("LastModificationTime") - .HasColumnType("datetime2"); - - b.Property("LastModifierId") - .HasColumnName("LastModifierId") - .HasColumnType("uniqueidentifier"); - b.Property("Name") .IsRequired() - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("Properties") - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("IdentityServerApiResources"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b => - { - b.Property("ApiResourceId") - .HasColumnType("uniqueidentifier"); - - b.Property("Type") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); - b.HasKey("ApiResourceId", "Type"); + b.Property("ProviderKey") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); - b.ToTable("IdentityServerApiClaims"); - }); + b.Property("ProviderName") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); - modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b => - { - b.Property("ApiResourceId") + b.Property("TenantId") .HasColumnType("uniqueidentifier"); - b.Property("Name") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("Description") - .HasColumnType("nvarchar(1000)") - .HasMaxLength(1000); - - b.Property("DisplayName") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("Emphasize") - .HasColumnType("bit"); - - b.Property("Required") - .HasColumnType("bit"); - - b.Property("ShowInDiscoveryDocument") - .HasColumnType("bit"); + b.HasKey("Id"); - b.HasKey("ApiResourceId", "Name"); + b.HasIndex("Name", "ProviderName", "ProviderKey"); - b.ToTable("IdentityServerApiScopes"); + b.ToTable("AbpPermissionGrants"); }); - modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b => + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => { - b.Property("ApiResourceId") + b.Property("Id") + .ValueGeneratedOnAdd() .HasColumnType("uniqueidentifier"); b.Property("Name") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("Type") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.HasKey("ApiResourceId", "Name", "Type"); - - b.ToTable("IdentityServerApiScopeClaims"); - }); + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); - modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b => - { - b.Property("ApiResourceId") - .HasColumnType("uniqueidentifier"); + b.Property("ProviderKey") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); - b.Property("Type") - .HasColumnType("nvarchar(250)") - .HasMaxLength(250); + b.Property("ProviderName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); b.Property("Value") - .HasColumnType("nvarchar(4000)") - .HasMaxLength(4000); - - b.Property("Description") - .HasColumnType("nvarchar(2000)") - .HasMaxLength(2000); + .IsRequired() + .HasColumnType("nvarchar(2048)") + .HasMaxLength(2048); - b.Property("Expiration") - .HasColumnType("datetime2"); + b.HasKey("Id"); - b.HasKey("ApiResourceId", "Type", "Value"); + b.HasIndex("Name", "ProviderName", "ProviderKey"); - b.ToTable("IdentityServerApiSecrets"); + b.ToTable("AbpSettings"); }); - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.Client", b => + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("uniqueidentifier"); - b.Property("AbsoluteRefreshTokenLifetime") - .HasColumnType("int"); - - b.Property("AccessTokenLifetime") - .HasColumnType("int"); - - b.Property("AccessTokenType") - .HasColumnType("int"); - - b.Property("AllowAccessTokensViaBrowser") - .HasColumnType("bit"); - - b.Property("AllowOfflineAccess") - .HasColumnType("bit"); - - b.Property("AllowPlainTextPkce") - .HasColumnType("bit"); - - b.Property("AllowRememberConsent") - .HasColumnType("bit"); - - b.Property("AlwaysIncludeUserClaimsInIdToken") - .HasColumnType("bit"); - - b.Property("AlwaysSendClientClaims") - .HasColumnType("bit"); - - b.Property("AuthorizationCodeLifetime") - .HasColumnType("int"); - - b.Property("BackChannelLogoutSessionRequired") - .HasColumnType("bit"); - - b.Property("BackChannelLogoutUri") - .HasColumnType("nvarchar(2000)") - .HasMaxLength(2000); - - b.Property("ClientClaimsPrefix") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("ClientId") - .IsRequired() - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("ClientName") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("ClientUri") - .HasColumnType("nvarchar(2000)") - .HasMaxLength(2000); - b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnName("ConcurrencyStamp") .HasColumnType("nvarchar(max)"); - b.Property("ConsentLifetime") - .HasColumnType("int"); - b.Property("CreationTime") .HasColumnName("CreationTime") .HasColumnType("datetime2"); @@ -873,36 +773,10 @@ namespace AuthServer.Host.Migrations .HasColumnName("DeletionTime") .HasColumnType("datetime2"); - b.Property("Description") - .HasColumnType("nvarchar(1000)") - .HasMaxLength(1000); - - b.Property("DeviceCodeLifetime") - .HasColumnType("int"); - - b.Property("EnableLocalLogin") - .HasColumnType("bit"); - - b.Property("Enabled") - .HasColumnType("bit"); - b.Property("ExtraProperties") .HasColumnName("ExtraProperties") .HasColumnType("nvarchar(max)"); - b.Property("FrontChannelLogoutSessionRequired") - .HasColumnType("bit"); - - b.Property("FrontChannelLogoutUri") - .HasColumnType("nvarchar(2000)") - .HasMaxLength(2000); - - b.Property("IdentityTokenLifetime") - .HasColumnType("int"); - - b.Property("IncludeJwtId") - .HasColumnType("bit"); - b.Property("IsDeleted") .ValueGeneratedOnAdd() .HasColumnName("IsDeleted") @@ -917,414 +791,47 @@ namespace AuthServer.Host.Migrations .HasColumnName("LastModifierId") .HasColumnType("uniqueidentifier"); - b.Property("LogoUri") - .HasColumnType("nvarchar(2000)") - .HasMaxLength(2000); - - b.Property("PairWiseSubjectSalt") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("ProtocolType") + b.Property("Name") .IsRequired() - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("RefreshTokenExpiration") - .HasColumnType("int"); - - b.Property("RefreshTokenUsage") - .HasColumnType("int"); - - b.Property("RequireClientSecret") - .HasColumnType("bit"); - - b.Property("RequireConsent") - .HasColumnType("bit"); - - b.Property("RequirePkce") - .HasColumnType("bit"); - - b.Property("SlidingRefreshTokenLifetime") - .HasColumnType("int"); - - b.Property("UpdateAccessTokenClaimsOnRefresh") - .HasColumnType("bit"); - - b.Property("UserCodeType") - .HasColumnType("nvarchar(100)") - .HasMaxLength(100); - - b.Property("UserSsoLifetime") - .HasColumnType("int"); + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); b.HasKey("Id"); - b.HasIndex("ClientId"); + b.HasIndex("Name"); - b.ToTable("IdentityServerClients"); + b.ToTable("AbpTenants"); }); - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => { - b.Property("ClientId") + b.Property("TenantId") .HasColumnType("uniqueidentifier"); - b.Property("Type") - .HasColumnType("nvarchar(250)") - .HasMaxLength(250); + b.Property("Name") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); b.Property("Value") - .HasColumnType("nvarchar(250)") - .HasMaxLength(250); + .IsRequired() + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); - b.HasKey("ClientId", "Type", "Value"); + b.HasKey("TenantId", "Name"); - b.ToTable("IdentityServerClientClaims"); + b.ToTable("AbpTenantConnectionStrings"); }); - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => { - b.Property("ClientId") - .HasColumnType("uniqueidentifier"); - - b.Property("Origin") - .HasColumnType("nvarchar(150)") - .HasMaxLength(150); - - b.HasKey("ClientId", "Origin"); - - b.ToTable("IdentityServerClientCorsOrigins"); + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); }); - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => - { - b.Property("ClientId") - .HasColumnType("uniqueidentifier"); - - b.Property("GrantType") - .HasColumnType("nvarchar(250)") - .HasMaxLength(250); - - b.HasKey("ClientId", "GrantType"); - - b.ToTable("IdentityServerClientGrantTypes"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => - { - b.Property("ClientId") - .HasColumnType("uniqueidentifier"); - - b.Property("Provider") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.HasKey("ClientId", "Provider"); - - b.ToTable("IdentityServerClientIdPRestrictions"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => - { - b.Property("ClientId") - .HasColumnType("uniqueidentifier"); - - b.Property("PostLogoutRedirectUri") - .HasColumnType("nvarchar(2000)") - .HasMaxLength(2000); - - b.HasKey("ClientId", "PostLogoutRedirectUri"); - - b.ToTable("IdentityServerClientPostLogoutRedirectUris"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => - { - b.Property("ClientId") - .HasColumnType("uniqueidentifier"); - - b.Property("Key") - .HasColumnType("nvarchar(250)") - .HasMaxLength(250); - - b.Property("Value") - .IsRequired() - .HasColumnType("nvarchar(2000)") - .HasMaxLength(2000); - - b.HasKey("ClientId", "Key"); - - b.ToTable("IdentityServerClientProperties"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => - { - b.Property("ClientId") - .HasColumnType("uniqueidentifier"); - - b.Property("RedirectUri") - .HasColumnType("nvarchar(2000)") - .HasMaxLength(2000); - - b.HasKey("ClientId", "RedirectUri"); - - b.ToTable("IdentityServerClientRedirectUris"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => - { - b.Property("ClientId") - .HasColumnType("uniqueidentifier"); - - b.Property("Scope") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.HasKey("ClientId", "Scope"); - - b.ToTable("IdentityServerClientScopes"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => - { - b.Property("ClientId") - .HasColumnType("uniqueidentifier"); - - b.Property("Type") - .HasColumnType("nvarchar(250)") - .HasMaxLength(250); - - b.Property("Value") - .HasColumnType("nvarchar(4000)") - .HasMaxLength(4000); - - b.Property("Description") - .HasColumnType("nvarchar(2000)") - .HasMaxLength(2000); - - b.Property("Expiration") - .HasColumnType("datetime2"); - - b.HasKey("ClientId", "Type", "Value"); - - b.ToTable("IdentityServerClientSecrets"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => - { - b.Property("Key") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("ClientId") - .IsRequired() - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("ConcurrencyStamp") - .HasColumnType("nvarchar(max)"); - - b.Property("CreationTime") - .HasColumnType("datetime2"); - - b.Property("Data") - .IsRequired() - .HasColumnType("nvarchar(max)") - .HasMaxLength(50000); - - b.Property("Expiration") - .HasColumnType("datetime2"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); - - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("SubjectId") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("Type") - .IsRequired() - .HasColumnType("nvarchar(50)") - .HasMaxLength(50); - - b.HasKey("Key"); - - b.HasIndex("Expiration"); - - b.HasIndex("SubjectId", "ClientId", "Type"); - - b.ToTable("IdentityServerPersistedGrants"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b => - { - b.Property("IdentityResourceId") - .HasColumnType("uniqueidentifier"); - - b.Property("Type") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.HasKey("IdentityResourceId", "Type"); - - b.ToTable("IdentityServerIdentityClaims"); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") - .HasColumnType("nvarchar(max)"); - - b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); - - b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); - - b.Property("DeleterId") - .HasColumnName("DeleterId") - .HasColumnType("uniqueidentifier"); - - b.Property("DeletionTime") - .HasColumnName("DeletionTime") - .HasColumnType("datetime2"); - - b.Property("Description") - .HasColumnType("nvarchar(1000)") - .HasMaxLength(1000); - - b.Property("DisplayName") - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("Emphasize") - .HasColumnType("bit"); - - b.Property("Enabled") - .HasColumnType("bit"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnName("IsDeleted") - .HasColumnType("bit") - .HasDefaultValue(false); - - b.Property("LastModificationTime") - .HasColumnName("LastModificationTime") - .HasColumnType("datetime2"); - - b.Property("LastModifierId") - .HasColumnName("LastModifierId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(200)") - .HasMaxLength(200); - - b.Property("Properties") - .HasColumnType("nvarchar(max)"); - - b.Property("Required") - .HasColumnType("bit"); - - b.Property("ShowInDiscoveryDocument") - .HasColumnType("bit"); - - b.HasKey("Id"); - - b.ToTable("IdentityServerIdentityResources"); - }); - - modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); - - b.Property("ProviderKey") - .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.Property("ProviderName") - .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey"); - - b.ToTable("AbpPermissionGrants"); - }); - - modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); - - b.Property("ProviderKey") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.Property("ProviderName") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.Property("Value") - .IsRequired() - .HasColumnType("nvarchar(2048)") - .HasMaxLength(2048); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey"); - - b.ToTable("AbpSettings"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => - { - b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) - .WithMany("Actions") - .HasForeignKey("AuditLogId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => { b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) .WithMany("EntityChanges") @@ -1393,128 +900,11 @@ namespace AuthServer.Host.Migrations .IsRequired(); }); - modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b => - { - b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) - .WithMany("UserClaims") - .HasForeignKey("ApiResourceId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b => - { - b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) - .WithMany("Scopes") - .HasForeignKey("ApiResourceId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b => - { - b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiScope", null) - .WithMany("UserClaims") - .HasForeignKey("ApiResourceId", "Name") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b => - { - b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) - .WithMany("Secrets") - .HasForeignKey("ApiResourceId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => - { - b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) - .WithMany("Claims") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => - { - b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) - .WithMany("AllowedCorsOrigins") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => - { - b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) - .WithMany("AllowedGrantTypes") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => - { - b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) - .WithMany("IdentityProviderRestrictions") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => - { - b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) - .WithMany("PostLogoutRedirectUris") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => - { - b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) - .WithMany("Properties") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => - { - b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) - .WithMany("RedirectUris") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => - { - b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) - .WithMany("AllowedScopes") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => - { - b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) - .WithMany("ClientSecrets") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b => + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => { - b.HasOne("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", null) - .WithMany("UserClaims") - .HasForeignKey("IdentityResourceId") + b.HasOne("Volo.Abp.TenantManagement.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Migrations/20190527144415_Initial.cs b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Migrations/20200106082340_Initial.cs similarity index 95% rename from samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Migrations/20190527144415_Initial.cs rename to samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Migrations/20200106082340_Initial.cs index 3fedb57cbd..ffe7dc0462 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Migrations/20190527144415_Initial.cs +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Migrations/20200106082340_Initial.cs @@ -148,8 +148,8 @@ namespace Acme.BookStore.BookManagement.Migrations NormalizedUserName = table.Column(maxLength: 256, nullable: false), Name = table.Column(maxLength: 64, nullable: true), Surname = table.Column(maxLength: 64, nullable: true), - Email = table.Column(maxLength: 256, nullable: true), - NormalizedEmail = table.Column(maxLength: 256, nullable: true), + Email = table.Column(maxLength: 256, nullable: false), + NormalizedEmail = table.Column(maxLength: 256, nullable: false), EmailConfirmed = table.Column(nullable: false, defaultValue: false), PasswordHash = table.Column(maxLength: 256, nullable: true), SecurityStamp = table.Column(maxLength: 256, nullable: false), @@ -165,6 +165,27 @@ namespace Acme.BookStore.BookManagement.Migrations table.PrimaryKey("PK_AbpUsers", x => x.Id); }); + migrationBuilder.CreateTable( + name: "BmBooks", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + LastModificationTime = table.Column(nullable: true), + LastModifierId = table.Column(nullable: true), + Name = table.Column(maxLength: 128, nullable: false), + Type = table.Column(nullable: false), + PublishDate = table.Column(nullable: false), + Price = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_BmBooks", x => x.Id); + }); + migrationBuilder.CreateTable( name: "AbpAuditLogActions", columns: table => new @@ -424,8 +445,7 @@ namespace Acme.BookStore.BookManagement.Migrations migrationBuilder.CreateIndex( name: "IX_AbpTenants_Name", table: "AbpTenants", - column: "Name", - unique: true); + column: "Name"); migrationBuilder.CreateIndex( name: "IX_AbpUserClaims_UserId", @@ -498,6 +518,9 @@ namespace Acme.BookStore.BookManagement.Migrations migrationBuilder.DropTable( name: "AbpUserTokens"); + migrationBuilder.DropTable( + name: "BmBooks"); + migrationBuilder.DropTable( name: "AbpEntityChanges"); diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs index 3f0e01c2bb..1a18f42708 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs @@ -1,10 +1,10 @@ // using System; +using Acme.BookStore.BookManagement.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Acme.BookStore.BookManagement.EntityFrameworkCore; namespace Acme.BookStore.BookManagement.Migrations { @@ -15,84 +15,156 @@ namespace Acme.BookStore.BookManagement.Migrations { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "2.2.4-servicing-10062") + .HasAnnotation("ProductVersion", "3.1.0") .HasAnnotation("Relational:MaxIdentifierLength", 128) .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + modelBuilder.Entity("Acme.BookStore.BookManagement.Books.Book", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Price") + .HasColumnType("real"); + + b.Property("PublishDate") + .HasColumnType("datetime2"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("BmBooks"); + }); + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => { b.Property("Id") - .ValueGeneratedOnAdd(); + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); b.Property("ApplicationName") .HasColumnName("ApplicationName") + .HasColumnType("nvarchar(96)") .HasMaxLength(96); b.Property("BrowserInfo") .HasColumnName("BrowserInfo") + .HasColumnType("nvarchar(512)") .HasMaxLength(512); b.Property("ClientId") .HasColumnName("ClientId") + .HasColumnType("nvarchar(64)") .HasMaxLength(64); b.Property("ClientIpAddress") .HasColumnName("ClientIpAddress") + .HasColumnType("nvarchar(64)") .HasMaxLength(64); b.Property("ClientName") .HasColumnName("ClientName") + .HasColumnType("nvarchar(128)") .HasMaxLength(128); b.Property("Comments") .HasColumnName("Comments") + .HasColumnType("nvarchar(256)") .HasMaxLength(256); - b.Property("ConcurrencyStamp"); + b.Property("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); b.Property("CorrelationId") .HasColumnName("CorrelationId") + .HasColumnType("nvarchar(64)") .HasMaxLength(64); b.Property("Exceptions") .HasColumnName("Exceptions") + .HasColumnType("nvarchar(4000)") .HasMaxLength(4000); b.Property("ExecutionDuration") - .HasColumnName("ExecutionDuration"); + .HasColumnName("ExecutionDuration") + .HasColumnType("int"); - b.Property("ExecutionTime"); + b.Property("ExecutionTime") + .HasColumnType("datetime2"); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); b.Property("HttpMethod") .HasColumnName("HttpMethod") + .HasColumnType("nvarchar(16)") .HasMaxLength(16); b.Property("HttpStatusCode") - .HasColumnName("HttpStatusCode"); + .HasColumnName("HttpStatusCode") + .HasColumnType("int"); b.Property("ImpersonatorTenantId") - .HasColumnName("ImpersonatorTenantId"); + .HasColumnName("ImpersonatorTenantId") + .HasColumnType("uniqueidentifier"); b.Property("ImpersonatorUserId") - .HasColumnName("ImpersonatorUserId"); + .HasColumnName("ImpersonatorUserId") + .HasColumnType("uniqueidentifier"); b.Property("TenantId") - .HasColumnName("TenantId"); + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); - b.Property("TenantName"); + b.Property("TenantName") + .HasColumnType("nvarchar(max)"); b.Property("Url") .HasColumnName("Url") + .HasColumnType("nvarchar(256)") .HasMaxLength(256); b.Property("UserId") - .HasColumnName("UserId"); + .HasColumnName("UserId") + .HasColumnType("uniqueidentifier"); b.Property("UserName") .HasColumnName("UserName") + .HasColumnType("nvarchar(256)") .HasMaxLength(256); b.HasKey("Id"); @@ -107,33 +179,42 @@ namespace Acme.BookStore.BookManagement.Migrations modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => { b.Property("Id") - .ValueGeneratedOnAdd(); + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); b.Property("AuditLogId") - .HasColumnName("AuditLogId"); + .HasColumnName("AuditLogId") + .HasColumnType("uniqueidentifier"); b.Property("ExecutionDuration") - .HasColumnName("ExecutionDuration"); + .HasColumnName("ExecutionDuration") + .HasColumnType("int"); b.Property("ExecutionTime") - .HasColumnName("ExecutionTime"); + .HasColumnName("ExecutionTime") + .HasColumnType("datetime2"); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); b.Property("MethodName") .HasColumnName("MethodName") + .HasColumnType("nvarchar(128)") .HasMaxLength(128); b.Property("Parameters") .HasColumnName("Parameters") + .HasColumnType("nvarchar(2000)") .HasMaxLength(2000); b.Property("ServiceName") .HasColumnName("ServiceName") + .HasColumnType("nvarchar(256)") .HasMaxLength(256); - b.Property("TenantId"); + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); b.HasKey("Id"); @@ -147,34 +228,43 @@ namespace Acme.BookStore.BookManagement.Migrations modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => { b.Property("Id") - .ValueGeneratedOnAdd(); + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); b.Property("AuditLogId") - .HasColumnName("AuditLogId"); + .HasColumnName("AuditLogId") + .HasColumnType("uniqueidentifier"); b.Property("ChangeTime") - .HasColumnName("ChangeTime"); + .HasColumnName("ChangeTime") + .HasColumnType("datetime2"); b.Property("ChangeType") - .HasColumnName("ChangeType"); + .HasColumnName("ChangeType") + .HasColumnType("tinyint"); b.Property("EntityId") .IsRequired() .HasColumnName("EntityId") + .HasColumnType("nvarchar(128)") .HasMaxLength(128); - b.Property("EntityTenantId"); + b.Property("EntityTenantId") + .HasColumnType("uniqueidentifier"); b.Property("EntityTypeFullName") .IsRequired() .HasColumnName("EntityTypeFullName") + .HasColumnType("nvarchar(128)") .HasMaxLength(128); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); b.Property("TenantId") - .HasColumnName("TenantId"); + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); b.HasKey("Id"); @@ -188,29 +278,36 @@ namespace Acme.BookStore.BookManagement.Migrations modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => { b.Property("Id") - .ValueGeneratedOnAdd(); + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); - b.Property("EntityChangeId"); + b.Property("EntityChangeId") + .HasColumnType("uniqueidentifier"); b.Property("NewValue") .HasColumnName("NewValue") + .HasColumnType("nvarchar(512)") .HasMaxLength(512); b.Property("OriginalValue") .HasColumnName("OriginalValue") + .HasColumnType("nvarchar(512)") .HasMaxLength(512); b.Property("PropertyName") .IsRequired() .HasColumnName("PropertyName") + .HasColumnType("nvarchar(128)") .HasMaxLength(128); b.Property("PropertyTypeFullName") .IsRequired() .HasColumnName("PropertyTypeFullName") + .HasColumnType("nvarchar(64)") .HasMaxLength(64); - b.Property("TenantId"); + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); b.HasKey("Id"); @@ -222,35 +319,45 @@ namespace Acme.BookStore.BookManagement.Migrations modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => { b.Property("Id") - .ValueGeneratedOnAdd(); + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .IsRequired() .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(256)") .HasMaxLength(256); b.Property("Description") + .HasColumnType("nvarchar(256)") .HasMaxLength(256); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); - b.Property("IsStatic"); + b.Property("IsStatic") + .HasColumnType("bit"); b.Property("Name") .IsRequired() + .HasColumnType("nvarchar(256)") .HasMaxLength(256); b.Property("Regex") + .HasColumnType("nvarchar(512)") .HasMaxLength(512); b.Property("RegexDescription") + .HasColumnType("nvarchar(128)") .HasMaxLength(128); - b.Property("Required"); + b.Property("Required") + .HasColumnType("bit"); - b.Property("ValueType"); + b.Property("ValueType") + .HasColumnType("int"); b.HasKey("Id"); @@ -260,35 +367,44 @@ namespace Acme.BookStore.BookManagement.Migrations modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => { b.Property("Id") - .ValueGeneratedOnAdd(); + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .IsRequired() .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(256)") .HasMaxLength(256); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); b.Property("IsDefault") - .HasColumnName("IsDefault"); + .HasColumnName("IsDefault") + .HasColumnType("bit"); b.Property("IsPublic") - .HasColumnName("IsPublic"); + .HasColumnName("IsPublic") + .HasColumnType("bit"); b.Property("IsStatic") - .HasColumnName("IsStatic"); + .HasColumnName("IsStatic") + .HasColumnType("bit"); b.Property("Name") .IsRequired() + .HasColumnType("nvarchar(256)") .HasMaxLength(256); b.Property("NormalizedName") .IsRequired() + .HasColumnType("nvarchar(256)") .HasMaxLength(256); - b.Property("TenantId"); + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); b.HasKey("Id"); @@ -300,18 +416,22 @@ namespace Acme.BookStore.BookManagement.Migrations modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => { b.Property("Id") - .ValueGeneratedOnAdd(); + .HasColumnType("uniqueidentifier"); b.Property("ClaimType") .IsRequired() + .HasColumnType("nvarchar(256)") .HasMaxLength(256); b.Property("ClaimValue") + .HasColumnType("nvarchar(1024)") .HasMaxLength(1024); - b.Property("RoleId"); + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); - b.Property("TenantId"); + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); b.HasKey("Id"); @@ -323,105 +443,133 @@ namespace Acme.BookStore.BookManagement.Migrations modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => { b.Property("Id") - .ValueGeneratedOnAdd(); + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); b.Property("AccessFailedCount") .ValueGeneratedOnAdd() .HasColumnName("AccessFailedCount") + .HasColumnType("int") .HasDefaultValue(0); b.Property("ConcurrencyStamp") .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp"); + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); b.Property("CreationTime") - .HasColumnName("CreationTime"); + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); b.Property("CreatorId") - .HasColumnName("CreatorId"); + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); b.Property("DeleterId") - .HasColumnName("DeleterId"); + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); b.Property("DeletionTime") - .HasColumnName("DeletionTime"); + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); b.Property("Email") + .IsRequired() .HasColumnName("Email") + .HasColumnType("nvarchar(256)") .HasMaxLength(256); b.Property("EmailConfirmed") .ValueGeneratedOnAdd() .HasColumnName("EmailConfirmed") + .HasColumnType("bit") .HasDefaultValue(false); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); b.Property("IsDeleted") .ValueGeneratedOnAdd() .HasColumnName("IsDeleted") + .HasColumnType("bit") .HasDefaultValue(false); b.Property("LastModificationTime") - .HasColumnName("LastModificationTime"); + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); b.Property("LastModifierId") - .HasColumnName("LastModifierId"); + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); b.Property("LockoutEnabled") .ValueGeneratedOnAdd() .HasColumnName("LockoutEnabled") + .HasColumnType("bit") .HasDefaultValue(false); - b.Property("LockoutEnd"); + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); b.Property("Name") .HasColumnName("Name") + .HasColumnType("nvarchar(64)") .HasMaxLength(64); b.Property("NormalizedEmail") + .IsRequired() .HasColumnName("NormalizedEmail") + .HasColumnType("nvarchar(256)") .HasMaxLength(256); b.Property("NormalizedUserName") .IsRequired() .HasColumnName("NormalizedUserName") + .HasColumnType("nvarchar(256)") .HasMaxLength(256); b.Property("PasswordHash") .HasColumnName("PasswordHash") + .HasColumnType("nvarchar(256)") .HasMaxLength(256); b.Property("PhoneNumber") .HasColumnName("PhoneNumber") + .HasColumnType("nvarchar(16)") .HasMaxLength(16); b.Property("PhoneNumberConfirmed") .ValueGeneratedOnAdd() .HasColumnName("PhoneNumberConfirmed") + .HasColumnType("bit") .HasDefaultValue(false); b.Property("SecurityStamp") .IsRequired() .HasColumnName("SecurityStamp") + .HasColumnType("nvarchar(256)") .HasMaxLength(256); b.Property("Surname") .HasColumnName("Surname") + .HasColumnType("nvarchar(64)") .HasMaxLength(64); b.Property("TenantId") - .HasColumnName("TenantId"); + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); b.Property("TwoFactorEnabled") .ValueGeneratedOnAdd() .HasColumnName("TwoFactorEnabled") + .HasColumnType("bit") .HasDefaultValue(false); b.Property("UserName") .IsRequired() .HasColumnName("UserName") + .HasColumnType("nvarchar(256)") .HasMaxLength(256); b.HasKey("Id"); @@ -440,18 +588,22 @@ namespace Acme.BookStore.BookManagement.Migrations modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => { b.Property("Id") - .ValueGeneratedOnAdd(); + .HasColumnType("uniqueidentifier"); b.Property("ClaimType") .IsRequired() + .HasColumnType("nvarchar(256)") .HasMaxLength(256); b.Property("ClaimValue") + .HasColumnType("nvarchar(1024)") .HasMaxLength(1024); - b.Property("TenantId"); + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); - b.Property("UserId"); + b.Property("UserId") + .HasColumnType("uniqueidentifier"); b.HasKey("Id"); @@ -462,19 +614,24 @@ namespace Acme.BookStore.BookManagement.Migrations modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => { - b.Property("UserId"); + b.Property("UserId") + .HasColumnType("uniqueidentifier"); b.Property("LoginProvider") + .HasColumnType("nvarchar(64)") .HasMaxLength(64); b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(128)") .HasMaxLength(128); b.Property("ProviderKey") .IsRequired() + .HasColumnType("nvarchar(196)") .HasMaxLength(196); - b.Property("TenantId"); + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); b.HasKey("UserId", "LoginProvider"); @@ -485,11 +642,14 @@ namespace Acme.BookStore.BookManagement.Migrations modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => { - b.Property("UserId"); + b.Property("UserId") + .HasColumnType("uniqueidentifier"); - b.Property("RoleId"); + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); - b.Property("TenantId"); + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); b.HasKey("UserId", "RoleId"); @@ -500,17 +660,22 @@ namespace Acme.BookStore.BookManagement.Migrations modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => { - b.Property("UserId"); + b.Property("UserId") + .HasColumnType("uniqueidentifier"); b.Property("LoginProvider") + .HasColumnType("nvarchar(64)") .HasMaxLength(64); b.Property("Name") + .HasColumnType("nvarchar(128)") .HasMaxLength(128); - b.Property("TenantId"); + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); - b.Property("Value"); + b.Property("Value") + .HasColumnType("nvarchar(max)"); b.HasKey("UserId", "LoginProvider", "Name"); @@ -520,21 +685,26 @@ namespace Acme.BookStore.BookManagement.Migrations modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => { b.Property("Id") - .ValueGeneratedOnAdd(); + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); b.Property("Name") .IsRequired() + .HasColumnType("nvarchar(128)") .HasMaxLength(128); b.Property("ProviderKey") .IsRequired() + .HasColumnType("nvarchar(64)") .HasMaxLength(64); b.Property("ProviderName") .IsRequired() + .HasColumnType("nvarchar(64)") .HasMaxLength(64); - b.Property("TenantId"); + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); b.HasKey("Id"); @@ -546,20 +716,25 @@ namespace Acme.BookStore.BookManagement.Migrations modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => { b.Property("Id") - .ValueGeneratedOnAdd(); + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); b.Property("Name") .IsRequired() + .HasColumnType("nvarchar(128)") .HasMaxLength(128); b.Property("ProviderKey") + .HasColumnType("nvarchar(64)") .HasMaxLength(64); b.Property("ProviderName") + .HasColumnType("nvarchar(64)") .HasMaxLength(64); b.Property("Value") .IsRequired() + .HasColumnType("nvarchar(2048)") .HasMaxLength(2048); b.HasKey("Id"); @@ -572,59 +747,72 @@ namespace Acme.BookStore.BookManagement.Migrations modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => { b.Property("Id") - .ValueGeneratedOnAdd(); + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp"); + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); b.Property("CreationTime") - .HasColumnName("CreationTime"); + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); b.Property("CreatorId") - .HasColumnName("CreatorId"); + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); b.Property("DeleterId") - .HasColumnName("DeleterId"); + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); b.Property("DeletionTime") - .HasColumnName("DeletionTime"); + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); b.Property("ExtraProperties") - .HasColumnName("ExtraProperties"); + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); b.Property("IsDeleted") .ValueGeneratedOnAdd() .HasColumnName("IsDeleted") + .HasColumnType("bit") .HasDefaultValue(false); b.Property("LastModificationTime") - .HasColumnName("LastModificationTime"); + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); b.Property("LastModifierId") - .HasColumnName("LastModifierId"); + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); b.Property("Name") .IsRequired() + .HasColumnType("nvarchar(64)") .HasMaxLength(64); b.HasKey("Id"); - b.HasIndex("Name") - .IsUnique(); + b.HasIndex("Name"); b.ToTable("AbpTenants"); }); modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => { - b.Property("TenantId"); + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); b.Property("Name") + .HasColumnType("nvarchar(64)") .HasMaxLength(64); b.Property("Value") .IsRequired() + .HasColumnType("nvarchar(1024)") .HasMaxLength(1024); b.HasKey("TenantId", "Name"); @@ -634,79 +822,89 @@ namespace Acme.BookStore.BookManagement.Migrations modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => { - b.HasOne("Volo.Abp.AuditLogging.AuditLog") + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) .WithMany("Actions") .HasForeignKey("AuditLogId") - .OnDelete(DeleteBehavior.Cascade); + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); }); modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => { - b.HasOne("Volo.Abp.AuditLogging.AuditLog") + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) .WithMany("EntityChanges") .HasForeignKey("AuditLogId") - .OnDelete(DeleteBehavior.Cascade); + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); }); modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => { - b.HasOne("Volo.Abp.AuditLogging.EntityChange") + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) .WithMany("PropertyChanges") .HasForeignKey("EntityChangeId") - .OnDelete(DeleteBehavior.Cascade); + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); }); modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => { - b.HasOne("Volo.Abp.Identity.IdentityRole") + b.HasOne("Volo.Abp.Identity.IdentityRole", null) .WithMany("Claims") .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade); + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); }); modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => { - b.HasOne("Volo.Abp.Identity.IdentityUser") + b.HasOne("Volo.Abp.Identity.IdentityUser", null) .WithMany("Claims") .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade); + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); }); modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => { - b.HasOne("Volo.Abp.Identity.IdentityUser") + b.HasOne("Volo.Abp.Identity.IdentityUser", null) .WithMany("Logins") .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade); + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); }); modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => { - b.HasOne("Volo.Abp.Identity.IdentityRole") + b.HasOne("Volo.Abp.Identity.IdentityRole", null) .WithMany() .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade); + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.HasOne("Volo.Abp.Identity.IdentityUser") + b.HasOne("Volo.Abp.Identity.IdentityUser", null) .WithMany("Roles") .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade); + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); }); modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => { - b.HasOne("Volo.Abp.Identity.IdentityUser") + b.HasOne("Volo.Abp.Identity.IdentityUser", null) .WithMany("Tokens") .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade); + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); }); modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => { - b.HasOne("Volo.Abp.TenantManagement.Tenant") + b.HasOne("Volo.Abp.TenantManagement.Tenant", null) .WithMany("ConnectionStrings") .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade); + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); }); #pragma warning restore 612, 618 } diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/Acme.BookStore.BookManagement.Domain.Shared.csproj b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/Acme.BookStore.BookManagement.Domain.Shared.csproj index 377f6df9b3..5237b88c14 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/Acme.BookStore.BookManagement.Domain.Shared.csproj +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/Acme.BookStore.BookManagement.Domain.Shared.csproj @@ -8,7 +8,7 @@ - + diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/BookManagementDomainSharedModule.cs b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/BookManagementDomainSharedModule.cs index 7e56eb6f18..0217782b5e 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/BookManagementDomainSharedModule.cs +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/BookManagementDomainSharedModule.cs @@ -2,7 +2,7 @@ using Volo.Abp.Localization; using Acme.BookStore.BookManagement.Localization; using Volo.Abp.Localization.ExceptionHandling; -using Volo.Abp.Localization.Resources.AbpValidation; +using Volo.Abp.Validation.Localization; using Volo.Abp.VirtualFileSystem; namespace Acme.BookStore.BookManagement diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/BookManagementTestBase.cs b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/BookManagementTestBase.cs index dea660609e..2072748cf2 100644 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/BookManagementTestBase.cs +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/BookManagementTestBase.cs @@ -17,26 +17,6 @@ namespace Acme.BookStore.BookManagement options.UseAutofac(); } - protected virtual void WithUnitOfWork(Action action) - { - WithUnitOfWork(new AbpUnitOfWorkOptions(), action); - } - - protected virtual void WithUnitOfWork(AbpUnitOfWorkOptions options, Action action) - { - using (var scope = ServiceProvider.CreateScope()) - { - var uowManager = scope.ServiceProvider.GetRequiredService(); - - using (var uow = uowManager.Begin(options)) - { - action(); - - uow.Complete(); - } - } - } - protected virtual Task WithUnitOfWorkAsync(Func func) { return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func); @@ -57,26 +37,6 @@ namespace Acme.BookStore.BookManagement } } - protected virtual TResult WithUnitOfWork(Func func) - { - return WithUnitOfWork(new AbpUnitOfWorkOptions(), func); - } - - protected virtual TResult WithUnitOfWork(AbpUnitOfWorkOptions options, Func func) - { - using (var scope = ServiceProvider.CreateScope()) - { - var uowManager = scope.ServiceProvider.GetRequiredService(); - - using (var uow = uowManager.Begin(options)) - { - var result = func(); - uow.Complete(); - return result; - } - } - } - protected virtual Task WithUnitOfWorkAsync(Func> func) { return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func); diff --git a/samples/BookStore/src/Acme.BookStore.Domain.Shared/BookStoreDomainSharedModule.cs b/samples/BookStore/src/Acme.BookStore.Domain.Shared/BookStoreDomainSharedModule.cs index 95241feeb8..6ac58cef9e 100644 --- a/samples/BookStore/src/Acme.BookStore.Domain.Shared/BookStoreDomainSharedModule.cs +++ b/samples/BookStore/src/Acme.BookStore.Domain.Shared/BookStoreDomainSharedModule.cs @@ -5,7 +5,7 @@ using Volo.Abp.FeatureManagement; using Volo.Abp.Identity; using Volo.Abp.IdentityServer; using Volo.Abp.Localization; -using Volo.Abp.Localization.Resources.AbpValidation; +using Volo.Abp.Validation.Localization; using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement; using Volo.Abp.SettingManagement; diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018080014_Created_Book_Entity.Designer.cs b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106080124_Initial.Designer.cs similarity index 97% rename from samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018080014_Created_Book_Entity.Designer.cs rename to samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106080124_Initial.Designer.cs index 3c433dbd58..75e551cd05 100644 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018080014_Created_Book_Entity.Designer.cs +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106080124_Initial.Designer.cs @@ -10,67 +10,17 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace Acme.BookStore.Migrations { [DbContext(typeof(BookStoreMigrationsDbContext))] - [Migration("20191018080014_Created_Book_Entity")] - partial class Created_Book_Entity + [Migration("20200106080124_Initial")] + partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "3.0.0") + .HasAnnotation("ProductVersion", "3.1.0") .HasAnnotation("Relational:MaxIdentifierLength", 128) .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - modelBuilder.Entity("Acme.BookStore.Book", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") - .HasColumnType("nvarchar(max)"); - - b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); - - b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); - - b.Property("LastModificationTime") - .HasColumnName("LastModificationTime") - .HasColumnType("datetime2"); - - b.Property("LastModifierId") - .HasColumnName("LastModifierId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); - - b.Property("Price") - .HasColumnType("real"); - - b.Property("PublishDate") - .HasColumnType("datetime2"); - - b.Property("Type") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("AppBooks"); - }); - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => { b.Property("Id") @@ -562,6 +512,7 @@ namespace Acme.BookStore.Migrations .HasColumnType("datetime2"); b.Property("Email") + .IsRequired() .HasColumnName("Email") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -605,6 +556,7 @@ namespace Acme.BookStore.Migrations .HasMaxLength(64); b.Property("NormalizedEmail") + .IsRequired() .HasColumnName("NormalizedEmail") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -1247,6 +1199,70 @@ namespace Acme.BookStore.Migrations b.ToTable("IdentityServerClientSecrets"); }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("DeviceCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Expiration") + .IsRequired() + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("Id"); + + b.HasIndex("DeviceCode") + .IsUnique(); + + b.HasIndex("Expiration"); + + b.HasIndex("UserCode") + .IsUnique(); + + b.ToTable("IdentityServerDeviceFlowCodes"); + }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => { b.Property("Key") @@ -1503,8 +1519,7 @@ namespace Acme.BookStore.Migrations b.HasKey("Id"); - b.HasIndex("Name") - .IsUnique(); + b.HasIndex("Name"); b.ToTable("AbpTenants"); }); diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018081718_Initial.cs b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106080124_Initial.cs similarity index 96% rename from samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018081718_Initial.cs rename to samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106080124_Initial.cs index cc04cddbf2..de6dd334dd 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018081718_Initial.cs +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106080124_Initial.cs @@ -184,8 +184,8 @@ namespace Acme.BookStore.Migrations NormalizedUserName = table.Column(maxLength: 256, nullable: false), Name = table.Column(maxLength: 64, nullable: true), Surname = table.Column(maxLength: 64, nullable: true), - Email = table.Column(maxLength: 256, nullable: true), - NormalizedEmail = table.Column(maxLength: 256, nullable: true), + Email = table.Column(maxLength: 256, nullable: false), + NormalizedEmail = table.Column(maxLength: 256, nullable: false), EmailConfirmed = table.Column(nullable: false, defaultValue: false), PasswordHash = table.Column(maxLength: 256, nullable: true), SecurityStamp = table.Column(maxLength: 256, nullable: false), @@ -283,6 +283,27 @@ namespace Acme.BookStore.Migrations table.PrimaryKey("PK_IdentityServerClients", x => x.Id); }); + migrationBuilder.CreateTable( + name: "IdentityServerDeviceFlowCodes", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + DeviceCode = table.Column(maxLength: 200, nullable: false), + UserCode = table.Column(maxLength: 200, nullable: false), + SubjectId = table.Column(maxLength: 200, nullable: true), + ClientId = table.Column(maxLength: 200, nullable: false), + Expiration = table.Column(nullable: false), + Data = table.Column(maxLength: 50000, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerDeviceFlowCodes", x => x.Id); + }); + migrationBuilder.CreateTable( name: "IdentityServerIdentityResources", columns: table => new @@ -866,8 +887,7 @@ namespace Acme.BookStore.Migrations migrationBuilder.CreateIndex( name: "IX_AbpTenants_Name", table: "AbpTenants", - column: "Name", - unique: true); + column: "Name"); migrationBuilder.CreateIndex( name: "IX_AbpUserClaims_UserId", @@ -909,6 +929,23 @@ namespace Acme.BookStore.Migrations table: "IdentityServerClients", column: "ClientId"); + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_DeviceCode", + table: "IdentityServerDeviceFlowCodes", + column: "DeviceCode", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_Expiration", + table: "IdentityServerDeviceFlowCodes", + column: "Expiration"); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_UserCode", + table: "IdentityServerDeviceFlowCodes", + column: "UserCode", + unique: true); + migrationBuilder.CreateIndex( name: "IX_IdentityServerPersistedGrants_Expiration", table: "IdentityServerPersistedGrants", @@ -997,6 +1034,9 @@ namespace Acme.BookStore.Migrations migrationBuilder.DropTable( name: "IdentityServerClientSecrets"); + migrationBuilder.DropTable( + name: "IdentityServerDeviceFlowCodes"); + migrationBuilder.DropTable( name: "IdentityServerIdentityClaims"); diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106080206_Created_Book_Entity.Designer.cs b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106080206_Created_Book_Entity.Designer.cs new file mode 100644 index 0000000000..03c3855341 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106080206_Created_Book_Entity.Designer.cs @@ -0,0 +1,1811 @@ +// +using System; +using Acme.BookStore.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace Acme.BookStore.Migrations +{ + [DbContext(typeof(BookStoreMigrationsDbContext))] + [Migration("20200106080206_Created_Book_Entity")] + partial class Created_Book_Entity + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.1.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("Acme.BookStore.Book", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Price") + .HasColumnType("real"); + + b.Property("PublishDate") + .HasColumnType("datetime2"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("AppBooks"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicationName") + .HasColumnName("ApplicationName") + .HasColumnType("nvarchar(96)") + .HasMaxLength(96); + + b.Property("BrowserInfo") + .HasColumnName("BrowserInfo") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("ClientId") + .HasColumnName("ClientId") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ClientIpAddress") + .HasColumnName("ClientIpAddress") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ClientName") + .HasColumnName("ClientName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Comments") + .HasColumnName("Comments") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CorrelationId") + .HasColumnName("CorrelationId") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Exceptions") + .HasColumnName("Exceptions") + .HasColumnType("nvarchar(4000)") + .HasMaxLength(4000); + + b.Property("ExecutionDuration") + .HasColumnName("ExecutionDuration") + .HasColumnType("int"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("HttpMethod") + .HasColumnName("HttpMethod") + .HasColumnType("nvarchar(16)") + .HasMaxLength(16); + + b.Property("HttpStatusCode") + .HasColumnName("HttpStatusCode") + .HasColumnType("int"); + + b.Property("ImpersonatorTenantId") + .HasColumnName("ImpersonatorTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("ImpersonatorUserId") + .HasColumnName("ImpersonatorUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantName") + .HasColumnType("nvarchar(max)"); + + b.Property("Url") + .HasColumnName("Url") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("UserId") + .HasColumnName("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .HasColumnName("UserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("AbpAuditLogs"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnName("AuditLogId") + .HasColumnType("uniqueidentifier"); + + b.Property("ExecutionDuration") + .HasColumnName("ExecutionDuration") + .HasColumnType("int"); + + b.Property("ExecutionTime") + .HasColumnName("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("MethodName") + .HasColumnName("MethodName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Parameters") + .HasColumnName("Parameters") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("ServiceName") + .HasColumnName("ServiceName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("AbpAuditLogActions"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnName("AuditLogId") + .HasColumnType("uniqueidentifier"); + + b.Property("ChangeTime") + .HasColumnName("ChangeTime") + .HasColumnType("datetime2"); + + b.Property("ChangeType") + .HasColumnName("ChangeType") + .HasColumnType("tinyint"); + + b.Property("EntityId") + .IsRequired() + .HasColumnName("EntityId") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("EntityTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasColumnName("EntityTypeFullName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("AbpEntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("EntityChangeId") + .HasColumnType("uniqueidentifier"); + + b.Property("NewValue") + .HasColumnName("NewValue") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("OriginalValue") + .HasColumnName("OriginalValue") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("PropertyName") + .IsRequired() + .HasColumnName("PropertyName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasColumnName("PropertyTypeFullName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.BackgroundJobs.BackgroundJobRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsAbandoned") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("JobArgs") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(1048576); + + b.Property("JobName") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("LastTryTime") + .HasColumnType("datetime2"); + + b.Property("NextTryTime") + .HasColumnType("datetime2"); + + b.Property("Priority") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint") + .HasDefaultValue((byte)15); + + b.Property("TryCount") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)0); + + b.HasKey("Id"); + + b.HasIndex("IsAbandoned", "NextTryTime"); + + b.ToTable("AbpBackgroundJobs"); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpFeatureValues"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("Description") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("Regex") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("RegexDescription") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ValueType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDefault") + .HasColumnName("IsDefault") + .HasColumnType("bit"); + + b.Property("IsPublic") + .HasColumnName("IsPublic") + .HasColumnType("bit"); + + b.Property("IsStatic") + .HasColumnName("IsStatic") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnName("AccessFailedCount") + .HasColumnType("int") + .HasDefaultValue(0); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Email") + .IsRequired() + .HasColumnName("Email") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnName("EmailConfirmed") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnName("LockoutEnabled") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .HasColumnName("Name") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("NormalizedEmail") + .IsRequired() + .HasColumnName("NormalizedEmail") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("NormalizedUserName") + .IsRequired() + .HasColumnName("NormalizedUserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("PasswordHash") + .HasColumnName("PasswordHash") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("PhoneNumber") + .HasColumnName("PhoneNumber") + .HasColumnType("nvarchar(16)") + .HasMaxLength(16); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnName("PhoneNumberConfirmed") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("SecurityStamp") + .IsRequired() + .HasColumnName("SecurityStamp") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("Surname") + .HasColumnName("Surname") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnName("TwoFactorEnabled") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("UserName") + .IsRequired() + .HasColumnName("UserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("AbpUsers"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserClaims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .IsRequired() + .HasColumnType("nvarchar(196)") + .HasMaxLength(196); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("UserId", "LoginProvider"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("AbpUserLogins"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("AbpUserRoles"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Name") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AbpUserTokens"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResource", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DisplayName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Properties") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("IdentityServerApiResources"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ApiResourceId", "Type"); + + b.ToTable("IdentityServerApiClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DisplayName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Emphasize") + .HasColumnType("bit"); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ShowInDiscoveryDocument") + .HasColumnType("bit"); + + b.HasKey("ApiResourceId", "Name"); + + b.ToTable("IdentityServerApiScopes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Type") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ApiResourceId", "Name", "Type"); + + b.ToTable("IdentityServerApiScopeClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .HasColumnType("nvarchar(4000)") + .HasMaxLength(4000); + + b.Property("Description") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("Expiration") + .HasColumnType("datetime2"); + + b.HasKey("ApiResourceId", "Type", "Value"); + + b.ToTable("IdentityServerApiSecrets"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.Client", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AbsoluteRefreshTokenLifetime") + .HasColumnType("int"); + + b.Property("AccessTokenLifetime") + .HasColumnType("int"); + + b.Property("AccessTokenType") + .HasColumnType("int"); + + b.Property("AllowAccessTokensViaBrowser") + .HasColumnType("bit"); + + b.Property("AllowOfflineAccess") + .HasColumnType("bit"); + + b.Property("AllowPlainTextPkce") + .HasColumnType("bit"); + + b.Property("AllowRememberConsent") + .HasColumnType("bit"); + + b.Property("AlwaysIncludeUserClaimsInIdToken") + .HasColumnType("bit"); + + b.Property("AlwaysSendClientClaims") + .HasColumnType("bit"); + + b.Property("AuthorizationCodeLifetime") + .HasColumnType("int"); + + b.Property("BackChannelLogoutSessionRequired") + .HasColumnType("bit"); + + b.Property("BackChannelLogoutUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("ClientClaimsPrefix") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("ConsentLifetime") + .HasColumnType("int"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DeviceCodeLifetime") + .HasColumnType("int"); + + b.Property("EnableLocalLogin") + .HasColumnType("bit"); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("FrontChannelLogoutSessionRequired") + .HasColumnType("bit"); + + b.Property("FrontChannelLogoutUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("IdentityTokenLifetime") + .HasColumnType("int"); + + b.Property("IncludeJwtId") + .HasColumnType("bit"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("LogoUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("PairWiseSubjectSalt") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ProtocolType") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("RefreshTokenExpiration") + .HasColumnType("int"); + + b.Property("RefreshTokenUsage") + .HasColumnType("int"); + + b.Property("RequireClientSecret") + .HasColumnType("bit"); + + b.Property("RequireConsent") + .HasColumnType("bit"); + + b.Property("RequirePkce") + .HasColumnType("bit"); + + b.Property("SlidingRefreshTokenLifetime") + .HasColumnType("int"); + + b.Property("UpdateAccessTokenClaimsOnRefresh") + .HasColumnType("bit"); + + b.Property("UserCodeType") + .HasColumnType("nvarchar(100)") + .HasMaxLength(100); + + b.Property("UserSsoLifetime") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("IdentityServerClients"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.HasKey("ClientId", "Type", "Value"); + + b.ToTable("IdentityServerClientClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Origin") + .HasColumnType("nvarchar(150)") + .HasMaxLength(150); + + b.HasKey("ClientId", "Origin"); + + b.ToTable("IdentityServerClientCorsOrigins"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("GrantType") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.HasKey("ClientId", "GrantType"); + + b.ToTable("IdentityServerClientGrantTypes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Provider") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ClientId", "Provider"); + + b.ToTable("IdentityServerClientIdPRestrictions"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("PostLogoutRedirectUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.HasKey("ClientId", "PostLogoutRedirectUri"); + + b.ToTable("IdentityServerClientPostLogoutRedirectUris"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Key") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.HasKey("ClientId", "Key"); + + b.ToTable("IdentityServerClientProperties"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("RedirectUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.HasKey("ClientId", "RedirectUri"); + + b.ToTable("IdentityServerClientRedirectUris"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Scope") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ClientId", "Scope"); + + b.ToTable("IdentityServerClientScopes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .HasColumnType("nvarchar(4000)") + .HasMaxLength(4000); + + b.Property("Description") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("Expiration") + .HasColumnType("datetime2"); + + b.HasKey("ClientId", "Type", "Value"); + + b.ToTable("IdentityServerClientSecrets"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("DeviceCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Expiration") + .IsRequired() + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("Id"); + + b.HasIndex("DeviceCode") + .IsUnique(); + + b.HasIndex("Expiration"); + + b.HasIndex("UserCode") + .IsUnique(); + + b.ToTable("IdentityServerDeviceFlowCodes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => + { + b.Property("Key") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnType("datetime2"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("Expiration") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Type") + .IsRequired() + .HasColumnType("nvarchar(50)") + .HasMaxLength(50); + + b.HasKey("Key"); + + b.HasIndex("Expiration"); + + b.HasIndex("SubjectId", "ClientId", "Type"); + + b.ToTable("IdentityServerPersistedGrants"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b => + { + b.Property("IdentityResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("IdentityResourceId", "Type"); + + b.ToTable("IdentityServerIdentityClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DisplayName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Emphasize") + .HasColumnType("bit"); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Properties") + .HasColumnType("nvarchar(max)"); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ShowInDiscoveryDocument") + .HasColumnType("bit"); + + b.HasKey("Id"); + + b.ToTable("IdentityServerIdentityResources"); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderName") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpPermissionGrants"); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(2048)") + .HasMaxLength(2048); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpSettings"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AbpTenants"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.HasKey("TenantId", "Name"); + + b.ToTable("AbpTenantConnectionStrings"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) + .WithMany("UserClaims") + .HasForeignKey("ApiResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) + .WithMany("Scopes") + .HasForeignKey("ApiResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiScope", null) + .WithMany("UserClaims") + .HasForeignKey("ApiResourceId", "Name") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) + .WithMany("Secrets") + .HasForeignKey("ApiResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("Claims") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("AllowedCorsOrigins") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("AllowedGrantTypes") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("IdentityProviderRestrictions") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("PostLogoutRedirectUris") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("Properties") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("RedirectUris") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("AllowedScopes") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("ClientSecrets") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", null) + .WithMany("UserClaims") + .HasForeignKey("IdentityResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.HasOne("Volo.Abp.TenantManagement.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018080014_Created_Book_Entity.cs b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106080206_Created_Book_Entity.cs similarity index 100% rename from samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018080014_Created_Book_Entity.cs rename to samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20200106080206_Created_Book_Entity.cs diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/BookStoreMigrationsDbContextModelSnapshot.cs b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/BookStoreMigrationsDbContextModelSnapshot.cs index ced549a616..21087299a6 100644 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/BookStoreMigrationsDbContextModelSnapshot.cs +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/BookStoreMigrationsDbContextModelSnapshot.cs @@ -15,7 +15,7 @@ namespace Acme.BookStore.Migrations { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "3.0.0") + .HasAnnotation("ProductVersion", "3.1.0") .HasAnnotation("Relational:MaxIdentifierLength", 128) .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); @@ -560,6 +560,7 @@ namespace Acme.BookStore.Migrations .HasColumnType("datetime2"); b.Property("Email") + .IsRequired() .HasColumnName("Email") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -603,6 +604,7 @@ namespace Acme.BookStore.Migrations .HasMaxLength(64); b.Property("NormalizedEmail") + .IsRequired() .HasColumnName("NormalizedEmail") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -1245,6 +1247,70 @@ namespace Acme.BookStore.Migrations b.ToTable("IdentityServerClientSecrets"); }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("DeviceCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Expiration") + .IsRequired() + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("Id"); + + b.HasIndex("DeviceCode") + .IsUnique(); + + b.HasIndex("Expiration"); + + b.HasIndex("UserCode") + .IsUnique(); + + b.ToTable("IdentityServerDeviceFlowCodes"); + }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => { b.Property("Key") @@ -1501,8 +1567,7 @@ namespace Acme.BookStore.Migrations b.HasKey("Id"); - b.HasIndex("Name") - .IsUnique(); + b.HasIndex("Name"); b.ToTable("AbpTenants"); }); diff --git a/samples/BookStore/test/Acme.BookStore.TestBase/BookStoreTestBase.cs b/samples/BookStore/test/Acme.BookStore.TestBase/BookStoreTestBase.cs index 0f44532e7a..979c344f93 100644 --- a/samples/BookStore/test/Acme.BookStore.TestBase/BookStoreTestBase.cs +++ b/samples/BookStore/test/Acme.BookStore.TestBase/BookStoreTestBase.cs @@ -18,26 +18,6 @@ namespace Acme.BookStore options.UseAutofac(); } - protected virtual void WithUnitOfWork(Action action) - { - WithUnitOfWork(new AbpUnitOfWorkOptions(), action); - } - - protected virtual void WithUnitOfWork(AbpUnitOfWorkOptions options, Action action) - { - using (var scope = ServiceProvider.CreateScope()) - { - var uowManager = scope.ServiceProvider.GetRequiredService(); - - using (var uow = uowManager.Begin(options)) - { - action(); - - uow.Complete(); - } - } - } - protected virtual Task WithUnitOfWorkAsync(Func func) { return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func); @@ -58,26 +38,6 @@ namespace Acme.BookStore } } - protected virtual TResult WithUnitOfWork(Func func) - { - return WithUnitOfWork(new AbpUnitOfWorkOptions(), func); - } - - protected virtual TResult WithUnitOfWork(AbpUnitOfWorkOptions options, Func func) - { - using (var scope = ServiceProvider.CreateScope()) - { - var uowManager = scope.ServiceProvider.GetRequiredService(); - - using (var uow = uowManager.Begin(options)) - { - var result = func(); - uow.Complete(); - return result; - } - } - } - protected virtual Task WithUnitOfWorkAsync(Func> func) { return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func); diff --git a/samples/BookStore/test/Acme.BookStore.Web.Tests/BookStoreWebTestModule.cs b/samples/BookStore/test/Acme.BookStore.Web.Tests/BookStoreWebTestModule.cs index 166ade18d6..440fadf865 100644 --- a/samples/BookStore/test/Acme.BookStore.Web.Tests/BookStoreWebTestModule.cs +++ b/samples/BookStore/test/Acme.BookStore.Web.Tests/BookStoreWebTestModule.cs @@ -12,7 +12,7 @@ using Acme.BookStore.Web.Menus; using Volo.Abp; using Volo.Abp.AspNetCore.TestBase; using Volo.Abp.Localization; -using Volo.Abp.Localization.Resources.AbpValidation; +using Volo.Abp.Validation.Localization; using Volo.Abp.Modularity; using Volo.Abp.UI.Navigation; diff --git a/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/DashboardDemoDomainSharedModule.cs b/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/DashboardDemoDomainSharedModule.cs index ad6d56630b..dd9c1833ca 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/DashboardDemoDomainSharedModule.cs +++ b/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/DashboardDemoDomainSharedModule.cs @@ -5,7 +5,7 @@ using Volo.Abp.FeatureManagement; using Volo.Abp.Identity; using Volo.Abp.IdentityServer; using Volo.Abp.Localization; -using Volo.Abp.Localization.Resources.AbpValidation; +using Volo.Abp.Validation.Localization; using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement; using Volo.Abp.SettingManagement; diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/Migrations/20191018081444_Initial.Designer.cs b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/Migrations/20200106080501_Initial.Designer.cs similarity index 96% rename from samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/Migrations/20191018081444_Initial.Designer.cs rename to samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/Migrations/20200106080501_Initial.Designer.cs index 7cf33e8b48..f53d59ada9 100644 --- a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/Migrations/20191018081444_Initial.Designer.cs +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/Migrations/20200106080501_Initial.Designer.cs @@ -10,14 +10,14 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace DashboardDemo.Migrations { [DbContext(typeof(DashboardDemoMigrationsDbContext))] - [Migration("20191018081444_Initial")] + [Migration("20200106080501_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "3.0.0") + .HasAnnotation("ProductVersion", "3.1.0") .HasAnnotation("Relational:MaxIdentifierLength", 128) .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); @@ -512,6 +512,7 @@ namespace DashboardDemo.Migrations .HasColumnType("datetime2"); b.Property("Email") + .IsRequired() .HasColumnName("Email") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -555,6 +556,7 @@ namespace DashboardDemo.Migrations .HasMaxLength(64); b.Property("NormalizedEmail") + .IsRequired() .HasColumnName("NormalizedEmail") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -1197,6 +1199,70 @@ namespace DashboardDemo.Migrations b.ToTable("IdentityServerClientSecrets"); }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("DeviceCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Expiration") + .IsRequired() + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("Id"); + + b.HasIndex("DeviceCode") + .IsUnique(); + + b.HasIndex("Expiration"); + + b.HasIndex("UserCode") + .IsUnique(); + + b.ToTable("IdentityServerDeviceFlowCodes"); + }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => { b.Property("Key") @@ -1453,8 +1519,7 @@ namespace DashboardDemo.Migrations b.HasKey("Id"); - b.HasIndex("Name") - .IsUnique(); + b.HasIndex("Name"); b.ToTable("AbpTenants"); }); diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/Migrations/20191018081444_Initial.cs b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/Migrations/20200106080501_Initial.cs similarity index 96% rename from samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/Migrations/20191018081444_Initial.cs rename to samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/Migrations/20200106080501_Initial.cs index c866a45920..26ee745e1e 100644 --- a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/Migrations/20191018081444_Initial.cs +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/Migrations/20200106080501_Initial.cs @@ -184,8 +184,8 @@ namespace DashboardDemo.Migrations NormalizedUserName = table.Column(maxLength: 256, nullable: false), Name = table.Column(maxLength: 64, nullable: true), Surname = table.Column(maxLength: 64, nullable: true), - Email = table.Column(maxLength: 256, nullable: true), - NormalizedEmail = table.Column(maxLength: 256, nullable: true), + Email = table.Column(maxLength: 256, nullable: false), + NormalizedEmail = table.Column(maxLength: 256, nullable: false), EmailConfirmed = table.Column(nullable: false, defaultValue: false), PasswordHash = table.Column(maxLength: 256, nullable: true), SecurityStamp = table.Column(maxLength: 256, nullable: false), @@ -283,6 +283,27 @@ namespace DashboardDemo.Migrations table.PrimaryKey("PK_IdentityServerClients", x => x.Id); }); + migrationBuilder.CreateTable( + name: "IdentityServerDeviceFlowCodes", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + DeviceCode = table.Column(maxLength: 200, nullable: false), + UserCode = table.Column(maxLength: 200, nullable: false), + SubjectId = table.Column(maxLength: 200, nullable: true), + ClientId = table.Column(maxLength: 200, nullable: false), + Expiration = table.Column(nullable: false), + Data = table.Column(maxLength: 50000, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerDeviceFlowCodes", x => x.Id); + }); + migrationBuilder.CreateTable( name: "IdentityServerIdentityResources", columns: table => new @@ -866,8 +887,7 @@ namespace DashboardDemo.Migrations migrationBuilder.CreateIndex( name: "IX_AbpTenants_Name", table: "AbpTenants", - column: "Name", - unique: true); + column: "Name"); migrationBuilder.CreateIndex( name: "IX_AbpUserClaims_UserId", @@ -909,6 +929,23 @@ namespace DashboardDemo.Migrations table: "IdentityServerClients", column: "ClientId"); + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_DeviceCode", + table: "IdentityServerDeviceFlowCodes", + column: "DeviceCode", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_Expiration", + table: "IdentityServerDeviceFlowCodes", + column: "Expiration"); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_UserCode", + table: "IdentityServerDeviceFlowCodes", + column: "UserCode", + unique: true); + migrationBuilder.CreateIndex( name: "IX_IdentityServerPersistedGrants_Expiration", table: "IdentityServerPersistedGrants", @@ -997,6 +1034,9 @@ namespace DashboardDemo.Migrations migrationBuilder.DropTable( name: "IdentityServerClientSecrets"); + migrationBuilder.DropTable( + name: "IdentityServerDeviceFlowCodes"); + migrationBuilder.DropTable( name: "IdentityServerIdentityClaims"); diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/Migrations/DashboardDemoMigrationsDbContextModelSnapshot.cs b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/Migrations/DashboardDemoMigrationsDbContextModelSnapshot.cs index 7849c5b198..c4f257e7d0 100644 --- a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/Migrations/DashboardDemoMigrationsDbContextModelSnapshot.cs +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/Migrations/DashboardDemoMigrationsDbContextModelSnapshot.cs @@ -15,7 +15,7 @@ namespace DashboardDemo.Migrations { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "3.0.0") + .HasAnnotation("ProductVersion", "3.1.0") .HasAnnotation("Relational:MaxIdentifierLength", 128) .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); @@ -510,6 +510,7 @@ namespace DashboardDemo.Migrations .HasColumnType("datetime2"); b.Property("Email") + .IsRequired() .HasColumnName("Email") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -553,6 +554,7 @@ namespace DashboardDemo.Migrations .HasMaxLength(64); b.Property("NormalizedEmail") + .IsRequired() .HasColumnName("NormalizedEmail") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -1195,6 +1197,70 @@ namespace DashboardDemo.Migrations b.ToTable("IdentityServerClientSecrets"); }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("DeviceCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Expiration") + .IsRequired() + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("Id"); + + b.HasIndex("DeviceCode") + .IsUnique(); + + b.HasIndex("Expiration"); + + b.HasIndex("UserCode") + .IsUnique(); + + b.ToTable("IdentityServerDeviceFlowCodes"); + }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => { b.Property("Key") @@ -1451,8 +1517,7 @@ namespace DashboardDemo.Migrations b.HasKey("Id"); - b.HasIndex("Name") - .IsUnique(); + b.HasIndex("Name"); b.ToTable("AbpTenants"); }); diff --git a/samples/DashboardDemo/test/DashboardDemo.TestBase/DashboardDemoTestBase.cs b/samples/DashboardDemo/test/DashboardDemo.TestBase/DashboardDemoTestBase.cs index 937a515d14..057755dd14 100644 --- a/samples/DashboardDemo/test/DashboardDemo.TestBase/DashboardDemoTestBase.cs +++ b/samples/DashboardDemo/test/DashboardDemo.TestBase/DashboardDemoTestBase.cs @@ -18,26 +18,6 @@ namespace DashboardDemo options.UseAutofac(); } - protected virtual void WithUnitOfWork(Action action) - { - WithUnitOfWork(new AbpUnitOfWorkOptions(), action); - } - - protected virtual void WithUnitOfWork(AbpUnitOfWorkOptions options, Action action) - { - using (var scope = ServiceProvider.CreateScope()) - { - var uowManager = scope.ServiceProvider.GetRequiredService(); - - using (var uow = uowManager.Begin(options)) - { - action(); - - uow.Complete(); - } - } - } - protected virtual Task WithUnitOfWorkAsync(Func func) { return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func); @@ -58,26 +38,6 @@ namespace DashboardDemo } } - protected virtual TResult WithUnitOfWork(Func func) - { - return WithUnitOfWork(new AbpUnitOfWorkOptions(), func); - } - - protected virtual TResult WithUnitOfWork(AbpUnitOfWorkOptions options, Func func) - { - using (var scope = ServiceProvider.CreateScope()) - { - var uowManager = scope.ServiceProvider.GetRequiredService(); - - using (var uow = uowManager.Begin(options)) - { - var result = func(); - uow.Complete(); - return result; - } - } - } - protected virtual Task WithUnitOfWorkAsync(Func> func) { return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func); diff --git a/samples/DashboardDemo/test/DashboardDemo.Web.Tests/DashboardDemoWebTestModule.cs b/samples/DashboardDemo/test/DashboardDemo.Web.Tests/DashboardDemoWebTestModule.cs index 9e551d04d1..1f7db0ce9c 100644 --- a/samples/DashboardDemo/test/DashboardDemo.Web.Tests/DashboardDemoWebTestModule.cs +++ b/samples/DashboardDemo/test/DashboardDemo.Web.Tests/DashboardDemoWebTestModule.cs @@ -12,7 +12,7 @@ using DashboardDemo.Web.Menus; using Volo.Abp; using Volo.Abp.AspNetCore.TestBase; using Volo.Abp.Localization; -using Volo.Abp.Localization.Resources.AbpValidation; +using Volo.Abp.Validation.Localization; using Volo.Abp.Modularity; using Volo.Abp.UI.Navigation; diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20191018081320_Initial.cs b/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20191018081320_Initial.cs deleted file mode 100644 index a1448d0e0c..0000000000 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20191018081320_Initial.cs +++ /dev/null @@ -1,930 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -namespace AuthServer.Host.Migrations -{ - public partial class Initial : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "AbpAuditLogs", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(nullable: true), - ApplicationName = table.Column(maxLength: 96, nullable: true), - UserId = table.Column(nullable: true), - UserName = table.Column(maxLength: 256, nullable: true), - TenantId = table.Column(nullable: true), - TenantName = table.Column(nullable: true), - ImpersonatorUserId = table.Column(nullable: true), - ImpersonatorTenantId = table.Column(nullable: true), - ExecutionTime = table.Column(nullable: false), - ExecutionDuration = table.Column(nullable: false), - ClientIpAddress = table.Column(maxLength: 64, nullable: true), - ClientName = table.Column(maxLength: 128, nullable: true), - ClientId = table.Column(maxLength: 64, nullable: true), - CorrelationId = table.Column(maxLength: 64, nullable: true), - BrowserInfo = table.Column(maxLength: 512, nullable: true), - HttpMethod = table.Column(maxLength: 16, nullable: true), - Url = table.Column(maxLength: 256, nullable: true), - Exceptions = table.Column(maxLength: 4000, nullable: true), - Comments = table.Column(maxLength: 256, nullable: true), - HttpStatusCode = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpAuditLogs", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpClaimTypes", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(maxLength: 256, nullable: false), - Name = table.Column(maxLength: 256, nullable: false), - Required = table.Column(nullable: false), - IsStatic = table.Column(nullable: false), - Regex = table.Column(maxLength: 512, nullable: true), - RegexDescription = table.Column(maxLength: 128, nullable: true), - Description = table.Column(maxLength: 256, nullable: true), - ValueType = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpClaimTypes", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpPermissionGrants", - columns: table => new - { - Id = table.Column(nullable: false), - TenantId = table.Column(nullable: true), - Name = table.Column(maxLength: 128, nullable: false), - ProviderName = table.Column(maxLength: 64, nullable: false), - ProviderKey = table.Column(maxLength: 64, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpPermissionGrants", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpRoles", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(maxLength: 256, nullable: false), - TenantId = table.Column(nullable: true), - Name = table.Column(maxLength: 256, nullable: false), - NormalizedName = table.Column(maxLength: 256, nullable: false), - IsDefault = table.Column(nullable: false), - IsStatic = table.Column(nullable: false), - IsPublic = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpRoles", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpSettings", - columns: table => new - { - Id = table.Column(nullable: false), - Name = table.Column(maxLength: 128, nullable: false), - Value = table.Column(maxLength: 2048, nullable: false), - ProviderName = table.Column(maxLength: 64, nullable: true), - ProviderKey = table.Column(maxLength: 64, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpSettings", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "AbpUsers", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(nullable: true), - CreationTime = table.Column(nullable: false), - CreatorId = table.Column(nullable: true), - LastModificationTime = table.Column(nullable: true), - LastModifierId = table.Column(nullable: true), - IsDeleted = table.Column(nullable: false, defaultValue: false), - DeleterId = table.Column(nullable: true), - DeletionTime = table.Column(nullable: true), - TenantId = table.Column(nullable: true), - UserName = table.Column(maxLength: 256, nullable: false), - NormalizedUserName = table.Column(maxLength: 256, nullable: false), - Name = table.Column(maxLength: 64, nullable: true), - Surname = table.Column(maxLength: 64, nullable: true), - Email = table.Column(maxLength: 256, nullable: true), - NormalizedEmail = table.Column(maxLength: 256, nullable: true), - EmailConfirmed = table.Column(nullable: false, defaultValue: false), - PasswordHash = table.Column(maxLength: 256, nullable: true), - SecurityStamp = table.Column(maxLength: 256, nullable: false), - PhoneNumber = table.Column(maxLength: 16, nullable: true), - PhoneNumberConfirmed = table.Column(nullable: false, defaultValue: false), - TwoFactorEnabled = table.Column(nullable: false, defaultValue: false), - LockoutEnd = table.Column(nullable: true), - LockoutEnabled = table.Column(nullable: false, defaultValue: false), - AccessFailedCount = table.Column(nullable: false, defaultValue: 0) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUsers", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerApiResources", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(nullable: true), - CreationTime = table.Column(nullable: false), - CreatorId = table.Column(nullable: true), - LastModificationTime = table.Column(nullable: true), - LastModifierId = table.Column(nullable: true), - IsDeleted = table.Column(nullable: false, defaultValue: false), - DeleterId = table.Column(nullable: true), - DeletionTime = table.Column(nullable: true), - Name = table.Column(maxLength: 200, nullable: false), - DisplayName = table.Column(maxLength: 200, nullable: true), - Description = table.Column(maxLength: 1000, nullable: true), - Enabled = table.Column(nullable: false), - Properties = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerApiResources", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerClients", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(nullable: true), - CreationTime = table.Column(nullable: false), - CreatorId = table.Column(nullable: true), - LastModificationTime = table.Column(nullable: true), - LastModifierId = table.Column(nullable: true), - IsDeleted = table.Column(nullable: false, defaultValue: false), - DeleterId = table.Column(nullable: true), - DeletionTime = table.Column(nullable: true), - ClientId = table.Column(maxLength: 200, nullable: false), - ClientName = table.Column(maxLength: 200, nullable: true), - Description = table.Column(maxLength: 1000, nullable: true), - ClientUri = table.Column(maxLength: 2000, nullable: true), - LogoUri = table.Column(maxLength: 2000, nullable: true), - Enabled = table.Column(nullable: false), - ProtocolType = table.Column(maxLength: 200, nullable: false), - RequireClientSecret = table.Column(nullable: false), - RequireConsent = table.Column(nullable: false), - AllowRememberConsent = table.Column(nullable: false), - AlwaysIncludeUserClaimsInIdToken = table.Column(nullable: false), - RequirePkce = table.Column(nullable: false), - AllowPlainTextPkce = table.Column(nullable: false), - AllowAccessTokensViaBrowser = table.Column(nullable: false), - FrontChannelLogoutUri = table.Column(maxLength: 2000, nullable: true), - FrontChannelLogoutSessionRequired = table.Column(nullable: false), - BackChannelLogoutUri = table.Column(maxLength: 2000, nullable: true), - BackChannelLogoutSessionRequired = table.Column(nullable: false), - AllowOfflineAccess = table.Column(nullable: false), - IdentityTokenLifetime = table.Column(nullable: false), - AccessTokenLifetime = table.Column(nullable: false), - AuthorizationCodeLifetime = table.Column(nullable: false), - ConsentLifetime = table.Column(nullable: true), - AbsoluteRefreshTokenLifetime = table.Column(nullable: false), - SlidingRefreshTokenLifetime = table.Column(nullable: false), - RefreshTokenUsage = table.Column(nullable: false), - UpdateAccessTokenClaimsOnRefresh = table.Column(nullable: false), - RefreshTokenExpiration = table.Column(nullable: false), - AccessTokenType = table.Column(nullable: false), - EnableLocalLogin = table.Column(nullable: false), - IncludeJwtId = table.Column(nullable: false), - AlwaysSendClientClaims = table.Column(nullable: false), - ClientClaimsPrefix = table.Column(maxLength: 200, nullable: true), - PairWiseSubjectSalt = table.Column(maxLength: 200, nullable: true), - UserSsoLifetime = table.Column(nullable: true), - UserCodeType = table.Column(maxLength: 100, nullable: true), - DeviceCodeLifetime = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerClients", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerIdentityResources", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(nullable: true), - CreationTime = table.Column(nullable: false), - CreatorId = table.Column(nullable: true), - LastModificationTime = table.Column(nullable: true), - LastModifierId = table.Column(nullable: true), - IsDeleted = table.Column(nullable: false, defaultValue: false), - DeleterId = table.Column(nullable: true), - DeletionTime = table.Column(nullable: true), - Name = table.Column(maxLength: 200, nullable: false), - DisplayName = table.Column(maxLength: 200, nullable: true), - Description = table.Column(maxLength: 1000, nullable: true), - Enabled = table.Column(nullable: false), - Required = table.Column(nullable: false), - Emphasize = table.Column(nullable: false), - ShowInDiscoveryDocument = table.Column(nullable: false), - Properties = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerIdentityResources", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerPersistedGrants", - columns: table => new - { - Key = table.Column(maxLength: 200, nullable: false), - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(nullable: true), - Type = table.Column(maxLength: 50, nullable: false), - SubjectId = table.Column(maxLength: 200, nullable: true), - ClientId = table.Column(maxLength: 200, nullable: false), - CreationTime = table.Column(nullable: false), - Expiration = table.Column(nullable: true), - Data = table.Column(maxLength: 50000, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerPersistedGrants", x => x.Key); - }); - - migrationBuilder.CreateTable( - name: "AbpAuditLogActions", - columns: table => new - { - Id = table.Column(nullable: false), - TenantId = table.Column(nullable: true), - AuditLogId = table.Column(nullable: false), - ServiceName = table.Column(maxLength: 256, nullable: true), - MethodName = table.Column(maxLength: 128, nullable: true), - Parameters = table.Column(maxLength: 2000, nullable: true), - ExecutionTime = table.Column(nullable: false), - ExecutionDuration = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpAuditLogActions", x => x.Id); - table.ForeignKey( - name: "FK_AbpAuditLogActions_AbpAuditLogs_AuditLogId", - column: x => x.AuditLogId, - principalTable: "AbpAuditLogs", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpEntityChanges", - columns: table => new - { - Id = table.Column(nullable: false), - AuditLogId = table.Column(nullable: false), - TenantId = table.Column(nullable: true), - ChangeTime = table.Column(nullable: false), - ChangeType = table.Column(nullable: false), - EntityTenantId = table.Column(nullable: true), - EntityId = table.Column(maxLength: 128, nullable: false), - EntityTypeFullName = table.Column(maxLength: 128, nullable: false), - ExtraProperties = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpEntityChanges", x => x.Id); - table.ForeignKey( - name: "FK_AbpEntityChanges_AbpAuditLogs_AuditLogId", - column: x => x.AuditLogId, - principalTable: "AbpAuditLogs", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpRoleClaims", - columns: table => new - { - Id = table.Column(nullable: false), - TenantId = table.Column(nullable: true), - ClaimType = table.Column(maxLength: 256, nullable: false), - ClaimValue = table.Column(maxLength: 1024, nullable: true), - RoleId = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpRoleClaims", x => x.Id); - table.ForeignKey( - name: "FK_AbpRoleClaims_AbpRoles_RoleId", - column: x => x.RoleId, - principalTable: "AbpRoles", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpUserClaims", - columns: table => new - { - Id = table.Column(nullable: false), - TenantId = table.Column(nullable: true), - ClaimType = table.Column(maxLength: 256, nullable: false), - ClaimValue = table.Column(maxLength: 1024, nullable: true), - UserId = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserClaims", x => x.Id); - table.ForeignKey( - name: "FK_AbpUserClaims_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpUserLogins", - columns: table => new - { - UserId = table.Column(nullable: false), - LoginProvider = table.Column(maxLength: 64, nullable: false), - TenantId = table.Column(nullable: true), - ProviderKey = table.Column(maxLength: 196, nullable: false), - ProviderDisplayName = table.Column(maxLength: 128, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserLogins", x => new { x.UserId, x.LoginProvider }); - table.ForeignKey( - name: "FK_AbpUserLogins_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpUserRoles", - columns: table => new - { - UserId = table.Column(nullable: false), - RoleId = table.Column(nullable: false), - TenantId = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserRoles", x => new { x.UserId, x.RoleId }); - table.ForeignKey( - name: "FK_AbpUserRoles_AbpRoles_RoleId", - column: x => x.RoleId, - principalTable: "AbpRoles", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_AbpUserRoles_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpUserTokens", - columns: table => new - { - UserId = table.Column(nullable: false), - LoginProvider = table.Column(maxLength: 64, nullable: false), - Name = table.Column(maxLength: 128, nullable: false), - TenantId = table.Column(nullable: true), - Value = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); - table.ForeignKey( - name: "FK_AbpUserTokens_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerApiClaims", - columns: table => new - { - Type = table.Column(maxLength: 200, nullable: false), - ApiResourceId = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerApiClaims", x => new { x.ApiResourceId, x.Type }); - table.ForeignKey( - name: "FK_IdentityServerApiClaims_IdentityServerApiResources_ApiResourceId", - column: x => x.ApiResourceId, - principalTable: "IdentityServerApiResources", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerApiScopes", - columns: table => new - { - ApiResourceId = table.Column(nullable: false), - Name = table.Column(maxLength: 200, nullable: false), - DisplayName = table.Column(maxLength: 200, nullable: true), - Description = table.Column(maxLength: 1000, nullable: true), - Required = table.Column(nullable: false), - Emphasize = table.Column(nullable: false), - ShowInDiscoveryDocument = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerApiScopes", x => new { x.ApiResourceId, x.Name }); - table.ForeignKey( - name: "FK_IdentityServerApiScopes_IdentityServerApiResources_ApiResourceId", - column: x => x.ApiResourceId, - principalTable: "IdentityServerApiResources", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerApiSecrets", - columns: table => new - { - Type = table.Column(maxLength: 250, nullable: false), - Value = table.Column(maxLength: 4000, nullable: false), - ApiResourceId = table.Column(nullable: false), - Description = table.Column(maxLength: 2000, nullable: true), - Expiration = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerApiSecrets", x => new { x.ApiResourceId, x.Type, x.Value }); - table.ForeignKey( - name: "FK_IdentityServerApiSecrets_IdentityServerApiResources_ApiResourceId", - column: x => x.ApiResourceId, - principalTable: "IdentityServerApiResources", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerClientClaims", - columns: table => new - { - ClientId = table.Column(nullable: false), - Type = table.Column(maxLength: 250, nullable: false), - Value = table.Column(maxLength: 250, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerClientClaims", x => new { x.ClientId, x.Type, x.Value }); - table.ForeignKey( - name: "FK_IdentityServerClientClaims_IdentityServerClients_ClientId", - column: x => x.ClientId, - principalTable: "IdentityServerClients", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerClientCorsOrigins", - columns: table => new - { - ClientId = table.Column(nullable: false), - Origin = table.Column(maxLength: 150, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerClientCorsOrigins", x => new { x.ClientId, x.Origin }); - table.ForeignKey( - name: "FK_IdentityServerClientCorsOrigins_IdentityServerClients_ClientId", - column: x => x.ClientId, - principalTable: "IdentityServerClients", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerClientGrantTypes", - columns: table => new - { - ClientId = table.Column(nullable: false), - GrantType = table.Column(maxLength: 250, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerClientGrantTypes", x => new { x.ClientId, x.GrantType }); - table.ForeignKey( - name: "FK_IdentityServerClientGrantTypes_IdentityServerClients_ClientId", - column: x => x.ClientId, - principalTable: "IdentityServerClients", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerClientIdPRestrictions", - columns: table => new - { - ClientId = table.Column(nullable: false), - Provider = table.Column(maxLength: 200, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerClientIdPRestrictions", x => new { x.ClientId, x.Provider }); - table.ForeignKey( - name: "FK_IdentityServerClientIdPRestrictions_IdentityServerClients_ClientId", - column: x => x.ClientId, - principalTable: "IdentityServerClients", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerClientPostLogoutRedirectUris", - columns: table => new - { - ClientId = table.Column(nullable: false), - PostLogoutRedirectUri = table.Column(maxLength: 2000, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerClientPostLogoutRedirectUris", x => new { x.ClientId, x.PostLogoutRedirectUri }); - table.ForeignKey( - name: "FK_IdentityServerClientPostLogoutRedirectUris_IdentityServerClients_ClientId", - column: x => x.ClientId, - principalTable: "IdentityServerClients", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerClientProperties", - columns: table => new - { - ClientId = table.Column(nullable: false), - Key = table.Column(maxLength: 250, nullable: false), - Value = table.Column(maxLength: 2000, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerClientProperties", x => new { x.ClientId, x.Key }); - table.ForeignKey( - name: "FK_IdentityServerClientProperties_IdentityServerClients_ClientId", - column: x => x.ClientId, - principalTable: "IdentityServerClients", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerClientRedirectUris", - columns: table => new - { - ClientId = table.Column(nullable: false), - RedirectUri = table.Column(maxLength: 2000, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerClientRedirectUris", x => new { x.ClientId, x.RedirectUri }); - table.ForeignKey( - name: "FK_IdentityServerClientRedirectUris_IdentityServerClients_ClientId", - column: x => x.ClientId, - principalTable: "IdentityServerClients", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerClientScopes", - columns: table => new - { - ClientId = table.Column(nullable: false), - Scope = table.Column(maxLength: 200, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerClientScopes", x => new { x.ClientId, x.Scope }); - table.ForeignKey( - name: "FK_IdentityServerClientScopes_IdentityServerClients_ClientId", - column: x => x.ClientId, - principalTable: "IdentityServerClients", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerClientSecrets", - columns: table => new - { - Type = table.Column(maxLength: 250, nullable: false), - Value = table.Column(maxLength: 4000, nullable: false), - ClientId = table.Column(nullable: false), - Description = table.Column(maxLength: 2000, nullable: true), - Expiration = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerClientSecrets", x => new { x.ClientId, x.Type, x.Value }); - table.ForeignKey( - name: "FK_IdentityServerClientSecrets_IdentityServerClients_ClientId", - column: x => x.ClientId, - principalTable: "IdentityServerClients", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerIdentityClaims", - columns: table => new - { - Type = table.Column(maxLength: 200, nullable: false), - IdentityResourceId = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerIdentityClaims", x => new { x.IdentityResourceId, x.Type }); - table.ForeignKey( - name: "FK_IdentityServerIdentityClaims_IdentityServerIdentityResources_IdentityResourceId", - column: x => x.IdentityResourceId, - principalTable: "IdentityServerIdentityResources", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "AbpEntityPropertyChanges", - columns: table => new - { - Id = table.Column(nullable: false), - TenantId = table.Column(nullable: true), - EntityChangeId = table.Column(nullable: false), - NewValue = table.Column(maxLength: 512, nullable: true), - OriginalValue = table.Column(maxLength: 512, nullable: true), - PropertyName = table.Column(maxLength: 128, nullable: false), - PropertyTypeFullName = table.Column(maxLength: 64, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpEntityPropertyChanges", x => x.Id); - table.ForeignKey( - name: "FK_AbpEntityPropertyChanges_AbpEntityChanges_EntityChangeId", - column: x => x.EntityChangeId, - principalTable: "AbpEntityChanges", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "IdentityServerApiScopeClaims", - columns: table => new - { - Type = table.Column(maxLength: 200, nullable: false), - ApiResourceId = table.Column(nullable: false), - Name = table.Column(maxLength: 200, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IdentityServerApiScopeClaims", x => new { x.ApiResourceId, x.Name, x.Type }); - table.ForeignKey( - name: "FK_IdentityServerApiScopeClaims_IdentityServerApiScopes_ApiResourceId_Name", - columns: x => new { x.ApiResourceId, x.Name }, - principalTable: "IdentityServerApiScopes", - principalColumns: new[] { "ApiResourceId", "Name" }, - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateIndex( - name: "IX_AbpAuditLogActions_AuditLogId", - table: "AbpAuditLogActions", - column: "AuditLogId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpAuditLogActions_TenantId_ServiceName_MethodName_ExecutionTime", - table: "AbpAuditLogActions", - columns: new[] { "TenantId", "ServiceName", "MethodName", "ExecutionTime" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpAuditLogs_TenantId_ExecutionTime", - table: "AbpAuditLogs", - columns: new[] { "TenantId", "ExecutionTime" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpAuditLogs_TenantId_UserId_ExecutionTime", - table: "AbpAuditLogs", - columns: new[] { "TenantId", "UserId", "ExecutionTime" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpEntityChanges_AuditLogId", - table: "AbpEntityChanges", - column: "AuditLogId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpEntityChanges_TenantId_EntityTypeFullName_EntityId", - table: "AbpEntityChanges", - columns: new[] { "TenantId", "EntityTypeFullName", "EntityId" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpEntityPropertyChanges_EntityChangeId", - table: "AbpEntityPropertyChanges", - column: "EntityChangeId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpPermissionGrants_Name_ProviderName_ProviderKey", - table: "AbpPermissionGrants", - columns: new[] { "Name", "ProviderName", "ProviderKey" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpRoleClaims_RoleId", - table: "AbpRoleClaims", - column: "RoleId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpRoles_NormalizedName", - table: "AbpRoles", - column: "NormalizedName"); - - migrationBuilder.CreateIndex( - name: "IX_AbpSettings_Name_ProviderName_ProviderKey", - table: "AbpSettings", - columns: new[] { "Name", "ProviderName", "ProviderKey" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpUserClaims_UserId", - table: "AbpUserClaims", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUserLogins_LoginProvider_ProviderKey", - table: "AbpUserLogins", - columns: new[] { "LoginProvider", "ProviderKey" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpUserRoles_RoleId_UserId", - table: "AbpUserRoles", - columns: new[] { "RoleId", "UserId" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpUsers_Email", - table: "AbpUsers", - column: "Email"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUsers_NormalizedEmail", - table: "AbpUsers", - column: "NormalizedEmail"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUsers_NormalizedUserName", - table: "AbpUsers", - column: "NormalizedUserName"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUsers_UserName", - table: "AbpUsers", - column: "UserName"); - - migrationBuilder.CreateIndex( - name: "IX_IdentityServerClients_ClientId", - table: "IdentityServerClients", - column: "ClientId"); - - migrationBuilder.CreateIndex( - name: "IX_IdentityServerPersistedGrants_Expiration", - table: "IdentityServerPersistedGrants", - column: "Expiration"); - - migrationBuilder.CreateIndex( - name: "IX_IdentityServerPersistedGrants_SubjectId_ClientId_Type", - table: "IdentityServerPersistedGrants", - columns: new[] { "SubjectId", "ClientId", "Type" }); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "AbpAuditLogActions"); - - migrationBuilder.DropTable( - name: "AbpClaimTypes"); - - migrationBuilder.DropTable( - name: "AbpEntityPropertyChanges"); - - migrationBuilder.DropTable( - name: "AbpPermissionGrants"); - - migrationBuilder.DropTable( - name: "AbpRoleClaims"); - - migrationBuilder.DropTable( - name: "AbpSettings"); - - migrationBuilder.DropTable( - name: "AbpUserClaims"); - - migrationBuilder.DropTable( - name: "AbpUserLogins"); - - migrationBuilder.DropTable( - name: "AbpUserRoles"); - - migrationBuilder.DropTable( - name: "AbpUserTokens"); - - migrationBuilder.DropTable( - name: "IdentityServerApiClaims"); - - migrationBuilder.DropTable( - name: "IdentityServerApiScopeClaims"); - - migrationBuilder.DropTable( - name: "IdentityServerApiSecrets"); - - migrationBuilder.DropTable( - name: "IdentityServerClientClaims"); - - migrationBuilder.DropTable( - name: "IdentityServerClientCorsOrigins"); - - migrationBuilder.DropTable( - name: "IdentityServerClientGrantTypes"); - - migrationBuilder.DropTable( - name: "IdentityServerClientIdPRestrictions"); - - migrationBuilder.DropTable( - name: "IdentityServerClientPostLogoutRedirectUris"); - - migrationBuilder.DropTable( - name: "IdentityServerClientProperties"); - - migrationBuilder.DropTable( - name: "IdentityServerClientRedirectUris"); - - migrationBuilder.DropTable( - name: "IdentityServerClientScopes"); - - migrationBuilder.DropTable( - name: "IdentityServerClientSecrets"); - - migrationBuilder.DropTable( - name: "IdentityServerIdentityClaims"); - - migrationBuilder.DropTable( - name: "IdentityServerPersistedGrants"); - - migrationBuilder.DropTable( - name: "AbpEntityChanges"); - - migrationBuilder.DropTable( - name: "AbpRoles"); - - migrationBuilder.DropTable( - name: "AbpUsers"); - - migrationBuilder.DropTable( - name: "IdentityServerApiScopes"); - - migrationBuilder.DropTable( - name: "IdentityServerClients"); - - migrationBuilder.DropTable( - name: "IdentityServerIdentityResources"); - - migrationBuilder.DropTable( - name: "AbpAuditLogs"); - - migrationBuilder.DropTable( - name: "IdentityServerApiResources"); - } - } -} diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20191127124541_Initial.Designer.cs b/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200106080946_Initial.Designer.cs similarity index 96% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20191127124541_Initial.Designer.cs rename to samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200106080946_Initial.Designer.cs index 0733f562cd..d2a14947aa 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20191127124541_Initial.Designer.cs +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200106080946_Initial.Designer.cs @@ -1,23 +1,23 @@ // using System; +using AuthServer.Host.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using MyCompanyName.MyProjectName.EntityFrameworkCore; -namespace MyCompanyName.MyProjectName.Migrations +namespace AuthServer.Host.Migrations { - [DbContext(typeof(IdentityServerHostMigrationsDbContext))] - [Migration("20191127124541_Initial")] + [DbContext(typeof(AuthServerDbContext))] + [Migration("20200106080946_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "3.0.0") + .HasAnnotation("ProductVersion", "3.1.0") .HasAnnotation("Relational:MaxIdentifierLength", 128) .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); @@ -426,6 +426,7 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnType("datetime2"); b.Property("Email") + .IsRequired() .HasColumnName("Email") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -469,6 +470,7 @@ namespace MyCompanyName.MyProjectName.Migrations .HasMaxLength(64); b.Property("NormalizedEmail") + .IsRequired() .HasColumnName("NormalizedEmail") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -1111,6 +1113,70 @@ namespace MyCompanyName.MyProjectName.Migrations b.ToTable("IdentityServerClientSecrets"); }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("DeviceCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Expiration") + .IsRequired() + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("Id"); + + b.HasIndex("DeviceCode") + .IsUnique(); + + b.HasIndex("Expiration"); + + b.HasIndex("UserCode") + .IsUnique(); + + b.ToTable("IdentityServerDeviceFlowCodes"); + }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => { b.Property("Key") @@ -1315,82 +1381,6 @@ namespace MyCompanyName.MyProjectName.Migrations b.ToTable("AbpSettings"); }); - modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnName("ConcurrencyStamp") - .HasColumnType("nvarchar(max)"); - - b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); - - b.Property("CreatorId") - .HasColumnName("CreatorId") - .HasColumnType("uniqueidentifier"); - - b.Property("DeleterId") - .HasColumnName("DeleterId") - .HasColumnType("uniqueidentifier"); - - b.Property("DeletionTime") - .HasColumnName("DeletionTime") - .HasColumnType("datetime2"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnName("IsDeleted") - .HasColumnType("bit") - .HasDefaultValue(false); - - b.Property("LastModificationTime") - .HasColumnName("LastModificationTime") - .HasColumnType("datetime2"); - - b.Property("LastModifierId") - .HasColumnName("LastModifierId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.HasKey("Id"); - - b.HasIndex("Name"); - - b.ToTable("AbpTenants"); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => - { - b.Property("TenantId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.Property("Value") - .IsRequired() - .HasColumnType("nvarchar(1024)") - .HasMaxLength(1024); - - b.HasKey("TenantId", "Name"); - - b.ToTable("AbpTenantConnectionStrings"); - }); - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => { b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) @@ -1594,15 +1584,6 @@ namespace MyCompanyName.MyProjectName.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => - { - b.HasOne("Volo.Abp.TenantManagement.Tenant", null) - .WithMany("ConnectionStrings") - .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); #pragma warning restore 612, 618 } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20191127124541_Initial.cs b/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200106080946_Initial.cs similarity index 96% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20191127124541_Initial.cs rename to samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200106080946_Initial.cs index 217c00a646..7e1b1eb08c 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20191127124541_Initial.cs +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/20200106080946_Initial.cs @@ -1,7 +1,7 @@ using System; using Microsoft.EntityFrameworkCore.Migrations; -namespace MyCompanyName.MyProjectName.Migrations +namespace AuthServer.Host.Migrations { public partial class Initial : Migration { @@ -108,27 +108,6 @@ namespace MyCompanyName.MyProjectName.Migrations table.PrimaryKey("PK_AbpSettings", x => x.Id); }); - migrationBuilder.CreateTable( - name: "AbpTenants", - columns: table => new - { - Id = table.Column(nullable: false), - ExtraProperties = table.Column(nullable: true), - ConcurrencyStamp = table.Column(nullable: true), - CreationTime = table.Column(nullable: false), - CreatorId = table.Column(nullable: true), - LastModificationTime = table.Column(nullable: true), - LastModifierId = table.Column(nullable: true), - IsDeleted = table.Column(nullable: false, defaultValue: false), - DeleterId = table.Column(nullable: true), - DeletionTime = table.Column(nullable: true), - Name = table.Column(maxLength: 64, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpTenants", x => x.Id); - }); - migrationBuilder.CreateTable( name: "AbpUsers", columns: table => new @@ -148,8 +127,8 @@ namespace MyCompanyName.MyProjectName.Migrations NormalizedUserName = table.Column(maxLength: 256, nullable: false), Name = table.Column(maxLength: 64, nullable: true), Surname = table.Column(maxLength: 64, nullable: true), - Email = table.Column(maxLength: 256, nullable: true), - NormalizedEmail = table.Column(maxLength: 256, nullable: true), + Email = table.Column(maxLength: 256, nullable: false), + NormalizedEmail = table.Column(maxLength: 256, nullable: false), EmailConfirmed = table.Column(nullable: false, defaultValue: false), PasswordHash = table.Column(maxLength: 256, nullable: true), SecurityStamp = table.Column(maxLength: 256, nullable: false), @@ -247,6 +226,27 @@ namespace MyCompanyName.MyProjectName.Migrations table.PrimaryKey("PK_IdentityServerClients", x => x.Id); }); + migrationBuilder.CreateTable( + name: "IdentityServerDeviceFlowCodes", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + DeviceCode = table.Column(maxLength: 200, nullable: false), + UserCode = table.Column(maxLength: 200, nullable: false), + SubjectId = table.Column(maxLength: 200, nullable: true), + ClientId = table.Column(maxLength: 200, nullable: false), + Expiration = table.Column(nullable: false), + Data = table.Column(maxLength: 50000, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerDeviceFlowCodes", x => x.Id); + }); + migrationBuilder.CreateTable( name: "IdentityServerIdentityResources", columns: table => new @@ -366,25 +366,6 @@ namespace MyCompanyName.MyProjectName.Migrations onDelete: ReferentialAction.Cascade); }); - migrationBuilder.CreateTable( - name: "AbpTenantConnectionStrings", - columns: table => new - { - TenantId = table.Column(nullable: false), - Name = table.Column(maxLength: 64, nullable: false), - Value = table.Column(maxLength: 1024, nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpTenantConnectionStrings", x => new { x.TenantId, x.Name }); - table.ForeignKey( - name: "FK_AbpTenantConnectionStrings_AbpTenants_TenantId", - column: x => x.TenantId, - principalTable: "AbpTenants", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - migrationBuilder.CreateTable( name: "AbpUserClaims", columns: table => new @@ -817,11 +798,6 @@ namespace MyCompanyName.MyProjectName.Migrations table: "AbpSettings", columns: new[] { "Name", "ProviderName", "ProviderKey" }); - migrationBuilder.CreateIndex( - name: "IX_AbpTenants_Name", - table: "AbpTenants", - column: "Name"); - migrationBuilder.CreateIndex( name: "IX_AbpUserClaims_UserId", table: "AbpUserClaims", @@ -862,6 +838,23 @@ namespace MyCompanyName.MyProjectName.Migrations table: "IdentityServerClients", column: "ClientId"); + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_DeviceCode", + table: "IdentityServerDeviceFlowCodes", + column: "DeviceCode", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_Expiration", + table: "IdentityServerDeviceFlowCodes", + column: "Expiration"); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_UserCode", + table: "IdentityServerDeviceFlowCodes", + column: "UserCode", + unique: true); + migrationBuilder.CreateIndex( name: "IX_IdentityServerPersistedGrants_Expiration", table: "IdentityServerPersistedGrants", @@ -893,9 +886,6 @@ namespace MyCompanyName.MyProjectName.Migrations migrationBuilder.DropTable( name: "AbpSettings"); - migrationBuilder.DropTable( - name: "AbpTenantConnectionStrings"); - migrationBuilder.DropTable( name: "AbpUserClaims"); @@ -944,6 +934,9 @@ namespace MyCompanyName.MyProjectName.Migrations migrationBuilder.DropTable( name: "IdentityServerClientSecrets"); + migrationBuilder.DropTable( + name: "IdentityServerDeviceFlowCodes"); + migrationBuilder.DropTable( name: "IdentityServerIdentityClaims"); @@ -953,9 +946,6 @@ namespace MyCompanyName.MyProjectName.Migrations migrationBuilder.DropTable( name: "AbpEntityChanges"); - migrationBuilder.DropTable( - name: "AbpTenants"); - migrationBuilder.DropTable( name: "AbpRoles"); diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/AuthServerDbContextModelSnapshot.cs b/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/AuthServerDbContextModelSnapshot.cs index c79748f7f9..81f7c5f23b 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/AuthServerDbContextModelSnapshot.cs +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/Migrations/AuthServerDbContextModelSnapshot.cs @@ -15,7 +15,7 @@ namespace AuthServer.Host.Migrations { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "3.0.0") + .HasAnnotation("ProductVersion", "3.1.0") .HasAnnotation("Relational:MaxIdentifierLength", 128) .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); @@ -424,6 +424,7 @@ namespace AuthServer.Host.Migrations .HasColumnType("datetime2"); b.Property("Email") + .IsRequired() .HasColumnName("Email") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -467,6 +468,7 @@ namespace AuthServer.Host.Migrations .HasMaxLength(64); b.Property("NormalizedEmail") + .IsRequired() .HasColumnName("NormalizedEmail") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -1109,6 +1111,70 @@ namespace AuthServer.Host.Migrations b.ToTable("IdentityServerClientSecrets"); }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("DeviceCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Expiration") + .IsRequired() + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("Id"); + + b.HasIndex("DeviceCode") + .IsUnique(); + + b.HasIndex("Expiration"); + + b.HasIndex("UserCode") + .IsUnique(); + + b.ToTable("IdentityServerDeviceFlowCodes"); + }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => { b.Property("Key") diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/ProductManagementWebModule.cs b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/ProductManagementWebModule.cs index aa1c36303f..9fdd1dd8cd 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/ProductManagementWebModule.cs +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/ProductManagementWebModule.cs @@ -6,7 +6,7 @@ using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; using Volo.Abp.AutoMapper; using Volo.Abp.Localization; -using Volo.Abp.Localization.Resources.AbpValidation; +using Volo.Abp.Validation.Localization; using Volo.Abp.Modularity; using Volo.Abp.UI.Navigation; using Volo.Abp.VirtualFileSystem; diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/ProductManagement/ProductManagementDomainTestBase.cs b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/ProductManagement/ProductManagementDomainTestBase.cs index 062c57b44b..de73af7a37 100644 --- a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/ProductManagement/ProductManagementDomainTestBase.cs +++ b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/ProductManagement/ProductManagementDomainTestBase.cs @@ -9,26 +9,6 @@ namespace ProductManagement { #region WithUnitOfWork - protected virtual void WithUnitOfWork(Action action) - { - WithUnitOfWork(new AbpUnitOfWorkOptions(), action); - } - - protected virtual void WithUnitOfWork(AbpUnitOfWorkOptions options, Action action) - { - using (var scope = ServiceProvider.CreateScope()) - { - var uowManager = scope.ServiceProvider.GetRequiredService(); - - using (var uow = uowManager.Begin(options)) - { - action(); - - uow.Complete(); - } - } - } - protected virtual Task WithUnitOfWorkAsync(Func func) { return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func); @@ -49,26 +29,6 @@ namespace ProductManagement } } - protected virtual TResult WithUnitOfWork(Func func) - { - return WithUnitOfWork(new AbpUnitOfWorkOptions(), func); - } - - protected virtual TResult WithUnitOfWork(AbpUnitOfWorkOptions options, Func func) - { - using (var scope = ServiceProvider.CreateScope()) - { - var uowManager = scope.ServiceProvider.GetRequiredService(); - - using (var uow = uowManager.Begin(options)) - { - var result = func(); - uow.Complete(); - return result; - } - } - } - protected virtual Task WithUnitOfWorkAsync(Func> func) { return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func); diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018075950_Initial.Designer.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200106080719_Initial.Designer.cs similarity index 96% rename from samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018075950_Initial.Designer.cs rename to templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200106080719_Initial.Designer.cs index 6d33227240..252d7d8c3d 100644 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20191018075950_Initial.Designer.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200106080719_Initial.Designer.cs @@ -1,23 +1,23 @@ // using System; -using Acme.BookStore.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using MyCompanyName.MyProjectName.EntityFrameworkCore; -namespace Acme.BookStore.Migrations +namespace MyCompanyName.MyProjectName.Migrations { - [DbContext(typeof(BookStoreMigrationsDbContext))] - [Migration("20191018075950_Initial")] + [DbContext(typeof(MyProjectNameMigrationsDbContext))] + [Migration("20200106080719_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "3.0.0") + .HasAnnotation("ProductVersion", "3.1.0") .HasAnnotation("Relational:MaxIdentifierLength", 128) .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); @@ -512,6 +512,7 @@ namespace Acme.BookStore.Migrations .HasColumnType("datetime2"); b.Property("Email") + .IsRequired() .HasColumnName("Email") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -555,6 +556,7 @@ namespace Acme.BookStore.Migrations .HasMaxLength(64); b.Property("NormalizedEmail") + .IsRequired() .HasColumnName("NormalizedEmail") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -1197,6 +1199,70 @@ namespace Acme.BookStore.Migrations b.ToTable("IdentityServerClientSecrets"); }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("DeviceCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Expiration") + .IsRequired() + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("Id"); + + b.HasIndex("DeviceCode") + .IsUnique(); + + b.HasIndex("Expiration"); + + b.HasIndex("UserCode") + .IsUnique(); + + b.ToTable("IdentityServerDeviceFlowCodes"); + }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => { b.Property("Key") @@ -1453,8 +1519,7 @@ namespace Acme.BookStore.Migrations b.HasKey("Id"); - b.HasIndex("Name") - .IsUnique(); + b.HasIndex("Name"); b.ToTable("AbpTenants"); }); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20191218090017_Initial.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200106080719_Initial.cs similarity index 96% rename from templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20191218090017_Initial.cs rename to templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200106080719_Initial.cs index c7b0e07a56..170372b3e0 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20191218090017_Initial.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200106080719_Initial.cs @@ -283,6 +283,27 @@ namespace MyCompanyName.MyProjectName.Migrations table.PrimaryKey("PK_IdentityServerClients", x => x.Id); }); + migrationBuilder.CreateTable( + name: "IdentityServerDeviceFlowCodes", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + DeviceCode = table.Column(maxLength: 200, nullable: false), + UserCode = table.Column(maxLength: 200, nullable: false), + SubjectId = table.Column(maxLength: 200, nullable: true), + ClientId = table.Column(maxLength: 200, nullable: false), + Expiration = table.Column(nullable: false), + Data = table.Column(maxLength: 50000, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerDeviceFlowCodes", x => x.Id); + }); + migrationBuilder.CreateTable( name: "IdentityServerIdentityResources", columns: table => new @@ -908,6 +929,23 @@ namespace MyCompanyName.MyProjectName.Migrations table: "IdentityServerClients", column: "ClientId"); + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_DeviceCode", + table: "IdentityServerDeviceFlowCodes", + column: "DeviceCode", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_Expiration", + table: "IdentityServerDeviceFlowCodes", + column: "Expiration"); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_UserCode", + table: "IdentityServerDeviceFlowCodes", + column: "UserCode", + unique: true); + migrationBuilder.CreateIndex( name: "IX_IdentityServerPersistedGrants_Expiration", table: "IdentityServerPersistedGrants", @@ -996,6 +1034,9 @@ namespace MyCompanyName.MyProjectName.Migrations migrationBuilder.DropTable( name: "IdentityServerClientSecrets"); + migrationBuilder.DropTable( + name: "IdentityServerDeviceFlowCodes"); + migrationBuilder.DropTable( name: "IdentityServerIdentityClaims"); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/MyProjectNameMigrationsDbContextModelSnapshot.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/MyProjectNameMigrationsDbContextModelSnapshot.cs index 460515931f..9b3096b4ba 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/MyProjectNameMigrationsDbContextModelSnapshot.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/MyProjectNameMigrationsDbContextModelSnapshot.cs @@ -1197,6 +1197,70 @@ namespace MyCompanyName.MyProjectName.Migrations b.ToTable("IdentityServerClientSecrets"); }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("DeviceCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Expiration") + .IsRequired() + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("Id"); + + b.HasIndex("DeviceCode") + .IsUnique(); + + b.HasIndex("Expiration"); + + b.HasIndex("UserCode") + .IsUnique(); + + b.ToTable("IdentityServerDeviceFlowCodes"); + }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => { b.Property("Key") diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20191218090017_Initial.Designer.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20200106080828_Initial.Designer.cs similarity index 96% rename from templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20191218090017_Initial.Designer.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20200106080828_Initial.Designer.cs index 282d8490be..d3c4fe12b3 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20191218090017_Initial.Designer.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20200106080828_Initial.Designer.cs @@ -9,8 +9,8 @@ using MyCompanyName.MyProjectName.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { - [DbContext(typeof(MyProjectNameMigrationsDbContext))] - [Migration("20191218090017_Initial")] + [DbContext(typeof(IdentityServerHostMigrationsDbContext))] + [Migration("20200106080828_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -268,92 +268,6 @@ namespace MyCompanyName.MyProjectName.Migrations b.ToTable("AbpEntityPropertyChanges"); }); - modelBuilder.Entity("Volo.Abp.BackgroundJobs.BackgroundJobRecord", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .HasColumnType("nvarchar(max)"); - - b.Property("CreationTime") - .HasColumnName("CreationTime") - .HasColumnType("datetime2"); - - b.Property("ExtraProperties") - .HasColumnName("ExtraProperties") - .HasColumnType("nvarchar(max)"); - - b.Property("IsAbandoned") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false); - - b.Property("JobArgs") - .IsRequired() - .HasColumnType("nvarchar(max)") - .HasMaxLength(1048576); - - b.Property("JobName") - .IsRequired() - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); - - b.Property("LastTryTime") - .HasColumnType("datetime2"); - - b.Property("NextTryTime") - .HasColumnType("datetime2"); - - b.Property("Priority") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint") - .HasDefaultValue((byte)15); - - b.Property("TryCount") - .ValueGeneratedOnAdd() - .HasColumnType("smallint") - .HasDefaultValue((short)0); - - b.HasKey("Id"); - - b.HasIndex("IsAbandoned", "NextTryTime"); - - b.ToTable("AbpBackgroundJobs"); - }); - - modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); - - b.Property("ProviderKey") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.Property("ProviderName") - .HasColumnType("nvarchar(64)") - .HasMaxLength(64); - - b.Property("Value") - .IsRequired() - .HasColumnType("nvarchar(128)") - .HasMaxLength(128); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey"); - - b.ToTable("AbpFeatureValues"); - }); - modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => { b.Property("Id") @@ -1199,6 +1113,70 @@ namespace MyCompanyName.MyProjectName.Migrations b.ToTable("IdentityServerClientSecrets"); }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("DeviceCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Expiration") + .IsRequired() + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("Id"); + + b.HasIndex("DeviceCode") + .IsUnique(); + + b.HasIndex("Expiration"); + + b.HasIndex("UserCode") + .IsUnique(); + + b.ToTable("IdentityServerDeviceFlowCodes"); + }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => { b.Property("Key") diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20200106080828_Initial.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20200106080828_Initial.cs new file mode 100644 index 0000000000..29cc3396eb --- /dev/null +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20200106080828_Initial.cs @@ -0,0 +1,1022 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace MyCompanyName.MyProjectName.Migrations +{ + public partial class Initial : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AbpAuditLogs", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + ApplicationName = table.Column(maxLength: 96, nullable: true), + UserId = table.Column(nullable: true), + UserName = table.Column(maxLength: 256, nullable: true), + TenantId = table.Column(nullable: true), + TenantName = table.Column(nullable: true), + ImpersonatorUserId = table.Column(nullable: true), + ImpersonatorTenantId = table.Column(nullable: true), + ExecutionTime = table.Column(nullable: false), + ExecutionDuration = table.Column(nullable: false), + ClientIpAddress = table.Column(maxLength: 64, nullable: true), + ClientName = table.Column(maxLength: 128, nullable: true), + ClientId = table.Column(maxLength: 64, nullable: true), + CorrelationId = table.Column(maxLength: 64, nullable: true), + BrowserInfo = table.Column(maxLength: 512, nullable: true), + HttpMethod = table.Column(maxLength: 16, nullable: true), + Url = table.Column(maxLength: 256, nullable: true), + Exceptions = table.Column(maxLength: 4000, nullable: true), + Comments = table.Column(maxLength: 256, nullable: true), + HttpStatusCode = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAuditLogs", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpClaimTypes", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(maxLength: 256, nullable: false), + Name = table.Column(maxLength: 256, nullable: false), + Required = table.Column(nullable: false), + IsStatic = table.Column(nullable: false), + Regex = table.Column(maxLength: 512, nullable: true), + RegexDescription = table.Column(maxLength: 128, nullable: true), + Description = table.Column(maxLength: 256, nullable: true), + ValueType = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpClaimTypes", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpPermissionGrants", + columns: table => new + { + Id = table.Column(nullable: false), + TenantId = table.Column(nullable: true), + Name = table.Column(maxLength: 128, nullable: false), + ProviderName = table.Column(maxLength: 64, nullable: false), + ProviderKey = table.Column(maxLength: 64, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpPermissionGrants", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpRoles", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(maxLength: 256, nullable: false), + TenantId = table.Column(nullable: true), + Name = table.Column(maxLength: 256, nullable: false), + NormalizedName = table.Column(maxLength: 256, nullable: false), + IsDefault = table.Column(nullable: false), + IsStatic = table.Column(nullable: false), + IsPublic = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpRoles", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpSettings", + columns: table => new + { + Id = table.Column(nullable: false), + Name = table.Column(maxLength: 128, nullable: false), + Value = table.Column(maxLength: 2048, nullable: false), + ProviderName = table.Column(maxLength: 64, nullable: true), + ProviderKey = table.Column(maxLength: 64, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpSettings", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpTenants", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + LastModificationTime = table.Column(nullable: true), + LastModifierId = table.Column(nullable: true), + IsDeleted = table.Column(nullable: false, defaultValue: false), + DeleterId = table.Column(nullable: true), + DeletionTime = table.Column(nullable: true), + Name = table.Column(maxLength: 64, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpTenants", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpUsers", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + LastModificationTime = table.Column(nullable: true), + LastModifierId = table.Column(nullable: true), + IsDeleted = table.Column(nullable: false, defaultValue: false), + DeleterId = table.Column(nullable: true), + DeletionTime = table.Column(nullable: true), + TenantId = table.Column(nullable: true), + UserName = table.Column(maxLength: 256, nullable: false), + NormalizedUserName = table.Column(maxLength: 256, nullable: false), + Name = table.Column(maxLength: 64, nullable: true), + Surname = table.Column(maxLength: 64, nullable: true), + Email = table.Column(maxLength: 256, nullable: false), + NormalizedEmail = table.Column(maxLength: 256, nullable: false), + EmailConfirmed = table.Column(nullable: false, defaultValue: false), + PasswordHash = table.Column(maxLength: 256, nullable: true), + SecurityStamp = table.Column(maxLength: 256, nullable: false), + PhoneNumber = table.Column(maxLength: 16, nullable: true), + PhoneNumberConfirmed = table.Column(nullable: false, defaultValue: false), + TwoFactorEnabled = table.Column(nullable: false, defaultValue: false), + LockoutEnd = table.Column(nullable: true), + LockoutEnabled = table.Column(nullable: false, defaultValue: false), + AccessFailedCount = table.Column(nullable: false, defaultValue: 0) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUsers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerApiResources", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + LastModificationTime = table.Column(nullable: true), + LastModifierId = table.Column(nullable: true), + IsDeleted = table.Column(nullable: false, defaultValue: false), + DeleterId = table.Column(nullable: true), + DeletionTime = table.Column(nullable: true), + Name = table.Column(maxLength: 200, nullable: false), + DisplayName = table.Column(maxLength: 200, nullable: true), + Description = table.Column(maxLength: 1000, nullable: true), + Enabled = table.Column(nullable: false), + Properties = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerApiResources", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClients", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + LastModificationTime = table.Column(nullable: true), + LastModifierId = table.Column(nullable: true), + IsDeleted = table.Column(nullable: false, defaultValue: false), + DeleterId = table.Column(nullable: true), + DeletionTime = table.Column(nullable: true), + ClientId = table.Column(maxLength: 200, nullable: false), + ClientName = table.Column(maxLength: 200, nullable: true), + Description = table.Column(maxLength: 1000, nullable: true), + ClientUri = table.Column(maxLength: 2000, nullable: true), + LogoUri = table.Column(maxLength: 2000, nullable: true), + Enabled = table.Column(nullable: false), + ProtocolType = table.Column(maxLength: 200, nullable: false), + RequireClientSecret = table.Column(nullable: false), + RequireConsent = table.Column(nullable: false), + AllowRememberConsent = table.Column(nullable: false), + AlwaysIncludeUserClaimsInIdToken = table.Column(nullable: false), + RequirePkce = table.Column(nullable: false), + AllowPlainTextPkce = table.Column(nullable: false), + AllowAccessTokensViaBrowser = table.Column(nullable: false), + FrontChannelLogoutUri = table.Column(maxLength: 2000, nullable: true), + FrontChannelLogoutSessionRequired = table.Column(nullable: false), + BackChannelLogoutUri = table.Column(maxLength: 2000, nullable: true), + BackChannelLogoutSessionRequired = table.Column(nullable: false), + AllowOfflineAccess = table.Column(nullable: false), + IdentityTokenLifetime = table.Column(nullable: false), + AccessTokenLifetime = table.Column(nullable: false), + AuthorizationCodeLifetime = table.Column(nullable: false), + ConsentLifetime = table.Column(nullable: true), + AbsoluteRefreshTokenLifetime = table.Column(nullable: false), + SlidingRefreshTokenLifetime = table.Column(nullable: false), + RefreshTokenUsage = table.Column(nullable: false), + UpdateAccessTokenClaimsOnRefresh = table.Column(nullable: false), + RefreshTokenExpiration = table.Column(nullable: false), + AccessTokenType = table.Column(nullable: false), + EnableLocalLogin = table.Column(nullable: false), + IncludeJwtId = table.Column(nullable: false), + AlwaysSendClientClaims = table.Column(nullable: false), + ClientClaimsPrefix = table.Column(maxLength: 200, nullable: true), + PairWiseSubjectSalt = table.Column(maxLength: 200, nullable: true), + UserSsoLifetime = table.Column(nullable: true), + UserCodeType = table.Column(maxLength: 100, nullable: true), + DeviceCodeLifetime = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClients", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerDeviceFlowCodes", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + DeviceCode = table.Column(maxLength: 200, nullable: false), + UserCode = table.Column(maxLength: 200, nullable: false), + SubjectId = table.Column(maxLength: 200, nullable: true), + ClientId = table.Column(maxLength: 200, nullable: false), + Expiration = table.Column(nullable: false), + Data = table.Column(maxLength: 50000, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerDeviceFlowCodes", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerIdentityResources", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + LastModificationTime = table.Column(nullable: true), + LastModifierId = table.Column(nullable: true), + IsDeleted = table.Column(nullable: false, defaultValue: false), + DeleterId = table.Column(nullable: true), + DeletionTime = table.Column(nullable: true), + Name = table.Column(maxLength: 200, nullable: false), + DisplayName = table.Column(maxLength: 200, nullable: true), + Description = table.Column(maxLength: 1000, nullable: true), + Enabled = table.Column(nullable: false), + Required = table.Column(nullable: false), + Emphasize = table.Column(nullable: false), + ShowInDiscoveryDocument = table.Column(nullable: false), + Properties = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerIdentityResources", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerPersistedGrants", + columns: table => new + { + Key = table.Column(maxLength: 200, nullable: false), + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(nullable: true), + Type = table.Column(maxLength: 50, nullable: false), + SubjectId = table.Column(maxLength: 200, nullable: true), + ClientId = table.Column(maxLength: 200, nullable: false), + CreationTime = table.Column(nullable: false), + Expiration = table.Column(nullable: true), + Data = table.Column(maxLength: 50000, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerPersistedGrants", x => x.Key); + }); + + migrationBuilder.CreateTable( + name: "AbpAuditLogActions", + columns: table => new + { + Id = table.Column(nullable: false), + TenantId = table.Column(nullable: true), + AuditLogId = table.Column(nullable: false), + ServiceName = table.Column(maxLength: 256, nullable: true), + MethodName = table.Column(maxLength: 128, nullable: true), + Parameters = table.Column(maxLength: 2000, nullable: true), + ExecutionTime = table.Column(nullable: false), + ExecutionDuration = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAuditLogActions", x => x.Id); + table.ForeignKey( + name: "FK_AbpAuditLogActions_AbpAuditLogs_AuditLogId", + column: x => x.AuditLogId, + principalTable: "AbpAuditLogs", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpEntityChanges", + columns: table => new + { + Id = table.Column(nullable: false), + AuditLogId = table.Column(nullable: false), + TenantId = table.Column(nullable: true), + ChangeTime = table.Column(nullable: false), + ChangeType = table.Column(nullable: false), + EntityTenantId = table.Column(nullable: true), + EntityId = table.Column(maxLength: 128, nullable: false), + EntityTypeFullName = table.Column(maxLength: 128, nullable: false), + ExtraProperties = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpEntityChanges", x => x.Id); + table.ForeignKey( + name: "FK_AbpEntityChanges_AbpAuditLogs_AuditLogId", + column: x => x.AuditLogId, + principalTable: "AbpAuditLogs", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpRoleClaims", + columns: table => new + { + Id = table.Column(nullable: false), + TenantId = table.Column(nullable: true), + ClaimType = table.Column(maxLength: 256, nullable: false), + ClaimValue = table.Column(maxLength: 1024, nullable: true), + RoleId = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpRoleClaims", x => x.Id); + table.ForeignKey( + name: "FK_AbpRoleClaims_AbpRoles_RoleId", + column: x => x.RoleId, + principalTable: "AbpRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpTenantConnectionStrings", + columns: table => new + { + TenantId = table.Column(nullable: false), + Name = table.Column(maxLength: 64, nullable: false), + Value = table.Column(maxLength: 1024, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpTenantConnectionStrings", x => new { x.TenantId, x.Name }); + table.ForeignKey( + name: "FK_AbpTenantConnectionStrings_AbpTenants_TenantId", + column: x => x.TenantId, + principalTable: "AbpTenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserClaims", + columns: table => new + { + Id = table.Column(nullable: false), + TenantId = table.Column(nullable: true), + ClaimType = table.Column(maxLength: 256, nullable: false), + ClaimValue = table.Column(maxLength: 1024, nullable: true), + UserId = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserClaims", x => x.Id); + table.ForeignKey( + name: "FK_AbpUserClaims_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserLogins", + columns: table => new + { + UserId = table.Column(nullable: false), + LoginProvider = table.Column(maxLength: 64, nullable: false), + TenantId = table.Column(nullable: true), + ProviderKey = table.Column(maxLength: 196, nullable: false), + ProviderDisplayName = table.Column(maxLength: 128, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserLogins", x => new { x.UserId, x.LoginProvider }); + table.ForeignKey( + name: "FK_AbpUserLogins_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserRoles", + columns: table => new + { + UserId = table.Column(nullable: false), + RoleId = table.Column(nullable: false), + TenantId = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserRoles", x => new { x.UserId, x.RoleId }); + table.ForeignKey( + name: "FK_AbpUserRoles_AbpRoles_RoleId", + column: x => x.RoleId, + principalTable: "AbpRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AbpUserRoles_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserTokens", + columns: table => new + { + UserId = table.Column(nullable: false), + LoginProvider = table.Column(maxLength: 64, nullable: false), + Name = table.Column(maxLength: 128, nullable: false), + TenantId = table.Column(nullable: true), + Value = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); + table.ForeignKey( + name: "FK_AbpUserTokens_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerApiClaims", + columns: table => new + { + Type = table.Column(maxLength: 200, nullable: false), + ApiResourceId = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerApiClaims", x => new { x.ApiResourceId, x.Type }); + table.ForeignKey( + name: "FK_IdentityServerApiClaims_IdentityServerApiResources_ApiResourceId", + column: x => x.ApiResourceId, + principalTable: "IdentityServerApiResources", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerApiScopes", + columns: table => new + { + ApiResourceId = table.Column(nullable: false), + Name = table.Column(maxLength: 200, nullable: false), + DisplayName = table.Column(maxLength: 200, nullable: true), + Description = table.Column(maxLength: 1000, nullable: true), + Required = table.Column(nullable: false), + Emphasize = table.Column(nullable: false), + ShowInDiscoveryDocument = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerApiScopes", x => new { x.ApiResourceId, x.Name }); + table.ForeignKey( + name: "FK_IdentityServerApiScopes_IdentityServerApiResources_ApiResourceId", + column: x => x.ApiResourceId, + principalTable: "IdentityServerApiResources", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerApiSecrets", + columns: table => new + { + Type = table.Column(maxLength: 250, nullable: false), + Value = table.Column(maxLength: 4000, nullable: false), + ApiResourceId = table.Column(nullable: false), + Description = table.Column(maxLength: 2000, nullable: true), + Expiration = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerApiSecrets", x => new { x.ApiResourceId, x.Type, x.Value }); + table.ForeignKey( + name: "FK_IdentityServerApiSecrets_IdentityServerApiResources_ApiResourceId", + column: x => x.ApiResourceId, + principalTable: "IdentityServerApiResources", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientClaims", + columns: table => new + { + ClientId = table.Column(nullable: false), + Type = table.Column(maxLength: 250, nullable: false), + Value = table.Column(maxLength: 250, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientClaims", x => new { x.ClientId, x.Type, x.Value }); + table.ForeignKey( + name: "FK_IdentityServerClientClaims_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientCorsOrigins", + columns: table => new + { + ClientId = table.Column(nullable: false), + Origin = table.Column(maxLength: 150, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientCorsOrigins", x => new { x.ClientId, x.Origin }); + table.ForeignKey( + name: "FK_IdentityServerClientCorsOrigins_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientGrantTypes", + columns: table => new + { + ClientId = table.Column(nullable: false), + GrantType = table.Column(maxLength: 250, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientGrantTypes", x => new { x.ClientId, x.GrantType }); + table.ForeignKey( + name: "FK_IdentityServerClientGrantTypes_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientIdPRestrictions", + columns: table => new + { + ClientId = table.Column(nullable: false), + Provider = table.Column(maxLength: 200, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientIdPRestrictions", x => new { x.ClientId, x.Provider }); + table.ForeignKey( + name: "FK_IdentityServerClientIdPRestrictions_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientPostLogoutRedirectUris", + columns: table => new + { + ClientId = table.Column(nullable: false), + PostLogoutRedirectUri = table.Column(maxLength: 2000, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientPostLogoutRedirectUris", x => new { x.ClientId, x.PostLogoutRedirectUri }); + table.ForeignKey( + name: "FK_IdentityServerClientPostLogoutRedirectUris_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientProperties", + columns: table => new + { + ClientId = table.Column(nullable: false), + Key = table.Column(maxLength: 250, nullable: false), + Value = table.Column(maxLength: 2000, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientProperties", x => new { x.ClientId, x.Key }); + table.ForeignKey( + name: "FK_IdentityServerClientProperties_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientRedirectUris", + columns: table => new + { + ClientId = table.Column(nullable: false), + RedirectUri = table.Column(maxLength: 2000, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientRedirectUris", x => new { x.ClientId, x.RedirectUri }); + table.ForeignKey( + name: "FK_IdentityServerClientRedirectUris_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientScopes", + columns: table => new + { + ClientId = table.Column(nullable: false), + Scope = table.Column(maxLength: 200, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientScopes", x => new { x.ClientId, x.Scope }); + table.ForeignKey( + name: "FK_IdentityServerClientScopes_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientSecrets", + columns: table => new + { + Type = table.Column(maxLength: 250, nullable: false), + Value = table.Column(maxLength: 4000, nullable: false), + ClientId = table.Column(nullable: false), + Description = table.Column(maxLength: 2000, nullable: true), + Expiration = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientSecrets", x => new { x.ClientId, x.Type, x.Value }); + table.ForeignKey( + name: "FK_IdentityServerClientSecrets_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerIdentityClaims", + columns: table => new + { + Type = table.Column(maxLength: 200, nullable: false), + IdentityResourceId = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerIdentityClaims", x => new { x.IdentityResourceId, x.Type }); + table.ForeignKey( + name: "FK_IdentityServerIdentityClaims_IdentityServerIdentityResources_IdentityResourceId", + column: x => x.IdentityResourceId, + principalTable: "IdentityServerIdentityResources", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpEntityPropertyChanges", + columns: table => new + { + Id = table.Column(nullable: false), + TenantId = table.Column(nullable: true), + EntityChangeId = table.Column(nullable: false), + NewValue = table.Column(maxLength: 512, nullable: true), + OriginalValue = table.Column(maxLength: 512, nullable: true), + PropertyName = table.Column(maxLength: 128, nullable: false), + PropertyTypeFullName = table.Column(maxLength: 64, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpEntityPropertyChanges", x => x.Id); + table.ForeignKey( + name: "FK_AbpEntityPropertyChanges_AbpEntityChanges_EntityChangeId", + column: x => x.EntityChangeId, + principalTable: "AbpEntityChanges", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerApiScopeClaims", + columns: table => new + { + Type = table.Column(maxLength: 200, nullable: false), + ApiResourceId = table.Column(nullable: false), + Name = table.Column(maxLength: 200, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerApiScopeClaims", x => new { x.ApiResourceId, x.Name, x.Type }); + table.ForeignKey( + name: "FK_IdentityServerApiScopeClaims_IdentityServerApiScopes_ApiResourceId_Name", + columns: x => new { x.ApiResourceId, x.Name }, + principalTable: "IdentityServerApiScopes", + principalColumns: new[] { "ApiResourceId", "Name" }, + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogActions_AuditLogId", + table: "AbpAuditLogActions", + column: "AuditLogId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogActions_TenantId_ServiceName_MethodName_ExecutionTime", + table: "AbpAuditLogActions", + columns: new[] { "TenantId", "ServiceName", "MethodName", "ExecutionTime" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogs_TenantId_ExecutionTime", + table: "AbpAuditLogs", + columns: new[] { "TenantId", "ExecutionTime" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogs_TenantId_UserId_ExecutionTime", + table: "AbpAuditLogs", + columns: new[] { "TenantId", "UserId", "ExecutionTime" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpEntityChanges_AuditLogId", + table: "AbpEntityChanges", + column: "AuditLogId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpEntityChanges_TenantId_EntityTypeFullName_EntityId", + table: "AbpEntityChanges", + columns: new[] { "TenantId", "EntityTypeFullName", "EntityId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpEntityPropertyChanges_EntityChangeId", + table: "AbpEntityPropertyChanges", + column: "EntityChangeId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpPermissionGrants_Name_ProviderName_ProviderKey", + table: "AbpPermissionGrants", + columns: new[] { "Name", "ProviderName", "ProviderKey" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpRoleClaims_RoleId", + table: "AbpRoleClaims", + column: "RoleId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpRoles_NormalizedName", + table: "AbpRoles", + column: "NormalizedName"); + + migrationBuilder.CreateIndex( + name: "IX_AbpSettings_Name_ProviderName_ProviderKey", + table: "AbpSettings", + columns: new[] { "Name", "ProviderName", "ProviderKey" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpTenants_Name", + table: "AbpTenants", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserClaims_UserId", + table: "AbpUserClaims", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserLogins_LoginProvider_ProviderKey", + table: "AbpUserLogins", + columns: new[] { "LoginProvider", "ProviderKey" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserRoles_RoleId_UserId", + table: "AbpUserRoles", + columns: new[] { "RoleId", "UserId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpUsers_Email", + table: "AbpUsers", + column: "Email"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUsers_NormalizedEmail", + table: "AbpUsers", + column: "NormalizedEmail"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUsers_NormalizedUserName", + table: "AbpUsers", + column: "NormalizedUserName"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUsers_UserName", + table: "AbpUsers", + column: "UserName"); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerClients_ClientId", + table: "IdentityServerClients", + column: "ClientId"); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_DeviceCode", + table: "IdentityServerDeviceFlowCodes", + column: "DeviceCode", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_Expiration", + table: "IdentityServerDeviceFlowCodes", + column: "Expiration"); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_UserCode", + table: "IdentityServerDeviceFlowCodes", + column: "UserCode", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerPersistedGrants_Expiration", + table: "IdentityServerPersistedGrants", + column: "Expiration"); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerPersistedGrants_SubjectId_ClientId_Type", + table: "IdentityServerPersistedGrants", + columns: new[] { "SubjectId", "ClientId", "Type" }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpAuditLogActions"); + + migrationBuilder.DropTable( + name: "AbpClaimTypes"); + + migrationBuilder.DropTable( + name: "AbpEntityPropertyChanges"); + + migrationBuilder.DropTable( + name: "AbpPermissionGrants"); + + migrationBuilder.DropTable( + name: "AbpRoleClaims"); + + migrationBuilder.DropTable( + name: "AbpSettings"); + + migrationBuilder.DropTable( + name: "AbpTenantConnectionStrings"); + + migrationBuilder.DropTable( + name: "AbpUserClaims"); + + migrationBuilder.DropTable( + name: "AbpUserLogins"); + + migrationBuilder.DropTable( + name: "AbpUserRoles"); + + migrationBuilder.DropTable( + name: "AbpUserTokens"); + + migrationBuilder.DropTable( + name: "IdentityServerApiClaims"); + + migrationBuilder.DropTable( + name: "IdentityServerApiScopeClaims"); + + migrationBuilder.DropTable( + name: "IdentityServerApiSecrets"); + + migrationBuilder.DropTable( + name: "IdentityServerClientClaims"); + + migrationBuilder.DropTable( + name: "IdentityServerClientCorsOrigins"); + + migrationBuilder.DropTable( + name: "IdentityServerClientGrantTypes"); + + migrationBuilder.DropTable( + name: "IdentityServerClientIdPRestrictions"); + + migrationBuilder.DropTable( + name: "IdentityServerClientPostLogoutRedirectUris"); + + migrationBuilder.DropTable( + name: "IdentityServerClientProperties"); + + migrationBuilder.DropTable( + name: "IdentityServerClientRedirectUris"); + + migrationBuilder.DropTable( + name: "IdentityServerClientScopes"); + + migrationBuilder.DropTable( + name: "IdentityServerClientSecrets"); + + migrationBuilder.DropTable( + name: "IdentityServerDeviceFlowCodes"); + + migrationBuilder.DropTable( + name: "IdentityServerIdentityClaims"); + + migrationBuilder.DropTable( + name: "IdentityServerPersistedGrants"); + + migrationBuilder.DropTable( + name: "AbpEntityChanges"); + + migrationBuilder.DropTable( + name: "AbpTenants"); + + migrationBuilder.DropTable( + name: "AbpRoles"); + + migrationBuilder.DropTable( + name: "AbpUsers"); + + migrationBuilder.DropTable( + name: "IdentityServerApiScopes"); + + migrationBuilder.DropTable( + name: "IdentityServerClients"); + + migrationBuilder.DropTable( + name: "IdentityServerIdentityResources"); + + migrationBuilder.DropTable( + name: "AbpAuditLogs"); + + migrationBuilder.DropTable( + name: "IdentityServerApiResources"); + } + } +} diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/IdentityServerHostMigrationsDbContextModelSnapshot.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/IdentityServerHostMigrationsDbContextModelSnapshot.cs index 7e25b0e36a..33aa2b4ded 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/IdentityServerHostMigrationsDbContextModelSnapshot.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/IdentityServerHostMigrationsDbContextModelSnapshot.cs @@ -15,7 +15,7 @@ namespace MyCompanyName.MyProjectName.Migrations { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "3.0.0") + .HasAnnotation("ProductVersion", "3.1.0") .HasAnnotation("Relational:MaxIdentifierLength", 128) .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); @@ -424,6 +424,7 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnType("datetime2"); b.Property("Email") + .IsRequired() .HasColumnName("Email") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -467,6 +468,7 @@ namespace MyCompanyName.MyProjectName.Migrations .HasMaxLength(64); b.Property("NormalizedEmail") + .IsRequired() .HasColumnName("NormalizedEmail") .HasColumnType("nvarchar(256)") .HasMaxLength(256); @@ -1109,6 +1111,70 @@ namespace MyCompanyName.MyProjectName.Migrations b.ToTable("IdentityServerClientSecrets"); }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("DeviceCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Expiration") + .IsRequired() + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("Id"); + + b.HasIndex("DeviceCode") + .IsUnique(); + + b.HasIndex("Expiration"); + + b.HasIndex("UserCode") + .IsUnique(); + + b.ToTable("IdentityServerDeviceFlowCodes"); + }); + modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => { b.Property("Key") diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20191218090727_Initial.Designer.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20200106080643_Initial.Designer.cs similarity index 99% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20191218090727_Initial.Designer.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20200106080643_Initial.Designer.cs index 5ce29ab888..93e8a25a34 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20191218090727_Initial.Designer.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20200106080643_Initial.Designer.cs @@ -10,7 +10,7 @@ using MyCompanyName.MyProjectName.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { [DbContext(typeof(UnifiedDbContext))] - [Migration("20191218090727_Initial")] + [Migration("20200106080643_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20191218090727_Initial.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20200106080643_Initial.cs similarity index 100% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20191218090727_Initial.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20200106080643_Initial.cs From 746d156e15cf62b405c20fef8079b296405efd40 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 6 Jan 2020 12:02:00 +0300 Subject: [PATCH 056/411] refactor(theme-shared): improve table scrolling user experience #2537 --- .../lib/components/table/table.component.html | 78 ++++++++++++++----- .../lib/components/table/table.component.scss | 3 - .../lib/components/table/table.component.ts | 8 +- .../theme-shared/src/lib/constants/styles.ts | 1 + 4 files changed, 67 insertions(+), 23 deletions(-) delete mode 100644 npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.scss diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html index 6f0d080e9d..fa53170728 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html @@ -1,22 +1,8 @@ -
+
-
- - - - - - - - - - -
-
+
+ + +
+
+
+
+ + + + +
+
+
+
+ + + +
+
+
+
+ + + + + + +
+
+ + + + + + + + + + + + + + + + + + diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.scss deleted file mode 100644 index 4881816a52..0000000000 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.scss +++ /dev/null @@ -1,3 +0,0 @@ -.ui-table-scrollable-wrapper { - overflow: auto; -} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts index f9811c219c..27436393ba 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts @@ -3,7 +3,6 @@ import { Component, OnInit, Input, TemplateRef, Output, EventEmitter } from '@an @Component({ selector: 'abp-table', templateUrl: 'table.component.html', - styleUrls: ['table.component.scss'], }) export class TableComponent implements OnInit { private _totalRecords: number; @@ -21,7 +20,10 @@ export class TableComponent implements OnInit { colgroupTemplate: TemplateRef; @Input() - maxHeight: number; + scrollHeight: string; + + @Input() + scrollable: boolean; @Input() rows: number; @@ -31,6 +33,8 @@ export class TableComponent implements OnInit { page = 1; + bodyScrollLeft = 0; + @Input() get totalRecords(): number { return this._totalRecords || this.value.length; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/constants/styles.ts b/npm/ng-packs/packages/theme-shared/src/lib/constants/styles.ts index 30185ec6c6..24f7a9a8ea 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/constants/styles.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/constants/styles.ts @@ -30,6 +30,7 @@ export default ` .ui-table-scrollable-body::-webkit-scrollbar { height: 5px !important; + width: 5px !important; } .ui-table-scrollable-body::-webkit-scrollbar-track { From 1588f3b88cba898a8cf17752e78cffe7aa014090 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 6 Jan 2020 12:48:51 +0300 Subject: [PATCH 057/411] chore: remove ngx-perfect-scrollbar from theme-shared dependencies --- npm/ng-packs/package.json | 1 - npm/ng-packs/packages/theme-shared/ng-package.json | 1 - npm/ng-packs/packages/theme-shared/package.json | 1 - 3 files changed, 3 deletions(-) diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index c831267d7d..fa9799048e 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -74,7 +74,6 @@ "just-compare": "^1.3.0", "lerna": "^3.19.0", "ng-packagr": "^5.7.1", - "ngx-perfect-scrollbar": "^8.0.0", "ngxs-reset-plugin": "^1.2.0", "ngxs-schematic": "^1.1.9", "prettier": "^1.18.2", diff --git a/npm/ng-packs/packages/theme-shared/ng-package.json b/npm/ng-packs/packages/theme-shared/ng-package.json index a879347afd..73ed96741c 100644 --- a/npm/ng-packs/packages/theme-shared/ng-package.json +++ b/npm/ng-packs/packages/theme-shared/ng-package.json @@ -12,7 +12,6 @@ "@ngx-validate/core", "bootstrap", "font-awesome", - "ngx-perfect-scrollbar", "primeicons", "primeng", "chart.js" diff --git a/npm/ng-packs/packages/theme-shared/package.json b/npm/ng-packs/packages/theme-shared/package.json index 9972b3cfd1..999190ec73 100644 --- a/npm/ng-packs/packages/theme-shared/package.json +++ b/npm/ng-packs/packages/theme-shared/package.json @@ -15,7 +15,6 @@ "bootstrap": "^4.3.1", "chart.js": "^2.9.2", "font-awesome": "^4.7.0", - "ngx-perfect-scrollbar": "^8.0.0", "primeicons": "^2.0.0", "primeng": "^8.1.1" }, From ff65510ef83bb4d1317b624389b7a3fa6ee3c638 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 6 Jan 2020 13:12:36 +0300 Subject: [PATCH 058/411] [Blogging module] Change "Blog" folder name to "Blogs" resolves https://github.com/abpframework/abp/issues/2564 --- .../Volo.Blogging.Web/BloggingWebModule.cs | 8 +- .../Pages/Blog/Posts/Detail.cshtml | 319 ------------------ .../Pages/{Blog => Blogs}/BloggingPage.cs | 0 .../{Blog => Blogs}/BloggingPageModel.cs | 0 .../Pages/{Blog => Blogs}/Index.cshtml | 2 +- .../Pages/{Blog => Blogs}/Index.cshtml.cs | 0 .../Pages/Blogs/Posts/Detail.cshtml | 319 ++++++++++++++++++ .../{Blog => Blogs}/Posts/Detail.cshtml.cs | 0 .../Pages/{Blog => Blogs}/Posts/Edit.cshtml | 4 +- .../{Blog => Blogs}/Posts/Edit.cshtml.cs | 0 .../Pages/{Blog => Blogs}/Posts/Index.cshtml | 10 +- .../{Blog => Blogs}/Posts/Index.cshtml.cs | 0 .../Pages/{Blog => Blogs}/Posts/Index.css | 0 .../Pages/{Blog => Blogs}/Posts/Index.min.css | 0 .../Pages/{Blog => Blogs}/Posts/Index.scss | 0 .../Pages/{Blog => Blogs}/Posts/New.cshtml | 4 +- .../Pages/{Blog => Blogs}/Posts/New.cshtml.cs | 0 .../Pages/{Blog => Blogs}/Posts/detail.js | 0 .../Pages/{Blog => Blogs}/Posts/edit.js | 0 .../Pages/{Blog => Blogs}/Posts/new.css | 0 .../Pages/{Blog => Blogs}/Posts/new.css.map | 0 .../Pages/{Blog => Blogs}/Posts/new.js | 0 .../Pages/{Blog => Blogs}/Posts/new.min.css | 0 .../Pages/{Blog => Blogs}/Posts/new.scss | 0 .../{Blog => Blogs}/Shared/Scripts/blog.js | 0 .../Shared/Styles/_bootstrap-overwrite.scss | 0 .../Shared/Styles/_custom.scss | 0 .../Shared/Styles/_header.scss | 0 .../{Blog => Blogs}/Shared/Styles/_home.css | 0 .../Shared/Styles/_home.min.css | 0 .../{Blog => Blogs}/Shared/Styles/_home.scss | 0 .../{Blog => Blogs}/Shared/Styles/_post.scss | 0 .../{Blog => Blogs}/Shared/Styles/blog.css | 0 .../Shared/Styles/blog.css.map | 0 .../Shared/Styles/blog.min.css | 0 .../{Blog => Blogs}/Shared/Styles/blog.scss | 0 .../Pages/{Blog => Blogs}/_ViewImports.cshtml | 0 37 files changed, 333 insertions(+), 333 deletions(-) delete mode 100644 modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Detail.cshtml rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/BloggingPage.cs (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/BloggingPageModel.cs (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Index.cshtml (89%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Index.cshtml.cs (100%) create mode 100644 modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Posts/Detail.cshtml.cs (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Posts/Edit.cshtml (96%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Posts/Edit.cshtml.cs (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Posts/Index.cshtml (94%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Posts/Index.cshtml.cs (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Posts/Index.css (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Posts/Index.min.css (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Posts/Index.scss (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Posts/New.cshtml (96%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Posts/New.cshtml.cs (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Posts/detail.js (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Posts/edit.js (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Posts/new.css (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Posts/new.css.map (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Posts/new.js (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Posts/new.min.css (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Posts/new.scss (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Shared/Scripts/blog.js (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Shared/Styles/_bootstrap-overwrite.scss (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Shared/Styles/_custom.scss (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Shared/Styles/_header.scss (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Shared/Styles/_home.css (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Shared/Styles/_home.min.css (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Shared/Styles/_home.scss (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Shared/Styles/_post.scss (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Shared/Styles/blog.css (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Shared/Styles/blog.css.map (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Shared/Styles/blog.min.css (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/Shared/Styles/blog.scss (100%) rename modules/blogging/src/Volo.Blogging.Web/Pages/{Blog => Blogs}/_ViewImports.cshtml (100%) diff --git a/modules/blogging/src/Volo.Blogging.Web/BloggingWebModule.cs b/modules/blogging/src/Volo.Blogging.Web/BloggingWebModule.cs index 063ecebf5b..00fa553902 100644 --- a/modules/blogging/src/Volo.Blogging.Web/BloggingWebModule.cs +++ b/modules/blogging/src/Volo.Blogging.Web/BloggingWebModule.cs @@ -59,10 +59,10 @@ namespace Volo.Blogging var routePrefix = urlOptions.RoutePrefix; - options.Conventions.AddPageRoute("/Blog/Posts/Index", routePrefix + "{blogShortName}"); - options.Conventions.AddPageRoute("/Blog/Posts/Detail", routePrefix + "{blogShortName}/{postUrl}"); - options.Conventions.AddPageRoute("/Blog/Posts/Edit", routePrefix + "{blogShortName}/posts/{postId}/edit"); - options.Conventions.AddPageRoute("/Blog/Posts/New", routePrefix + "{blogShortName}/posts/new"); + options.Conventions.AddPageRoute("/Blogs/Posts/Index", routePrefix + "{blogShortName}"); + options.Conventions.AddPageRoute("/Blogs/Posts/Detail", routePrefix + "{blogShortName}/{postUrl}"); + options.Conventions.AddPageRoute("/Blogs/Posts/Edit", routePrefix + "{blogShortName}/posts/{postId}/edit"); + options.Conventions.AddPageRoute("/Blogs/Posts/New", routePrefix + "{blogShortName}/posts/new"); }); } } diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Detail.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Detail.cshtml deleted file mode 100644 index 4c945e8aac..0000000000 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Detail.cshtml +++ /dev/null @@ -1,319 +0,0 @@ -@page -@inherits Volo.Blogging.Pages.Blog.BloggingPage -@using Microsoft.AspNetCore.Authorization -@using Microsoft.AspNetCore.Http.Extensions -@using Volo.Abp.Users -@using Volo.Blogging -@using Volo.Blogging.Pages.Blog.Posts -@using Volo.Blogging.Areas.Blog.Helpers.TagHelpers -@inject IAuthorizationService Authorization -@model DetailModel -@{ - ViewBag.PageTitle = "Blog"; - var hasCommentingPermission = CurrentUser.IsAuthenticated; //TODO: Apply real policy! -} -@section scripts { - - - -} -@section styles { - - - -} - -
- -
-
-
-
-
-
-

- @Model.Post.Title -

- -
- -
-
-
- -
-
-
-
-
- -
-
-
-

- @Html.Raw(RenderMarkdownToHtml(Model.Post.Content)) -

-
-
-
- -
-
- @if (Model.Post.Tags.Count > 0) - { -
-
@L["TagsInThisArticle"]
- @foreach (var tag in Model.Post.Tags) - { - @tag.Name - } -
- } - - - @if (Model.CommentsWithReplies.Count > 0) - { - - -

@L["CommentWithCount", @Model.CommentCount]

- @if (hasCommentingPermission) - { - @L["LeaveComment"] - } - else - { - @L["LeaveComment"] - } -
-
- } - -
- @foreach (var commentWithRepliesDto in Model.CommentsWithReplies) - { -
- -
-
- @(commentWithRepliesDto.Comment.Writer == null ? "" : commentWithRepliesDto.Comment.Writer.UserName) - @ConvertDatetimeToTimeAgo(commentWithRepliesDto.Comment.CreationTime) -
-

- @commentWithRepliesDto.Comment.Text -

-
- - @if (hasCommentingPermission) - { - - @L["Reply"] - - } - - @if (await Authorization.IsGrantedAsync(BloggingPermissions.Comments.Delete)) - { - | - - @L["Delete"] - - } - - @if (await Authorization.IsGrantedAsync(BloggingPermissions.Comments.Update) || (CurrentUser.Id == commentWithRepliesDto.Comment.CreatorId)) - { - | - - @L["Edit"] - - } -
- - @if (hasCommentingPermission) - { -
-
-

- @L["ReplyTo", commentWithRepliesDto.Comment.Writer == null ? "" : commentWithRepliesDto.Comment.Writer.UserName] - -

-
-
- - - -
- -
- - - -
-
-
- } - @if (await Authorization.IsGrantedAsync(BloggingPermissions.Comments.Update) || (CurrentUser.Id == commentWithRepliesDto.Comment.CreatorId)) - { -
-
-
-
- -
- -
- - - -
-
-
- } - - @foreach (var reply in commentWithRepliesDto.Replies) - { -
- -
-
- @(reply.Writer == null ? "" : reply.Writer.UserName) - @ConvertDatetimeToTimeAgo(reply.CreationTime) -
-

- @reply.Text -

-
- - @if (hasCommentingPermission) - { - - @L["Reply"] - - } - @if (await Authorization.IsGrantedAsync(BloggingPermissions.Comments.Delete) || (CurrentUser.Id == commentWithRepliesDto.Comment.CreatorId)) - { - | - - @L["Delete"] - - } - - @if (await Authorization.IsGrantedAsync(BloggingPermissions.Comments.Update) || (CurrentUser.Id == commentWithRepliesDto.Comment.CreatorId)) - { - | - - @L["Edit"] - - } -
- - @if (hasCommentingPermission) - { -
-
-

- @L["ReplyTo", commentWithRepliesDto.Comment.Writer == null ? "" : commentWithRepliesDto.Comment.Writer.UserName] -

-
-
- - -
- -
- - - -
-
-
- } - @if (await Authorization.IsGrantedAsync(BloggingPermissions.Comments.Update) || (CurrentUser.Id == commentWithRepliesDto.Comment.CreatorId)) - { -
-
-
-
- -
- -
- - - -
-
-
- } -
-
- } -
-
- } -
- - @if (hasCommentingPermission) - { -
-
-

@L["LeaveComment"]

-
-
-
-
- - -
- -
- - -
-
-
- } - else - { - @L["LeaveComment"] - } -
-
-
-
diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/BloggingPage.cs b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/BloggingPage.cs similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/BloggingPage.cs rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/BloggingPage.cs diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/BloggingPageModel.cs b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/BloggingPageModel.cs similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/BloggingPageModel.cs rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/BloggingPageModel.cs diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Index.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Index.cshtml similarity index 89% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Index.cshtml rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Index.cshtml index 97f06b6dc0..91eb12fac4 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Index.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Index.cshtml @@ -3,7 +3,7 @@ @inherits BloggingPage @model IndexModel @{ - ViewBag.PageTitle = "Blog"; + ViewBag.PageTitle = "Blogs"; }

@L["Blogs"] diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Index.cshtml.cs b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Index.cshtml.cs similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Index.cshtml.cs rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Index.cshtml.cs diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml new file mode 100644 index 0000000000..a76e92ea9b --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml @@ -0,0 +1,319 @@ +@page +@inherits Volo.Blogging.Pages.Blog.BloggingPage +@using Microsoft.AspNetCore.Authorization +@using Microsoft.AspNetCore.Http.Extensions +@using Volo.Abp.Users +@using Volo.Blogging +@using Volo.Blogging.Pages.Blog.Posts +@using Volo.Blogging.Areas.Blog.Helpers.TagHelpers +@inject IAuthorizationService Authorization +@model DetailModel +@{ + ViewBag.PageTitle = Model.Post.Title; + var hasCommentingPermission = CurrentUser.IsAuthenticated; //TODO: Apply real policy! +} +@section scripts { + + + +} +@section styles { + + + +} + +
+ +
+
+
+
+
+
+

+ @Model.Post.Title +

+ +
+ +
+
+
+ +
+
+
+
+
+ +
+
+
+

+ @Html.Raw(RenderMarkdownToHtml(Model.Post.Content)) +

+
+
+
+ +
+
+ @if (Model.Post.Tags.Count > 0) + { +
+
@L["TagsInThisArticle"]
+ @foreach (var tag in Model.Post.Tags) + { + @tag.Name + } +
+ } + + + @if (Model.CommentsWithReplies.Count > 0) + { + + +

@L["CommentWithCount", @Model.CommentCount]

+ @if (hasCommentingPermission) + { + @L["LeaveComment"] + } + else + { + @L["LeaveComment"] + } +
+
+ +
+ @foreach (var commentWithRepliesDto in Model.CommentsWithReplies) + { +
+ +
+
+ @(commentWithRepliesDto.Comment.Writer == null ? "" : commentWithRepliesDto.Comment.Writer.UserName) + @ConvertDatetimeToTimeAgo(commentWithRepliesDto.Comment.CreationTime) +
+

+ @commentWithRepliesDto.Comment.Text +

+
+ + @if (hasCommentingPermission) + { + + @L["Reply"] + + } + + @if (await Authorization.IsGrantedAsync(BloggingPermissions.Comments.Delete)) + { + | + + @L["Delete"] + + } + + @if (await Authorization.IsGrantedAsync(BloggingPermissions.Comments.Update) || (CurrentUser.Id == commentWithRepliesDto.Comment.CreatorId)) + { + | + + @L["Edit"] + + } +
+ + @if (hasCommentingPermission) + { +
+
+

+ @L["ReplyTo", commentWithRepliesDto.Comment.Writer == null ? "" : commentWithRepliesDto.Comment.Writer.UserName] + +

+
+
+ + + +
+ +
+ + + +
+
+
+ } + @if (await Authorization.IsGrantedAsync(BloggingPermissions.Comments.Update) || (CurrentUser.Id == commentWithRepliesDto.Comment.CreatorId)) + { +
+
+
+
+ +
+ +
+ + + +
+
+
+ } + + @foreach (var reply in commentWithRepliesDto.Replies) + { +
+ +
+
+ @(reply.Writer == null ? "" : reply.Writer.UserName) + @ConvertDatetimeToTimeAgo(reply.CreationTime) +
+

+ @reply.Text +

+
+ + @if (hasCommentingPermission) + { + + @L["Reply"] + + } + @if (await Authorization.IsGrantedAsync(BloggingPermissions.Comments.Delete) || (CurrentUser.Id == commentWithRepliesDto.Comment.CreatorId)) + { + | + + @L["Delete"] + + } + + @if (await Authorization.IsGrantedAsync(BloggingPermissions.Comments.Update) || (CurrentUser.Id == commentWithRepliesDto.Comment.CreatorId)) + { + | + + @L["Edit"] + + } +
+ + @if (hasCommentingPermission) + { +
+
+

+ @L["ReplyTo", commentWithRepliesDto.Comment.Writer == null ? "" : commentWithRepliesDto.Comment.Writer.UserName] +

+
+
+ + +
+ +
+ + + +
+
+
+ } + @if (await Authorization.IsGrantedAsync(BloggingPermissions.Comments.Update) || (CurrentUser.Id == commentWithRepliesDto.Comment.CreatorId)) + { +
+
+
+
+ +
+ +
+ + + +
+
+
+ } +
+
+ } +
+
+ } +
+ } + + @if (hasCommentingPermission) + { +
+
+

@L["LeaveComment"]

+
+
+
+
+ + +
+ +
+ + +
+
+
+ } + else + { + @L["LeaveComment"] + } +
+
+
+
diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Detail.cshtml.cs b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml.cs similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Detail.cshtml.cs rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml.cs diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Edit.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml similarity index 96% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Edit.cshtml rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml index dac2d5122f..15119745df 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Edit.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml @@ -9,13 +9,13 @@ @section styles { - + } @section scripts { - + } diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Edit.cshtml.cs b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml.cs similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Edit.cshtml.cs rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml.cs diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.cshtml similarity index 94% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.cshtml rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.cshtml index 20ebc1887f..b0f9dc4d46 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.cshtml @@ -12,13 +12,13 @@ @section scripts { - + } @section styles { - + } @@ -69,7 +69,7 @@

@foreach (var tag in post.Tags) { - @tag.Name + @tag.Name }

@@ -178,7 +178,7 @@

@foreach (var tag in post.Tags) { - @tag.Name + @tag.Name }

@@ -200,7 +200,7 @@ @foreach (var popularTag in Model.PopularTags) { } diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.cshtml.cs b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.cshtml.cs similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.cshtml.cs rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.cshtml.cs diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.css similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.css rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.css diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.min.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.min.css similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.min.css rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.min.css diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.scss b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.scss similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.scss rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.scss diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/New.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml similarity index 96% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/New.cshtml rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml index b96a531550..95b7de9e03 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/New.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml @@ -9,13 +9,13 @@ @section styles { - + } @section scripts { - + }
diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/New.cshtml.cs b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml.cs similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/New.cshtml.cs rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml.cs diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/detail.js b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/detail.js similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/detail.js rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/detail.js diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/edit.js b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/edit.js rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/new.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.css similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/new.css rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.css diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/new.css.map b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.css.map similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/new.css.map rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.css.map diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/new.js b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/new.js rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/new.min.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.min.css similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/new.min.css rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.min.css diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/new.scss b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.scss similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/new.scss rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.scss diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Scripts/blog.js b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Scripts/blog.js similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Scripts/blog.js rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Scripts/blog.js diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_bootstrap-overwrite.scss b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_bootstrap-overwrite.scss similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_bootstrap-overwrite.scss rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_bootstrap-overwrite.scss diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_custom.scss b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_custom.scss similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_custom.scss rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_custom.scss diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_header.scss b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_header.scss similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_header.scss rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_header.scss diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_home.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_home.css similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_home.css rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_home.css diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_home.min.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_home.min.css similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_home.min.css rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_home.min.css diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_home.scss b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_home.scss similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_home.scss rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_home.scss diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_post.scss b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_post.scss similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/_post.scss rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_post.scss diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/blog.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/blog.css similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/blog.css rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/blog.css diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/blog.css.map b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/blog.css.map similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/blog.css.map rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/blog.css.map diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/blog.min.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/blog.min.css similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/blog.min.css rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/blog.min.css diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/blog.scss b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/blog.scss similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Shared/Styles/blog.scss rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/blog.scss diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/_ViewImports.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/_ViewImports.cshtml similarity index 100% rename from modules/blogging/src/Volo.Blogging.Web/Pages/Blog/_ViewImports.cshtml rename to modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/_ViewImports.cshtml From 628675e9dfc5a5cc38ef37664096705aaa2f7142 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 6 Jan 2020 14:38:01 +0300 Subject: [PATCH 059/411] refactor(core): add valueFn and valueLimitFn functions to ng-model.component --- .../src/lib/abstracts/ng-model.component.ts | 49 +++++++++++++------ 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/abstracts/ng-model.component.ts b/npm/ng-packs/packages/core/src/lib/abstracts/ng-model.component.ts index 4614011b92..7176803b74 100644 --- a/npm/ng-packs/packages/core/src/lib/abstracts/ng-model.component.ts +++ b/npm/ng-packs/packages/core/src/lib/abstracts/ng-model.component.ts @@ -1,27 +1,48 @@ import { ControlValueAccessor } from '@angular/forms'; -import { ChangeDetectorRef, Component, Injector, Input, Type } from '@angular/core'; +import { ChangeDetectorRef, Component, Injector, Input } from '@angular/core'; -@Component({ selector: 'abp-abstract-ng-model', template: '' }) -export class AbstractNgModelComponent implements ControlValueAccessor { - @Input() disabled: boolean; +// Not an abstract class on purpose. Do not change! +// tslint:disable-next-line: use-component-selector +@Component({ template: '' }) +export class AbstractNgModelComponent implements ControlValueAccessor { + protected _value: T; + protected cdRef: ChangeDetectorRef; + onChange: (value: T) => {}; + onTouched: () => {}; + + @Input() + disabled: boolean; + + @Input() + readonly: boolean; + + @Input() + valueFn: (value: U, previousValue?: T) => T = value => (value as any) as T; + + @Input() + valueLimitFn: (value: T, previousValue?: T) => any = value => false; + + @Input() + set value(value: T) { + value = this.valueFn((value as any) as U, this._value); + + if (this.valueLimitFn(value, this._value) !== false || this.readonly) return; - @Input() set value(value: T) { this._value = value; this.notifyValueChange(); } get value(): T { - return this._value; + return this._value || this.defaultValue; } - onChange: (value: T) => {}; - onTouched: () => {}; - - protected _value: T; - protected cdRef: ChangeDetectorRef; + get defaultValue(): T { + return this._value; + } constructor(public injector: Injector) { - this.cdRef = injector.get(ChangeDetectorRef as Type); + // tslint:disable-next-line: deprecation + this.cdRef = injector.get(ChangeDetectorRef); } notifyValueChange(): void { @@ -31,8 +52,8 @@ export class AbstractNgModelComponent implements ControlValueAccessor { } writeValue(value: T): void { - this._value = value; - setTimeout(() => this.cdRef.detectChanges(), 0); + this._value = this.valueLimitFn(value, this._value) || value; + setTimeout(() => this.cdRef.markForCheck(), 0); } registerOnChange(fn: any): void { From ea2eeb3ebbf27dbcce6531363232e5c6a1934f7d Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 6 Jan 2020 18:46:01 +0300 Subject: [PATCH 060/411] feat(theme-shared): add loading directive and component #2537 --- .../components/loading/loading.component.ts | 39 ++++++++++ .../src/lib/directives/loading.directive.ts | 74 +++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/components/loading/loading.component.ts create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/directives/loading.directive.ts diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/loading/loading.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/loading/loading.component.ts new file mode 100644 index 0000000000..6c2201e940 --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/loading/loading.component.ts @@ -0,0 +1,39 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'abp-loading', + template: ` +
+ +
+ `, + styles: [ + ` + .abp-loading { + background: rgba(0, 0, 0, 0.3); + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 1040; + } + + .abp-loading .abp-spinner { + position: absolute; + top: 50%; + left: 50%; + -moz-transform: translateX(-50%) translateY(-50%); + -o-transform: translateX(-50%) translateY(-50%); + -ms-transform: translateX(-50%) translateY(-50%); + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); + } + `, + ], +}) +export class LoadingComponent implements OnInit { + constructor() {} + + ngOnInit() {} +} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/directives/loading.directive.ts b/npm/ng-packs/packages/theme-shared/src/lib/directives/loading.directive.ts new file mode 100644 index 0000000000..d38b3713b7 --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/directives/loading.directive.ts @@ -0,0 +1,74 @@ +import { + Directive, + ElementRef, + AfterViewInit, + ViewContainerRef, + ComponentFactoryResolver, + Input, + Injector, + ComponentRef, + ComponentFactory, + HostBinding, + EmbeddedViewRef, + Renderer2, + OnInit, +} from '@angular/core'; +import { LoadingComponent } from '../components/loading/loading.component'; + +@Directive({ selector: '[abpLoading]' }) +export class LoadingDirective implements OnInit { + private _loading: boolean; + + @HostBinding('style.position') + position = 'relative'; + + @Input('abpLoading') + get loading(): boolean { + return this._loading; + } + + set loading(newValue: boolean) { + setTimeout(() => { + if (!this.componentRef) { + this.componentRef = this.cdRes + .resolveComponentFactory(LoadingComponent) + .create(this.injector); + } + + if (newValue && !this.rootNode) { + this.rootNode = (this.componentRef.hostView as EmbeddedViewRef).rootNodes[0]; + this.targetElement.appendChild(this.rootNode); + } else { + this.renderer.removeChild(this.rootNode.parentElement, this.rootNode); + this.rootNode = null; + } + + this._loading = newValue; + }, 0); + } + + @Input('abpLoadingTargetElement') + targetElement: HTMLElement; + + componentRef: ComponentRef; + rootNode: HTMLDivElement; + + constructor( + private elRef: ElementRef, + private vcRef: ViewContainerRef, + private cdRes: ComponentFactoryResolver, + private injector: Injector, + private renderer: Renderer2, + ) {} + + ngOnInit() { + if (!this.targetElement) { + const { offsetHeight, offsetWidth } = this.elRef.nativeElement; + if (!offsetHeight && !offsetWidth && this.elRef.nativeElement.children.length) { + this.targetElement = this.elRef.nativeElement.children[0] as HTMLElement; + } else { + this.targetElement = this.elRef.nativeElement; + } + } + } +} From a9df4c7ad0183badbe557da937ddec429d93831a Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 6 Jan 2020 18:47:04 +0300 Subject: [PATCH 061/411] refactor(theme-shared): add trackByFn #2537 --- .../theme-shared/src/lib/components/index.ts | 1 + .../paginator/paginator.component.html | 2 +- .../components/paginator/paginator.component.ts | 7 ++++--- .../lib/components/table/table.component.html | 6 ++---- .../src/lib/components/table/table.component.ts | 17 ++++++++++++++++- .../theme-shared/src/lib/directives/index.ts | 1 + .../theme-shared/src/lib/theme-shared.module.ts | 8 +++++++- 7 files changed, 32 insertions(+), 10 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts index 13fe3365d3..2e010417ce 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts @@ -2,6 +2,7 @@ export * from './breadcrumb/breadcrumb.component'; export * from './button/button.component'; export * from './chart/chart.component'; export * from './confirmation/confirmation.component'; +export * from './loading/loading.component'; export * from './loader-bar/loader-bar.component'; export * from './modal/modal.component'; export * from './paginator/paginator.component'; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/paginator/paginator.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/paginator/paginator.component.html index 56e1e5545f..b42f45a148 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/paginator/paginator.component.html +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/paginator/paginator.component.html @@ -15,7 +15,7 @@ > this.totalPages) return; + if (newValue < 1 || newValue > this.totalPages || newValue === this._value) return; this._value = newValue; this.valueChange.emit(newValue); @@ -36,6 +35,8 @@ export class PaginatorComponent implements OnInit { } } + trackByFn: TrackByFunction = (_, page) => page; + ngOnInit() { if (!this.value || this.value < 1 || this.value > this.totalPages) { this.value = 1; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html index fa53170728..b3be1cafb5 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html @@ -46,9 +46,7 @@ - - - + @@ -60,7 +58,7 @@ diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts index 27436393ba..33c6126a24 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts @@ -1,4 +1,12 @@ -import { Component, OnInit, Input, TemplateRef, Output, EventEmitter } from '@angular/core'; +import { + Component, + OnInit, + Input, + TemplateRef, + Output, + EventEmitter, + TrackByFunction, +} from '@angular/core'; @Component({ selector: 'abp-table', @@ -28,6 +36,9 @@ export class TableComponent implements OnInit { @Input() rows: number; + @Input() + trackingProp = 'id'; + @Output() readonly pageChange = new EventEmitter(); @@ -35,6 +46,10 @@ export class TableComponent implements OnInit { bodyScrollLeft = 0; + trackByFn: TrackByFunction = (_, value) => { + return typeof value === 'object' ? value[this.trackingProp] || value : value; + }; + @Input() get totalRecords(): number { return this._totalRecords || this.value.length; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/directives/index.ts b/npm/ng-packs/packages/theme-shared/src/lib/directives/index.ts index 8efed514bf..aa2725e328 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/directives/index.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/directives/index.ts @@ -1 +1,2 @@ +export * from './loading.directive'; export * from './table-sort.directive'; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts index 370262be97..6132f01a25 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts @@ -24,6 +24,8 @@ import { httpErrorConfigFactory, HTTP_ERROR_CONFIG } from './tokens/http-error.t import { DateParserFormatter } from './utils/date-parser-formatter'; import { chartJsLoaded$ } from './utils/widget-utils'; import { PaginatorComponent } from './components/paginator/paginator.component'; +import { LoadingComponent } from './components/loading/loading.component'; +import { LoadingDirective } from './directives/loading.directive'; export function appendScript(injector: Injector) { const fn = () => { @@ -45,12 +47,14 @@ export function appendScript(injector: Injector) { ConfirmationComponent, HttpErrorWrapperComponent, LoaderBarComponent, + LoadingComponent, ModalComponent, PaginatorComponent, TableComponent, TableEmptyMessageComponent, ToastComponent, SortOrderIconComponent, + LoadingDirective, TableSortDirective, ], exports: [ @@ -59,16 +63,18 @@ export function appendScript(injector: Injector) { ChartComponent, ConfirmationComponent, LoaderBarComponent, + LoadingComponent, ModalComponent, PaginatorComponent, TableComponent, TableEmptyMessageComponent, ToastComponent, SortOrderIconComponent, + LoadingDirective, TableSortDirective, ], providers: [DatePipe], - entryComponents: [HttpErrorWrapperComponent], + entryComponents: [HttpErrorWrapperComponent, LoadingComponent], }) export class ThemeSharedModule { constructor(private errorHandler: ErrorHandler) {} From 93c819a3a7891889ba576f70313862b4b1487c1a Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 6 Jan 2020 18:48:12 +0300 Subject: [PATCH 062/411] chore(template): add theme-shared to tsconfig.app.json --- npm/ng-packs/apps/dev-app/tsconfig.app.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/apps/dev-app/tsconfig.app.json b/npm/ng-packs/apps/dev-app/tsconfig.app.json index cc22d70d1c..464faaec10 100644 --- a/npm/ng-packs/apps/dev-app/tsconfig.app.json +++ b/npm/ng-packs/apps/dev-app/tsconfig.app.json @@ -6,8 +6,8 @@ "paths": { "@abp/ng.core": ["packages/core/src/public-api.ts"], "@abp/ng.core/*": ["packages/core/src/lib/*"], - // "@abp/ng.theme.shared": ["packages/theme-shared/src/public-api.ts"], - // "@abp/ng.theme.shared/*": ["packages/theme-shared/src/lib/*"], + "@abp/ng.theme.shared": ["packages/theme-shared/src/public-api.ts"], + "@abp/ng.theme.shared/*": ["packages/theme-shared/src/lib/*"], "@abp/ng.theme.basic": ["packages/theme-basic/src/public-api.ts"], "@abp/ng.theme.basic/*": ["packages/theme-basic/src/lib/*"], "@abp/ng.account": ["packages/account/src/public-api.ts"], From d7761c6dfe0a9772075151a6654ef78dc55b690d Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 7 Jan 2020 16:10:19 +0800 Subject: [PATCH 063/411] Add AbpAccountApplicationModule to the IdentityServer project of the module template. --- .../MyCompanyName.MyProjectName.IdentityServer.csproj | 1 + .../MyProjectNameIdentityServerModule.cs | 2 ++ 2 files changed, 3 insertions(+) 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 c2a1d1dde6..b25ce4b603 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 @@ -22,6 +22,7 @@ + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 76d930d7ea..5f0f80c05e 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -11,6 +11,7 @@ using StackExchange.Redis; using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.Swagger; using Volo.Abp; +using Volo.Abp.Account; using Volo.Abp.Account.Web; using Volo.Abp.AspNetCore.Authentication.JwtBearer; using Volo.Abp.AspNetCore.Mvc; @@ -44,6 +45,7 @@ namespace MyCompanyName.MyProjectName { [DependsOn( typeof(AbpAccountWebIdentityServerModule), + typeof(AbpAccountApplicationModule), typeof(AbpAspNetCoreMvcUiMultiTenancyModule), typeof(AbpAspNetCoreMvcModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule), From 8f0ce16a2404f0f02d9509ce2667520fe8ebc8dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 7 Jan 2020 11:26:12 +0300 Subject: [PATCH 064/411] Move setting the IApplicationBuilder line to top. --- .../AspNetCore/Builder/AbpApplicationBuilderExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs index 033fef813f..295a8bd100 100644 --- a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs @@ -20,6 +20,7 @@ namespace Microsoft.AspNetCore.Builder { Check.NotNull(app, nameof(app)); + app.ApplicationServices.GetRequiredService>().Value = app; var application = app.ApplicationServices.GetRequiredService(); var applicationLifetime = app.ApplicationServices.GetRequiredService(); @@ -33,7 +34,6 @@ namespace Microsoft.AspNetCore.Builder application.Dispose(); }); - app.ApplicationServices.GetRequiredService>().Value = app; application.Initialize(app.ApplicationServices); } From 0fb7ba4614ebb64a00f19a9bef277a0fb9bee764 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 7 Jan 2020 11:44:13 +0300 Subject: [PATCH 065/411] feat(account): add the enableLocalLogin condition to auth-wrapper --- .../Settings/AccountSettingDefinitionProvider.cs | 4 ++-- .../auth-wrapper/auth-wrapper.component.html | 12 +++++++++++- .../auth-wrapper/auth-wrapper.component.ts | 6 ++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/Settings/AccountSettingDefinitionProvider.cs b/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/Settings/AccountSettingDefinitionProvider.cs index 034b2b1a01..907100c61a 100644 --- a/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/Settings/AccountSettingDefinitionProvider.cs +++ b/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/Settings/AccountSettingDefinitionProvider.cs @@ -13,7 +13,7 @@ namespace Volo.Abp.Account.Settings AccountSettingNames.IsSelfRegistrationEnabled, "true", L("DisplayName:Abp.Account.IsSelfRegistrationEnabled"), - L("Description:Abp.Account.IsSelfRegistrationEnabled")) + L("Description:Abp.Account.IsSelfRegistrationEnabled"), isVisibleToClients : true) ); context.Add( @@ -21,7 +21,7 @@ namespace Volo.Abp.Account.Settings AccountSettingNames.EnableLocalLogin, "true", L("DisplayName:Abp.Account.EnableLocalLogin"), - L("Description:Abp.Account.EnableLocalLogin")) + L("Description:Abp.Account.EnableLocalLogin"), isVisibleToClients : true) ); } diff --git a/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.html b/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.html index f25b6eae0c..531c598a5e 100644 --- a/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.html +++ b/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.html @@ -5,7 +5,10 @@ > + + +
+ {{ 'AbpAccount::InvalidLoginRequest' | abpLocalization }} + {{ 'AbpAccount::ThereAreNoLoginSchemesConfiguredForThisClient' | abpLocalization }} +
+
diff --git a/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.ts b/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.ts index d38754ff50..aadbbfa656 100644 --- a/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.ts @@ -1,5 +1,8 @@ import { Component, Input, TemplateRef } from '@angular/core'; import { Account } from '../../models/account'; +import { Select } from '@ngxs/store'; +import { ConfigState } from '@abp/ng.core'; +import { Observable } from 'rxjs'; @Component({ selector: 'abp-auth-wrapper', @@ -8,6 +11,9 @@ import { Account } from '../../models/account'; }) export class AuthWrapperComponent implements Account.AuthWrapperComponentInputs, Account.AuthWrapperComponentOutputs { + @Select(ConfigState.getSetting('Abp.Account.EnableLocalLogin')) + enableLocalLogin$: Observable<'True' | 'False'>; + @Input() readonly mainContentRef: TemplateRef; From 9d448efd678348617513e5df7a329588745fd935 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 7 Jan 2020 13:31:34 +0300 Subject: [PATCH 066/411] feat(theme-shared): add empty template to table component #2537 --- .../lib/components/table/table.component.html | 16 ++++++++++++-- .../lib/components/table/table.component.ts | 22 ++++++++++++++----- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html index b3be1cafb5..aa6a5519be 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html @@ -1,4 +1,4 @@ -
+
+ + > + + + + + {{ emptyMessage | abpLocalization }} + + + diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts index 33c6126a24..f3524d52aa 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts @@ -1,18 +1,20 @@ import { + AfterViewInit, Component, - OnInit, + ElementRef, + EventEmitter, Input, - TemplateRef, Output, - EventEmitter, + TemplateRef, TrackByFunction, + ViewChild, } from '@angular/core'; @Component({ selector: 'abp-table', templateUrl: 'table.component.html', }) -export class TableComponent implements OnInit { +export class TableComponent implements AfterViewInit { private _totalRecords: number; @Input() @@ -39,13 +41,21 @@ export class TableComponent implements OnInit { @Input() trackingProp = 'id'; + @Input() + emptyMessage = 'AbpAccount::NoDataAvailableInDatatable'; + @Output() readonly pageChange = new EventEmitter(); + @ViewChild('wrapper', { read: ElementRef, static: false }) + wrapperRef: ElementRef; + page = 1; bodyScrollLeft = 0; + colspan = 1; + trackByFn: TrackByFunction = (_, value) => { return typeof value === 'object' ? value[this.trackingProp] || value : value; }; @@ -79,5 +89,7 @@ export class TableComponent implements OnInit { constructor() {} - ngOnInit() {} + ngAfterViewInit() { + this.colspan = this.wrapperRef.nativeElement.querySelectorAll('th').length; + } } From b07a181db731e4ed80564d626b3d81423a5175e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 7 Jan 2020 15:31:40 +0300 Subject: [PATCH 067/411] Fixed #2568: User menu in Module.Web.Host not working. --- .../Menus/MyProjectNameMenuContributor.cs | 9 ++- .../Controllers/AccountController.cs | 9 +++ .../MyProjectNameWebHostMenuContributor.cs | 60 +++++++++++++++++++ .../MyProjectNameWebHostModule.cs | 12 +++- .../Localization/MyProjectName/en.json | 2 +- .../Localization/MyProjectName/tr.json | 6 ++ 6 files changed, 94 insertions(+), 4 deletions(-) create mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/Controllers/AccountController.cs create mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostMenuContributor.cs create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/tr.json diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Menus/MyProjectNameMenuContributor.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Menus/MyProjectNameMenuContributor.cs index f7ef2c2093..2a12f2ee32 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Menus/MyProjectNameMenuContributor.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Menus/MyProjectNameMenuContributor.cs @@ -8,6 +8,7 @@ using MyCompanyName.MyProjectName.MultiTenancy; using Volo.Abp.Account.Localization; using Volo.Abp.TenantManagement.Web.Navigation; using Volo.Abp.UI.Navigation; +using Volo.Abp.Users; namespace MyCompanyName.MyProjectName.Web.Menus { @@ -51,11 +52,15 @@ namespace MyCompanyName.MyProjectName.Web.Menus { var l = context.ServiceProvider.GetRequiredService>(); var accountStringLocalizer = context.ServiceProvider.GetRequiredService>(); + var currentUser = context.ServiceProvider.GetRequiredService(); var identityServerUrl = _configuration["AuthServer:Authority"] ?? ""; - context.Menu.AddItem(new ApplicationMenuItem("Account.Manage", accountStringLocalizer["ManageYourProfile"], $"{identityServerUrl.EnsureEndsWith('/')}Account/Manage", icon: "fa fa-cog", order: 1000, null, "_blank")); - context.Menu.AddItem(new ApplicationMenuItem("Account.Logout", l["Logout"], url: "/Account/Logout", icon: "fa fa-power-off", order: int.MaxValue - 1000)); + if (currentUser.IsAuthenticated) + { + context.Menu.AddItem(new ApplicationMenuItem("Account.Manage", accountStringLocalizer["ManageYourProfile"], $"{identityServerUrl.EnsureEndsWith('/')}Account/Manage", icon: "fa fa-cog", order: 1000, null, "_blank")); + context.Menu.AddItem(new ApplicationMenuItem("Account.Logout", l["Logout"], url: "/Account/Logout", icon: "fa fa-power-off", order: int.MaxValue - 1000)); + } return Task.CompletedTask; } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/Controllers/AccountController.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/Controllers/AccountController.cs new file mode 100644 index 0000000000..318e7191a2 --- /dev/null +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/Controllers/AccountController.cs @@ -0,0 +1,9 @@ +using Volo.Abp.AspNetCore.Mvc.Authentication; + +namespace MyCompanyName.MyProjectName.Controllers +{ + public class AccountController : ChallengeAccountController + { + + } +} diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostMenuContributor.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostMenuContributor.cs new file mode 100644 index 0000000000..430a1c237c --- /dev/null +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostMenuContributor.cs @@ -0,0 +1,60 @@ +using System; +using System.Threading.Tasks; +using Localization.Resources.AbpUi; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Localization; +using MyCompanyName.MyProjectName.Localization; +using Volo.Abp.UI.Navigation; +using Volo.Abp.Users; + +namespace MyCompanyName.MyProjectName +{ + public class MyProjectNameWebHostMenuContributor : IMenuContributor + { + private readonly IConfiguration _configuration; + + public MyProjectNameWebHostMenuContributor(IConfiguration configuration) + { + _configuration = configuration; + } + + public Task ConfigureMenuAsync(MenuConfigurationContext context) + { + if (context.Menu.Name == StandardMenus.User) + { + AddLogoutItemToMenu(context); + } + + return Task.CompletedTask; + } + + private void AddLogoutItemToMenu(MenuConfigurationContext context) + { + var currentUser = context.ServiceProvider.GetRequiredService(); + var l = context.ServiceProvider.GetRequiredService>(); + + if (currentUser.IsAuthenticated) + { + context.Menu.Items.Add(new ApplicationMenuItem( + "Account.Manage", + l["ManageYourProfile"], + $"{_configuration["AuthServer:Authority"].EnsureEndsWith('/')}Account/Manage", + icon: "fa fa-cog", + order: int.MaxValue - 1001, + null, + "_blank") + ); + + + context.Menu.Items.Add(new ApplicationMenuItem( + "Account.Logout", + l["Logout"], + "/Account/Logout", + "fas fa-power-off", + order: int.MaxValue - 1000 + )); + } + } + } +} \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs index 6eb3dc9ea3..473bdab2cf 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs @@ -37,6 +37,7 @@ using Volo.Abp.TenantManagement; using Volo.Abp.TenantManagement.Web; using Volo.Abp.UI.Navigation.Urls; using Volo.Abp.UI; +using Volo.Abp.UI.Navigation; using Volo.Abp.VirtualFileSystem; namespace MyCompanyName.MyProjectName @@ -76,6 +77,7 @@ namespace MyCompanyName.MyProjectName var hostingEnvironment = context.Services.GetHostingEnvironment(); var configuration = context.Services.GetConfiguration(); + ConfigureMenu(configuration); ConfigureCache(configuration); ConfigureUrls(configuration); ConfigureAuthentication(context, configuration); @@ -85,7 +87,15 @@ namespace MyCompanyName.MyProjectName ConfigureMultiTenancy(); ConfigureRedis(context, configuration, hostingEnvironment); } - + + private void ConfigureMenu(IConfiguration configuration) + { + Configure(options => + { + options.MenuContributors.Add(new MyProjectNameWebHostMenuContributor(configuration)); + }); + } + private void ConfigureCache(IConfiguration configuration) { Configure(options => diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en.json b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en.json index 92e4e9582b..171d9a1220 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en.json +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en.json @@ -1,6 +1,6 @@ { "culture": "en", "texts": { - + "ManageYourProfile": "Manage your profile" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/tr.json b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/tr.json new file mode 100644 index 0000000000..2b48193353 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/tr.json @@ -0,0 +1,6 @@ +{ + "culture": "tr", + "texts": { + "ManageYourProfile": "Profil ynetimi" + } +} \ No newline at end of file From e92e1641bbceb7405a82e0cff97537e4e6d30f03 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 7 Jan 2020 15:59:36 +0300 Subject: [PATCH 068/411] feat(theme-shared): remove prime table instance from table sort directive and add abp table instance #2537 --- .../lib/directives/table-sort.directive.ts | 39 ++++++++++++++++--- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/directives/table-sort.directive.ts b/npm/ng-packs/packages/theme-shared/src/lib/directives/table-sort.directive.ts index 5f42cc0144..6563f55d26 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/directives/table-sort.directive.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/directives/table-sort.directive.ts @@ -1,7 +1,17 @@ -import { Directive, Input, Optional, Self, SimpleChanges, OnChanges } from '@angular/core'; -import { Table } from 'primeng/table'; +import { SortOrder, SortPipe } from '@abp/ng.core'; +import { + ChangeDetectorRef, + Directive, + Host, + Input, + OnChanges, + Optional, + Self, + SimpleChanges, +} from '@angular/core'; import clone from 'just-clone'; -import { SortPipe, SortOrder } from '@abp/ng.core'; +import snq from 'snq'; +import { TableComponent } from '../components/table/table.component'; export interface TableSortOptions { key: string; @@ -15,13 +25,30 @@ export interface TableSortOptions { export class TableSortDirective implements OnChanges { @Input() abpTableSort: TableSortOptions; + @Input() value: any[] = []; - constructor(@Optional() @Self() private table: Table, private sortPipe: SortPipe) {} + + get table(): TableComponent | any { + return ( + this.abpTable || snq(() => this.cdRef['_view'].component) || snq(() => this.cdRef['context']) // 'context' for ivy + ); + } + + constructor( + @Host() @Optional() @Self() private abpTable: TableComponent, + private sortPipe: SortPipe, + private cdRef: ChangeDetectorRef, + ) {} + ngOnChanges({ value, abpTableSort }: SimpleChanges) { - if (value || abpTableSort) { + if (this.table && (value || abpTableSort)) { this.abpTableSort = this.abpTableSort || ({} as TableSortOptions); - this.table.value = this.sortPipe.transform(clone(this.value), this.abpTableSort.order, this.abpTableSort.key); + this.table.value = this.sortPipe.transform( + clone(this.value), + this.abpTableSort.order, + this.abpTableSort.key, + ); } } } From 1486b787ed4ec199740c431b9d9ce3940ca489cf Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 7 Jan 2020 16:06:49 +0300 Subject: [PATCH 069/411] feat(identity): implement abp table to roles --- .../lib/components/roles/roles.component.html | 33 +++++++------------ .../lib/components/roles/roles.component.ts | 7 ++-- 2 files changed, 15 insertions(+), 25 deletions(-) diff --git a/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html b/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html index 6c4f946c5a..29ad72a317 100644 --- a/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html +++ b/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html @@ -20,37 +20,28 @@
- - + - - - - + {{ 'AbpIdentity::Actions' | abpLocalization }} - + {{ 'AbpIdentity::RoleName' | abpLocalization }} - +
@@ -109,7 +100,7 @@ - +
diff --git a/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts b/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts index 0bd4826699..3ac929bc5d 100644 --- a/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts +++ b/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts @@ -36,7 +36,7 @@ export class RolesComponent implements OnInit { providerKey: string; - pageQuery: ABP.PageQueryParams = {}; + pageQuery: ABP.PageQueryParams = { maxResultCount: 10 }; loading = false; @@ -123,9 +123,8 @@ export class RolesComponent implements OnInit { }); } - onPageChange(data) { - this.pageQuery.skipCount = data.first; - this.pageQuery.maxResultCount = data.rows; + onPageChange(page: number) { + this.pageQuery.skipCount = (page - 1) * this.pageQuery.maxResultCount; this.get(); } From 4ed7d5717f8ad047f73871efac53c6662d55c2b7 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 7 Jan 2020 16:15:10 +0300 Subject: [PATCH 070/411] account mvc IsSelfRegistrationEnabled --- .../src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml | 5 +++-- .../Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml index 94ef0e45a2..fca4622a29 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml @@ -1,5 +1,6 @@ @page @using Volo.Abp.Account.Settings +@using Volo.Abp.Settings @model Volo.Abp.Account.Web.Pages.Account.LoginModel @inherits Volo.Abp.Account.Web.Pages.Account.AccountPage @inject Volo.Abp.Settings.ISettingProvider SettingProvider @@ -7,8 +8,8 @@ {
-

@L["Login"]

- @if (string.Equals(await SettingProvider.GetOrNullAsync(AccountSettingNames.IsSelfRegistrationEnabled), "true", StringComparison.OrdinalIgnoreCase)) +

@L["Login"]

+ @if (await SettingProvider.IsTrueAsync(AccountSettingNames.IsSelfRegistrationEnabled)) { @L["AreYouANewUser"] diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs index 4d95613fe1..5abb564b09 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs @@ -45,7 +45,8 @@ namespace Volo.Abp.Account.Web.Pages.Account protected virtual async Task CheckSelfRegistrationAsync() { - if (!await SettingProvider.IsTrueAsync(AccountSettingNames.IsSelfRegistrationEnabled).ConfigureAwait(false)) + if (!await SettingProvider.IsTrueAsync(AccountSettingNames.IsSelfRegistrationEnabled).ConfigureAwait(false) || + !await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin).ConfigureAwait(false)) { throw new UserFriendlyException(L["SelfRegistrationDisabledMessage"]); } From 36d89f15c6dae7f4f111516863b6f71e3fda90ef Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 7 Jan 2020 16:15:49 +0300 Subject: [PATCH 071/411] feat(identity): implement abp table to users --- .../lib/components/roles/roles.component.html | 2 +- .../lib/components/users/users.component.html | 39 +++++++------------ .../lib/components/users/users.component.ts | 9 ++--- 3 files changed, 20 insertions(+), 30 deletions(-) diff --git a/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html b/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html index 29ad72a317..57858686fa 100644 --- a/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html +++ b/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html @@ -28,7 +28,7 @@ [headerTemplate]="tableHeader" [bodyTemplate]="tableBody" [value]="data$ | async" - [rows]="10" + [rows]="pageQuery.maxResultCount" [totalRecords]="totalCount$ | async" [scrollable]="true" (pageChange)="onPageChange($event)" diff --git a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html index e89d72ae72..82995a423f 100644 --- a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html +++ b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html @@ -28,37 +28,28 @@ (input.debounce)="onSearch($event.target.value)" />
- - + - - - - + {{ 'AbpIdentity::Actions' | abpLocalization }} - + {{ 'AbpIdentity::UserName' | abpLocalization }} - + {{ 'AbpIdentity::EmailAddress' | abpLocalization }} - + {{ 'AbpIdentity::PhoneNumber' | abpLocalization }} - +
@@ -129,7 +120,7 @@ {{ data.phoneNumber }} - +
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 1917113dc7..d33430d98c 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 @@ -51,7 +51,7 @@ export class UsersComponent implements OnInit { providerKey: string; - pageQuery: ABP.PageQueryParams = {}; + pageQuery: ABP.PageQueryParams = { maxResultCount: 10 }; isModalVisible: boolean; @@ -111,7 +111,7 @@ export class UsersComponent implements OnInit { } } - onSearch(value) { + onSearch(value: string) { this.pageQuery.filter = value; this.get(); } @@ -226,9 +226,8 @@ export class UsersComponent implements OnInit { }); } - onPageChange(data) { - this.pageQuery.skipCount = data.first; - this.pageQuery.maxResultCount = data.rows; + onPageChange(page: number) { + this.pageQuery.skipCount = (page - 1) * this.pageQuery.maxResultCount; this.get(); } From 25e944e1712046abc931a4068a053109ef41b03f Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 7 Jan 2020 16:17:09 +0300 Subject: [PATCH 072/411] feat(tenant-management): implement abp table to tenants --- .../components/tenants/tenants.component.html | 34 +++++++------------ .../components/tenants/tenants.component.ts | 9 +++-- .../components/loading/loading.component.ts | 2 +- 3 files changed, 18 insertions(+), 27 deletions(-) diff --git a/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html b/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html index 6106ed7e1b..d142489474 100644 --- a/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html +++ b/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html @@ -28,37 +28,29 @@ (input.debounce)="onSearch($event.target.value)" />
- - + - - - - + {{ 'AbpTenantManagement::Actions' | abpLocalization }} - + {{ 'AbpTenantManagement::TenantName' | abpLocalization }} - +
@@ -117,7 +109,7 @@ {{ data.name }} - +
diff --git a/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts b/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts index 0d77596270..fcc2afd3da 100644 --- a/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts +++ b/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts @@ -50,7 +50,7 @@ export class TenantsComponent implements OnInit { _useSharedDatabase: boolean; - pageQuery: ABP.PageQueryParams = {}; + pageQuery: ABP.PageQueryParams = { maxResultCount: 10 }; loading = false; @@ -109,7 +109,7 @@ export class TenantsComponent implements OnInit { this.get(); } - onSearch(value) { + onSearch(value: string) { this.pageQuery.filter = value; this.get(); } @@ -246,9 +246,8 @@ export class TenantsComponent implements OnInit { }); } - onPageChange(data) { - this.pageQuery.skipCount = data.first; - this.pageQuery.maxResultCount = data.rows; + onPageChange(page: number) { + this.pageQuery.skipCount = (page - 1) * this.pageQuery.maxResultCount; this.get(); } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/loading/loading.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/loading/loading.component.ts index 6c2201e940..0271ced29b 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/loading/loading.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/loading/loading.component.ts @@ -10,7 +10,7 @@ import { Component, OnInit } from '@angular/core'; styles: [ ` .abp-loading { - background: rgba(0, 0, 0, 0.3); + background: rgba(0, 0, 0, 0.2); position: absolute; width: 100%; height: 100%; From 6db7d50a0ff4c5cf7175a6a078b8dbbdef13417e Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 7 Jan 2020 16:50:24 +0300 Subject: [PATCH 073/411] feat(theme-shared): add hover to table rows #2537 --- .../src/lib/components/table/table.component.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts index f3524d52aa..12084c9ae1 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts @@ -8,11 +8,21 @@ import { TemplateRef, TrackByFunction, ViewChild, + ViewEncapsulation, } from '@angular/core'; @Component({ selector: 'abp-table', templateUrl: 'table.component.html', + styles: [ + ` + .ui-table .ui-table-tbody > tr:nth-child(even):hover, + .ui-table .ui-table-tbody > tr:hover { + background-color: #eaeaea; + } + `, + ], + encapsulation: ViewEncapsulation.None, }) export class TableComponent implements AfterViewInit { private _totalRecords: number; From 4bd5fa750c9590fce2895bcf5be8123b19b66d19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 7 Jan 2020 17:29:59 +0300 Subject: [PATCH 074/411] Update DeveloperApiKeyResult.cs --- .../Volo/Abp/Cli/Licensing/DeveloperApiKeyResult.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 0b1fe54c2f..481aa6f404 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 @@ -7,7 +7,7 @@ namespace Volo.Abp.Cli.Licensing public bool HasActiveLicense { get; set; } public string OrganizationName { get; set; } public string ApiKey { get; set; } - public DateTime LicenseEndTime { get; set; } + public DateTime? LicenseEndTime { get; set; } public string LicenseCode { get; set; } } } \ No newline at end of file From 55f5d8f52ea5d0e6bc2e6c187af572da3f451421 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 7 Jan 2020 17:59:50 +0300 Subject: [PATCH 075/411] chore(theme-shared): rename paginator to pagination #2537 --- .../theme-shared/src/lib/components/index.ts | 2 +- .../pagination.component.html} | 0 .../pagination.component.ts} | 8 +++---- .../lib/components/table/table.component.html | 21 +++++++++---------- .../lib/components/table/table.component.ts | 2 +- .../src/lib/theme-shared.module.ts | 6 +++--- 6 files changed, 18 insertions(+), 21 deletions(-) rename npm/ng-packs/packages/theme-shared/src/lib/components/{paginator/paginator.component.html => pagination/pagination.component.html} (100%) rename npm/ng-packs/packages/theme-shared/src/lib/components/{paginator/paginator.component.ts => pagination/pagination.component.ts} (85%) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts index 2e010417ce..55b7b187d1 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/index.ts @@ -5,7 +5,7 @@ export * from './confirmation/confirmation.component'; export * from './loading/loading.component'; export * from './loader-bar/loader-bar.component'; export * from './modal/modal.component'; -export * from './paginator/paginator.component'; +export * from './pagination/pagination.component'; export * from './sort-order-icon/sort-order-icon.component'; export * from './table-empty-message/table-empty-message.component'; export * from './table/table.component'; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/paginator/paginator.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/pagination/pagination.component.html similarity index 100% rename from npm/ng-packs/packages/theme-shared/src/lib/components/paginator/paginator.component.html rename to npm/ng-packs/packages/theme-shared/src/lib/components/pagination/pagination.component.html diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/paginator/paginator.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/pagination/pagination.component.ts similarity index 85% rename from npm/ng-packs/packages/theme-shared/src/lib/components/paginator/paginator.component.ts rename to npm/ng-packs/packages/theme-shared/src/lib/components/pagination/pagination.component.ts index 2f3d763a28..69fcdf31ff 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/paginator/paginator.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/pagination/pagination.component.ts @@ -1,18 +1,16 @@ import { Component, Input, OnInit, Output, EventEmitter, TrackByFunction } from '@angular/core'; @Component({ - selector: 'abp-paginator', - templateUrl: 'paginator.component.html', + selector: 'abp-pagination', + templateUrl: 'pagination.component.html', }) -export class PaginatorComponent implements OnInit { +export class PaginationComponent implements OnInit { private _value = 1; @Input() get value(): number { return this._value; } set value(newValue: number) { - if (newValue < 1 || newValue > this.totalPages || newValue === this._value) return; - this._value = newValue; this.valueChange.emit(newValue); } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html index aa6a5519be..05396cf320 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html @@ -3,11 +3,11 @@ - + > @@ -57,15 +57,14 @@ - - + + + diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts index 12084c9ae1..48cddbd1f4 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts @@ -64,7 +64,7 @@ export class TableComponent implements AfterViewInit { bodyScrollLeft = 0; - colspan = 1; + colspan = 0; trackByFn: TrackByFunction = (_, value) => { return typeof value === 'object' ? value[this.trackingProp] || value : value; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts index 6132f01a25..c67f553d37 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts @@ -23,7 +23,7 @@ import { RootParams } from './models/common'; import { httpErrorConfigFactory, HTTP_ERROR_CONFIG } from './tokens/http-error.token'; import { DateParserFormatter } from './utils/date-parser-formatter'; import { chartJsLoaded$ } from './utils/widget-utils'; -import { PaginatorComponent } from './components/paginator/paginator.component'; +import { PaginationComponent } from './components/pagination/pagination.component'; import { LoadingComponent } from './components/loading/loading.component'; import { LoadingDirective } from './directives/loading.directive'; @@ -49,7 +49,7 @@ export function appendScript(injector: Injector) { LoaderBarComponent, LoadingComponent, ModalComponent, - PaginatorComponent, + PaginationComponent, TableComponent, TableEmptyMessageComponent, ToastComponent, @@ -65,7 +65,7 @@ export function appendScript(injector: Injector) { LoaderBarComponent, LoadingComponent, ModalComponent, - PaginatorComponent, + PaginationComponent, TableComponent, TableEmptyMessageComponent, ToastComponent, From 900d0b293e3912ddb621fa1d6eb1d16575f27bcb Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 7 Jan 2020 18:00:30 +0300 Subject: [PATCH 076/411] tests(theme-shared): add pagination.component.spec #2537 --- .../lib/tests/pagination.component.spec.ts | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/tests/pagination.component.spec.ts diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/pagination.component.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/pagination.component.spec.ts new file mode 100644 index 0000000000..1428c7eb9d --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/pagination.component.spec.ts @@ -0,0 +1,63 @@ +import { createHostFactory, SpectatorHost } from '@ngneat/spectator/jest'; +import { PaginationComponent } from '../components'; + +describe('PaginationComponent', () => { + let spectator: SpectatorHost; + const createHost = createHostFactory({ + component: PaginationComponent, + }); + + beforeEach(() => { + spectator = createHost( + '', + { + hostProps: { + value: 5, + totalPages: 12, + }, + }, + ); + }); + + it('should add ui-state-active class to current page', () => { + expect(spectator.query('.ui-state-active').textContent).toBe('5'); + }); + + it('should display the correct pages', () => { + expect(spectator.queryAll('.ui-paginator-page').map(node => node.textContent)).toEqual([ + '3', + '4', + '5', + '6', + '7', + ]); + + spectator.setHostInput({ value: 2 }); + + expect(spectator.queryAll('.ui-paginator-page').map(node => node.textContent)).toEqual([ + '1', + '2', + '3', + '4', + '5', + ]); + + spectator.setHostInput({ value: 12 }); + + expect(spectator.queryAll('.ui-paginator-page').map(node => node.textContent)).toEqual([ + '8', + '9', + '10', + '11', + '12', + ]); + + spectator.setHostInput({ value: 1, totalPages: 3 }); + + expect(spectator.queryAll('.ui-paginator-page').map(node => node.textContent)).toEqual([ + '1', + '2', + '3', + ]); + }); +}); From 57a9421495aa892c7b31d9d28eb346334c73c916 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 7 Jan 2020 18:46:05 +0300 Subject: [PATCH 077/411] New document: Switch to another DBMS for Entity Framework Core --- docs/en/Entity-Framework-Core-Other-DBMS.md | 90 +++++++++++++++++++++ docs/en/Entity-Framework-Core.md | 2 + docs/en/docs-nav.json | 4 + 3 files changed, 96 insertions(+) create mode 100644 docs/en/Entity-Framework-Core-Other-DBMS.md diff --git a/docs/en/Entity-Framework-Core-Other-DBMS.md b/docs/en/Entity-Framework-Core-Other-DBMS.md new file mode 100644 index 0000000000..854309d070 --- /dev/null +++ b/docs/en/Entity-Framework-Core-Other-DBMS.md @@ -0,0 +1,90 @@ +# Switch to another DBMS for Entity Framework Core + +**[The application startup template](Startup-Templates/Application.md)** comes with SQL Server provider pre-configured for the Entity Framework Core. Entity Framework Core supports [many other DBMSs](https://docs.microsoft.com/en-us/ef/core/providers/) and you can use any of them with your ABP based applications. + +ABP framework provides integration packages for some common DBMSs to make the configuration a bit easier (see the [entity framework core document](Entity-Framework-Core.md) for a list of available integration packages). However, you can configure your DBMS provider without these integration packages. + +While using the integration package is always recommended (it also makes standard for the depended version across different modules), you can do it manually if there is no integration package for your DBMS provider. + +This document explains how to switch to MySQL without using [the MySQL integration package](Entity-Framework-Core-MySQL.md). + +## Replace the SQL Server Dependency + +* Remove the [Volo.Abp.EntityFrameworkCore.SqlServer](https://www.nuget.org/packages/Volo.Abp.EntityFrameworkCore.SqlServer) NuGet package dependency from the `.EntityFrameworkCore` project. +* Add the [Pomelo.EntityFrameworkCore.MySql](https://www.nuget.org/packages/Pomelo.EntityFrameworkCore.MySql/) NuGet package dependency to your `.EntityFrameworkCore` project. + +## Remove the Module Dependency + +Remove the `AbpEntityFrameworkCoreSqlServerModule` from the dependency list of your ***YourProjectName*EntityFrameworkCoreModule** class. + +## Change the UseSqlServer() Calls + +Find the following code part inside the *YourProjectName*EntityFrameworkCoreModule class: + +````csharp +Configure(options => +{ + options.UseSqlServer(); +}); +```` + +Replace it with the following code part: + +````csharp +Configure(options => +{ + options.Configure(ctx => + { + if (ctx.ExistingConnection != null) + { + ctx.DbContextOptions.UseMySql(ctx.ExistingConnection); + } + else + { + ctx.DbContextOptions.UseMySql(ctx.ConnectionString); + } + }); +}); +```` + +* `UseMySql` calls in this code is defined by the Pomelo.EntityFrameworkCore.MySql package and you can use its additional options if you need. +* This code first checks if there is an existing (active) connection to the same database in the current request and reuses it if possible. This allows to share a single transaction among different DbContext types. ABP handles the rest of the things. +* It uses `ctx.ConnectionString` and passes to the `UseMySql` if there is no active connection (which will cause to create a new database connection). Using the `ctx.ConnectionString` is important here. Don't pass a static connection string (or a connection string from a configuration). Because ABP [dynamically determines the correct connection string](Connection-Strings.md) in a multi-database or [multi-tenant](Multi-Tenancy.md) environment. + +## Change the Connection Strings + +MySQL connection strings are different than SQL Server connection strings. So, check all `appsettings.json` files in your solution and replace the connection strings inside them. See the [connectionstrings.com]( https://www.connectionstrings.com/mysql/ ) for details of MySQL connection string options. + +You typically will change the `appsettings.json` inside the `.DbMigrator` and `.Web` projects, but it depends on your solution structure. + +## Change the Migrations DbContext + +MySQL DBMS has some slight differences than the SQL Server. Some module database mapping configuration (especially the field lengths) causes problems with MySQL. For example, some of the the [IdentityServer module](Modules/IdentityServer.md) tables has such problems and it provides an option to configure the fields based on your DBMS. + +The startup template contains a *YourProjectName*MigrationsDbContext which is responsible to maintain and migrate the database schema. This DbContext basically calls extension methods of the depended modules to configure their database tables. + +Open the *YourProjectName*MigrationsDbContext and change the `builder.ConfigureIdentityServer();` line as shown below: + +````csharp +builder.ConfigureIdentityServer(options => +{ + options.DatabaseProvider = EfCoreDatabaseProvider.MySql; +}); +```` + +Then `ConfigureIdentityServer()` method will set the field lengths to not exceed the MySQL limits. Refer to related module documentation if you have any problem while creating or executing the database migrations. + +## Re-Generate the Migrations + +The startup template uses [Entity Framework Core's Code First Migrations](https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/). EF Core Migrations depend on the selected DBMS provider. So, changing the DBMS provider will cause the migration fails. + +* Delete the Migrations folder under the `.EntityFrameworkCore.DbMigrations` project and re-build the solution. +* Run `Add-Migration "Initial"` on the Package Manager Console (select the `.DbMigrator` (or `.Web`) project as the startup project in the Solution Explorer and select the `.EntityFrameworkCore.DbMigrations` project as the default project in the Package Manager Console). + +This will create a database migration with all database objects (tables) configured. + +Run the `.DbMigrator` project to create the database and seed the initial data. + +## Run the Application + +It is ready. Just run the application and enjoy coding. \ No newline at end of file diff --git a/docs/en/Entity-Framework-Core.md b/docs/en/Entity-Framework-Core.md index b73e16a3e5..9d29f58fd2 100644 --- a/docs/en/Entity-Framework-Core.md +++ b/docs/en/Entity-Framework-Core.md @@ -38,6 +38,8 @@ ABP framework provides integration packages for some common DBMSs to make the co * [MySQL](Entity-Framework-Core-MySQL.md) * [PostgreSQL](Entity-Framework-Core-PostgreSQL.md) +* [SQLite](Entity-Framework-Core-SQLite.md) +* [Others](Entity-Framework-Core-Other-DBMS.md) ## Creating DbContext diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 9943c3b6af..e167d50c47 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -281,6 +281,10 @@ { "text": "Switch to SQLite", "path": "Entity-Framework-Core-SQLite.md" + }, + { + "text": "Switch to another DBMS", + "path": "Entity-Framework-Core-Other-DBMS.md" } ] }, From 1a449829db535f162b48e2fbb5a6ea741c123297 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 7 Jan 2020 19:02:58 +0300 Subject: [PATCH 078/411] Added new sections to the Connection-Strings and Dependency-Injection documents. --- docs/en/Connection-Strings.md | 11 ++++++++++- docs/en/Dependency-Injection.md | 20 ++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/docs/en/Connection-Strings.md b/docs/en/Connection-Strings.md index a080e10dea..57a156ff7b 100644 --- a/docs/en/Connection-Strings.md +++ b/docs/en/Connection-Strings.md @@ -61,4 +61,13 @@ Once you want to separate a module's database, you typically will need to create ## Multi-Tenancy -See [the multi-tenancy document](Multi-Tenancy.md) to learn how to use separate databases for tenants. \ No newline at end of file +See [the multi-tenancy document](Multi-Tenancy.md) to learn how to use separate databases for tenants. + +## Replace the Connection String Resolver + +ABP defines the `IConnectionStringResolver` and uses it whenever it needs a connection string. It has two pre-built implementations: + +* `DefaultConnectionStringResolver` uses the `AbpDbConnectionOptions` to select the connection string based on the rules defined in the "Configure the Connection Strings" section above. +* `MultiTenantConnectionStringResolver` used for multi-tenant applications and tries to get the configured connection string for the current tenant if available. It uses the `ITenantStore` to find the connection strings. It inherits from the `DefaultConnectionStringResolver` and fallbacks to the base logic if no connection string specified for the current tenant. + +If you need a custom logic to determine the connection string, implement the `IConnectionStringResolver` interface (optionally derive from the existing implementations) and replace the existing implementation using the [dependency injection](Dependency-Injection.md) system. \ No newline at end of file diff --git a/docs/en/Dependency-Injection.md b/docs/en/Dependency-Injection.md index eb0da4a0e4..73cd8095ea 100644 --- a/docs/en/Dependency-Injection.md +++ b/docs/en/Dependency-Injection.md @@ -166,6 +166,26 @@ public class BlogModule : AbpModule } ```` +### Replace a Service + +If you need to replace an existing service (defined by the ABP framework or another module dependency), you have two options; + +1. Use the `Dependency` attribute of the ABP framework as explained above. +2. Use the `IServiceCollection.Replace` method of the Microsoft Dependency Injection library. Example: + +````csharp +public class MyModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + //Replacing the IConnectionStringResolver service + context.Services.Replace(ServiceDescriptor.Transient()); + } +} +```` + + + ## Injecting Dependencies There are three common ways of using a service that has already been registered. From 789b3d33a034b4992dc369444b4f6afaf1cf2e7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 7 Jan 2020 19:03:16 +0300 Subject: [PATCH 079/411] Update Dependency-Injection.md --- docs/en/Dependency-Injection.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/en/Dependency-Injection.md b/docs/en/Dependency-Injection.md index 73cd8095ea..335e829461 100644 --- a/docs/en/Dependency-Injection.md +++ b/docs/en/Dependency-Injection.md @@ -184,8 +184,6 @@ public class MyModule : AbpModule } ```` - - ## Injecting Dependencies There are three common ways of using a service that has already been registered. From e754f3350ff1b6c3b7009c46566998aec313c3cc Mon Sep 17 00:00:00 2001 From: Aaron Chong Date: Wed, 8 Jan 2020 00:04:05 +0800 Subject: [PATCH 080/411] Implement generic AbpJsonValueConverter --- .../ValueConverters/AbpJsonValueConverter.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs new file mode 100644 index 0000000000..31a1418022 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Newtonsoft.Json; + +namespace Volo.Abp.EntityFrameworkCore.ValueConverters +{ + public class AbpJsonValueConverter : ValueConverter + { + public AbpJsonValueConverter() + : base( + d => JsonConvert.SerializeObject(d, Formatting.None), + s => JsonConvert.DeserializeObject(s)) + { + } + } +} From 288b80cfdc3f003ecd045802529cc4684bda1c24 Mon Sep 17 00:00:00 2001 From: Aaron Chong Date: Wed, 8 Jan 2020 00:04:27 +0800 Subject: [PATCH 081/411] Implement AbpDictionaryValueConverter --- .../AbpDictionaryValueComparer.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueComparers/AbpDictionaryValueComparer.cs diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueComparers/AbpDictionaryValueComparer.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueComparers/AbpDictionaryValueComparer.cs new file mode 100644 index 0000000000..4efd8bfa63 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueComparers/AbpDictionaryValueComparer.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.EntityFrameworkCore.ChangeTracking; + +namespace Volo.Abp.EntityFrameworkCore.ValueComparers +{ + public class AbpDictionaryValueComparer : ValueComparer> + { + public AbpDictionaryValueComparer() + : base( + (d1, d2) => d1.SequenceEqual(d2), + d => d.Aggregate(0, (k, v) => HashCode.Combine(k, v.GetHashCode())), + d => d.ToDictionary(k => k.Key, v => v.Value)) + { + } + } +} From 3de25ee4b31b3382b3632cd9f99656dd53971d38 Mon Sep 17 00:00:00 2001 From: Aaron Chong Date: Wed, 8 Jan 2020 00:06:58 +0800 Subject: [PATCH 082/411] Refactor to use ABP converter and comparer --- .../Modeling/AbpEntityTypeBuilderExtensions.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs index b1e59a6c95..dceaeaf74f 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs @@ -1,11 +1,12 @@ using System; using System.Collections.Generic; -using System.Linq; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using Volo.Abp.Auditing; using Volo.Abp.Data; using Volo.Abp.Domain.Entities; +using Volo.Abp.EntityFrameworkCore.ValueComparers; +using Volo.Abp.EntityFrameworkCore.ValueConverters; using Volo.Abp.MultiTenancy; namespace Volo.Abp.EntityFrameworkCore.Modeling @@ -57,10 +58,8 @@ namespace Volo.Abp.EntityFrameworkCore.Modeling { b.Property>(nameof(IHasExtraProperties.ExtraProperties)) .HasColumnName(nameof(IHasExtraProperties.ExtraProperties)) - .ConfigureJsonConversionWithValueComparer( - (d1, d2) => d1.SequenceEqual(d2), - d => d.Aggregate(0, (k, v) => HashCode.Combine(k, v.GetHashCode())), - d => d.ToDictionary(k => k.Key, v => v.Value)); + .HasConversion(new AbpJsonValueConverter>()) + .Metadata.SetValueComparer(new AbpDictionaryValueComparer()); } } From 986e58f477ab76fd4472f0cb2cb73178dd587772 Mon Sep 17 00:00:00 2001 From: Aaron Chong Date: Wed, 8 Jan 2020 00:12:03 +0800 Subject: [PATCH 083/411] Refactor to use ABP converter and comparer --- ...ityServerDbContextModelCreatingExtensions.cs | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs index f0278e7633..33e2b011c4 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs @@ -1,11 +1,10 @@ using System; using System.Collections.Generic; -using System.Linq; using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.ChangeTracking; -using Newtonsoft.Json; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.Modeling; +using Volo.Abp.EntityFrameworkCore.ValueComparers; +using Volo.Abp.EntityFrameworkCore.ValueConverters; using Volo.Abp.IdentityServer.ApiResources; using Volo.Abp.IdentityServer.Clients; using Volo.Abp.IdentityServer.Grants; @@ -204,10 +203,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore identityResource.Property(x => x.DisplayName).HasMaxLength(IdentityResourceConsts.DisplayNameMaxLength); identityResource.Property(x => x.Description).HasMaxLength(IdentityResourceConsts.DescriptionMaxLength); identityResource.Property(x => x.Properties) - .ConfigureJsonConversionWithValueComparer( - (d1, d2) => d1.SequenceEqual(d2), - d => d.Aggregate(0, (k, v) => HashCode.Combine(k, v.GetHashCode())), - d => d.ToDictionary(k => k.Key, v => v.Value)); + .HasConversion(new AbpJsonValueConverter>()) + .Metadata.SetValueComparer(new AbpDictionaryValueComparer()); identityResource.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.IdentityResourceId).IsRequired(); }); @@ -231,10 +228,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore apiResource.Property(x => x.DisplayName).HasMaxLength(ApiResourceConsts.DisplayNameMaxLength); apiResource.Property(x => x.Description).HasMaxLength(ApiResourceConsts.DescriptionMaxLength); apiResource.Property(x => x.Properties) - .ConfigureJsonConversionWithValueComparer( - (d1, d2) => d1.SequenceEqual(d2), - d => d.Aggregate(0, (k, v) => HashCode.Combine(k, v.GetHashCode())), - d => d.ToDictionary(k => k.Key, v => v.Value)); + .HasConversion(new AbpJsonValueConverter>()) + .Metadata.SetValueComparer(new AbpDictionaryValueComparer()); apiResource.HasMany(x => x.Secrets).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); apiResource.HasMany(x => x.Scopes).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); From a6608af1dcdd57311643146adc0658c2a6e5892c Mon Sep 17 00:00:00 2001 From: Aaron Chong Date: Wed, 8 Jan 2020 00:17:05 +0800 Subject: [PATCH 084/411] Remove unnecessary using directive --- .../ValueConverters/AbpJsonValueConverter.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs index 31a1418022..e77b2842a8 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs @@ -1,5 +1,4 @@ -using System.Collections.Generic; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using Newtonsoft.Json; namespace Volo.Abp.EntityFrameworkCore.ValueConverters From e199513e3e56390c06f009f439054b8f36aff562 Mon Sep 17 00:00:00 2001 From: Aaron Chong Date: Wed, 8 Jan 2020 00:17:53 +0800 Subject: [PATCH 085/411] Remove unnecessary extensions --- .../Modeling/AbpPropertyBuilderExtensions.cs | 110 ------------------ 1 file changed, 110 deletions(-) delete mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpPropertyBuilderExtensions.cs diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpPropertyBuilderExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpPropertyBuilderExtensions.cs deleted file mode 100644 index 93aeb792da..0000000000 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpPropertyBuilderExtensions.cs +++ /dev/null @@ -1,110 +0,0 @@ -using System; -using System.Linq.Expressions; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.ChangeTracking; -using Microsoft.EntityFrameworkCore.Metadata.Builders; -using Newtonsoft.Json; - -namespace Volo.Abp.EntityFrameworkCore.Modeling -{ - public static class AbpPropertyBuilderExtensions - { - /// - /// Serialize and property attributes using json(JsonConvert). - /// - /// The builder for the property being configured. - /// Sets the custom ValueComparer for this property. - public static PropertyBuilder ConfigureJsonConversionWithValueComparer( - this PropertyBuilder propertyBuilder, - ValueComparer valueComparer) - { - propertyBuilder.HasConversion( - d => JsonConvert.SerializeObject(d, Formatting.None), - s => JsonConvert.DeserializeObject(s) - ) - .Metadata.SetValueComparer(valueComparer); - - return propertyBuilder; - } - - /// - /// Serialize and property attributes using json(JsonConvert). - /// - /// The builder for the property being configured. - /// - /// If true, then EF will use ValueComparer if the type - /// implements it. This is usually used when byte arrays act as keys. - /// - public static PropertyBuilder ConfigureJsonConversionWithValueComparer( - this PropertyBuilder propertyBuilder, - bool favorStructuralComparisons) - { - propertyBuilder.HasConversion( - d => JsonConvert.SerializeObject(d, Formatting.None), - s => JsonConvert.DeserializeObject(s) - ) - .Metadata.SetValueComparer(new ValueComparer(favorStructuralComparisons)); - - return propertyBuilder; - } - - /// - /// Serialize and property attributes using json(JsonConvert). - /// Creates a new ValueComparer with the given comparison expression. - /// A shallow copy will be used for the snapshot. - /// - /// The builder for the property being configured. - /// The comparison expression. - /// The associated hash code generator. - public static PropertyBuilder ConfigureJsonConversionWithValueComparer( - this PropertyBuilder propertyBuilder, - Expression> equalsExpression, - Expression> hashCodeExpression) - { - propertyBuilder.HasConversion( - d => JsonConvert.SerializeObject(d, Formatting.None), - s => JsonConvert.DeserializeObject(s) - ) - .Metadata.SetValueComparer(new ValueComparer( - equalsExpression, - hashCodeExpression)); - - return propertyBuilder; - } - - /// - /// Serialize and property attributes using json(JsonConvert). - /// - /// Creates a new ValueComparer with the given comparison and - /// snapshotting expressions. - /// - /// - /// Snapshotting is the process of creating a copy of the value into a snapshot so it can - /// later be compared to determine if it has changed. For some types, such as collections, - /// this needs to be a deep copy of the collection rather than just a shallow copy of the - /// reference. - /// - /// - /// The builder for the property being configured. - /// The comparison expression. - /// The associated hash code generator. - /// The snapshot expression. - public static PropertyBuilder ConfigureJsonConversionWithValueComparer( - this PropertyBuilder propertyBuilder, - Expression> equalsExpression, - Expression> hashCodeExpression, - Expression> snapshotExpression) - { - propertyBuilder.HasConversion( - d => JsonConvert.SerializeObject(d, Formatting.None), - s => JsonConvert.DeserializeObject(s) - ) - .Metadata.SetValueComparer(new ValueComparer( - equalsExpression, - hashCodeExpression, - snapshotExpression)); - - return propertyBuilder; - } - } -} \ No newline at end of file From 475d3bbed6ba0f015afaee39cbf915cee9b7225b Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Wed, 8 Jan 2020 09:23:21 +0300 Subject: [PATCH 086/411] tests(theme-shared): add loading.directive.spec #2537 --- .../src/lib/tests/loading.directive.spec.ts | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/tests/loading.directive.spec.ts diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/loading.directive.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/loading.directive.spec.ts new file mode 100644 index 0000000000..e19dfa9853 --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/loading.directive.spec.ts @@ -0,0 +1,82 @@ +import { SpectatorDirective, createDirectiveFactory } from '@ngneat/spectator/jest'; +import { LoadingDirective } from '../directives'; +import { LoadingComponent } from '../components'; + +import { Component } from '@angular/core'; + +@Component({ + selector: 'abp-dummy', + template: '
Testing Loading Directive
', +}) +export class DummyComponent {} + +describe('LoadingDirective', () => { + let spectator: SpectatorDirective; + const createDirective = createDirectiveFactory({ + directive: LoadingDirective, + declarations: [LoadingComponent, DummyComponent], + entryComponents: [LoadingComponent], + }); + + describe('default', () => { + beforeEach(() => { + spectator = createDirective('
Testing Loading Directive
', { + hostProps: { status: true }, + }); + }); + + it('should create the loading component', done => { + setTimeout(() => { + expect(spectator.directive.rootNode).toBeTruthy(); + expect(spectator.directive.componentRef).toBeTruthy(); + done(); + }, 0); + }); + }); + + describe('with custom target', () => { + const mockTarget = document.createElement('div'); + const spy = jest.spyOn(mockTarget, 'appendChild'); + + beforeEach(() => { + spectator = createDirective( + '
Testing Loading Directive
', + { + hostProps: { status: true, target: mockTarget }, + }, + ); + }); + + it('should add the loading component to the DOM', done => { + setTimeout(() => { + expect(spy).toHaveBeenCalled(); + done(); + }, 0); + }); + + it('should remove the loading component to the DOM', done => { + const spy = jest.spyOn(spectator.directive['renderer'], 'removeChild'); + spectator.setHostInput({ status: false }); + setTimeout(() => { + expect(spy).toHaveBeenCalled(); + expect(spectator.directive.rootNode).toBeFalsy(); + done(); + }, 0); + }); + }); + + describe('with a component selector', () => { + beforeEach(() => { + spectator = createDirective('', { + hostProps: { status: true }, + }); + }); + + it('should select the child element', done => { + setTimeout(() => { + expect(spectator.directive.targetElement.id).toBe('dummy'); + done(); + }, 0); + }); + }); +}); From 8621591f4c0e13cbb91292ead13a97ecc83480ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 8 Jan 2020 09:56:39 +0300 Subject: [PATCH 087/411] Add Volo.Abp.Account.Application reference to the Web.Unified.csproj. --- .../MyCompanyName.MyProjectName.Web.Unified.csproj | 1 + .../MyProjectNameWebUnifiedModule.cs | 2 ++ 2 files changed, 3 insertions(+) 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 dd930afbb0..1099836b9c 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 @@ -19,6 +19,7 @@ + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs index 2f5b250e02..8390297a9f 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs @@ -8,6 +8,7 @@ using MyCompanyName.MyProjectName.Web; using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.Swagger; using Volo.Abp; +using Volo.Abp.Account; using Volo.Abp.Account.Web; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; @@ -42,6 +43,7 @@ namespace MyCompanyName.MyProjectName typeof(AbpAuditLoggingEntityFrameworkCoreModule), typeof(AbpAutofacModule), typeof(AbpAccountWebModule), + typeof(AbpAccountApplicationModule), typeof(AbpEntityFrameworkCoreSqlServerModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), From 474fc95824405143e02e84d696c5654b0c26bbaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 8 Jan 2020 10:02:02 +0300 Subject: [PATCH 088/411] Resolved #2579: Use Contextualized object mapper for the module template. --- .../MyProjectNameAppService.cs | 1 + .../MyProjectNameApplicationModule.cs | 4 +++- .../MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs | 1 + .../Pages/MyProjectNamePageModel.cs | 1 + 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameAppService.cs b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameAppService.cs index 31bfbeb0de..71bb06e43f 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameAppService.cs +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameAppService.cs @@ -8,6 +8,7 @@ namespace MyCompanyName.MyProjectName protected MyProjectNameAppService() { LocalizationResource = typeof(MyProjectNameResource); + ObjectMapperContext = typeof(MyProjectNameApplicationModule); } } } diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameApplicationModule.cs b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameApplicationModule.cs index bb0e72e856..457c1bc51b 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameApplicationModule.cs +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameApplicationModule.cs @@ -1,4 +1,5 @@ -using Volo.Abp.AutoMapper; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.AutoMapper; using Volo.Abp.Modularity; using Volo.Abp.Application; @@ -14,6 +15,7 @@ namespace MyCompanyName.MyProjectName { public override void ConfigureServices(ServiceConfigurationContext context) { + context.Services.AddAutoMapperObjectMapper(); Configure(options => { options.AddMaps(validate: true); diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs index 213161e296..8e378a6bc2 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs @@ -42,6 +42,7 @@ namespace MyCompanyName.MyProjectName.Web options.FileSets.AddEmbedded("MyCompanyName.MyProjectName.Web"); }); + context.Services.AddAutoMapperObjectMapper(); Configure(options => { options.AddMaps(validate: true); diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/MyProjectNamePageModel.cs b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/MyProjectNamePageModel.cs index d0b9c04a45..e1470049ac 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/MyProjectNamePageModel.cs +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/MyProjectNamePageModel.cs @@ -10,6 +10,7 @@ namespace MyCompanyName.MyProjectName.Web.Pages protected MyProjectNamePageModel() { LocalizationResourceType = typeof(MyProjectNameResource); + ObjectMapperContext = typeof(MyProjectNameWebModule); } } } \ No newline at end of file From 13ac954cf7a3a18c9cd86159f477e2573491bbd2 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Wed, 8 Jan 2020 11:20:53 +0300 Subject: [PATCH 089/411] Fix PostgreSQL document --- docs/en/Entity-Framework-Core-PostgreSQL.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/en/Entity-Framework-Core-PostgreSQL.md b/docs/en/Entity-Framework-Core-PostgreSQL.md index 85ce3197f2..328ca4d416 100644 --- a/docs/en/Entity-Framework-Core-PostgreSQL.md +++ b/docs/en/Entity-Framework-Core-PostgreSQL.md @@ -12,12 +12,12 @@ Find ***YourProjectName*EntityFrameworkCoreModule** class inside the `.EntityFra ## UsePostgreSql() -Find `UseSqlServer()` calls in your solution, replace with `UsePostgreSql()`. Check the following files: +Find `UseSqlServer()` call in *YourProjectName*EntityFrameworkCoreModule.cs inside the `.EntityFrameworkCore` project and replace with `UsePostgreSql()`. -* *YourProjectName*EntityFrameworkCoreModule.cs inside the `.EntityFrameworkCore` project. -* *YourProjectName*MigrationsDbContextFactory.cs inside the `.EntityFrameworkCore.DbMigrations` project. -> Depending on your solution structure, you may find more code files need to be changed. +Find `UseSqlServer()` call in *YourProjectName*MigrationsDbContextFactory.cs inside the `.EntityFrameworkCore.DbMigrations` project and replace with `UseNpgsql()`. + +> Depending on your solution structure, you may find more `UseSqlServer()` calls that needs to be changed. ## Change the Connection Strings @@ -38,4 +38,4 @@ Run the `.DbMigrator` project to create the database and seed the initial data. ## Run the Application -It is ready. Just run the application and enjoy coding. \ No newline at end of file +It is ready. Just run the application and enjoy coding. From e04aea53b053110a6432254c0bae3a718d41e3a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 8 Jan 2020 13:55:12 +0300 Subject: [PATCH 090/411] Inherit from the MyProjectNamePageModel --- .../Pages/MyProjectName/Index.cshtml.cs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/MyProjectName/Index.cshtml.cs b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/MyProjectName/Index.cshtml.cs index a9c43a1c88..bb6a7a4da8 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/MyProjectName/Index.cshtml.cs +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/MyProjectName/Index.cshtml.cs @@ -1,13 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; - namespace MyCompanyName.MyProjectName.Web.Pages.MyProjectName { - public class IndexModel : PageModel + public class IndexModel : MyProjectNamePageModel { public void OnGet() { From f42c452991092537f8dbe34a8677ec009ca5232b Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Wed, 8 Jan 2020 15:03:28 +0300 Subject: [PATCH 091/411] resolved: MarkdownDocumentToHtmlConverter miscatches the links resolved https://github.com/abpframework/abp/issues/2582 --- .../Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs b/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs index 81ce5ab1f7..5d7282a7e6 100644 --- a/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs +++ b/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs @@ -24,7 +24,7 @@ namespace Volo.Docs.Markdown } private const string MdLinkFormat = "[{0}]({1}{2}/{3}/{4}{5}/{6})"; - private const string MarkdownLinkRegExp = @"\[(.*?)\]\((.*?\.md)\)"; + private const string MarkdownLinkRegExp = @"\[(.*?)\]\((.*?)\)"; private const string AnchorLinkRegExp = @"]+href=\""(.*?)\""[^>]*>(.*)?
"; public virtual string Convert(ProjectDto project, DocumentWithDetailsDto document, string version, @@ -56,7 +56,7 @@ namespace Volo.Docs.Markdown var normalized = Regex.Replace(content, MarkdownLinkRegExp, delegate (Match match) { var link = match.Groups[2].Value; - if (UrlHelper.IsExternalLink(link)) + if (UrlHelper.IsExternalLink(link) || !link.EndsWith(".md")) { return match.Value; } From 748efaf92b6a991a5069c9f7de74eee0a2f2316d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 8 Jan 2020 15:11:41 +0300 Subject: [PATCH 092/411] Fix document extraproperties --- docs/en/Modules/Docs.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/docs/en/Modules/Docs.md b/docs/en/Modules/Docs.md index dbafe910da..6859caa7fa 100644 --- a/docs/en/Modules/Docs.md +++ b/docs/en/Modules/Docs.md @@ -316,7 +316,7 @@ You can use [ABP Framework](https://github.com/abpframework/abp/) GitHub documen - ExtraProperties: ```json - {"GitHubRootUrl":"https://github.com/abpframework/abp/tree/{version}/docs/en/","GitHubAccessToken":"***"} + {"GitHubRootUrl":"https://github.com/abpframework/abp/tree/{version}/docs","GitHubAccessToken":"***"} ``` Note that `GitHubAccessToken` is masked with `***`. It's a private token that you must get it from GitHub. See https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/ @@ -328,7 +328,7 @@ You can use [ABP Framework](https://github.com/abpframework/abp/) GitHub documen For `SQL` databases, you can use the below `T-SQL` command to insert the specified sample into your `DocsProjects` table: ```mssql -INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939658', N'ABP framework (GitHub)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'GitHub', N'{"GitHubRootUrl":"https://github.com/abpframework/abp/tree/{version}/docs/en/","GitHubAccessToken":"***"}', N'/', N'master') +INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939658', N'ABP framework (GitHub)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'GitHub', N'{"GitHubRootUrl":"https://github.com/abpframework/abp/tree/{version}/docs","GitHubAccessToken":"***"}', N'/', N'master') ``` Be aware that `GitHubAccessToken` is masked. It's a private token and you must get your own token and replace the `***` string. @@ -354,10 +354,10 @@ You can use [ABP Framework](https://github.com/abpframework/abp/) GitHub documen - ExtraProperties: ```json - {"Path":"C:\\Github\\abp\\docs\\en"} + {"Path":"C:\\Github\\abp\\docs"} ``` - Note that `Path` must be replaced with your local docs directory. You can fetch the ABP Framework's documents from https://github.com/abpframework/abp/tree/master/docs/en and copy to the directory `C:\\Github\\abp\\docs\\en` to get it work. + Note that `Path` must be replaced with your local docs directory. You can fetch the ABP Framework's documents from https://github.com/abpframework/abp/tree/master/docs and copy to the directory `C:\\Github\\abp\\docs` to get it work. - MainWebsiteUrl: `/` @@ -366,11 +366,9 @@ You can use [ABP Framework](https://github.com/abpframework/abp/) GitHub documen For `SQL` databases, you can use the below `T-SQL` command to insert the specified sample into your `DocsProjects` table: ```mssql -INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939659', N'ABP framework (FileSystem)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'FileSystem', N'{"Path":"C:\\Github\\abp\\docs\\en"}', N'/', NULL) +INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939659', N'ABP framework (FileSystem)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'FileSystem', N'{"Path":"C:\\Github\\abp\\docs"}', N'/', NULL) ``` - - Add one of the sample projects above and run the application. In the menu you will see `Documents` link, click the menu link to open the documents page. So far, we have created a new application from abp.io website and made it up and ready for Docs module. From 49a14b999ed4f8c95e1202be4889e21b6f131f6f Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Wed, 8 Jan 2020 15:47:10 +0300 Subject: [PATCH 093/411] refactor(theme-shared): change td element to div #2537 --- .../lib/components/table/table.component.html | 6 ++--- .../lib/components/table/table.component.ts | 23 ++++++++++++++----- .../lib/tests/pagination.component.spec.ts | 2 +- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html index 05396cf320..99fe8c31f2 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html @@ -69,9 +69,9 @@ - - + +
{{ emptyMessage | abpLocalization }} - +
diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts index 48cddbd1f4..2dc864e496 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts @@ -1,5 +1,4 @@ import { - AfterViewInit, Component, ElementRef, EventEmitter, @@ -9,7 +8,10 @@ import { TrackByFunction, ViewChild, ViewEncapsulation, + AfterViewInit, } from '@angular/core'; +import { Observable, of } from 'rxjs'; +import { delay } from 'rxjs/operators'; @Component({ selector: 'abp-table', @@ -20,6 +22,15 @@ import { .ui-table .ui-table-tbody > tr:hover { background-color: #eaeaea; } + + .ui-table .ui-table-tbody > tr.empty-row:hover { + background-color: transparent; + } + + .ui-table .ui-table-tbody > tr.empty-row > div { + margin: 10px; + text-align: center; + } `, ], encapsulation: ViewEncapsulation.None, @@ -64,7 +75,7 @@ export class TableComponent implements AfterViewInit { bodyScrollLeft = 0; - colspan = 0; + colspan: number; trackByFn: TrackByFunction = (_, value) => { return typeof value === 'object' ? value[this.trackingProp] || value : value; @@ -89,7 +100,7 @@ export class TableComponent implements AfterViewInit { } get slicedValue(): any[] { - if (!this.rows || this.rows > this.value.length) { + if (!this.rows || this.rows >= this.value.length) { return this.value; } @@ -97,9 +108,9 @@ export class TableComponent implements AfterViewInit { return this.value.slice(start, start + this.rows); } - constructor() {} - ngAfterViewInit() { - this.colspan = this.wrapperRef.nativeElement.querySelectorAll('th').length; + setTimeout(() => { + this.colspan = this.wrapperRef.nativeElement.querySelectorAll('th').length; + }, 0); } } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/pagination.component.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/pagination.component.spec.ts index 1428c7eb9d..98f63e75f6 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/pagination.component.spec.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/pagination.component.spec.ts @@ -32,7 +32,7 @@ describe('PaginationComponent', () => { '7', ]); - spectator.setHostInput({ value: 2 }); + spectator.click('.ui-paginator-first'); expect(spectator.queryAll('.ui-paginator-page').map(node => node.textContent)).toEqual([ '1', From 714ab6fa2705bf9be91f2aaffff665768de1aeb3 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 8 Jan 2020 21:12:17 +0800 Subject: [PATCH 094/411] Remove the angular folder on module project creation with --no-ui option Resolve #2585 --- .../Cli/ProjectBuilding/Building/Steps/RemoveFolderStep.cs | 5 +++-- .../ProjectBuilding/Templates/Module/ModuleTemplateBase.cs | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveFolderStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveFolderStep.cs index ddf7010dd7..636175f0b1 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveFolderStep.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveFolderStep.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System; +using System.Linq; namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps { @@ -14,7 +15,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps public override void Execute(ProjectBuildContext context) { //Remove the folder content - var folderPathWithSlash = _folderPath + "/"; + var folderPathWithSlash = _folderPath.EnsureEndsWith('/'); context.Files.RemoveAll(file => file.Name.StartsWith(folderPathWithSlash)); //Remove the folder 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 09b75ac0e2..3faf920ab0 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 @@ -43,6 +43,8 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.Module "MyCompanyName.MyProjectName.Web.Unified", projectFolderPath: "/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified" )); + + steps.Add(new RemoveFolderStep("/angular")); } private void RandomizeSslPorts(ProjectBuildContext context, List steps) From 0060f6ef730de92b8b18230369c011a64d90b693 Mon Sep 17 00:00:00 2001 From: olicooper Date: Wed, 8 Jan 2020 16:10:38 +0000 Subject: [PATCH 095/411] Grammatical issue with Identity en localization --- .../Volo/Abp/Identity/Localization/en.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en.json index e7a038fd57..886594ac84 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en.json @@ -7,7 +7,7 @@ "UserName": "User name", "EmailAddress": "Email address", "PhoneNumber": "Phone number", - "UserInformations": "User informations", + "UserInformations": "User information", "DisplayName:IsDefault": "Default", "DisplayName:IsStatic": "Static", "DisplayName:IsPublic": "Public", @@ -99,4 +99,4 @@ "Description:Abp.Identity.User.IsUserNameUpdateEnabled": "Whether the username can be updated by the user.", "Description:Abp.Identity.User.IsEmailUpdateEnabled": "Whether the email can be updated by the user." } -} \ No newline at end of file +} From cb1e0e78dea5042179b6da02af5ad569950ce69c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 8 Jan 2020 20:33:16 +0300 Subject: [PATCH 096/411] Add AbpDbConnectionOptions part to the Connection-Strings document. --- docs/en/Connection-Strings.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/en/Connection-Strings.md b/docs/en/Connection-Strings.md index 57a156ff7b..eb7aae3a21 100644 --- a/docs/en/Connection-Strings.md +++ b/docs/en/Connection-Strings.md @@ -35,6 +35,21 @@ This configuration defines three different connection strings: [Pre-built application modules](Modules/Index.md) define constants for the connection string names. For example, the IdentityServer module defines a ` ConnectionStringName ` constant in the ` AbpIdentityServerDbProperties ` class (located in the ` Volo.Abp.IdentityServer ` namespace). Other modules similarly define constants, so you can investigate the connection string name. +### AbpDbConnectionOptions + +ABP actually uses the `AbpDbConnectionOptions` to get the connection strings. If you set the connection strings as explained above, `AbpDbConnectionOptions` is automatically filled. However, you can set or override the connection strings using [the options pattern](Options.md). You can configure the `AbpDbConnectionOptions` in the `ConfigureServices` method of your [module](Module-Development-Basics.md) as shown below: + +````csharp +public override void ConfigureServices(ServiceConfigurationContext context) +{ + Configure(options => + { + options.ConnectionStrings.Default = "..."; + options.ConnectionStrings["AbpPermissionManagement"] = "..."; + }); +} +```` + ## Set the Connection String Name A module typically has a unique connection string name associated to its `DbContext` class using the `ConnectionStringName` attribute. Example: From 0680f1f0beb0f75dfb3cfbe08d93177b1b79e561 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 8 Jan 2020 21:04:09 +0300 Subject: [PATCH 097/411] Added Options document --- docs/en/Options.md | 71 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) diff --git a/docs/en/Options.md b/docs/en/Options.md index cead1aea61..5c21b9326d 100644 --- a/docs/en/Options.md +++ b/docs/en/Options.md @@ -1,4 +1,73 @@ # Options -TODO! +Microsoft has introduced [the options pattern](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options) that is used to configure a group of settings used by the framework services. This pattern is implemented by the [Microsoft.Extensions.Options](https://www.nuget.org/packages/Microsoft.Extensions.Options) NuGet package, so it is usable by any type of applications in addition to ASP.NET Core based applications. +ABP framework follows this option pattern and defines options classes to configure the framework and the modules (they are explained in the documents of the related feature). + +Since [the Microsoft documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options) explains the pattern in detail, no reason to repeat all. However, ABP adds a few more features and they will be explained here. + +## Configure Options + +You typically configure options in the `ConfigureServices` of the `Startup` class. However, since ABP framework provides a modular infrastructure, you configure options in the `ConfigureServices` of your [module](Module-Development-Basics.md). Example: + +````csharp +public override void ConfigureServices(ServiceConfigurationContext context) +{ + context.Services.Configure(options => + { + options.IsEnabled = false; + }); +} +```` + +* `AbpAuditingOptions` is a simple class defines some properties like `IsEnabled` used here. +* `AbpModule` base class defines `Configure` method to make the code simpler. So, instead of `context.Services.Configure<...>`, you can directly use the `Configure<...>` shortcut method. + +If you are developing a reusable module, you may need to define an options class to allow developers to configure your module. In this case, define a plain options class as shown below: + +````csharp +public class MyOptions +{ + public int Value1 { get; set; } + public bool Value2 { get; set; } +} +```` + +Then developers can configure your options just like the `AbpAuditingOptions` example above: + +````csharp +public override void ConfigureServices(ServiceConfigurationContext context) +{ + Configure(options => + { + options.Value1 = 42; + options.Value2 = true; + }); +} +```` + +* In this example, used the shortcut `Configure<...>` method. + +### Get the Option Value + +Whenever you need to get the value of an option, [inject](Dependency-Injection.md) the `IOptions` service into your class and use its `.Value` property. Example: + +````csharp +public class MyService : ITransientDependency +{ + private readonly MyOptions _options; + + public MyService(IOptions options) + { + _options = options.Value; //Notice the options.Value usage! + } + + public void DoIt() + { + var v1 = _options.Value1; + var v2 = _options.Value2; + } +} +```` + +Read [the Microsoft documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options) for all details of the options pattern. \ No newline at end of file From f654c0f7a19900ff0a44dbfe52d798209b24927c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 8 Jan 2020 22:05:26 +0300 Subject: [PATCH 098/411] Added Pre Configure section --- docs/en/Options.md | 47 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/docs/en/Options.md b/docs/en/Options.md index 5c21b9326d..20168bdbe3 100644 --- a/docs/en/Options.md +++ b/docs/en/Options.md @@ -70,4 +70,49 @@ public class MyService : ITransientDependency } ```` -Read [the Microsoft documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options) for all details of the options pattern. \ No newline at end of file +Read [the Microsoft documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options) for all details of the options pattern. + +## Pre Configure + +One restriction of the options pattern is that you can only resolve (inject) the `IOptions` and get the option values when the dependency injection configuration completes (that means the `ConfigureServices` methods of all modules complete). + +If you are developing a module, you may need to allow developers to set some options and use these options in the dependency injection registration phase. You may need to configure other services or change the dependency injection registration code based on these option values. + +For such cases, ABP introduces the `PreConfigure` and the `ExecutePreConfiguredActions` extension methods for the `IServiceCollection`. The pattern works as explained below. + +1. Define a plan option class in your module. Example: + +````csharp +public class MyPreOptions +{ + public bool MyValue { get; set; } +} +```` + +Then any [module class](Module-Development-Basics.md) depends on your module can use the `PreConfigure` method in its `PreConfigureServices` method. Example: + +````csharp +public override void PreConfigureServices(ServiceConfigurationContext context) +{ + PreConfigure(options => + { + options.MyValue = true; + }); +} +```` + +> Multiple modules can pre-configure the options and override the option values based on their dependency order. + +Finally, your module can execute the `ExecutePreConfiguredActions` method in its `ConfigureServices` method to get the configured option values. Example: + +````csharp +public override void ConfigureServices(ServiceConfigurationContext context) +{ + var options = context.Services.ExecutePreConfiguredActions(); + if (options.MyValue) + { + //... + } +} +```` + From f0ae27a7141fcdbbb34ea8b72421355f3b19b0f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 8 Jan 2020 22:06:39 +0300 Subject: [PATCH 099/411] Add Options menu --- docs/en/docs-nav.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index e167d50c47..5667631c61 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -60,6 +60,10 @@ "text": "Configuration", "path": "Configuration.md" }, + { + "text": "Options", + "path": "Options.md" + }, { "text": "Dependency Injection", "path": "Dependency-Injection.md", From 201f08856482930649f1bbc406e7088db7a76183 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 9 Jan 2020 09:43:27 +0800 Subject: [PATCH 100/411] Update Virtual-File-System.md --- docs/en/Virtual-File-System.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/en/Virtual-File-System.md b/docs/en/Virtual-File-System.md index d13bbf491b..f2f85049bd 100644 --- a/docs/en/Virtual-File-System.md +++ b/docs/en/Virtual-File-System.md @@ -38,7 +38,8 @@ If you want to add multiple files, this can be tedious. Alternatively, you can d ````C# - + + ```` From 90dea581b685314de487dfe19120c6376e655f57 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 9 Jan 2020 09:43:57 +0800 Subject: [PATCH 101/411] Update Virtual-File-System.md --- docs/zh-Hans/Virtual-File-System.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/zh-Hans/Virtual-File-System.md b/docs/zh-Hans/Virtual-File-System.md index 49c97c8162..97cf22c73e 100644 --- a/docs/zh-Hans/Virtual-File-System.md +++ b/docs/zh-Hans/Virtual-File-System.md @@ -39,7 +39,8 @@ namespace MyCompany.MyProject ````C# - + + ```` From 24ed94a32808588d8a208941bd19916bdf5130a0 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 9 Jan 2020 15:44:42 +0800 Subject: [PATCH 102/411] Make AbpDictionaryValueComparer support generics to resolve migration errors. --- .../Modeling/AbpEntityTypeBuilderExtensions.cs | 2 +- .../ValueComparers/AbpDictionaryValueComparer.cs | 2 +- .../IdentityServerDbContextModelCreatingExtensions.cs | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs index dceaeaf74f..6db09d4d17 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs @@ -59,7 +59,7 @@ namespace Volo.Abp.EntityFrameworkCore.Modeling b.Property>(nameof(IHasExtraProperties.ExtraProperties)) .HasColumnName(nameof(IHasExtraProperties.ExtraProperties)) .HasConversion(new AbpJsonValueConverter>()) - .Metadata.SetValueComparer(new AbpDictionaryValueComparer()); + .Metadata.SetValueComparer(new AbpDictionaryValueComparer()); } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueComparers/AbpDictionaryValueComparer.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueComparers/AbpDictionaryValueComparer.cs index 4efd8bfa63..c6959b0801 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueComparers/AbpDictionaryValueComparer.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueComparers/AbpDictionaryValueComparer.cs @@ -5,7 +5,7 @@ using Microsoft.EntityFrameworkCore.ChangeTracking; namespace Volo.Abp.EntityFrameworkCore.ValueComparers { - public class AbpDictionaryValueComparer : ValueComparer> + public class AbpDictionaryValueComparer : ValueComparer> { public AbpDictionaryValueComparer() : base( diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs index 8776d6ed83..9f65e4e419 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs @@ -204,8 +204,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore identityResource.Property(x => x.DisplayName).HasMaxLength(IdentityResourceConsts.DisplayNameMaxLength); identityResource.Property(x => x.Description).HasMaxLength(IdentityResourceConsts.DescriptionMaxLength); identityResource.Property(x => x.Properties) - .HasConversion(new AbpJsonValueConverter>()) - .Metadata.SetValueComparer(new AbpDictionaryValueComparer()); + .HasConversion(new AbpJsonValueConverter>()) + .Metadata.SetValueComparer(new AbpDictionaryValueComparer()); identityResource.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.IdentityResourceId).IsRequired(); }); @@ -229,8 +229,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore apiResource.Property(x => x.DisplayName).HasMaxLength(ApiResourceConsts.DisplayNameMaxLength); apiResource.Property(x => x.Description).HasMaxLength(ApiResourceConsts.DescriptionMaxLength); apiResource.Property(x => x.Properties) - .HasConversion(new AbpJsonValueConverter>()) - .Metadata.SetValueComparer(new AbpDictionaryValueComparer()); + .HasConversion(new AbpJsonValueConverter>()) + .Metadata.SetValueComparer(new AbpDictionaryValueComparer()); apiResource.HasMany(x => x.Secrets).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); apiResource.HasMany(x => x.Scopes).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); From cfa4d09e36d29371c86d94236cb5aebfe9debf9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Tu=CC=88ken?= Date: Tue, 7 Jan 2020 23:44:47 +0300 Subject: [PATCH 103/411] Create Volo.Abp.AspNetCore.Serilog package. --- framework/Volo.Abp.sln | 9 ++- ...CoreSerilogApplicationBuilderExtensions.cs | 13 ++++ .../Volo.Abp.AspNetCore.Serilog.csproj | 27 +++++++ .../AspNetCore/Serilog/AbpSerilogModule.cs | 14 ++++ .../AspNetCore/Serilog/SerilogMiddleware.cs | 70 +++++++++++++++++++ 5 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Serilog/Volo.Abp.AspNetCore.Serilog.csproj create mode 100644 framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/SerilogMiddleware.cs diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln index 088a9437a8..b9a27d757f 100644 --- a/framework/Volo.Abp.sln +++ b/framework/Volo.Abp.sln @@ -1,4 +1,4 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 +Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.28922.388 MinimumVisualStudioVersion = 10.0.40219.1 @@ -256,6 +256,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Minify", "src\Volo EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Minify.Tests", "test\Volo.Abp.Minify.Tests\Volo.Abp.Minify.Tests.csproj", "{E69182B3-350A-43F5-A935-5EBBEBECEF97}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Serilog", "src\Volo.Abp.AspNetCore.Serilog\Volo.Abp.AspNetCore.Serilog.csproj", "{3B801003-BE74-49ED-9749-DA5E99F45EBF}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -762,6 +764,10 @@ Global {E69182B3-350A-43F5-A935-5EBBEBECEF97}.Debug|Any CPU.Build.0 = Debug|Any CPU {E69182B3-350A-43F5-A935-5EBBEBECEF97}.Release|Any CPU.ActiveCfg = Release|Any CPU {E69182B3-350A-43F5-A935-5EBBEBECEF97}.Release|Any CPU.Build.0 = Release|Any CPU + {3B801003-BE74-49ED-9749-DA5E99F45EBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3B801003-BE74-49ED-9749-DA5E99F45EBF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3B801003-BE74-49ED-9749-DA5E99F45EBF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3B801003-BE74-49ED-9749-DA5E99F45EBF}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -892,6 +898,7 @@ Global {73559227-EBF0-475F-835B-1FF0CD9132AA} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} {928DC30D-C078-4BB4-A9F8-FE7252C67DC6} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} {E69182B3-350A-43F5-A935-5EBBEBECEF97} = {447C8A77-E5F0-4538-8687-7383196D04EA} + {3B801003-BE74-49ED-9749-DA5E99F45EBF} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5} diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs new file mode 100644 index 0000000000..f9093ffaac --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs @@ -0,0 +1,13 @@ +using Volo.Abp.AspNetCore.Serilog; + +namespace Microsoft.AspNetCore.Builder +{ + public static class AbpAspNetCoreSerilogApplicationBuilderExtensions + { + public static IApplicationBuilder UseSerilogEnrichers(this IApplicationBuilder app) + { + return app + .UseMiddleware(); + } + } +} \ No newline at end of file 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 new file mode 100644 index 0000000000..f450e04423 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo.Abp.AspNetCore.Serilog.csproj @@ -0,0 +1,27 @@ + + + + + + netcoreapp3.1 + Volo.Abp.AspNetCore.Serilog + Volo.Abp.AspNetCore.Serilog + $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; + false + false + false + true + Library + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs new file mode 100644 index 0000000000..5012d54e30 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs @@ -0,0 +1,14 @@ +using Volo.Abp.AspNetCore; +using Volo.Abp.Modularity; +using Volo.Abp.MultiTenancy; + +namespace Volo.Abp.AspNetCore.Serilog +{ + [DependsOn( + typeof(AbpMultiTenancyModule), + typeof(AbpAspNetCoreModule) + )] + public class AbpSerilogModule : AbpModule + { + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/SerilogMiddleware.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/SerilogMiddleware.cs new file mode 100644 index 0000000000..10bbdb188f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/SerilogMiddleware.cs @@ -0,0 +1,70 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Serilog.Context; +using Serilog.Core; +using Serilog.Core.Enrichers; +using Volo.Abp.Clients; +using Volo.Abp.DependencyInjection; +using Volo.Abp.MultiTenancy; +using Volo.Abp.Tracing; +using Volo.Abp.Users; + +namespace Volo.Abp.AspNetCore.Serilog +{ + public class SerilogMiddleware : IMiddleware, ITransientDependency + { + private const string TenantEnricherPropertyName = "TenantId"; + private const string UserEnricherPropertyName = "UserId"; + private const string ClientEnricherPropertyName = "ClientId"; + private const string CorrelationIdPropertyName = "CorrelationId"; + + private readonly ICurrentClient _currentClient; + private readonly ICurrentTenant _currentTenant; + private readonly ICurrentUser _currentUser; + private readonly ICorrelationIdProvider _correlationIdProvider; + + public SerilogMiddleware( + ICurrentTenant currentTenant, + ICurrentUser currentUser, + ICurrentClient currentClient, + ICorrelationIdProvider correlationIdProvider) + { + _currentTenant = currentTenant; + _currentUser = currentUser; + _currentClient = currentClient; + _correlationIdProvider = correlationIdProvider; + } + + public async Task InvokeAsync(HttpContext context, RequestDelegate next) + { + var enrichers = new List(); + + if (_currentTenant?.Id != null) + { + enrichers.Add(new PropertyEnricher(TenantEnricherPropertyName, _currentTenant.Id)); + } + + if (_currentUser?.Id != null) + { + enrichers.Add(new PropertyEnricher(UserEnricherPropertyName, _currentUser.Id)); + } + + if (_currentClient?.Id != null) + { + enrichers.Add(new PropertyEnricher(ClientEnricherPropertyName, _currentClient.Id)); + } + + var correlationId = _correlationIdProvider.Get(); + if (!string.IsNullOrEmpty(correlationId)) + { + enrichers.Add(new PropertyEnricher(CorrelationIdPropertyName, correlationId)); + } + + using (LogContext.Push(enrichers.ToArray())) + { + await next(context).ConfigureAwait(false); + } + } + } +} \ No newline at end of file From c57281570177e91d4f80a00ebcf8f58d5f9cda15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Tu=CC=88ken?= Date: Wed, 8 Jan 2020 07:41:56 +0300 Subject: [PATCH 104/411] Update application template UseSerilogEnrichers. --- .../MyCompanyName.MyProjectName.HttpApi.Host.csproj | 1 + .../MyProjectNameHttpApiHostModule.cs | 5 ++++- ...yCompanyName.MyProjectName.HttpApi.HostWithIds.csproj | 1 + .../MyProjectNameHttpApiHostModule.cs | 5 ++++- .../MyCompanyName.MyProjectName.IdentityServer.csproj | 2 ++ .../MyProjectNameIdentityServerModule.cs | 5 ++++- .../MyCompanyName.MyProjectName.Web.Host.csproj | 2 ++ .../MyProjectNameWebModule.cs | 6 ++++-- .../MyCompanyName.MyProjectName.Web.csproj | 1 + .../MyProjectNameWebModule.cs | 9 ++++----- 10 files changed, 27 insertions(+), 10 deletions(-) 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 19435bb1fa..173d10bbc2 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 @@ -20,6 +20,7 @@ + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index 59ba519ce4..3db35cd20b 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -15,6 +15,7 @@ using Microsoft.OpenApi.Models; using Volo.Abp; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy; +using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Autofac; using Volo.Abp.Caching; using Volo.Abp.Localization; @@ -28,7 +29,8 @@ namespace MyCompanyName.MyProjectName typeof(AbpAutofacModule), typeof(AbpAspNetCoreMvcUiMultiTenancyModule), typeof(MyProjectNameApplicationModule), - typeof(MyProjectNameEntityFrameworkCoreDbMigrationsModule) + typeof(MyProjectNameEntityFrameworkCoreDbMigrationsModule), + typeof(AbpSerilogModule) )] public class MyProjectNameHttpApiHostModule : AbpModule { @@ -178,6 +180,7 @@ namespace MyCompanyName.MyProjectName }); app.UseAuditing(); + app.UseSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } 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 038e2e4016..f59176e5af 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 @@ -20,6 +20,7 @@ + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs index a60d2ddb35..73a9d01be6 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs @@ -18,6 +18,7 @@ using Volo.Abp.Account.Web; using Volo.Abp.AspNetCore.Authentication.JwtBearer; using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Autofac; using Volo.Abp.Localization; using Volo.Abp.Modularity; @@ -34,7 +35,8 @@ namespace MyCompanyName.MyProjectName typeof(MyProjectNameEntityFrameworkCoreDbMigrationsModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule), typeof(AbpAspNetCoreAuthenticationJwtBearerModule), - typeof(AbpAccountWebIdentityServerModule) + typeof(AbpAccountWebIdentityServerModule), + typeof(AbpSerilogModule) )] public class MyProjectNameHttpApiHostModule : AbpModule { @@ -172,6 +174,7 @@ namespace MyCompanyName.MyProjectName }); app.UseAuditing(); + app.UseSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } 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 aecc6831be..e040f9642d 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 @@ -43,6 +43,8 @@ + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 2e2211791e..117386e588 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -18,6 +18,7 @@ using Volo.Abp.AspNetCore.Mvc.UI; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; +using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Auditing; using Volo.Abp.Autofac; using Volo.Abp.BackgroundJobs; @@ -35,7 +36,8 @@ namespace MyCompanyName.MyProjectName typeof(AbpAccountWebIdentityServerModule), typeof(AbpAccountApplicationModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule), - typeof(MyProjectNameEntityFrameworkCoreDbMigrationsModule) + typeof(MyProjectNameEntityFrameworkCoreDbMigrationsModule), + typeof(AbpSerilogModule) )] public class MyProjectNameIdentityServerModule : AbpModule { @@ -149,6 +151,7 @@ namespace MyCompanyName.MyProjectName app.UseAuthorization(); app.UseAbpRequestLocalization(); app.UseAuditing(); + app.UseSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } 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 66864acc82..ecdd1446fa 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 @@ -29,6 +29,8 @@ + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs index 28afed0c7c..c30a3b5d88 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs @@ -22,6 +22,7 @@ using Volo.Abp.AspNetCore.Mvc.UI; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; +using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Autofac; using Volo.Abp.AutoMapper; using Volo.Abp.Caching; @@ -49,7 +50,8 @@ namespace MyCompanyName.MyProjectName.Web typeof(AbpFeatureManagementWebModule), typeof(AbpHttpClientIdentityModelModule), typeof(AbpIdentityWebModule), - typeof(AbpTenantManagementWebModule) + typeof(AbpTenantManagementWebModule), + typeof(AbpSerilogModule) )] public class MyProjectNameWebModule : AbpModule { @@ -241,7 +243,7 @@ namespace MyCompanyName.MyProjectName.Web }); app.UseAuditing(); - + app.UseSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } 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 9540447c74..6cf7d25498 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 @@ -47,6 +47,7 @@ + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs index 87626719f3..cd27c9ece2 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs @@ -23,6 +23,7 @@ using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; +using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Autofac; using Volo.Abp.AutoMapper; using Volo.Abp.FeatureManagement; @@ -47,7 +48,8 @@ namespace MyCompanyName.MyProjectName.Web typeof(AbpAccountWebIdentityServerModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule), typeof(AbpAspNetCoreAuthenticationJwtBearerModule), - typeof(AbpTenantManagementWebModule) + typeof(AbpTenantManagementWebModule), + typeof(AbpSerilogModule) )] public class MyProjectNameWebModule : AbpModule { @@ -198,7 +200,6 @@ namespace MyCompanyName.MyProjectName.Web { app.UseErrorPage(); } - app.UseVirtualFiles(); app.UseRouting(); app.UseAuthentication(); @@ -208,18 +209,16 @@ namespace MyCompanyName.MyProjectName.Web { app.UseMultiTenancy(); } - app.UseIdentityServer(); app.UseAuthorization(); app.UseAbpRequestLocalization(); - app.UseSwagger(); app.UseSwaggerUI(options => { options.SwaggerEndpoint("/swagger/v1/swagger.json", "MyProjectName API"); }); - app.UseAuditing(); + app.UseSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } From 3028b1a431c06894068382aa3d2af925935d7db3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Tu=CC=88ken?= Date: Wed, 8 Jan 2020 07:54:17 +0300 Subject: [PATCH 105/411] Update module template UseSerilogEnrichers. --- .../MyCompanyName.MyProjectName.HttpApi.Host.csproj | 1 + .../MyProjectNameHttpApiHostModule.cs | 5 ++++- .../MyCompanyName.MyProjectName.IdentityServer.csproj | 1 + .../MyProjectNameIdentityServerModule.cs | 5 ++++- .../MyCompanyName.MyProjectName.Web.Host.csproj | 6 ++++++ .../MyProjectNameWebHostModule.cs | 6 ++++-- .../MyCompanyName.MyProjectName.Web.Unified.csproj | 1 + .../MyProjectNameWebUnifiedModule.cs | 5 ++++- 8 files changed, 25 insertions(+), 5 deletions(-) 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 fe10668840..07979b3f63 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 @@ -19,6 +19,7 @@ + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index f48706663e..972ccc9708 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -15,6 +15,7 @@ using Swashbuckle.AspNetCore.Swagger; using Volo.Abp; using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy; +using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.AuditLogging.EntityFrameworkCore; using Volo.Abp.Autofac; using Volo.Abp.Caching; @@ -39,7 +40,8 @@ namespace MyCompanyName.MyProjectName typeof(AbpEntityFrameworkCoreSqlServerModule), typeof(AbpAuditLoggingEntityFrameworkCoreModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), - typeof(AbpSettingManagementEntityFrameworkCoreModule) + typeof(AbpSettingManagementEntityFrameworkCoreModule), + typeof(AbpSerilogModule) )] public class MyProjectNameHttpApiHostModule : AbpModule { @@ -166,6 +168,7 @@ namespace MyCompanyName.MyProjectName options.SwaggerEndpoint("/swagger/v1/swagger.json", "Support APP API"); }); app.UseAuditing(); + app.UseSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } 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 b25ce4b603..062dceabaf 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 @@ -21,6 +21,7 @@ + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 5f0f80c05e..7205fdf225 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -17,6 +17,7 @@ using Volo.Abp.AspNetCore.Authentication.JwtBearer; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; +using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Auditing; using Volo.Abp.AuditLogging.EntityFrameworkCore; using Volo.Abp.Autofac; @@ -66,7 +67,8 @@ namespace MyCompanyName.MyProjectName typeof(AbpTenantManagementApplicationModule), typeof(AbpTenantManagementHttpApiModule), typeof(AbpAspNetCoreAuthenticationJwtBearerModule), - typeof(MyProjectNameApplicationContractsModule) + typeof(MyProjectNameApplicationContractsModule), + typeof(AbpSerilogModule) )] public class MyProjectNameIdentityServerModule : AbpModule { @@ -189,6 +191,7 @@ namespace MyCompanyName.MyProjectName options.SwaggerEndpoint("/swagger/v1/swagger.json", "Support APP API"); }); app.UseAuditing(); + app.UseSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); SeedData(context); 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 663a908ad8..cacefbdb7c 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 @@ -51,4 +51,10 @@ + + + ..\..\..\..\..\framework\src\Volo.Abp.AspNetCore.Serilog\bin\Debug\netcoreapp3.1\Volo.Abp.AspNetCore.Serilog.dll + + + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs index 473bdab2cf..cabb843736 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs @@ -21,6 +21,7 @@ using Volo.Abp.AspNetCore.Mvc.UI; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; +using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Autofac; using Volo.Abp.AutoMapper; using Volo.Abp.Caching; @@ -55,7 +56,8 @@ namespace MyCompanyName.MyProjectName typeof(AbpTenantManagementWebModule), typeof(AbpTenantManagementHttpApiClientModule), typeof(AbpFeatureManagementHttpApiClientModule), - typeof(AbpPermissionManagementHttpApiClientModule) + typeof(AbpPermissionManagementHttpApiClientModule), + typeof(AbpSerilogModule) )] public class MyProjectNameWebHostModule : AbpModule { @@ -249,7 +251,7 @@ namespace MyCompanyName.MyProjectName }); app.UseAuditing(); - + app.UseSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } 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 1099836b9c..35fe11e53d 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 @@ -17,6 +17,7 @@ + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs index 8390297a9f..ea653ca4a1 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs @@ -12,6 +12,7 @@ using Volo.Abp.Account; using Volo.Abp.Account.Web; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; +using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.AuditLogging.EntityFrameworkCore; using Volo.Abp.Autofac; using Volo.Abp.Data; @@ -56,7 +57,8 @@ namespace MyCompanyName.MyProjectName typeof(AbpTenantManagementWebModule), typeof(AbpTenantManagementApplicationModule), typeof(AbpTenantManagementEntityFrameworkCoreModule), - typeof(AbpAspNetCoreMvcUiBasicThemeModule) + typeof(AbpAspNetCoreMvcUiBasicThemeModule), + typeof(AbpSerilogModule) )] public class MyProjectNameWebUnifiedModule : AbpModule { @@ -137,6 +139,7 @@ namespace MyCompanyName.MyProjectName app.UseAbpRequestLocalization(); app.UseAuditing(); + app.UseSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); using (var scope = context.ServiceProvider.CreateScope()) From 3c479b952429898a1dda770a00d3c65291d1e232 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Tu=CC=88ken?= Date: Thu, 9 Jan 2020 00:20:27 +0300 Subject: [PATCH 106/411] Adding AbpAspNetCoreSerilogEnrichersOptions. --- .../AbpAspNetCoreSerilogEnrichersOptions.cs | 21 +++++++++++++++++++ .../Serilog/AbpSerilogEnrichersConsts.cs | 10 +++++++++ .../AspNetCore/Serilog/SerilogMiddleware.cs | 19 ++++++++--------- 3 files changed, 40 insertions(+), 10 deletions(-) create mode 100644 framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogEnrichersOptions.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogEnrichersConsts.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogEnrichersOptions.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogEnrichersOptions.cs new file mode 100644 index 0000000000..06453cb61f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogEnrichersOptions.cs @@ -0,0 +1,21 @@ +namespace Volo.Abp.AspNetCore.Serilog +{ + public class AbpAspNetCoreSerilogEnrichersOptions + { + public string TenantIdEnricherPropertyName { get; set; } + + public string UserIdEnricherPropertyName { get; set; } + + public string ClientIdEnricherPropertyName { get; set; } + + public string CorrelationIdPropertyName { get; set; } + + public AbpAspNetCoreSerilogEnrichersOptions() + { + TenantIdEnricherPropertyName = AbpSerilogEnrichersConsts.TenantIdEnricherPropertyName; + UserIdEnricherPropertyName = AbpSerilogEnrichersConsts.UserIdEnricherPropertyName; + ClientIdEnricherPropertyName = AbpSerilogEnrichersConsts.ClientIdEnricherPropertyName; + CorrelationIdPropertyName = AbpSerilogEnrichersConsts.CorrelationIdPropertyName; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogEnrichersConsts.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogEnrichersConsts.cs new file mode 100644 index 0000000000..bf2832b553 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogEnrichersConsts.cs @@ -0,0 +1,10 @@ +namespace Volo.Abp.AspNetCore.Serilog +{ + public class AbpSerilogEnrichersConsts + { + public const string TenantIdEnricherPropertyName = "TenantId"; + public const string UserIdEnricherPropertyName = "UserId"; + public const string ClientIdEnricherPropertyName = "ClientId"; + public const string CorrelationIdPropertyName = "CorrelationId"; + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/SerilogMiddleware.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/SerilogMiddleware.cs index 10bbdb188f..e03bcd5342 100644 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/SerilogMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/SerilogMiddleware.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Options; using Serilog.Context; using Serilog.Core; using Serilog.Core.Enrichers; @@ -14,26 +15,24 @@ namespace Volo.Abp.AspNetCore.Serilog { public class SerilogMiddleware : IMiddleware, ITransientDependency { - private const string TenantEnricherPropertyName = "TenantId"; - private const string UserEnricherPropertyName = "UserId"; - private const string ClientEnricherPropertyName = "ClientId"; - private const string CorrelationIdPropertyName = "CorrelationId"; - private readonly ICurrentClient _currentClient; private readonly ICurrentTenant _currentTenant; private readonly ICurrentUser _currentUser; private readonly ICorrelationIdProvider _correlationIdProvider; + private readonly AbpAspNetCoreSerilogEnrichersOptions _options; public SerilogMiddleware( ICurrentTenant currentTenant, ICurrentUser currentUser, ICurrentClient currentClient, - ICorrelationIdProvider correlationIdProvider) + ICorrelationIdProvider correlationIdProvider, + IOptions options) { _currentTenant = currentTenant; _currentUser = currentUser; _currentClient = currentClient; _correlationIdProvider = correlationIdProvider; + _options = options.Value; } public async Task InvokeAsync(HttpContext context, RequestDelegate next) @@ -42,23 +41,23 @@ namespace Volo.Abp.AspNetCore.Serilog if (_currentTenant?.Id != null) { - enrichers.Add(new PropertyEnricher(TenantEnricherPropertyName, _currentTenant.Id)); + enrichers.Add(new PropertyEnricher(_options.TenantIdEnricherPropertyName, _currentTenant.Id)); } if (_currentUser?.Id != null) { - enrichers.Add(new PropertyEnricher(UserEnricherPropertyName, _currentUser.Id)); + enrichers.Add(new PropertyEnricher(_options.UserIdEnricherPropertyName, _currentUser.Id)); } if (_currentClient?.Id != null) { - enrichers.Add(new PropertyEnricher(ClientEnricherPropertyName, _currentClient.Id)); + enrichers.Add(new PropertyEnricher(_options.ClientIdEnricherPropertyName, _currentClient.Id)); } var correlationId = _correlationIdProvider.Get(); if (!string.IsNullOrEmpty(correlationId)) { - enrichers.Add(new PropertyEnricher(CorrelationIdPropertyName, correlationId)); + enrichers.Add(new PropertyEnricher(_options.CorrelationIdPropertyName, correlationId)); } using (LogContext.Push(enrichers.ToArray())) From beecc1995732e37f76c49e9274dc522df541d512 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Tu=CC=88ken?= Date: Thu, 9 Jan 2020 10:39:49 +0300 Subject: [PATCH 107/411] Add test project. --- framework/Volo.Abp.sln | 7 ++ .../Volo.Abp.AspNetCore.Serilog.Tests.csproj | 24 +++++ .../AspNetCore/App/AbpSerilogTestModule.cs | 39 ++++++++ .../Volo/Abp/AspNetCore/App/CollectingSink.cs | 19 ++++ .../AspNetCore/App/SerilogTestController.cs | 27 ++++++ .../Volo/Abp/AspNetCore/App/Startup.cs | 20 ++++ .../AspNetCore/Serilog/AbpSerilogTestBase.cs | 31 ++++++ .../Serilog/Serilog_Enrichers_Tests.cs | 97 +++++++++++++++++++ 8 files changed, 264 insertions(+) create mode 100644 framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo.Abp.AspNetCore.Serilog.Tests.csproj create mode 100644 framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs create mode 100644 framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/CollectingSink.cs create mode 100644 framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/SerilogTestController.cs create mode 100644 framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/Startup.cs create mode 100644 framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/AbpSerilogTestBase.cs create mode 100644 framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln index b9a27d757f..b731aff187 100644 --- a/framework/Volo.Abp.sln +++ b/framework/Volo.Abp.sln @@ -258,6 +258,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Minify.Tests", "te EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Serilog", "src\Volo.Abp.AspNetCore.Serilog\Volo.Abp.AspNetCore.Serilog.csproj", "{3B801003-BE74-49ED-9749-DA5E99F45EBF}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Serilog.Tests", "test\Volo.Abp.AspNetCore.Serilog.Tests\Volo.Abp.AspNetCore.Serilog.Tests.csproj", "{9CAA07ED-FE5C-4427-A6FA-6C6CB5B4CC62}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -768,6 +770,10 @@ Global {3B801003-BE74-49ED-9749-DA5E99F45EBF}.Debug|Any CPU.Build.0 = Debug|Any CPU {3B801003-BE74-49ED-9749-DA5E99F45EBF}.Release|Any CPU.ActiveCfg = Release|Any CPU {3B801003-BE74-49ED-9749-DA5E99F45EBF}.Release|Any CPU.Build.0 = Release|Any CPU + {9CAA07ED-FE5C-4427-A6FA-6C6CB5B4CC62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9CAA07ED-FE5C-4427-A6FA-6C6CB5B4CC62}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9CAA07ED-FE5C-4427-A6FA-6C6CB5B4CC62}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9CAA07ED-FE5C-4427-A6FA-6C6CB5B4CC62}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -899,6 +905,7 @@ Global {928DC30D-C078-4BB4-A9F8-FE7252C67DC6} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} {E69182B3-350A-43F5-A935-5EBBEBECEF97} = {447C8A77-E5F0-4538-8687-7383196D04EA} {3B801003-BE74-49ED-9749-DA5E99F45EBF} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} + {9CAA07ED-FE5C-4427-A6FA-6C6CB5B4CC62} = {447C8A77-E5F0-4538-8687-7383196D04EA} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5} 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 new file mode 100644 index 0000000000..740c57949d --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo.Abp.AspNetCore.Serilog.Tests.csproj @@ -0,0 +1,24 @@ + + + + + + netcoreapp3.1 + Volo.Abp.AspNetCore.Serilog.Tests + Volo.Abp.AspNetCore.Serilog.Tests + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs new file mode 100644 index 0000000000..64ac0d76bc --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs @@ -0,0 +1,39 @@ +using Microsoft.AspNetCore.Builder; +using Volo.Abp.AspNetCore.MultiTenancy; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Serilog; +using Volo.Abp.AspNetCore.TestBase; +using Volo.Abp.Autofac; +using Volo.Abp.Modularity; +using Volo.Abp.MultiTenancy; + +namespace Volo.Abp.AspNetCore.App +{ + [DependsOn( + typeof(AbpAspNetCoreTestBaseModule), + typeof(AbpAspNetCoreMvcModule), + typeof(AbpAspNetCoreMultiTenancyModule), + typeof(AbpSerilogModule), + typeof(AbpAutofacModule) + )] + public class AbpSerilogTestModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => { options.IsEnabled = true; }); + } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + var app = context.GetApplicationBuilder(); + + app.UseCorrelationId(); + app.UseRouting(); + app.UseAuthorization(); + app.UseMultiTenancy(); + app.UseAuditing(); + app.UseSerilogEnrichers(); + app.UseMvcWithDefaultRouteAndArea(); + } + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/CollectingSink.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/CollectingSink.cs new file mode 100644 index 0000000000..fe403e02ef --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/CollectingSink.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; +using System.Linq; +using Serilog.Core; +using Serilog.Events; + +namespace Volo.Abp.AspNetCore.App +{ + public class CollectingSink : ILogEventSink + { + public List Events { get; } = new List(); + + public LogEvent SingleEvent => Events.Single(); + + public void Emit(LogEvent logEvent) + { + Events.Add(logEvent); + } + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/SerilogTestController.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/SerilogTestController.cs new file mode 100644 index 0000000000..972af4c801 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/SerilogTestController.cs @@ -0,0 +1,27 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.Tracing; + +namespace Volo.Abp.AspNetCore.App +{ + public class SerilogTestController : AbpController + { + private readonly ICorrelationIdProvider _correlationIdProvider; + + public SerilogTestController(ICorrelationIdProvider correlationIdProvider) + { + _correlationIdProvider = correlationIdProvider; + } + + public ActionResult Index() + { + return Content("Index-Result"); + } + + public ActionResult CorrelationId() + { + return Content(_correlationIdProvider.Get()); + } + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/Startup.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/Startup.cs new file mode 100644 index 0000000000..a1a58100d5 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/Startup.cs @@ -0,0 +1,20 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +namespace Volo.Abp.AspNetCore.App +{ + public class Startup + { + public void ConfigureServices(IServiceCollection services) + { + services.AddApplication(); + } + + public void Configure(IApplicationBuilder app, IWebHostEnvironment env,ILoggerFactory loggerFactory) + { + app.InitializeApplication(); + } + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/AbpSerilogTestBase.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/AbpSerilogTestBase.cs new file mode 100644 index 0000000000..96a13ac45b --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/AbpSerilogTestBase.cs @@ -0,0 +1,31 @@ +using System.Linq; +using Microsoft.Extensions.Hosting; +using Serilog; +using Serilog.Events; +using Volo.Abp.AspNetCore.App; + +namespace Volo.Abp.AspNetCore.Serilog +{ + public class AbpSerilogTestBase : AbpAspNetCoreTestBase + { + protected readonly CollectingSink CollectingSink = new CollectingSink(); + + protected override IHostBuilder CreateHostBuilder() + { + Log.Logger = new LoggerConfiguration() + .MinimumLevel.Information() + .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .Enrich.FromLogContext() + .WriteTo.Sink(CollectingSink) + .CreateLogger(); + + return base.CreateHostBuilder() + .UseSerilog(); + } + + protected LogEvent GetLogEvent(string text) + { + return CollectingSink.Events.FirstOrDefault(m => m.MessageTemplate.Text == text); + } + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs new file mode 100644 index 0000000000..bc45eb7c51 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs @@ -0,0 +1,97 @@ +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using Serilog.Events; +using Shouldly; +using Volo.Abp.AspNetCore.App; +using Volo.Abp.AspNetCore.MultiTenancy; +using Volo.Abp.MultiTenancy; +using Volo.Abp.MultiTenancy.ConfigurationStore; +using Xunit; + +namespace Volo.Abp.AspNetCore.Serilog +{ + public class Serilog_Enrichers_Tests : AbpSerilogTestBase + { + private const string ExecutedEndpointLogEventText = "Executed endpoint '{EndpointName}'"; + + private readonly Guid _testTenantId = Guid.NewGuid(); + private readonly string _testTenantName = "acme"; + + private readonly AbpAspNetCoreMultiTenancyOptions _tenancyOptions; + private readonly AbpAspNetCoreSerilogEnrichersOptions _serilogEnrichersOptions; + private readonly ILogger _logger; + + public Serilog_Enrichers_Tests() + { + _tenancyOptions = ServiceProvider.GetRequiredService>().Value; + _serilogEnrichersOptions = + ServiceProvider.GetRequiredService>().Value; + _logger = ServiceProvider.GetRequiredService>(); + } + + protected override IHostBuilder CreateHostBuilder() + { + return base.CreateHostBuilder().ConfigureServices(services => + { + services.Configure(options => + { + options.Tenants = new[] + { + new TenantConfiguration(_testTenantId, _testTenantName) + }; + }); + }); + } + + [Fact] + public async Task TenantId_Not_Set_Test() + { + var url = GetUrl(nameof(SerilogTestController.Index)); + var result = await GetResponseAsStringAsync(url).ConfigureAwait(false); + + var executedLogEvent = GetLogEvent(ExecutedEndpointLogEventText); + + executedLogEvent.ShouldNotBeNull(); + executedLogEvent.Properties.ContainsKey(_serilogEnrichersOptions.TenantIdEnricherPropertyName) + .ShouldBe(false); + } + + [Fact] + public async Task TenantId_Set_Test() + { + var url = + GetUrl(nameof(SerilogTestController.Index)) + + $"?{_tenancyOptions.TenantKey}={_testTenantName}"; + var result = await GetResponseAsStringAsync(url).ConfigureAwait(false); + + var executedLogEvent = GetLogEvent(ExecutedEndpointLogEventText); + + executedLogEvent.ShouldNotBeNull(); + executedLogEvent.Properties.ContainsKey(_serilogEnrichersOptions.TenantIdEnricherPropertyName) + .ShouldBe(true); + ((ScalarValue) executedLogEvent.Properties[_serilogEnrichersOptions.TenantIdEnricherPropertyName]).Value + .ShouldBe(_testTenantId); + } + + [Fact] + public async Task CorrelationId_Enrichers_Test() + { + var url = GetUrl(nameof(SerilogTestController.CorrelationId)); + var result = await GetResponseAsStringAsync(url).ConfigureAwait(false); + + var executedLogEvent = GetLogEvent(ExecutedEndpointLogEventText); + + executedLogEvent.ShouldNotBeNull(); + + executedLogEvent.Properties.ContainsKey(_serilogEnrichersOptions.CorrelationIdPropertyName) + .ShouldNotBeNull(); + + ((ScalarValue) executedLogEvent.Properties[_serilogEnrichersOptions.CorrelationIdPropertyName]).Value + .ShouldBe(result); + } + } +} \ No newline at end of file From c3669cc208512684adceacba8a7ccfa96731fe83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Tu=CC=88ken?= Date: Thu, 9 Jan 2020 10:40:23 +0300 Subject: [PATCH 108/411] Add Volo.Abp.AspNetCore.Serilog to common.ps1 --- nupkg/common.ps1 | 1 + 1 file changed, 1 insertion(+) diff --git a/nupkg/common.ps1 b/nupkg/common.ps1 index eeac13eac8..a582f8c115 100644 --- a/nupkg/common.ps1 +++ b/nupkg/common.ps1 @@ -40,6 +40,7 @@ $projects = ( "framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic", "framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared", "framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets", + "framework/src/Volo.Abp.AspNetCore.Serilog", "framework/src/Volo.Abp.AspNetCore.TestBase", "framework/src/Volo.Abp.Auditing", "framework/src/Volo.Abp.Authorization", From e84dde4f76abf5ccb45036afce868bde9266e4f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Tu=CC=88ken?= Date: Thu, 9 Jan 2020 11:06:50 +0300 Subject: [PATCH 109/411] Change Serilog.Extensions.Hosting package to Serilog.AspNetCore. --- .../Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj | 2 +- .../app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj | 2 +- .../Volo.ClientSimulation.Demo.csproj | 2 +- modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj | 2 +- .../Acme.BookStore.HttpApi.Host.csproj | 2 +- .../src/Acme.BookStore.Web/Acme.BookStore.Web.csproj | 2 +- .../Acme.BookStore.BookManagement.HttpApi.Host.csproj | 2 +- .../Acme.BookStore.BookManagement.IdentityServer.csproj | 2 +- .../Acme.BookStore.BookManagement.Web.Host.csproj | 2 +- .../Acme.BookStore.BookManagement.Web.Unified.csproj | 2 +- .../BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj | 2 +- .../src/DashboardDemo.Web/DashboardDemo.Web.csproj | 2 +- .../applications/AuthServer.Host/AuthServer.Host.csproj | 2 +- .../BackendAdminApp.Host/BackendAdminApp.Host.csproj | 2 +- .../applications/PublicWebSite.Host/PublicWebSite.Host.csproj | 2 +- .../BackendAdminAppGateway.Host.csproj | 2 +- .../gateways/InternalGateway.Host/InternalGateway.Host.csproj | 2 +- .../PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj | 2 +- .../BloggingService.Host/BloggingService.Host.csproj | 2 +- .../IdentityService.Host/IdentityService.Host.csproj | 2 +- .../ProductService.Host/ProductService.Host.csproj | 2 +- .../MyCompanyName.MyProjectName.HttpApi.Host.csproj | 2 +- .../MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj | 2 +- .../MyCompanyName.MyProjectName.IdentityServer.csproj | 2 +- .../MyCompanyName.MyProjectName.Web.Host.csproj | 2 +- .../MyCompanyName.MyProjectName.Web.csproj | 2 +- .../MyCompanyName.MyProjectName.HttpApi.Host.csproj | 2 +- .../MyCompanyName.MyProjectName.IdentityServer.csproj | 2 +- .../MyCompanyName.MyProjectName.Web.Host.csproj | 2 +- .../MyCompanyName.MyProjectName.Web.Unified.csproj | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj index 3384fcf332..931eb63088 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj @@ -9,7 +9,7 @@ - + diff --git a/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj b/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj index 750481d6a1..1ef5fb5c4c 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj +++ b/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj @@ -12,7 +12,7 @@ - + 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 8544cf6cff..0f9f7bde5e 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 @@ -8,7 +8,7 @@ - + diff --git a/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj b/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj index ef8fc992e3..c5e164247b 100644 --- a/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj +++ b/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj @@ -14,7 +14,7 @@ - + diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/Acme.BookStore.HttpApi.Host.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/Acme.BookStore.HttpApi.Host.csproj index 46638e1958..ad0861edc7 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/Acme.BookStore.HttpApi.Host.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/Acme.BookStore.HttpApi.Host.csproj @@ -10,7 +10,7 @@ - + diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj index b71bc65d91..9d4115179c 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj @@ -32,7 +32,7 @@ - + diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/Acme.BookStore.BookManagement.HttpApi.Host.csproj b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/Acme.BookStore.BookManagement.HttpApi.Host.csproj index db35047e19..60f118bc93 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/Acme.BookStore.BookManagement.HttpApi.Host.csproj +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/Acme.BookStore.BookManagement.HttpApi.Host.csproj @@ -10,7 +10,7 @@ - + diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Acme.BookStore.BookManagement.IdentityServer.csproj b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Acme.BookStore.BookManagement.IdentityServer.csproj index c0eebd425a..d9b39f407e 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Acme.BookStore.BookManagement.IdentityServer.csproj +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Acme.BookStore.BookManagement.IdentityServer.csproj @@ -8,7 +8,7 @@ - + diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/Acme.BookStore.BookManagement.Web.Host.csproj b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/Acme.BookStore.BookManagement.Web.Host.csproj index 0534b56365..1df46016b4 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/Acme.BookStore.BookManagement.Web.Host.csproj +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/Acme.BookStore.BookManagement.Web.Host.csproj @@ -10,7 +10,7 @@ - + diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Acme.BookStore.BookManagement.Web.Unified.csproj b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Acme.BookStore.BookManagement.Web.Unified.csproj index 9fb034d5fe..04993f9b69 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Acme.BookStore.BookManagement.Web.Unified.csproj +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Acme.BookStore.BookManagement.Web.Unified.csproj @@ -10,7 +10,7 @@ - + diff --git a/samples/BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj b/samples/BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj index 153b6f38e3..832114ce3b 100644 --- a/samples/BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj +++ b/samples/BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj @@ -23,7 +23,7 @@ - + diff --git a/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemo.Web.csproj b/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemo.Web.csproj index 466a7359bc..f00f144407 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemo.Web.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemo.Web.csproj @@ -31,7 +31,7 @@ - + diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj index 337657a831..47bf7813f8 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj @@ -12,7 +12,7 @@ - + diff --git a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj index 911593b16a..a22e073228 100644 --- a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj +++ b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj @@ -12,7 +12,7 @@ - + diff --git a/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj b/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj index 5574e33b3b..3b4780b2cd 100644 --- a/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj +++ b/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj @@ -12,7 +12,7 @@ - + diff --git a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj index 9d2d4c3cae..554555940d 100644 --- a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj @@ -12,7 +12,7 @@ - + diff --git a/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj b/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj index 8d7d8bf135..73479d93ad 100644 --- a/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj @@ -12,7 +12,7 @@ - + diff --git a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj index 2c01555e87..8ece4fe5f4 100644 --- a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj @@ -12,7 +12,7 @@ - + diff --git a/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj b/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj index 5a9c5375d0..cd5bbc8b01 100644 --- a/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj @@ -12,7 +12,7 @@ - + diff --git a/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj b/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj index 09e91582ab..b9dd199a6c 100644 --- a/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj @@ -12,7 +12,7 @@ - + diff --git a/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj b/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj index f871ed5983..dc4f6aface 100644 --- a/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj @@ -12,7 +12,7 @@ - + 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 173d10bbc2..d41d991542 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 @@ -10,7 +10,7 @@ - + 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 f59176e5af..9c7f66798e 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 @@ -10,7 +10,7 @@ - + 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 e040f9642d..6ff7bde240 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 @@ -32,7 +32,7 @@ - + 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 ecdd1446fa..0bff1f34fc 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 @@ -16,7 +16,7 @@ - + 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 6cf7d25498..db3998cc62 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 @@ -32,7 +32,7 @@ - + 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 07979b3f63..f041445109 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 @@ -10,7 +10,7 @@ - + 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 062dceabaf..2815d81262 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 @@ -8,7 +8,7 @@ - + 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 cacefbdb7c..6d6b11231a 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 @@ -10,7 +10,7 @@ - + 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 35fe11e53d..47f8629dde 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 @@ -10,7 +10,7 @@ - + From 9aece8dc421cb65a26c11b54f35e0a26ad573f80 Mon Sep 17 00:00:00 2001 From: mperk Date: Thu, 9 Jan 2020 14:44:10 +0300 Subject: [PATCH 110/411] updatable permissionGrant provider key --- .../Volo.Abp.PermissionManagement.sln | 4 ++-- .../PermissionManagement/IPermissionManager.cs | 2 ++ .../Abp/PermissionManagement/PermissionGrant.cs | 2 +- .../Abp/PermissionManagement/PermissionManager.cs | 6 ++++++ ....PermissionManagement.Application.Tests.csproj | 2 +- ....Abp.PermissionManagement.Domain.Tests.csproj} | 0 .../PermissionManager_Tests.cs | 15 +++++++++++++++ 7 files changed, 27 insertions(+), 4 deletions(-) rename modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/{Volo.Abp.PermissionManagement.Tests.csproj => Volo.Abp.PermissionManagement.Domain.Tests.csproj} (100%) diff --git a/modules/permission-management/Volo.Abp.PermissionManagement.sln b/modules/permission-management/Volo.Abp.PermissionManagement.sln index 5812918a3c..16071f9e10 100644 --- a/modules/permission-management/Volo.Abp.PermissionManagement.sln +++ b/modules/permission-management/Volo.Abp.PermissionManagement.sln @@ -19,7 +19,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.PermissionManageme EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.PermissionManagement.Web", "src\Volo.Abp.PermissionManagement.Web\Volo.Abp.PermissionManagement.Web.csproj", "{97A386F8-DAE0-4BEA-ADE5-1D57C3336515}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.PermissionManagement.Tests", "test\Volo.Abp.PermissionManagement.Tests\Volo.Abp.PermissionManagement.Tests.csproj", "{48297098-79D0-413B-939C-6C432142C42D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.PermissionManagement.Domain.Tests", "test\Volo.Abp.PermissionManagement.Tests\Volo.Abp.PermissionManagement.Domain.Tests.csproj", "{48297098-79D0-413B-939C-6C432142C42D}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.PermissionManagement.TestBase", "test\Volo.Abp.PermissionManagement.TestBase\Volo.Abp.PermissionManagement.TestBase.csproj", "{49259427-CAEB-4FAE-81E4-848F789487EA}" EndProject @@ -33,7 +33,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.PermissionManageme EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.PermissionManagement.HttpApi.Client", "src\Volo.Abp.PermissionManagement.HttpApi.Client\Volo.Abp.PermissionManagement.HttpApi.Client.csproj", "{1CD80519-9431-48DB-B0EA-291A73FF9F49}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.PermissionManagement.Application.Tests", "test\Volo.Abp.PermissionManagement.Application.Tests\Volo.Abp.PermissionManagement.Application.Tests.csproj", "{A0F72F5F-3713-4E06-ADB7-15ADFDCB79B1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.PermissionManagement.Application.Tests", "test\Volo.Abp.PermissionManagement.Application.Tests\Volo.Abp.PermissionManagement.Application.Tests.csproj", "{A0F72F5F-3713-4E06-ADB7-15ADFDCB79B1}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManager.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManager.cs index 888f06235e..26310a12fe 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManager.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManager.cs @@ -13,5 +13,7 @@ namespace Volo.Abp.PermissionManagement Task> GetAllAsync([NotNull] string providerName, [NotNull] string providerKey); Task SetAsync(string permissionName, string providerName, string providerKey, bool isGranted); + + Task UpdateProviderKeyAsync(PermissionGrant permissionGrant, string providerKey); } } \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionGrant.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionGrant.cs index 7ec99fbe3a..4f951a92cc 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionGrant.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionGrant.cs @@ -17,7 +17,7 @@ namespace Volo.Abp.PermissionManagement public virtual string ProviderName { get; protected set; } [CanBeNull] - public virtual string ProviderKey { get; protected set; } + public virtual string ProviderKey { get; protected internal set; } protected PermissionGrant() { diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs index d7d1dd70c1..4f7d177802 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs @@ -99,6 +99,12 @@ namespace Volo.Abp.PermissionManagement await provider.SetAsync(permissionName, providerKey, isGranted).ConfigureAwait(false); } + public async Task UpdateProviderKeyAsync(PermissionGrant permissionGrant, string providerKey) + { + permissionGrant.ProviderKey = providerKey; + return await PermissionGrantRepository.UpdateAsync(permissionGrant).ConfigureAwait(false); + } + protected virtual async Task GetInternalAsync(PermissionDefinition permission, string providerName, string providerKey) { var result = new PermissionWithGrantedProviders(permission.Name, false); 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 92cd6ddd5d..81e3861ed9 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 @@ -10,7 +10,7 @@ - + diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo.Abp.PermissionManagement.Tests.csproj b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo.Abp.PermissionManagement.Domain.Tests.csproj similarity index 100% rename from modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo.Abp.PermissionManagement.Tests.csproj rename to modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo.Abp.PermissionManagement.Domain.Tests.csproj diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionManager_Tests.cs b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionManager_Tests.cs index 6b838a4fc0..66f0de1755 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionManager_Tests.cs +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionManager_Tests.cs @@ -104,5 +104,20 @@ namespace Volo.Abp.PermissionManagement true).ConfigureAwait(false)).ConfigureAwait(false); } + [Fact] + public async Task UpdateProviderKey() + { + await _permissionGrantRepository.InsertAsync(new PermissionGrant( + Guid.NewGuid(), + "MyPermission1", + "Test", + "Test") + ).ConfigureAwait(false); + var permissionGrant = await _permissionGrantRepository.FindAsync("MyPermission1", "Test", "Test").ConfigureAwait(false); + permissionGrant.ProviderKey.ShouldBe("Test"); + + await _permissionManager.UpdateProviderKeyAsync(permissionGrant, "NewProviderKey").ConfigureAwait(false); + (await _permissionGrantRepository.FindAsync("MyPermission1", "Test", "NewProviderKey").ConfigureAwait(false)).ShouldNotBeNull(); + } } } From 27c565fc1efde688a7c956480acaf9084563e97e Mon Sep 17 00:00:00 2001 From: mperk Date: Thu, 9 Jan 2020 14:48:20 +0300 Subject: [PATCH 111/411] event permissions update when role update --- .../Volo/Abp/Identity/IdentityRole.cs | 16 +++++ .../Identity/IdentityRoleNameChangedEvent.cs | 8 +++ .../Volo/Abp/Identity/IdentityRoleStore.cs | 2 +- ...ermissionManagement.Domain.Identity.csproj | 1 + .../Identity/RoleUpdateEventHandler.cs | 42 ++++++++++++++ .../Abp/Identity/RoleChangingEvents_Test.cs | 58 +++++++++++++++++++ 6 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleNameChangedEvent.cs create mode 100644 modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs create mode 100644 modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/RoleChangingEvents_Test.cs diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRole.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRole.cs index 825266e993..dac173719a 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRole.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRole.cs @@ -100,6 +100,22 @@ namespace Volo.Abp.Identity Claims.RemoveAll(c => c.ClaimType == claim.Type && c.ClaimValue == claim.Value); } + public virtual void ChangeName(string name) + { + Check.NotNullOrWhiteSpace(name, nameof(name)); + + var oldName = Name; + Name = name; + + AddLocalEvent( + new IdentityRoleNameChangedEvent + { + IdentityRole = this, + OldName = oldName + } + ); + } + public override string ToString() { return $"{base.ToString()}, Name = {Name}"; diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleNameChangedEvent.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleNameChangedEvent.cs new file mode 100644 index 0000000000..f14f0a71ed --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleNameChangedEvent.cs @@ -0,0 +1,8 @@ +namespace Volo.Abp.Identity +{ + public class IdentityRoleNameChangedEvent + { + public IdentityRole IdentityRole { get; set; } + public string OldName { get; set; } + } +} diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleStore.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleStore.cs index 1ca46b0830..004fc0c20c 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleStore.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleStore.cs @@ -165,7 +165,7 @@ namespace Volo.Abp.Identity Check.NotNull(role, nameof(role)); - role.Name = roleName; + role.ChangeName(roleName); return Task.CompletedTask; } diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo.Abp.PermissionManagement.Domain.Identity.csproj b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo.Abp.PermissionManagement.Domain.Identity.csproj index ea663ba49b..ee8e336088 100644 --- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo.Abp.PermissionManagement.Domain.Identity.csproj +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo.Abp.PermissionManagement.Domain.Identity.csproj @@ -16,6 +16,7 @@ + diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs new file mode 100644 index 0000000000..8ee0d4c6d6 --- /dev/null +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs @@ -0,0 +1,42 @@ +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Entities.Events; +using Volo.Abp.EventBus; +using Volo.Abp.Identity; + +namespace Volo.Abp.PermissionManagement.Identity +{ + public class RoleUpdateEventHandler : + ILocalEventHandler, + ITransientDependency + { + protected IIdentityRoleRepository RoleRepository { get; } + protected IPermissionManager PermissionManager { get; } + protected IPermissionGrantRepository PermissionGrantRepository { get; } + + public RoleUpdateEventHandler( + IIdentityRoleRepository roleRepository, + IPermissionManager permissionManager, + IPermissionGrantRepository permissionGrantRepository) + { + RoleRepository = roleRepository; + PermissionManager = permissionManager; + PermissionGrantRepository = permissionGrantRepository; + } + + public async Task HandleEventAsync(IdentityRoleNameChangedEvent eventData) + { + var role = await RoleRepository.FindAsync(eventData.IdentityRole.Id, false).ConfigureAwait(false); + if (role == null) + { + return; + } + + var permissionGrantsInRole = await PermissionGrantRepository.GetListAsync("R", eventData.OldName).ConfigureAwait(false); + foreach (var permissionGrant in permissionGrantsInRole) + { + await PermissionManager.UpdateProviderKeyAsync(permissionGrant, eventData.IdentityRole.Name).ConfigureAwait(false); + } + } + } +} diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/RoleChangingEvents_Test.cs b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/RoleChangingEvents_Test.cs new file mode 100644 index 0000000000..1a4405c9e4 --- /dev/null +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/RoleChangingEvents_Test.cs @@ -0,0 +1,58 @@ +using Microsoft.AspNetCore.Identity; +using Shouldly; +using System.Threading.Tasks; +using Volo.Abp.EventBus.Distributed; +using Volo.Abp.Guids; +using Volo.Abp.PermissionManagement; +using Volo.Abp.Uow; +using Xunit; + +namespace Volo.Abp.Identity +{ + public class RoleChangingEvents_Test : AbpIdentityDomainTestBase + { + protected readonly IIdentityRoleRepository RoleRepository; + protected readonly IPermissionGrantRepository PermissionGrantRepository; + protected readonly IdentityRoleManager RoleManager; + protected readonly ILookupNormalizer LookupNormalizer; + protected readonly IGuidGenerator GuidGenerator; + protected readonly IUnitOfWorkManager UowManager; + + public RoleChangingEvents_Test() + { + RoleRepository = GetRequiredService(); ; + PermissionGrantRepository = GetRequiredService(); ; + RoleManager = GetRequiredService(); ; + LookupNormalizer = GetRequiredService(); ; + GuidGenerator = GetRequiredService(); + UowManager = GetRequiredService(); + } + + [Fact] + public async Task Role_Update_Event_Test() + { + var role = await RoleRepository + .FindByNormalizedNameAsync(LookupNormalizer.NormalizeName("moderator")) + .ConfigureAwait(false); + + var permissionGrantsInRole = await PermissionGrantRepository.GetListAsync("R", role.Name).ConfigureAwait(false); + permissionGrantsInRole.ShouldNotBeNull(); + permissionGrantsInRole.Count.ShouldBeGreaterThan(0); + var count = permissionGrantsInRole.Count; + + using (var uow = UowManager.Begin()) + { + var identityResult = await RoleManager.SetRoleNameAsync(role, "TestModerator").ConfigureAwait(false); + identityResult.Succeeded.ShouldBeTrue(); + var xx = await RoleRepository.UpdateAsync(role).ConfigureAwait(false); + await uow.CompleteAsync().ConfigureAwait(false); + } + + role = await RoleRepository.GetAsync(role.Id).ConfigureAwait(false); + role.Name.ShouldBe("TestModerator"); + + permissionGrantsInRole = await PermissionGrantRepository.GetListAsync("R", role.Name).ConfigureAwait(false); + permissionGrantsInRole.Count.ShouldBe(count); + } + } +} From 1b2476ad7bd60d5a9fdce270f8f1c3944aaf7e55 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 9 Jan 2020 17:45:53 +0300 Subject: [PATCH 112/411] tests(theme-shared): add table.component.spec #2537 --- .../src/lib/tests/loading.directive.spec.ts | 4 +- .../src/lib/tests/table.component.spec.ts | 74 +++++++++++++++++++ 2 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/tests/table.component.spec.ts diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/loading.directive.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/loading.directive.spec.ts index e19dfa9853..1b49b8581c 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/loading.directive.spec.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/loading.directive.spec.ts @@ -55,10 +55,10 @@ describe('LoadingDirective', () => { }); it('should remove the loading component to the DOM', done => { - const spy = jest.spyOn(spectator.directive['renderer'], 'removeChild'); + const rendererSpy = jest.spyOn(spectator.directive['renderer'], 'removeChild'); spectator.setHostInput({ status: false }); setTimeout(() => { - expect(spy).toHaveBeenCalled(); + expect(rendererSpy).toHaveBeenCalled(); expect(spectator.directive.rootNode).toBeFalsy(); done(); }, 0); diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/table.component.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/table.component.spec.ts new file mode 100644 index 0000000000..df2894cc3e --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/table.component.spec.ts @@ -0,0 +1,74 @@ +import { createHostFactory, SpectatorHost } from '@ngneat/spectator/jest'; +import { PaginationComponent, TableComponent } from '../components'; + +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ + name: 'abpLocalization', +}) +export class DummyLocalizationPipe implements PipeTransform { + transform(value: any, ...args: any[]): any { + return value; + } +} + +describe('TableComponent', () => { + let spectator: SpectatorHost; + const createHost = createHostFactory({ + component: TableComponent, + declarations: [PaginationComponent, DummyLocalizationPipe], + }); + + describe('without value', () => { + beforeEach(() => { + spectator = createHost( + ` + + + name`, + { + hostProps: { + value: [], + }, + }, + ); + }); + + it('should display the empty message', () => { + expect(spectator.query('tr.empty-row>div')).toHaveText( + 'AbpAccount::NoDataAvailableInDatatable', + ); + }); + + it('should display the header', () => { + expect(spectator.query('thead')).toBeTruthy(); + expect(spectator.query('th')).toHaveText('name'); + }); + + it('should place the colgroup template', () => { + expect(spectator.query('colgroup')).toBeTruthy(); + expect(spectator.query('col')).toBeTruthy(); + }); + }); + + describe('with value', () => { + // TODO + beforeEach(() => { + spectator = createHost( + ` + name + `, + { + hostProps: { + value: [], + }, + }, + ); + }); + }); +}); From 4f3df423abb80d94943beb27b16b4795a3fdb9a2 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 9 Jan 2020 17:47:00 +0300 Subject: [PATCH 113/411] refactor(theme-shared): change the table row hover style #2537 --- .../pagination/pagination.component.ts | 2 ++ .../lib/components/table/table.component.html | 7 ++-- .../lib/components/table/table.component.ts | 32 +++++++------------ 3 files changed, 17 insertions(+), 24 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/pagination/pagination.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/pagination/pagination.component.ts index 69fcdf31ff..964445c192 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/pagination/pagination.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/pagination/pagination.component.ts @@ -11,6 +11,8 @@ export class PaginationComponent implements OnInit { return this._value; } set value(newValue: number) { + if (this._value === newValue) return; + this._value = newValue; this.valueChange.emit(newValue); } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html index 99fe8c31f2..6898a9964b 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html @@ -6,7 +6,8 @@ @@ -60,9 +61,9 @@ diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts index 2dc864e496..3c9995a388 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts @@ -1,4 +1,5 @@ import { + AfterViewInit, Component, ElementRef, EventEmitter, @@ -8,10 +9,7 @@ import { TrackByFunction, ViewChild, ViewEncapsulation, - AfterViewInit, } from '@angular/core'; -import { Observable, of } from 'rxjs'; -import { delay } from 'rxjs/operators'; @Component({ selector: 'abp-table', @@ -20,11 +18,11 @@ import { delay } from 'rxjs/operators'; ` .ui-table .ui-table-tbody > tr:nth-child(even):hover, .ui-table .ui-table-tbody > tr:hover { - background-color: #eaeaea; + filter: brightness(90%); } .ui-table .ui-table-tbody > tr.empty-row:hover { - background-color: transparent; + filter: none; } .ui-table .ui-table-tbody > tr.empty-row > div { @@ -35,8 +33,9 @@ import { delay } from 'rxjs/operators'; ], encapsulation: ViewEncapsulation.None, }) -export class TableComponent implements AfterViewInit { +export class TableComponent { private _totalRecords: number; + bodyScrollLeft = 0; @Input() value: any[]; @@ -59,6 +58,9 @@ export class TableComponent implements AfterViewInit { @Input() rows: number; + @Input() + page = 1; + @Input() trackingProp = 'id'; @@ -71,16 +73,6 @@ export class TableComponent implements AfterViewInit { @ViewChild('wrapper', { read: ElementRef, static: false }) wrapperRef: ElementRef; - page = 1; - - bodyScrollLeft = 0; - - colspan: number; - - trackByFn: TrackByFunction = (_, value) => { - return typeof value === 'object' ? value[this.trackingProp] || value : value; - }; - @Input() get totalRecords(): number { return this._totalRecords || this.value.length; @@ -108,9 +100,7 @@ export class TableComponent implements AfterViewInit { return this.value.slice(start, start + this.rows); } - ngAfterViewInit() { - setTimeout(() => { - this.colspan = this.wrapperRef.nativeElement.querySelectorAll('th').length; - }, 0); - } + trackByFn: TrackByFunction = (_, value) => { + return typeof value === 'object' ? value[this.trackingProp] || value : value; + }; } From 78e4429bcc3ea6e707097b3ba243072d5e3652ed Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 9 Jan 2020 19:18:01 +0300 Subject: [PATCH 114/411] feat(theme-shared): add toast-container component related issue: #2537 --- .../toast-container.component.html | 11 +++++ .../toast-container.component.scss | 12 +++++ .../toast-container.component.ts | 46 +++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.html create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.scss create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.html new file mode 100644 index 0000000000..c3529e99ff --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.html @@ -0,0 +1,11 @@ +
+ +
diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.scss new file mode 100644 index 0000000000..facbd8b838 --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.scss @@ -0,0 +1,12 @@ +.toast-container { + position: fixed; + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-end; + min-width: 350px; + min-height: 80px; + &.new-on-top { + flex-direction: column-reverse; + } +} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts new file mode 100644 index 0000000000..4c664bb5d2 --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts @@ -0,0 +1,46 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { Toaster } from '../../models'; +import { toastInOut } from '../../animations'; +import { ToasterService } from '../../services/toaster.service'; + +@Component({ + selector: 'abp-toast-container', + templateUrl: './toast-container.component.html', + styleUrls: ['./toast-container.component.scss'], + animations: [toastInOut], +}) +export class ToastContainerComponent implements OnInit { + toasts = [] as Toaster.Toast[]; + + @Input() + top: number; + + @Input() + right: number; + + @Input() + bottom: number; + + @Input() + left: number; + + @Input() + toastKey: string; + + constructor(private toastService: ToasterService) {} + + ngOnInit() { + this.toastService.toasts$.subscribe(toasts => { + this.toasts = this.toastKey + ? toasts.filter(t => { + return t.options && t.options.containerKey !== this.toastKey; + }) + : toasts; + }); + } + + trackByFunc(index, toast) { + if (!toast) return null; + return toast.options.id; + } +} From e34d9db20af5ae55412ce3dc377749f4fdffd7d0 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 9 Jan 2020 19:19:03 +0300 Subject: [PATCH 115/411] refactor(theme-shared): change toast component and its style --- .../lib/components/toast/toast.component.html | 16 ++++ .../lib/components/toast/toast.component.scss | 77 ++++++++++++++++ .../lib/components/toast/toast.component.ts | 87 ++++++++++++++----- 3 files changed, 158 insertions(+), 22 deletions(-) create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.html create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.html new file mode 100644 index 0000000000..6e6aa2b641 --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.html @@ -0,0 +1,16 @@ +
+
+ +
+
+ +
+ {{ toast.title | abpLocalization: messageLocalizationParams }} +
+
+ {{ toast.message | abpLocalization: titleLocalizationParams }} +
+
+
diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss new file mode 100644 index 0000000000..98ce628954 --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss @@ -0,0 +1,77 @@ +@mixin fillColor($background, $color) { + border: 2px solid $background; + background-color: $background; + color: $color; + box-shadow: 0 0 10px -5px rgba(#000, 0.4); + &:hover { + border: 2px solid darken($background, 5); + background-color: darken($background, 5); + box-shadow: 0 0 15px -5px rgba(#000, 0.4); + } +} + +.toast { + display: grid; + grid-template-columns: 50px 1fr; + gap: 10px; + margin: 5px 0; + padding: 10px; + border-radius: 0px; + width: 350px; + @include fillColor(#f0f0f0, #000); + user-select: none; + box-shadow: 0 0 10px -5px rgba(#000, 0.4); + &.toast-success { + @include fillColor(#51a351, #fff); + } + &.toast-info { + @include fillColor(#2f96b4, #fff); + } + &.toast-warning { + @include fillColor(#f89406, #fff); + } + &.toast-error { + @include fillColor(#bd362f, #fff); + } + .toast-icon { + display: flex; + align-items: center; + justify-content: center; + .icon { + } + } + .toast-content { + position: relative; + .close-button { + position: absolute; + top: 0; + right: 0; + display: flex; + align-items: center; + justify-content: center; + margin: 0; + padding: 5px 10px 5px 5px; + width: 25px; + height: 25px; + border: none; + border-radius: 50%; + background: transparent; + &:focus { + outline: none; + } + .close-icon { + width: 16px; + height: 16px; + stroke: #000; + } + } + .toast-title { + margin: 0; + padding: 0; + font-size: 1rem; + font-weight: 600; + } + .toast-message { + } + } +} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts index 5d21a535e8..afdf73ef88 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts @@ -1,26 +1,69 @@ -import { Component } from '@angular/core'; +import { Component, Input, OnInit } from '@angular/core'; +import { Toaster } from '../../models'; +import { ToasterService } from '../../services/toaster.service'; +import { LocalizationService } from '@abp/ng.core'; @Component({ selector: 'abp-toast', - // tslint:disable-next-line: component-max-inline-declarations - template: ` - - - -
-
{{ message.summary | abpLocalization: message.titleLocalizationParams }}
-
{{ message.detail | abpLocalization: message.messageLocalizationParams }}
-
-
-
- `, + templateUrl: './toast.component.html', + styleUrls: ['./toast.component.scss'], }) -export class ToastComponent {} +export class ToastComponent implements OnInit { + @Input() + toast: Toaster.Toast; + + get severityClass(): string { + if (!this.toast || !this.toast.severity) return ''; + return `toast-${this.toast.severity}`; + } + + get iconClass(): string { + switch (this.toast.severity) { + case 'success': + return 'fa-check-circle'; + case 'info': + return 'fa-info-circle'; + case 'warning': + return 'fa-exclamation-triangle'; + case 'error': + return 'fa-times-circle'; + default: + return 'fa-exclamation-circle'; + } + } + + get titleLocalizationParams(): string { + return this.localizationService.instant( + this.toast.title, + ...this.toast.options.titleLocalizationParams, + ); + } + + get messageLocalizationParams() { + return this.localizationService.instant( + this.toast.message, + ...this.toast.options.messageLocalizationParams, + ); + } + + constructor( + private toastService: ToasterService, + private localizationService: LocalizationService, + ) {} + + ngOnInit() { + if (this.toast.options && this.toast.options.sticky) return; + const timeout = this.toast.options.life || 5000; + setTimeout(() => { + this.close(); + }, timeout); + } + + close() { + this.toastService.remove(this.toast.options.id); + } + + tap() { + if (this.toast.options && this.toast.options.tapToDismiss) this.close(); + } +} From f085267d12b1693e233a0b6b30227f685e819ce5 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 9 Jan 2020 19:19:52 +0300 Subject: [PATCH 116/411] refactor(theme-shared): remove abstract toaster class --- .../theme-shared/src/lib/abstracts/toaster.ts | 56 ------------------- 1 file changed, 56 deletions(-) delete mode 100644 npm/ng-packs/packages/theme-shared/src/lib/abstracts/toaster.ts diff --git a/npm/ng-packs/packages/theme-shared/src/lib/abstracts/toaster.ts b/npm/ng-packs/packages/theme-shared/src/lib/abstracts/toaster.ts deleted file mode 100644 index d66c29fc3b..0000000000 --- a/npm/ng-packs/packages/theme-shared/src/lib/abstracts/toaster.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { MessageService } from 'primeng/components/common/messageservice'; -import { Observable, Subject } from 'rxjs'; -import { Toaster } from '../models/toaster'; -import { Config } from '@abp/ng.core'; - -export abstract class AbstractToaster { - status$: Subject; - - key = 'abpToast'; - - sticky = false; - - constructor(protected messageService: MessageService) {} - - info(message: Config.LocalizationParam, title: Config.LocalizationParam, options?: T): Observable { - return this.show(message, title, 'info', options); - } - - success(message: Config.LocalizationParam, title: Config.LocalizationParam, options?: T): Observable { - return this.show(message, title, 'success', options); - } - - warn(message: Config.LocalizationParam, title: Config.LocalizationParam, options?: T): Observable { - return this.show(message, title, 'warn', options); - } - - error(message: Config.LocalizationParam, title: Config.LocalizationParam, options?: T): Observable { - return this.show(message, title, 'error', options); - } - - protected show( - message: Config.LocalizationParam, - title: Config.LocalizationParam, - severity: Toaster.Severity, - options?: T, - ): Observable { - this.messageService.clear(this.key); - - this.messageService.add({ - severity, - detail: message || '', - summary: title || '', - ...options, - key: this.key, - ...(typeof (options || ({} as any)).sticky === 'undefined' && { sticky: this.sticky }), - }); - this.status$ = new Subject(); - return this.status$; - } - - clear(status?: Toaster.Status) { - this.messageService.clear(this.key); - this.status$.next(status || Toaster.Status.dismiss); - this.status$.complete(); - } -} From e8345efea2403442c29ccc1be00e3b40178c7fcd Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 9 Jan 2020 19:20:52 +0300 Subject: [PATCH 117/411] refactor(theme-shared): change toaster types and interfaces related issue: #2537 --- .../theme-shared/src/lib/models/toaster.ts | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/models/toaster.ts b/npm/ng-packs/packages/theme-shared/src/lib/models/toaster.ts index f029911dae..4f407d129d 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/models/toaster.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/models/toaster.ts @@ -1,17 +1,25 @@ export namespace Toaster { - export interface Options { - id?: any; - closable?: boolean; + export interface ToastOptions { life?: number; sticky?: boolean; - data?: any; + closable?: boolean; + tapToDismiss?: boolean; messageLocalizationParams?: string[]; titleLocalizationParams?: string[]; + id: any; + containerKey?: string; + } + + export interface Toast { + message: string; + title?: string; + severity?: string; + options?: ToastOptions; } - export type Severity = 'success' | 'info' | 'warn' | 'error'; + export type Severity = 'neutral' | 'success' | 'info' | 'warning' | 'error'; - export const enum Status { + export enum Status { confirm = 'confirm', reject = 'reject', dismiss = 'dismiss', From 13ed5e03aa013b65aa15a42ec133d9a29c4ca803 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 9 Jan 2020 19:21:41 +0300 Subject: [PATCH 118/411] feat(theme-shared): import toast-container component to module related issue: #2537 --- .../theme-shared/src/lib/theme-shared.module.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts index b40a4ea05a..9cab044780 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts @@ -1,9 +1,10 @@ import { CoreModule, LazyLoadService } from '@abp/ng.core'; +import { DatePipe } from '@angular/common'; import { APP_INITIALIZER, Injector, ModuleWithProviders, NgModule } from '@angular/core'; +import { NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap'; import { NgxValidateCoreModule } from '@ngx-validate/core'; import { MessageService } from 'primeng/components/common/messageservice'; import { ToastModule } from 'primeng/toast'; -import { forkJoin } from 'rxjs'; import { BreadcrumbComponent } from './components/breadcrumb/breadcrumb.component'; import { ButtonComponent } from './components/button/button.component'; import { ChartComponent } from './components/chart/chart.component'; @@ -13,16 +14,15 @@ import { LoaderBarComponent } from './components/loader-bar/loader-bar.component import { ModalComponent } from './components/modal/modal.component'; import { SortOrderIconComponent } from './components/sort-order-icon/sort-order-icon.component'; import { TableEmptyMessageComponent } from './components/table-empty-message/table-empty-message.component'; +import { ToastContainerComponent } from './components/toast-container/toast-container.component'; import { ToastComponent } from './components/toast/toast.component'; import styles from './constants/styles'; import { TableSortDirective } from './directives/table-sort.directive'; import { ErrorHandler } from './handlers/error.handler'; -import { chartJsLoaded$ } from './utils/widget-utils'; import { RootParams } from './models/common'; -import { HTTP_ERROR_CONFIG, httpErrorConfigFactory } from './tokens/http-error.token'; -import { NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap'; +import { httpErrorConfigFactory, HTTP_ERROR_CONFIG } from './tokens/http-error.token'; import { DateParserFormatter } from './utils/date-parser-formatter'; -import { DatePipe } from '@angular/common'; +import { chartJsLoaded$ } from './utils/widget-utils'; export function appendScript(injector: Injector) { const fn = () => { @@ -47,6 +47,7 @@ export function appendScript(injector: Injector) { ModalComponent, TableEmptyMessageComponent, ToastComponent, + ToastContainerComponent, SortOrderIconComponent, TableSortDirective, ], @@ -59,6 +60,7 @@ export function appendScript(injector: Injector) { ModalComponent, TableEmptyMessageComponent, ToastComponent, + ToastContainerComponent, SortOrderIconComponent, TableSortDirective, ], From 547d1a8a205d8b8bddcd41173d7449ccda796aff Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 9 Jan 2020 19:22:06 +0300 Subject: [PATCH 119/411] feat(theme-shared): add toast in and out animations --- .../src/lib/animations/toast.animations.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/animations/toast.animations.ts diff --git a/npm/ng-packs/packages/theme-shared/src/lib/animations/toast.animations.ts b/npm/ng-packs/packages/theme-shared/src/lib/animations/toast.animations.ts new file mode 100644 index 0000000000..7ac6a7519b --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/animations/toast.animations.ts @@ -0,0 +1,17 @@ +import { animate, query, style, transition, trigger } from '@angular/animations'; + +export const toastInOut = trigger('toastInOut', [ + transition('* <=> *', [ + query( + ':enter', + [ + style({ opacity: 0, transform: 'translateY(20px)' }), + animate('350ms ease', style({ opacity: 1, transform: 'translateY(0)' })), + ], + { optional: true }, + ), + query(':leave', animate('450ms ease', style({ opacity: 0 })), { + optional: true, + }), + ]), +]); From dd93bee9b42c468ba15134e6f410088b4aa49169 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 9 Jan 2020 19:23:10 +0300 Subject: [PATCH 120/411] refactor(theme-shared): use toast-container instead of toast component in layouts related issue: #2537 --- .../account-layout.component.ts | 2 +- .../application-layout.component.html | 29 ++++++++++++------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/account-layout.component.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/account-layout.component.ts index 57b8772304..105c756e54 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/account-layout.component.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/account-layout/account-layout.component.ts @@ -6,7 +6,7 @@ import { eLayoutType } from '@abp/ng.core'; template: ` - + `, }) export class AccountLayoutComponent { diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.html b/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.html index 2730c0e2ef..890ed1baab 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.html +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.html @@ -34,7 +34,8 @@ @@ -47,7 +48,9 @@ class="nav-item dropdown" display="static" (click)=" - navbarRootDropdown.expand ? (navbarRootDropdown.expand = false) : (navbarRootDropdown.expand = true) + navbarRootDropdown.expand + ? (navbarRootDropdown.expand = false) + : (navbarRootDropdown.expand = true) " >
-
+
- + {{ appInfo.name }} @@ -213,12 +220,12 @@ [class.d-block]="smallScreen" [class.abp-mh-25]="smallScreen && currentUserDropdown.isOpen()" > - {{ - 'AbpAccount::ManageYourProfile' | abpLocalization - }} - {{ - 'AbpUi::Logout' | abpLocalization - }} + {{ 'AbpAccount::ManageYourProfile' | abpLocalization }} + {{ 'AbpUi::Logout' | abpLocalization }}
From e8ac235a2906c5b267ecabd8f9fa2ffb826234b2 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 9 Jan 2020 19:23:55 +0300 Subject: [PATCH 121/411] refactor(theme-shared): add new toaster service related issue: #2537 --- .../src/lib/services/toaster.service.ts | 99 +++++++++++++++++-- 1 file changed, 90 insertions(+), 9 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts b/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts index 9e5858007a..e7cd005990 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts @@ -1,15 +1,96 @@ import { Injectable } from '@angular/core'; -import { AbstractToaster } from '../abstracts/toaster'; -import { Message } from 'primeng/components/common/message'; -import { MessageService } from 'primeng/components/common/messageservice'; +import { Toaster } from '../models'; +import { ReplaySubject } from 'rxjs'; -@Injectable({ providedIn: 'root' }) -export class ToasterService extends AbstractToaster { - constructor(protected messageService: MessageService) { - super(messageService); +@Injectable({ + providedIn: 'root', +}) +export class ToasterService { + toasts$ = new ReplaySubject(1); + + private lastId = -1; + + private toasts = [] as Toaster.Toast[]; + + /** + * Creates an info toast with given parameters. + * @param message Content of the toast + * @param title Title of the toast + * @param options Spesific style or structural options for individual toast + */ + info(message: string, title?: string, options?: Partial) { + return this.show(message, title, 'info', options); + } + + /** + * Creates a success toast with given parameters. + * @param message Content of the toast + * @param title Title of the toast + * @param options Spesific style or structural options for individual toast + */ + success(message: string, title?: string, options?: Partial) { + return this.show(message, title, 'success', options); + } + + /** + * Creates a warning toast with given parameters. + * @param message Content of the toast + * @param title Title of the toast + * @param options Spesific style or structural options for individual toast + */ + warn(message: string, title?: string, options?: Partial) { + return this.show(message, title, 'warning', options); + } + + /** + * Creates an error toast with given parameters. + * @param message Content of the toast + * @param title Title of the toast + * @param options Spesific style or structural options for individual toast + */ + error(message: string, title?: string, options?: Partial) { + return this.show(message, title, 'error', options); + } + + /** + * Creates a toast with given parameters. + * @param message Content of the toast + * @param title Title of the toast + * @param severity Sets color of the toast. "success", "warning" etc. + * @param options Spesific style or structural options for individual toast + */ + + show( + message: string, + title: string = null, + severity: Toaster.Severity = 'neutral', + options: Partial = null, + ) { + const id = ++this.lastId; + this.toasts.push({ + message, + title, + severity, + options: { closable: true, ...options, id }, + }); + this.toasts$.next(this.toasts); + return id; + } + + /** + * Removes the toast with given id. + * @param id ID of the toast to be removed. + */ + remove(id: number) { + this.toasts = this.toasts.filter(toast => toast.options.id !== id); + this.toasts$.next(this.toasts); } - addAll(messages: Message[]): void { - this.messageService.addAll(messages.map(message => ({ key: this.key, ...message }))); + /** + * Removes all open toasts at once. + */ + removeAll() { + this.toasts = []; + this.toasts$.next(this.toasts); } } From 21d747e5d758167223968680bba3a583717b4588 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 9 Jan 2020 19:24:34 +0300 Subject: [PATCH 122/411] refactor(theme-shared): add new confirmation component and its styles related issue: #2537 --- .../confirmation/confirmation.component.html | 32 ++++++ .../confirmation/confirmation.component.scss | 100 ++++++++++++++++++ .../confirmation/confirmation.component.ts | 100 +++++++++--------- 3 files changed, 183 insertions(+), 49 deletions(-) create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.html create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.html new file mode 100644 index 0000000000..b85fe4bc9b --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.html @@ -0,0 +1,32 @@ +
+
+
+
+ +
+
+

+ {{ data.title | abpLocalization: titleLocalizationParams }} +

+

+ {{ data.message | abpLocalization: messageLocalizationParams }} +

+
+ +
+
diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss new file mode 100644 index 0000000000..047b516d15 --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss @@ -0,0 +1,100 @@ +.confirmation { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: none; + place-items: center; + &.show { + display: grid; + } + .confirmation-backdrop { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + background-color: rgba(#000, 0.7); + z-index: 1040; + } + .confirmation-dialog { + display: flex; + flex-direction: column; + margin: 20px auto; + padding: 0; + border: none; + border-radius: 10px; + min-width: 450px; + min-height: 300px; + background-color: #fff; + box-shadow: 0 0 10px -5px rgba(#000, 0.5); + z-index: 1050; + .icon-container { + display: flex; + align-items: center; + justify-content: center; + margin: 0 0 10px 0; + padding: 20px; + .icon { + width: 100px; + height: 100px; + stroke-width: 1; + stroke: #f89406; + fill: #fff; + } + } + .content { + flex-grow: 1; + display: block; + .title { + display: block; + margin: 0; + padding: 0; + font-size: 27px; + font-weight: 600; + text-align: center; + } + .message { + display: block; + margin: 10px auto; + padding: 0; + color: #777; + font-size: 16px; + font-weight: 400; + text-align: center; + } + } + .footer { + display: flex; + align-items: center; + justify-content: flex-end; + margin: 10px 0 0 0; + padding: 20px; + width: 100%; + .confirmation-button { + display: inline-block; + margin: 0px 5px; + padding: 10px 20px; + border: none; + border-radius: 6px; + color: #777; + font-size: 14px; + font-weight: 600; + background-color: #eee; + &:hover { + background-color: darken(#eee, 5); + } + &-reject { + } + &-approve { + background-color: #2f96b4; + color: #fff; + &:hover { + background-color: darken(#2f96b4, 5); + } + } + } + } + } +} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts index 6ddb5899f1..aa68d027ee 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts @@ -1,61 +1,63 @@ import { Component } from '@angular/core'; import { ConfirmationService } from '../../services/confirmation.service'; -import { Toaster } from '../../models/toaster'; +import { Confirmation } from '../../models'; +import { LocalizationService } from '@abp/ng.core'; @Component({ selector: 'abp-confirmation', - // tslint:disable-next-line: component-max-inline-declarations - template: ` - - - -
- {{ message.summary | abpLocalization: message.titleLocalizationParams }} -
-
- {{ message.detail | abpLocalization: message.messageLocalizationParams }} -
- - -
-
- `, + templateUrl: './confirmation.component.html', + styleUrls: ['./confirmation.component.scss'], }) export class ConfirmationComponent { - confirm = Toaster.Status.confirm; - reject = Toaster.Status.reject; - dismiss = Toaster.Status.dismiss; + confirm = Confirmation.Status.confirm; + reject = Confirmation.Status.reject; + dismiss = Confirmation.Status.dismiss; - constructor(private confirmationService: ConfirmationService) {} + visible = false; - close(status: Toaster.Status) { + data: Confirmation.DialogData; + + get iconClass(): string { + switch (this.data.severity) { + case 'info': + return 'info-circle'; + case 'success': + return 'check-circle'; + case 'warning': + return 'exclamation-triangle'; + case 'error': + return 'times-circle'; + default: + return 'question-circle-o'; + } + } + + get titleLocalizationParams(): string { + return this.localizationService.instant( + this.data.title, + ...this.data.options.titleLocalizationParams, + ); + } + + get messageLocalizationParams(): string { + return this.localizationService.instant( + this.data.message, + ...this.data.options.messageLocalizationParams, + ); + } + + constructor( + private confirmationService: ConfirmationService, + private localizationService: LocalizationService, + ) { + this.confirmationService.confirmation$.subscribe(confirmation => { + this.data = confirmation; + this.visible = true; + }); + } + + close(status: Confirmation.Status) { this.confirmationService.clear(status); + this.visible = false; } } From 009bde83fd6263429812b4c3b8de11830eb7b865 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 9 Jan 2020 19:25:06 +0300 Subject: [PATCH 123/411] refactor(theme-shared): add new confirmation types and interfaces related issue: #2537 --- .../src/lib/models/confirmation.ts | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/models/confirmation.ts b/npm/ng-packs/packages/theme-shared/src/lib/models/confirmation.ts index 3249860214..67b6cf6ef7 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/models/confirmation.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/models/confirmation.ts @@ -2,10 +2,29 @@ import { Toaster } from './toaster'; import { Config } from '@abp/ng.core'; export namespace Confirmation { - export interface Options extends Toaster.Options { + export interface Options { + id?: any; + closable?: boolean; + messageLocalizationParams?: string[]; + titleLocalizationParams?: string[]; hideCancelBtn?: boolean; hideYesBtn?: boolean; cancelText?: Config.LocalizationParam; yesText?: Config.LocalizationParam; } + + export interface DialogData { + message: Config.LocalizationParam; + title?: Config.LocalizationParam; + severity?: Severity; + options?: Partial; + } + + export type Severity = 'neutral' | 'success' | 'info' | 'warning' | 'error'; + + export enum Status { + confirm = 'confirm', + reject = 'reject', + dismiss = 'dismiss', + } } From 5cb651a8bf55701b6f5422b89cacb431f09bd4d8 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 9 Jan 2020 19:25:28 +0300 Subject: [PATCH 124/411] refactor(theme-shared): add new confirmation service --- .../src/lib/services/confirmation.service.ts | 69 +++++++++++++------ 1 file changed, 49 insertions(+), 20 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts b/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts index cceedc22cb..e3ad5bd509 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts @@ -1,43 +1,72 @@ import { Injectable } from '@angular/core'; -import { AbstractToaster } from '../abstracts/toaster'; import { Confirmation } from '../models/confirmation'; -import { MessageService } from 'primeng/components/common/messageservice'; -import { fromEvent, Observable, Subject } from 'rxjs'; +import { fromEvent, Observable, Subject, ReplaySubject } from 'rxjs'; import { takeUntil, debounceTime, filter } from 'rxjs/operators'; import { Toaster } from '../models/toaster'; +import { Config } from '@abp/ng.core'; @Injectable({ providedIn: 'root' }) -export class ConfirmationService extends AbstractToaster { - key = 'abpConfirmation'; +export class ConfirmationService { + status$: Subject | Subject; + confirmation$ = new ReplaySubject(1); - sticky = true; + info( + message: Config.LocalizationParam, + title: Config.LocalizationParam, + options?: Partial, + ): Observable | Observable { + return this.show(message, title, 'info', options); + } - destroy$ = new Subject(); + success( + message: Config.LocalizationParam, + title: Config.LocalizationParam, + options?: Partial, + ): Observable | Observable { + return this.show(message, title, 'success', options); + } - constructor(protected messageService: MessageService) { - super(messageService); + warn( + message: Config.LocalizationParam, + title: Config.LocalizationParam, + options?: Partial, + ): Observable | Observable { + return this.show(message, title, 'warning', options); + } + + error( + message: Config.LocalizationParam, + title: Config.LocalizationParam, + options?: Partial, + ): Observable | Observable { + return this.show(message, title, 'error', options); } show( - message: string, - title: string, - severity: Toaster.Severity, - options?: Confirmation.Options, - ): Observable { + message: Config.LocalizationParam, + title: Config.LocalizationParam, + severity?: Toaster.Severity, + options?: Partial, + ): Observable | Observable { this.listenToEscape(); - return super.show(message, title, severity, options); + this.confirmation$.next({ + message, + title: title || 'AbpUi:AreYouSure', + severity: severity || 'neutral', + options, + }); + this.status$ = new Subject(); + return this.status$; } - clear(status?: Toaster.Status) { - super.clear(status); - - this.destroy$.next(); + clear(status?: Toaster.Status | Confirmation.Status) { + this.status$.next(status || Confirmation.Status.dismiss); } listenToEscape() { fromEvent(document, 'keyup') .pipe( - takeUntil(this.destroy$), + takeUntil(this.status$), debounceTime(150), filter((key: KeyboardEvent) => key && key.key === 'Escape'), ) From ee4e0d9ad5c9d579df3d483c94ff24d5faf0a2db Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 9 Jan 2020 19:25:54 +0300 Subject: [PATCH 125/411] feat(theme-shared): export new toast animation --- npm/ng-packs/packages/theme-shared/src/lib/animations/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/animations/index.ts b/npm/ng-packs/packages/theme-shared/src/lib/animations/index.ts index 816afbaaa4..d625d76d8e 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/animations/index.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/animations/index.ts @@ -3,3 +3,4 @@ export * from './collapse.animations'; export * from './fade.animations'; export * from './modal.animations'; export * from './slide.animations'; +export * from './toast.animations'; From 625632ed94e8c2c52fc193e52a2cda05cf12ce39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 9 Jan 2020 20:04:51 +0300 Subject: [PATCH 126/411] Resolved #2607: Renamed ValidationHandler to ValidationHelper. --- ...{ValidationHandler.cs => ValidationHelper.cs} | 2 +- .../ApplicationService_Validation_Tests.cs | 16 ++++++++-------- .../Account/Controllers/AccountController.cs | 2 +- .../Pages/Account/Login.cshtml.cs | 2 +- .../AbpResourceOwnerPasswordValidator.cs | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) rename framework/src/Volo.Abp.Validation/Volo/Abp/Validation/{ValidationHandler.cs => ValidationHelper.cs} (94%) diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/ValidationHandler.cs b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/ValidationHelper.cs similarity index 94% rename from framework/src/Volo.Abp.Validation/Volo/Abp/Validation/ValidationHandler.cs rename to framework/src/Volo.Abp.Validation/Volo/Abp/Validation/ValidationHelper.cs index 5570f04e7d..d46281d2e9 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/ValidationHandler.cs +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/ValidationHelper.cs @@ -2,7 +2,7 @@ namespace Volo.Abp.Validation { - public class ValidationHandler + public class ValidationHelper { private const string EmailRegEx = @"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?"; diff --git a/framework/test/Volo.Abp.Validation.Tests/Volo/Abp/Validation/ApplicationService_Validation_Tests.cs b/framework/test/Volo.Abp.Validation.Tests/Volo/Abp/Validation/ApplicationService_Validation_Tests.cs index 78848591e7..8b4f4a6110 100644 --- a/framework/test/Volo.Abp.Validation.Tests/Volo/Abp/Validation/ApplicationService_Validation_Tests.cs +++ b/framework/test/Volo.Abp.Validation.Tests/Volo/Abp/Validation/ApplicationService_Validation_Tests.cs @@ -178,16 +178,16 @@ namespace Volo.Abp.Validation public void Should_Validate_Emails() { //Valid - ValidationHandler.IsValidEmailAddress("john.doe@domain.com").ShouldBe(true); - ValidationHandler.IsValidEmailAddress("ip@1.2.3.123").ShouldBe(true); - ValidationHandler.IsValidEmailAddress("pharaoh@egyptian.museum").ShouldBe(true); - ValidationHandler.IsValidEmailAddress("john.doe+regexbuddy@gmail.com").ShouldBe(true); - ValidationHandler.IsValidEmailAddress("Mike.O'Dell@ireland.com").ShouldBe(true); + ValidationHelper.IsValidEmailAddress("john.doe@domain.com").ShouldBe(true); + ValidationHelper.IsValidEmailAddress("ip@1.2.3.123").ShouldBe(true); + ValidationHelper.IsValidEmailAddress("pharaoh@egyptian.museum").ShouldBe(true); + ValidationHelper.IsValidEmailAddress("john.doe+regexbuddy@gmail.com").ShouldBe(true); + ValidationHelper.IsValidEmailAddress("Mike.O'Dell@ireland.com").ShouldBe(true); //Invalid - ValidationHandler.IsValidEmailAddress("1024x768@60Hz").ShouldBe(false); - ValidationHandler.IsValidEmailAddress("not.a.valid.email").ShouldBe(false); - ValidationHandler.IsValidEmailAddress("john@aol...com").ShouldBe(false); + ValidationHelper.IsValidEmailAddress("1024x768@60Hz").ShouldBe(false); + ValidationHelper.IsValidEmailAddress("not.a.valid.email").ShouldBe(false); + ValidationHelper.IsValidEmailAddress("john@aol...com").ShouldBe(false); } [DependsOn(typeof(AbpAutofacModule))] diff --git a/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/AccountController.cs b/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/AccountController.cs index 12960920c8..d1f433e343 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/AccountController.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/AccountController.cs @@ -64,7 +64,7 @@ namespace Volo.Abp.Account.Web.Areas.Account.Controllers protected virtual async Task ReplaceEmailToUsernameOfInputIfNeeds(UserLoginInfo login) { - if (!ValidationHandler.IsValidEmailAddress(login.UserNameOrEmailAddress)) + if (!ValidationHelper.IsValidEmailAddress(login.UserNameOrEmailAddress)) { return; } diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs index 9e4427a2b6..eb4ad4ad04 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs @@ -217,7 +217,7 @@ namespace Volo.Abp.Account.Web.Pages.Account protected virtual async Task ReplaceEmailToUsernameOfInputIfNeeds() { - if (!ValidationHandler.IsValidEmailAddress(LoginInput.UserNameOrEmailAddress)) + if (!ValidationHelper.IsValidEmailAddress(LoginInput.UserNameOrEmailAddress)) { return; } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpResourceOwnerPasswordValidator.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpResourceOwnerPasswordValidator.cs index c7d9000cd2..86f704c27a 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpResourceOwnerPasswordValidator.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpResourceOwnerPasswordValidator.cs @@ -95,7 +95,7 @@ namespace Volo.Abp.IdentityServer.AspNetIdentity protected virtual async Task ReplaceEmailToUsernameOfInputIfNeeds(ResourceOwnerPasswordValidationContext context) { - if (!ValidationHandler.IsValidEmailAddress(context.UserName)) + if (!ValidationHelper.IsValidEmailAddress(context.UserName)) { return; } From 72fee038a5b331db986aac6758b22faf0339d283 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 9 Jan 2020 21:01:31 +0300 Subject: [PATCH 127/411] feat(theme-shared): add clear toasts by key functionality related issue: #2537 --- .../theme-shared/src/lib/services/toaster.service.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts b/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts index e7cd005990..818b44bf97 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts @@ -71,7 +71,7 @@ export class ToasterService { message, title, severity, - options: { closable: true, ...options, id }, + options: { closable: true, id, ...options }, }); this.toasts$.next(this.toasts); return id; @@ -89,8 +89,8 @@ export class ToasterService { /** * Removes all open toasts at once. */ - removeAll() { - this.toasts = []; + clear(key?: string) { + this.toasts = !key ? [] : this.toasts.filter(toast => toast.options.containerKey !== key); this.toasts$.next(this.toasts); } } From 0f65dfb037ad6b7ac739e5e570099ec694f64c52 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 9 Jan 2020 21:02:04 +0300 Subject: [PATCH 128/411] refactor(theme-shared): change return types of show confirmation methods --- .../src/lib/services/confirmation.service.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts b/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts index e3ad5bd509..b01c339a74 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts @@ -14,7 +14,7 @@ export class ConfirmationService { message: Config.LocalizationParam, title: Config.LocalizationParam, options?: Partial, - ): Observable | Observable { + ): Observable { return this.show(message, title, 'info', options); } @@ -22,7 +22,7 @@ export class ConfirmationService { message: Config.LocalizationParam, title: Config.LocalizationParam, options?: Partial, - ): Observable | Observable { + ): Observable { return this.show(message, title, 'success', options); } @@ -30,7 +30,7 @@ export class ConfirmationService { message: Config.LocalizationParam, title: Config.LocalizationParam, options?: Partial, - ): Observable | Observable { + ): Observable { return this.show(message, title, 'warning', options); } @@ -38,7 +38,7 @@ export class ConfirmationService { message: Config.LocalizationParam, title: Config.LocalizationParam, options?: Partial, - ): Observable | Observable { + ): Observable { return this.show(message, title, 'error', options); } @@ -47,7 +47,7 @@ export class ConfirmationService { title: Config.LocalizationParam, severity?: Toaster.Severity, options?: Partial, - ): Observable | Observable { + ): Observable { this.listenToEscape(); this.confirmation$.next({ message, From c94448e443adf99ddd57547e5e2e985cf73fe44e Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 9 Jan 2020 21:13:45 +0300 Subject: [PATCH 129/411] refactor(theme-shared): remove Confirmation.Status enum Removed to not commit any breaking changes. --- .../confirmation/confirmation.component.ts | 10 +++++----- .../theme-shared/src/lib/models/confirmation.ts | 6 ------ .../src/lib/services/confirmation.service.ts | 16 ++++++++-------- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts index aa68d027ee..6de221e642 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts @@ -1,6 +1,6 @@ import { Component } from '@angular/core'; import { ConfirmationService } from '../../services/confirmation.service'; -import { Confirmation } from '../../models'; +import { Confirmation, Toaster } from '../../models'; import { LocalizationService } from '@abp/ng.core'; @Component({ @@ -9,9 +9,9 @@ import { LocalizationService } from '@abp/ng.core'; styleUrls: ['./confirmation.component.scss'], }) export class ConfirmationComponent { - confirm = Confirmation.Status.confirm; - reject = Confirmation.Status.reject; - dismiss = Confirmation.Status.dismiss; + confirm = Toaster.Status.confirm; + reject = Toaster.Status.reject; + dismiss = Toaster.Status.dismiss; visible = false; @@ -56,7 +56,7 @@ export class ConfirmationComponent { }); } - close(status: Confirmation.Status) { + close(status: Toaster.Status) { this.confirmationService.clear(status); this.visible = false; } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/models/confirmation.ts b/npm/ng-packs/packages/theme-shared/src/lib/models/confirmation.ts index 67b6cf6ef7..6e890b8b19 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/models/confirmation.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/models/confirmation.ts @@ -21,10 +21,4 @@ export namespace Confirmation { } export type Severity = 'neutral' | 'success' | 'info' | 'warning' | 'error'; - - export enum Status { - confirm = 'confirm', - reject = 'reject', - dismiss = 'dismiss', - } } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts b/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts index b01c339a74..606ae83706 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts @@ -7,14 +7,14 @@ import { Config } from '@abp/ng.core'; @Injectable({ providedIn: 'root' }) export class ConfirmationService { - status$: Subject | Subject; + status$: Subject; confirmation$ = new ReplaySubject(1); info( message: Config.LocalizationParam, title: Config.LocalizationParam, options?: Partial, - ): Observable { + ): Observable { return this.show(message, title, 'info', options); } @@ -22,7 +22,7 @@ export class ConfirmationService { message: Config.LocalizationParam, title: Config.LocalizationParam, options?: Partial, - ): Observable { + ): Observable { return this.show(message, title, 'success', options); } @@ -30,7 +30,7 @@ export class ConfirmationService { message: Config.LocalizationParam, title: Config.LocalizationParam, options?: Partial, - ): Observable { + ): Observable { return this.show(message, title, 'warning', options); } @@ -38,7 +38,7 @@ export class ConfirmationService { message: Config.LocalizationParam, title: Config.LocalizationParam, options?: Partial, - ): Observable { + ): Observable { return this.show(message, title, 'error', options); } @@ -47,7 +47,7 @@ export class ConfirmationService { title: Config.LocalizationParam, severity?: Toaster.Severity, options?: Partial, - ): Observable { + ): Observable { this.listenToEscape(); this.confirmation$.next({ message, @@ -59,8 +59,8 @@ export class ConfirmationService { return this.status$; } - clear(status?: Toaster.Status | Confirmation.Status) { - this.status$.next(status || Confirmation.Status.dismiss); + clear(status?: Toaster.Status) { + this.status$.next(status || Toaster.Status.dismiss); } listenToEscape() { From 91b68e0bca3f437ff336ae9f639e87e50e937ffa Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 9 Jan 2020 21:14:26 +0300 Subject: [PATCH 130/411] test(theme-shared): removed test for primeng toaster and confirmation components --- .../lib/tests/confirmation.service.spec.ts | 44 -------------- .../src/lib/tests/toaster.service.spec.ts | 58 ------------------- 2 files changed, 102 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/confirmation.service.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/confirmation.service.spec.ts index 361ec0c020..7ead79194b 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/confirmation.service.spec.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/confirmation.service.spec.ts @@ -3,7 +3,6 @@ import { Component } from '@angular/core'; import { RouterTestingModule } from '@angular/router/testing'; import { createComponentFactory, Spectator } from '@ngneat/spectator/jest'; import { NgxsModule } from '@ngxs/store'; -import { MessageService } from 'primeng/components/common/messageservice'; import { ConfirmationService } from '../services/confirmation.service'; import { ThemeSharedModule } from '../theme-shared.module'; @@ -23,53 +22,10 @@ describe('ConfirmationService', () => { const createComponent = createComponentFactory({ component: DummyComponent, imports: [CoreModule, ThemeSharedModule.forRoot(), NgxsModule.forRoot(), RouterTestingModule], - providers: [MessageService], }); beforeEach(() => { spectator = createComponent(); service = spectator.get(ConfirmationService); }); - - it('should display a confirmation popup', () => { - service.info('test', 'title'); - - spectator.detectChanges(); - - expect(spectator.query('p-toast')).toBeTruthy(); - expect(spectator.query('p-toastitem')).toBeTruthy(); - expect(spectator.query('div.abp-confirm-summary')).toHaveText('title'); - expect(spectator.query('div.abp-confirm-body')).toHaveText('test'); - }); - - it('should close with ESC key', done => { - service.info('test', 'title'); - spectator.detectChanges(); - - expect(spectator.query('p-toastitem')).toBeTruthy(); - - spectator.dispatchKeyboardEvent('abp-confirmation', 'keyup', 'Escape'); - service.destroy$.subscribe(() => { - // expect(spectator.query('p-toastitem')).toBeFalsy(); - spectator.detectComponentChanges(); - expect(spectator.query('p-toastitem')).toBeFalsy(); - done(); - }); - }); - - it('should close when click cancel button', done => { - service.info('test', 'title', { yesText: 'Sure', cancelText: 'Exit' }); - spectator.detectChanges(); - - expect(spectator.query('p-toastitem')).toBeTruthy(); - expect(spectator.query('button#cancel')).toHaveText('Exit'); - expect(spectator.query('button#confirm')).toHaveText('Sure'); - - service.status$.subscribe(() => { - spectator.detectComponentChanges(); - expect(spectator.query('p-toastitem')).toBeFalsy(); - done(); - }); - spectator.click('button#cancel'); - }); }); diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/toaster.service.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/toaster.service.spec.ts index 149ecd1fad..648d5a17f0 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/toaster.service.spec.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/toaster.service.spec.ts @@ -3,7 +3,6 @@ import { Component } from '@angular/core'; import { RouterTestingModule } from '@angular/router/testing'; import { createComponentFactory, Spectator } from '@ngneat/spectator/jest'; import { NgxsModule } from '@ngxs/store'; -import { MessageService } from 'primeng/components/common/messageservice'; import { ToasterService } from '../services/toaster.service'; import { ThemeSharedModule } from '../theme-shared.module'; @@ -23,67 +22,10 @@ describe('ToasterService', () => { const createComponent = createComponentFactory({ component: DummyComponent, imports: [CoreModule, ThemeSharedModule.forRoot(), NgxsModule.forRoot(), RouterTestingModule], - providers: [MessageService], }); beforeEach(() => { spectator = createComponent(); service = spectator.get(ToasterService); }); - - it('should display an error toast', () => { - service.error('test', 'title'); - - spectator.detectChanges(); - - expect(spectator.query('p-toast')).toBeTruthy(); - expect(spectator.query('p-toastitem')).toBeTruthy(); - expect(spectator.query('span.ui-toast-icon')).toHaveClass('pi-times'); - expect(spectator.query('div.ui-toast-summary')).toHaveText('title'); - expect(spectator.query('div.ui-toast-detail')).toHaveText('test'); - }); - - it('should display a warning toast', () => { - service.warn('test', 'title'); - spectator.detectChanges(); - expect(spectator.query('span.ui-toast-icon')).toHaveClass('pi-exclamation-triangle'); - }); - - it('should display a success toast', () => { - service.success('test', 'title'); - spectator.detectChanges(); - expect(spectator.query('span.ui-toast-icon')).toHaveClass('pi-check'); - }); - - it('should display an info toast', () => { - service.info('test', 'title'); - spectator.detectChanges(); - expect(spectator.query('span.ui-toast-icon')).toHaveClass('pi-info-circle'); - }); - - it('should display multiple toasts', () => { - service.addAll([ - { summary: 'summary1', detail: 'detail1' }, - { summary: 'summary2', detail: 'detail2' }, - ]); - spectator.detectChanges(); - expect(spectator.queryAll('div.ui-toast-summary').map(node => node.textContent.trim())).toEqual([ - 'summary1', - 'summary2', - ]); - expect(spectator.queryAll('div.ui-toast-detail').map(node => node.textContent.trim())).toEqual([ - 'detail1', - 'detail2', - ]); - }); - - it('should remove the opened toast', () => { - service.info('test', 'title'); - spectator.detectChanges(); - expect(spectator.query('p-toastitem')).toBeTruthy(); - - service.clear(); - spectator.detectChanges(); - expect(spectator.query('p-toastitem')).toBeFalsy(); - }); }); From b5038cfad8cb4144299e8bc3d7963858e9bc6a55 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 9 Jan 2020 22:22:36 +0300 Subject: [PATCH 131/411] refactor: set password fields max limit to 128 #2590 --- .../components/change-password/change-password.component.ts | 4 ++-- .../account/src/lib/components/login/login.component.ts | 2 +- .../account/src/lib/components/register/register.component.ts | 2 +- .../identity/src/lib/components/users/users.component.ts | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/npm/ng-packs/packages/account/src/lib/components/change-password/change-password.component.ts b/npm/ng-packs/packages/account/src/lib/components/change-password/change-password.component.ts index 2b66a80b94..e9125de3c3 100644 --- a/npm/ng-packs/packages/account/src/lib/components/change-password/change-password.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/change-password/change-password.component.ts @@ -72,7 +72,7 @@ export class ChangePasswordComponent required, validatePassword(passwordRulesArr), minLength(requiredLength), - maxLength(32), + maxLength(128), ], }, ], @@ -83,7 +83,7 @@ export class ChangePasswordComponent required, validatePassword(passwordRulesArr), minLength(requiredLength), - maxLength(32), + maxLength(128), ], }, ], diff --git a/npm/ng-packs/packages/account/src/lib/components/login/login.component.ts b/npm/ng-packs/packages/account/src/lib/components/login/login.component.ts index c3b037afa0..2fedb0e8f5 100644 --- a/npm/ng-packs/packages/account/src/lib/components/login/login.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/login/login.component.ts @@ -34,7 +34,7 @@ export class LoginComponent { this.form = this.fb.group({ username: ['', [required, maxLength(255)]], - password: ['', [required, maxLength(32)]], + password: ['', [required, maxLength(128)]], remember: [false], }); } diff --git a/npm/ng-packs/packages/account/src/lib/components/register/register.component.ts b/npm/ng-packs/packages/account/src/lib/components/register/register.component.ts index fad7ae5fc7..943aa94b8a 100644 --- a/npm/ng-packs/packages/account/src/lib/components/register/register.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/register/register.component.ts @@ -67,7 +67,7 @@ export class RegisterComponent implements OnInit { username: ['', [required, maxLength(255)]], password: [ '', - [required, validatePassword(passwordRulesArr), minLength(requiredLength), maxLength(32)], + [required, validatePassword(passwordRulesArr), minLength(requiredLength), maxLength(128)], ], email: ['', [required, email]], }); 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 1917113dc7..f4d7e0db84 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 @@ -144,7 +144,7 @@ export class UsersComponent implements OnInit { const passwordValidators = [ validatePassword(this.passwordRulesArr), Validators.minLength(this.requiredPasswordLength), - Validators.maxLength(32), + Validators.maxLength(128), ]; this.form.addControl('password', new FormControl('', [...passwordValidators])); From 8ba34c51327192b6493865bce9e48a829d746173 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 9 Jan 2020 22:24:30 +0300 Subject: [PATCH 132/411] chore: change dev app title --- npm/ng-packs/apps/dev-app/src/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/ng-packs/apps/dev-app/src/index.html b/npm/ng-packs/apps/dev-app/src/index.html index cb6d4ae93a..c879c573b1 100644 --- a/npm/ng-packs/apps/dev-app/src/index.html +++ b/npm/ng-packs/apps/dev-app/src/index.html @@ -2,7 +2,7 @@ - DevApp + ABP Dev From 3b2ff3e6e8eda4362022231a288e4faf47a8eba9 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 9 Jan 2020 22:46:51 +0300 Subject: [PATCH 133/411] fix(account): fix enableLocalLogin definition --- .../auth-wrapper/auth-wrapper.component.html | 2 +- .../auth-wrapper/auth-wrapper.component.ts | 27 ++++++++++++++----- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.html b/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.html index 531c598a5e..145935f7c5 100644 --- a/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.html +++ b/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.html @@ -6,7 +6,7 @@ diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts index afdf73ef88..99fbb88033 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts @@ -32,20 +32,6 @@ export class ToastComponent implements OnInit { } } - get titleLocalizationParams(): string { - return this.localizationService.instant( - this.toast.title, - ...this.toast.options.titleLocalizationParams, - ); - } - - get messageLocalizationParams() { - return this.localizationService.instant( - this.toast.message, - ...this.toast.options.messageLocalizationParams, - ); - } - constructor( private toastService: ToasterService, private localizationService: LocalizationService, From 899b7bc79edaf111afca56b03f4d8820b25a6736 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 10 Jan 2020 10:23:01 +0300 Subject: [PATCH 142/411] Resolved #487: Validation document. --- docs/en/FluentValidation.md | 3 + docs/en/Logging.md | 5 ++ docs/en/Validation.md | 126 +++++++++++++++++++++++++++++++++++- docs/en/docs-nav.json | 9 ++- 4 files changed, 140 insertions(+), 3 deletions(-) create mode 100644 docs/en/FluentValidation.md create mode 100644 docs/en/Logging.md diff --git a/docs/en/FluentValidation.md b/docs/en/FluentValidation.md new file mode 100644 index 0000000000..bb45fb96d8 --- /dev/null +++ b/docs/en/FluentValidation.md @@ -0,0 +1,3 @@ +# FluentValidation Integration + +TODO \ No newline at end of file diff --git a/docs/en/Logging.md b/docs/en/Logging.md new file mode 100644 index 0000000000..9b9c604bed --- /dev/null +++ b/docs/en/Logging.md @@ -0,0 +1,5 @@ +# Logging + +ABP Framework doesn't implement any logging infrastructure. It uses the [ASP.NET Core's logging system](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging). + +> .NET Core's logging system is actually independent from the ASP.NET Core. It is usable in any type of application. \ No newline at end of file diff --git a/docs/en/Validation.md b/docs/en/Validation.md index a4b829c97d..0b86b50e40 100644 --- a/docs/en/Validation.md +++ b/docs/en/Validation.md @@ -1,3 +1,125 @@ -## Validation +# Validation -TODO \ No newline at end of file +Validation system is used to validate the user input or client request for a particular controller action or service method. + +ABP is compatible with the ASP.NET Core Model Validation system and everything written in [its documentation](https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation) is already valid for ABP based applications. So, this document mostly focuses on the ABP features rather than repeating the Microsoft documentation. + +In addition, ABP adds the following benefits: + +* Defines `IValidationEnabled` to add automatic validation to an arbitrary class. Since all the [application services](Application-Services.md) inherently implements it, they are also validated automatically. +* Automatically localize the validation errors. +* Provides extensible services to validate a method call or an object state. +* Provides [FluentValidation](https://fluentvalidation.net/) integration. + +## Validating DTOs + +This section briefly introduces the validation system. For details, see the [ASP.NET Core validation documentation](https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation). + +### Data Annotation Attributes + +Using data annotations is a simple way to implement the formal validation for a [DTO](Data-Transfer-Objects.md) in a declarative way. Example: + +````csharp +public class CreateBookDto +{ + [Required] + [StringLength(100)] + public string Name { get; set; } + + [Required] + [StringLength(1000)] + public string Description { get; set; } + + [Range(0, 999.99)] + public decimal Price { get; set; } +} +```` + +When you use this class as a parameter to an [application service](Application-Services.md) or a controller, it is automatically validated and a localized validation exception is thrown ([and handled](Exception-Handling.md) by the ABP framework). + +### IValidatableObject + +`IValidatableObject` can be implemented by a DTO to perform custom validation logic. `CreateBookDto` in the following example implements this interface and checks if the `Name` is equals to the `Description` and returns a validation error in this case. + +````csharp +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; + +namespace Acme.BookStore +{ + public class CreateBookDto : IValidatableObject + { + [Required] + [StringLength(100)] + public string Name { get; set; } + + [Required] + [StringLength(1000)] + public string Description { get; set; } + + [Range(0, 999.99)] + public decimal Price { get; set; } + + public IEnumerable Validate( + ValidationContext validationContext) + { + if (Name == Description) + { + yield return new ValidationResult( + "Name and Description can not be the same!", + new[] { "Name", "Description" } + ); + } + } + } +} +```` + +#### Resolving a Service + +If you need to resolve a service from the [dependency injection system](Dependency-Injection.md), you can use the `ValidationContext` object. Example: + +````csharp +var myService = validationContext.GetRequiredService(); +```` + +> While resolving services in the `Validate` method allows any possibility, it is not a good practice to implement your domain validation logic in DTOs. Keep DTOs simple. Their purpose is to transfer data (DTO: Data Transfer Object). + +## Validation Infrastructure + +This section explains a few additional services provided by the ABP framework. + +### IValidationEnabled Interface + +`IValidationEnabled` is an empty marker interface that can be implemented by any class (registered to and resolved from the [DI](Dependency-Injection.md)) to let the ABP framework perform the validation system for the methods of the class. Example: + +````csharp +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Validation; + +namespace Acme.BookStore +{ + public class MyService : ITransientDependency, IValidationEnabled + { + public virtual async Task DoItAsync(MyInput input) + { + //... + } + } +} +```` + +> ABP framework uses the [dynamic proxying / interception](Dynamic-Proxying-Interceptors.md) system to perform the validation. In order to make it working, your method should be **virtual** or your service should be injected and used over an **interface** (like `IMyService`). + +### AbpValidationException + +Once ABP determines a validation error, it throws an exception of type `AbpValidationException`. Your application code can throw `AbpValidationException`, but most of the times it is not needed. + +* `ValidationErrors` property of the `AbpValidationException` contains the validation error list. +* Log level of the `AbpValidationException` is set to `Warning`. It logs all the validation errors to the [logging system](Logging.md). +* `AbpValidationException` is automatically caught by the ABP framework and converted to a usable error into with HTTP 400 status code. See the [exception handling](Exception-Handling.md) document for more. + +## FluentValidation Integration + +Volo.Abp.FluentValidation package integrates the FluentValidation library to the validation system. See the [FluentValidation Integration document](FluentValidation.md) for more. \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 5667631c61..cf636ca182 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -87,7 +87,14 @@ "path": "Exception-Handling.md" }, { - "text": "Validation" + "text": "Validation", + "path": "Validation.md", + "items": [ + { + "text": "FluentValidation Integration", + "path": "FluentValidation.md" + } + ] }, { "text": "Authorization", From e15ab839a932b06fbdb1ad95aee68a9ed280c2cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 10 Jan 2020 10:29:21 +0300 Subject: [PATCH 143/411] Update Validation.md --- docs/en/Validation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Validation.md b/docs/en/Validation.md index 0b86b50e40..cf00e9f205 100644 --- a/docs/en/Validation.md +++ b/docs/en/Validation.md @@ -7,7 +7,7 @@ ABP is compatible with the ASP.NET Core Model Validation system and everything w In addition, ABP adds the following benefits: * Defines `IValidationEnabled` to add automatic validation to an arbitrary class. Since all the [application services](Application-Services.md) inherently implements it, they are also validated automatically. -* Automatically localize the validation errors. +* Automatically localize the validation errors for the data annotation attributes. * Provides extensible services to validate a method call or an object state. * Provides [FluentValidation](https://fluentvalidation.net/) integration. From 6217cd1d62e22659f13b15bac407f595ce13fe11 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Fri, 10 Jan 2020 10:34:42 +0300 Subject: [PATCH 144/411] feat(theme-basic): add toast-container component to layout related issue: #2537 --- .../src/lib/components/empty-layout/empty-layout.component.ts | 2 +- 1 file changed, 1 insertion(+), 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 c6082aadd4..4f1dac52ca 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 @@ -6,7 +6,7 @@ import { eLayoutType } from '@abp/ng.core'; template: ` - + `, }) export class EmptyLayoutComponent { From 6b3d7433cbc7ab50e575c989bec1780df1874d4e Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Fri, 10 Jan 2020 10:35:11 +0300 Subject: [PATCH 145/411] refactor(theme-shared): change opacity and icon size related issue: #2537 --- .../src/lib/components/toast/toast.component.scss | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss index 98ce628954..1bd780815c 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss @@ -18,9 +18,11 @@ padding: 10px; border-radius: 0px; width: 350px; - @include fillColor(#f0f0f0, #000); user-select: none; box-shadow: 0 0 10px -5px rgba(#000, 0.4); + z-index: 9999; + @include fillColor(#f0f0f0, #000); + opacity: 1; &.toast-success { @include fillColor(#51a351, #fff); } @@ -38,6 +40,7 @@ align-items: center; justify-content: center; .icon { + font-size: 36px; } } .toast-content { From 835a17b513ecafc1f257ec7bd9ed8f98c08c21fd Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Fri, 10 Jan 2020 10:35:55 +0300 Subject: [PATCH 146/411] fix(theme-shared): correct css class names for confirmation icons related issue: #2537 --- .../components/confirmation/confirmation.component.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts index 564c570904..4f16d528af 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts @@ -20,15 +20,15 @@ export class ConfirmationComponent { get iconClass(): string { switch (this.data.severity) { case 'info': - return 'info-circle'; + return 'fa-info-circle'; case 'success': - return 'check-circle'; + return 'fa-check-circle'; case 'warning': - return 'exclamation-triangle'; + return 'fa-exclamation-triangle'; case 'error': - return 'times-circle'; + return 'fa-times-circle'; default: - return 'question-circle-o'; + return 'fa-question-circle'; } } From f0158d4d50cb7f06dab401b6dcbb6d4c862ad296 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Fri, 10 Jan 2020 10:36:47 +0300 Subject: [PATCH 147/411] feat(theme-shared): change icon color to severity color related issue: #2537 --- .../confirmation/confirmation.component.html | 2 +- .../confirmation/confirmation.component.scss | 21 ++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.html index e2bffd53d4..07faa3a8a7 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.html +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.html @@ -1,7 +1,7 @@
-
+
diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss index 047b516d15..3b43c170de 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss @@ -40,8 +40,27 @@ width: 100px; height: 100px; stroke-width: 1; - stroke: #f89406; fill: #fff; + font-size: 80px; + text-align: center; + } + &.neutral .icon { + } + &.info .icon { + stroke: #2f96b4; + color: #2f96b4; + } + &.success .icon { + stroke: #51a351; + color: #51a351; + } + &.warning .icon { + stroke: #f89406; + color: #f89406; + } + &.error .icon { + stroke: #bd362f; + color: #bd362f; } } .content { From 3e40fc3a7b78aa2821b957a61ee0fb03555d124d Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Fri, 10 Jan 2020 10:45:00 +0300 Subject: [PATCH 148/411] fix(theme-shared): change z-index of container element related issue: #2537 --- .../lib/components/confirmation/confirmation.component.scss | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss index 3b43c170de..04bc4d6f84 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss @@ -6,6 +6,7 @@ left: 0; display: none; place-items: center; + z-index: 1060; &.show { display: grid; } @@ -16,7 +17,7 @@ width: 100vw; height: 100vh; background-color: rgba(#000, 0.7); - z-index: 1040; + z-index: 1061 !important; } .confirmation-dialog { display: flex; @@ -29,7 +30,7 @@ min-height: 300px; background-color: #fff; box-shadow: 0 0 10px -5px rgba(#000, 0.5); - z-index: 1050; + z-index: 1062 !important; .icon-container { display: flex; align-items: center; From 75b32f21bc2d66c063f168b735c9f5ff8c6b725d Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 10 Jan 2020 10:47:13 +0300 Subject: [PATCH 149/411] tests(theme-shared): fix confirmation and toaster tests --- .../lib/tests/confirmation.service.spec.ts | 45 +++++++++++++- .../src/lib/tests/error.handler.spec.ts | 1 - .../src/lib/tests/toaster.service.spec.ts | 58 ++++++++++++++++++- 3 files changed, 101 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/confirmation.service.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/confirmation.service.spec.ts index 90d22d4800..aa2481419d 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/confirmation.service.spec.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/confirmation.service.spec.ts @@ -3,9 +3,10 @@ import { Component } from '@angular/core'; import { RouterTestingModule } from '@angular/router/testing'; import { createComponentFactory, Spectator } from '@ngneat/spectator/jest'; import { NgxsModule } from '@ngxs/store'; -import { OAuthService } from 'angular-oauth2-oidc'; +import { MessageService } from 'primeng/components/common/messageservice'; import { ConfirmationService } from '../services/confirmation.service'; import { ThemeSharedModule } from '../theme-shared.module'; +import { OAuthModule, OAuthService } from 'angular-oauth2-oidc'; @Component({ selector: 'abp-dummy', @@ -23,6 +24,7 @@ describe('ConfirmationService', () => { const createComponent = createComponentFactory({ component: DummyComponent, imports: [CoreModule, ThemeSharedModule.forRoot(), NgxsModule.forRoot(), RouterTestingModule], + providers: [MessageService], mocks: [OAuthService], }); @@ -30,4 +32,45 @@ describe('ConfirmationService', () => { spectator = createComponent(); service = spectator.get(ConfirmationService); }); + + test('should display a confirmation popup', () => { + service.info('test', 'title'); + + spectator.detectChanges(); + + expect(spectator.query('div.confirmation .title')).toHaveText('title'); + expect(spectator.query('div.confirmation .message')).toHaveText('test'); + }); + + test('should close with ESC key', done => { + service.info('test', 'title').subscribe(() => { + setTimeout(() => { + spectator.detectComponentChanges(); + expect(spectator.query('div.confirmation')).toBeFalsy(); + done(); + }, 0); + }); + + spectator.detectChanges(); + expect(spectator.query('div.confirmation')).toBeTruthy(); + spectator.dispatchKeyboardEvent('div.confirmation', 'keyup', 'Escape'); + }); + + test('should close when click cancel button', done => { + service.info('test', 'title', { yesText: 'Sure', cancelText: 'Exit' }).subscribe(() => { + spectator.detectComponentChanges(); + setTimeout(() => { + expect(spectator.query('div.confirmation')).toBeFalsy(); + done(); + }, 0); + }); + + spectator.detectChanges(); + + expect(spectator.query('div.confirmation')).toBeTruthy(); + expect(spectator.query('button#cancel')).toHaveText('Exit'); + expect(spectator.query('button#confirm')).toHaveText('Sure'); + + spectator.click('button#cancel'); + }); }); diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/error.handler.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/error.handler.spec.ts index ec23cd165e..aa22e9c567 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/error.handler.spec.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/error.handler.spec.ts @@ -128,7 +128,6 @@ describe('ErrorHandler', () => { ); spectator.detectChanges(); - console.warn(spectator.query('.confirmation')); expect(spectator.query('.title')).toHaveText('test message'); expect(spectator.query('.confirmation .message')).toHaveText('test detail'); }); diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/toaster.service.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/toaster.service.spec.ts index 8004a5d7b8..d7fbd7219e 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/toaster.service.spec.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/toaster.service.spec.ts @@ -3,6 +3,7 @@ import { Component } from '@angular/core'; import { RouterTestingModule } from '@angular/router/testing'; import { createComponentFactory, Spectator } from '@ngneat/spectator/jest'; import { NgxsModule } from '@ngxs/store'; +import { MessageService } from 'primeng/components/common/messageservice'; import { ToasterService } from '../services/toaster.service'; import { ThemeSharedModule } from '../theme-shared.module'; import { OAuthService } from 'angular-oauth2-oidc'; @@ -10,7 +11,7 @@ import { OAuthService } from 'angular-oauth2-oidc'; @Component({ selector: 'abp-dummy', template: ` - + `, }) class DummyComponent { @@ -23,6 +24,7 @@ describe('ToasterService', () => { const createComponent = createComponentFactory({ component: DummyComponent, imports: [CoreModule, ThemeSharedModule.forRoot(), NgxsModule.forRoot(), RouterTestingModule], + providers: [MessageService], mocks: [OAuthService], }); @@ -30,4 +32,58 @@ describe('ToasterService', () => { spectator = createComponent(); service = spectator.get(ToasterService); }); + + test('should display an error toast', () => { + service.error('test', 'title'); + + spectator.detectChanges(); + + expect(spectator.query('div.toast')).toBeTruthy(); + expect(spectator.query('.toast-icon i')).toHaveClass('fa-times-circle'); + expect(spectator.query('div.toast-title')).toHaveText('title'); + expect(spectator.query('div.toast-message')).toHaveText('test'); + }); + + test('should display a warning toast', () => { + service.warn('test', 'title'); + spectator.detectChanges(); + expect(spectator.query('.toast-icon i')).toHaveClass('fa-exclamation-triangle'); + }); + + test('should display a success toast', () => { + service.success('test', 'title'); + spectator.detectChanges(); + expect(spectator.query('.toast-icon i')).toHaveClass('fa-check-circle'); + }); + + test('should display an info toast', () => { + service.info('test', 'title'); + spectator.detectChanges(); + expect(spectator.query('.toast-icon i')).toHaveClass('fa-info-circle'); + }); + + test('should display multiple toasts', () => { + service.info('detail1', 'summary1'); + service.info('detail2', 'summary2'); + + spectator.detectChanges(); + expect(spectator.queryAll('div.toast-title').map(node => node.textContent.trim())).toEqual([ + 'summary1', + 'summary2', + ]); + expect(spectator.queryAll('div.toast-message').map(node => node.textContent.trim())).toEqual([ + 'detail1', + 'detail2', + ]); + }); + + test('should remove the opened toasts', () => { + service.info('test', 'title'); + spectator.detectChanges(); + expect(spectator.query('div.toast')).toBeTruthy(); + + service.clear(); + spectator.detectChanges(); + expect(spectator.query('p-div.toast')).toBeFalsy(); + }); }); From 5246e60647db6192ff2e0357d32ea8d15775e869 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 10 Jan 2020 10:47:52 +0300 Subject: [PATCH 150/411] fix(theme-shared): fix closing confirmation with esc --- .../components/confirmation/confirmation.component.ts | 3 +-- .../src/lib/components/toast/toast.component.ts | 5 +++-- .../src/lib/services/confirmation.service.ts | 1 + .../theme-shared/src/lib/services/toaster.service.ts | 9 ++++++--- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts index 564c570904..6c4d232b99 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts @@ -38,12 +38,11 @@ export class ConfirmationComponent { ) { this.confirmationService.confirmation$.subscribe(confirmation => { this.data = confirmation; - this.visible = true; + this.visible = !!confirmation; }); } close(status: Toaster.Status) { this.confirmationService.clear(status); - this.visible = false; } } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts index 99fbb88033..6cda67167b 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts @@ -2,6 +2,7 @@ import { Component, Input, OnInit } from '@angular/core'; import { Toaster } from '../../models'; import { ToasterService } from '../../services/toaster.service'; import { LocalizationService } from '@abp/ng.core'; +import snq from 'snq'; @Component({ selector: 'abp-toast', @@ -38,8 +39,8 @@ export class ToastComponent implements OnInit { ) {} ngOnInit() { - if (this.toast.options && this.toast.options.sticky) return; - const timeout = this.toast.options.life || 5000; + if (snq(() => this.toast.options.sticky)) return; + const timeout = snq(() => this.toast.options.life) || 5000; setTimeout(() => { this.close(); }, timeout); diff --git a/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts b/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts index d90980c1bf..650019392b 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts @@ -60,6 +60,7 @@ export class ConfirmationService { } clear(status?: Toaster.Status) { + this.confirmation$.next(); this.status$.next(status || Toaster.Status.dismiss); } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts b/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts index 26d68a5e38..021aa60273 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts @@ -2,6 +2,7 @@ import { Injectable } from '@angular/core'; import { Toaster } from '../models'; import { ReplaySubject } from 'rxjs'; import { Config } from '@abp/ng.core'; +import snq from 'snq'; @Injectable({ providedIn: 'root', @@ -81,7 +82,7 @@ export class ToasterService { message: Config.LocalizationParam, title: Config.LocalizationParam = null, severity: Toaster.Severity = 'neutral', - options: Partial = null, + options = {} as Partial, ) { const id = ++this.lastId; this.toasts.push({ @@ -99,7 +100,7 @@ export class ToasterService { * @param id ID of the toast to be removed. */ remove(id: number) { - this.toasts = this.toasts.filter(toast => toast.options.id !== id); + this.toasts = this.toasts.filter(toast => snq(() => toast.options.id) !== id); this.toasts$.next(this.toasts); } @@ -107,7 +108,9 @@ export class ToasterService { * Removes all open toasts at once. */ clear(key?: string) { - this.toasts = !key ? [] : this.toasts.filter(toast => toast.options.containerKey !== key); + this.toasts = !key + ? [] + : this.toasts.filter(toast => snq(() => toast.options.containerKey) !== key); this.toasts$.next(this.toasts); } } From dc80d0687bbe4dc57a837e9891880ae48ec74543 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 10 Jan 2020 10:56:19 +0300 Subject: [PATCH 151/411] style(theme-shared): move modal styles to modal.component.scss and remove confirmation and toaster styles --- .../theme-basic/src/lib/constants/styles.ts | 6 - .../lib/components/modal/modal.component.scss | 25 ++++ .../lib/components/modal/modal.component.ts | 14 +- .../theme-shared/src/lib/constants/styles.ts | 130 ------------------ 4 files changed, 36 insertions(+), 139 deletions(-) create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.scss diff --git a/npm/ng-packs/packages/theme-basic/src/lib/constants/styles.ts b/npm/ng-packs/packages/theme-basic/src/lib/constants/styles.ts index 269fd0071a..24c3e84e42 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/constants/styles.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/constants/styles.ts @@ -48,12 +48,6 @@ export default ` .container > .card { box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; } -.abp-confirm .abp-confirm-footer { - background-color: #f4f4f7 !important; -} -.abp-confirm .ui-toast-message-content { - background-color: #fff !important; -} @media screen and (min-width: 768px) { .navbar .dropdown:hover > .dropdown-menu { diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.scss new file mode 100644 index 0000000000..023830ceeb --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.scss @@ -0,0 +1,25 @@ +.modal { + &.show { + display: block !important; + } + + &-backdrop { + background-color: rgba(0, 0, 0, 0.6); + } + + &::-webkit-scrollbar { + width: 7px; + } + + &::-webkit-scrollbar-track { + background: #ddd; + } + + &::-webkit-scrollbar-thumb { + background: #8a8686; + } + + &-dialog { + z-index: 1050; + } +} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts index f95e0093b9..c3bdc2fecb 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts @@ -24,6 +24,7 @@ export type ModalSize = 'sm' | 'md' | 'lg' | 'xl'; selector: 'abp-modal', templateUrl: './modal.component.html', animations: [fadeAnimation], + styleUrls: ['./modal.component.scss'], }) export class ModalComponent implements OnDestroy { @Input() @@ -115,7 +116,8 @@ export class ModalComponent implements OnDestroy { } const nodes = getFlatNodes( - ((node || this.modalContent.nativeElement).querySelector('#abp-modal-body') as HTMLElement).childNodes, + ((node || this.modalContent.nativeElement).querySelector('#abp-modal-body') as HTMLElement) + .childNodes, ); if (hasNgDirty(nodes)) { @@ -123,7 +125,10 @@ export class ModalComponent implements OnDestroy { this.isConfirmationOpen = true; this.confirmationService - .warn('AbpAccount::AreYouSureYouWantToCancelEditingWarningMessage', 'AbpAccount::AreYouSure') + .warn( + 'AbpAccount::AreYouSureYouWantToCancelEditingWarningMessage', + 'AbpAccount::AreYouSure', + ) .subscribe((status: Toaster.Status) => { this.isConfirmationOpen = false; if (status === Toaster.Status.confirm) { @@ -162,7 +167,10 @@ export class ModalComponent implements OnDestroy { function getFlatNodes(nodes: NodeList): HTMLElement[] { return Array.from(nodes).reduce( - (acc, val) => [...acc, ...(val.childNodes && val.childNodes.length ? getFlatNodes(val.childNodes) : [val])], + (acc, val) => [ + ...acc, + ...(val.childNodes && val.childNodes.length ? getFlatNodes(val.childNodes) : [val]), + ], [], ); } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/constants/styles.ts b/npm/ng-packs/packages/theme-shared/src/lib/constants/styles.ts index 24f7a9a8ea..4458117d16 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/constants/styles.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/constants/styles.ts @@ -41,30 +41,6 @@ export default ` background: #8a8686; } -.modal.show { - display: block !important; -} - -.modal-backdrop { - background-color: rgba(0, 0, 0, 0.6); -} - -.modal::-webkit-scrollbar { - width: 7px; -} - -.modal::-webkit-scrollbar-track { - background: #ddd; -} - -.modal::-webkit-scrollbar-thumb { - background: #8a8686; -} - -.modal-dialog { - z-index: 1050; -} - .abp-ellipsis-inline { display: inline-block; overflow: hidden; @@ -78,112 +54,6 @@ export default ` white-space: nowrap; } -.abp-toast .ui-toast-message { - box-sizing: border-box; - border: 2px solid transparent; - border-radius: 4px; - color: #1b1d29; -} - -.abp-toast .ui-toast-message-content { - padding: 10px; -} - -.abp-toast .ui-toast-message-content .ui-toast-icon { - top: 0; - left: 0; - padding: 10px; -} - -.abp-toast .ui-toast-summary { - margin: 0; - font-weight: 700; -} - -body abp-toast .ui-toast .ui-toast-message.ui-toast-message-error { - border: 2px solid #ba1659; - background-color: #f4f4f7; -} - -body abp-toast .ui-toast .ui-toast-message.ui-toast-message-error .ui-toast-message-content .ui-toast-icon { - color: #ba1659; -} - -body abp-toast .ui-toast .ui-toast-message.ui-toast-message-warn { - border: 2px solid #ed5d98; - background-color: #f4f4f7; -} - -body abp-toast .ui-toast .ui-toast-message.ui-toast-message-warn .ui-toast-message-content .ui-toast-icon { - color: #ed5d98; -} - -body abp-toast .ui-toast .ui-toast-message.ui-toast-message-success { - border: 2px solid #1c9174; - background-color: #f4f4f7; -} - -body abp-toast .ui-toast .ui-toast-message.ui-toast-message-success .ui-toast-message-content .ui-toast-icon { - color: #1c9174; -} - -body abp-toast .ui-toast .ui-toast-message.ui-toast-message-info { - border: 2px solid #fccb31; - background-color: #f4f4f7; -} - -body abp-toast .ui-toast .ui-toast-message.ui-toast-message-info .ui-toast-message-content .ui-toast-icon { - color: #fccb31; -} - -.abp-confirm .ui-toast-message { - box-sizing: border-box; - padding: 0px; - border:0 none; - border-radius: 4px; - background-color: transparent !important; - font-family: "Poppins", sans-serif; - text-align: center; -} - -.abp-confirm .ui-toast-message-content { - padding: 0px; -} - -.abp-confirm .abp-confirm-icon { - margin: 32px 50px 5px !important; - color: #f8bb86 !important; - font-size: 52px !important; -} - -.abp-confirm .ui-toast-close-icon { - display: none !important; -} - -.abp-confirm .abp-confirm-summary { - display: block !important; - margin-bottom: 13px !important; - padding: 13px 16px 0px !important; - font-weight: 600 !important; - font-size: 18px !important; -} - -.abp-confirm .abp-confirm-body { - display: inline-block !important; - padding: 0px 10px !important; -} - -.abp-confirm .abp-confirm-footer { - display: block; - margin-top: 30px; - padding: 16px; - text-align: right; -} - -.abp-confirm .abp-confirm-footer .btn { - margin-left: 10px !important; -} - .ui-widget-overlay { z-index: 1000; } From 6a1cf21cd214328e0283ee53eed35b7118b7e41e Mon Sep 17 00:00:00 2001 From: mperk Date: Fri, 10 Jan 2020 11:02:48 +0300 Subject: [PATCH 152/411] replace "R" with RolePermissionValueProvider.ProviderName --- .../PermissionManagement/Identity/RoleUpdateEventHandler.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs index 8ee0d4c6d6..54e8bec3b1 100644 --- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs @@ -1,4 +1,5 @@ using System.Threading.Tasks; +using Volo.Abp.Authorization.Permissions; using Volo.Abp.DependencyInjection; using Volo.Abp.Domain.Entities.Events; using Volo.Abp.EventBus; @@ -32,7 +33,7 @@ namespace Volo.Abp.PermissionManagement.Identity return; } - var permissionGrantsInRole = await PermissionGrantRepository.GetListAsync("R", eventData.OldName).ConfigureAwait(false); + var permissionGrantsInRole = await PermissionGrantRepository.GetListAsync(RolePermissionValueProvider.ProviderName, eventData.OldName).ConfigureAwait(false); foreach (var permissionGrant in permissionGrantsInRole) { await PermissionManager.UpdateProviderKeyAsync(permissionGrant, eventData.IdentityRole.Name).ConfigureAwait(false); From 4026028151d2dc5efc6605c3e313072068f658d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 10 Jan 2020 11:30:27 +0300 Subject: [PATCH 153/411] Add Advanced Topics section to the validation document. --- docs/en/Validation.md | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/docs/en/Validation.md b/docs/en/Validation.md index cf00e9f205..15c3f13412 100644 --- a/docs/en/Validation.md +++ b/docs/en/Validation.md @@ -120,6 +120,39 @@ Once ABP determines a validation error, it throws an exception of type `AbpValid * Log level of the `AbpValidationException` is set to `Warning`. It logs all the validation errors to the [logging system](Logging.md). * `AbpValidationException` is automatically caught by the ABP framework and converted to a usable error into with HTTP 400 status code. See the [exception handling](Exception-Handling.md) document for more. +## Advanced Topics + +### IObjectValidator + +In addition to the automatic validation, you may want to manually validate an object. In this case, [inject](Dependency-Injection.md) and use the `IObjectValidator` service: + +* `Validate` method validates the given object based on the validation rules and throws an `AbpValidationException` if it is not in a valid state. +* `GetErrors` doesn't throw an exception, but only returns the validation errors. + +`IObjectValidator` is implemented by the `ObjectValidator` by default. `ObjectValidator` is extensible; you can implement `IObjectValidationContributor` interface to contribute a custom logic. Example: + +````csharp +public class MyObjectValidationContributor + : IObjectValidationContributor, ITransientDependency +{ + public void AddErrors(ObjectValidationContext context) + { + //Get the validating object + var obj = context.ValidatingObject; + + //Add the validation errors if available + context.Errors.Add(...); + } +} +```` + +* Remember to register your class to the [DI](Dependency-Injection.md) (implementing `ITransientDependency` does it just like in this example) +* ABP will automatically discover your class and use on any type of object validation (including automatic method call validation). + +### IMethodInvocationValidator + +`IMethodInvocationValidator` is used to validate a method call. It internally uses the `IObjectValidator` to validate objects passes to the method call. You normally don't need to this service since it is automatically used by the framework, but you may want to reuse or replace it on your application in rare cases. + ## FluentValidation Integration -Volo.Abp.FluentValidation package integrates the FluentValidation library to the validation system. See the [FluentValidation Integration document](FluentValidation.md) for more. \ No newline at end of file +Volo.Abp.FluentValidation package integrates the FluentValidation library to the validation system (by implementing the `IObjectValidationContributor`). See the [FluentValidation Integration document](FluentValidation.md) for more. \ No newline at end of file From 756e8588f3dd2d1035dbc22db3773653e28b1542 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 10 Jan 2020 11:41:40 +0300 Subject: [PATCH 154/411] fix(core): fix nullable control in the config state --- npm/ng-packs/packages/core/src/lib/states/config.state.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 1e959b3e54..2232fd0419 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 @@ -137,6 +137,7 @@ export class ConfigState { key: string | Config.LocalizationWithDefault, ...interpolateParams: string[] ) { + if (!key) key = ''; let defaultValue: string; if (typeof key !== 'string') { @@ -144,8 +145,6 @@ export class ConfigState { key = key.key; } - if (!key) key = ''; - const keys = key.split('::') as string[]; const selector = createSelector([ConfigState], (state: Config.State) => { if (!state.localization) return defaultValue || key; From bf6426246a531b7ee75acb357ecb512d0b804346 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 10 Jan 2020 11:44:11 +0300 Subject: [PATCH 155/411] refactor(theme-shared): set right and bottom inputs 30px as default --- .../toast-container/toast-container.component.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts index 4c664bb5d2..a63a75a8fc 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts @@ -13,16 +13,16 @@ export class ToastContainerComponent implements OnInit { toasts = [] as Toaster.Toast[]; @Input() - top: number; + top: string; @Input() - right: number; + right: string = '30px'; @Input() - bottom: number; + bottom: string = '30px'; @Input() - left: number; + left: string; @Input() toastKey: string; From 681b359eb69e6c12ce2006818e7c079cc44c0ea3 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 10 Jan 2020 11:51:49 +0300 Subject: [PATCH 156/411] fix(theme-shared): fix lint errors --- .../components/toast-container/toast-container.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts index a63a75a8fc..72483622b6 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts @@ -16,10 +16,10 @@ export class ToastContainerComponent implements OnInit { top: string; @Input() - right: string = '30px'; + right = '30px'; @Input() - bottom: string = '30px'; + bottom = '30px'; @Input() left: string; From 58d9f3fb5cabbc2fad36f5c00d93d282b5cffc33 Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Fri, 10 Jan 2020 12:25:19 +0300 Subject: [PATCH 157/411] Updated AuditingMiddleware, updated AuditingManager --- .../Auditing/AbpAuditingMiddleware.cs | 13 ++++- .../Volo/Abp/Auditing/AbpAuditingOptions.cs | 8 +++- .../Volo/Abp/Auditing/AuditingManager.cs | 23 +++++---- .../Volo/Abp/Auditing/IAuditLogSaveHandle.cs | 2 +- .../Mvc/Auditing/AuditTestController.cs | 29 ++++++++++++ .../Mvc/Auditing/AuditTestController_Tests.cs | 47 +++++++++++++++++++ 6 files changed, 111 insertions(+), 11 deletions(-) create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController.cs create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs index d56c29709a..b651274ed4 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs @@ -39,6 +39,10 @@ namespace Volo.Abp.AspNetCore.Auditing try { await next(context).ConfigureAwait(false); + } + catch (Exception ex) + { + await scope.SaveAsync(ex).ConfigureAwait(false); } finally { @@ -49,6 +53,13 @@ namespace Volo.Abp.AspNetCore.Auditing private bool ShouldWriteAuditLog(HttpContext httpContext) { + // IF selected, save audit logs on exception on GET requests even if audit log is disabled for GET requests. + if (Options.AlwaysLogOnException && + string.Equals(httpContext.Request.Method, HttpMethods.Get, StringComparison.OrdinalIgnoreCase)) + { + return true; + } + if (!Options.IsEnabled) { return false; @@ -59,7 +70,7 @@ namespace Volo.Abp.AspNetCore.Auditing return false; } - if (!Options.IsEnabledForGetRequests && + if (!Options.IsEnabledForGetRequests && string.Equals(httpContext.Request.Method, HttpMethods.Get, StringComparison.OrdinalIgnoreCase)) { return false; diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AbpAuditingOptions.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AbpAuditingOptions.cs index da406fa490..5dcae1e097 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AbpAuditingOptions.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AbpAuditingOptions.cs @@ -29,7 +29,13 @@ namespace Volo.Abp.Auditing /// /// Default: true. /// - public bool IsEnabledForAnonymousUsers { get; set; } + public bool IsEnabledForAnonymousUsers { get; set; } = false; + + /// + /// Audit log e xceptions. + /// Default: false. + /// + public bool AlwaysLogOnException { get; set; } public List Contributors { get; } diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingManager.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingManager.cs index 25738843c0..1d3b912311 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingManager.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingManager.cs @@ -23,8 +23,8 @@ namespace Volo.Abp.Auditing private readonly IAuditingStore _auditingStore; public AuditingManager( - IAmbientScopeProvider ambientScopeProvider, - IAuditingHelper auditingHelper, + IAmbientScopeProvider ambientScopeProvider, + IAuditingHelper auditingHelper, IAuditingStore auditingStore, IServiceProvider serviceProvider, IOptions options) @@ -84,7 +84,7 @@ namespace Volo.Abp.Auditing { var changeGroups = auditLog.EntityChanges .Where(e => e.ChangeType == EntityChangeType.Updated) - .GroupBy(e => new {e.EntityTypeFullName, e.EntityId}) + .GroupBy(e => new { e.EntityTypeFullName, e.EntityId }) .ToList(); foreach (var changeGroup in changeGroups) @@ -141,7 +141,7 @@ namespace Volo.Abp.Auditing public DisposableSaveHandle( AuditingManager auditingManager, IDisposable scope, - AuditLogInfo auditLog, + AuditLogInfo auditLog, Stopwatch stopWatch) { _auditingManager = auditingManager; @@ -150,15 +150,22 @@ namespace Volo.Abp.Auditing StopWatch = stopWatch; } - public async Task SaveAsync() + public async Task SaveAsync(Exception exception = null) { - await _auditingManager.SaveAsync(this).ConfigureAwait(false); + if (exception != null) + { + this.AuditLog.Exceptions.Add(exception); + } + else + { + await _auditingManager.SaveAsync(this).ConfigureAwait(false); + } } - + public void Dispose() { _scope.Dispose(); - } + } } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditLogSaveHandle.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditLogSaveHandle.cs index 4709b745d2..6e48f3525c 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditLogSaveHandle.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditLogSaveHandle.cs @@ -5,6 +5,6 @@ namespace Volo.Abp.Auditing { public interface IAuditLogSaveHandle : IDisposable { - Task SaveAsync(); + Task SaveAsync(Exception exception = null); } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController.cs new file mode 100644 index 0000000000..967f3269d2 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController.cs @@ -0,0 +1,29 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Options; +using Volo.Abp.Auditing; + +namespace Volo.Abp.AspNetCore.Mvc.Auditing +{ + [Route("api/audit-test")] + public class AuditTestController : AbpController + { + private readonly AbpAuditingOptions _options; + + public AuditTestController(IOptions options) + { + _options = options.Value; + } + + [Route("audit-success")] + public IActionResult AuditSuccessForGetRequests() + { + return Ok(); + } + + [Route("audit-fail")] + public IActionResult AuditFailForGetRequests() + { + throw new UserFriendlyException("Exception occurred!"); + } + } +} diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs new file mode 100644 index 0000000000..97b211ba5a --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs @@ -0,0 +1,47 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Options; +using NSubstitute; +using System.Threading.Tasks; +using Volo.Abp.Auditing; +using Xunit; + +namespace Volo.Abp.AspNetCore.Mvc.Auditing +{ + public class AuditTestController_Tests : AspNetCoreMvcTestBase + { + private readonly AbpAuditingOptions _options; + private IAuditingStore _auditingStore; + + public AuditTestController_Tests() + { + _options = ServiceProvider.GetRequiredService>().Value; + _auditingStore = ServiceProvider.GetRequiredService(); + } + + protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) + { + _auditingStore = Substitute.For(); + services.Replace(ServiceDescriptor.Singleton(_auditingStore)); + base.ConfigureServices(context, services); + } + + [Fact] + public async Task Should_Trigger_Middleware_And_AuditLog_Success_For_GetRequests() + { + _options.IsEnabledForGetRequests = true; + await GetResponseAsync("api/audit-test/audit-success"); + //await _auditingStore.Received().SaveAsync(Arg.Any()); //Won't work, save happens out of scope + } + + [Fact] + public async Task Should_Trigger_Middleware_And_AuditLog_Exception_Always() + { + _options.IsEnabled = false; + _options.AlwaysLogOnException = true; + await GetResponseAsync("api/audit-test/audit-fail", System.Net.HttpStatusCode.BadRequest); + //await _auditingStore.Received().SaveAsync(Arg.Any()); //Won't work, save happens out of scope + } + } +} From f59a2945b223a19750afd46da7e33deff2583328 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 10 Jan 2020 14:41:30 +0300 Subject: [PATCH 158/411] feat(theme-shared): trigger unload confirmation in the modal component when form is dirty --- .../core/src/lib/states/session.state.ts | 2 +- .../lib/components/modal/modal.component.ts | 35 +++++++++++++------ 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/states/session.state.ts b/npm/ng-packs/packages/core/src/lib/states/session.state.ts index 7ceaa4a1bc..7ea742dce7 100644 --- a/npm/ng-packs/packages/core/src/lib/states/session.state.ts +++ b/npm/ng-packs/packages/core/src/lib/states/session.state.ts @@ -67,7 +67,7 @@ export class SessionState { this.store.dispatch(new ModifyOpenedTabCount('increase')); - fromEvent(window, 'beforeunload').subscribe(() => { + fromEvent(window, 'unload').subscribe(event => { this.store.dispatch(new ModifyOpenedTabCount('decrease')); }); }); diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts index c3bdc2fecb..1c25529413 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts @@ -10,6 +10,7 @@ import { TemplateRef, ViewChild, ViewChildren, + HostListener, } from '@angular/core'; import { fromEvent, Subject } from 'rxjs'; import { debounceTime, filter, takeUntil } from 'rxjs/operators'; @@ -101,15 +102,7 @@ export class ModalComponent implements OnDestroy { destroy$ = new Subject(); - constructor(private renderer: Renderer2, private confirmationService: ConfirmationService) {} - - ngOnDestroy(): void { - this.destroy$.next(); - } - - close() { - if (this.busy) return; - + get isFormDirty(): boolean { let node: HTMLDivElement; if (!this.modalContent) { node = document.getElementById('modal-container') as HTMLDivElement; @@ -120,7 +113,19 @@ export class ModalComponent implements OnDestroy { .childNodes, ); - if (hasNgDirty(nodes)) { + return hasNgDirty(nodes); + } + + constructor(private renderer: Renderer2, private confirmationService: ConfirmationService) {} + + ngOnDestroy(): void { + this.destroy$.next(); + } + + close() { + if (this.busy) return; + + if (this.isFormDirty) { if (this.isConfirmationOpen) return; this.isConfirmationOpen = true; @@ -151,6 +156,16 @@ export class ModalComponent implements OnDestroy { this.close(); }); + fromEvent(window, 'beforeunload') + .pipe(takeUntil(this.destroy$)) + .subscribe(event => { + if (this.isFormDirty) { + event.returnValue = true; + } else { + delete event.returnValue; + } + }); + setTimeout(() => { if (!this.abpClose) return; fromEvent(this.abpClose.nativeElement, 'click') From e1842a56c8bbafe628f3277d83504406428b6585 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 10 Jan 2020 14:49:17 +0300 Subject: [PATCH 159/411] chore: remove unneccessary import --- .../theme-shared/src/lib/components/modal/modal.component.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts index 1c25529413..8aaaa58076 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts @@ -10,7 +10,6 @@ import { TemplateRef, ViewChild, ViewChildren, - HostListener, } from '@angular/core'; import { fromEvent, Subject } from 'rxjs'; import { debounceTime, filter, takeUntil } from 'rxjs/operators'; From dfe8e55f29de6bb312b562b0a1e917944dcc2088 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 10 Jan 2020 15:47:35 +0300 Subject: [PATCH 160/411] Complete the FluentValidation Integration document. --- docs/en/FluentValidation.md | 53 ++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/docs/en/FluentValidation.md b/docs/en/FluentValidation.md index bb45fb96d8..c7004878aa 100644 --- a/docs/en/FluentValidation.md +++ b/docs/en/FluentValidation.md @@ -1,3 +1,54 @@ # FluentValidation Integration -TODO \ No newline at end of file +ABP Validation infrastructure is extensible. [Volo.Abp.FluentValidation](https://www.nuget.org/packages/Volo.Abp.FluentValidation) NuGet package extends the validation system to work with the [FluentValidation](https://fluentvalidation.net/) library. + +## Installation + +It is suggested to use the [ABP CLI](CLI.md) to install this package. + +### Using the ABP CLI + +Open a command line window in the folder of the project you want to install the Volo.Abp.FluentValidation NuGet package and type the following command: + +````bash +abp add-package Volo.Abp.FluentValidation +```` + +### Manual Installation + +If you want to manually install; + +1. Add the [Volo.Abp.FluentValidation](https://www.nuget.org/packages/Volo.Abp.FluentValidation) NuGet package to your project: + + ```` + Install-Package Volo.Abp.FluentValidation + ```` + +2. Add the `AbpFluentValidationModule` to the dependency list of your module: + +````csharp +[DependsOn( + //...other dependencies + typeof(AbpFluentValidationModule) //Add the FluentValidation module + )] +public class YourModule : AbpModule +{ +} +```` + +## Using the FluentValidation + +Follow [the FluentValidation documentation](https://fluentvalidation.net/) to create validator classes. Example: + +````csharp +public class CreateUpdateBookDtoValidator : AbstractValidator +{ + public CreateUpdateBookDtoValidator() + { + RuleFor(x => x.Name).Length(3, 10); + RuleFor(x => x.Price).ExclusiveBetween(0.0f, 999.0f); + } +} +```` + +ABP will automatically find this class and associate with the `CreateUpdateBookDto` on object validation. \ No newline at end of file From 9c9e224b0a2220884a3fa97b511de0ccac4fc8c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 10 Jan 2020 15:47:59 +0300 Subject: [PATCH 161/411] Add NuGetPackageTarget.Undefined. --- .../Volo/Abp/Cli/ProjectModification/NuGetPackageTarget.cs | 1 + .../Volo/Abp/Cli/ProjectModification/ProjectFinder.cs | 4 +++- .../Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NuGetPackageTarget.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NuGetPackageTarget.cs index 66467bfa36..9af114dfff 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NuGetPackageTarget.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NuGetPackageTarget.cs @@ -2,6 +2,7 @@ { public enum NuGetPackageTarget : byte { + Undefined = 0, DomainShared = 1, Domain = 2, ApplicationContracts = 3, diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectFinder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectFinder.cs index 9c6edf479d..9d155ba079 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectFinder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectFinder.cs @@ -2,11 +2,13 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using JetBrains.Annotations; namespace Volo.Abp.Cli.ProjectModification { public static class ProjectFinder { + [CanBeNull] public static string FindNuGetTargetProjectFile(string[] projectFiles, NuGetPackageTarget target) { if (!projectFiles.Any()) @@ -40,7 +42,7 @@ namespace Volo.Abp.Cli.ProjectModification case NuGetPackageTarget.HttpApiClient: return FindProjectEndsWith(projectFiles, assemblyNames, ".HttpApi.Client"); default: - throw new ApplicationException($"{nameof(NuGetPackageTarget)}.{target} has not implemented!"); + return null; } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs index 5e20904812..012d5e7bcf 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs @@ -68,7 +68,7 @@ namespace Volo.Abp.Cli.ProjectModification var targetProjectFile = ProjectFinder.FindNuGetTargetProjectFile(projectFiles, nugetPackage.Target); if (targetProjectFile == null) { - Logger.LogDebug($"Target project is not available for NuGet package '{nugetPackage.Name}'"); + Logger.LogDebug($"Target project is not available for this NuGet package '{nugetPackage.Name}'"); continue; } From 9911b7953fa073131ff5020bc92389a0f525e81b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 10 Jan 2020 15:53:32 +0300 Subject: [PATCH 162/411] Update FluentValidation.md --- docs/en/FluentValidation.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/en/FluentValidation.md b/docs/en/FluentValidation.md index c7004878aa..c087f8a185 100644 --- a/docs/en/FluentValidation.md +++ b/docs/en/FluentValidation.md @@ -1,6 +1,6 @@ # FluentValidation Integration -ABP Validation infrastructure is extensible. [Volo.Abp.FluentValidation](https://www.nuget.org/packages/Volo.Abp.FluentValidation) NuGet package extends the validation system to work with the [FluentValidation](https://fluentvalidation.net/) library. +ABP [Validation](Validation.md) infrastructure is extensible. [Volo.Abp.FluentValidation](https://www.nuget.org/packages/Volo.Abp.FluentValidation) NuGet package extends the validation system to work with the [FluentValidation](https://fluentvalidation.net/) library. ## Installation @@ -8,7 +8,7 @@ It is suggested to use the [ABP CLI](CLI.md) to install this package. ### Using the ABP CLI -Open a command line window in the folder of the project you want to install the Volo.Abp.FluentValidation NuGet package and type the following command: +Open a command line window in the folder of the project (.csproj file) and type the following command: ````bash abp add-package Volo.Abp.FluentValidation @@ -51,4 +51,8 @@ public class CreateUpdateBookDtoValidator : AbstractValidator Date: Fri, 10 Jan 2020 21:18:19 +0800 Subject: [PATCH 163/411] Translate validation document. --- docs/zh-Hans/FluentValidation.md | 3 + docs/zh-Hans/Logging.md | 5 + docs/zh-Hans/Validation.md | 164 ++++++++++++++++++++++++++++++- docs/zh-Hans/docs-nav.json | 9 +- 4 files changed, 178 insertions(+), 3 deletions(-) create mode 100644 docs/zh-Hans/FluentValidation.md create mode 100644 docs/zh-Hans/Logging.md diff --git a/docs/zh-Hans/FluentValidation.md b/docs/zh-Hans/FluentValidation.md new file mode 100644 index 0000000000..2254e896d4 --- /dev/null +++ b/docs/zh-Hans/FluentValidation.md @@ -0,0 +1,3 @@ +# FluentValidation 集成 + +TODO \ No newline at end of file diff --git a/docs/zh-Hans/Logging.md b/docs/zh-Hans/Logging.md new file mode 100644 index 0000000000..247609fb41 --- /dev/null +++ b/docs/zh-Hans/Logging.md @@ -0,0 +1,5 @@ +# 日志 + +ABP框架没有实现任何日志基础设施. 它使用[ASP.NET Core日志系统](https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/logging). + +> .NET Core 的日志系统是独立于ASP.NET Core的,它可以在任何类型的应用程序中使用. \ No newline at end of file diff --git a/docs/zh-Hans/Validation.md b/docs/zh-Hans/Validation.md index c2b128f0bc..8aa81351ec 100644 --- a/docs/zh-Hans/Validation.md +++ b/docs/zh-Hans/Validation.md @@ -1,3 +1,163 @@ -## Validation +# 验证 -待添加 +验证系统用于验证对于特定的控制器操作或服务的方法的用户输入或客户端请求. + +ABP与ASP.NET Core模型验证系统系统兼容,[模型验证文档](https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation)中的内容对于基于ABP应用程序同样有效.所以本文主要集中在ABP特征,而不是重复微软文档. + +ABP增加了以下优点: + +* 定义 `IValidationEnabled` 向任意类添加自动验证. 所有的[应用服务](Application-Services.md)都实现了该接口,所以它们会被自动验证. +* 自动将数据注解属性的验证错误信息本地化. +* 提供可扩展的服务来验证方法调用或对象的状态。 +* 提供[FluentValidation](https://fluentvalidation.net/)的集成. + +## 验证DTO + +本节简要介绍了验证系统.有关详细信息请参阅[ASP.NET Core验证文档](https://docs.microsoft.com/zh-cn/aspnet/core/mvc/models/validation). + +### 数据注解 Attribute + +使用数据注解是一种以声明式对[DTO](Data-Transfer-Objects.md)进行验证的简单方法. +示例 : + +````csharp +public class CreateBookDto +{ + [Required] + [StringLength(100)] + public string Name { get; set; } + + [Required] + [StringLength(1000)] + public string Description { get; set; } + + [Range(0, 999.99)] + public decimal Price { get; set; } +} +```` + +当使用该类作为[应用服务](Application-Services.md)或控制器的参数时,将对其自动验证并抛出本地化异常(由ABP框架[处理](Exception-Handling.md)). + +### IValidatableObject + +`IValidatableObject` can be implemented by a DTO to perform custom validation logic. `CreateBookDto` in the following example implements this interface and checks if the `Name` is equals to the `Description` and returns a validation error in this case. +可以将DTO实现 `IValidatableObject` 接口进行自定义验证逻辑. 下面的示例中 `CreateBookDto` 实现了这个接口,并检查 `Name` 是否等于 `Description` 并返回一个验证错误. + +````csharp +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; + +namespace Acme.BookStore +{ + public class CreateBookDto : IValidatableObject + { + [Required] + [StringLength(100)] + public string Name { get; set; } + + [Required] + [StringLength(1000)] + public string Description { get; set; } + + [Range(0, 999.99)] + public decimal Price { get; set; } + + public IEnumerable Validate( + ValidationContext validationContext) + { + if (Name == Description) + { + yield return new ValidationResult( + "Name and Description can not be the same!", + new[] { "Name", "Description" } + ); + } + } + } +} +```` + +#### 解析服务 + +如果你需要从[依赖注入系统](Dependency-Injection.md)解析服务,可以使用 `ValidationContext` 对象. +例: + +````csharp +var myService = validationContext.GetRequiredService(); +```` + +> 虽然可以在 `Validate` 方法中解析服务实现任何可能性,但在DTO中实现领域验证逻辑不是一个很好的做法. 应保持简单的DTO,他们的目的是传输数据(DTO:数据传输对象). + +## 验证基础设施 + +本节介绍了ABP框架提供的一些额外的服务. + +### IValidationEnabled 接口 + +`IValidationEnabled` 是可以由任何类来实现的空标记接口(注册到[DI](Dependency-Injection.md)并从中解析),让ABP框架为该类执行验证系统. +示例 : + +````csharp +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Validation; + +namespace Acme.BookStore +{ + public class MyService : ITransientDependency, IValidationEnabled + { + public virtual async Task DoItAsync(MyInput input) + { + //... + } + } +} +```` + +> ABP框架使用[动态代理/拦截](Dynamic-Proxying-Interceptors.md)系统来执行验证.为了使其工作,你的方法应该是 **virtual** 的,服务应该被注入并通过接口(如`IMyService`)使用. + +### AbpValidationException + +一旦ABP确定了一个验证错误,它就会抛出类型为 `AbpValidationException` 的异常. 你的应用程序代码可以抛出 `AbpValidationException`,但大多数情况不会使用它. + +* `ValidationErrors` 是 `AbpValidationException` 的属性,它包含了验证错误列表. +* `AbpValidationException` 的日志级别设置为 `Warning`. 它将所有验证错误记录到[日志系统](Logging.md). +* `AbpValidationException` 由ABP框架自动捕获并将HTTP状态码设置为400转换成可用的错误响应. 参阅[异常处理](Exception-Handling.md)文档了解更多. + +## 高级主题 + +### IObjectValidator + +除了自动验证你可能需要手动验证对象,这种情况下[注入](Dependency-Injection.md)并使用 `IObjectValidator` 服务: + +* `Validate` 方法根据验证​​规则验证给定对象,如果对象没有被验证通过会抛出 `AbpValidationException` 异常. +* `GetErrors` 不会抛出异常,只返回验证错误. + +`IObjectValidator` 默认由 `ObjectValidator` 实现. `ObjectValidator`是可扩展的; 可以实现`IObjectValidationContributor`接口提供自定义逻辑. +示例 : + +````csharp +public class MyObjectValidationContributor + : IObjectValidationContributor, ITransientDependency +{ + public void AddErrors(ObjectValidationContext context) + { + //Get the validating object + var obj = context.ValidatingObject; + + //Add the validation errors if available + context.Errors.Add(...); + } +} +```` + +* 记录将类注册到[DI](Dependency-Injection.md)(实现`ITransientDependency` 如同本例) +* ABP会自动发现验证类,并用于任何类型的对象验证(包括自动方法调用验证). + +### IMethodInvocationValidator + +`IMethodInvocationValidator` 用于验证方法调用. 它在内部使用 `IObjectValidator` 来验证传递给方法调用的对象. 由于框架会自动使用此服务,通常你并不需要此服务,但在少数情况下你可能在应用程序中重用或替换它. + +## FluentValidation Integration + +Volo.Abp.FluentValidation 包将FluentValidation库集成到了验证系统(通过实现 `IObjectValidationContributor`). 请参阅[FluentValidation集成文档](FluentValidation.md)了解更多信息. \ No newline at end of file diff --git a/docs/zh-Hans/docs-nav.json b/docs/zh-Hans/docs-nav.json index 301af0fd6a..72f92203db 100644 --- a/docs/zh-Hans/docs-nav.json +++ b/docs/zh-Hans/docs-nav.json @@ -75,7 +75,14 @@ "path": "Exception-Handling.md" }, { - "text": "验证" + "text": "验证", + "path": "Validation.md", + "items": [ + { + "text": "FluentValidation集成", + "path": "FluentValidation.md" + } + ] }, { "text": "授权" From 22f514d1d6989f2ecc0fae65f20b07828299248a Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Fri, 10 Jan 2020 17:12:21 +0300 Subject: [PATCH 164/411] fix(theme-shared): correct toast-container component z-index --- .../components/toast-container/toast-container.component.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.scss index facbd8b838..ee8289dc56 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.scss +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.scss @@ -6,6 +6,7 @@ justify-content: flex-end; min-width: 350px; min-height: 80px; + z-index: 1900; &.new-on-top { flex-direction: column-reverse; } From d2fe08ba670b32cb0d707805ef333d215d9c63f6 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Fri, 10 Jan 2020 17:12:50 +0300 Subject: [PATCH 165/411] fix(theme-shared): change padding and width of the confirmation dialog --- .../lib/components/confirmation/confirmation.component.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss index 04bc4d6f84..752bb22eee 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss @@ -26,7 +26,7 @@ padding: 0; border: none; border-radius: 10px; - min-width: 450px; + width: 450px; min-height: 300px; background-color: #fff; box-shadow: 0 0 10px -5px rgba(#000, 0.5); @@ -78,7 +78,7 @@ .message { display: block; margin: 10px auto; - padding: 0; + padding: 20px; color: #777; font-size: 16px; font-weight: 400; From beb8cc113f3a171cfcabfce2ae3c37e5aad24971 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 10 Jan 2020 17:57:45 +0300 Subject: [PATCH 166/411] Remove unused namespace. --- .../Abp/AspNetCore/Mvc/Validation/AbpValidationActionFilter.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Validation/AbpValidationActionFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Validation/AbpValidationActionFilter.cs index 963459ab58..ae047fa30a 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Validation/AbpValidationActionFilter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Validation/AbpValidationActionFilter.cs @@ -1,7 +1,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc.Abstractions; using Microsoft.AspNetCore.Mvc.Filters; -using Volo.Abp.Aspects; using Volo.Abp.DependencyInjection; namespace Volo.Abp.AspNetCore.Mvc.Validation From e231f74db141c237013c5c2e84b960653fad879a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 10 Jan 2020 19:56:57 +0300 Subject: [PATCH 167/411] Update readmes of blogging and docs modules --- modules/blogging/README.md | 9 ++++++++- modules/docs/README.md | 20 +++++++++++--------- modules/docs/screenshot.png | Bin 120637 -> 0 bytes modules/docs/screenshot2.png | Bin 0 -> 266787 bytes 4 files changed, 19 insertions(+), 10 deletions(-) delete mode 100644 modules/docs/screenshot.png create mode 100644 modules/docs/screenshot2.png diff --git a/modules/blogging/README.md b/modules/blogging/README.md index 9eda941757..716713666f 100644 --- a/modules/blogging/README.md +++ b/modules/blogging/README.md @@ -1,3 +1,10 @@ # Blogging Module -This module is used for ABP blog: https://abp.io/blog/abp/ +This module adds a simple blog to your ABP application; + +* Allows to create multiple blogs in a single application. +* Supports the Markdown format. +* Allows to write comment for a post. +* Allows to assign tags to the blog posts. + +See the [blog.abp.io](https://blog.abp.io/) website as a live example of the blogging module. \ No newline at end of file diff --git a/modules/docs/README.md b/modules/docs/README.md index ee4e33a785..99117426d3 100644 --- a/modules/docs/README.md +++ b/modules/docs/README.md @@ -1,13 +1,15 @@ # Docs Module -This module is used to create technical documentation web sites. [abp.io](https://abp.io) web site uses this module for its documentation. +This module is used to create technical documentation web sites; -### Screenshot +* Built-in **GitHub integration**: Directly write and manage documents on GitHub. +* **Versioning** support directly integrated to GitHub releases. +* Supports **multi-language** (with fallback support to the default language). +* Supports the **Markdown** and HTML formats. +* Provides a **navigation** and an **outline** section. +* Allows to host **multiple projects** documentation in a single application. +* Links to the file on GitHub, so anyone can easily contribute by clicking to the **Edit link**. +* In addition to the GitHub source, allows to simply use a folder as the documentation source. -![screenshot](screenshot.png) +ABP Framework uses this module to host its documentation. See [docs.abp.io](https://docs.abp.io/). A screenshot from the ABP documentation: -### Main Features - -* Retrieves documents from a Github repository. -* Supports Markdown document formatting. -* Supports versioning (integrated to Github releases). -* Supports multiple projects. +![screenshot](screenshot2.png) diff --git a/modules/docs/screenshot.png b/modules/docs/screenshot.png deleted file mode 100644 index 55ff411f0c3821e3b5ae0c906fa02203b29321ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120637 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
  • ;{9x4|sZH1>?Up5()pDuK*OFiS*@GQ9=*?#n zh<9|>_Ly#GnmVi^^v8F1*5`%p}jOD}9nmyzro zD<)TtCh3o)m9#sHHF#M=QM7GA`x}cAhKlW|QW~>3LU9409F%2>h8yXJnh^8cmZwKS zpi;E4NnAdS=L7iVr4ztLX2rcwjN@5Gqq>utL13cpGf4n^N%FF?vR1ip9r}}6E~VFk zlAJ(@vUM{5f#}xTk3Wn%QP~9hr4rTNJ<52E-9?-Y5M2eZYQrmOB4N>_?KF`arjp5@ zGdeD^XnW~tm-BL@faujyCb zO8YhtW&}(AMXnTw?inWe;1Cm=!YeSX{vTTGHWzmQ0FiJZ=%}*M18L@Qa16vahXd51 z-s;oO8@`SPzNj5a-p}vI;^66f0T*_7E+5nV1PrPx5s2)?$@v_QQYg(Lo192J^nZnc zT&gO9zl@{2j2qreB+-eY!BpECRI&^wH0q|j1HDPTDaa8p^)8py4QMVm$Ay=f-XSYS zH|-L}b?um|tu~TAUvmS2JjF^h_(mqZ&K}SZt+&66 zq%vwA5+_xFhx!v;Ph`rr2I((zqO5uY@GGiy7Xgy>P07nd&nO3R>5+v%{5Wq3W0y5q=0AUjLOa;3=OC29v&1ROOm zAo&uDXiJAiL9jiNH&&EhC7wjb?PFpR%VvE-YFXFjQS_|1G1o-hQ?-$DgNMzZCS1yH ztnfd(FJpnd8={)2PUHsw#*58>YQyPtW4ZF-1iT0*kOxZmxb{AaJgCWueGMVR)T}oQ zvZ8Q^P`EJwE-ToZg=t~5&(NyV2|7tJDe*RQ!6)D(M`&SwGZ!>+*Pt`i9C##D@(x~Sk0M=e(I=yP zAo`(A^9JLJy6(@{!@qP8^gM-sOxBT2F)=YwBljrLW-yU6mZLB~zux=OQBzY>MMcFb z_a6v$Pj!r{Y$%1_%frJ3J{+y$QJMC~kKY2AHV2cq&4!4Se{%?KL^2fwt1yeww*$W2 zUZ0EKqViRd2zmm<#pnKKu~b?gKDqhtV(CZPDmWtaPt#|YjcX5nox#DuhN+1NbrZ6+Z_{p( zQEDFuh{LsGl5ga8Us}B|u-ad3)`^MKo2V{szrAD&)6W~>1Gt&VDfuCOea=(i?V^#- zcC7{;o$zXEbcuTUXJutpL~R%G<`GcHWFCVbaYY|v87eQH-PbP{Vv1r&C-zyTcrn2T zPFJek$PW0jwU##f`vPH#cUIYFt;Kv)N68CddbA{Zt59^-Cv^>xjC$Oq1r@52h%|Vy zJcI4ppYnAx^95g38B2b%U8c^Ya%xF5KrlR55W>O1xxBp8aQq7i+l_pHb=2?Fy(LqF zX>Jn>ewKd#A&T;1Vv4^cpkKqHlL|MHjP8u*hvQx291wNZpPImHCAyzzzm(GU_Ax7A z^;RlTHKlK1b|!aZhe{IJO@NR@+;Lf$j8U`Qv{P!}sKs}J2ZOYAo~n5Au5g$^zF^;C z#F*IBgph_A8Ko7PjLIV`WEca3y~E14iXug~PtDHjE1hIh=~U96LDOo027V_AI!G6f zVMDAb@A*-QOM+IdDi-UcIqv?Frg>eo!mV#%&TCwuI5syEwTAGtLY-B~M@qR^m|6#C z`6VU$Np>wBH%C1k9Uaxk?Ck6qq(V)$3w$&*G=%Uf_wQ!o&+r24MF4>;AUOP#%Heqs`f5}LWnuc4T;@|+Dl7t;AceT$uo(OHFW<@0 zGX*Fo&^tl@v4gUBfCua*#d;uz1|u6zAFa)Y`~i<-+Aq?89Dk<(?2G_F0TCYu~0Y}LSJ>W1apG!%l^d%!2T>t=Z3;bkN!gbh`nqfEKM(x6B+M3mQng1GDe+-nW!#{ z9Jhfpj?x{N*Pt~&5;Qg8t6{@`6SCrnS&5WW_z4Z{L*skcl~u=yH*OcH7E!~uPIZja z)8&&6t)LfLi{-HmEf_0!naTRKvjv+}lvmQBph0b|VC}*fPb|A%nnRd|j(PucLAJSy zu~-sbTNQn!+d4lJ3IV}4ota1t<&Z$JMDLrd-ZM%gn@nzTSy?(77gk2|UaSN3D|abV zoDk5*`#yvBr+ zs2nNIEC}jCllzCU{l}Sto#Zru0@}=BW46q(M}E`X2^y}A36<}CB283heONV1%$qVs z$h&uFLg8P?5t<&%CfXSMe9(p3t3`!yjKrV+3lIZWjE(dY2QploM|DyY=5XEog$0x2 zQlj4#tnu{y?H|C+FOe)-y3*AnT4DLVDQgWA?H-HcqX?<&QLtHwpNPyVebTy2z^E|u zATP6<3X_7e&5#LODo5^vhv>Qyw@y4rWh7j543LO{bM5$8MG%i|bZTd#D;YJ5-dd0d zE3GJ7r&|L4{b7j(gU-Wo2l7y+!e%0~!jyH3)JFSgnQ7wgX2s>$K5J;06i4#NF*iJB zmLtk;su&{WYT#5d zY?0;9Dfs;T&O{tun{L5O3Ys47y7uf0o}&$q4UK7-fB&+&T;kfZex0oIsD(sHM!TM> zgA>O$zjdnPv^gLL6!+XaE~h5lXr!C2g#>YLs`pp14*e|8`W?hV6~%CU8IJ1VyvDEy zRH$+Ya)HD$-BB3fcVnn;Y${gK6=(>%Gm-R9t&rB#jP`NQzwjS!mpX?~0cj9h{iPK& zKWi1t^@eB+8A)LtG5 zIhqVSoay#JGR&tkXpS-KJ7;N|dDL?C;b~CadOek3xOtRnRgm&kfg}(zf84NJ&{I#) zq1M9Uu=F-Dam_Bklw>=wgLpLKTRu|q*LFcAgVB_#sP@Gm`k7iQ?s-Fi!0%_k!KeE# zKi(KBRXOw}QwB*3mW5n?8px1UVAY~`KAhP8IFU&*!A(W$`NT@RP){w;U=ZuI z$xSpn^&)p9Na0bV{T?p95W{E@DxKAeBDoqBA(N3Y_|^8#huY3!PMEa3$ytd^B4Np* zWdHcSHj&5$)}W#xw$1Z%JF1DG_iXiV%M%iA=@SS`&}sXJ8XI5H^7XFcaDyYrnao`BF&D_IyJ9 zIUXv8L#h?~&a-+p{W> zR}Ybo@&W(g1l;m`Kw4nO1;;nPKGNu@KyMRb)}mdlf-OA{xO&9NGA&x}Qnl~mLaEB+ zHxiH>%)RQP7NK@I>@Z8*7}WoPynFKWy`fsbn)f$D?OHYuQHs^vWY(h$H^b7R5$iyf zQEQ$_>gn@MLxHEGYe>3CG_Q3uL-0G^dXssvN6{q?^bmkQ+knGOJOd7Vhn$9j_Ey%Z zft5H+9=={OT_)tQz}eu)NmAS*p=2rYVETU^>RtrSIUlq8|G63uTH!N92l6_>&Vpapu0|+GUD;>y!G=W!O+%6B|0k%r2p7o&T zV>HNUXBo!~VvY8%Y=T|_Y#2v(&9Wfb5tjFi4gyZYbYjxoTvTHGHWu6~tkZ*lW`CTW zMacrckQ#G?upcch(jz&vHd3;?cbSWbVl2w=yJq9@bHLo9Jz+Flwn*3``}4^yzSb`o zzdi@}a699fTMEBgU9bJQB|K z)itFCRT;9Fo^Gx7!BiWA=ODbw`Q-8StEv7QsXX1n7MuZ8>*FzF?}*pi`TM*SRJX%n zm@_x%{786RbzV-9efi$~L>PVtqv5cn9D)Udg}A;8wwaTuM$rXQoj?k+)sOK=Mi+}-VM?!6z`-_P$j`o}QS z%yd_+u3ELu>+1gd3*J*`R8HlQ)aX^E`r35GZYMZlgpC0XjDO6t?pue)#3Cv5#I7^6@4b_3@nQKjGUH{TPJ8GSOY)FUx` z8Q*(0V|AupuuXr_^#z(F)i#YEbJ5oZbCq-&$Gqm1)U0RiwA_~*Ta@iOCG5}qvYu1& z50Q{pS%zy<_3K*#LxN?iFd%U}&PbBdb0RdB(aMy+rrHeTz&jrLj(nw2*4kJSXV0B~ z3qsD$lUZhNCkwg%cpof#GyK#y)8((2QpJJU*|UXP0|1yIOM=6tn1}+bs^1TPrQ(6@ zIu1tl@R|5}{h(LBKZT?}H2MBxc*=(z68Fk363R|st7os|5qv(?mRI9o9C0kAl-S;w zz^WwtM2}WZ=j+o{=2^CTg9d}Ot3*wv6o<;2U{dnRS^39OVs_hIuJNf~lN#MzF^|?! z`o-~n-6F;?H~m`yUS7*na-r@L&aMa`jf$j~pwT{2?KF-)kkyGVkD-zC8H$(jA4xD| zfwN6jimUff{P?los+~j~U*dDxAZ7>8J*vlJe1TfSmT>#?g<}~G(ITGQ5aR)|QoECA zt!my*Gx^7GHmL}9X`=Lco#lCsbSz*HN~O)lAxS^9m>L@rAN0`5GtX>YA@;9_=x7|( zuLwZ19>#9JeXYB7sj)U%%sr9hV&)(x*0{8bWwie55_yzIyW?~(yL>#}UXWoC8NZ)g z#*hyW+ak`cH%Qz4JNEN?vY+N#ly)4k_5|^92qm;`vYvMDAuDaVDxvDh<|?979sr0p-=BEO%~1Wo92 zb*2njL$Uk*rUHp^6hY&xIxYRq9!z>4n#OoUx;)`jm}F>**b^g!Uz85sA)RTF5&U%v zT-ay^Qg3GI@g2dSP-^@{kBOi4)&wEe&-cjT(`LUH$Kav<2*X| zLRNH)=G2p1Y>qPuK69?sX6YIxY)IIsq==+L`8mM}HM$Ts)no-tQ}(Uo&xr7mpUm)s z3wiGT=;fZYe*ETP%LSRxeqUbK0yo#v#qJ_EI?z6&TvV=I)S$Vd_4%mM807aP4oOFW zAwt)=`bbCsd%?8n9$L3X{K;Kn!3GsGfWY&eJ*BRRkRUq9?-=&Jz)SG=i7My9?RT*=mIyZCvK!fVr?Nh7I`>E1cZVwweC4h zjUQudRf{{DPCte+jj`)>k-_6?Ly`@kx0YLiHM_Zgh}v3Nk7(1s`>pjr`Mqg_i%w7Hf0@wf$D7_nHt5AeyC1<4+IMq#5hWw`p z9ja{F+e19m3t|Uch{gKx13?|uND#=cN#>S9&Zp=-$ZxjR;yaWizJd2TAJ#>wZ5g~{ z=b+ztaQlr@)NomWInLR`BN{Rin+q9<%+>sIqIML?LDMBm?h<5oU;hm;`e z7At6a=PENj-s0$cqbUUr@3Qvz)#5KZRs~yQWuljG%|HiPEpL)I&;<6j<)n};!Z>lO zyo$Ov$-S(`C?8%!ltCal7Bjq3lqlGk6Jbn=u`F$c{A;Jy3SBvz9}-8co!X|HSn8Ab z>bh>uj_Hp-tOH&-4JnS)V>8WEOL3@93GJ0An$j@xUNnLwil)DIx!Q&v8?FE8Fx-g` z=OeW@bwT<^3wyzYgICvzJG71s$3X&$hicl-c=W93m3`}0Dhp*>D8-JwSei#zU}~xU z<)W2ZReXuuacKr=zKCF)Px1@*tq|RvJ*gVK5aqT3vZtp=JMm*w2S@1T2ClRt=?&KR z<8K|&zG7v||c zWe&1EJe65nmxjtIyP-_;w(~O>%n>oJ_R1yp=J$U+i5^+3 z%v_MT->qEwxEJ9k%(P1plZZ>2*qii-aBcbl0nD3QPjWvjrq#}G(pd)+;<+^n@t z!gv^(WT^d0eG z@?%|>L6}B~^QJI0wfYD9&N0*PlBn>J@ejnDI6OmJ7_~;Pl9##>*Ts?GgOQvY#THJh zD~rNJmdFs4lnY}nmR`o6KXJExfg5FjK<8NQ{vUzC7O%=8C`y}N1!051IS0y11;4aI z(RPMqPeA0n#`(6fW1pmqT60j)tXw}bM5i_hyCLcmJUdATc`&C{hMd&ZCN!O5`Dm&r zTO9nFembX3yV9se@Z4J<;O%aI_WoKgh>?6D@a}|_yg*`s9dq*o0nMnn4O8+g=Z_K< zj%>7}L$<>@23&eElOp1ronEFN%#A|dnVb(7lCN!}Lrj80bV$#oOa}y|t{i(enEp6T zaCFoH1Em~Q)dwkeCTT4(ajL4y<1QcurK)ruQ}hY`3m3jzdn~HV5chry8Ot zTgsdBy0#~c9|j{~-Y$RRz9aW}GWrk()V3H6ap>Y@o5wGissDgWw%9hDUL(20^$ zUaKQ%il)z+smyZOKM@g_l<15YpG(mhd)~`2wc?Hnk&qSJMJ$N9?;Ef?FtQHa<_Ied66r(nduru4FHMf;#9>}s5x^MPv}zasL?lz&fIT1@ zUfNe6T-aO-&L@UeI&lFb&2tTZT79W#p+F7lIgV>5wu zccds#7YCIl*Jy^7P$F4_>$G&NCSig(f1r6WAk2^|tVKbp)WGYr)Jeo(e_zB-@pFomvZ4=OV>pIe6^yhPYieKxnL4ft~96Lsa zp&w{2S!k`871#_x#o ztud0+q$2I8S`N-XAv~h$aMFxmq){H|pxx5? zys&U>&M{ln7>t#kP41i2@IGBM(k^W)Any}%;&%qP5sL38TZ;}|^KyLO7?Z57eohkM zBfD*aP_Q$w5)WV^?SCN1oS*x#pODy{-v2BfNQQJcqhaP?+rp98d0zQK&Yi*;c_TVVcuI#B2QsH{#$ryNK~=x=}w5nBBd-o%GqBDjqygYQRH)WHK` zjawg%BO8(wGJTYxO&D+*K0``^$L1OH$2}U-vuBaa^i;l)@4pYm8jTLQqZMX3#M!gM zs^Xn;pWx`MU09beQMjNiqQ3Z8f)BQuk2>4y&hPZIqN{_AY3P7k`mbKAH^$xx-*m!rC7?uMr=xOz|(NTkVu<|Tp?a8D`SpWrE5XDH&Fyrb25R`(k7}*bG z)m2?D51f1c1l+?179AC9AAwz<-TP69c%6_0byA8y{j+CE)I&>mHm~Q+v90eTXGs77 zci+6OulKWuwFbf4KM3lWFL^QKktNrPiEQte``y=vs@K+Ost$*i?ze;d=OBXJa~=FER?)t+ z{&`)u1MmM5Rd1tS0aM{?z35eUD8C+~vfow~OAHCuv|=AP+2L=mnV0cdzSFZrT+HWK z`gn2M_4=GZF6W|w25mnsyW1%CuWuGaf!FepdQ9BKJGobjvT|BL&({2!jUO$o2ORmo zH+rl?YIfTsHqeUg$cb!(Ytp0IsXg*}1SGo>J97K{l#R7bUSx|Tml#z(OG;OvQdz*b zw=}H@?6jtDwbH`b<*6HJ&SoO{W^u3Dg`B!2pyy`pIw_-x4T*9V%c4nXz&p|R7coYO zPh7=AV9!ldTLa?Mk&TM=;&cui!vD0uKTWS1+n`XoZG8eYyJ&tq&dV`;>oJEtnmbupzJl>w z*3>_~u|m_*pslcJ0$({H@?>8}$)qf=Ulbm!`(${|J3gr?yH(HmRBKqcXI#cEfomH^ z!kL=pc}_cfA&hU9a&Yp@o7?{;)7q0+FK+&Sjua(jMESWti#5iITm!6ve;6BYOn@YOta0>C|$7*K|1bCSJbxz{ArLs`!*}5<28R9X3cUez<}3 zr^CTf#Vrq7$i_CHf>z3scRj>&mbK)kf79WRxpM=^s=m2=_}J;B8pDr&#roZUVgg#w z1u15^L*9cTl%leVr@R%Z8O`vU^m_k+P5Iy(wzAc+#O$3lco`8# zt_zY`m4(;RHD$y41e0b>hq-iB3F|&A_p8NO^J-#<3+XM_-n;)k%8~E8Zg!5P4AgJ8 zOuAjh9WoIy4zqpdH`gnMtlUL0n(QYTyT*c4DBu5m{|o}8p-nscyXf^>#iGQB*v;8gB$#M@KdiD0tgTqa0__i$m&$nE}2a^5!NZ!6{ixfsi??0da|2>cwvnI5E2GajMgGJ7{lMl$+r@nU0 zvsc90N8!L#G;M@-TQ&@HEB}&JRFDeS$=gN)?{Xj5gF{}`%CJiaD(i}kY|W0{>dbC2!Sx@_7}ffrPj0%E)tx} z2PjF?h*Cx1!}X{mBh)6;mbNX3)l1m8-PNXvt^w=(o{?$D0}u8pB7w2j6woSUKs(6D zklR5nm;T3&ZHlb>mnJIU1f+OQSp2s8mAFOF_pK5~qV}PJ5h$0$%H3`uk_>W#ae3IN7I)_yG&GDpU>aW9J=Y zXLu$6f?UI(8NBZJNrTi)SqC;!4>pnL1rhNHP((mo6IQXXJe#XA* z%j9+w>g)JIuIt^fvGrM>aw2H_$1zYA(-}>r+?o|o8$Lv~+blFFRKneL6~o`^|25w@ za+>v5q0@>(iFx89w0($LGhy&JnH+|tIn$dgN_ocIhnuCnwbeV7x zs3}>z>XVS_#u+J=!-nvD(t)7BLN9*g@O5qr*u!(v+_|H%8nLMO5ZQt>w>2{h z?L%QyR21UlP3Nb7MhNbgjq$9myO9{*hx?@9{tW)-r{N#2nRa^b67a8^{RK@b1$dXk zOBJ~$kgj(vfotzLBQYm)KYw~}4-#lVUOClQ33+ zgwFMMhAp`%hX=D3;2v1oNKBhEFOBNt{E?YwfDr>r^PEs*zo1A&@^C6>qODKn-6HlQwt;h}7+e7)Rifc_um&abBW(^HX<`s>(q6v{B3&IxFG`n5r z!^6PPB8)_UQG8WEFJU1RU+5SA4ac;=Nl2tBO=j0rLOX(@EDaqav9N-622~mx@YH)n4jVXV8|iq{<@;-v_1P)oaBHs+N{j&pKGl6%K2#q%df9(qQOc zdaBEK(mwW>K-5$%*>UH8up~BXDN|#aE2mCWEa!?1`k*n2Qmw(V1^Q}zu=Fq)9xPJI zJyJ38Y9!K-2|Rm=Ai9 zRs-4f?6l>}$y9f@ifW_@fhE#ckJ^saKUu{Rs0-|C2Xap&Q?GOEO{zFRwFf(`t4(~l zz4O6hv-pQ@4Zn!A+;%D|9t}|H8QP-fVu-Gu0s~`%D8^S3gvUqb&H`*>g8u6XQ^)Y& zXyDo^{~l5h?o-wEI)!z;S)BgSx|CLmBr$%YMOak>TF-Dka*+_90ew-lmeF>NgjsT& zD%v?A|EK9T1lLy2$#yJa_KX-itd#p6lExEN2L3s@!!XRnXLu6KAQL)$H_ceO>p|N_ z5JSr3AOF%I;g)8y7IebA&ZcSQuu{cg&3e+mWjfrYItXFmVNNmZvYf@@2~VZeorm>1+t~1Z0mP-K1Wi?NarPePq0Fbf}}ktHp;!hM7GO)2++G= z1^d~AKyCdMHLMvzlboP1zgVHPpp!`0-I`X#->;g~YR_$!XLP0#ko$7{V66vHgHDuy zACA*8Vdg)~T`e16pOhiKP$hCzm=$^Jl*ObjH54x!J`@uR=D@j}Gc)s&MFW0WF6#pSh873>ZAU?sABBzNMSpT7-wuJ1$S@_9-;1u!m4L{YHOk? zzzh5k)0+!wrY=8{`JO9H3~HH;E`Yfl?3pN34a>*QI6LMs8|s@!X8y#FW1eyF8=h0wM4sA@>|3;OW{XKu=27be2Hz)6Z8b{^;myYT@PCVow?tN% zqm^Z!jp7pDXzrjVlu7I6>EM65^L%_gd^z=g$~P(3gW;Dha3nPoH^6kD2{FHjsIYjzu2HcA1S~U41)rQF)~9dXQI^Bda!fZ^(~ApfD1{Z(47-sC zYJ5rYUPKY4dF@p39@{DS$JAL;c;a?MU=2jj;KWY=EF{I2s9_^Gp!_*dX?gIGT0anq){9NP$U-6nLO}M*uPD@p-6Dnk5iB^+Aah5mWb9n< zjMzjENeJ&b=l? zf6e-A2kKMs=dC2xGoV}WB}D!Wa6rfDC|fW^3YGn_lz$N+4mYYoh|Zlf24Y_n zwQ597-qJYm&z)MMLrN{D`+*(pdfo$6O{BkDR*+cP8X$0G;3zA%uuq|#Wbu>~q zBIX$}_jd`zF8k_PnxFil#=(m6Y(xkdqn9)-(HtFmM%lin87%;fvO9knw#6cIR#A)$pM=vixDeKK#=FMh8u5K$ zY-;@hnJgMm`6Z36-C<|@J+P1#OOk}8-O7ks0-4;qd#7XAeL!dEAte;M+T+Nxx7IH9 zdwC5=(`buVh!+3C7bbrVJ^V$`_=V2{Rx((fko)oTC?w&mmY&mlZ$;zi1{BVbjF)_u zHlD^t-?Qw;eOk`@=Y-@NmB?us=X@lK`D|^Vw>6i?ZdjE0P`DVCH}$*hj5Lgt(aO zz{VZ5c#h513)s&9VxXZ5mv8JL&z^NigUc$Gd#hoF&nklyB@U*QD}=ay6g|Y)gJVe6 zh6>C{TXi3?4qd;3Kzx|dazls{=nkXd<;KWCld4oV!j^78VZ4%T9L0aUCNKd%O5X{3z%y9XENd~OsP&h zB~_)il|jaxL)sPMWERdrqB|D^G8ZorAYG$@zvMO@zYvWz&pY;6DRn&M)w&19gP6{J zPKC|N3)=sL#gJ0$K0so%=D2XO=n(sIIh6YL;Wu-z@Y+5{m;WFqn@7OGgOww3do^;a zm;Jy-D0Gj@NM27b&1@POLkgSK@Nuu?(pn|ZV{kqt`B^L*tu+m9xa!^K3olF01c=xf zxFRp5$!pO-3YBb!kZk1N2NuNeVGStPOOvL2kf7F%;SV{j1JymKqr&P67!U!4m*tfo zjL#FRoVJMt&r>s`+@9fNrs+ir2cE+C86X8ra`pxNJpSlMa6;Wp$4R+gN9W%~5B)X* z=;`D2FQXfWtkv*H-8oLVWAwTpr@t0h1)Lro?-HbHPlEFeuj7o=-1aS}y_C(vTIC?; zntVWqBE2s($5;Q1g@0_`>djJ+XG@6%C%T=3(o@5=#5CJ!lPuST&587(6I#kY5@eYY z*gqJIK5$CV&`7RAT@J$mGY6UOB)=M5?>P_PkO`Ml6yz?ZvZ%ut*>Lo#Vl*>%PGM{# zB^<1r@@Nj^x8m7z54}wFE{IX|ZEA#RaRI66wzykf`stdAFoi+-sW=ku1Y5?GIQvX4 z+f+5mvM&cFH?$M67()i?dfS^rjw4*NnZ4t_(-&f+S?&7N(O&+A_j%QW+~>C9`9>^T zOG>ngQ@M*yECzFy$K#G`Z)c#c9^D0_cm@Y_7 z4$MvMIl89cXkf?c%|EiZ`>mvRFaORU%^*V~pJnI~BT6*W>boj02a^`F?PdhTxS!Ew zba6W~4zeb@ktNGyn&_QUKUhO;IIXig3Y$9)DAmBq zK9HKM6!F+GFICYtftiV!2j2%Iq7-LL!v~{bumP0gAB`{*NHA-k*)hPezi(%yQ5{vQ zu@_uW3FluHvd`eNIh^~sQmPN7;^Dek)ezu({fX$D;d?j;-9f0f zL_h8i{XTy~NpfrECcVP5$U(?d%8BR+nCrUrJmcx$<-yl!&C&-}&7kdxT6t%dU~!^f z2qslxs>J?r!mYjgF0nhks`HwEup`^P-_ybg>L>wA|36e8UqLCa-rT3OMz+75xSrmk zz~JV`>*g)!3^DX$oLC#zE!5tzF6eA)$#|IZV9(s}Xag7yIXLZoO?k3pz1*sA!uT}4 zCEGugppS|NGnT=i;(u|*HEi~}zo-o-V?B>AqfidbFP`3a`r9j;;5fDnR%Ozj=L;j? zmfQ_TrhD45g*pzsJ$8IvZ2RT=Qa1s0%-WS@1`F>f$%Bo@EF_{ic^-&PFAt!0K0~Vj zpgKT!LhI|xh8Nf&x$`UWR9kUL$}MLo zaeOh;=K!kgBa}J_n<7htqE!mHzM_utPabPo%V9+t&BmoAB)$-X1Hi(s z8{_20KYbc-|C8u{*Puv?m5jVW1pJfE0!a(hVyNMVB(e$zN5I4thLfH!@4&_-7pj9z zY&Vqj`wX1_l2VGdJ1+*q)sgmCG0VXG}DTIdIoV?OT>H-2BPHYQO=Nt{0ov2L*Da~QgtQBss_ zwt;#Z=S(Hf1pm4hM>ngfk@z@jy5jxr=_G{druvw2!SBvBL|EvMnSx8L>Nx2jXtFHM zUgB@%;8pUXNmX8(SCj_MuiLOdL*GefN&P)M6Vqd5mCMkfZ9^`@569AGHX}ZXsKtbU z*rY03B8NvPN7lN?!K^lY3`|$XeM1^$(?(oBzvZVzMU4(kRkf}X9_q1s-B5Sk2WoW; z<-ZL`kQhucMLTIwgcD3e z;(Pt*B71t~Uu}E7{P8TO`Iy3I9|D;a83f32SRR9|cD{{t^n5EqXX8RiE_rG&`e6$e z#zC*YFS){hI4EbgH83<4`jm966V?Z^fobC8AW^+QGQ8E<+LpiJ-{PnSG-c%!mU{ z@LgRVFcb8>NKFTx?GaMx>!b=!<=gEejxWfaT9Tq(Z@+Aj3-M|_X8n{POYS*_p!(E! zV02&~t*-(`8!^GKkmK#;G0lg%h(`4eiMqjlOCC9b9)-tCM3O%i(jCsojv15>8i8e; zorDA#xG5}+8VRVuLBEk7+-1x=)J-Dc#yacYmQS4 z@=N`~Ch^mzWXXwfis}@03L`Ag7y|S?3V56txxWcIBA%0qBHD7F{toO989zSMl4=H3 zN3jx#adCc`H0$F05l;@>Vg+=Cwy$%&4tG|ktZc{*Dy~?O>IJ?BsMEZSIHmy3v%=A2 z^oQ`e7B4(D|X2;X==Msa?tn^v1qeQD#U_cxWTYDGVdwV~b zzjaFJcq(}IwMRdyvIw5x-3n$AYp|5TmTnI<6nG^c)r)*)0pAWa7%2%Vr+pI9NN8{T z=253 zDR%U_Uj8mIL07$7NGsPsD)@0BeG$( z@H5&CMU7o2@@qWhU12KxI(jCua_W+pBzAC5%%+= zcXQEdPSP8N`}-#^4V>ezVARtDB|-c6J2ITJNw--UDNwie-OstP`6;1mpwO zN#y8f94E) z(>ZMSIb#8%qPxz#MW+c%tbGbY{tU*E^K$Louq0!Rq!6HG&$OC?lewK^&0`kS(yG?i zkSenL4C4*ITZN3$tntp8MwUmC$(g*|xQ@&?>G;K(9@J>>@~})H*)dcYP_1d?$ePli_v--;4*`mvq9ID`%(RjBb%~BZ zc<%=ViZC#l-ncGP90LNCm-8kKmr9-hfx7)OoF-p?T$EZZy?E`Lk~=e$D{2^A!uDA+IK;jL!1fj7!SE&6lTdubSI}x31X9;RJ&^e!>bY zofV$|+H+w*fFP!)#fDgtTT6x{JV-5e;~@GWs^jj4{*5brFM=e@sP={EPO!Xx1c4s8 zH;e8YvXx!|)Dj((Xp8J~mrIAX@WRi?B{Tb_M%7=b=C$JV3v~5j-ud1>7gl$ohw)F zjwLf2hCk9=v$?1Dg+*KhJiU7N7fHl@`DM)6C*{u`K7>vMj{MKZ&(!lEBk-h8d^TS_ zLwfs7pW7Bbo`v1(i@ri*kHwfgy*c-Vj=WpN>D zU85Z;z84~Zh%xCcu)YDXBlGkN$j94PURK7(kzZX_gD=48j--rTw5@ds5kdUWk~-)j zF(C)3b(R+u!+?pA&?YUKefz0qpDw&Rj!fb6C9Cr~|B%mDQV?a+exI8jEU8oWG$;K* ztJULm2Yd0eCn_Z(=~E}{F`HLe0F*z$Ad--Z=QVyM+n^L|%3@pv6#&~@f@uqSeK+JU zrVR7kjky1d0Jd`-*#Htb^8l0SjjobZt6n$$n77V)BXs|4u_W z?2Zts90*7PtjIB8|MmVL80x(c5k0ObYt(<>FzPos3{=##m6AC5)#0Ec}xy(NtQU}w287^*( zx&CsSs;sTrM5g9jUBK4&%ywI8O8s;6A6>$56qA>ur;Gb^``7fIOQa^K1NL|S2Xwl_ znendl;J+`a`RaZ9%EH-Pq|y172W#lqyVf6C@xA>@cI(=1V8zz-Fm|_N&35@J+CS(A z&!HdLrOY73@^T~4Ip)ty!%I&6zQeJwa~m?y0Du70$WX^uPSWbHwEhA<<~SrU`JGsZ zhiSV5f9^?YdSSr15esdW9Si|f0LUViYjf~~q_aM_J@3$>5hd%U5vAB}eclQ#n6gBv zA;MV>>4yk~0$R%5-prbR>yMj8MHIdho?TO!@e=PL^}7unG&V_HBh%Az2vGTIHd^i0 z+A1r^5Q2*)?m?6L(8bzseJKlo)Oyw0;Ja$EXUR%S7jt86*9fonY9Y_I3Vt=BU$kF| zH8pasz7_v`815*06o{l6m=tIrw4{D#h-wv6g#$mC8<+S(&5b=6t^+{ZBWOVC===VC z-F*I$4LBf`h-MoCl+#WH*{&BzLNf{h61cBHT@4o3GqU;REc8Etq{F6x+?;D?3HL{_ zqgP`&Ff-DDRMYp&Y0Yz`twJCG#^Mqv60LIwOdnvTEh2 ze<%00`9{UBfqPNYRf{Afj;|9y;piay4UINMiU!=n=8;7(-))0!9gv2plDd3hvr_$cMpA^1{t1|C%PJ#M<7wSI@{ojbP9(Y*Ba!l&U zd3IiA`JGas6Ki8Ajo^w~DMwer&DTm|z#reqMxKO{Qlp4&V?KccO#A?(wB?x8u1Rqw zr!F)g?X`}4Z_sKQ>NV^l%k&pz^Y0m?z3xkn5yS<>3vf z+-p0SSD+qMfn7yi(QV(~x5>E|GA2`eA~i=k&(1d1rAD39?WfZpCJW;R0_`NkYh^C%te(dH_&g zA@uKX;Op&aouyp18`78WFLq{Yoe!e!Z`h`2;^9H8C}@EV3oq6>1W>>h8>6MvbU>z1 zvT=bib(e2u>FKsdmdTIr#YO+=QuiSSl4{*HY91@CLEyBk;DFmiu$lfPc?YUE#=mOp zeHb3o{HfYtzCRCKRlk3qa*yV0yN3q03Avzmzo~5qYG!94b=5N$e&;FL1DcMUhMVSy zB`%QNJ#A29BfbNC-$$zoCCJyuFH7!Yf>7G%V~t!okx4Jh$Zw}&@QZ(?|m(i#IJC#2r(bpe$Wg2vV3LMq)zcBfzSnO2!p{yww=++w<$#3IV?@EA& zfwEEfc7t#235Kd?pyjm9Jf#whw?j5v43`kvOinsC>TflAD7O`Mg8D2BgNk^~EW^Ke zr8_jXKOqhRKvC@B?uxeogU!)E9xXVUGcXw9NM z3((~c)mqcYEaU72>PJ={gmT2JIlwX(TA3E?&nW-YH$=Nu;Z4ZL&)U zp@Kz?0_sksKI=|+BJ?&!i!&1n49_Z*Ib#rC-OD080?j-u8BQ4kjT|r{Ctb6@MAiZE z5}Vb#?fc_&`|gj2CLPedmu+RrU$r)ujx}eYPVI$%)`+g8@SNIt(YqofTVCq4Xf>b> zVS4>i8i`AiOIzaVOsQM^BkuwYwuf+B=mwCoB2Mz`xkjevgmu#H?mL(DZvR~sjDVSo ze?&AJ!6cWi80H!Cs=C%sSC`aN_(+SHL`49v2&aJu^(2gL_16#1!tWX8t5Wv>O76cy zSghFcm^b7Ot3$)i(Xht{@J`;G75(qWNzp|klMn>hcA@}XHUW=D`PtTHaVbF@@tXst zkO&NWB-u13wzzO@Al4c>@qAV zgp~e65yq%uKC1AgHNhlW3V?F@$FPM2@08`WElCKUP03a)0j=*(Dxt|c z?EuyKfG#)wc~`xK%NCjntJ1|@twB{Iy&aP%0>V%HK~N_h(880C7Y1I+qXT05cHA_| z0W}ax2r*fFpVNkn2rnR>=S;EztLOANO^CZQXhzfmd=U}Ke)n_8GaRO}D#@j@+&(n( zwRlvS(VIjD4n@II`;5{WF!!8iC#q@}4W~(wC$?f^B7uWP@}v-<*x`mfU>8%H=+DG0 zxwrlfM_7bBQ~=e&t9MK&*wkp87mRTyvD{iG6A@nUuxG^tp1i~9NCs?0tm@Lp7)PF? zHjEfUebm~@A%5jT=(KOCO*XP+6Fg36QvDSU4vveB%-irxCQ<&s+O>^2l{!ee6iY+H zKsSfd`Y$(arYUu)(xYztU|S}`k=zytsSh>q zUs?dbLiJtrmsF-zm44zgVr|WLXiz7tyX6?rdF_exVKeaD%moXIef2cBvPM#>>i=k< zAhwdB*EzL$ik_4Knx)lC?_(UE`UG%#9^`MG@+gM#i(Ik!SMoEtEYO&$kKY*Q-uCxT z9oUNpG3b66exGI2|Cbp3bM65;iovkxqSg0>E{clZV5=F~TH5rGMNC^pmR8Q#j+H)G zg$mS=$6-)0bWD^<{R#VhqS{5 z3LAipL^Y{rbHMbA>ou*0i{h;t>xybo-|W$*fDM&3eI!kqB+~Kg7p~5vX69?A4DElpWHtGq~B?#OLzg z&;pDq`5oX%JCrRujK2Zw))BhN{+zjV4Gv=JSE;K8NIy+c1(16dPb6Bk-_n_rb8f2+ zhqM6gWMG3R`9xbsWztWK#YJO{SI{J>sjdBVqCO^AsUMgHqP6gW``$U00BR@P`})be>^& z|Dtg)$FeB!>;;pHhr@xUeKz*D2ilG>-TQNY=e5Wj;`a5zi59*JNFx_~c+ z^5;UN^{Un;^RulZ}X z7GMHlmQT)+#u3ZmF46dkdsARTkcz5=I@ZVsnEOz;4i_{eD?Yt(sTP1_Ja;^kT9ej~ zRbQo6i9GEO7QTG+UC*od`0Z5FG!GdFfExOZYdH~M>qEl(JM#ve~YWx5I|LDx;6n30yq*(DT>Ub_Vt~lXKbYy>N2=f+cwbfka-($Tmo2~Z; zfnfd|v&v6iHB&`Z#=T^e8G9FkXjvaWS>dF@1F~)Imxt-DJpPmA-G`prV;y@y_;+DL zOwK}x)mh|X?%4(;UZ-6j(<=e7pn|;>d=;ue>n|xGL&<(gz)U;C8+dp`w?+{LBB0r( z6bnBN!5U2tQ@P;3U;QqpEZKkb&Arb&pyIt6ZAOt5eU$~JW2Q9=oWa588s9g*G(4*J z?6brXU0;_suw_mU^2XvW|iW^PQ`hfH(Ng+OMuStB84B-(9sKj}3#%L^TzTpEk ztn2-0vV+A=XSq3=PiHr@*_nhLi3s!jy$~w!^MCxX(&r`+4eVI(gaP|h`6z;<5?!N- zCk+cwO*>xdL4TX9bZ`M7JO7FuzS9=Z+~+sBXD!$g;(AxVYs(`ApG<$i zELr-($^&+>@AS!l7V4YCc_Dp63LDN>fs6_AZTPFlEC9_|v_l;cVl`uX)meBZ#L1{S zZA;xV;oQU&#Eakr+6C@rPTcg0Xaal^+v^rmQeroKdC2Npi~3WEnre!vnhDvd3F~6T zFzZY6;dv1%OSqoTFs(c515*7*vG(>*1jIPl;9V1n-eRi4{jed)cavMKFgdysB_{F8 zs~anJY`E9xbe7WZWz~i=xZ&8Oj#tHE771#n?iK9IGxkj84U;1|AK%xl!v9kWYNse) z9UA|zrJFnBP(CksQCswnNZR?X=l0(6=i2LZ$1?xxBJi9B-yvK3_m0Roc;BQMti%S% zWwerYbrYS$C0p1r4=Pflkb(*&vX|J;R)kyRb<5a($T13Ff(>JYGAKm2aCqP%rS^qn;bAP_19HzevI+CXPh~D_Zt;|+pRWG6_iac? ziyX06SRpJL5diNgE@5uC2KTtAO|<~)C5+h0a78WFFeqe@t6lZiGbn$EB$1|Cwm zCW@NKR4|Rull^4=*Rn_nd!1ax*|ao%ksVW`!$W(^&a9CqV1>L-%91X3Pfj5aQ4LeF z99YhTcarp9wZOq7ld*X;;yBpP4#{J>@B}wUql}X7jUk36*|X3fX^Fw^6wSym;8Chb zv8fb$c36Mk2{v6s*@k4FydlefZq=(hQUCcPdXhT4GL36PsE^BP@!n32PU{*l8l|-a zxl9=w5<5zwT(JR`x=ATIKZbHEK27d011^=#NYh0_mq<>#tkyr%B=8?2@s!@oHb(Pj z?S`FQ1+(WKf1|<6Di_=quaIwg_*(CUIetV3z-LaEOJI^#cpKU&R4wToDnt6K#~(6~ZAm~T=^ zjX3RuNY|*yrUNO|1WXKIPwar}pZVjPjiU-P=cP3^#`fYs+1@`^tEePvo8F1*htR{w z%5u|Esj=ETJ(8D2xn>O-*?NF-m;vuh>*#HsF_0<>)QF>V(OSymEc+4{m=we#-u6YC zH=U^G=}I__85v4gKdbLmXZS~l_IhlTRh8QCUJdA%W4%s`mYvCUl$LLp1ePquiTNEN z>8}DE(UN-$>BZSRcKko}qIKjIn_HVhKLUEF=3PpK$o8R*-gPpdgSM1~!b(DzfdwT- z{Oi;4X`}p7Ro9=VP1^>md;#dvH`fDD@Pq~I_%6*N1aC#@2tvRQx?J{FfPuZh{YQ{K zI35dN03p*Us5fs91fcXsn~L`?1iXo(>*Sh|3PAnRJ?S3sT>w_Fi@)b$Z51FO-5Cje zOH;cs(pnA|$+3J!9W2RbOL|Asqkhp}07xZfoggaK-!$ z{hwm#+ra>~2^Mq6#~sb*@E;@(YY#g&7JWTjfTLF~c z{vU5|85P$OvRybdvJHR;O_1Y!5xwi+}$C#yL*B=!5tFZ9R{Df$vNk}_kL^L zzhAHUF*Dn`dv{k?JylQj|2|=mu&Bi4)&^4jc((Tw@_ansS@ZWS0SM7_*Q4EPd{maa zzf12?_=84na&o#-9s>~R*UJm;sSBLkYM|1g{=c5rKFEgs?yiiHL2mT<(*KbV)LGNh z`8PIjdcQXq#=Z3Q{|VT-0dy)jt&6Ja+LN=4w(c<)q>&}qq471XJmiY1m5f!wp{Dr* zY*AAH{(eKO&cww!bGU$Qd*_sJ>os&@IG)jk^b$%kR{Bn%k|J+DO#uI85&Gv7ll-M& zxo+f)W5C-@=F34m`x$jZl|~spsFEK3y1nOEJ3wD7jpK`O1?CYrIUb@=vz~7PMGLXf2u5*|0xT2Ug%dV!?B zq`AefW~}`))^5rLE4p8~m&NDW6ey1@1I(0;!&ei$E6kiPOqJf;dbi!RLcxWR^A1TJ z=@DzX?f$|;&C`eA@2bUwzrEK5w@L*{5anG6cxIG+rRBA}TlWRNw|;H_)IM+S&Sc&> zWv}lU%}PsLfA6q5yS>~9qgL<0iNRgk?a(t_D)q*IyYctio3W;Q|EqKGjsF{vAA|_P z$LqKsZeW+L{cU?>(jv(A8b*-(OKj~aHnaBe=@E~YTzF|doJ#jz@y88Dx2-`XO+N|D zMF>^BEtGH?K;MzrDV_krfrFOW?c9irnjPYB>BlcYpzbOAvVfyk-+(A~%ra>J_ak!P>7td@!pc$YqDe6&0Z0PDGZ0bCFn|T694bl~^9F zEl7s-&7Ldti&NSUyp@=+NN;uiR8rpF966~~>IqB&hLIBOQax|6mHuT#;U@spb>BDY zfbM)`JAB)CdBdo(HDfq|wG$e7FeLbVfeZTKzLG|?@YL>kMk-aFEnhT^rK8df#6`RT zaa}0kv7V6)V(rPR1G;O8CJjZ8bLg>4*`L1@8+cRpe-nQAZ?N$bOto=I-ak6-&am-e9-(2%u{6q*U|Mnk7+zJp5XKI8 zZwcM?q&tW{cUHqtHx&*|kI91H>>B-#{SVt#j8Px4<6SEJ%1xw$3cS zhFM*I1#0%E@H`H^_?bX8A2(TSOs-NY9-{&5z2m&g_dgIe{_eTIvQpFbtXOT^5ya>rv;cyZ$xXtYw>{SMp3 zU2us^(|2FDH7Q|bl=bP~!i-2NHqLe@Unt>vgp{+SeLYqX?& z)8S!7^eOYNG{z=hYv2NckY+hj4*=*-T~ijU*kL4aHDf!I?eT$LIe@f`q_FMr2^aQ- zFkx`>mQ~h4ZyI4hp+LN%>ZtCaWa%bf%*zXBJQq*gotK|945{9@6dQlmM^r;4j_j)( zeo5UP>LR@7$zQ4e3S?;q`OOcW)_Gx^jl(HuFX_C}Mt%SU!clolrY~F=%-oV52`?>% zG<`5q(`#n$#LgFD+N&P`OI8LTaGF{qb3REf<2QVM1%PQypASEuh)oE)UuWsVfIcC4jtBrDCs?l;8mauSlZ1pP1{@Bg@6H~#c6 zR2dDL$l`yaNUxw!3VB_f4Mi3767jo(Eh5PS?um__+K)~UvDP)!b19nrzHEgC`u*%X z3LDgZVETMQYIk{mP!J=b&9i0wXb5GpaKWBf~ z6${ksf_w@fx_$dB&Y>kAe~SG9=n50TvqyTdI7%^Ucqg^pbi3-5Yj&wB~%1DDPBa>{vK{ zX^Jxt;sh-zs)v^lcJQbpMaaU|Aix;kuRw{JE5FAH)|Val=mkszoG+#Yy{}^Ke!a17 zl8N^*X43gkyG5%Nx#vUkv6SOj>LtAjd}Lx}DeJWNLCqW{;LaH}0{)cB=cV(K(qsPi z(J-Ge=F2b5l0n=FU?#%i(5r9Ra1gtNS5(-@LFbR zA^t)?l14>isk1DzMtKs{mk-i87jm#3WPM=R=or$3}lunVZ*tJzDRgcQx?F%#CnT>cGDc|=mx=+661!FqT=o^x2 zLvj<5D~>E$lK62?!VkfG*1pVK#DQ9uWa*!OBAy z(RSBY53wl-7psko+F9P-hZ#DJ#<1Oig$ z)F^*25B33>A2*~OfL4AGvvMY)^{E=8CHS!-@Z-z%X|mvpnpk6>7hSIs;;9^~u&eaF zXX&u0PsNo%Vri}XRk{g{V6gu#dRPSDCib5xamxT)vQ{7fsmxDJE3y8Y&5B3R8{
      7*T4MJlQ?4yy)>!R4T9CiH62XpEo;)GiYxS_{5E!;jwoC_sVmuc5yzq(V z68FVw@N!%S#u56mX=jF1(mtBSsA~x8QW&@)TViP%!=g^>`Nk_(G~d7L*%Ip$Xwar~ z-I9F#g4&>ZSCa!zU&MoAvQD}_j|^~&IA&51_(9B=`?RkORpZO8nSfXdj%?%$33gd1 zyh6?wUz$K^F{>=qH1oYwLA5r+v<(uCCmQG_WdDim`A1*QzUPuOSM2Yn_@IIzCO0GT zTB8faZ6X=P@$0uNS3m8ECC+5q*LhJ{++D@~u0kczC3)(sYdVxs4pkg&h5!n-^>(95 z@Tu%)ouKN!K;oett)-Qr6VglLUpx+fz32FiKAL+!%);Koj$BYRicYKswKutskk|qX z=fr8FG~?T_x5JM>$^dnSzKFNL&tZ+8q1AbClM1N!b+Mx)O0CN6b*+zYR+>H%bn zC-M`41HZb3$}mWFlljHJhyZBwUG5_EJ(0;=Xia;OBOG2Y0`71ADCx7jI&1m}U7ynK z`0q16Ley~oF{Mm7Ejduogkv-U{vSvlvO}<8Baq{%7%l0dloxPL{v5@GLc!Ycp$aHG z-2te!C`4s$us5#Rb_)dfZTjUY!8;8dCDHBi(f1KK&c;Sc)>HA~!bFc|vSi`|tm^6& z@56h$bHya@xO3$vc=HsuD z&U9d4d~O<}#88R`I1{WSm+({a-vRn_>cc0y%q5aJpqs+9M6YP^GZ`@xzsnmLMMW*o z<|NCeQUb`7oma{ai7IvJp=!H-duogOZ+?Pm%x!5IDH z+kcX^m8G}A#-<2;Edof&nAAWXsDvJi#^3Bc*-=c}vLcfbvf1gs=qUe5>qL1-jG)7d zUQ_iDVxd@pV$CQ|=IXVE+8>2Boo$}~ORGW#;4!4MzFBX99kw?v(bP*F|25*^baXrI zbWz2%IIkcdsUT18St7J{$ol&lY*8OYm97MR3oA*<#JrjZRWnQ#*YP&-Lw&%GH@vo- z>xR}GKZ*&k&$mXH(O#bm9Yq|qxHZRzY5kxBeD31zt{+jQjoi&Ckwg}p_4>(?Z zv@!s;h-FB$ja?g4{on}Cw|;Zzf=+Q~W*=)?8e$7aW9We(A2Lt5kc`{%#)500Z-b(Y z6ISWXd}1dX!==4w^fJ;Sja^N7dZ@cvYD@so-OeSBU0a8P$G|IKttR%o;nm1kbmj2R z=uyL)(GLcKD9VlutTur;aPXr=ttddyMhq`+#aIb{CsH$6BM!(tfCM>Z!qDysxJij@mTf8kho({l3M^Jx%4+xYHTVvti8a- zm=M{;U-u1fS{Ij~2xjFoZO7FP0}JzP-}cu>AzFNaS`wL-ek=Tzh5@F0DhBKEnsPZo zrU^6S{$W$sX?$p?B3~}OGYk3o`w(~b#Dng1`-7+d_*_GYOd#&G>GH>tz%fcvQl~^% zZ)Jf^U>_9_=-VvjqPv;)C_V5fo-pt6$-^hgooha7IM( ze4jsOQPS1hdbX;uo$Uf%V!~ZR$@0AVz`;PMG-kzbl#$@0|%K((6Sp4pv15B3JdT`jJqiURYz80gHsstf5g%0?Q{ zP*F{!_KnC;$CHXwwioY3$vQ@p%4Q2RKS3kN%R08o7aTKM(3ofyOCt~H%hitl7Yoob zsHyx-CpY-n3v=12fhSQt+1LmeNr`js3sD{p5qo!;-~PUyN5_Eo9Jp^zd6jZITQXk$}o+{&Ht!6r0 znc+AVDkW{DO&()x#W?NeBsleBB|p}RV#mzMq%!*Aq|VBrMeP85(3QKaqt_Q!3!6GA z1+fTr4ZaAvZBdDt?UY-cocsX(@Twx)`Cb{_XE}3L;?%gm#y~x#g zuFlO6cr83T%^XN;W;gwA?ONNbN9Y~q>(%Jo~V1IWGKukwQZXP=<)SFmW1QP$EdHCc?XU*K^wAs!RW$*8VWda>CggPT4v+4Z%8 zx8A&8S~yk*RQZm^N1p$zBb-RX5WZQgolJ2mE9sHGwe7% zNn^Q9Y?ITG3E1@}N6*)o#Fede;PdBVR&5GcDAUms(ua*xpNCCFVK`9gpKu((?reKu zXG8D9O@?@Zy`~jg5ilnhPTnWk*;dY8p6niez#_nAEb}1PD{6P3fT30Jku)flZelut z&o=0@R=0vL4K2NF!QSpM6bFatmhHW6N-Ib%8pw}PKNk`&Xe-XQaa#pB0A}<>JI&k9 zysvF_L(x{zC$@2VAC^D)ji21{}fdwjH)5r*$)w?dcZr zM_5EeUjuf~QGO)PH6k&8 z3M@oFx-E0AsMyV~3TZL0<@d=a5@F&=JT>wbB+%;{!&e8EF$jf zM%f=zi=2DUZdF?$7de(ymk7u}3bQm)w~GFTlB2Rl#L8_ECe_v%ja=dEW}(d`J;rU!U|8khYuC<4Y7zGHd+0h(zk($H8Z76P94}38oS|Lk-sQt9lU!N2dwcn_Q`)AHCcA!W_3#o3 z=%Q`;--Rz1Taz482~wl+w>GEt z5RmI+jUNt?Ri`Do1#+$SI{_`|9FZy%bWXxb2${E_qlp`u)TNNQwfze5Jvp>j$(%4a z#av9|f18_;u*ar3Svx#0f8#W5IK(L0S0^LLsdZf6cIp^mrqV#^UC^#RzFR@8&=hu? z6h5=^jB36Ux8hfTBNNuV_`c!S_ZroXMkyCs6#qcCBwR4%#aOE}934Up#aW=0n3cG+ zM$If;r-tkTb@uW2JmHT0Q6Kb$6LzA@v6lHB1U;sUMoN&b{j_+8v|;av;$WILJ)}E` zwQs*wta*Mr-m*pCdo@#=gr*sYR%;eN>EE_| zsIcdMm}G2OD1e@(BL0llnNgi1zT`J^U( z5#cA(FdrOu7UWN&4K}qXiO!5IKIZ98;&=N+O&XTTOy9csu4zNxi02V?3Dxc>T(ZqR zt!K=?>b><5!sg5$s+%Ef^_lxu*hapRF2-klS+USGOrW!Z^UY{}{kz^>yixr&nfQ!i zs*A@o46YmaL^bN%nRNZpSdK*PL0=0d^KC0rLAZUYjux@OPq=Z)L;Dvz93p!y9(j84 zb!xXF#?(f;fz0L3F!9YoqT|y795N32v2TQylO}aIBvY8r#62+WVACn-|5joT8 zbFj-sva)3JL+0-2R^r_b*+H)2kJ@AO^6odn813Go3fxls!hJBh8)mPOO=_xXuR<@` zhn4270A5l!OJ&=)^a!Dl;9Pf4Myb0XL9@RF^36l{F54%>yaUg9EnN*w}24k zl(T2}z3a6Ee2=DjG8$2-ooIRYC@V#fBwb&pJmD*^-(Dqj4sfSl*DO z9Agdc>^sz~(z?@&EO7mBtjs}_KQt7V>8WchL*}!(YBqP-qCuLw)!=hKtJv*Jivv4h*dJFVWq&AXL;yx8q?FYAHL4b8olY#J55+VJs+xl-Oo^Q_I_XN= zQL=tcpPZSzQh<$0D3E|MD`y9b3e|BPKTtM4qN*)Yf@}G@Fj%F;t17ZtF@7G-1~)vg zH->aO9eV!DBa13u8_+G{^C7p5r#puq%;^rnA#bowmg7=e#G2qamkU{n_TpyJ!^XTC zg7FPUQW*(3%Lsi-D6q^mS2C%jl5sRCb=^>fhgZ>$SO;U-gKHHRcU! zwySd)Y5KZZTt@PHuVU8@aMPeJ1Q(tvF#O>=_v*R2N&l=dYK3jJv2klYPqUWvm{rhi zG@DK+p9rDmc54@YhJ6>1<&9J&4z1*9a3p)v*Bgpns~Ob-uK?&S%fzsBuNnL(i0m| zcS2%`#l+~TG7sKfR5{V*$QoLOuE(pl$^6Uz_V z^qc22ukj}V^ALY@@Zy?PtL-(2Bnb_p+{)8P$h+oqV-dLv@L`MbYOhXOm++7cm-*PX zr>dQKn;PUb?d+*)u1k6!^drMb*(q+IeVm>F`&&Bal%$mlbKv&pTPKO2;R*n4fb=#LiF1qlyjaj=HdN{BLre9-}T4!odBKN_84-vbfYCbGV9I`YaX0uaIYL;(V&t+naSi821S&iQJVKeIGh1#e;|70}0Gh(&?VdMAugr zeP9keZ}8BkUw_0vi>*Q)`ytSBwKSt2ywquohZ^*Y88Wb84JpQs{SD;Y;7P!d6{I0Lm6Ijw=Wqz!TqtKrc z0yKR#mP03b%nmCJXC)R$yl>*JyQ;luQbs$P3Z6lDRle?sR3DaJ5e`c^`l?VyflQ)> z5B!NeI$==Dil#!@8qSZZ99BF^It=^9c~mhXz|;y=5pkDPmWIyV$%o19rT z&{06d)V`^&!wsCP^>%)z-NrN$)ZTbag5WSeQ(HZ^V`oDu>^H{9B%_+`b|SjkpVNR} zYuHV*C$SI?^D(7xTD)F=zN>RYR(bj=Im3g)4B=*-Vd67HQ2~f7%MXt9Q*OKUFlt9=Y3VB^8BLEtH}aeBLHg^m1w!g#T^EjjIDFL5h7n|j8XH}viMi|jxjHAmrbVPicXEW{bdgx4Yk8j;kCtm{;NA0buQKZuV0H{^=Zqz>-er>XrNH~=&)iL$XUsFKQS}V2`l{Z4OaTH zh&4RvIDdF#V&k#Dpwk{>Ro4M4r0;p@g913jJalS8PMueV)46L}b1ZIH?8zh2GK{ve zP>7A_@jzLl+N5M-Cby(8f7P?Zm)IVUaq@Axk*_ZD%F!B(?b?5l4-xrDIz`3sy|p9h z{(vwdIwod@VBx|vFoppv))isqN@L(_$o_Cg%Vsj9hG$5!$Ql>Wje!lN+HInlRe?J8 zm2OQht{->A`gGP#056u2n=`fd5(<8~PgD8g*os!xtFiHG=2IGN9U8w3^F+6TEqPYU zViN8BL*1T_VHo`I%H8XIDcZRn^o0@OSPp`F+5*PVtcU*D&YDH^CoYbHEk9E7*!CF3 z-!)9xPR2H#hpmJFZjCR!aBIT8EJeKYj{Syk^ny|cQ-jVcg(TBZr; z-DJ9nVk?@=+xj!b;N4SAd}U z=&=w!;hk62Ry?0p8>2g4OCYX(`C-32!Png)KHi>7r;*W*&8TzL8Sf|Y?cEmIwHbTW zQl6?t*<$!|qsLCXa^TRXyY)ry1V%4wotWCl{ z`LiWAl+xkpw={;$>#hig3zCVB>mLuXR6PV(N09AF5juILNXP}%l0-V8}5OwmG`sqU5oz7D+x&6}3G-q$AU*5iW1- zn;g^9u1;bhg1Z87oPtf@6zotIpwXR%QCW!_Zj%FpK9KkK>=i&y!w;V?yr2?##ebC7 zIwncRGPPNtJr&n0Fk~;48lU}XUQwC)k*AXLxON8xqS{-~HXG^{eWJP~hb|^57q7x) zM3xPeV>>yXkXdic&-Wz}Ijnv=#(>5sLA_VfhAv4zCl_{A1%5j)rZ%uZC9w$ej+#() zSB)B>H~~urO)xorO_zf9ySzRvU%P@sDJrJs5O3m)w^y?E!Vxodt)x5tz7=s-+ptH6 z)veXs=Ft?@coDzb1;?M{sxnQ7%B6!&K^xb@S)XCism!T84XZi{@AnUZD~eNlogLK_ zXI~Jxt|h#xJmTQ`!1_HrCq}(l4nw!i;ZB}d1+6WLz|dIM7N|&6Z@S*jl*3AO=`o`c zeT7LQKuP+kQ?Mm&zS5HUg4LqML6}9l3-*@p7f!F zKPlx9KD!T4L1v;JgF-q51dZ2^dvpY-j4ur?pINV@N$=-&PuC6gd=f8~&TWuR^l>HW z@v%O#7}O@W5UqQ;9KF%8+CMz58YS~OoP1j;=~fj%MtXvHo+frR7lc@vC_;8J9~!bk z09O%NA?@IAMhL-bNq20br<2>@Z0{%2U#QcQ!Wmwsg~x=>y1BXe6byPoGSS+jf5Iq5 zQf~K^`S!~&Y&!Ww{w9_TgroRrdXHPDvhj1fnJje5PcMtQv{)V3enWl*VjOHnU)=7w z=gZSd2LoQdZ-}ow;OsFL)L_)31YDotfMyKBA89g4Js%G4eQ>y|8euubbWgHeqpf13 zhy(U}uh8B1g;HM`UOoEoewGa8&P8oy_!AvzND`CZRZ z1I(=^kVS59J>kRCD-iLw7|2%vlp|fkhu|Yji=TMoA1@5TE0Kud-#0nA|El}bb-lL$ zfZGE1Sg5Ea_EA*Y_s&KrbHHENwkQhwo0_aL)D5QdsmTn|0)6a|@eXO-_ja1ZHt8Gl zeBF_#ms8&)`E-bWL9NNlC32&!*H#Ne9x_J1DgE zua2b7H5sIAq6ivnhfCdp140_rTkwBdTyMm=X32T<=MB2!6JPWp{%yK)?mM%^QvK&6^OYAXhox zxQ7>1Q`UEK@^=BC3#9cBKnV^0E=1)radhrY;zyd})gdREUSranKnI0b^5eYi-{}9U zhg*AY;3(xjpz>ov&BbSmPFt!LD;d%Ia8k?WecX)ZkLG@>HL}O%@>_PB*JFNtB~;MZ z&>DvpymISj(32S{cj2R1Q;#o!@w(Y&U%&lb($T@cLh|n=LLOKD zr*{YR4jx0~^?%3y|ESsj*?8Ss6+_V=1X%a~oJ}B=_$;3LCS6b02YvCe(ErmT z`c7(^-Ws?pekiW&lNn}|OU8?SN6Lm}6sB4%n|+L2!*c2PUSvW<#w>6wCGFL<6$-7x zL?+;dP*|;`QGAQ>_hx6^6r~2mf9QdL!Aq`J*71xY!EW)yIw| zxztUecdU;dvM|8b&E4B>Pr-q=_(%oqh z0QcUq`%|3%=;8JUIK^CDq-O^@j!qV+lB{u^;ZKgZ>?^I7l9;i0Gci}LlTlfz;;m_g zp>w3Rq1^=CurWA{fb+e2r@9i+gzLC+2K`#%uFto0DW`t_RrJ2<6SfE%Dq?E;LjBQA zaarhImt10%Et~*^A}%IQtYLeFxD+~=%=#h$hm`c7oPNWZ1ChNU^ZXq475$2$%Ce`4 z3j%7NZ0h^%>dT%wJZo#-Hz$*;A4Q~<6Y?^U^DAm=h2I68cK@NO%bzJf9RnZD=qxj< zP|76HRZ;la_<;Y}n;Vd=(Sg1g3o%3Caw9vv`l7baW%W0*(P^QnEZn7+np8>{N~+48 z6jB~V@wA$c=lr6f@dBrIrb|JAOz&Dpllr4ma2s}x} z?ruA(LK&f7XY0bX!-4GI7xd#Z<{E}($c4e<@6v9LTAOG|1PyVgqreR;(l~e zBEPvB{725Vq~HPK(=5!sky9~sQr%01(nmE}Lz*of^W_YIvUmV0qzU!kdlHj=YeKnL zVpih(MhrwEMi)O@cAgaOQ_feKNm#b6E-VDT`!+|D>W&GcdvzupR8~ zS2<;NeDuJ{O#!3+p=D1zHsP`-xLf!f>C_{n?X-Mtzm!fwfKhsfz1SPo6o|=g%Mive zXn}oFPG5B_d$XFCEYS<^K8K}-hRV+MJ~j0`>SFBYQ2=OZ_p8!D{m(yxqg&bUXv){r zwKN6#@LZSkA6e}r=mGC8%tb2X9FU@dv}d2u0v_0x05mjEGeZ|`Q& ze`f^Qi{f&E0{S{ll=Tjl8F%PBb3ow8vCl|W!l`|oO6os>h@fudPr7B890PP9cA_~n z4P_p&AWhhylD!D@eq#{OfZ65m`g0YUN6UC2=EN$sQs6 zccA~+7J)-BWZJ9r^eL1sQ(3M1iF=~h9lB^3F~7=p7+UJDr_ZZi2ON3i1l5seYiv(+ zYVpo$_TL(C)Gw^2SX|z8(pRmYDDNPHW!2=;I$94dKS};m;V&9Bjew}Nql)F#<#ov?DiW? zuJv*dUdr3#oQonK1Pt>83%8(74WVd4*1EWK<>B&MBxf zy#aSE*>Ll*X00+6D_2g1%#J@S{KzFB)}Hq!F%@eprF81RKFbSyz!~k1it6gG z{nXuYX}(fETS7V3d??ANnw>;()GFw%iX~WUIu}s_cykIm)C5nTi&|WtplMv_DG(o$ zaQDH_Q*JCjp31&I^dw`K*0<_h+QvPtoF_xl^Hngpx9k6l1&|wAocrTTVp>j=LNP*l1`K@VeY5qBx|gd0@R;Gw7sQ&TQn%ly0j|$q6qygq#h=ee)=wSln#R zAC(dtXCdSD6zn2u=R2uB%+pKC=&M_-REsxXXMURqkCCAr>` zL0g+-v{*!1oRMw;xPAje6*r|VTY zcC*5VDRnLWI?(RT&T72g&Hmovr3zYZ)e%q4@z6uv^PcH23wFx7B@rvD-DG*FD1-0P znf3{Cb{yZ2Sel1P$tFHe$ds!rv9MQMa3xg8onuc4!wC~p)f0vHG;^4Zk{`FMrQ?dj(HlHgpk*wrce9696*OFI#rfMCw8O~|O zCs&QllVeHk7I2&3qsdN2TlS*U(b3+}WkmSSzU1@e;GD&Yl#)m8HYB3}Oh0_LN|Kh5 zU?iJ{CvFjC>udf;w=Qz^oNV?I%M1tI0Z&Sd%pt9bx~G}Chf9)wcp1xuXw}94qI+Q2 zjng$ci*KTtn#}CN6=GFN?|Jlm7rltV!n11|{lv8EJ`gnaarmQDNMT)Mn*qlvR z#LBm5?@zh$&LJU;$J~AI>Z1QA1i6n|Yz|AB_ZuE|lRa7!L<#whyyZLG?t*m%ImaWX zvT|Apu^#9Iiz&|Teoxr^CzyZd=4+<2!X6?(@oX0T{OTXY^V`q9v?jOgB9gjYs#PH| zv7Wei6$#aL&+6Rn7CIetTN_rQ4{1`SBV~Lm68A({9mW_P^LkB`58L1gefMRPB*ew( z;L9pM?Wd!FJ6>Cbr^h6nMmlVF53h%QTB7^IwnCbokPx2ood}|Qy26EM+Lh--nr|Xq+g>WPWAaJTp|He`qWZz9_~NgScDyyFp?t^WXD33 zp_!8s?$LK0+7DxsWxWjW=k&m~Cl1Kj9ezP~$o`t#s~y>8^N(BD4o6=7`O{CwK(582 zlRg7EkG%%bXvYz^V~Fe0MFoAjL4_u>%_8E@Qwak=4m5RCJ&Iia#)r{3XFm2e|1+U4 zczqCLH{xKxp}jDw5#?$i_)tQB=;y-(J2?_!d@Mt2WOG{CWv#xHnJr zyZVMm^sA3Xca5SW*(m&>7gO$p9$_Q?s7m$BhhHLZ&~_KAl;QpDw&KNl3ZIXDYEits zmfe&T+ibzUrj;p(W_-`XKxVab`LJ#j#mcsBVLdSYC(_2wg68HYHiZ!~e)6pt2sx^K zr*%)MhrDX#Q^hA40v^adwx4F##TX*i;p$;TMHl2aX)ZRDQJ^Dby>VildU3(SYVgQH zpI#OnQ3+pQ|K|WDD(Ym(Jm>N4*M9Q~%nJiCHXpC?39P4CT_qLBxbvkrZZ^EZ>P@)o z$tc-mb$W7#p`XooT2tAF^1C7M-I!=-=2GpSu{yS?vt>EjqVPtCz2^GvbwWW8NSWkw z`{tQKKGno%wu8^;>ciP$%c8rz?|mjvYlV@iC)eE;e9zTgp03-fs{-Pv=PQGR3ba19 zfqI|0!!DlN=SgsL%C|9>-L4SJ+p8mNLjLyO`|giLLYS*bUC+B4`p$Lc4tHbEqLS-* zM0MV|C$or>3`&nC;v&!CAwf|(j~7ePslko)UXA}O=Oip=fZ#_d_Me??_Yal8!zv6@ zMqu5^?`v<(8S4apdX9+M{vjZEb`mURl0+v>cyPWJQ6HE#W;X5~%{C>Qd3KP}yBN22 z?PyI(waP(dR=+o!QwnQc>h60dXcfPj&5Ly8>a%4ipT%{fw2W=RJAOlFyR+)P6iWGY zyQY<8^uW1$9zX$o>VTXM*^3Wanr&R~Y(HK}737j6$8MD&E_ujwU+WShLlguuVTA5< zt?_?K_*nO8lFrJ@a-sg#qcq0CCy2ZdM`A>~*+}XBh}~hHom-G34YSwW*YE6!Oian$ zBHx3u&^(`Eu3dY>=kycV*e4>Hsdc|L7gmWw7so4k8J%4k_me67)3(W^fw6r`%!SEp zmt_J%=92yIWfhlflU%vsh>{()=2xaq;5~xm?CQi-rvW;vD$W%?ny8y57nclUaPMRn zQHv0p%@Eoh&S*{@<$mbDSil}XfESC*&$2Mlfp+c z*JiJ-t~wmoFMS*r)HF~hQ^)J%5lZXE}vN9dfw(4qOwf_oRQ{>`wOhMu_C?j8R*M7{wf z5|;>jrWqit0_EM?{2w6F#7p`I$6TX%Nxj`z^L>G3&znb`YX^5K+K8+D7LuOI>*t+@ z^-fACJ*LCj%ckZ|U!A!sA_Hc@XJ`g5x1B0NI61>%iD-N*hU%Ab%BXp(;SZCKe%B zJ5M$dW0vtZIOX0=zC;G&ghd_u^)&Kq3wS>1Mn}9C_!=T`-z;3R6UDtvo_i=6^u4Ix z{l>>Bv`|3#RxHReVxq)9V_(a8J_<)_W@_PMMzu;^L7tN2|NUr^FEE#o8adK z!`MvU`7$}(Qj;1B*b}$vIqJE6L2aVi7Hb`Mz-i`ez+;bghf^z^H7+Zm?> zF3>Z}x7?xeA>*n?^#)fS(Ir*RXnj=UN!W$gLh*I6eAX*GzFsvC(}+40EvSE6Z*>z>*J$w6cwq3DzFD+hNy1Y%tvy}Qese3OViF>-*d+M< z*Z9J^0QK@EHuA~R33=Gv&j^sRrSYcuL@3q4ic$#*9^lrKV)Go&IRDvzi$}tL-%2x` z8={-oww`Eb4*pp>oJ2UVH$mSdOPU*?);MA2;9|S{s|8(9*JaV%ZZIr1@|&qC-GS} zM~$CqUMi-xz0EyQD9dKEbD4Ct8sXo8oWNE{NQ#{(DeynbCv+q7F zUAyFL>?iu8oK{zER`EmdM8()HvmS~NayI*-`8E8tGxGQE_r`!7x^T4IEBv3X@g^yC z`8u9z)O56g1!^0)+4=kZIUXs`)8qhz)PPMUiLpIueA%zYCxELyyr>MG@F_mNlGQYD zOB0&$cOFrU7X0ZfN<+upR^4ni9B=c(RpaBV|MNi1NYrfld3Z8qbiRy3mn{|%xDt7; zlKTGpJP(iy7$~Fwq$rj@VTZ{(fi9KOvt)(7QI+KQ9tQX|Z;$@|d1S?M{c< zfAsG>QXPRLc0w)!riYEM1)JG#(ir7W9Ju@%(<@W2EEgT7M3t?Ib=pZ?M@spx%Tyfv z?Uo48i#^w4`~9Ow^aa{%ef2=XUQ@fak8&fc3TjIEA-P2p#?WRFj0*VPS4}` z=dX+4?(#*fyKrYh!CPB6*9E`3vIE8-*}Fb;LGz-EDLQZ4yPJpk@L>|kB8a)lND(;s zJ&m^8!2PLw%Ke+!J;n^zV0o9wkwyVwvHZIs8Ah%Xtpop~qgJKEsz(>A+lFx5l`p7Yr57>ody-%S^rY&*lY|y$U#C*zw^0EV})M1#NFYE0!94_b_n--lyF+kyx8M-m-QBfu_ux)& zhu{vut%0e&pXdH&zP09^`oZeebahvqI72M*v|sU5dM##UbnR}^Z^+vW-YsaJ4`4HIHtiXiT?Vdh>9*qG_S|nS170i7OP68! zT%-cgJNBQIY+qRwBudL~{T_h8*493qe$-{E**O4I`+LgAEbjQ{@UVXLsv2^9WG5~I zItm0;&|vTPx@OxIfDypFLk1umz$3H#YfCi5bgEZ;1Nk55=Ci^-)Wk>aRdya1XEZY} zCcZZ)GXLo!#Y|wYs-5Yhwq(^ zfvfC<+~(KcSzBye+qK}v4QTfW?8F7G#9t39-s;-RK&K}kZB`&?{eUcLZ0zxxJs3?2 zfm&QX@&eA>l*v_+=WRj)Vz_9xdF}jKyTo9P;hLI;VW}l)ZgO}zHS-MC59D%e4q)YQ zi@EX5-D{bDuHQ{QGL;^Y&n52Z#Al`7>Jas|KeO5bk}4(WkHN_OK2y+bWE_dm=dcuT z9y&tH$J0E%f{2|o)?D^D%&EeDcr<3`x7sy6udpYfdFM00(0G_gc3<(tOGsG~A zeOlNa&8Mx(_0;O8fbeDkr~bxRwImUN?`Ugi2A|M6^Wun8TsxPS}=_ z0jv!xf7?n*Gr-sQe;N3PbSNtC3mg-ke0zVNNapgb6pHx*EP|nT_>fqn%Yw8OK!=ED zC8QzZ2U8If`xb+1ev>Uy*?1y65(8IlR_!>4l_F(@5hov=mGIk#?Ef{R)ZBXgdSpRO9n*4cbMdpmyjy%Typ z_vZ*Rzf)q$dEvr~FQrWW`t~)IeFz~y&KiMJqQOmww-HAJ=e8;J7%K_^oQ;>4N|2d@ zUzO8;_yt#3)OuwsEcve;1YFA$eTU}K=g+BM3ay*key<*WkS zq#Fy{R6*@bptwPR=wc~ZF+?lGMEaWMD@#2GT=sbW&?Ga+$|}J*h@9V-ia%uKzP(}i znaw8gSar;$6gtLBtuOW|j1RD1IT>bp~8?(tb6_uZCy}FP8OjJOl;gmnD zQdRlXD=!g>r<^0Z>*7`cED&p)_YZvyBiEB{j|TIq+J?EW1`9^!=5c&F?F1jvq~ncH zhtc^YaF)MNt!uUIQ*k2rH7yKie;MX<5OB$CW?t7H+D<|rOP{cb@9g-uN5hrT=H}(~ z5W-UZLmnX11*1Lq{zoA3&qscXGH5@r095LmqIJw~uTiT5lC?iMBK&*$FWjbpXjEFD zE8;SOL;s6r!}yH&d=vBeEl3O)$bjShCn|scSMUMR|DN@6<9}p*rGijC`gYv!riEcM zKAn|Sc03#&*$%wE0^4ZWT`Q}8z~^9F@%_*Dyw`@NiP?bhuy;HDX<%N*yXOUZbEx|xj4>~VE)1Ucoq*!wpM&WKFk=Hh@%)emyk)=cvE?df+5BCrqJF-mE>-z^ z?bzjuAYjxYuj5$Tx$PgEHlY+DI08hVe%+5LZ`d%+^mz8AI5YW|uCMYp|iS=0Fsv zOLvSl7WN+DUoc;UsG93JgnYI0)wKG`UUKQ*j)5rUnGqNKZPjuDXP2UK$$(N}Ab=+} za~e>>#&c)n%MVmDG9?D|DEj8)fe7-VCLkkC}I2k*>!aO9d43g9D`l$%b>PN=rll1_4DP$ zIi`}`9(9=Tps_P#%8S*tB!&39VI(*@1eoRcV?lkXG=QJ6*v>Ahn*}i1P4&P zm;;h8sAU5o0dQIvYST>0M_amgrBRGF7_*nvy`2Tk-b*Ozgpei?P)zn}oJt$7?-V-6 zT9q^!0Jg5sr9Id`c_btz2MQBTR<3|TSCveyrgsYx6GZl1@&JT(#%DmCmR(&5yg1kU zU_3{&1CBfUcmT3o;nz_ceOD&wY#AD0$4SfG0m+;{RG{M!V9gV681!7}YZYs|1;sSE zqn^P}CJt8^P0leVVw_B&H4Hn-`tA#>TbwfRR%$YuWJI;oe_&bFN5>kejk&$w?FEZR zHYK_Ltez1bXUTia4sPuBeDk>M=ngdZ?<`=bFsTvjL)iA_jAmT-9ivoaJDnaM&5k>5 z-xJ`wPFR@n5v3FmKz8bJX=d+b74!@o6b&4N8;oUNy^KXuui=|mnL}Mh)-+Pfil3iT z_vo~~^CWqXs5hi~k0cgp>qrVZQZ@2x z^%qr#&*?V6y77t6Ul{X(y<*&8zV@z4--1&qc{PUw(M^-qgPvS1Mr&}Y5 z0f-u^a+{v~to=1|1-8wL_VqPG^T%b|A!PFpjxLO|_bWqPvmA&PuC0l%#KT_pHyDGg z&4?x$bZ}?sMn?zS8_0!IhjV3(ZY#g4y8ciWx97jDxAQ`iZ0 z8rEf4{UU^JDs@$+GnfL~hmZ#NdposU!WBr2@tFTy7=~@zS)U*<$ zXB3$VfGcWqXYzZP7ZwN7>}ykM_$Ow9j7qa=nKO2Yk5 z$lG0oS+eG!I#yMiIzSTdM18KIw=8!kLA$i0-O-zWJNvFxpz%U)e=J}T&tz5Gy9Bep zrsR7M`D$?RRUx*~Iee9wFAJ7K2nUC#Ajq&1v#2<|E<3ln*~}s{Fu18MNw3*Z+*;;# z2IN|w=ERy-C{DYHj%cZGnisHv?f}XkT3lM0q2lQXL?b>MqCgB2j;O8tOWZ8OeA+Ri z`Ll*9#Xmj{KWp$aiG=pZE(^}c1K%l=zhhvnV{KLu+rz>asO}l5nz={|WF8SXxH#4Q zB$m1jvcY94QfyBgv#AkSI>Nmvx3y_)%x6MHWlo&6ETu}A$i*6?oWN?j(IQXl#Xrp5 z29HU1YwM#_Tfr`82TF>&kKF+ie7BuAJuuG7V`S6&Fl_3=(l$B#C%7(K1vknq?8Nou zh6&MIyTUAs+@^a%lnvxV^ruc_KGjlFcPW@)i+Lw>j4FRAv($!s)0${ANjb-<)<{vByV2<8l+aq^peHDtqINCsZH^~L(4e^2LOvz2m$jm7HKoWBB13D>S?(uO z?gKJ36PSn)&BC)fD#U`?$fJ0A;VTD?kEm1o`oP`UmWrKz@?tPSg?hrAIwnXgfQJj? z4Y%fa2lKIQZeI2@jp-K%w3TaJ)JgOO96=}wV%sYyVFm2uBgNsl;C8 z2N4wmr)Anw@==|Y5#%JfLf08~+%BW>bj}^uWG7{%YXdI?Nj*=Z&3S_9ryjSUnfA)+ zk*GEk;h97?^}js^HYB%HRUc(-&YZ%i60vb3{?!6_cJplo2k%FgEHjpA&X}w0EVFZK zq?KLus&Hw`SlDZ4jt%gWO`5CFPbN??pobPug>G*}`JZmhfYvO=UR&g68H6^Mayn`E zF|evDVASd&UhQHIk>5MpXXuyH&*p2+4eV$>_$PH}(!YHQrONvng1B7IMVZJ!hWisv7t+rB*CL<554y&i> z;3Vd48dtEPDKR$DTMzCd>DE+f!;xv+dZYZI{x}jK_sE6^4EDMoxx9;IsCIa&c0fsW zSQi&7Y%A+9DHU_*JxT2`6r=rp5hr+EZr)+g@)+N7t{SDyCbN=kcJ0vFDpvVv?!)`W zq%|(%6A$#1tRJ}Q<#2X>nQQM1H>emY9>lHuKnF|{jaaYfd;;+}z$!$swkN=!Mj)%+o&;h` zd5h3L>-6AmnBNKB>R01Fagre!;8nY8Z6pic3je7-}Huf4;}9Gr9l^x%+yHJ1!f)YoL~H>ZBM^ysM;eN1%xlI?wXf zg&Q4Jqgn%1&X*OsCQ(93j`f3a7g-QOU&!)$^5=>GGLqaIs{$6 z8=VR5gz4+o0_Q5DcN_Etlqlj@`0g5R^NIFE%D%CY`dfk1Lkt2@U;=EXN9hc2^unE` z1zgTG9q}!rzwd_5u(TSu>X)?Wjo3#dkP~ogFW4$#U*EE#tJ2CEfwR)eoe|9_NNQ3S zT}!N7`H4stYm4*WJH&~z32`tdYHp->-rv+=QnasK*_KveS{}s7`St-Dp5PEgd_;{g zb=9!$Sj~9+tBp|t*fbpyaRa!oaYqgnlH~m6kn;QdeDxK18H(b1mHp8?sz2%M5A)G7 z{kGa*VUz&S#%$;*j0B^8gp0U&gIdoGp=o$@BeIFZ>vPrIEJf3O5%*J3^B*TaxjRKk zsNdhuzvfbdU{y~T0`jU-$QOkLVF-+16rzgv2Zn2A^iCcPNe!Vr5JM~?oqPvzWW%FvpYYD13eNO?+ zsM_Y9GUyNFPd9t*dO9a2;_A=#j^C?$zp(8gZ^(y)GKLmT>r=YfG_Ks-$~suLn-KKz z+a9reNx9Wkq?JF0t(CNI(Tvg2}zeD4y>H6Q)y*}iba%_*U9&5wCx9d1oba{ceZl~wMFnlawMbA;|hDq zZ&*s2fe{2RJJcWGI)?LbAPo^j0DP#G5!WlZTzu5WB+?D+KEC#rey8-ah8mty{S(?O z{A(OooRSl4(&KZxf6Cr5);=uAO*L^SH}&j?SAeVq?wZmg)S(7?dV!auZA8F`iw;c% zezBjrT}gpt_-2BFidwO*ykH>83xOWP|g|1|cSSQP~d705%+hw+E&u

      ilh;)MV3H4CE4oc4+?u`! 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

      >2%2r69y;J6TF%taZAI{TH?V7PWD9pf^ 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 LYO>`o%|8Awq5?Lg diff --git a/modules/docs/screenshot2.png b/modules/docs/screenshot2.png new file mode 100644 index 0000000000000000000000000000000000000000..0dcdf921b9407668747a9ae68c7be456d6f560f0 GIT binary patch literal 266787 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� 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

      8o1 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

      J}(TkA>&Au}7HtaH5P?TUBK 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¨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%0D`YjVlIC_<-BU^oI%B4AGCXrv9 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

      }76@w!#Xh8C~f&!j5G~*ewjd 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 F{{#Q#xo!Xe literal 0 HcmV?d00001 From f98913202fd109423c88796aa4ce242bcdbf0134 Mon Sep 17 00:00:00 2001 From: YinChang Date: Sat, 11 Jan 2020 18:30:06 +0800 Subject: [PATCH 168/411] samples/BookStore fix #2572 --- .../Acme.BookStore.Application/BookStoreApplicationModule.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/samples/BookStore/src/Acme.BookStore.Application/BookStoreApplicationModule.cs b/samples/BookStore/src/Acme.BookStore.Application/BookStoreApplicationModule.cs index a97917f774..80488be0e8 100644 --- a/samples/BookStore/src/Acme.BookStore.Application/BookStoreApplicationModule.cs +++ b/samples/BookStore/src/Acme.BookStore.Application/BookStoreApplicationModule.cs @@ -1,4 +1,5 @@ -using Volo.Abp.AutoMapper; +using Volo.Abp.Account; +using Volo.Abp.AutoMapper; using Volo.Abp.FeatureManagement; using Volo.Abp.Identity; using Volo.Abp.Modularity; @@ -10,6 +11,7 @@ namespace Acme.BookStore [DependsOn( typeof(BookStoreDomainModule), typeof(BookStoreApplicationContractsModule), + typeof(AbpAccountApplicationModule), typeof(AbpIdentityApplicationModule), typeof(AbpPermissionManagementApplicationModule), typeof(AbpTenantManagementApplicationModule), From 40d0586d49dc6419eac820611b30e9afeec6b569 Mon Sep 17 00:00:00 2001 From: RayMMond Date: Mon, 13 Jan 2020 11:30:08 +0800 Subject: [PATCH 169/411] correct chinese localization --- .../Volo/Abp/Validation/Localization/zh-Hans.json | 4 ++-- .../Volo/Abp/Account/Localization/Resources/zh-Hans.json | 2 +- .../Volo/Abp/Identity/Localization/zh-Hans.json | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/zh-Hans.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/zh-Hans.json index ac0c014967..282423a44a 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/zh-Hans.json +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/zh-Hans.json @@ -8,7 +8,7 @@ "The {0} field only accepts files with the following extensions: {1}": "{0}字段只允许以下扩展名的文件: {1}", "The field {0} must be a string or array type with a maximum length of '{1}'.": "字段{0}必须是最大长度为'{1}'的字符串或数组.", "The field {0} must be a string or array type with a minimum length of '{1}'.": "字段{0}必须是最小长度为'{1}'的字符串或数组.", - "The {0} field is not a valid phone number.": "字段{0}不是有效的身份证号码.", + "The {0} field is not a valid phone number.": "字段{0}不是有效的手机号码.", "The field {0} must be between {1} and {2}.": "字段{0}值必须在{1}和{2}范围内.", "The field {0} must match the regular expression '{1}'.": "字段{0}必须匹配正则表达式'{1}'.", "The {0} field is required.": "字段{0}不可为空.", @@ -22,7 +22,7 @@ "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "字段只允许以下扩展名的文件: {0}", "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthoOf{0}": "字段必须是最大长度为'{0}'的字符串或数组.", "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "字段必须是最小长度为'{0}'的字符串或数组.", - "ThisFieldIsNotAValidPhoneNumber.": "字段不是有效的身份证号码.", + "ThisFieldIsNotAValidPhoneNumber.": "字段不是有效的手机号码.", "ThisFieldMustBeBetween{0}And{1}": "字段值必须在{0}和{1}范围内.", "ThisFieldMustMatchTheRegularExpression{0}": "字段必须匹配正则表达式'{0}'.", "ThisFieldIsRequired.": "字段不可为空.", diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hans.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hans.json index 391dee0531..c778a28dd6 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hans.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hans.json @@ -29,7 +29,7 @@ "DisplayName:Surname": "姓", "DisplayName:Password": "密码", "DisplayName:EmailAddress": "电子邮件地址", - "DisplayName:PhoneNumber": "电话号码", + "DisplayName:PhoneNumber": "手机号码", "PersonalSettings": "个人设置", "PersonalSettingsSaved": "个人设置已保存", "PasswordChanged": "修改密码", 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 f57029eb9e..4908f170fa 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 @@ -82,7 +82,7 @@ "DisplayName:Abp.Identity.Lockout.LockoutDuration": "锁定时间(秒)", "DisplayName:Abp.Identity.Lockout.MaxFailedAccessAttempts": "最大失败访问尝试次数", "DisplayName:Abp.Identity.SignIn.RequireConfirmedEmail": "要求验证的电子邮箱", - "DisplayName:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "要求验证的电话号码", + "DisplayName:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "要求验证的手机号码", "DisplayName:Abp.Identity.User.IsUserNameUpdateEnabled": "启用用户名更新", "DisplayName:Abp.Identity.User.IsEmailUpdateEnabled": "启用电子邮箱更新", "Description:Abp.Identity.Password.RequiredLength": "密码的最小长度.", @@ -95,7 +95,7 @@ "Description:Abp.Identity.Lockout.LockoutDuration": "当锁定发生时用户被的锁定的时间(秒).", "Description:Abp.Identity.Lockout.MaxFailedAccessAttempts": "如果启用锁定, 当用户被锁定前失败的访问尝试次数.", "Description:Abp.Identity.SignIn.RequireConfirmedEmail": "登录时是否需要验证的电子邮箱.", - "Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "登录时是否需要验证的电话号码.", + "Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "登录时是否需要验证的手机号码.", "Description:Abp.Identity.User.IsUserNameUpdateEnabled": "是否允许用户更新用户名.", "Description:Abp.Identity.User.IsEmailUpdateEnabled": "是否允许用户更新电子邮箱." From f58a127189d024eca9772a887e7305702c4806af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 13 Jan 2020 11:00:44 +0300 Subject: [PATCH 170/411] Create Blogging.md --- docs/en/Modules/Blogging.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 docs/en/Modules/Blogging.md diff --git a/docs/en/Modules/Blogging.md b/docs/en/Modules/Blogging.md new file mode 100644 index 0000000000..0d2ab35c21 --- /dev/null +++ b/docs/en/Modules/Blogging.md @@ -0,0 +1,3 @@ +# IdentityServer Module + +TODO \ No newline at end of file From 73782c1408389289d17123e282f4753cf2183661 Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Mon, 13 Jan 2020 12:35:00 +0300 Subject: [PATCH 171/411] Reverted SaveAsync on IAuditLgSaveHandle instead added AddException method. --- .../Auditing/AbpAuditingMiddleware.cs | 2 +- .../Volo/Abp/Auditing/AuditingManager.cs | 17 +++++++---------- .../Volo/Abp/Auditing/IAuditLogSaveHandle.cs | 3 ++- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs index b651274ed4..f2929e3f5a 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs @@ -42,7 +42,7 @@ namespace Volo.Abp.AspNetCore.Auditing } catch (Exception ex) { - await scope.SaveAsync(ex).ConfigureAwait(false); + scope.AddException(ex); } finally { diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingManager.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingManager.cs index 1d3b912311..f2980d1cf5 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingManager.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingManager.cs @@ -150,16 +150,13 @@ namespace Volo.Abp.Auditing StopWatch = stopWatch; } - public async Task SaveAsync(Exception exception = null) - { - if (exception != null) - { - this.AuditLog.Exceptions.Add(exception); - } - else - { - await _auditingManager.SaveAsync(this).ConfigureAwait(false); - } + public async Task SaveAsync() + { + await _auditingManager.SaveAsync(this).ConfigureAwait(false); + } + public void AddException(Exception exception) + { + this.AuditLog.Exceptions.Add(exception); } public void Dispose() diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditLogSaveHandle.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditLogSaveHandle.cs index 6e48f3525c..a549dcb755 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditLogSaveHandle.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditLogSaveHandle.cs @@ -5,6 +5,7 @@ namespace Volo.Abp.Auditing { public interface IAuditLogSaveHandle : IDisposable { - Task SaveAsync(Exception exception = null); + Task SaveAsync(); + void AddException(Exception exception); } } \ No newline at end of file From da4c91cabd5650646384cb8256d1166da96646e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 13 Jan 2020 13:10:15 +0300 Subject: [PATCH 172/411] #2597 Rename AbpSerilogModule to AbpAspNetCoreSerilogModule to bettern align the module name and the package name. --- .../Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs | 2 +- .../Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs | 2 +- .../MyProjectNameHttpApiHostModule.cs | 2 +- .../MyProjectNameHttpApiHostModule.cs | 2 +- .../MyProjectNameIdentityServerModule.cs | 2 +- .../MyProjectNameWebModule.cs | 2 +- .../MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs | 2 +- .../MyProjectNameHttpApiHostModule.cs | 2 +- .../MyProjectNameIdentityServerModule.cs | 2 +- .../MyProjectNameWebHostModule.cs | 2 +- .../MyProjectNameWebUnifiedModule.cs | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs index 5012d54e30..2b718fcb84 100644 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs @@ -8,7 +8,7 @@ namespace Volo.Abp.AspNetCore.Serilog typeof(AbpMultiTenancyModule), typeof(AbpAspNetCoreModule) )] - public class AbpSerilogModule : AbpModule + public class AbpAspNetCoreSerilogModule : AbpModule { } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs index 64ac0d76bc..736539b5db 100644 --- a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs @@ -13,7 +13,7 @@ namespace Volo.Abp.AspNetCore.App typeof(AbpAspNetCoreTestBaseModule), typeof(AbpAspNetCoreMvcModule), typeof(AbpAspNetCoreMultiTenancyModule), - typeof(AbpSerilogModule), + typeof(AbpAspNetCoreSerilogModule), typeof(AbpAutofacModule) )] public class AbpSerilogTestModule : AbpModule diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index 3db35cd20b..81745602d9 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -30,7 +30,7 @@ namespace MyCompanyName.MyProjectName typeof(AbpAspNetCoreMvcUiMultiTenancyModule), typeof(MyProjectNameApplicationModule), typeof(MyProjectNameEntityFrameworkCoreDbMigrationsModule), - typeof(AbpSerilogModule) + typeof(AbpAspNetCoreSerilogModule) )] public class MyProjectNameHttpApiHostModule : AbpModule { diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs index 73a9d01be6..769208b664 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs @@ -36,7 +36,7 @@ namespace MyCompanyName.MyProjectName typeof(AbpAspNetCoreMvcUiBasicThemeModule), typeof(AbpAspNetCoreAuthenticationJwtBearerModule), typeof(AbpAccountWebIdentityServerModule), - typeof(AbpSerilogModule) + typeof(AbpAspNetCoreSerilogModule) )] public class MyProjectNameHttpApiHostModule : AbpModule { diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 117386e588..47cc80fcca 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -37,7 +37,7 @@ namespace MyCompanyName.MyProjectName typeof(AbpAccountApplicationModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule), typeof(MyProjectNameEntityFrameworkCoreDbMigrationsModule), - typeof(AbpSerilogModule) + typeof(AbpAspNetCoreSerilogModule) )] public class MyProjectNameIdentityServerModule : AbpModule { diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs index c30a3b5d88..f9b96fe5de 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs @@ -51,7 +51,7 @@ namespace MyCompanyName.MyProjectName.Web typeof(AbpHttpClientIdentityModelModule), typeof(AbpIdentityWebModule), typeof(AbpTenantManagementWebModule), - typeof(AbpSerilogModule) + typeof(AbpAspNetCoreSerilogModule) )] public class MyProjectNameWebModule : AbpModule { diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs index cd27c9ece2..43da5d0a49 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs @@ -49,7 +49,7 @@ namespace MyCompanyName.MyProjectName.Web typeof(AbpAspNetCoreMvcUiBasicThemeModule), typeof(AbpAspNetCoreAuthenticationJwtBearerModule), typeof(AbpTenantManagementWebModule), - typeof(AbpSerilogModule) + typeof(AbpAspNetCoreSerilogModule) )] public class MyProjectNameWebModule : AbpModule { diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index 972ccc9708..9bf05a70b7 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -41,7 +41,7 @@ namespace MyCompanyName.MyProjectName typeof(AbpAuditLoggingEntityFrameworkCoreModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), - typeof(AbpSerilogModule) + typeof(AbpAspNetCoreSerilogModule) )] public class MyProjectNameHttpApiHostModule : AbpModule { diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 7205fdf225..51e8935288 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -68,7 +68,7 @@ namespace MyCompanyName.MyProjectName typeof(AbpTenantManagementHttpApiModule), typeof(AbpAspNetCoreAuthenticationJwtBearerModule), typeof(MyProjectNameApplicationContractsModule), - typeof(AbpSerilogModule) + typeof(AbpAspNetCoreSerilogModule) )] public class MyProjectNameIdentityServerModule : AbpModule { diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs index cabb843736..8dc21d82c1 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs @@ -57,7 +57,7 @@ namespace MyCompanyName.MyProjectName typeof(AbpTenantManagementHttpApiClientModule), typeof(AbpFeatureManagementHttpApiClientModule), typeof(AbpPermissionManagementHttpApiClientModule), - typeof(AbpSerilogModule) + typeof(AbpAspNetCoreSerilogModule) )] public class MyProjectNameWebHostModule : AbpModule { diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs index ea653ca4a1..6040d7665f 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs @@ -58,7 +58,7 @@ namespace MyCompanyName.MyProjectName typeof(AbpTenantManagementApplicationModule), typeof(AbpTenantManagementEntityFrameworkCoreModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule), - typeof(AbpSerilogModule) + typeof(AbpAspNetCoreSerilogModule) )] public class MyProjectNameWebUnifiedModule : AbpModule { From c88cd2054e4b4aebafe69a97114a71d4cad9570a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 13 Jan 2020 13:20:18 +0300 Subject: [PATCH 173/411] #2597 Refactor AbpAspNetCoreSerilogOptions --- ...CoreSerilogApplicationBuilderExtensions.cs | 2 +- .../AbpAspNetCoreSerilogEnrichersOptions.cs | 21 ------------- ...odule.cs => AbpAspNetCoreSerilogModule.cs} | 1 - .../Serilog/AbpAspNetCoreSerilogOptions.cs | 30 +++++++++++++++++++ .../Serilog/AbpSerilogEnrichersConsts.cs | 10 ------- ...gMiddleware.cs => AbpSerilogMiddleware.cs} | 16 +++++----- .../Serilog/Serilog_Enrichers_Tests.cs | 16 +++++----- 7 files changed, 47 insertions(+), 49 deletions(-) delete mode 100644 framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogEnrichersOptions.cs rename framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/{AbpSerilogModule.cs => AbpAspNetCoreSerilogModule.cs} (90%) create mode 100644 framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogOptions.cs delete mode 100644 framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogEnrichersConsts.cs rename framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/{SerilogMiddleware.cs => AbpSerilogMiddleware.cs} (71%) diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs index f9093ffaac..b7a02caa5c 100644 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs @@ -7,7 +7,7 @@ namespace Microsoft.AspNetCore.Builder public static IApplicationBuilder UseSerilogEnrichers(this IApplicationBuilder app) { return app - .UseMiddleware(); + .UseMiddleware(); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogEnrichersOptions.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogEnrichersOptions.cs deleted file mode 100644 index 06453cb61f..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogEnrichersOptions.cs +++ /dev/null @@ -1,21 +0,0 @@ -namespace Volo.Abp.AspNetCore.Serilog -{ - public class AbpAspNetCoreSerilogEnrichersOptions - { - public string TenantIdEnricherPropertyName { get; set; } - - public string UserIdEnricherPropertyName { get; set; } - - public string ClientIdEnricherPropertyName { get; set; } - - public string CorrelationIdPropertyName { get; set; } - - public AbpAspNetCoreSerilogEnrichersOptions() - { - TenantIdEnricherPropertyName = AbpSerilogEnrichersConsts.TenantIdEnricherPropertyName; - UserIdEnricherPropertyName = AbpSerilogEnrichersConsts.UserIdEnricherPropertyName; - ClientIdEnricherPropertyName = AbpSerilogEnrichersConsts.ClientIdEnricherPropertyName; - CorrelationIdPropertyName = AbpSerilogEnrichersConsts.CorrelationIdPropertyName; - } - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogModule.cs similarity index 90% rename from framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs rename to framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogModule.cs index 2b718fcb84..dc8e7c1ce4 100644 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogModule.cs @@ -1,4 +1,3 @@ -using Volo.Abp.AspNetCore; using Volo.Abp.Modularity; using Volo.Abp.MultiTenancy; diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogOptions.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogOptions.cs new file mode 100644 index 0000000000..84f212ff4a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogOptions.cs @@ -0,0 +1,30 @@ +namespace Volo.Abp.AspNetCore.Serilog +{ + public class AbpAspNetCoreSerilogOptions + { + public AllEnricherPropertyNames EnricherPropertyNames { get; } = new AllEnricherPropertyNames(); + + public class AllEnricherPropertyNames + { + ///

      + /// Default value: "TenantId". + /// + public string TenantId { get; set; } = "TenantId"; + + /// + /// Default value: "UserId". + /// + public string UserId { get; set; } = "UserId"; + + /// + /// Default value: "ClientId". + /// + public string ClientId { get; set; } = "ClientId"; + + /// + /// Default value: "CorrelationId". + /// + public string CorrelationId { get; set; } = "CorrelationId"; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogEnrichersConsts.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogEnrichersConsts.cs deleted file mode 100644 index bf2832b553..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogEnrichersConsts.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace Volo.Abp.AspNetCore.Serilog -{ - public class AbpSerilogEnrichersConsts - { - public const string TenantIdEnricherPropertyName = "TenantId"; - public const string UserIdEnricherPropertyName = "UserId"; - public const string ClientIdEnricherPropertyName = "ClientId"; - public const string CorrelationIdPropertyName = "CorrelationId"; - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/SerilogMiddleware.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogMiddleware.cs similarity index 71% rename from framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/SerilogMiddleware.cs rename to framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogMiddleware.cs index e03bcd5342..8a8f032766 100644 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/SerilogMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogMiddleware.cs @@ -13,20 +13,20 @@ using Volo.Abp.Users; namespace Volo.Abp.AspNetCore.Serilog { - public class SerilogMiddleware : IMiddleware, ITransientDependency + public class AbpSerilogMiddleware : IMiddleware, ITransientDependency { private readonly ICurrentClient _currentClient; private readonly ICurrentTenant _currentTenant; private readonly ICurrentUser _currentUser; private readonly ICorrelationIdProvider _correlationIdProvider; - private readonly AbpAspNetCoreSerilogEnrichersOptions _options; + private readonly AbpAspNetCoreSerilogOptions _options; - public SerilogMiddleware( + public AbpSerilogMiddleware( ICurrentTenant currentTenant, ICurrentUser currentUser, ICurrentClient currentClient, ICorrelationIdProvider correlationIdProvider, - IOptions options) + IOptions options) { _currentTenant = currentTenant; _currentUser = currentUser; @@ -41,23 +41,23 @@ namespace Volo.Abp.AspNetCore.Serilog if (_currentTenant?.Id != null) { - enrichers.Add(new PropertyEnricher(_options.TenantIdEnricherPropertyName, _currentTenant.Id)); + enrichers.Add(new PropertyEnricher(_options.EnricherPropertyNames.TenantId, _currentTenant.Id)); } if (_currentUser?.Id != null) { - enrichers.Add(new PropertyEnricher(_options.UserIdEnricherPropertyName, _currentUser.Id)); + enrichers.Add(new PropertyEnricher(_options.EnricherPropertyNames.UserId, _currentUser.Id)); } if (_currentClient?.Id != null) { - enrichers.Add(new PropertyEnricher(_options.ClientIdEnricherPropertyName, _currentClient.Id)); + enrichers.Add(new PropertyEnricher(_options.EnricherPropertyNames.ClientId, _currentClient.Id)); } var correlationId = _correlationIdProvider.Get(); if (!string.IsNullOrEmpty(correlationId)) { - enrichers.Add(new PropertyEnricher(_options.CorrelationIdPropertyName, correlationId)); + enrichers.Add(new PropertyEnricher(_options.EnricherPropertyNames.CorrelationId, correlationId)); } using (LogContext.Push(enrichers.ToArray())) diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs index bc45eb7c51..0a7a189a35 100644 --- a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs @@ -22,14 +22,14 @@ namespace Volo.Abp.AspNetCore.Serilog private readonly string _testTenantName = "acme"; private readonly AbpAspNetCoreMultiTenancyOptions _tenancyOptions; - private readonly AbpAspNetCoreSerilogEnrichersOptions _serilogEnrichersOptions; + private readonly AbpAspNetCoreSerilogOptions _serilogOptions; private readonly ILogger _logger; public Serilog_Enrichers_Tests() { _tenancyOptions = ServiceProvider.GetRequiredService>().Value; - _serilogEnrichersOptions = - ServiceProvider.GetRequiredService>().Value; + _serilogOptions = + ServiceProvider.GetRequiredService>().Value; _logger = ServiceProvider.GetRequiredService>(); } @@ -56,7 +56,7 @@ namespace Volo.Abp.AspNetCore.Serilog var executedLogEvent = GetLogEvent(ExecutedEndpointLogEventText); executedLogEvent.ShouldNotBeNull(); - executedLogEvent.Properties.ContainsKey(_serilogEnrichersOptions.TenantIdEnricherPropertyName) + executedLogEvent.Properties.ContainsKey(_serilogOptions.EnricherPropertyNames.TenantId) .ShouldBe(false); } @@ -71,9 +71,9 @@ namespace Volo.Abp.AspNetCore.Serilog var executedLogEvent = GetLogEvent(ExecutedEndpointLogEventText); executedLogEvent.ShouldNotBeNull(); - executedLogEvent.Properties.ContainsKey(_serilogEnrichersOptions.TenantIdEnricherPropertyName) + executedLogEvent.Properties.ContainsKey(_serilogOptions.EnricherPropertyNames.TenantId) .ShouldBe(true); - ((ScalarValue) executedLogEvent.Properties[_serilogEnrichersOptions.TenantIdEnricherPropertyName]).Value + ((ScalarValue) executedLogEvent.Properties[_serilogOptions.EnricherPropertyNames.TenantId]).Value .ShouldBe(_testTenantId); } @@ -87,10 +87,10 @@ namespace Volo.Abp.AspNetCore.Serilog executedLogEvent.ShouldNotBeNull(); - executedLogEvent.Properties.ContainsKey(_serilogEnrichersOptions.CorrelationIdPropertyName) + executedLogEvent.Properties.ContainsKey(_serilogOptions.EnricherPropertyNames.CorrelationId) .ShouldNotBeNull(); - ((ScalarValue) executedLogEvent.Properties[_serilogEnrichersOptions.CorrelationIdPropertyName]).Value + ((ScalarValue) executedLogEvent.Properties[_serilogOptions.EnricherPropertyNames.CorrelationId]).Value .ShouldBe(result); } } From 32407660da28efc4b081f04f45864dbbe00068f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 13 Jan 2020 13:20:40 +0300 Subject: [PATCH 174/411] Create launchSettings.json --- .../Properties/launchSettings.json | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 framework/src/Volo.Abp.AspNetCore.Serilog/Properties/launchSettings.json diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Properties/launchSettings.json b/framework/src/Volo.Abp.AspNetCore.Serilog/Properties/launchSettings.json new file mode 100644 index 0000000000..cb1bd6546c --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:61851/", + "sslPort": 44301 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "Volo.Abp.AspNetCore.Serilog": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "https://localhost:5001;http://localhost:5000" + } + } +} \ No newline at end of file From a8e8cf26f129d08c48ce7639c37ae11b0885a98d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 13 Jan 2020 13:24:38 +0300 Subject: [PATCH 175/411] #2597 Rename UseSerilogEnrichers to UseAbpSerilogEnrichers --- .../Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs | 2 +- .../Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs | 2 +- .../MyProjectNameHttpApiHostModule.cs | 2 +- .../MyProjectNameHttpApiHostModule.cs | 2 +- .../MyProjectNameIdentityServerModule.cs | 2 +- .../MyProjectNameWebModule.cs | 2 +- .../MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs | 2 +- .../MyProjectNameHttpApiHostModule.cs | 2 +- .../MyProjectNameIdentityServerModule.cs | 2 +- .../MyProjectNameWebHostModule.cs | 2 +- .../MyProjectNameWebUnifiedModule.cs | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs index b7a02caa5c..cf15367e15 100644 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs @@ -4,7 +4,7 @@ namespace Microsoft.AspNetCore.Builder { public static class AbpAspNetCoreSerilogApplicationBuilderExtensions { - public static IApplicationBuilder UseSerilogEnrichers(this IApplicationBuilder app) + public static IApplicationBuilder UseAbpSerilogEnrichers(this IApplicationBuilder app) { return app .UseMiddleware(); diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs index 736539b5db..557288cd7d 100644 --- a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs @@ -32,7 +32,7 @@ namespace Volo.Abp.AspNetCore.App app.UseAuthorization(); app.UseMultiTenancy(); app.UseAuditing(); - app.UseSerilogEnrichers(); + app.UseAbpSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index 81745602d9..401c3641fc 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -180,7 +180,7 @@ namespace MyCompanyName.MyProjectName }); app.UseAuditing(); - app.UseSerilogEnrichers(); + app.UseAbpSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs index 769208b664..beeca41292 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs @@ -174,7 +174,7 @@ namespace MyCompanyName.MyProjectName }); app.UseAuditing(); - app.UseSerilogEnrichers(); + app.UseAbpSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 47cc80fcca..1dfe7f56eb 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -151,7 +151,7 @@ namespace MyCompanyName.MyProjectName app.UseAuthorization(); app.UseAbpRequestLocalization(); app.UseAuditing(); - app.UseSerilogEnrichers(); + app.UseAbpSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs index f9b96fe5de..d2b050644f 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs @@ -243,7 +243,7 @@ namespace MyCompanyName.MyProjectName.Web }); app.UseAuditing(); - app.UseSerilogEnrichers(); + app.UseAbpSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs index 43da5d0a49..697abb9ce2 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs @@ -218,7 +218,7 @@ namespace MyCompanyName.MyProjectName.Web options.SwaggerEndpoint("/swagger/v1/swagger.json", "MyProjectName API"); }); app.UseAuditing(); - app.UseSerilogEnrichers(); + app.UseAbpSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index 9bf05a70b7..8ebec4ad9b 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -168,7 +168,7 @@ namespace MyCompanyName.MyProjectName options.SwaggerEndpoint("/swagger/v1/swagger.json", "Support APP API"); }); app.UseAuditing(); - app.UseSerilogEnrichers(); + app.UseAbpSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 51e8935288..4be099efaa 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -191,7 +191,7 @@ namespace MyCompanyName.MyProjectName options.SwaggerEndpoint("/swagger/v1/swagger.json", "Support APP API"); }); app.UseAuditing(); - app.UseSerilogEnrichers(); + app.UseAbpSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); SeedData(context); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs index 8dc21d82c1..41fb8fc7f2 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs @@ -251,7 +251,7 @@ namespace MyCompanyName.MyProjectName }); app.UseAuditing(); - app.UseSerilogEnrichers(); + app.UseAbpSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs index 6040d7665f..aa253e89d3 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs @@ -139,7 +139,7 @@ namespace MyCompanyName.MyProjectName app.UseAbpRequestLocalization(); app.UseAuditing(); - app.UseSerilogEnrichers(); + app.UseAbpSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); using (var scope = context.ServiceProvider.CreateScope()) From 62127df0eab23d7f4c252a2b88b8dc4730039794 Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Mon, 13 Jan 2020 13:25:31 +0300 Subject: [PATCH 176/411] removed empty space --- .../src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingManager.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingManager.cs index f2980d1cf5..409084ac6f 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingManager.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingManager.cs @@ -152,7 +152,7 @@ namespace Volo.Abp.Auditing public async Task SaveAsync() { - await _auditingManager.SaveAsync(this).ConfigureAwait(false); + await _auditingManager.SaveAsync(this).ConfigureAwait(false); } public void AddException(Exception exception) { From fd123ebde4a9f95fa66c41a192bcf05c8d808cf4 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 13 Jan 2020 13:32:22 +0300 Subject: [PATCH 177/411] fix: convert imports as relative --- .../core/src/lib/actions/replaceable-components.actions.ts | 3 +++ .../src/lib/components/confirmation/confirmation.component.ts | 3 ++- .../components/toast-container/toast-container.component.html | 2 +- .../components/toast-container/toast-container.component.ts | 4 ++-- .../theme-shared/src/lib/components/toast/toast.component.ts | 2 +- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/actions/replaceable-components.actions.ts b/npm/ng-packs/packages/core/src/lib/actions/replaceable-components.actions.ts index e611459960..3b948cf63d 100644 --- a/npm/ng-packs/packages/core/src/lib/actions/replaceable-components.actions.ts +++ b/npm/ng-packs/packages/core/src/lib/actions/replaceable-components.actions.ts @@ -1,5 +1,8 @@ import { ReplaceableComponents } from '../models/replaceable-components'; +/** + * @see usage: https://github.com/abpframework/abp/pull/2522#issue-358333183 + */ export class AddReplaceableComponent { static readonly type = '[ReplaceableComponents] Add'; constructor(public payload: ReplaceableComponents.ReplaceableComponent) {} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts index ad052a2772..afdb024888 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts @@ -1,7 +1,8 @@ import { Component } from '@angular/core'; import { ConfirmationService } from '../../services/confirmation.service'; -import { Confirmation, Toaster } from '../../models'; +import { Confirmation } from '../../models/confirmation'; import { LocalizationService } from '@abp/ng.core'; +import { Toaster } from '../../models/toaster'; @Component({ selector: 'abp-confirmation', diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.html index c3529e99ff..88d45ff04b 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.html +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.html @@ -5,7 +5,7 @@ [style.bottom]="bottom || 'auto'" [style.left]="left || 'auto'" [style.display]="toasts.length ? 'flex' : 'none'" - [@toastInOut]="toasts.length - 1 || 0" + [@toastInOut]="toasts.length" >
  • diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts index 72483622b6..124dcc5185 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts @@ -1,6 +1,6 @@ import { Component, Input, OnInit } from '@angular/core'; -import { Toaster } from '../../models'; -import { toastInOut } from '../../animations'; +import { Toaster } from '../../models/toaster'; +import { toastInOut } from '../../animations/toast.animations'; import { ToasterService } from '../../services/toaster.service'; @Component({ diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts index 6cda67167b..b4465934b6 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnInit } from '@angular/core'; -import { Toaster } from '../../models'; +import { Toaster } from '../../models/toaster'; import { ToasterService } from '../../services/toaster.service'; import { LocalizationService } from '@abp/ng.core'; import snq from 'snq'; From 407ad749bb735eb9b6cc1ef6dd310253b9680883 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 13 Jan 2020 13:43:07 +0300 Subject: [PATCH 178/411] Upgrade ng package versions --- npm/ng-packs/lerna.version.json | 6 ++++-- npm/ng-packs/packages/account-config/package.json | 2 +- npm/ng-packs/packages/account/package.json | 6 +++--- npm/ng-packs/packages/core/package.json | 2 +- npm/ng-packs/packages/feature-management/package.json | 4 ++-- npm/ng-packs/packages/identity-config/package.json | 2 +- npm/ng-packs/packages/identity/package.json | 8 ++++---- npm/ng-packs/packages/permission-management/package.json | 4 ++-- .../packages/setting-management-config/package.json | 2 +- npm/ng-packs/packages/setting-management/package.json | 6 +++--- .../packages/tenant-management-config/package.json | 2 +- npm/ng-packs/packages/tenant-management/package.json | 8 ++++---- npm/ng-packs/packages/theme-basic/package.json | 4 ++-- npm/ng-packs/packages/theme-shared/package.json | 4 ++-- 14 files changed, 31 insertions(+), 29 deletions(-) diff --git a/npm/ng-packs/lerna.version.json b/npm/ng-packs/lerna.version.json index 1a9787d177..a006bfaac7 100644 --- a/npm/ng-packs/lerna.version.json +++ b/npm/ng-packs/lerna.version.json @@ -1,5 +1,7 @@ { - "version": "1.1.1", - "packages": ["packages/*"], + "version": "2.0.0", + "packages": [ + "packages/*" + ], "npmClient": "yarn" } diff --git a/npm/ng-packs/packages/account-config/package.json b/npm/ng-packs/packages/account-config/package.json index aeb8d2b697..931ce1bdfe 100644 --- a/npm/ng-packs/packages/account-config/package.json +++ b/npm/ng-packs/packages/account-config/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.account.config", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/account/package.json b/npm/ng-packs/packages/account/package.json index 88f866d5a4..fc78d14d38 100644 --- a/npm/ng-packs/packages/account/package.json +++ b/npm/ng-packs/packages/account/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.account", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.account.config": "^1.1.1", - "@abp/ng.theme.shared": "^1.1.1" + "@abp/ng.account.config": "^2.0.0", + "@abp/ng.theme.shared": "^2.0.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/core/package.json b/npm/ng-packs/packages/core/package.json index 10063989b5..ecf9c3f2ba 100644 --- a/npm/ng-packs/packages/core/package.json +++ b/npm/ng-packs/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.core", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/feature-management/package.json b/npm/ng-packs/packages/feature-management/package.json index 38cd5ffa9c..511973074a 100644 --- a/npm/ng-packs/packages/feature-management/package.json +++ b/npm/ng-packs/packages/feature-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.feature-management", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "^1.1.1" + "@abp/ng.theme.shared": "^2.0.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/identity-config/package.json b/npm/ng-packs/packages/identity-config/package.json index c4a75d9fec..42916e4b08 100644 --- a/npm/ng-packs/packages/identity-config/package.json +++ b/npm/ng-packs/packages/identity-config/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.identity.config", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/identity/package.json b/npm/ng-packs/packages/identity/package.json index 0bebdd32b8..d2a3c7559c 100644 --- a/npm/ng-packs/packages/identity/package.json +++ b/npm/ng-packs/packages/identity/package.json @@ -1,15 +1,15 @@ { "name": "@abp/ng.identity", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.identity.config": "^1.1.1", - "@abp/ng.permission-management": "^1.1.1", - "@abp/ng.theme.shared": "^1.1.1" + "@abp/ng.identity.config": "^2.0.0", + "@abp/ng.permission-management": "^2.0.0", + "@abp/ng.theme.shared": "^2.0.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/permission-management/package.json b/npm/ng-packs/packages/permission-management/package.json index cc7fdddf2f..462d3eda7f 100644 --- a/npm/ng-packs/packages/permission-management/package.json +++ b/npm/ng-packs/packages/permission-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.permission-management", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "^1.1.1" + "@abp/ng.theme.shared": "^2.0.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/setting-management-config/package.json b/npm/ng-packs/packages/setting-management-config/package.json index 5f1606f414..6e8c0e93b1 100644 --- a/npm/ng-packs/packages/setting-management-config/package.json +++ b/npm/ng-packs/packages/setting-management-config/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.setting-management.config", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/setting-management/package.json b/npm/ng-packs/packages/setting-management/package.json index 6144b81903..32d5c8b0df 100644 --- a/npm/ng-packs/packages/setting-management/package.json +++ b/npm/ng-packs/packages/setting-management/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.setting-management", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.setting-management.config": "^1.1.1", - "@abp/ng.theme.shared": "^1.1.1" + "@abp/ng.setting-management.config": "^2.0.0", + "@abp/ng.theme.shared": "^2.0.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/tenant-management-config/package.json b/npm/ng-packs/packages/tenant-management-config/package.json index 9bbc6c48c7..729faea592 100644 --- a/npm/ng-packs/packages/tenant-management-config/package.json +++ b/npm/ng-packs/packages/tenant-management-config/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.tenant-management.config", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/tenant-management/package.json b/npm/ng-packs/packages/tenant-management/package.json index 0467507227..e73112a7fc 100644 --- a/npm/ng-packs/packages/tenant-management/package.json +++ b/npm/ng-packs/packages/tenant-management/package.json @@ -1,15 +1,15 @@ { "name": "@abp/ng.tenant-management", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.feature-management": "^1.1.1", - "@abp/ng.tenant-management.config": "^1.1.1", - "@abp/ng.theme.shared": "^1.1.1" + "@abp/ng.feature-management": "^2.0.0", + "@abp/ng.tenant-management.config": "^2.0.0", + "@abp/ng.theme.shared": "^2.0.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/theme-basic/package.json b/npm/ng-packs/packages/theme-basic/package.json index 079b52ed22..d397fc5e21 100644 --- a/npm/ng-packs/packages/theme-basic/package.json +++ b/npm/ng-packs/packages/theme-basic/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.theme.basic", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "^1.1.1" + "@abp/ng.theme.shared": "^2.0.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/theme-shared/package.json b/npm/ng-packs/packages/theme-shared/package.json index 999190ec73..edfdf23f66 100644 --- a/npm/ng-packs/packages/theme-shared/package.json +++ b/npm/ng-packs/packages/theme-shared/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.theme.shared", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.core": "^1.1.1", + "@abp/ng.core": "^2.0.0", "@angular/cdk": "^8.2.3", "@fortawesome/fontawesome-free": "^5.11.2", "@ng-bootstrap/ng-bootstrap": "^5.1.4", From 8db15a81cb951ed8fe1cef72bee2355c3d65664c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 13 Jan 2020 13:47:24 +0300 Subject: [PATCH 179/411] Increased version of the npm packages and published all. --- npm/lerna.json | 2 +- npm/ng-packs/scripts/package-lock.json | 1491 +++++++++++++++++ npm/packs/anchor-js/package.json | 6 +- .../package.json | 6 +- .../package.json | 32 +- npm/packs/aspnetcore.mvc.ui/package.json | 4 +- npm/packs/blogging/package.json | 10 +- npm/packs/bootstrap-datepicker/package.json | 4 +- npm/packs/bootstrap/package.json | 6 +- npm/packs/chart.js/package.json | 4 +- npm/packs/clipboard/package.json | 6 +- npm/packs/codemirror/package.json | 6 +- npm/packs/core/package.json | 4 +- npm/packs/datatables.net-bs4/package.json | 6 +- npm/packs/datatables.net/package.json | 6 +- npm/packs/docs/package.json | 14 +- npm/packs/flag-icon-css/package.json | 4 +- npm/packs/font-awesome/package.json | 6 +- npm/packs/highlight.js/package.json | 6 +- npm/packs/jquery-form/package.json | 6 +- .../package.json | 6 +- npm/packs/jquery-validation/package.json | 6 +- npm/packs/jquery/package.json | 6 +- npm/packs/lodash/package.json | 6 +- npm/packs/luxon/package.json | 4 +- .../package.json | 6 +- npm/packs/markdown-it/package.json | 6 +- npm/packs/owl.carousel/package.json | 6 +- npm/packs/popper.js/package.json | 6 +- npm/packs/prismjs/package.json | 6 +- npm/packs/select2/package.json | 6 +- npm/packs/sweetalert/package.json | 6 +- npm/packs/timeago/package.json | 6 +- npm/packs/toastr/package.json | 6 +- npm/packs/tui-editor/package.json | 12 +- npm/yarn.lock | 95 +- templates/app/angular/package.json | 10 +- .../package.json | 2 +- .../yarn.lock | 222 +-- .../package.json | 2 +- .../yarn.lock | 222 +-- .../package.json | 2 +- .../yarn.lock | 222 +-- .../package.json | 2 +- .../MyCompanyName.MyProjectName.Web/yarn.lock | 222 +-- templates/module/angular/package.json | 10 +- .../my-project-name-config/package.json | 2 +- .../projects/my-project-name/package.json | 2 +- .../package.json | 2 +- .../yarn.lock | 222 +-- .../package.json | 2 +- .../yarn.lock | 222 +-- .../package.json | 2 +- .../yarn.lock | 222 +-- 54 files changed, 2497 insertions(+), 913 deletions(-) create mode 100644 npm/ng-packs/scripts/package-lock.json diff --git a/npm/lerna.json b/npm/lerna.json index f941062e34..34b6ab898a 100644 --- a/npm/lerna.json +++ b/npm/lerna.json @@ -1,5 +1,5 @@ { - "version": "1.1.1", + "version": "2.0.0", "packages": [ "packs/*" ], diff --git a/npm/ng-packs/scripts/package-lock.json b/npm/ng-packs/scripts/package-lock.json new file mode 100644 index 0000000000..4a5907ee29 --- /dev/null +++ b/npm/ng-packs/scripts/package-lock.json @@ -0,0 +1,1491 @@ +{ + "name": "scripts", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "@types/node": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.6.tgz", + "integrity": "sha512-Jg1F+bmxcpENHP23sVKkNuU3uaxPnsBMW0cLjleiikFKomJQbsn0Cqk2yDvQArqzZN6ABfBkZ0To7pQ8sLdWDg==", + "dev": true + }, + "ansi-bgblack": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgblack/-/ansi-bgblack-0.1.1.tgz", + "integrity": "sha1-poulAHiHcBtqr74/oNrf36juPKI=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-bgblue": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgblue/-/ansi-bgblue-0.1.1.tgz", + "integrity": "sha1-Z73ATtybm1J4lp2hlt6j11yMNhM=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-bgcyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgcyan/-/ansi-bgcyan-0.1.1.tgz", + "integrity": "sha1-WEiUJWAL3p9VBwaN2Wnr/bUP52g=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-bggreen": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bggreen/-/ansi-bggreen-0.1.1.tgz", + "integrity": "sha1-TjGRJIUplD9DIelr8THRwTgWr0k=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-bgmagenta": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgmagenta/-/ansi-bgmagenta-0.1.1.tgz", + "integrity": "sha1-myhDLAduqpmUGGcqPvvhk5HCx6E=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-bgred": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgred/-/ansi-bgred-0.1.1.tgz", + "integrity": "sha1-p2+Sg4OCukMpCmwXeEJPmE1vEEE=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-bgwhite": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgwhite/-/ansi-bgwhite-0.1.1.tgz", + "integrity": "sha1-ZQRlE3elim7OzQMxmU5IAljhG6g=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-bgyellow": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgyellow/-/ansi-bgyellow-0.1.1.tgz", + "integrity": "sha1-w/4usIzUdmSAKeaHTRWgs49h1E8=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-black": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-black/-/ansi-black-0.1.1.tgz", + "integrity": "sha1-9hheiJNgslRaHsUMC/Bj/EMDJFM=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-blue": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-blue/-/ansi-blue-0.1.1.tgz", + "integrity": "sha1-FbgEmQ6S/JyoxUds6PaZd3wh7b8=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-bold": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bold/-/ansi-bold-0.1.1.tgz", + "integrity": "sha1-PmOVCvWswq4uZw5vZ96xFdGl9QU=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-colors": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-0.2.0.tgz", + "integrity": "sha1-csMd4qDZoszQysMMyYI+6y9kNLU=", + "requires": { + "ansi-bgblack": "^0.1.1", + "ansi-bgblue": "^0.1.1", + "ansi-bgcyan": "^0.1.1", + "ansi-bggreen": "^0.1.1", + "ansi-bgmagenta": "^0.1.1", + "ansi-bgred": "^0.1.1", + "ansi-bgwhite": "^0.1.1", + "ansi-bgyellow": "^0.1.1", + "ansi-black": "^0.1.1", + "ansi-blue": "^0.1.1", + "ansi-bold": "^0.1.1", + "ansi-cyan": "^0.1.1", + "ansi-dim": "^0.1.1", + "ansi-gray": "^0.1.1", + "ansi-green": "^0.1.1", + "ansi-grey": "^0.1.1", + "ansi-hidden": "^0.1.1", + "ansi-inverse": "^0.1.1", + "ansi-italic": "^0.1.1", + "ansi-magenta": "^0.1.1", + "ansi-red": "^0.1.1", + "ansi-reset": "^0.1.1", + "ansi-strikethrough": "^0.1.1", + "ansi-underline": "^0.1.1", + "ansi-white": "^0.1.1", + "ansi-yellow": "^0.1.1", + "lazy-cache": "^2.0.1" + } + }, + "ansi-cyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-dim": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-dim/-/ansi-dim-0.1.1.tgz", + "integrity": "sha1-QN5MYDqoCG2Oeoa4/5mNXDbu/Ww=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-green": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-green/-/ansi-green-0.1.1.tgz", + "integrity": "sha1-il2al55FjVfEDjNYCzc5C44Q0Pc=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-grey": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-grey/-/ansi-grey-0.1.1.tgz", + "integrity": "sha1-WdmLasK6GfilF5jphT+6eDOaM8E=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-hidden": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-hidden/-/ansi-hidden-0.1.1.tgz", + "integrity": "sha1-7WpMSY0rt8uyidvyqNHcyFZ/rg8=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-inverse": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-inverse/-/ansi-inverse-0.1.1.tgz", + "integrity": "sha1-tq9Fgm/oJr+1KKbHmIV5Q1XM0mk=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-italic": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-italic/-/ansi-italic-0.1.1.tgz", + "integrity": "sha1-EEdDRj9iXBQqA2c5z4XtpoiYbyM=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-magenta": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-magenta/-/ansi-magenta-0.1.1.tgz", + "integrity": "sha1-BjtboW+z8j4c/aKwfAqJ3hHkMK4=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-red": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-reset": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-reset/-/ansi-reset-0.1.1.tgz", + "integrity": "sha1-5+cSksPH3c1NYu9KbHwFmAkRw7c=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-strikethrough": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-strikethrough/-/ansi-strikethrough-0.1.1.tgz", + "integrity": "sha1-2Eh3FAss/wfRyT685pkE9oiF5Wg=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "ansi-underline": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-underline/-/ansi-underline-0.1.1.tgz", + "integrity": "sha1-38kg9Ml7WXfqFi34/7mIMIqqcaQ=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-white": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-white/-/ansi-white-0.1.1.tgz", + "integrity": "sha1-nHe3wZPF7pkuYBHTbsTJIbRXiUQ=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" + }, + "ansi-yellow": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-yellow/-/ansi-yellow-0.1.1.tgz", + "integrity": "sha1-y5NW8vRscy8OMZnmEClVp32oPB0=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "arg": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.2.tgz", + "integrity": "sha512-+ytCkGcBtHZ3V2r2Z06AncYO8jz46UEamcspGoU8lHcEbpn6J77QK0vdWvChsclg/tM5XIJC5tnjmPp7Eq6Obg==", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-swap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arr-swap/-/arr-swap-1.0.1.tgz", + "integrity": "sha1-FHWQ7WX8gVvAf+8Jl8Llgj1kNTQ=", + "requires": { + "is-number": "^3.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + } + } + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=" + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "requires": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-preset-node6": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/babel-preset-node6/-/babel-preset-node6-11.0.0.tgz", + "integrity": "sha1-CDWZRRckiYWinRj21GXasWu4p9g=", + "requires": { + "babel-plugin-syntax-trailing-function-commas": "^6.5.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.7.4" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "choices-separator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/choices-separator/-/choices-separator-2.0.0.tgz", + "integrity": "sha1-kv0XYxgteQM/XFxR0Lo1LlVnxpY=", + "requires": { + "ansi-dim": "^0.1.1", + "debug": "^2.6.6", + "strip-color": "^0.1.0" + } + }, + "clone-deep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-1.0.0.tgz", + "integrity": "sha512-hmJRX8x1QOJVV+GUjOBzi6iauhPqc9hIF6xitWRBbiPZOBb6vGo/mDRIK9P74RTKSQK7AE8B0DDWY/vpRrPmQw==", + "requires": { + "for-own": "^1.0.0", + "is-plain-object": "^2.0.4", + "kind-of": "^5.0.0", + "shallow-clone": "^1.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "commander": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.0.1.tgz", + "integrity": "sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA==" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "core-js": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", + "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==" + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "^1.4.0" + } + }, + "error-symbol": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/error-symbol/-/error-symbol-0.1.0.tgz", + "integrity": "sha1-Ck2uN9YA0VopukU9jvkg8YRDM/Y=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "execa": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/execa/-/execa-2.0.3.tgz", + "integrity": "sha512-iM124nlyGSrXmuyZF1EMe83ESY2chIYVyDRZKgmcDynid2Q2v/+GuE7gNMl6Sy9Niwf4MC0DDxagOxeMPjuLsw==", + "requires": { + "cross-spawn": "^6.0.5", + "get-stream": "^5.0.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^3.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "requires": { + "for-in": "^1.0.1" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "requires": { + "pump": "^3.0.0" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" + }, + "graceful-fs": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", + "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==" + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "info-symbol": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/info-symbol/-/info-symbol-0.1.0.tgz", + "integrity": "sha1-J4QdcoZ920JCzWEtecEGM4gcang=" + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-number": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-6.0.0.tgz", + "integrity": "sha512-Wu1VHeILBK8KAWJUAiSZQX94GmOE45Rg6/538fKwiloUu21KncEkYGPqob2oSZ5mUT73vLGrHQjKw3KMPwfDzg==" + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + }, + "koalas": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/koalas/-/koalas-1.0.2.tgz", + "integrity": "sha1-MYQz8HQjXbePrlZhoCqMpT7ilc0=" + }, + "lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", + "requires": { + "set-getter": "^0.1.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "log-ok": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/log-ok/-/log-ok-0.1.1.tgz", + "integrity": "sha1-vqPdNqzQuKckDXhza1uXxlREozQ=", + "requires": { + "ansi-green": "^0.1.1", + "success-symbol": "^0.1.0" + } + }, + "log-utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/log-utils/-/log-utils-0.2.1.tgz", + "integrity": "sha1-pMIXoN2aUFFdm5ICBgkas9TgMc8=", + "requires": { + "ansi-colors": "^0.2.0", + "error-symbol": "^0.1.0", + "info-symbol": "^0.1.0", + "log-ok": "^0.1.1", + "success-symbol": "^0.1.0", + "time-stamp": "^1.0.1", + "warning-symbol": "^0.1.0" + } + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "requires": { + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" + }, + "dependencies": { + "for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=" + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "npm-run-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz", + "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==", + "requires": { + "path-key": "^3.0.0" + }, + "dependencies": { + "path-key": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.0.tgz", + "integrity": "sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg==" + } + } + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "pointer-symbol": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pointer-symbol/-/pointer-symbol-1.0.0.tgz", + "integrity": "sha1-YPkRAgTqepKbYmRKITFVQ8uz1Ec=" + }, + "prompt-actions": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/prompt-actions/-/prompt-actions-3.0.2.tgz", + "integrity": "sha512-dhz2Fl7vK+LPpmnQ/S/eSut4BnH4NZDLyddHKi5uTU/2PDn3grEMGkgsll16V5RpVUh/yxdiam0xsM0RD4xvtg==", + "requires": { + "debug": "^2.6.8" + } + }, + "prompt-base": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/prompt-base/-/prompt-base-4.1.0.tgz", + "integrity": "sha512-svGzgLUKZoqomz9SGMkf1hBG8Wl3K7JGuRCXc/Pv7xw8239hhaTBXrmjt7EXA9P/QZzdyT8uNWt9F/iJTXq75g==", + "requires": { + "component-emitter": "^1.2.1", + "debug": "^3.0.1", + "koalas": "^1.0.2", + "log-utils": "^0.2.1", + "prompt-actions": "^3.0.2", + "prompt-question": "^5.0.1", + "readline-ui": "^2.2.3", + "readline-utils": "^2.2.3", + "static-extend": "^0.1.2" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "prompt-choices": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/prompt-choices/-/prompt-choices-4.1.0.tgz", + "integrity": "sha512-ZNYLv6rW9z9n0WdwCkEuS+w5nUAGzRgtRt6GQ5aFNFz6MIcU7nHFlHOwZtzy7RQBk80KzUGPSRQphvMiQzB8pg==", + "requires": { + "arr-flatten": "^1.1.0", + "arr-swap": "^1.0.1", + "choices-separator": "^2.0.0", + "clone-deep": "^4.0.0", + "collection-visit": "^1.0.0", + "define-property": "^2.0.2", + "is-number": "^6.0.0", + "kind-of": "^6.0.2", + "koalas": "^1.0.2", + "log-utils": "^0.2.1", + "pointer-symbol": "^1.0.0", + "radio-symbol": "^2.0.0", + "set-value": "^3.0.0", + "strip-color": "^0.1.0", + "terminal-paginator": "^2.0.2", + "toggle-array": "^1.0.1" + }, + "dependencies": { + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "requires": { + "kind-of": "^6.0.2" + } + } + } + }, + "prompt-confirm": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/prompt-confirm/-/prompt-confirm-2.0.4.tgz", + "integrity": "sha512-X5lzbC8/kMNHdPOqQPfMKpH4VV2f7v2OTRJoN69ZYBirSwTeQaf9ZhmzPEO9ybMA0YV2Pha5MV27u2/U4ahWfg==", + "requires": { + "ansi-cyan": "^0.1.1", + "prompt-base": "^4.0.1" + } + }, + "prompt-question": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/prompt-question/-/prompt-question-5.0.2.tgz", + "integrity": "sha512-wreaLbbu8f5+7zXds199uiT11Ojp59Z4iBi6hONlSLtsKGTvL2UY8VglcxQ3t/X4qWIxsNCg6aT4O8keO65v6Q==", + "requires": { + "clone-deep": "^1.0.0", + "debug": "^3.0.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "kind-of": "^5.0.2", + "koalas": "^1.0.2", + "prompt-choices": "^4.0.5" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "radio-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/radio-symbol/-/radio-symbol-2.0.0.tgz", + "integrity": "sha1-eqm/xQSFY21S3XbWqOYxspB5muE=", + "requires": { + "ansi-gray": "^0.1.1", + "ansi-green": "^0.1.1", + "is-windows": "^1.0.1" + } + }, + "readline-ui": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/readline-ui/-/readline-ui-2.2.3.tgz", + "integrity": "sha512-ix7jz0PxqQqcIuq3yQTHv1TOhlD2IHO74aNO+lSuXsRYm1d+pdyup1yF3zKyLK1wWZrVNGjkzw5tUegO2IDy+A==", + "requires": { + "component-emitter": "^1.2.1", + "debug": "^2.6.8", + "readline-utils": "^2.2.1", + "string-width": "^2.0.0" + } + }, + "readline-utils": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/readline-utils/-/readline-utils-2.2.3.tgz", + "integrity": "sha1-b4R9a48ZFcORtYHDZ81HhzhiNRo=", + "requires": { + "arr-flatten": "^1.1.0", + "extend-shallow": "^2.0.1", + "is-buffer": "^1.1.5", + "is-number": "^3.0.0", + "is-windows": "^1.0.1", + "koalas": "^1.0.2", + "mute-stream": "0.0.7", + "strip-color": "^0.1.0", + "window-size": "^1.1.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + } + } + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + }, + "set-getter": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", + "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", + "requires": { + "to-object-path": "^0.3.0" + } + }, + "set-value": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-3.0.1.tgz", + "integrity": "sha512-w6n3GUPYAWQj4ZyHWzD7K2FnFXHx9OTwJYbWg+6nXjG8sCLfs9DGv+KlqglKIIJx+ks7MlFuwFW2RBPb+8V+xg==", + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "shallow-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", + "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "requires": { + "is-extendable": "^0.1.1", + "kind-of": "^5.0.0", + "mixin-object": "^2.0.1" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-color": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/strip-color/-/strip-color-0.1.0.tgz", + "integrity": "sha1-EG9l09PmotlAHKwOsM6LinArT3s=" + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "success-symbol": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/success-symbol/-/success-symbol-0.1.0.tgz", + "integrity": "sha1-JAIuSG878c3KCUKDt2nEctO3KJc=" + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "terminal-paginator": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/terminal-paginator/-/terminal-paginator-2.0.2.tgz", + "integrity": "sha512-IZMT5ECF9p4s+sNCV8uvZSW9E1+9zy9Ji9xz2oee8Jfo7hUFpauyjxkhfRcIH6Lu3Wdepv5D1kVRc8Hx74/LfQ==", + "requires": { + "debug": "^2.6.6", + "extend-shallow": "^2.0.1", + "log-utils": "^0.2.1" + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "toggle-array": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toggle-array/-/toggle-array-1.0.1.tgz", + "integrity": "sha1-y/WEB5K9UJfzMReugkyTKv/ofVg=", + "requires": { + "isobject": "^3.0.0" + } + }, + "ts-node": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.6.1.tgz", + "integrity": "sha512-KqPbO7/UuOPE4ANAOV9geZjk6tet6rK2K+DFeEJq6kIXUi0nLkrOMksozGkIlFopOorkStlwar3DdWYrdl7zCw==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.6", + "yn": "^4.0.0" + } + }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "typescript": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.4.tgz", + "integrity": "sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw==" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "warning-symbol": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/warning-symbol/-/warning-symbol-0.1.0.tgz", + "integrity": "sha1-uzHdEbeg+dZ6su2V9Fe2WCW7rSE=" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "window-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-1.1.1.tgz", + "integrity": "sha512-5D/9vujkmVQ7pSmc0SCBmHXbkv6eaHwXEx65MywhmUMsI8sGqJ972APq1lotfcwMKPFLuCFfL8xGHLIp7jaBmA==", + "requires": { + "define-property": "^1.0.0", + "is-number": "^3.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "yn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-4.0.0.tgz", + "integrity": "sha512-huWiiCS4TxKc4SfgmTwW1K7JmXPPAmuXWYy4j9qjQo4+27Kni8mGhAAi1cloRWmBe2EqcLgt3IGqQoRL/MtPgg==", + "dev": true + } + } +} diff --git a/npm/packs/anchor-js/package.json b/npm/packs/anchor-js/package.json index f376a1d718..0b6ff26bae 100644 --- a/npm/packs/anchor-js/package.json +++ b/npm/packs/anchor-js/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/anchor-js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "anchor-js": "^4.2.2" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json b/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json index 28610d1da2..14d43e8a0f 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json @@ -1,11 +1,11 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/aspnetcore.mvc.ui.theme.basic", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.shared": "^2.0.0" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json index 399be97a28..714dd5c974 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json @@ -1,24 +1,24 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/aspnetcore.mvc.ui.theme.shared", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui": "^1.1.1", - "@abp/bootstrap": "^1.1.1", - "@abp/bootstrap-datepicker": "^1.1.1", - "@abp/datatables.net-bs4": "^1.1.1", - "@abp/font-awesome": "^1.1.1", - "@abp/jquery-form": "^1.1.1", - "@abp/jquery-validation-unobtrusive": "^1.1.1", - "@abp/lodash": "^1.1.1", - "@abp/luxon": "^1.1.1", - "@abp/malihu-custom-scrollbar-plugin": "^1.1.1", - "@abp/select2": "^1.1.1", - "@abp/sweetalert": "^1.1.1", - "@abp/timeago": "^1.1.1", - "@abp/toastr": "^1.1.1" + "@abp/aspnetcore.mvc.ui": "^2.0.0", + "@abp/bootstrap": "^2.0.0", + "@abp/bootstrap-datepicker": "^2.0.0", + "@abp/datatables.net-bs4": "^2.0.0", + "@abp/font-awesome": "^2.0.0", + "@abp/jquery-form": "^2.0.0", + "@abp/jquery-validation-unobtrusive": "^2.0.0", + "@abp/lodash": "^2.0.0", + "@abp/luxon": "^2.0.0", + "@abp/malihu-custom-scrollbar-plugin": "^2.0.0", + "@abp/select2": "^2.0.0", + "@abp/sweetalert": "^2.0.0", + "@abp/timeago": "^2.0.0", + "@abp/toastr": "^2.0.0" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/aspnetcore.mvc.ui/package.json b/npm/packs/aspnetcore.mvc.ui/package.json index 2701f22661..fcef935262 100644 --- a/npm/packs/aspnetcore.mvc.ui/package.json +++ b/npm/packs/aspnetcore.mvc.ui/package.json @@ -1,5 +1,5 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/aspnetcore.mvc.ui", "publishConfig": { "access": "public" @@ -12,5 +12,5 @@ "path": "^0.12.7", "rimraf": "^3.0.0" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/blogging/package.json b/npm/packs/blogging/package.json index 17890549e8..2cff0e28fb 100644 --- a/npm/packs/blogging/package.json +++ b/npm/packs/blogging/package.json @@ -1,13 +1,13 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/blogging", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "^1.1.1", - "@abp/owl.carousel": "^1.1.1", - "@abp/tui-editor": "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.shared": "^2.0.0", + "@abp/owl.carousel": "^2.0.0", + "@abp/tui-editor": "^2.0.0" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/bootstrap-datepicker/package.json b/npm/packs/bootstrap-datepicker/package.json index 6d3c56f0b0..801d1ae32f 100644 --- a/npm/packs/bootstrap-datepicker/package.json +++ b/npm/packs/bootstrap-datepicker/package.json @@ -1,5 +1,5 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/bootstrap-datepicker", "publishConfig": { "access": "public" @@ -7,5 +7,5 @@ "dependencies": { "bootstrap-datepicker": "^1.9.0" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/bootstrap/package.json b/npm/packs/bootstrap/package.json index 9df45d3c42..5c52d72378 100644 --- a/npm/packs/bootstrap/package.json +++ b/npm/packs/bootstrap/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/bootstrap", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "bootstrap": "^4.3.1" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/chart.js/package.json b/npm/packs/chart.js/package.json index 460c8c161d..96f1518fd8 100644 --- a/npm/packs/chart.js/package.json +++ b/npm/packs/chart.js/package.json @@ -1,5 +1,5 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/chart.js", "publishConfig": { "access": "public" @@ -7,5 +7,5 @@ "dependencies": { "chart.js": "^2.9.3" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/clipboard/package.json b/npm/packs/clipboard/package.json index c3bdd2a94e..e6b080a5bd 100644 --- a/npm/packs/clipboard/package.json +++ b/npm/packs/clipboard/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/clipboard", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "clipboard": "^2.0.4" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/codemirror/package.json b/npm/packs/codemirror/package.json index 87b6c5e58b..4a4d2fa320 100644 --- a/npm/packs/codemirror/package.json +++ b/npm/packs/codemirror/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/codemirror", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "codemirror": "^5.49.2" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/core/package.json b/npm/packs/core/package.json index f6daa03e49..abf41de036 100644 --- a/npm/packs/core/package.json +++ b/npm/packs/core/package.json @@ -1,8 +1,8 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/core", "publishConfig": { "access": "public" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/datatables.net-bs4/package.json b/npm/packs/datatables.net-bs4/package.json index eb268338ec..cc281baf39 100644 --- a/npm/packs/datatables.net-bs4/package.json +++ b/npm/packs/datatables.net-bs4/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/datatables.net-bs4", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/datatables.net": "^1.1.1", + "@abp/datatables.net": "^2.0.0", "datatables.net-bs4": "^1.10.20" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/datatables.net/package.json b/npm/packs/datatables.net/package.json index 12249bb984..ad5de1b32a 100644 --- a/npm/packs/datatables.net/package.json +++ b/npm/packs/datatables.net/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/datatables.net", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "datatables.net": "^1.10.20" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/docs/package.json b/npm/packs/docs/package.json index 5ab7068fce..68266e5d2d 100644 --- a/npm/packs/docs/package.json +++ b/npm/packs/docs/package.json @@ -1,15 +1,15 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/docs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/anchor-js": "^1.1.1", - "@abp/clipboard": "^1.1.1", - "@abp/malihu-custom-scrollbar-plugin": "^1.1.1", - "@abp/popper.js": "^1.1.1", - "@abp/prismjs": "^1.1.1" + "@abp/anchor-js": "^2.0.0", + "@abp/clipboard": "^2.0.0", + "@abp/malihu-custom-scrollbar-plugin": "^2.0.0", + "@abp/popper.js": "^2.0.0", + "@abp/prismjs": "^2.0.0" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/flag-icon-css/package.json b/npm/packs/flag-icon-css/package.json index cc53627bcd..d771e8b1d6 100644 --- a/npm/packs/flag-icon-css/package.json +++ b/npm/packs/flag-icon-css/package.json @@ -1,5 +1,5 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/flag-icon-css", "publishConfig": { "access": "public" @@ -7,5 +7,5 @@ "dependencies": { "flag-icon-css": "^3.4.5" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/font-awesome/package.json b/npm/packs/font-awesome/package.json index 939b16de10..890341e655 100644 --- a/npm/packs/font-awesome/package.json +++ b/npm/packs/font-awesome/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/font-awesome", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "@fortawesome/fontawesome-free": "^5.11.2" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/highlight.js/package.json b/npm/packs/highlight.js/package.json index 75b58a809d..221e49a82f 100644 --- a/npm/packs/highlight.js/package.json +++ b/npm/packs/highlight.js/package.json @@ -1,11 +1,11 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/highlight.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1" + "@abp/core": "^2.0.0" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/jquery-form/package.json b/npm/packs/jquery-form/package.json index 2601739103..1f9cdf546c 100644 --- a/npm/packs/jquery-form/package.json +++ b/npm/packs/jquery-form/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/jquery-form", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "^1.1.1", + "@abp/jquery": "^2.0.0", "jquery-form": "^4.2.2" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/jquery-validation-unobtrusive/package.json b/npm/packs/jquery-validation-unobtrusive/package.json index 989d3761fd..675f1a67bc 100644 --- a/npm/packs/jquery-validation-unobtrusive/package.json +++ b/npm/packs/jquery-validation-unobtrusive/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/jquery-validation-unobtrusive", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery-validation": "^1.1.1", + "@abp/jquery-validation": "^2.0.0", "jquery-validation-unobtrusive": "^3.2.11" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/jquery-validation/package.json b/npm/packs/jquery-validation/package.json index a9c77623d8..8041f6c962 100644 --- a/npm/packs/jquery-validation/package.json +++ b/npm/packs/jquery-validation/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/jquery-validation", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "^1.1.1", + "@abp/jquery": "^2.0.0", "jquery-validation": "^1.19.1" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/jquery/package.json b/npm/packs/jquery/package.json index 4f25863686..c864b313af 100644 --- a/npm/packs/jquery/package.json +++ b/npm/packs/jquery/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/jquery", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "jquery": "^3.4.1" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/lodash/package.json b/npm/packs/lodash/package.json index b564805d0c..4cc42183fb 100644 --- a/npm/packs/lodash/package.json +++ b/npm/packs/lodash/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/lodash", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "lodash": "^4.17.15" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/luxon/package.json b/npm/packs/luxon/package.json index 9d4cd350ad..79f163388b 100644 --- a/npm/packs/luxon/package.json +++ b/npm/packs/luxon/package.json @@ -1,5 +1,5 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/luxon", "publishConfig": { "access": "public" @@ -7,5 +7,5 @@ "dependencies": { "luxon": "^1.21.3" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/malihu-custom-scrollbar-plugin/package.json b/npm/packs/malihu-custom-scrollbar-plugin/package.json index fc1b413d15..d65585affc 100644 --- a/npm/packs/malihu-custom-scrollbar-plugin/package.json +++ b/npm/packs/malihu-custom-scrollbar-plugin/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/malihu-custom-scrollbar-plugin", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "malihu-custom-scrollbar-plugin": "^3.1.5" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/markdown-it/package.json b/npm/packs/markdown-it/package.json index e06fe91da6..bbde823ac3 100644 --- a/npm/packs/markdown-it/package.json +++ b/npm/packs/markdown-it/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/markdown-it", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "markdown-it": "^10.0.0" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/owl.carousel/package.json b/npm/packs/owl.carousel/package.json index 5db205c8f6..bf6c7bbfbc 100644 --- a/npm/packs/owl.carousel/package.json +++ b/npm/packs/owl.carousel/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/owl.carousel", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "owl.carousel": "^2.3.4" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/popper.js/package.json b/npm/packs/popper.js/package.json index 24a7edc81e..66371985af 100644 --- a/npm/packs/popper.js/package.json +++ b/npm/packs/popper.js/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/popper.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "popper.js": "^1.16.0" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/prismjs/package.json b/npm/packs/prismjs/package.json index cb55e2b086..52f2920631 100644 --- a/npm/packs/prismjs/package.json +++ b/npm/packs/prismjs/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/prismjs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "prismjs": "^1.17.1" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/select2/package.json b/npm/packs/select2/package.json index c5185cfa0c..b41559f400 100644 --- a/npm/packs/select2/package.json +++ b/npm/packs/select2/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/select2", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "select2": "^4.0.12" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/sweetalert/package.json b/npm/packs/sweetalert/package.json index e0a0708034..3099b81ba1 100644 --- a/npm/packs/sweetalert/package.json +++ b/npm/packs/sweetalert/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/sweetalert", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "sweetalert": "^2.1.2" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/timeago/package.json b/npm/packs/timeago/package.json index d7369d6777..788ac14058 100644 --- a/npm/packs/timeago/package.json +++ b/npm/packs/timeago/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/timeago", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "^1.1.1", + "@abp/jquery": "^2.0.0", "timeago": "^1.6.7" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/toastr/package.json b/npm/packs/toastr/package.json index 00456bbd3e..6b806cb9b3 100644 --- a/npm/packs/toastr/package.json +++ b/npm/packs/toastr/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/toastr", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "^1.1.1", + "@abp/jquery": "^2.0.0", "toastr": "^2.1.4" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/tui-editor/package.json b/npm/packs/tui-editor/package.json index 579718be01..a745202334 100644 --- a/npm/packs/tui-editor/package.json +++ b/npm/packs/tui-editor/package.json @@ -1,15 +1,15 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/tui-editor", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/codemirror": "^1.1.1", - "@abp/highlight.js": "^1.1.1", - "@abp/jquery": "^1.1.1", - "@abp/markdown-it": "^1.1.1", + "@abp/codemirror": "^2.0.0", + "@abp/highlight.js": "^2.0.0", + "@abp/jquery": "^2.0.0", + "@abp/markdown-it": "^2.0.0", "tui-editor": "^1.4.8" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/yarn.lock b/npm/yarn.lock index e0af7da193..7775403939 100644 --- a/npm/yarn.lock +++ b/npm/yarn.lock @@ -1609,6 +1609,15 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" + integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + crypto-random-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" @@ -1930,6 +1939,22 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" + integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -2207,7 +2232,7 @@ get-stream@^4.0.0, get-stream@^4.1.0: dependencies: pump "^3.0.0" -get-stream@^5.1.0: +get-stream@^5.0.0, get-stream@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== @@ -2510,6 +2535,11 @@ https-proxy-agent@^2.2.1: agent-base "^4.3.0" debug "^3.1.0" +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" @@ -2837,6 +2867,11 @@ is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + is-symbol@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" @@ -3280,6 +3315,11 @@ meow@^4.0.0: redent "^2.0.0" trim-newlines "^2.0.0" +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + merge2@^1.2.3: version "1.3.0" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" @@ -3320,6 +3360,11 @@ mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" @@ -3654,6 +3699,13 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" @@ -3734,6 +3786,13 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + dependencies: + mimic-fn "^2.1.0" + optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" @@ -3775,6 +3834,11 @@ p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" +p-finally@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" + integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -3979,6 +4043,11 @@ path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + path-parse@^1.0.5, path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -4531,10 +4600,22 @@ shebang-command@^1.2.0: dependencies: shebang-regex "^1.0.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -4821,6 +4902,11 @@ strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + strip-indent@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" @@ -5207,6 +5293,13 @@ which@1, which@^1.2.9, which@^1.3.1: dependencies: isexe "^2.0.0" +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json index 83842616a7..d2cd576b43 100644 --- a/templates/app/angular/package.json +++ b/templates/app/angular/package.json @@ -13,11 +13,11 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "^1.1.1", - "@abp/ng.identity": "^1.1.1", - "@abp/ng.setting-management": "^1.1.1", - "@abp/ng.tenant-management": "^1.1.1", - "@abp/ng.theme.basic": "^1.1.1", + "@abp/ng.account": "^2.0.0", + "@abp/ng.identity": "^2.0.0", + "@abp/ng.setting-management": "^2.0.0", + "@abp/ng.tenant-management": "^2.0.0", + "@abp/ng.theme.basic": "^2.0.0", "@angular/animations": "~8.2.14", "@angular/common": "~8.2.14", "@angular/compiler": "~8.2.14", diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json index 35b0592f57..e045906f81 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^2.0.0" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock index 313032453c..677a417b16 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-1.1.1.tgz#a3d21f8cc5ede2e85b881fe69d9ecd5fc2268e47" - integrity sha512-ooXtCM3TWN69RU7xs6avnzOQBXzsiHY5BEIogzSBialZC4uG5H56qrIr4MbsFNae+PQM23Mw2tnJ/Z7dutURCQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.0.0.tgz#824f69bbbf868e4d72c36a0c6d0d11e18bd055b1" + integrity sha512-x3899Y+XZPj1z9aO0sqxsbwFebHCoEaLedcVEOJugJxM9JXfKuNG3tlvuurLirdaFQAs6WoMCFsQ9sbR8ZHm2w== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.shared" "^2.0.0" -"@abp/aspnetcore.mvc.ui.theme.shared@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-1.1.1.tgz#b5eb57bcebcf211a75cf7d540dcc89a0f9ade013" - integrity sha512-LilSyefzT1+rcTU7vbWxcO8TwBgGZIx6QbMUrDicSTH6LLJ9S5+yNaGNJbbZKDG6qx0BEoC1u8dE8KCUshwxoQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "^1.1.1" - "@abp/bootstrap" "^1.1.1" - "@abp/bootstrap-datepicker" "^1.1.1" - "@abp/datatables.net-bs4" "^1.1.1" - "@abp/font-awesome" "^1.1.1" - "@abp/jquery-form" "^1.1.1" - "@abp/jquery-validation-unobtrusive" "^1.1.1" - "@abp/lodash" "^1.1.1" - "@abp/luxon" "^1.1.1" - "@abp/malihu-custom-scrollbar-plugin" "^1.1.1" - "@abp/select2" "^1.1.1" - "@abp/sweetalert" "^1.1.1" - "@abp/timeago" "^1.1.1" - "@abp/toastr" "^1.1.1" - -"@abp/aspnetcore.mvc.ui@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-1.1.1.tgz#9d693516b6a215dfd2113db9ef52f02881a3e1d5" - integrity sha512-wZbptVCSxZzEjkJx+/sWrH9Pikp9nOy7V8Htz+L+S7/qAzfXu5PRVV8ahddfAcDHRk30buRhdbJlCVdt6hkZ6g== +"@abp/aspnetcore.mvc.ui.theme.shared@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.0.0.tgz#9859308a910ecd89fd008bc9622c0fd2ca10e5c6" + integrity sha512-fGIEOY3i9DgrEYay1B+IiTkBW94bBY9Fk0bou6ULxvb0jndqAnuws1mifBUrvKIF2cjKKBxO2iqBZ5n2IbHLhA== + dependencies: + "@abp/aspnetcore.mvc.ui" "^2.0.0" + "@abp/bootstrap" "^2.0.0" + "@abp/bootstrap-datepicker" "^2.0.0" + "@abp/datatables.net-bs4" "^2.0.0" + "@abp/font-awesome" "^2.0.0" + "@abp/jquery-form" "^2.0.0" + "@abp/jquery-validation-unobtrusive" "^2.0.0" + "@abp/lodash" "^2.0.0" + "@abp/luxon" "^2.0.0" + "@abp/malihu-custom-scrollbar-plugin" "^2.0.0" + "@abp/select2" "^2.0.0" + "@abp/sweetalert" "^2.0.0" + "@abp/timeago" "^2.0.0" + "@abp/toastr" "^2.0.0" + +"@abp/aspnetcore.mvc.ui@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.0.0.tgz#d7e67b99e6c31e670337e787d55dd49f81717155" + integrity sha512-fNxQINx6COagbA2UepOMgOZg6dqXlEKbiftSt+/yhUVkMW3+c8IILJODyHxAaJfGrYjHqKAcyItqR7vVCWDYsw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,135 +41,135 @@ path "^0.12.7" rimraf "^3.0.0" -"@abp/bootstrap-datepicker@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-1.1.1.tgz#fb1ceec1df24f384a6349c4acfb3627e02e4a42f" - integrity sha512-RIQLSrKBu/cTAU2lFenSAoKcMp7wgF4e3nP4/iOu5ZtCgti5vUjMEcqEvBxtlwKTHMXsTG4GtNKqjTwjXMjONQ== +"@abp/bootstrap-datepicker@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.0.0.tgz#e55064d554163865c3c4871c10cc8e8416cccbf4" + integrity sha512-kz6RYUDO6txf9gJXxXLL3aboM4OjJWwtdMD0pwhwWJCujqjaQi3YJIGZFXAxO2GhUq5bqX+KaBdOqdMl0gIasA== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-1.1.1.tgz#e16fae6ff6b18096276219edf3483fd8f41c925d" - integrity sha512-OIaGJaizhI8UNfy4bnw2xT2Z0QG7BJJrjxOPGepfd4jn/AUi/vFdOpJFWvu2P9PwSzRmn/LuSlr2WONDOdPVWQ== +"@abp/bootstrap@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.0.0.tgz#1c12edc28a9400a349049ab60f43a8123da0f2b0" + integrity sha512-sim0zmmUqtTvFDn4RQxJZPHCH4kxHsuep63O86sfn3XjgU8FDw6C2AP7j0l+q2yDt94qKTUMxg17MWDr5DqEEA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" bootstrap "^4.3.1" -"@abp/core@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-1.1.1.tgz#1379145980d6b142fd0123200c60ffb206149d56" - integrity sha512-OvUG7xRvk8nSqwC1s45YPnTuhC2OWe1AVa1nnC6FVHMH/g1Je7UJwnbu47K7uNS+lDRJUIktNbufYKiwutEjRg== +"@abp/core@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.0.0.tgz#19368fc332eec89d6442e6b991eed72af92f8ec8" + integrity sha512-aPb4anAZhmVxJrPnBNT33bRkYLUMmCqpPIrN+NCqejwiEIg5jb4zu4bOS71/oTxViNRF5S/XzKF6ceLD+CVq4g== -"@abp/datatables.net-bs4@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-1.1.1.tgz#c7e79534c2e4b51b3e98bcc0df3292cb08ae9d2e" - integrity sha512-t40xQIGBMLPZiSbcZHW3AwE8uk+xcl7OitBT1jym0XPKVtgJsHez3ynDE5v/PjHe+ColCG8lTRjRnNoXo5dzDw== +"@abp/datatables.net-bs4@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.0.0.tgz#bb7f1eddd0dee5ba8fb7a8e760d6b6fdc9374a65" + integrity sha512-7kCD4WhszgQOCQsAvXUGdDSqi+ZRWqENzjxoPQa9oPxFD2hy3AshYMvc+JQC71Pbp6YIZU09LV3pGkFPHO7lOw== dependencies: - "@abp/datatables.net" "^1.1.1" + "@abp/datatables.net" "^2.0.0" datatables.net-bs4 "^1.10.20" -"@abp/datatables.net@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-1.1.1.tgz#de8b362c29f452188624536cdd6feccad2b533e6" - integrity sha512-y76IDBlgc0n1YgQqJ+9cfzXpLwr2arhdIfSmqX+qRXz6GfVNY7e3JijkFSgDKUzKGYo1HZMzgJmDmeNIRwMZsQ== +"@abp/datatables.net@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.0.0.tgz#43fa36590373dccffc3f4402b2c94777c9ce70cd" + integrity sha512-xSUkrpWUfzqPIbo5pI6gcrrbc2R2yBlq+TLxry064ILHfGvZI8lwmv9rEkPP/hBTvk1YnzaZScFneaA0xJn9hw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" datatables.net "^1.10.20" -"@abp/font-awesome@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-1.1.1.tgz#7f0a210eb7611d75542028b0c88a0c83f1d9db50" - integrity sha512-6RHbixi7IVWAb3JCHrUmEYD3HmAH4R75Nuo54LvFzATrh4G6gdBONIeDuTo79OTxe4Zhp+WLxeA49Y21kt77mg== +"@abp/font-awesome@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.0.0.tgz#aed2718808820f2cbe54edf09a23a65d819a798d" + integrity sha512-zfNjgnvOnCQQh4egk3NE7e6FbaDbjCzFnVDiHelM+9R6GAfDZTMS9jm3X+vDrn8vQfqQmDpzTpcz0v0IMNM8/g== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" "@fortawesome/fontawesome-free" "^5.11.2" -"@abp/jquery-form@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-1.1.1.tgz#1dae1145da720e222efcb396906c3fbe5a3dd29f" - integrity sha512-AIIdN36f8xwr4LgiNnBHohJ5tlxh/r+DuDtXcScpZN6GWBE+XgUotN0pZIIva82IxCyUNdDudzgluX9IjI+00w== +"@abp/jquery-form@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.0.0.tgz#b987944d1aff79c540c951cca020ec49e1a0a004" + integrity sha512-2JmXIbeTM+9RQSTFOurbL6Vk0WR2RbwU+ApKVYJhF7NxEdE9cMGTrs1Z2xF85h28VrVAtPnpApd9ORaopSqaYQ== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-form "^4.2.2" -"@abp/jquery-validation-unobtrusive@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-1.1.1.tgz#aeba0883260f47ab22a39343817b1811fc2b81a9" - integrity sha512-q1b0KG8l3DXUiW8JXdq9l1jR/CwgzrZdxwdKGLB2J/oxHlywQIb7yrjR6WGCshjPpcx2SkOL0j/ZXMIMh533hQ== +"@abp/jquery-validation-unobtrusive@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.0.0.tgz#75d4f54732a4608542d968874e676f3de08126bf" + integrity sha512-CfU9/Q2dsaqLAWvqEb/VgMvJ5RC2IoSSW7l8SbduKOzqg7FiiBOpOd1AcqApjh0vuzZrRj+HcuoFBE+jWiberw== dependencies: - "@abp/jquery-validation" "^1.1.1" + "@abp/jquery-validation" "^2.0.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-1.1.1.tgz#03febd285ce9d7e5681619897967b0ccde7e8e04" - integrity sha512-YvAjIW8epp+ddu01BTUkZWPfEADAvNPJeUrrZ6OpcPWM15Tf+ddr4ATgJ1LCg0Bh5F09iQC855osow3lt8sc7g== +"@abp/jquery-validation@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.0.0.tgz#e8afe0e677f8a7ec1fd7818b916b1894904d3cc3" + integrity sha512-cjkk5TJyr09H6EO13/GtiIRZv/1FP94IX2tVstqtOa5x8uI8HWCgFpPrchg9ldBsBoBelyExoISjlzqiKNkIHA== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-validation "^1.19.1" -"@abp/jquery@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-1.1.1.tgz#56928814bb3df73c1c0014d4b18fef09ec06e195" - integrity sha512-kj4BTtXF0VbCzCqRXnRVEbGndR3F8NlbBhVQN6BQktOuZta3fvx7f2+pSok8vQv0ddmqUFY7FTT2Ei3l4363LQ== +"@abp/jquery@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.0.0.tgz#71781f3ad1914c1d2a516c7157080d7c82c9b7aa" + integrity sha512-2EfGIiSaXPTxfdb/jomae75Y77OlS4H+G1oWz7L6XDhBIzctVivbOKSJim3BI2no1GJWOM/U1r1TKEKzwJyY4Q== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" jquery "^3.4.1" -"@abp/lodash@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-1.1.1.tgz#aa6ef3a85b9827796e295f440b29f0611c508b5f" - integrity sha512-nH7bRS28Tf4hEXcpKHd1IM+MzYTqX8t3htGmsLX4UESQd52eODYOIldtX6gm3OW1O6ECwW6si/o0M2pTEpQqvg== +"@abp/lodash@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.0.0.tgz#ac5697a32a0ab0b3a0420c90ada1b87b853d19bc" + integrity sha512-QZWrDDfCjyW+q5lauwyrdFmsoDTC154k9ZZAkgAt9lJ6bbBWvDFgNEevg9etfh6heTBzBO7v7ftqDTt01/ArCQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" lodash "^4.17.15" -"@abp/luxon@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-1.1.1.tgz#ec389270d78bb271d52163ab3773f549aa91751e" - integrity sha512-WNu8JRSb5FDXfcDwjMYyeYeUN48uuDc/I2cdo3xd1rcY+lbmbzxoG9IYOlE8cRHdgX3z82qsZXFs2lcAy0Le2g== +"@abp/luxon@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.0.0.tgz#3bb3c3fcb0a9d74161a9f82afd840f9fdbffd42e" + integrity sha512-DloPuJrAcpgcPGkuaJCi9XfC+2JsKPxFXTtxNlgkEaTuFwKnrWeGSOZqwedfawnQA+YPGGg1hz+7+WPb0X4Fog== dependencies: luxon "^1.21.3" -"@abp/malihu-custom-scrollbar-plugin@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-1.1.1.tgz#73f8423c29d646dc7f0f270d1d7ef05947333e2a" - integrity sha512-n4b4QK/L1Czdx0oOpUR/bWjK9VENexfUSV/aMjwzHhDmEFABAmEfhIpudCYDwewGswrd7C9agmBvakv2rwPQeA== +"@abp/malihu-custom-scrollbar-plugin@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.0.0.tgz#6df2bcf1a3413880ebcf45017fe4966ad01e4fb9" + integrity sha512-ZqfVJyEMykg7IqemxV1jZ4FXu74F3eT8Be2EobSrc0avx27Oh6sD38TvgPv3e4etDbCekZYG1J7glKY7RzNPYw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-1.1.1.tgz#777967821cfcc4bd1c9fc895e913427fbb330abe" - integrity sha512-t0qcJhD+uo2+XWr4nmMQLAx7MRGQUBdZ81YmGty045ReoSaEKQf4haLkzBcMzpBRusiyMQO/PbxjtwMw/xJQTQ== +"@abp/select2@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.0.0.tgz#252710d172c7a7385f41292d3d3400c68ed93dbb" + integrity sha512-kRNuVdr5EbFQxXD7Fq8H3bYJo3bmE7QsIlxZQeSl6xfBK4nYGeLJ6ZGPwzKPFN9P6sfpZ4TBM2eOie9LgmHWLA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" select2 "^4.0.12" -"@abp/sweetalert@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-1.1.1.tgz#e055ea46eb4e3d53e623ee0aada9b2d16fea5610" - integrity sha512-V6K/qg7J/bdFmom2kaXYeiLvcmLHFl+MacPX4yYAK2biZdb2pWOkUdmcAzZdOT+UruKfLRhvraVC2uXDySi9NA== +"@abp/sweetalert@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.0.0.tgz#2bb99ba7c0b6154181bce8fc5a959d4520032279" + integrity sha512-uotKepUBfQL8hrwSxSDLBLiAesIZ8low6OLsFIXqkUDDQIgKWUpPBuTbP7XGiHvHBOXXLxmpQ+YeYe72eOPtXQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" sweetalert "^2.1.2" -"@abp/timeago@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-1.1.1.tgz#b626087ca35fb325e8e8a337552694fcbb8a6bf9" - integrity sha512-QYYih/4n6XhCqkRw7fBfyg58T5CHqJHyz7SAfq86RiKAJ4jVtjdSVxj3XKxz8eCb56wZGsO1xXXStI3vdLwwNw== +"@abp/timeago@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.0.0.tgz#6e410cbf09e252b9eb1cf03cdc7ea62424249694" + integrity sha512-rtZ/avYpCTIDq4ZjIxaSQxN9wuRnQwhZ+dS1HfHb2NZK2sqJnb+iH7Nm9IQPHk7y89mgSrMWskYW91KaABSolw== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" timeago "^1.6.7" -"@abp/toastr@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-1.1.1.tgz#aeb6a8ef8004fce136997f9ee3af7dd241890d50" - integrity sha512-GDewBppm+0FO6kTTy0huczoH9P5q6lFicHFAoEawAMkuWJFW/Ihv/YnEvKGDQwGftuVSWexfqBMN/RZ5YSOiGQ== +"@abp/toastr@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.0.0.tgz#a87591132c5586b16d521346ae9012affed0e3cd" + integrity sha512-SC8zWe87Kyec7mIsp9LRSmOlBfu+a1X658oS2eP/NscirU8tCnhvl/F2PeHWLjE8zkULLd8GZ8ht/XSU1gtTpg== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" toastr "^2.1.4" "@fortawesome/fontawesome-free@^5.11.2": diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json index 436db35985..ee7a512dc8 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-identityserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^2.0.0" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock index 12cad6c691..cbe246e8e3 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-1.1.1.tgz#a3d21f8cc5ede2e85b881fe69d9ecd5fc2268e47" - integrity sha512-ooXtCM3TWN69RU7xs6avnzOQBXzsiHY5BEIogzSBialZC4uG5H56qrIr4MbsFNae+PQM23Mw2tnJ/Z7dutURCQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.0.0.tgz#824f69bbbf868e4d72c36a0c6d0d11e18bd055b1" + integrity sha512-x3899Y+XZPj1z9aO0sqxsbwFebHCoEaLedcVEOJugJxM9JXfKuNG3tlvuurLirdaFQAs6WoMCFsQ9sbR8ZHm2w== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.shared" "^2.0.0" -"@abp/aspnetcore.mvc.ui.theme.shared@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-1.1.1.tgz#b5eb57bcebcf211a75cf7d540dcc89a0f9ade013" - integrity sha512-LilSyefzT1+rcTU7vbWxcO8TwBgGZIx6QbMUrDicSTH6LLJ9S5+yNaGNJbbZKDG6qx0BEoC1u8dE8KCUshwxoQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "^1.1.1" - "@abp/bootstrap" "^1.1.1" - "@abp/bootstrap-datepicker" "^1.1.1" - "@abp/datatables.net-bs4" "^1.1.1" - "@abp/font-awesome" "^1.1.1" - "@abp/jquery-form" "^1.1.1" - "@abp/jquery-validation-unobtrusive" "^1.1.1" - "@abp/lodash" "^1.1.1" - "@abp/luxon" "^1.1.1" - "@abp/malihu-custom-scrollbar-plugin" "^1.1.1" - "@abp/select2" "^1.1.1" - "@abp/sweetalert" "^1.1.1" - "@abp/timeago" "^1.1.1" - "@abp/toastr" "^1.1.1" - -"@abp/aspnetcore.mvc.ui@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-1.1.1.tgz#9d693516b6a215dfd2113db9ef52f02881a3e1d5" - integrity sha512-wZbptVCSxZzEjkJx+/sWrH9Pikp9nOy7V8Htz+L+S7/qAzfXu5PRVV8ahddfAcDHRk30buRhdbJlCVdt6hkZ6g== +"@abp/aspnetcore.mvc.ui.theme.shared@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.0.0.tgz#9859308a910ecd89fd008bc9622c0fd2ca10e5c6" + integrity sha512-fGIEOY3i9DgrEYay1B+IiTkBW94bBY9Fk0bou6ULxvb0jndqAnuws1mifBUrvKIF2cjKKBxO2iqBZ5n2IbHLhA== + dependencies: + "@abp/aspnetcore.mvc.ui" "^2.0.0" + "@abp/bootstrap" "^2.0.0" + "@abp/bootstrap-datepicker" "^2.0.0" + "@abp/datatables.net-bs4" "^2.0.0" + "@abp/font-awesome" "^2.0.0" + "@abp/jquery-form" "^2.0.0" + "@abp/jquery-validation-unobtrusive" "^2.0.0" + "@abp/lodash" "^2.0.0" + "@abp/luxon" "^2.0.0" + "@abp/malihu-custom-scrollbar-plugin" "^2.0.0" + "@abp/select2" "^2.0.0" + "@abp/sweetalert" "^2.0.0" + "@abp/timeago" "^2.0.0" + "@abp/toastr" "^2.0.0" + +"@abp/aspnetcore.mvc.ui@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.0.0.tgz#d7e67b99e6c31e670337e787d55dd49f81717155" + integrity sha512-fNxQINx6COagbA2UepOMgOZg6dqXlEKbiftSt+/yhUVkMW3+c8IILJODyHxAaJfGrYjHqKAcyItqR7vVCWDYsw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,135 +41,135 @@ path "^0.12.7" rimraf "^3.0.0" -"@abp/bootstrap-datepicker@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-1.1.1.tgz#fb1ceec1df24f384a6349c4acfb3627e02e4a42f" - integrity sha512-RIQLSrKBu/cTAU2lFenSAoKcMp7wgF4e3nP4/iOu5ZtCgti5vUjMEcqEvBxtlwKTHMXsTG4GtNKqjTwjXMjONQ== +"@abp/bootstrap-datepicker@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.0.0.tgz#e55064d554163865c3c4871c10cc8e8416cccbf4" + integrity sha512-kz6RYUDO6txf9gJXxXLL3aboM4OjJWwtdMD0pwhwWJCujqjaQi3YJIGZFXAxO2GhUq5bqX+KaBdOqdMl0gIasA== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-1.1.1.tgz#e16fae6ff6b18096276219edf3483fd8f41c925d" - integrity sha512-OIaGJaizhI8UNfy4bnw2xT2Z0QG7BJJrjxOPGepfd4jn/AUi/vFdOpJFWvu2P9PwSzRmn/LuSlr2WONDOdPVWQ== +"@abp/bootstrap@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.0.0.tgz#1c12edc28a9400a349049ab60f43a8123da0f2b0" + integrity sha512-sim0zmmUqtTvFDn4RQxJZPHCH4kxHsuep63O86sfn3XjgU8FDw6C2AP7j0l+q2yDt94qKTUMxg17MWDr5DqEEA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" bootstrap "^4.3.1" -"@abp/core@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-1.1.1.tgz#1379145980d6b142fd0123200c60ffb206149d56" - integrity sha512-OvUG7xRvk8nSqwC1s45YPnTuhC2OWe1AVa1nnC6FVHMH/g1Je7UJwnbu47K7uNS+lDRJUIktNbufYKiwutEjRg== +"@abp/core@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.0.0.tgz#19368fc332eec89d6442e6b991eed72af92f8ec8" + integrity sha512-aPb4anAZhmVxJrPnBNT33bRkYLUMmCqpPIrN+NCqejwiEIg5jb4zu4bOS71/oTxViNRF5S/XzKF6ceLD+CVq4g== -"@abp/datatables.net-bs4@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-1.1.1.tgz#c7e79534c2e4b51b3e98bcc0df3292cb08ae9d2e" - integrity sha512-t40xQIGBMLPZiSbcZHW3AwE8uk+xcl7OitBT1jym0XPKVtgJsHez3ynDE5v/PjHe+ColCG8lTRjRnNoXo5dzDw== +"@abp/datatables.net-bs4@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.0.0.tgz#bb7f1eddd0dee5ba8fb7a8e760d6b6fdc9374a65" + integrity sha512-7kCD4WhszgQOCQsAvXUGdDSqi+ZRWqENzjxoPQa9oPxFD2hy3AshYMvc+JQC71Pbp6YIZU09LV3pGkFPHO7lOw== dependencies: - "@abp/datatables.net" "^1.1.1" + "@abp/datatables.net" "^2.0.0" datatables.net-bs4 "^1.10.20" -"@abp/datatables.net@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-1.1.1.tgz#de8b362c29f452188624536cdd6feccad2b533e6" - integrity sha512-y76IDBlgc0n1YgQqJ+9cfzXpLwr2arhdIfSmqX+qRXz6GfVNY7e3JijkFSgDKUzKGYo1HZMzgJmDmeNIRwMZsQ== +"@abp/datatables.net@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.0.0.tgz#43fa36590373dccffc3f4402b2c94777c9ce70cd" + integrity sha512-xSUkrpWUfzqPIbo5pI6gcrrbc2R2yBlq+TLxry064ILHfGvZI8lwmv9rEkPP/hBTvk1YnzaZScFneaA0xJn9hw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" datatables.net "^1.10.20" -"@abp/font-awesome@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-1.1.1.tgz#7f0a210eb7611d75542028b0c88a0c83f1d9db50" - integrity sha512-6RHbixi7IVWAb3JCHrUmEYD3HmAH4R75Nuo54LvFzATrh4G6gdBONIeDuTo79OTxe4Zhp+WLxeA49Y21kt77mg== +"@abp/font-awesome@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.0.0.tgz#aed2718808820f2cbe54edf09a23a65d819a798d" + integrity sha512-zfNjgnvOnCQQh4egk3NE7e6FbaDbjCzFnVDiHelM+9R6GAfDZTMS9jm3X+vDrn8vQfqQmDpzTpcz0v0IMNM8/g== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" "@fortawesome/fontawesome-free" "^5.11.2" -"@abp/jquery-form@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-1.1.1.tgz#1dae1145da720e222efcb396906c3fbe5a3dd29f" - integrity sha512-AIIdN36f8xwr4LgiNnBHohJ5tlxh/r+DuDtXcScpZN6GWBE+XgUotN0pZIIva82IxCyUNdDudzgluX9IjI+00w== +"@abp/jquery-form@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.0.0.tgz#b987944d1aff79c540c951cca020ec49e1a0a004" + integrity sha512-2JmXIbeTM+9RQSTFOurbL6Vk0WR2RbwU+ApKVYJhF7NxEdE9cMGTrs1Z2xF85h28VrVAtPnpApd9ORaopSqaYQ== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-form "^4.2.2" -"@abp/jquery-validation-unobtrusive@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-1.1.1.tgz#aeba0883260f47ab22a39343817b1811fc2b81a9" - integrity sha512-q1b0KG8l3DXUiW8JXdq9l1jR/CwgzrZdxwdKGLB2J/oxHlywQIb7yrjR6WGCshjPpcx2SkOL0j/ZXMIMh533hQ== +"@abp/jquery-validation-unobtrusive@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.0.0.tgz#75d4f54732a4608542d968874e676f3de08126bf" + integrity sha512-CfU9/Q2dsaqLAWvqEb/VgMvJ5RC2IoSSW7l8SbduKOzqg7FiiBOpOd1AcqApjh0vuzZrRj+HcuoFBE+jWiberw== dependencies: - "@abp/jquery-validation" "^1.1.1" + "@abp/jquery-validation" "^2.0.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-1.1.1.tgz#03febd285ce9d7e5681619897967b0ccde7e8e04" - integrity sha512-YvAjIW8epp+ddu01BTUkZWPfEADAvNPJeUrrZ6OpcPWM15Tf+ddr4ATgJ1LCg0Bh5F09iQC855osow3lt8sc7g== +"@abp/jquery-validation@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.0.0.tgz#e8afe0e677f8a7ec1fd7818b916b1894904d3cc3" + integrity sha512-cjkk5TJyr09H6EO13/GtiIRZv/1FP94IX2tVstqtOa5x8uI8HWCgFpPrchg9ldBsBoBelyExoISjlzqiKNkIHA== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-validation "^1.19.1" -"@abp/jquery@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-1.1.1.tgz#56928814bb3df73c1c0014d4b18fef09ec06e195" - integrity sha512-kj4BTtXF0VbCzCqRXnRVEbGndR3F8NlbBhVQN6BQktOuZta3fvx7f2+pSok8vQv0ddmqUFY7FTT2Ei3l4363LQ== +"@abp/jquery@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.0.0.tgz#71781f3ad1914c1d2a516c7157080d7c82c9b7aa" + integrity sha512-2EfGIiSaXPTxfdb/jomae75Y77OlS4H+G1oWz7L6XDhBIzctVivbOKSJim3BI2no1GJWOM/U1r1TKEKzwJyY4Q== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" jquery "^3.4.1" -"@abp/lodash@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-1.1.1.tgz#aa6ef3a85b9827796e295f440b29f0611c508b5f" - integrity sha512-nH7bRS28Tf4hEXcpKHd1IM+MzYTqX8t3htGmsLX4UESQd52eODYOIldtX6gm3OW1O6ECwW6si/o0M2pTEpQqvg== +"@abp/lodash@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.0.0.tgz#ac5697a32a0ab0b3a0420c90ada1b87b853d19bc" + integrity sha512-QZWrDDfCjyW+q5lauwyrdFmsoDTC154k9ZZAkgAt9lJ6bbBWvDFgNEevg9etfh6heTBzBO7v7ftqDTt01/ArCQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" lodash "^4.17.15" -"@abp/luxon@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-1.1.1.tgz#ec389270d78bb271d52163ab3773f549aa91751e" - integrity sha512-WNu8JRSb5FDXfcDwjMYyeYeUN48uuDc/I2cdo3xd1rcY+lbmbzxoG9IYOlE8cRHdgX3z82qsZXFs2lcAy0Le2g== +"@abp/luxon@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.0.0.tgz#3bb3c3fcb0a9d74161a9f82afd840f9fdbffd42e" + integrity sha512-DloPuJrAcpgcPGkuaJCi9XfC+2JsKPxFXTtxNlgkEaTuFwKnrWeGSOZqwedfawnQA+YPGGg1hz+7+WPb0X4Fog== dependencies: luxon "^1.21.3" -"@abp/malihu-custom-scrollbar-plugin@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-1.1.1.tgz#73f8423c29d646dc7f0f270d1d7ef05947333e2a" - integrity sha512-n4b4QK/L1Czdx0oOpUR/bWjK9VENexfUSV/aMjwzHhDmEFABAmEfhIpudCYDwewGswrd7C9agmBvakv2rwPQeA== +"@abp/malihu-custom-scrollbar-plugin@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.0.0.tgz#6df2bcf1a3413880ebcf45017fe4966ad01e4fb9" + integrity sha512-ZqfVJyEMykg7IqemxV1jZ4FXu74F3eT8Be2EobSrc0avx27Oh6sD38TvgPv3e4etDbCekZYG1J7glKY7RzNPYw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-1.1.1.tgz#777967821cfcc4bd1c9fc895e913427fbb330abe" - integrity sha512-t0qcJhD+uo2+XWr4nmMQLAx7MRGQUBdZ81YmGty045ReoSaEKQf4haLkzBcMzpBRusiyMQO/PbxjtwMw/xJQTQ== +"@abp/select2@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.0.0.tgz#252710d172c7a7385f41292d3d3400c68ed93dbb" + integrity sha512-kRNuVdr5EbFQxXD7Fq8H3bYJo3bmE7QsIlxZQeSl6xfBK4nYGeLJ6ZGPwzKPFN9P6sfpZ4TBM2eOie9LgmHWLA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" select2 "^4.0.12" -"@abp/sweetalert@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-1.1.1.tgz#e055ea46eb4e3d53e623ee0aada9b2d16fea5610" - integrity sha512-V6K/qg7J/bdFmom2kaXYeiLvcmLHFl+MacPX4yYAK2biZdb2pWOkUdmcAzZdOT+UruKfLRhvraVC2uXDySi9NA== +"@abp/sweetalert@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.0.0.tgz#2bb99ba7c0b6154181bce8fc5a959d4520032279" + integrity sha512-uotKepUBfQL8hrwSxSDLBLiAesIZ8low6OLsFIXqkUDDQIgKWUpPBuTbP7XGiHvHBOXXLxmpQ+YeYe72eOPtXQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" sweetalert "^2.1.2" -"@abp/timeago@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-1.1.1.tgz#b626087ca35fb325e8e8a337552694fcbb8a6bf9" - integrity sha512-QYYih/4n6XhCqkRw7fBfyg58T5CHqJHyz7SAfq86RiKAJ4jVtjdSVxj3XKxz8eCb56wZGsO1xXXStI3vdLwwNw== +"@abp/timeago@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.0.0.tgz#6e410cbf09e252b9eb1cf03cdc7ea62424249694" + integrity sha512-rtZ/avYpCTIDq4ZjIxaSQxN9wuRnQwhZ+dS1HfHb2NZK2sqJnb+iH7Nm9IQPHk7y89mgSrMWskYW91KaABSolw== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" timeago "^1.6.7" -"@abp/toastr@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-1.1.1.tgz#aeb6a8ef8004fce136997f9ee3af7dd241890d50" - integrity sha512-GDewBppm+0FO6kTTy0huczoH9P5q6lFicHFAoEawAMkuWJFW/Ihv/YnEvKGDQwGftuVSWexfqBMN/RZ5YSOiGQ== +"@abp/toastr@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.0.0.tgz#a87591132c5586b16d521346ae9012affed0e3cd" + integrity sha512-SC8zWe87Kyec7mIsp9LRSmOlBfu+a1X658oS2eP/NscirU8tCnhvl/F2PeHWLjE8zkULLd8GZ8ht/XSU1gtTpg== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" toastr "^2.1.4" "@fortawesome/fontawesome-free@^5.11.2": diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json index 35b0592f57..e045906f81 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^2.0.0" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock index 12cad6c691..cbe246e8e3 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-1.1.1.tgz#a3d21f8cc5ede2e85b881fe69d9ecd5fc2268e47" - integrity sha512-ooXtCM3TWN69RU7xs6avnzOQBXzsiHY5BEIogzSBialZC4uG5H56qrIr4MbsFNae+PQM23Mw2tnJ/Z7dutURCQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.0.0.tgz#824f69bbbf868e4d72c36a0c6d0d11e18bd055b1" + integrity sha512-x3899Y+XZPj1z9aO0sqxsbwFebHCoEaLedcVEOJugJxM9JXfKuNG3tlvuurLirdaFQAs6WoMCFsQ9sbR8ZHm2w== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.shared" "^2.0.0" -"@abp/aspnetcore.mvc.ui.theme.shared@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-1.1.1.tgz#b5eb57bcebcf211a75cf7d540dcc89a0f9ade013" - integrity sha512-LilSyefzT1+rcTU7vbWxcO8TwBgGZIx6QbMUrDicSTH6LLJ9S5+yNaGNJbbZKDG6qx0BEoC1u8dE8KCUshwxoQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "^1.1.1" - "@abp/bootstrap" "^1.1.1" - "@abp/bootstrap-datepicker" "^1.1.1" - "@abp/datatables.net-bs4" "^1.1.1" - "@abp/font-awesome" "^1.1.1" - "@abp/jquery-form" "^1.1.1" - "@abp/jquery-validation-unobtrusive" "^1.1.1" - "@abp/lodash" "^1.1.1" - "@abp/luxon" "^1.1.1" - "@abp/malihu-custom-scrollbar-plugin" "^1.1.1" - "@abp/select2" "^1.1.1" - "@abp/sweetalert" "^1.1.1" - "@abp/timeago" "^1.1.1" - "@abp/toastr" "^1.1.1" - -"@abp/aspnetcore.mvc.ui@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-1.1.1.tgz#9d693516b6a215dfd2113db9ef52f02881a3e1d5" - integrity sha512-wZbptVCSxZzEjkJx+/sWrH9Pikp9nOy7V8Htz+L+S7/qAzfXu5PRVV8ahddfAcDHRk30buRhdbJlCVdt6hkZ6g== +"@abp/aspnetcore.mvc.ui.theme.shared@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.0.0.tgz#9859308a910ecd89fd008bc9622c0fd2ca10e5c6" + integrity sha512-fGIEOY3i9DgrEYay1B+IiTkBW94bBY9Fk0bou6ULxvb0jndqAnuws1mifBUrvKIF2cjKKBxO2iqBZ5n2IbHLhA== + dependencies: + "@abp/aspnetcore.mvc.ui" "^2.0.0" + "@abp/bootstrap" "^2.0.0" + "@abp/bootstrap-datepicker" "^2.0.0" + "@abp/datatables.net-bs4" "^2.0.0" + "@abp/font-awesome" "^2.0.0" + "@abp/jquery-form" "^2.0.0" + "@abp/jquery-validation-unobtrusive" "^2.0.0" + "@abp/lodash" "^2.0.0" + "@abp/luxon" "^2.0.0" + "@abp/malihu-custom-scrollbar-plugin" "^2.0.0" + "@abp/select2" "^2.0.0" + "@abp/sweetalert" "^2.0.0" + "@abp/timeago" "^2.0.0" + "@abp/toastr" "^2.0.0" + +"@abp/aspnetcore.mvc.ui@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.0.0.tgz#d7e67b99e6c31e670337e787d55dd49f81717155" + integrity sha512-fNxQINx6COagbA2UepOMgOZg6dqXlEKbiftSt+/yhUVkMW3+c8IILJODyHxAaJfGrYjHqKAcyItqR7vVCWDYsw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,135 +41,135 @@ path "^0.12.7" rimraf "^3.0.0" -"@abp/bootstrap-datepicker@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-1.1.1.tgz#fb1ceec1df24f384a6349c4acfb3627e02e4a42f" - integrity sha512-RIQLSrKBu/cTAU2lFenSAoKcMp7wgF4e3nP4/iOu5ZtCgti5vUjMEcqEvBxtlwKTHMXsTG4GtNKqjTwjXMjONQ== +"@abp/bootstrap-datepicker@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.0.0.tgz#e55064d554163865c3c4871c10cc8e8416cccbf4" + integrity sha512-kz6RYUDO6txf9gJXxXLL3aboM4OjJWwtdMD0pwhwWJCujqjaQi3YJIGZFXAxO2GhUq5bqX+KaBdOqdMl0gIasA== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-1.1.1.tgz#e16fae6ff6b18096276219edf3483fd8f41c925d" - integrity sha512-OIaGJaizhI8UNfy4bnw2xT2Z0QG7BJJrjxOPGepfd4jn/AUi/vFdOpJFWvu2P9PwSzRmn/LuSlr2WONDOdPVWQ== +"@abp/bootstrap@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.0.0.tgz#1c12edc28a9400a349049ab60f43a8123da0f2b0" + integrity sha512-sim0zmmUqtTvFDn4RQxJZPHCH4kxHsuep63O86sfn3XjgU8FDw6C2AP7j0l+q2yDt94qKTUMxg17MWDr5DqEEA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" bootstrap "^4.3.1" -"@abp/core@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-1.1.1.tgz#1379145980d6b142fd0123200c60ffb206149d56" - integrity sha512-OvUG7xRvk8nSqwC1s45YPnTuhC2OWe1AVa1nnC6FVHMH/g1Je7UJwnbu47K7uNS+lDRJUIktNbufYKiwutEjRg== +"@abp/core@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.0.0.tgz#19368fc332eec89d6442e6b991eed72af92f8ec8" + integrity sha512-aPb4anAZhmVxJrPnBNT33bRkYLUMmCqpPIrN+NCqejwiEIg5jb4zu4bOS71/oTxViNRF5S/XzKF6ceLD+CVq4g== -"@abp/datatables.net-bs4@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-1.1.1.tgz#c7e79534c2e4b51b3e98bcc0df3292cb08ae9d2e" - integrity sha512-t40xQIGBMLPZiSbcZHW3AwE8uk+xcl7OitBT1jym0XPKVtgJsHez3ynDE5v/PjHe+ColCG8lTRjRnNoXo5dzDw== +"@abp/datatables.net-bs4@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.0.0.tgz#bb7f1eddd0dee5ba8fb7a8e760d6b6fdc9374a65" + integrity sha512-7kCD4WhszgQOCQsAvXUGdDSqi+ZRWqENzjxoPQa9oPxFD2hy3AshYMvc+JQC71Pbp6YIZU09LV3pGkFPHO7lOw== dependencies: - "@abp/datatables.net" "^1.1.1" + "@abp/datatables.net" "^2.0.0" datatables.net-bs4 "^1.10.20" -"@abp/datatables.net@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-1.1.1.tgz#de8b362c29f452188624536cdd6feccad2b533e6" - integrity sha512-y76IDBlgc0n1YgQqJ+9cfzXpLwr2arhdIfSmqX+qRXz6GfVNY7e3JijkFSgDKUzKGYo1HZMzgJmDmeNIRwMZsQ== +"@abp/datatables.net@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.0.0.tgz#43fa36590373dccffc3f4402b2c94777c9ce70cd" + integrity sha512-xSUkrpWUfzqPIbo5pI6gcrrbc2R2yBlq+TLxry064ILHfGvZI8lwmv9rEkPP/hBTvk1YnzaZScFneaA0xJn9hw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" datatables.net "^1.10.20" -"@abp/font-awesome@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-1.1.1.tgz#7f0a210eb7611d75542028b0c88a0c83f1d9db50" - integrity sha512-6RHbixi7IVWAb3JCHrUmEYD3HmAH4R75Nuo54LvFzATrh4G6gdBONIeDuTo79OTxe4Zhp+WLxeA49Y21kt77mg== +"@abp/font-awesome@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.0.0.tgz#aed2718808820f2cbe54edf09a23a65d819a798d" + integrity sha512-zfNjgnvOnCQQh4egk3NE7e6FbaDbjCzFnVDiHelM+9R6GAfDZTMS9jm3X+vDrn8vQfqQmDpzTpcz0v0IMNM8/g== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" "@fortawesome/fontawesome-free" "^5.11.2" -"@abp/jquery-form@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-1.1.1.tgz#1dae1145da720e222efcb396906c3fbe5a3dd29f" - integrity sha512-AIIdN36f8xwr4LgiNnBHohJ5tlxh/r+DuDtXcScpZN6GWBE+XgUotN0pZIIva82IxCyUNdDudzgluX9IjI+00w== +"@abp/jquery-form@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.0.0.tgz#b987944d1aff79c540c951cca020ec49e1a0a004" + integrity sha512-2JmXIbeTM+9RQSTFOurbL6Vk0WR2RbwU+ApKVYJhF7NxEdE9cMGTrs1Z2xF85h28VrVAtPnpApd9ORaopSqaYQ== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-form "^4.2.2" -"@abp/jquery-validation-unobtrusive@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-1.1.1.tgz#aeba0883260f47ab22a39343817b1811fc2b81a9" - integrity sha512-q1b0KG8l3DXUiW8JXdq9l1jR/CwgzrZdxwdKGLB2J/oxHlywQIb7yrjR6WGCshjPpcx2SkOL0j/ZXMIMh533hQ== +"@abp/jquery-validation-unobtrusive@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.0.0.tgz#75d4f54732a4608542d968874e676f3de08126bf" + integrity sha512-CfU9/Q2dsaqLAWvqEb/VgMvJ5RC2IoSSW7l8SbduKOzqg7FiiBOpOd1AcqApjh0vuzZrRj+HcuoFBE+jWiberw== dependencies: - "@abp/jquery-validation" "^1.1.1" + "@abp/jquery-validation" "^2.0.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-1.1.1.tgz#03febd285ce9d7e5681619897967b0ccde7e8e04" - integrity sha512-YvAjIW8epp+ddu01BTUkZWPfEADAvNPJeUrrZ6OpcPWM15Tf+ddr4ATgJ1LCg0Bh5F09iQC855osow3lt8sc7g== +"@abp/jquery-validation@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.0.0.tgz#e8afe0e677f8a7ec1fd7818b916b1894904d3cc3" + integrity sha512-cjkk5TJyr09H6EO13/GtiIRZv/1FP94IX2tVstqtOa5x8uI8HWCgFpPrchg9ldBsBoBelyExoISjlzqiKNkIHA== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-validation "^1.19.1" -"@abp/jquery@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-1.1.1.tgz#56928814bb3df73c1c0014d4b18fef09ec06e195" - integrity sha512-kj4BTtXF0VbCzCqRXnRVEbGndR3F8NlbBhVQN6BQktOuZta3fvx7f2+pSok8vQv0ddmqUFY7FTT2Ei3l4363LQ== +"@abp/jquery@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.0.0.tgz#71781f3ad1914c1d2a516c7157080d7c82c9b7aa" + integrity sha512-2EfGIiSaXPTxfdb/jomae75Y77OlS4H+G1oWz7L6XDhBIzctVivbOKSJim3BI2no1GJWOM/U1r1TKEKzwJyY4Q== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" jquery "^3.4.1" -"@abp/lodash@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-1.1.1.tgz#aa6ef3a85b9827796e295f440b29f0611c508b5f" - integrity sha512-nH7bRS28Tf4hEXcpKHd1IM+MzYTqX8t3htGmsLX4UESQd52eODYOIldtX6gm3OW1O6ECwW6si/o0M2pTEpQqvg== +"@abp/lodash@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.0.0.tgz#ac5697a32a0ab0b3a0420c90ada1b87b853d19bc" + integrity sha512-QZWrDDfCjyW+q5lauwyrdFmsoDTC154k9ZZAkgAt9lJ6bbBWvDFgNEevg9etfh6heTBzBO7v7ftqDTt01/ArCQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" lodash "^4.17.15" -"@abp/luxon@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-1.1.1.tgz#ec389270d78bb271d52163ab3773f549aa91751e" - integrity sha512-WNu8JRSb5FDXfcDwjMYyeYeUN48uuDc/I2cdo3xd1rcY+lbmbzxoG9IYOlE8cRHdgX3z82qsZXFs2lcAy0Le2g== +"@abp/luxon@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.0.0.tgz#3bb3c3fcb0a9d74161a9f82afd840f9fdbffd42e" + integrity sha512-DloPuJrAcpgcPGkuaJCi9XfC+2JsKPxFXTtxNlgkEaTuFwKnrWeGSOZqwedfawnQA+YPGGg1hz+7+WPb0X4Fog== dependencies: luxon "^1.21.3" -"@abp/malihu-custom-scrollbar-plugin@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-1.1.1.tgz#73f8423c29d646dc7f0f270d1d7ef05947333e2a" - integrity sha512-n4b4QK/L1Czdx0oOpUR/bWjK9VENexfUSV/aMjwzHhDmEFABAmEfhIpudCYDwewGswrd7C9agmBvakv2rwPQeA== +"@abp/malihu-custom-scrollbar-plugin@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.0.0.tgz#6df2bcf1a3413880ebcf45017fe4966ad01e4fb9" + integrity sha512-ZqfVJyEMykg7IqemxV1jZ4FXu74F3eT8Be2EobSrc0avx27Oh6sD38TvgPv3e4etDbCekZYG1J7glKY7RzNPYw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-1.1.1.tgz#777967821cfcc4bd1c9fc895e913427fbb330abe" - integrity sha512-t0qcJhD+uo2+XWr4nmMQLAx7MRGQUBdZ81YmGty045ReoSaEKQf4haLkzBcMzpBRusiyMQO/PbxjtwMw/xJQTQ== +"@abp/select2@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.0.0.tgz#252710d172c7a7385f41292d3d3400c68ed93dbb" + integrity sha512-kRNuVdr5EbFQxXD7Fq8H3bYJo3bmE7QsIlxZQeSl6xfBK4nYGeLJ6ZGPwzKPFN9P6sfpZ4TBM2eOie9LgmHWLA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" select2 "^4.0.12" -"@abp/sweetalert@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-1.1.1.tgz#e055ea46eb4e3d53e623ee0aada9b2d16fea5610" - integrity sha512-V6K/qg7J/bdFmom2kaXYeiLvcmLHFl+MacPX4yYAK2biZdb2pWOkUdmcAzZdOT+UruKfLRhvraVC2uXDySi9NA== +"@abp/sweetalert@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.0.0.tgz#2bb99ba7c0b6154181bce8fc5a959d4520032279" + integrity sha512-uotKepUBfQL8hrwSxSDLBLiAesIZ8low6OLsFIXqkUDDQIgKWUpPBuTbP7XGiHvHBOXXLxmpQ+YeYe72eOPtXQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" sweetalert "^2.1.2" -"@abp/timeago@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-1.1.1.tgz#b626087ca35fb325e8e8a337552694fcbb8a6bf9" - integrity sha512-QYYih/4n6XhCqkRw7fBfyg58T5CHqJHyz7SAfq86RiKAJ4jVtjdSVxj3XKxz8eCb56wZGsO1xXXStI3vdLwwNw== +"@abp/timeago@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.0.0.tgz#6e410cbf09e252b9eb1cf03cdc7ea62424249694" + integrity sha512-rtZ/avYpCTIDq4ZjIxaSQxN9wuRnQwhZ+dS1HfHb2NZK2sqJnb+iH7Nm9IQPHk7y89mgSrMWskYW91KaABSolw== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" timeago "^1.6.7" -"@abp/toastr@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-1.1.1.tgz#aeb6a8ef8004fce136997f9ee3af7dd241890d50" - integrity sha512-GDewBppm+0FO6kTTy0huczoH9P5q6lFicHFAoEawAMkuWJFW/Ihv/YnEvKGDQwGftuVSWexfqBMN/RZ5YSOiGQ== +"@abp/toastr@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.0.0.tgz#a87591132c5586b16d521346ae9012affed0e3cd" + integrity sha512-SC8zWe87Kyec7mIsp9LRSmOlBfu+a1X658oS2eP/NscirU8tCnhvl/F2PeHWLjE8zkULLd8GZ8ht/XSU1gtTpg== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" toastr "^2.1.4" "@fortawesome/fontawesome-free@^5.11.2": diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json index 35b0592f57..e045906f81 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^2.0.0" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock index 313032453c..677a417b16 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-1.1.1.tgz#a3d21f8cc5ede2e85b881fe69d9ecd5fc2268e47" - integrity sha512-ooXtCM3TWN69RU7xs6avnzOQBXzsiHY5BEIogzSBialZC4uG5H56qrIr4MbsFNae+PQM23Mw2tnJ/Z7dutURCQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.0.0.tgz#824f69bbbf868e4d72c36a0c6d0d11e18bd055b1" + integrity sha512-x3899Y+XZPj1z9aO0sqxsbwFebHCoEaLedcVEOJugJxM9JXfKuNG3tlvuurLirdaFQAs6WoMCFsQ9sbR8ZHm2w== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.shared" "^2.0.0" -"@abp/aspnetcore.mvc.ui.theme.shared@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-1.1.1.tgz#b5eb57bcebcf211a75cf7d540dcc89a0f9ade013" - integrity sha512-LilSyefzT1+rcTU7vbWxcO8TwBgGZIx6QbMUrDicSTH6LLJ9S5+yNaGNJbbZKDG6qx0BEoC1u8dE8KCUshwxoQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "^1.1.1" - "@abp/bootstrap" "^1.1.1" - "@abp/bootstrap-datepicker" "^1.1.1" - "@abp/datatables.net-bs4" "^1.1.1" - "@abp/font-awesome" "^1.1.1" - "@abp/jquery-form" "^1.1.1" - "@abp/jquery-validation-unobtrusive" "^1.1.1" - "@abp/lodash" "^1.1.1" - "@abp/luxon" "^1.1.1" - "@abp/malihu-custom-scrollbar-plugin" "^1.1.1" - "@abp/select2" "^1.1.1" - "@abp/sweetalert" "^1.1.1" - "@abp/timeago" "^1.1.1" - "@abp/toastr" "^1.1.1" - -"@abp/aspnetcore.mvc.ui@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-1.1.1.tgz#9d693516b6a215dfd2113db9ef52f02881a3e1d5" - integrity sha512-wZbptVCSxZzEjkJx+/sWrH9Pikp9nOy7V8Htz+L+S7/qAzfXu5PRVV8ahddfAcDHRk30buRhdbJlCVdt6hkZ6g== +"@abp/aspnetcore.mvc.ui.theme.shared@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.0.0.tgz#9859308a910ecd89fd008bc9622c0fd2ca10e5c6" + integrity sha512-fGIEOY3i9DgrEYay1B+IiTkBW94bBY9Fk0bou6ULxvb0jndqAnuws1mifBUrvKIF2cjKKBxO2iqBZ5n2IbHLhA== + dependencies: + "@abp/aspnetcore.mvc.ui" "^2.0.0" + "@abp/bootstrap" "^2.0.0" + "@abp/bootstrap-datepicker" "^2.0.0" + "@abp/datatables.net-bs4" "^2.0.0" + "@abp/font-awesome" "^2.0.0" + "@abp/jquery-form" "^2.0.0" + "@abp/jquery-validation-unobtrusive" "^2.0.0" + "@abp/lodash" "^2.0.0" + "@abp/luxon" "^2.0.0" + "@abp/malihu-custom-scrollbar-plugin" "^2.0.0" + "@abp/select2" "^2.0.0" + "@abp/sweetalert" "^2.0.0" + "@abp/timeago" "^2.0.0" + "@abp/toastr" "^2.0.0" + +"@abp/aspnetcore.mvc.ui@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.0.0.tgz#d7e67b99e6c31e670337e787d55dd49f81717155" + integrity sha512-fNxQINx6COagbA2UepOMgOZg6dqXlEKbiftSt+/yhUVkMW3+c8IILJODyHxAaJfGrYjHqKAcyItqR7vVCWDYsw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,135 +41,135 @@ path "^0.12.7" rimraf "^3.0.0" -"@abp/bootstrap-datepicker@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-1.1.1.tgz#fb1ceec1df24f384a6349c4acfb3627e02e4a42f" - integrity sha512-RIQLSrKBu/cTAU2lFenSAoKcMp7wgF4e3nP4/iOu5ZtCgti5vUjMEcqEvBxtlwKTHMXsTG4GtNKqjTwjXMjONQ== +"@abp/bootstrap-datepicker@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.0.0.tgz#e55064d554163865c3c4871c10cc8e8416cccbf4" + integrity sha512-kz6RYUDO6txf9gJXxXLL3aboM4OjJWwtdMD0pwhwWJCujqjaQi3YJIGZFXAxO2GhUq5bqX+KaBdOqdMl0gIasA== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-1.1.1.tgz#e16fae6ff6b18096276219edf3483fd8f41c925d" - integrity sha512-OIaGJaizhI8UNfy4bnw2xT2Z0QG7BJJrjxOPGepfd4jn/AUi/vFdOpJFWvu2P9PwSzRmn/LuSlr2WONDOdPVWQ== +"@abp/bootstrap@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.0.0.tgz#1c12edc28a9400a349049ab60f43a8123da0f2b0" + integrity sha512-sim0zmmUqtTvFDn4RQxJZPHCH4kxHsuep63O86sfn3XjgU8FDw6C2AP7j0l+q2yDt94qKTUMxg17MWDr5DqEEA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" bootstrap "^4.3.1" -"@abp/core@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-1.1.1.tgz#1379145980d6b142fd0123200c60ffb206149d56" - integrity sha512-OvUG7xRvk8nSqwC1s45YPnTuhC2OWe1AVa1nnC6FVHMH/g1Je7UJwnbu47K7uNS+lDRJUIktNbufYKiwutEjRg== +"@abp/core@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.0.0.tgz#19368fc332eec89d6442e6b991eed72af92f8ec8" + integrity sha512-aPb4anAZhmVxJrPnBNT33bRkYLUMmCqpPIrN+NCqejwiEIg5jb4zu4bOS71/oTxViNRF5S/XzKF6ceLD+CVq4g== -"@abp/datatables.net-bs4@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-1.1.1.tgz#c7e79534c2e4b51b3e98bcc0df3292cb08ae9d2e" - integrity sha512-t40xQIGBMLPZiSbcZHW3AwE8uk+xcl7OitBT1jym0XPKVtgJsHez3ynDE5v/PjHe+ColCG8lTRjRnNoXo5dzDw== +"@abp/datatables.net-bs4@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.0.0.tgz#bb7f1eddd0dee5ba8fb7a8e760d6b6fdc9374a65" + integrity sha512-7kCD4WhszgQOCQsAvXUGdDSqi+ZRWqENzjxoPQa9oPxFD2hy3AshYMvc+JQC71Pbp6YIZU09LV3pGkFPHO7lOw== dependencies: - "@abp/datatables.net" "^1.1.1" + "@abp/datatables.net" "^2.0.0" datatables.net-bs4 "^1.10.20" -"@abp/datatables.net@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-1.1.1.tgz#de8b362c29f452188624536cdd6feccad2b533e6" - integrity sha512-y76IDBlgc0n1YgQqJ+9cfzXpLwr2arhdIfSmqX+qRXz6GfVNY7e3JijkFSgDKUzKGYo1HZMzgJmDmeNIRwMZsQ== +"@abp/datatables.net@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.0.0.tgz#43fa36590373dccffc3f4402b2c94777c9ce70cd" + integrity sha512-xSUkrpWUfzqPIbo5pI6gcrrbc2R2yBlq+TLxry064ILHfGvZI8lwmv9rEkPP/hBTvk1YnzaZScFneaA0xJn9hw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" datatables.net "^1.10.20" -"@abp/font-awesome@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-1.1.1.tgz#7f0a210eb7611d75542028b0c88a0c83f1d9db50" - integrity sha512-6RHbixi7IVWAb3JCHrUmEYD3HmAH4R75Nuo54LvFzATrh4G6gdBONIeDuTo79OTxe4Zhp+WLxeA49Y21kt77mg== +"@abp/font-awesome@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.0.0.tgz#aed2718808820f2cbe54edf09a23a65d819a798d" + integrity sha512-zfNjgnvOnCQQh4egk3NE7e6FbaDbjCzFnVDiHelM+9R6GAfDZTMS9jm3X+vDrn8vQfqQmDpzTpcz0v0IMNM8/g== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" "@fortawesome/fontawesome-free" "^5.11.2" -"@abp/jquery-form@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-1.1.1.tgz#1dae1145da720e222efcb396906c3fbe5a3dd29f" - integrity sha512-AIIdN36f8xwr4LgiNnBHohJ5tlxh/r+DuDtXcScpZN6GWBE+XgUotN0pZIIva82IxCyUNdDudzgluX9IjI+00w== +"@abp/jquery-form@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.0.0.tgz#b987944d1aff79c540c951cca020ec49e1a0a004" + integrity sha512-2JmXIbeTM+9RQSTFOurbL6Vk0WR2RbwU+ApKVYJhF7NxEdE9cMGTrs1Z2xF85h28VrVAtPnpApd9ORaopSqaYQ== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-form "^4.2.2" -"@abp/jquery-validation-unobtrusive@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-1.1.1.tgz#aeba0883260f47ab22a39343817b1811fc2b81a9" - integrity sha512-q1b0KG8l3DXUiW8JXdq9l1jR/CwgzrZdxwdKGLB2J/oxHlywQIb7yrjR6WGCshjPpcx2SkOL0j/ZXMIMh533hQ== +"@abp/jquery-validation-unobtrusive@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.0.0.tgz#75d4f54732a4608542d968874e676f3de08126bf" + integrity sha512-CfU9/Q2dsaqLAWvqEb/VgMvJ5RC2IoSSW7l8SbduKOzqg7FiiBOpOd1AcqApjh0vuzZrRj+HcuoFBE+jWiberw== dependencies: - "@abp/jquery-validation" "^1.1.1" + "@abp/jquery-validation" "^2.0.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-1.1.1.tgz#03febd285ce9d7e5681619897967b0ccde7e8e04" - integrity sha512-YvAjIW8epp+ddu01BTUkZWPfEADAvNPJeUrrZ6OpcPWM15Tf+ddr4ATgJ1LCg0Bh5F09iQC855osow3lt8sc7g== +"@abp/jquery-validation@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.0.0.tgz#e8afe0e677f8a7ec1fd7818b916b1894904d3cc3" + integrity sha512-cjkk5TJyr09H6EO13/GtiIRZv/1FP94IX2tVstqtOa5x8uI8HWCgFpPrchg9ldBsBoBelyExoISjlzqiKNkIHA== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-validation "^1.19.1" -"@abp/jquery@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-1.1.1.tgz#56928814bb3df73c1c0014d4b18fef09ec06e195" - integrity sha512-kj4BTtXF0VbCzCqRXnRVEbGndR3F8NlbBhVQN6BQktOuZta3fvx7f2+pSok8vQv0ddmqUFY7FTT2Ei3l4363LQ== +"@abp/jquery@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.0.0.tgz#71781f3ad1914c1d2a516c7157080d7c82c9b7aa" + integrity sha512-2EfGIiSaXPTxfdb/jomae75Y77OlS4H+G1oWz7L6XDhBIzctVivbOKSJim3BI2no1GJWOM/U1r1TKEKzwJyY4Q== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" jquery "^3.4.1" -"@abp/lodash@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-1.1.1.tgz#aa6ef3a85b9827796e295f440b29f0611c508b5f" - integrity sha512-nH7bRS28Tf4hEXcpKHd1IM+MzYTqX8t3htGmsLX4UESQd52eODYOIldtX6gm3OW1O6ECwW6si/o0M2pTEpQqvg== +"@abp/lodash@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.0.0.tgz#ac5697a32a0ab0b3a0420c90ada1b87b853d19bc" + integrity sha512-QZWrDDfCjyW+q5lauwyrdFmsoDTC154k9ZZAkgAt9lJ6bbBWvDFgNEevg9etfh6heTBzBO7v7ftqDTt01/ArCQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" lodash "^4.17.15" -"@abp/luxon@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-1.1.1.tgz#ec389270d78bb271d52163ab3773f549aa91751e" - integrity sha512-WNu8JRSb5FDXfcDwjMYyeYeUN48uuDc/I2cdo3xd1rcY+lbmbzxoG9IYOlE8cRHdgX3z82qsZXFs2lcAy0Le2g== +"@abp/luxon@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.0.0.tgz#3bb3c3fcb0a9d74161a9f82afd840f9fdbffd42e" + integrity sha512-DloPuJrAcpgcPGkuaJCi9XfC+2JsKPxFXTtxNlgkEaTuFwKnrWeGSOZqwedfawnQA+YPGGg1hz+7+WPb0X4Fog== dependencies: luxon "^1.21.3" -"@abp/malihu-custom-scrollbar-plugin@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-1.1.1.tgz#73f8423c29d646dc7f0f270d1d7ef05947333e2a" - integrity sha512-n4b4QK/L1Czdx0oOpUR/bWjK9VENexfUSV/aMjwzHhDmEFABAmEfhIpudCYDwewGswrd7C9agmBvakv2rwPQeA== +"@abp/malihu-custom-scrollbar-plugin@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.0.0.tgz#6df2bcf1a3413880ebcf45017fe4966ad01e4fb9" + integrity sha512-ZqfVJyEMykg7IqemxV1jZ4FXu74F3eT8Be2EobSrc0avx27Oh6sD38TvgPv3e4etDbCekZYG1J7glKY7RzNPYw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-1.1.1.tgz#777967821cfcc4bd1c9fc895e913427fbb330abe" - integrity sha512-t0qcJhD+uo2+XWr4nmMQLAx7MRGQUBdZ81YmGty045ReoSaEKQf4haLkzBcMzpBRusiyMQO/PbxjtwMw/xJQTQ== +"@abp/select2@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.0.0.tgz#252710d172c7a7385f41292d3d3400c68ed93dbb" + integrity sha512-kRNuVdr5EbFQxXD7Fq8H3bYJo3bmE7QsIlxZQeSl6xfBK4nYGeLJ6ZGPwzKPFN9P6sfpZ4TBM2eOie9LgmHWLA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" select2 "^4.0.12" -"@abp/sweetalert@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-1.1.1.tgz#e055ea46eb4e3d53e623ee0aada9b2d16fea5610" - integrity sha512-V6K/qg7J/bdFmom2kaXYeiLvcmLHFl+MacPX4yYAK2biZdb2pWOkUdmcAzZdOT+UruKfLRhvraVC2uXDySi9NA== +"@abp/sweetalert@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.0.0.tgz#2bb99ba7c0b6154181bce8fc5a959d4520032279" + integrity sha512-uotKepUBfQL8hrwSxSDLBLiAesIZ8low6OLsFIXqkUDDQIgKWUpPBuTbP7XGiHvHBOXXLxmpQ+YeYe72eOPtXQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" sweetalert "^2.1.2" -"@abp/timeago@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-1.1.1.tgz#b626087ca35fb325e8e8a337552694fcbb8a6bf9" - integrity sha512-QYYih/4n6XhCqkRw7fBfyg58T5CHqJHyz7SAfq86RiKAJ4jVtjdSVxj3XKxz8eCb56wZGsO1xXXStI3vdLwwNw== +"@abp/timeago@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.0.0.tgz#6e410cbf09e252b9eb1cf03cdc7ea62424249694" + integrity sha512-rtZ/avYpCTIDq4ZjIxaSQxN9wuRnQwhZ+dS1HfHb2NZK2sqJnb+iH7Nm9IQPHk7y89mgSrMWskYW91KaABSolw== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" timeago "^1.6.7" -"@abp/toastr@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-1.1.1.tgz#aeb6a8ef8004fce136997f9ee3af7dd241890d50" - integrity sha512-GDewBppm+0FO6kTTy0huczoH9P5q6lFicHFAoEawAMkuWJFW/Ihv/YnEvKGDQwGftuVSWexfqBMN/RZ5YSOiGQ== +"@abp/toastr@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.0.0.tgz#a87591132c5586b16d521346ae9012affed0e3cd" + integrity sha512-SC8zWe87Kyec7mIsp9LRSmOlBfu+a1X658oS2eP/NscirU8tCnhvl/F2PeHWLjE8zkULLd8GZ8ht/XSU1gtTpg== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" toastr "^2.1.4" "@fortawesome/fontawesome-free@^5.11.2": diff --git a/templates/module/angular/package.json b/templates/module/angular/package.json index 49b31d0796..462f0e3766 100644 --- a/templates/module/angular/package.json +++ b/templates/module/angular/package.json @@ -12,11 +12,11 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "^1.1.1", - "@abp/ng.theme.basic": "^1.1.1", - "@abp/ng.identity": "^1.1.1", - "@abp/ng.tenant-management": "^1.1.1", - "@abp/ng.setting-management": "^1.1.1", + "@abp/ng.account": "^2.0.0", + "@abp/ng.theme.basic": "^2.0.0", + "@abp/ng.identity": "^2.0.0", + "@abp/ng.tenant-management": "^2.0.0", + "@abp/ng.setting-management": "^2.0.0", "@angular/animations": "~8.2.14", "@angular/common": "~8.2.14", "@angular/compiler": "~8.2.14", diff --git a/templates/module/angular/projects/my-project-name-config/package.json b/templates/module/angular/projects/my-project-name-config/package.json index 90001f09a1..4f2733020b 100644 --- a/templates/module/angular/projects/my-project-name-config/package.json +++ b/templates/module/angular/projects/my-project-name-config/package.json @@ -2,6 +2,6 @@ "name": "my-project-name.config", "version": "0.0.1", "peerDependencies": { - "@abp/ng.core": ">=1.1.1" + "@abp/ng.core": ">=2.0.0" } } diff --git a/templates/module/angular/projects/my-project-name/package.json b/templates/module/angular/projects/my-project-name/package.json index 0010e857cb..3a47047c11 100644 --- a/templates/module/angular/projects/my-project-name/package.json +++ b/templates/module/angular/projects/my-project-name/package.json @@ -2,7 +2,7 @@ "name": "my-project-name", "version": "0.0.1", "dependencies": { - "@abp/ng.theme.shared": "^1.1.1", + "@abp/ng.theme.shared": "^2.0.0", "my-project-name.config": "^0.0.1" } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json index 436db35985..ee7a512dc8 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-identityserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^2.0.0" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock index 12cad6c691..cbe246e8e3 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-1.1.1.tgz#a3d21f8cc5ede2e85b881fe69d9ecd5fc2268e47" - integrity sha512-ooXtCM3TWN69RU7xs6avnzOQBXzsiHY5BEIogzSBialZC4uG5H56qrIr4MbsFNae+PQM23Mw2tnJ/Z7dutURCQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.0.0.tgz#824f69bbbf868e4d72c36a0c6d0d11e18bd055b1" + integrity sha512-x3899Y+XZPj1z9aO0sqxsbwFebHCoEaLedcVEOJugJxM9JXfKuNG3tlvuurLirdaFQAs6WoMCFsQ9sbR8ZHm2w== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.shared" "^2.0.0" -"@abp/aspnetcore.mvc.ui.theme.shared@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-1.1.1.tgz#b5eb57bcebcf211a75cf7d540dcc89a0f9ade013" - integrity sha512-LilSyefzT1+rcTU7vbWxcO8TwBgGZIx6QbMUrDicSTH6LLJ9S5+yNaGNJbbZKDG6qx0BEoC1u8dE8KCUshwxoQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "^1.1.1" - "@abp/bootstrap" "^1.1.1" - "@abp/bootstrap-datepicker" "^1.1.1" - "@abp/datatables.net-bs4" "^1.1.1" - "@abp/font-awesome" "^1.1.1" - "@abp/jquery-form" "^1.1.1" - "@abp/jquery-validation-unobtrusive" "^1.1.1" - "@abp/lodash" "^1.1.1" - "@abp/luxon" "^1.1.1" - "@abp/malihu-custom-scrollbar-plugin" "^1.1.1" - "@abp/select2" "^1.1.1" - "@abp/sweetalert" "^1.1.1" - "@abp/timeago" "^1.1.1" - "@abp/toastr" "^1.1.1" - -"@abp/aspnetcore.mvc.ui@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-1.1.1.tgz#9d693516b6a215dfd2113db9ef52f02881a3e1d5" - integrity sha512-wZbptVCSxZzEjkJx+/sWrH9Pikp9nOy7V8Htz+L+S7/qAzfXu5PRVV8ahddfAcDHRk30buRhdbJlCVdt6hkZ6g== +"@abp/aspnetcore.mvc.ui.theme.shared@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.0.0.tgz#9859308a910ecd89fd008bc9622c0fd2ca10e5c6" + integrity sha512-fGIEOY3i9DgrEYay1B+IiTkBW94bBY9Fk0bou6ULxvb0jndqAnuws1mifBUrvKIF2cjKKBxO2iqBZ5n2IbHLhA== + dependencies: + "@abp/aspnetcore.mvc.ui" "^2.0.0" + "@abp/bootstrap" "^2.0.0" + "@abp/bootstrap-datepicker" "^2.0.0" + "@abp/datatables.net-bs4" "^2.0.0" + "@abp/font-awesome" "^2.0.0" + "@abp/jquery-form" "^2.0.0" + "@abp/jquery-validation-unobtrusive" "^2.0.0" + "@abp/lodash" "^2.0.0" + "@abp/luxon" "^2.0.0" + "@abp/malihu-custom-scrollbar-plugin" "^2.0.0" + "@abp/select2" "^2.0.0" + "@abp/sweetalert" "^2.0.0" + "@abp/timeago" "^2.0.0" + "@abp/toastr" "^2.0.0" + +"@abp/aspnetcore.mvc.ui@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.0.0.tgz#d7e67b99e6c31e670337e787d55dd49f81717155" + integrity sha512-fNxQINx6COagbA2UepOMgOZg6dqXlEKbiftSt+/yhUVkMW3+c8IILJODyHxAaJfGrYjHqKAcyItqR7vVCWDYsw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,135 +41,135 @@ path "^0.12.7" rimraf "^3.0.0" -"@abp/bootstrap-datepicker@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-1.1.1.tgz#fb1ceec1df24f384a6349c4acfb3627e02e4a42f" - integrity sha512-RIQLSrKBu/cTAU2lFenSAoKcMp7wgF4e3nP4/iOu5ZtCgti5vUjMEcqEvBxtlwKTHMXsTG4GtNKqjTwjXMjONQ== +"@abp/bootstrap-datepicker@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.0.0.tgz#e55064d554163865c3c4871c10cc8e8416cccbf4" + integrity sha512-kz6RYUDO6txf9gJXxXLL3aboM4OjJWwtdMD0pwhwWJCujqjaQi3YJIGZFXAxO2GhUq5bqX+KaBdOqdMl0gIasA== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-1.1.1.tgz#e16fae6ff6b18096276219edf3483fd8f41c925d" - integrity sha512-OIaGJaizhI8UNfy4bnw2xT2Z0QG7BJJrjxOPGepfd4jn/AUi/vFdOpJFWvu2P9PwSzRmn/LuSlr2WONDOdPVWQ== +"@abp/bootstrap@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.0.0.tgz#1c12edc28a9400a349049ab60f43a8123da0f2b0" + integrity sha512-sim0zmmUqtTvFDn4RQxJZPHCH4kxHsuep63O86sfn3XjgU8FDw6C2AP7j0l+q2yDt94qKTUMxg17MWDr5DqEEA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" bootstrap "^4.3.1" -"@abp/core@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-1.1.1.tgz#1379145980d6b142fd0123200c60ffb206149d56" - integrity sha512-OvUG7xRvk8nSqwC1s45YPnTuhC2OWe1AVa1nnC6FVHMH/g1Je7UJwnbu47K7uNS+lDRJUIktNbufYKiwutEjRg== +"@abp/core@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.0.0.tgz#19368fc332eec89d6442e6b991eed72af92f8ec8" + integrity sha512-aPb4anAZhmVxJrPnBNT33bRkYLUMmCqpPIrN+NCqejwiEIg5jb4zu4bOS71/oTxViNRF5S/XzKF6ceLD+CVq4g== -"@abp/datatables.net-bs4@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-1.1.1.tgz#c7e79534c2e4b51b3e98bcc0df3292cb08ae9d2e" - integrity sha512-t40xQIGBMLPZiSbcZHW3AwE8uk+xcl7OitBT1jym0XPKVtgJsHez3ynDE5v/PjHe+ColCG8lTRjRnNoXo5dzDw== +"@abp/datatables.net-bs4@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.0.0.tgz#bb7f1eddd0dee5ba8fb7a8e760d6b6fdc9374a65" + integrity sha512-7kCD4WhszgQOCQsAvXUGdDSqi+ZRWqENzjxoPQa9oPxFD2hy3AshYMvc+JQC71Pbp6YIZU09LV3pGkFPHO7lOw== dependencies: - "@abp/datatables.net" "^1.1.1" + "@abp/datatables.net" "^2.0.0" datatables.net-bs4 "^1.10.20" -"@abp/datatables.net@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-1.1.1.tgz#de8b362c29f452188624536cdd6feccad2b533e6" - integrity sha512-y76IDBlgc0n1YgQqJ+9cfzXpLwr2arhdIfSmqX+qRXz6GfVNY7e3JijkFSgDKUzKGYo1HZMzgJmDmeNIRwMZsQ== +"@abp/datatables.net@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.0.0.tgz#43fa36590373dccffc3f4402b2c94777c9ce70cd" + integrity sha512-xSUkrpWUfzqPIbo5pI6gcrrbc2R2yBlq+TLxry064ILHfGvZI8lwmv9rEkPP/hBTvk1YnzaZScFneaA0xJn9hw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" datatables.net "^1.10.20" -"@abp/font-awesome@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-1.1.1.tgz#7f0a210eb7611d75542028b0c88a0c83f1d9db50" - integrity sha512-6RHbixi7IVWAb3JCHrUmEYD3HmAH4R75Nuo54LvFzATrh4G6gdBONIeDuTo79OTxe4Zhp+WLxeA49Y21kt77mg== +"@abp/font-awesome@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.0.0.tgz#aed2718808820f2cbe54edf09a23a65d819a798d" + integrity sha512-zfNjgnvOnCQQh4egk3NE7e6FbaDbjCzFnVDiHelM+9R6GAfDZTMS9jm3X+vDrn8vQfqQmDpzTpcz0v0IMNM8/g== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" "@fortawesome/fontawesome-free" "^5.11.2" -"@abp/jquery-form@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-1.1.1.tgz#1dae1145da720e222efcb396906c3fbe5a3dd29f" - integrity sha512-AIIdN36f8xwr4LgiNnBHohJ5tlxh/r+DuDtXcScpZN6GWBE+XgUotN0pZIIva82IxCyUNdDudzgluX9IjI+00w== +"@abp/jquery-form@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.0.0.tgz#b987944d1aff79c540c951cca020ec49e1a0a004" + integrity sha512-2JmXIbeTM+9RQSTFOurbL6Vk0WR2RbwU+ApKVYJhF7NxEdE9cMGTrs1Z2xF85h28VrVAtPnpApd9ORaopSqaYQ== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-form "^4.2.2" -"@abp/jquery-validation-unobtrusive@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-1.1.1.tgz#aeba0883260f47ab22a39343817b1811fc2b81a9" - integrity sha512-q1b0KG8l3DXUiW8JXdq9l1jR/CwgzrZdxwdKGLB2J/oxHlywQIb7yrjR6WGCshjPpcx2SkOL0j/ZXMIMh533hQ== +"@abp/jquery-validation-unobtrusive@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.0.0.tgz#75d4f54732a4608542d968874e676f3de08126bf" + integrity sha512-CfU9/Q2dsaqLAWvqEb/VgMvJ5RC2IoSSW7l8SbduKOzqg7FiiBOpOd1AcqApjh0vuzZrRj+HcuoFBE+jWiberw== dependencies: - "@abp/jquery-validation" "^1.1.1" + "@abp/jquery-validation" "^2.0.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-1.1.1.tgz#03febd285ce9d7e5681619897967b0ccde7e8e04" - integrity sha512-YvAjIW8epp+ddu01BTUkZWPfEADAvNPJeUrrZ6OpcPWM15Tf+ddr4ATgJ1LCg0Bh5F09iQC855osow3lt8sc7g== +"@abp/jquery-validation@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.0.0.tgz#e8afe0e677f8a7ec1fd7818b916b1894904d3cc3" + integrity sha512-cjkk5TJyr09H6EO13/GtiIRZv/1FP94IX2tVstqtOa5x8uI8HWCgFpPrchg9ldBsBoBelyExoISjlzqiKNkIHA== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-validation "^1.19.1" -"@abp/jquery@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-1.1.1.tgz#56928814bb3df73c1c0014d4b18fef09ec06e195" - integrity sha512-kj4BTtXF0VbCzCqRXnRVEbGndR3F8NlbBhVQN6BQktOuZta3fvx7f2+pSok8vQv0ddmqUFY7FTT2Ei3l4363LQ== +"@abp/jquery@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.0.0.tgz#71781f3ad1914c1d2a516c7157080d7c82c9b7aa" + integrity sha512-2EfGIiSaXPTxfdb/jomae75Y77OlS4H+G1oWz7L6XDhBIzctVivbOKSJim3BI2no1GJWOM/U1r1TKEKzwJyY4Q== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" jquery "^3.4.1" -"@abp/lodash@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-1.1.1.tgz#aa6ef3a85b9827796e295f440b29f0611c508b5f" - integrity sha512-nH7bRS28Tf4hEXcpKHd1IM+MzYTqX8t3htGmsLX4UESQd52eODYOIldtX6gm3OW1O6ECwW6si/o0M2pTEpQqvg== +"@abp/lodash@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.0.0.tgz#ac5697a32a0ab0b3a0420c90ada1b87b853d19bc" + integrity sha512-QZWrDDfCjyW+q5lauwyrdFmsoDTC154k9ZZAkgAt9lJ6bbBWvDFgNEevg9etfh6heTBzBO7v7ftqDTt01/ArCQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" lodash "^4.17.15" -"@abp/luxon@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-1.1.1.tgz#ec389270d78bb271d52163ab3773f549aa91751e" - integrity sha512-WNu8JRSb5FDXfcDwjMYyeYeUN48uuDc/I2cdo3xd1rcY+lbmbzxoG9IYOlE8cRHdgX3z82qsZXFs2lcAy0Le2g== +"@abp/luxon@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.0.0.tgz#3bb3c3fcb0a9d74161a9f82afd840f9fdbffd42e" + integrity sha512-DloPuJrAcpgcPGkuaJCi9XfC+2JsKPxFXTtxNlgkEaTuFwKnrWeGSOZqwedfawnQA+YPGGg1hz+7+WPb0X4Fog== dependencies: luxon "^1.21.3" -"@abp/malihu-custom-scrollbar-plugin@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-1.1.1.tgz#73f8423c29d646dc7f0f270d1d7ef05947333e2a" - integrity sha512-n4b4QK/L1Czdx0oOpUR/bWjK9VENexfUSV/aMjwzHhDmEFABAmEfhIpudCYDwewGswrd7C9agmBvakv2rwPQeA== +"@abp/malihu-custom-scrollbar-plugin@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.0.0.tgz#6df2bcf1a3413880ebcf45017fe4966ad01e4fb9" + integrity sha512-ZqfVJyEMykg7IqemxV1jZ4FXu74F3eT8Be2EobSrc0avx27Oh6sD38TvgPv3e4etDbCekZYG1J7glKY7RzNPYw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-1.1.1.tgz#777967821cfcc4bd1c9fc895e913427fbb330abe" - integrity sha512-t0qcJhD+uo2+XWr4nmMQLAx7MRGQUBdZ81YmGty045ReoSaEKQf4haLkzBcMzpBRusiyMQO/PbxjtwMw/xJQTQ== +"@abp/select2@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.0.0.tgz#252710d172c7a7385f41292d3d3400c68ed93dbb" + integrity sha512-kRNuVdr5EbFQxXD7Fq8H3bYJo3bmE7QsIlxZQeSl6xfBK4nYGeLJ6ZGPwzKPFN9P6sfpZ4TBM2eOie9LgmHWLA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" select2 "^4.0.12" -"@abp/sweetalert@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-1.1.1.tgz#e055ea46eb4e3d53e623ee0aada9b2d16fea5610" - integrity sha512-V6K/qg7J/bdFmom2kaXYeiLvcmLHFl+MacPX4yYAK2biZdb2pWOkUdmcAzZdOT+UruKfLRhvraVC2uXDySi9NA== +"@abp/sweetalert@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.0.0.tgz#2bb99ba7c0b6154181bce8fc5a959d4520032279" + integrity sha512-uotKepUBfQL8hrwSxSDLBLiAesIZ8low6OLsFIXqkUDDQIgKWUpPBuTbP7XGiHvHBOXXLxmpQ+YeYe72eOPtXQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" sweetalert "^2.1.2" -"@abp/timeago@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-1.1.1.tgz#b626087ca35fb325e8e8a337552694fcbb8a6bf9" - integrity sha512-QYYih/4n6XhCqkRw7fBfyg58T5CHqJHyz7SAfq86RiKAJ4jVtjdSVxj3XKxz8eCb56wZGsO1xXXStI3vdLwwNw== +"@abp/timeago@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.0.0.tgz#6e410cbf09e252b9eb1cf03cdc7ea62424249694" + integrity sha512-rtZ/avYpCTIDq4ZjIxaSQxN9wuRnQwhZ+dS1HfHb2NZK2sqJnb+iH7Nm9IQPHk7y89mgSrMWskYW91KaABSolw== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" timeago "^1.6.7" -"@abp/toastr@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-1.1.1.tgz#aeb6a8ef8004fce136997f9ee3af7dd241890d50" - integrity sha512-GDewBppm+0FO6kTTy0huczoH9P5q6lFicHFAoEawAMkuWJFW/Ihv/YnEvKGDQwGftuVSWexfqBMN/RZ5YSOiGQ== +"@abp/toastr@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.0.0.tgz#a87591132c5586b16d521346ae9012affed0e3cd" + integrity sha512-SC8zWe87Kyec7mIsp9LRSmOlBfu+a1X658oS2eP/NscirU8tCnhvl/F2PeHWLjE8zkULLd8GZ8ht/XSU1gtTpg== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" toastr "^2.1.4" "@fortawesome/fontawesome-free@^5.11.2": diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json index 35b0592f57..e045906f81 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^2.0.0" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock index 12cad6c691..cbe246e8e3 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-1.1.1.tgz#a3d21f8cc5ede2e85b881fe69d9ecd5fc2268e47" - integrity sha512-ooXtCM3TWN69RU7xs6avnzOQBXzsiHY5BEIogzSBialZC4uG5H56qrIr4MbsFNae+PQM23Mw2tnJ/Z7dutURCQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.0.0.tgz#824f69bbbf868e4d72c36a0c6d0d11e18bd055b1" + integrity sha512-x3899Y+XZPj1z9aO0sqxsbwFebHCoEaLedcVEOJugJxM9JXfKuNG3tlvuurLirdaFQAs6WoMCFsQ9sbR8ZHm2w== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.shared" "^2.0.0" -"@abp/aspnetcore.mvc.ui.theme.shared@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-1.1.1.tgz#b5eb57bcebcf211a75cf7d540dcc89a0f9ade013" - integrity sha512-LilSyefzT1+rcTU7vbWxcO8TwBgGZIx6QbMUrDicSTH6LLJ9S5+yNaGNJbbZKDG6qx0BEoC1u8dE8KCUshwxoQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "^1.1.1" - "@abp/bootstrap" "^1.1.1" - "@abp/bootstrap-datepicker" "^1.1.1" - "@abp/datatables.net-bs4" "^1.1.1" - "@abp/font-awesome" "^1.1.1" - "@abp/jquery-form" "^1.1.1" - "@abp/jquery-validation-unobtrusive" "^1.1.1" - "@abp/lodash" "^1.1.1" - "@abp/luxon" "^1.1.1" - "@abp/malihu-custom-scrollbar-plugin" "^1.1.1" - "@abp/select2" "^1.1.1" - "@abp/sweetalert" "^1.1.1" - "@abp/timeago" "^1.1.1" - "@abp/toastr" "^1.1.1" - -"@abp/aspnetcore.mvc.ui@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-1.1.1.tgz#9d693516b6a215dfd2113db9ef52f02881a3e1d5" - integrity sha512-wZbptVCSxZzEjkJx+/sWrH9Pikp9nOy7V8Htz+L+S7/qAzfXu5PRVV8ahddfAcDHRk30buRhdbJlCVdt6hkZ6g== +"@abp/aspnetcore.mvc.ui.theme.shared@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.0.0.tgz#9859308a910ecd89fd008bc9622c0fd2ca10e5c6" + integrity sha512-fGIEOY3i9DgrEYay1B+IiTkBW94bBY9Fk0bou6ULxvb0jndqAnuws1mifBUrvKIF2cjKKBxO2iqBZ5n2IbHLhA== + dependencies: + "@abp/aspnetcore.mvc.ui" "^2.0.0" + "@abp/bootstrap" "^2.0.0" + "@abp/bootstrap-datepicker" "^2.0.0" + "@abp/datatables.net-bs4" "^2.0.0" + "@abp/font-awesome" "^2.0.0" + "@abp/jquery-form" "^2.0.0" + "@abp/jquery-validation-unobtrusive" "^2.0.0" + "@abp/lodash" "^2.0.0" + "@abp/luxon" "^2.0.0" + "@abp/malihu-custom-scrollbar-plugin" "^2.0.0" + "@abp/select2" "^2.0.0" + "@abp/sweetalert" "^2.0.0" + "@abp/timeago" "^2.0.0" + "@abp/toastr" "^2.0.0" + +"@abp/aspnetcore.mvc.ui@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.0.0.tgz#d7e67b99e6c31e670337e787d55dd49f81717155" + integrity sha512-fNxQINx6COagbA2UepOMgOZg6dqXlEKbiftSt+/yhUVkMW3+c8IILJODyHxAaJfGrYjHqKAcyItqR7vVCWDYsw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,135 +41,135 @@ path "^0.12.7" rimraf "^3.0.0" -"@abp/bootstrap-datepicker@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-1.1.1.tgz#fb1ceec1df24f384a6349c4acfb3627e02e4a42f" - integrity sha512-RIQLSrKBu/cTAU2lFenSAoKcMp7wgF4e3nP4/iOu5ZtCgti5vUjMEcqEvBxtlwKTHMXsTG4GtNKqjTwjXMjONQ== +"@abp/bootstrap-datepicker@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.0.0.tgz#e55064d554163865c3c4871c10cc8e8416cccbf4" + integrity sha512-kz6RYUDO6txf9gJXxXLL3aboM4OjJWwtdMD0pwhwWJCujqjaQi3YJIGZFXAxO2GhUq5bqX+KaBdOqdMl0gIasA== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-1.1.1.tgz#e16fae6ff6b18096276219edf3483fd8f41c925d" - integrity sha512-OIaGJaizhI8UNfy4bnw2xT2Z0QG7BJJrjxOPGepfd4jn/AUi/vFdOpJFWvu2P9PwSzRmn/LuSlr2WONDOdPVWQ== +"@abp/bootstrap@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.0.0.tgz#1c12edc28a9400a349049ab60f43a8123da0f2b0" + integrity sha512-sim0zmmUqtTvFDn4RQxJZPHCH4kxHsuep63O86sfn3XjgU8FDw6C2AP7j0l+q2yDt94qKTUMxg17MWDr5DqEEA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" bootstrap "^4.3.1" -"@abp/core@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-1.1.1.tgz#1379145980d6b142fd0123200c60ffb206149d56" - integrity sha512-OvUG7xRvk8nSqwC1s45YPnTuhC2OWe1AVa1nnC6FVHMH/g1Je7UJwnbu47K7uNS+lDRJUIktNbufYKiwutEjRg== +"@abp/core@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.0.0.tgz#19368fc332eec89d6442e6b991eed72af92f8ec8" + integrity sha512-aPb4anAZhmVxJrPnBNT33bRkYLUMmCqpPIrN+NCqejwiEIg5jb4zu4bOS71/oTxViNRF5S/XzKF6ceLD+CVq4g== -"@abp/datatables.net-bs4@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-1.1.1.tgz#c7e79534c2e4b51b3e98bcc0df3292cb08ae9d2e" - integrity sha512-t40xQIGBMLPZiSbcZHW3AwE8uk+xcl7OitBT1jym0XPKVtgJsHez3ynDE5v/PjHe+ColCG8lTRjRnNoXo5dzDw== +"@abp/datatables.net-bs4@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.0.0.tgz#bb7f1eddd0dee5ba8fb7a8e760d6b6fdc9374a65" + integrity sha512-7kCD4WhszgQOCQsAvXUGdDSqi+ZRWqENzjxoPQa9oPxFD2hy3AshYMvc+JQC71Pbp6YIZU09LV3pGkFPHO7lOw== dependencies: - "@abp/datatables.net" "^1.1.1" + "@abp/datatables.net" "^2.0.0" datatables.net-bs4 "^1.10.20" -"@abp/datatables.net@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-1.1.1.tgz#de8b362c29f452188624536cdd6feccad2b533e6" - integrity sha512-y76IDBlgc0n1YgQqJ+9cfzXpLwr2arhdIfSmqX+qRXz6GfVNY7e3JijkFSgDKUzKGYo1HZMzgJmDmeNIRwMZsQ== +"@abp/datatables.net@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.0.0.tgz#43fa36590373dccffc3f4402b2c94777c9ce70cd" + integrity sha512-xSUkrpWUfzqPIbo5pI6gcrrbc2R2yBlq+TLxry064ILHfGvZI8lwmv9rEkPP/hBTvk1YnzaZScFneaA0xJn9hw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" datatables.net "^1.10.20" -"@abp/font-awesome@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-1.1.1.tgz#7f0a210eb7611d75542028b0c88a0c83f1d9db50" - integrity sha512-6RHbixi7IVWAb3JCHrUmEYD3HmAH4R75Nuo54LvFzATrh4G6gdBONIeDuTo79OTxe4Zhp+WLxeA49Y21kt77mg== +"@abp/font-awesome@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.0.0.tgz#aed2718808820f2cbe54edf09a23a65d819a798d" + integrity sha512-zfNjgnvOnCQQh4egk3NE7e6FbaDbjCzFnVDiHelM+9R6GAfDZTMS9jm3X+vDrn8vQfqQmDpzTpcz0v0IMNM8/g== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" "@fortawesome/fontawesome-free" "^5.11.2" -"@abp/jquery-form@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-1.1.1.tgz#1dae1145da720e222efcb396906c3fbe5a3dd29f" - integrity sha512-AIIdN36f8xwr4LgiNnBHohJ5tlxh/r+DuDtXcScpZN6GWBE+XgUotN0pZIIva82IxCyUNdDudzgluX9IjI+00w== +"@abp/jquery-form@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.0.0.tgz#b987944d1aff79c540c951cca020ec49e1a0a004" + integrity sha512-2JmXIbeTM+9RQSTFOurbL6Vk0WR2RbwU+ApKVYJhF7NxEdE9cMGTrs1Z2xF85h28VrVAtPnpApd9ORaopSqaYQ== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-form "^4.2.2" -"@abp/jquery-validation-unobtrusive@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-1.1.1.tgz#aeba0883260f47ab22a39343817b1811fc2b81a9" - integrity sha512-q1b0KG8l3DXUiW8JXdq9l1jR/CwgzrZdxwdKGLB2J/oxHlywQIb7yrjR6WGCshjPpcx2SkOL0j/ZXMIMh533hQ== +"@abp/jquery-validation-unobtrusive@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.0.0.tgz#75d4f54732a4608542d968874e676f3de08126bf" + integrity sha512-CfU9/Q2dsaqLAWvqEb/VgMvJ5RC2IoSSW7l8SbduKOzqg7FiiBOpOd1AcqApjh0vuzZrRj+HcuoFBE+jWiberw== dependencies: - "@abp/jquery-validation" "^1.1.1" + "@abp/jquery-validation" "^2.0.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-1.1.1.tgz#03febd285ce9d7e5681619897967b0ccde7e8e04" - integrity sha512-YvAjIW8epp+ddu01BTUkZWPfEADAvNPJeUrrZ6OpcPWM15Tf+ddr4ATgJ1LCg0Bh5F09iQC855osow3lt8sc7g== +"@abp/jquery-validation@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.0.0.tgz#e8afe0e677f8a7ec1fd7818b916b1894904d3cc3" + integrity sha512-cjkk5TJyr09H6EO13/GtiIRZv/1FP94IX2tVstqtOa5x8uI8HWCgFpPrchg9ldBsBoBelyExoISjlzqiKNkIHA== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-validation "^1.19.1" -"@abp/jquery@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-1.1.1.tgz#56928814bb3df73c1c0014d4b18fef09ec06e195" - integrity sha512-kj4BTtXF0VbCzCqRXnRVEbGndR3F8NlbBhVQN6BQktOuZta3fvx7f2+pSok8vQv0ddmqUFY7FTT2Ei3l4363LQ== +"@abp/jquery@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.0.0.tgz#71781f3ad1914c1d2a516c7157080d7c82c9b7aa" + integrity sha512-2EfGIiSaXPTxfdb/jomae75Y77OlS4H+G1oWz7L6XDhBIzctVivbOKSJim3BI2no1GJWOM/U1r1TKEKzwJyY4Q== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" jquery "^3.4.1" -"@abp/lodash@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-1.1.1.tgz#aa6ef3a85b9827796e295f440b29f0611c508b5f" - integrity sha512-nH7bRS28Tf4hEXcpKHd1IM+MzYTqX8t3htGmsLX4UESQd52eODYOIldtX6gm3OW1O6ECwW6si/o0M2pTEpQqvg== +"@abp/lodash@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.0.0.tgz#ac5697a32a0ab0b3a0420c90ada1b87b853d19bc" + integrity sha512-QZWrDDfCjyW+q5lauwyrdFmsoDTC154k9ZZAkgAt9lJ6bbBWvDFgNEevg9etfh6heTBzBO7v7ftqDTt01/ArCQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" lodash "^4.17.15" -"@abp/luxon@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-1.1.1.tgz#ec389270d78bb271d52163ab3773f549aa91751e" - integrity sha512-WNu8JRSb5FDXfcDwjMYyeYeUN48uuDc/I2cdo3xd1rcY+lbmbzxoG9IYOlE8cRHdgX3z82qsZXFs2lcAy0Le2g== +"@abp/luxon@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.0.0.tgz#3bb3c3fcb0a9d74161a9f82afd840f9fdbffd42e" + integrity sha512-DloPuJrAcpgcPGkuaJCi9XfC+2JsKPxFXTtxNlgkEaTuFwKnrWeGSOZqwedfawnQA+YPGGg1hz+7+WPb0X4Fog== dependencies: luxon "^1.21.3" -"@abp/malihu-custom-scrollbar-plugin@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-1.1.1.tgz#73f8423c29d646dc7f0f270d1d7ef05947333e2a" - integrity sha512-n4b4QK/L1Czdx0oOpUR/bWjK9VENexfUSV/aMjwzHhDmEFABAmEfhIpudCYDwewGswrd7C9agmBvakv2rwPQeA== +"@abp/malihu-custom-scrollbar-plugin@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.0.0.tgz#6df2bcf1a3413880ebcf45017fe4966ad01e4fb9" + integrity sha512-ZqfVJyEMykg7IqemxV1jZ4FXu74F3eT8Be2EobSrc0avx27Oh6sD38TvgPv3e4etDbCekZYG1J7glKY7RzNPYw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-1.1.1.tgz#777967821cfcc4bd1c9fc895e913427fbb330abe" - integrity sha512-t0qcJhD+uo2+XWr4nmMQLAx7MRGQUBdZ81YmGty045ReoSaEKQf4haLkzBcMzpBRusiyMQO/PbxjtwMw/xJQTQ== +"@abp/select2@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.0.0.tgz#252710d172c7a7385f41292d3d3400c68ed93dbb" + integrity sha512-kRNuVdr5EbFQxXD7Fq8H3bYJo3bmE7QsIlxZQeSl6xfBK4nYGeLJ6ZGPwzKPFN9P6sfpZ4TBM2eOie9LgmHWLA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" select2 "^4.0.12" -"@abp/sweetalert@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-1.1.1.tgz#e055ea46eb4e3d53e623ee0aada9b2d16fea5610" - integrity sha512-V6K/qg7J/bdFmom2kaXYeiLvcmLHFl+MacPX4yYAK2biZdb2pWOkUdmcAzZdOT+UruKfLRhvraVC2uXDySi9NA== +"@abp/sweetalert@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.0.0.tgz#2bb99ba7c0b6154181bce8fc5a959d4520032279" + integrity sha512-uotKepUBfQL8hrwSxSDLBLiAesIZ8low6OLsFIXqkUDDQIgKWUpPBuTbP7XGiHvHBOXXLxmpQ+YeYe72eOPtXQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" sweetalert "^2.1.2" -"@abp/timeago@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-1.1.1.tgz#b626087ca35fb325e8e8a337552694fcbb8a6bf9" - integrity sha512-QYYih/4n6XhCqkRw7fBfyg58T5CHqJHyz7SAfq86RiKAJ4jVtjdSVxj3XKxz8eCb56wZGsO1xXXStI3vdLwwNw== +"@abp/timeago@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.0.0.tgz#6e410cbf09e252b9eb1cf03cdc7ea62424249694" + integrity sha512-rtZ/avYpCTIDq4ZjIxaSQxN9wuRnQwhZ+dS1HfHb2NZK2sqJnb+iH7Nm9IQPHk7y89mgSrMWskYW91KaABSolw== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" timeago "^1.6.7" -"@abp/toastr@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-1.1.1.tgz#aeb6a8ef8004fce136997f9ee3af7dd241890d50" - integrity sha512-GDewBppm+0FO6kTTy0huczoH9P5q6lFicHFAoEawAMkuWJFW/Ihv/YnEvKGDQwGftuVSWexfqBMN/RZ5YSOiGQ== +"@abp/toastr@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.0.0.tgz#a87591132c5586b16d521346ae9012affed0e3cd" + integrity sha512-SC8zWe87Kyec7mIsp9LRSmOlBfu+a1X658oS2eP/NscirU8tCnhvl/F2PeHWLjE8zkULLd8GZ8ht/XSU1gtTpg== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" toastr "^2.1.4" "@fortawesome/fontawesome-free@^5.11.2": diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json index 35b0592f57..e045906f81 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^2.0.0" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock index ad0afae66a..b21a160d43 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-1.1.1.tgz#a3d21f8cc5ede2e85b881fe69d9ecd5fc2268e47" - integrity sha512-ooXtCM3TWN69RU7xs6avnzOQBXzsiHY5BEIogzSBialZC4uG5H56qrIr4MbsFNae+PQM23Mw2tnJ/Z7dutURCQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.0.0.tgz#824f69bbbf868e4d72c36a0c6d0d11e18bd055b1" + integrity sha512-x3899Y+XZPj1z9aO0sqxsbwFebHCoEaLedcVEOJugJxM9JXfKuNG3tlvuurLirdaFQAs6WoMCFsQ9sbR8ZHm2w== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.shared" "^2.0.0" -"@abp/aspnetcore.mvc.ui.theme.shared@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-1.1.1.tgz#b5eb57bcebcf211a75cf7d540dcc89a0f9ade013" - integrity sha512-LilSyefzT1+rcTU7vbWxcO8TwBgGZIx6QbMUrDicSTH6LLJ9S5+yNaGNJbbZKDG6qx0BEoC1u8dE8KCUshwxoQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "^1.1.1" - "@abp/bootstrap" "^1.1.1" - "@abp/bootstrap-datepicker" "^1.1.1" - "@abp/datatables.net-bs4" "^1.1.1" - "@abp/font-awesome" "^1.1.1" - "@abp/jquery-form" "^1.1.1" - "@abp/jquery-validation-unobtrusive" "^1.1.1" - "@abp/lodash" "^1.1.1" - "@abp/luxon" "^1.1.1" - "@abp/malihu-custom-scrollbar-plugin" "^1.1.1" - "@abp/select2" "^1.1.1" - "@abp/sweetalert" "^1.1.1" - "@abp/timeago" "^1.1.1" - "@abp/toastr" "^1.1.1" - -"@abp/aspnetcore.mvc.ui@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-1.1.1.tgz#9d693516b6a215dfd2113db9ef52f02881a3e1d5" - integrity sha512-wZbptVCSxZzEjkJx+/sWrH9Pikp9nOy7V8Htz+L+S7/qAzfXu5PRVV8ahddfAcDHRk30buRhdbJlCVdt6hkZ6g== +"@abp/aspnetcore.mvc.ui.theme.shared@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.0.0.tgz#9859308a910ecd89fd008bc9622c0fd2ca10e5c6" + integrity sha512-fGIEOY3i9DgrEYay1B+IiTkBW94bBY9Fk0bou6ULxvb0jndqAnuws1mifBUrvKIF2cjKKBxO2iqBZ5n2IbHLhA== + dependencies: + "@abp/aspnetcore.mvc.ui" "^2.0.0" + "@abp/bootstrap" "^2.0.0" + "@abp/bootstrap-datepicker" "^2.0.0" + "@abp/datatables.net-bs4" "^2.0.0" + "@abp/font-awesome" "^2.0.0" + "@abp/jquery-form" "^2.0.0" + "@abp/jquery-validation-unobtrusive" "^2.0.0" + "@abp/lodash" "^2.0.0" + "@abp/luxon" "^2.0.0" + "@abp/malihu-custom-scrollbar-plugin" "^2.0.0" + "@abp/select2" "^2.0.0" + "@abp/sweetalert" "^2.0.0" + "@abp/timeago" "^2.0.0" + "@abp/toastr" "^2.0.0" + +"@abp/aspnetcore.mvc.ui@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.0.0.tgz#d7e67b99e6c31e670337e787d55dd49f81717155" + integrity sha512-fNxQINx6COagbA2UepOMgOZg6dqXlEKbiftSt+/yhUVkMW3+c8IILJODyHxAaJfGrYjHqKAcyItqR7vVCWDYsw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,135 +41,135 @@ path "^0.12.7" rimraf "^3.0.0" -"@abp/bootstrap-datepicker@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-1.1.1.tgz#fb1ceec1df24f384a6349c4acfb3627e02e4a42f" - integrity sha512-RIQLSrKBu/cTAU2lFenSAoKcMp7wgF4e3nP4/iOu5ZtCgti5vUjMEcqEvBxtlwKTHMXsTG4GtNKqjTwjXMjONQ== +"@abp/bootstrap-datepicker@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.0.0.tgz#e55064d554163865c3c4871c10cc8e8416cccbf4" + integrity sha512-kz6RYUDO6txf9gJXxXLL3aboM4OjJWwtdMD0pwhwWJCujqjaQi3YJIGZFXAxO2GhUq5bqX+KaBdOqdMl0gIasA== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-1.1.1.tgz#e16fae6ff6b18096276219edf3483fd8f41c925d" - integrity sha512-OIaGJaizhI8UNfy4bnw2xT2Z0QG7BJJrjxOPGepfd4jn/AUi/vFdOpJFWvu2P9PwSzRmn/LuSlr2WONDOdPVWQ== +"@abp/bootstrap@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.0.0.tgz#1c12edc28a9400a349049ab60f43a8123da0f2b0" + integrity sha512-sim0zmmUqtTvFDn4RQxJZPHCH4kxHsuep63O86sfn3XjgU8FDw6C2AP7j0l+q2yDt94qKTUMxg17MWDr5DqEEA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" bootstrap "^4.3.1" -"@abp/core@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-1.1.1.tgz#1379145980d6b142fd0123200c60ffb206149d56" - integrity sha512-OvUG7xRvk8nSqwC1s45YPnTuhC2OWe1AVa1nnC6FVHMH/g1Je7UJwnbu47K7uNS+lDRJUIktNbufYKiwutEjRg== +"@abp/core@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.0.0.tgz#19368fc332eec89d6442e6b991eed72af92f8ec8" + integrity sha512-aPb4anAZhmVxJrPnBNT33bRkYLUMmCqpPIrN+NCqejwiEIg5jb4zu4bOS71/oTxViNRF5S/XzKF6ceLD+CVq4g== -"@abp/datatables.net-bs4@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-1.1.1.tgz#c7e79534c2e4b51b3e98bcc0df3292cb08ae9d2e" - integrity sha512-t40xQIGBMLPZiSbcZHW3AwE8uk+xcl7OitBT1jym0XPKVtgJsHez3ynDE5v/PjHe+ColCG8lTRjRnNoXo5dzDw== +"@abp/datatables.net-bs4@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.0.0.tgz#bb7f1eddd0dee5ba8fb7a8e760d6b6fdc9374a65" + integrity sha512-7kCD4WhszgQOCQsAvXUGdDSqi+ZRWqENzjxoPQa9oPxFD2hy3AshYMvc+JQC71Pbp6YIZU09LV3pGkFPHO7lOw== dependencies: - "@abp/datatables.net" "^1.1.1" + "@abp/datatables.net" "^2.0.0" datatables.net-bs4 "^1.10.20" -"@abp/datatables.net@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-1.1.1.tgz#de8b362c29f452188624536cdd6feccad2b533e6" - integrity sha512-y76IDBlgc0n1YgQqJ+9cfzXpLwr2arhdIfSmqX+qRXz6GfVNY7e3JijkFSgDKUzKGYo1HZMzgJmDmeNIRwMZsQ== +"@abp/datatables.net@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.0.0.tgz#43fa36590373dccffc3f4402b2c94777c9ce70cd" + integrity sha512-xSUkrpWUfzqPIbo5pI6gcrrbc2R2yBlq+TLxry064ILHfGvZI8lwmv9rEkPP/hBTvk1YnzaZScFneaA0xJn9hw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" datatables.net "^1.10.20" -"@abp/font-awesome@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-1.1.1.tgz#7f0a210eb7611d75542028b0c88a0c83f1d9db50" - integrity sha512-6RHbixi7IVWAb3JCHrUmEYD3HmAH4R75Nuo54LvFzATrh4G6gdBONIeDuTo79OTxe4Zhp+WLxeA49Y21kt77mg== +"@abp/font-awesome@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.0.0.tgz#aed2718808820f2cbe54edf09a23a65d819a798d" + integrity sha512-zfNjgnvOnCQQh4egk3NE7e6FbaDbjCzFnVDiHelM+9R6GAfDZTMS9jm3X+vDrn8vQfqQmDpzTpcz0v0IMNM8/g== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" "@fortawesome/fontawesome-free" "^5.11.2" -"@abp/jquery-form@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-1.1.1.tgz#1dae1145da720e222efcb396906c3fbe5a3dd29f" - integrity sha512-AIIdN36f8xwr4LgiNnBHohJ5tlxh/r+DuDtXcScpZN6GWBE+XgUotN0pZIIva82IxCyUNdDudzgluX9IjI+00w== +"@abp/jquery-form@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.0.0.tgz#b987944d1aff79c540c951cca020ec49e1a0a004" + integrity sha512-2JmXIbeTM+9RQSTFOurbL6Vk0WR2RbwU+ApKVYJhF7NxEdE9cMGTrs1Z2xF85h28VrVAtPnpApd9ORaopSqaYQ== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-form "^4.2.2" -"@abp/jquery-validation-unobtrusive@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-1.1.1.tgz#aeba0883260f47ab22a39343817b1811fc2b81a9" - integrity sha512-q1b0KG8l3DXUiW8JXdq9l1jR/CwgzrZdxwdKGLB2J/oxHlywQIb7yrjR6WGCshjPpcx2SkOL0j/ZXMIMh533hQ== +"@abp/jquery-validation-unobtrusive@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.0.0.tgz#75d4f54732a4608542d968874e676f3de08126bf" + integrity sha512-CfU9/Q2dsaqLAWvqEb/VgMvJ5RC2IoSSW7l8SbduKOzqg7FiiBOpOd1AcqApjh0vuzZrRj+HcuoFBE+jWiberw== dependencies: - "@abp/jquery-validation" "^1.1.1" + "@abp/jquery-validation" "^2.0.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-1.1.1.tgz#03febd285ce9d7e5681619897967b0ccde7e8e04" - integrity sha512-YvAjIW8epp+ddu01BTUkZWPfEADAvNPJeUrrZ6OpcPWM15Tf+ddr4ATgJ1LCg0Bh5F09iQC855osow3lt8sc7g== +"@abp/jquery-validation@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.0.0.tgz#e8afe0e677f8a7ec1fd7818b916b1894904d3cc3" + integrity sha512-cjkk5TJyr09H6EO13/GtiIRZv/1FP94IX2tVstqtOa5x8uI8HWCgFpPrchg9ldBsBoBelyExoISjlzqiKNkIHA== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-validation "^1.19.1" -"@abp/jquery@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-1.1.1.tgz#56928814bb3df73c1c0014d4b18fef09ec06e195" - integrity sha512-kj4BTtXF0VbCzCqRXnRVEbGndR3F8NlbBhVQN6BQktOuZta3fvx7f2+pSok8vQv0ddmqUFY7FTT2Ei3l4363LQ== +"@abp/jquery@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.0.0.tgz#71781f3ad1914c1d2a516c7157080d7c82c9b7aa" + integrity sha512-2EfGIiSaXPTxfdb/jomae75Y77OlS4H+G1oWz7L6XDhBIzctVivbOKSJim3BI2no1GJWOM/U1r1TKEKzwJyY4Q== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" jquery "^3.4.1" -"@abp/lodash@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-1.1.1.tgz#aa6ef3a85b9827796e295f440b29f0611c508b5f" - integrity sha512-nH7bRS28Tf4hEXcpKHd1IM+MzYTqX8t3htGmsLX4UESQd52eODYOIldtX6gm3OW1O6ECwW6si/o0M2pTEpQqvg== +"@abp/lodash@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.0.0.tgz#ac5697a32a0ab0b3a0420c90ada1b87b853d19bc" + integrity sha512-QZWrDDfCjyW+q5lauwyrdFmsoDTC154k9ZZAkgAt9lJ6bbBWvDFgNEevg9etfh6heTBzBO7v7ftqDTt01/ArCQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" lodash "^4.17.15" -"@abp/luxon@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-1.1.1.tgz#ec389270d78bb271d52163ab3773f549aa91751e" - integrity sha512-WNu8JRSb5FDXfcDwjMYyeYeUN48uuDc/I2cdo3xd1rcY+lbmbzxoG9IYOlE8cRHdgX3z82qsZXFs2lcAy0Le2g== +"@abp/luxon@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.0.0.tgz#3bb3c3fcb0a9d74161a9f82afd840f9fdbffd42e" + integrity sha512-DloPuJrAcpgcPGkuaJCi9XfC+2JsKPxFXTtxNlgkEaTuFwKnrWeGSOZqwedfawnQA+YPGGg1hz+7+WPb0X4Fog== dependencies: luxon "^1.21.3" -"@abp/malihu-custom-scrollbar-plugin@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-1.1.1.tgz#73f8423c29d646dc7f0f270d1d7ef05947333e2a" - integrity sha512-n4b4QK/L1Czdx0oOpUR/bWjK9VENexfUSV/aMjwzHhDmEFABAmEfhIpudCYDwewGswrd7C9agmBvakv2rwPQeA== +"@abp/malihu-custom-scrollbar-plugin@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.0.0.tgz#6df2bcf1a3413880ebcf45017fe4966ad01e4fb9" + integrity sha512-ZqfVJyEMykg7IqemxV1jZ4FXu74F3eT8Be2EobSrc0avx27Oh6sD38TvgPv3e4etDbCekZYG1J7glKY7RzNPYw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-1.1.1.tgz#777967821cfcc4bd1c9fc895e913427fbb330abe" - integrity sha512-t0qcJhD+uo2+XWr4nmMQLAx7MRGQUBdZ81YmGty045ReoSaEKQf4haLkzBcMzpBRusiyMQO/PbxjtwMw/xJQTQ== +"@abp/select2@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.0.0.tgz#252710d172c7a7385f41292d3d3400c68ed93dbb" + integrity sha512-kRNuVdr5EbFQxXD7Fq8H3bYJo3bmE7QsIlxZQeSl6xfBK4nYGeLJ6ZGPwzKPFN9P6sfpZ4TBM2eOie9LgmHWLA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" select2 "^4.0.12" -"@abp/sweetalert@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-1.1.1.tgz#e055ea46eb4e3d53e623ee0aada9b2d16fea5610" - integrity sha512-V6K/qg7J/bdFmom2kaXYeiLvcmLHFl+MacPX4yYAK2biZdb2pWOkUdmcAzZdOT+UruKfLRhvraVC2uXDySi9NA== +"@abp/sweetalert@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.0.0.tgz#2bb99ba7c0b6154181bce8fc5a959d4520032279" + integrity sha512-uotKepUBfQL8hrwSxSDLBLiAesIZ8low6OLsFIXqkUDDQIgKWUpPBuTbP7XGiHvHBOXXLxmpQ+YeYe72eOPtXQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" sweetalert "^2.1.2" -"@abp/timeago@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-1.1.1.tgz#b626087ca35fb325e8e8a337552694fcbb8a6bf9" - integrity sha512-QYYih/4n6XhCqkRw7fBfyg58T5CHqJHyz7SAfq86RiKAJ4jVtjdSVxj3XKxz8eCb56wZGsO1xXXStI3vdLwwNw== +"@abp/timeago@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.0.0.tgz#6e410cbf09e252b9eb1cf03cdc7ea62424249694" + integrity sha512-rtZ/avYpCTIDq4ZjIxaSQxN9wuRnQwhZ+dS1HfHb2NZK2sqJnb+iH7Nm9IQPHk7y89mgSrMWskYW91KaABSolw== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" timeago "^1.6.7" -"@abp/toastr@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-1.1.1.tgz#aeb6a8ef8004fce136997f9ee3af7dd241890d50" - integrity sha512-GDewBppm+0FO6kTTy0huczoH9P5q6lFicHFAoEawAMkuWJFW/Ihv/YnEvKGDQwGftuVSWexfqBMN/RZ5YSOiGQ== +"@abp/toastr@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.0.0.tgz#a87591132c5586b16d521346ae9012affed0e3cd" + integrity sha512-SC8zWe87Kyec7mIsp9LRSmOlBfu+a1X658oS2eP/NscirU8tCnhvl/F2PeHWLjE8zkULLd8GZ8ht/XSU1gtTpg== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" toastr "^2.1.4" "@fortawesome/fontawesome-free@^5.11.2": From bf7406f9d525b7f6202f02cdd04a1471f157f44d Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 13 Jan 2020 16:35:33 +0300 Subject: [PATCH 180/411] docs: update ng changelog --- npm/ng-packs/CHANGELOG.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/npm/ng-packs/CHANGELOG.md b/npm/ng-packs/CHANGELOG.md index 3ee75c623d..64777880da 100644 --- a/npm/ng-packs/CHANGELOG.md +++ b/npm/ng-packs/CHANGELOG.md @@ -1,3 +1,41 @@ +# [2.0.0](https://github.com/abpframework/abp/compare/1.1.2...2.0.0) (2020-01-13) + + +### Bug Fixes + +* **core:** fix flattedRoutes manipulation ([2b2e0be](https://github.com/abpframework/abp/commit/2b2e0be51d9fb37188348f390b56df286de7a6bc)) +* **core:** fix nullable control in the config state ([756e858](https://github.com/abpframework/abp/commit/756e8588f3dd2d1035dbc22db3773653e28b1542)) +* **core:** update flattedRoutes when patchRoute action dispatched ([15a8279](https://github.com/abpframework/abp/commit/15a82794ac5173bd080d3aec46efb43bfc0614ae)) +* **permission-management:** fix twice executing problem of visible setter([ae16916](https://github.com/abpframework/abp/commit/ae16916ae2b03dfc25d9c4c5ceeb559dee34bde2)) +* **theme-shared:** fix remember me functionality [(#2610)](https://github.com/abpframework/abp/pull/2610) ([189a77f](https://github.com/abpframework/abp/commit/189a77f4c421398b841e67280f6f19c4ef56649d)), closes [(#2602)](https://github.com/abpframework/abp/issues/2602) + + +### Code Refactoring + +* remove deprecated functions, outputs, inputs etc. ([f1d0eba](https://github.com/abpframework/abp/commit/f1d0ebae856406213023af11632ed72849928b3e)), closes [#2476](https://github.com/abpframework/abp/issues/2476) + + +### Features + +* add state actions to related state services ([#2431](https://github.com/abpframework/abp/pull/2431)), closes ([#2430](https://github.com/abpframework/abp/pull/2430)) +* make some components replaceable ([#2522](https://github.com/abpframework/abp/pull/2522)), closes ([#2404](https://github.com/abpframework/abp/issues/2404)) +* **account:** add autocomplete attiributes for chromium based browsers ([343c847](https://github.com/abpframework/abp/commit/343c847fb70d634218de1b156b3a15557e27acda)) +* **account:** add the enableLocalLogin condition to auth-wrapper ([#2537](https://github.com/abpframework/abp/pull/2573)) ([0fb7ba4](https://github.com/abpframework/abp/commit/0fb7ba4614ebb64a00f19a9bef277a0fb9bee764)) +* **core:** add init directive ([5ae1071](https://github.com/abpframework/abp/commit/5ae10717d73b1d76711dcd68201ed6b0609c4112)) +* **core:** add ExtractFromGeneric type to ABP namespace ([1fe3b35](https://github.com/abpframework/abp/commit/1fe3b35076c5daddf9edc2a8396b62288cf105da)) +* **core:** add init directive to emit an output when the element initialized ([31c224c](https://github.com/abpframework/abp/commit/31c224c9f9c015e94877d1eba382d1cd415704c7)) +* **core:** fill the parentName property in flattedRoutes for child rotues ([17dd0a2](https://github.com/abpframework/abp/commit/17dd0a25a7dc2fa6268ce68f4f2f5d78f78a1f23)) +* **core:** create AddRoute action to add new elements to top navigation ([#2425](https://github.com/abpframework/abp/pull/2425)), closes ([#2186](https://github.com/abpframework/abp/pull/2186)) +* **theme-shared:** trigger unload confirmation in the modal component when form is dirty ([f59a294](https://github.com/abpframework/abp/commit/f59a2945b223a19750afd46da7e33deff2583328)) +* **theme-shared:** create new toast and confirmation components ([#2606](https://github.com/abpframework/abp/pull/2606)), closes ([#2537](https://github.com/abpframework/abp/issues/2537)) +* **theme-shared:** create table, pagination, loading components ([#2605](https://github.com/abpframework/abp/pull/2605)), related ([#2537](https://github.com/abpframework/abp/issues/2537)) + + +### BREAKING CHANGES + +* Deprecated functions, outputs, inputs addressed in issue #2476 are removed. + + # [1.1.0](https://github.com/abpframework/abp/compare/1.0.2...1.1.0) (2019-12-06) From 5c73a61e1c76f6e97cf49133fd2114c8d03de8bb Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Mon, 13 Jan 2020 16:57:09 +0300 Subject: [PATCH 181/411] updated AuditingMiddleware for AlwaysLogOnExceptions --- .../Auditing/AbpAuditingMiddleware.cs | 27 ++++++++++++------- .../Volo/Abp/Auditing/AbpAuditingOptions.cs | 7 ++--- .../Mvc/Auditing/AuditTestController_Tests.cs | 2 +- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs index f2929e3f5a..cc71797a5b 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs @@ -33,6 +33,23 @@ namespace Volo.Abp.AspNetCore.Auditing await next(context).ConfigureAwait(false); return; } + if (Options.AlwaysLogOnException) + { + using (var scope = _auditingManager.BeginScope()) + { + try + { + await next(context).ConfigureAwait(false); + return; + } + catch (Exception) + { + await scope.SaveAsync().ConfigureAwait(false); + if (!Options.HideErrors) + throw; + } + } + } using (var scope = _auditingManager.BeginScope()) { @@ -40,9 +57,8 @@ namespace Volo.Abp.AspNetCore.Auditing { await next(context).ConfigureAwait(false); } - catch (Exception ex) + catch (Exception) { - scope.AddException(ex); } finally { @@ -53,13 +69,6 @@ namespace Volo.Abp.AspNetCore.Auditing private bool ShouldWriteAuditLog(HttpContext httpContext) { - // IF selected, save audit logs on exception on GET requests even if audit log is disabled for GET requests. - if (Options.AlwaysLogOnException && - string.Equals(httpContext.Request.Method, HttpMethods.Get, StringComparison.OrdinalIgnoreCase)) - { - return true; - } - if (!Options.IsEnabled) { return false; diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AbpAuditingOptions.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AbpAuditingOptions.cs index 5dcae1e097..db13bdaf74 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AbpAuditingOptions.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AbpAuditingOptions.cs @@ -29,11 +29,11 @@ namespace Volo.Abp.Auditing /// /// Default: true. /// - public bool IsEnabledForAnonymousUsers { get; set; } = false; + public bool IsEnabledForAnonymousUsers { get; set; } /// - /// Audit log e xceptions. - /// Default: false. + /// Audit log on exceptions. + /// Default: true. /// public bool AlwaysLogOnException { get; set; } @@ -54,6 +54,7 @@ namespace Volo.Abp.Auditing IsEnabled = true; IsEnabledForAnonymousUsers = true; HideErrors = true; + AlwaysLogOnException = true; Contributors = new List(); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs index 97b211ba5a..b65f8eef1f 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs @@ -39,7 +39,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Auditing public async Task Should_Trigger_Middleware_And_AuditLog_Exception_Always() { _options.IsEnabled = false; - _options.AlwaysLogOnException = true; + _options.AlwaysLogOnException = false; await GetResponseAsync("api/audit-test/audit-fail", System.Net.HttpStatusCode.BadRequest); //await _auditingStore.Received().SaveAsync(Arg.Any()); //Won't work, save happens out of scope } From 1e15a541c0db72f6b5abd980fafa5a5b6e1c090c Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 13 Jan 2020 17:08:06 +0300 Subject: [PATCH 182/411] fix(theme-shared): fix table sort icon hiding problem --- .../components/sort-order-icon/sort-order-icon.component.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts index 1e80f8f585..7e5d62fb6a 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts @@ -36,9 +36,8 @@ export class SortOrderIconComponent { iconClass: string; get icon(): string { - if (!this.selectedSortKey) return 'sorting'; if (this.selectedSortKey === this.sortKey) return `sorting_${this.order}`; - else return ''; + else return 'sorting'; } sort(key: string) { From ca64497b1f8a3cba727a8877ae3041dab5e437fd Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Mon, 13 Jan 2020 17:32:18 +0300 Subject: [PATCH 183/411] reverted back --- .../Auditing/AbpAuditingMiddleware.cs | 26 +++++++------------ .../Mvc/Auditing/AuditTestController_Tests.cs | 1 + 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs index cc71797a5b..4f0e87f27f 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs @@ -33,23 +33,6 @@ namespace Volo.Abp.AspNetCore.Auditing await next(context).ConfigureAwait(false); return; } - if (Options.AlwaysLogOnException) - { - using (var scope = _auditingManager.BeginScope()) - { - try - { - await next(context).ConfigureAwait(false); - return; - } - catch (Exception) - { - await scope.SaveAsync().ConfigureAwait(false); - if (!Options.HideErrors) - throw; - } - } - } using (var scope = _auditingManager.BeginScope()) { @@ -59,6 +42,10 @@ namespace Volo.Abp.AspNetCore.Auditing } catch (Exception) { + if (!Options.HideErrors) + { + throw; + } } finally { @@ -69,6 +56,11 @@ namespace Volo.Abp.AspNetCore.Auditing private bool ShouldWriteAuditLog(HttpContext httpContext) { + if (Options.AlwaysLogOnException) + { + return true; + } + if (!Options.IsEnabled) { return false; diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs index b65f8eef1f..1f81118e03 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs @@ -40,6 +40,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Auditing { _options.IsEnabled = false; _options.AlwaysLogOnException = false; + _options.HideErrors = false; await GetResponseAsync("api/audit-test/audit-fail", System.Net.HttpStatusCode.BadRequest); //await _auditingStore.Received().SaveAsync(Arg.Any()); //Won't work, save happens out of scope } From 1a9fd66be77d9309ee45869c99ccab0e275f5647 Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Mon, 13 Jan 2020 19:14:39 +0300 Subject: [PATCH 184/411] updated AbpAuditingMiddleware --- .../Auditing/AbpAuditingMiddleware.cs | 42 ++++++++++--------- .../Mvc/Auditing/AuditTestController_Tests.cs | 6 +-- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs index 4f0e87f27f..621e78630e 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs @@ -33,7 +33,7 @@ namespace Volo.Abp.AspNetCore.Auditing await next(context).ConfigureAwait(false); return; } - + bool hasError = false; using (var scope = _auditingManager.BeginScope()) { try @@ -42,6 +42,7 @@ namespace Volo.Abp.AspNetCore.Auditing } catch (Exception) { + hasError = true; if (!Options.HideErrors) { throw; @@ -49,34 +50,37 @@ namespace Volo.Abp.AspNetCore.Auditing } finally { - await scope.SaveAsync().ConfigureAwait(false); + if (ShouldWriteAuditLog(context, hasError)) + { + await scope.SaveAsync().ConfigureAwait(false); + } } } } - private bool ShouldWriteAuditLog(HttpContext httpContext) + private bool ShouldWriteAuditLog(HttpContext httpContext, bool hasError = false) { - if (Options.AlwaysLogOnException) + if (!Options.IsEnabled) + { + return false; + } + + if (Options.AlwaysLogOnException || hasError) { return true; + } + + if (!Options.IsEnabledForAnonymousUsers && !CurrentUser.IsAuthenticated) + { + return false; } - if (!Options.IsEnabled) - { - return false; - } - - if (!Options.IsEnabledForAnonymousUsers && !CurrentUser.IsAuthenticated) - { - return false; - } - if (!Options.IsEnabledForGetRequests && - string.Equals(httpContext.Request.Method, HttpMethods.Get, StringComparison.OrdinalIgnoreCase)) - { - return false; - } - + string.Equals(httpContext.Request.Method, HttpMethods.Get, StringComparison.OrdinalIgnoreCase)) + { + return false; + } + return true; } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs index 1f81118e03..b411b20ee0 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs @@ -31,6 +31,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Auditing public async Task Should_Trigger_Middleware_And_AuditLog_Success_For_GetRequests() { _options.IsEnabledForGetRequests = true; + _options.AlwaysLogOnException = false; await GetResponseAsync("api/audit-test/audit-success"); //await _auditingStore.Received().SaveAsync(Arg.Any()); //Won't work, save happens out of scope } @@ -38,9 +39,8 @@ namespace Volo.Abp.AspNetCore.Mvc.Auditing [Fact] public async Task Should_Trigger_Middleware_And_AuditLog_Exception_Always() { - _options.IsEnabled = false; - _options.AlwaysLogOnException = false; - _options.HideErrors = false; + _options.IsEnabled = true; + _options.AlwaysLogOnException = true; await GetResponseAsync("api/audit-test/audit-fail", System.Net.HttpStatusCode.BadRequest); //await _auditingStore.Received().SaveAsync(Arg.Any()); //Won't work, save happens out of scope } From 969771306dd39a8a13bc72537e2209f0461647a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 13 Jan 2020 20:01:27 +0300 Subject: [PATCH 185/411] Fixed #2624: FullAuditedAggregateRootWithUser generic type wrong constraint. --- .../Entities/Auditing/FullAuditedAggregateRootWithUser.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedAggregateRootWithUser.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedAggregateRootWithUser.cs index cb0be46421..b2dbb8c280 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedAggregateRootWithUser.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedAggregateRootWithUser.cs @@ -4,12 +4,12 @@ using Volo.Abp.Auditing; namespace Volo.Abp.Domain.Entities.Auditing { /// - /// Implements to be a base class for full-audited aggregate roots. + /// Implements to be a base class for full-audited aggregate roots. /// /// Type of the user [Serializable] public abstract class FullAuditedAggregateRootWithUser : FullAuditedAggregateRoot, IFullAuditedObject - where TUser : IEntity + where TUser : IEntity { /// public virtual TUser Deleter { get; set; } @@ -22,13 +22,13 @@ namespace Volo.Abp.Domain.Entities.Auditing } /// - /// Implements to be a base class for full-audited aggregate roots. + /// Implements to be a base class for full-audited aggregate roots. /// /// Type of the primary key of the entity /// Type of the user [Serializable] public abstract class FullAuditedAggregateRootWithUser : FullAuditedAggregateRoot, IFullAuditedObject - where TUser : IEntity + where TUser : IEntity { /// public virtual TUser Deleter { get; set; } From 9e7aeb3b0bb3db122b1f88190af0bc596fb46f58 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 14 Jan 2020 10:35:48 +0300 Subject: [PATCH 186/411] style(theme-shared): fix table empty row styles --- npm/ng-packs/package.json | 26 +-- .../theme-basic/src/lib/constants/styles.ts | 4 + .../lib/components/table/table.component.html | 2 +- .../lib/components/table/table.component.ts | 4 +- .../src/lib/services/confirmation.service.ts | 2 +- .../tests/sort-order-icon.component.spec.ts | 2 +- npm/ng-packs/yarn.lock | 151 ++++++++---------- 7 files changed, 88 insertions(+), 103 deletions(-) diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index fa9799048e..085cbc9d4f 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": "^1.1.1", - "@abp/ng.account.config": "^1.1.1", - "@abp/ng.core": "^1.1.1", - "@abp/ng.feature-management": "^1.1.1", - "@abp/ng.identity": "^1.1.1", - "@abp/ng.identity.config": "^1.1.1", - "@abp/ng.permission-management": "^1.1.1", - "@abp/ng.setting-management": "^1.1.1", - "@abp/ng.setting-management.config": "^1.1.1", - "@abp/ng.tenant-management": "^1.1.1", - "@abp/ng.tenant-management.config": "^1.1.1", - "@abp/ng.theme.basic": "^1.1.1", - "@abp/ng.theme.shared": "^1.1.1", + "@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", "@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/theme-basic/src/lib/constants/styles.ts b/npm/ng-packs/packages/theme-basic/src/lib/constants/styles.ts index 24c3e84e42..cacf326031 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/constants/styles.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/constants/styles.ts @@ -64,4 +64,8 @@ export default ` .field-validation-error { font-size: 0.8em; } + +.ui-table .ui-table-tbody > tr.empty-row > div.empty-row-content { + border: 1px solid #c8c8c8; + } `; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html index 6898a9964b..11f4250db8 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html @@ -71,7 +71,7 @@ -
    +
    {{ emptyMessage | abpLocalization }}
    diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts index 3c9995a388..b4ac7eec5f 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts @@ -25,8 +25,8 @@ import { filter: none; } - .ui-table .ui-table-tbody > tr.empty-row > div { - margin: 10px; + .ui-table .ui-table-tbody > tr.empty-row > div.empty-row-content { + padding: 10px; text-align: center; } `, diff --git a/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts b/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts index 650019392b..f66dfd768d 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts @@ -50,7 +50,7 @@ export class ConfirmationService { ): Observable { this.confirmation$.next({ message, - title: title || 'AbpUi:AreYouSure', + title, severity: severity || 'neutral', options, }); diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/sort-order-icon.component.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/sort-order-icon.component.spec.ts index d351c39a74..a91f5b76c1 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/sort-order-icon.component.spec.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/sort-order-icon.component.spec.ts @@ -32,7 +32,7 @@ describe('SortOrderIconComponent', () => { component.sort(newKey); expect(component.selectedSortKey).toBe(newKey); expect(component.order).toBe('asc'); - expect(component.icon).toBe(''); + expect(component.icon).toBe('sorting'); }); test('should change order correctly when sort function called', () => { diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock index e0af31cd07..01e1a62823 100644 --- a/npm/ng-packs/yarn.lock +++ b/npm/ng-packs/yarn.lock @@ -2,26 +2,26 @@ # yarn lockfile v1 -"@abp/ng.account.config@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.account.config/-/ng.account.config-1.1.1.tgz#43de54dd12606a6bc10caace9e430bdb136206b6" - integrity sha512-d0Gj/BtB/YtsVMsyFJI+vcX+KE2CCKNpUQ6YC2rmIwPwOkbqV7UtbzMhxgHoG4lTTfh1pxclIOL6WFzQInI4kg== +"@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== dependencies: tslib "^1.9.0" -"@abp/ng.account@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-1.1.1.tgz#eddce66856d1133c4d7c04e861be019cfea6b25e" - integrity sha512-EUG7Hiv21KuOMmVSCxUBjMOlno4oYIUtrOUMNK/A/y42cr8UwUFmsu7HEx5J30Z0KWBn7w4vWvAy6KenqzMclQ== +"@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== dependencies: - "@abp/ng.account.config" "^1.1.1" - "@abp/ng.theme.shared" "^1.1.1" + "@abp/ng.account.config" "^2.0.0" + "@abp/ng.theme.shared" "^2.0.0" tslib "^1.9.0" -"@abp/ng.core@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-1.1.1.tgz#a08a06fff8fb58a913b619820120d93fa5120a1b" - integrity sha512-oCYQJPmiYr6UjnW6L5Dhd7rl0wvE2ABjWYT70IDLSaFjxHRlQ2exA2kKft4RMkCT0iPNzEfmdHZyqX/8AHCy8Q== +"@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== 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@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-1.1.1.tgz#d431a62fd677229421137c83e3ce1beb44f9d92c" - integrity sha512-Pji1vp9jWQacrRawBFRh/ao1zXE3ktbGmj1X+nCQ3o6Q7EnNattC7/KC6osqvonpfFDxpjEZP4cMyb3H1wHRIA== +"@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== dependencies: - "@abp/ng.theme.shared" "^1.1.1" + "@abp/ng.theme.shared" "^2.0.0" tslib "^1.9.0" -"@abp/ng.identity.config@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.identity.config/-/ng.identity.config-1.1.1.tgz#da264272ecebfbce99617443048951de317c23f9" - integrity sha512-d5BJBwfHsBoeEYF6dCHeoNVX/nRy1T7HOF6sjkFQN0Jihhk/XOv/r6CpgxnUKasXF0R2wadHrZZZOme6UL7AIw== +"@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== dependencies: tslib "^1.9.0" -"@abp/ng.identity@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-1.1.1.tgz#0776db2a4efe96953a7d46ea697689686c75fbf2" - integrity sha512-Gzz+/kgsDhTTrEMiNqDLSJvjTgk0ATy6Ud7uswoA3RCDlfcksbS5J7kHEsc6TRh6bZ1bC368Zj1F/XS7QAj/iA== +"@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== dependencies: - "@abp/ng.identity.config" "^1.1.1" - "@abp/ng.permission-management" "^1.1.1" - "@abp/ng.theme.shared" "^1.1.1" + "@abp/ng.identity.config" "^2.0.0" + "@abp/ng.permission-management" "^2.0.0" + "@abp/ng.theme.shared" "^2.0.0" tslib "^1.9.0" -"@abp/ng.permission-management@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-1.1.1.tgz#f0184639f9bf37a24c7dc3b18953bac0a521f926" - integrity sha512-3Omhdf/VrYjd4RA9R74ttFP4T+J4Kit8A/PjJIaiwV5j8DJ0WQeBek82P3Q3+EfhuS2ehWuSuz/DYmkcxkt1dw== +"@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== dependencies: - "@abp/ng.theme.shared" "^1.1.1" + "@abp/ng.theme.shared" "^2.0.0" tslib "^1.9.0" -"@abp/ng.setting-management.config@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.setting-management.config/-/ng.setting-management.config-1.1.1.tgz#6e19cb5f7894d2b6c5193f2e72abdac5be076356" - integrity sha512-QvWo8r+dL+IcQW0nRC7sPNhMCScSHcYPqJotUY1QCanEpXU56JIfPYkOKOtt3cJTA9U2jE2hBmv7fi8yTEy6Pg== +"@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== dependencies: tslib "^1.9.0" -"@abp/ng.setting-management@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-1.1.1.tgz#38cfd7c8b6cc0e29bd3a655e1aecff7e35aca10a" - integrity sha512-kwW9xC7xERo5ZDqGC4TaEXZKiHYZ3lIwGn8wVktX53ulGXrKT9N7BSVP8bBMJnJlIMNg7MpxjOYAR90gXrXdZw== +"@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== dependencies: - "@abp/ng.setting-management.config" "^1.1.1" - "@abp/ng.theme.shared" "^1.1.1" + "@abp/ng.setting-management.config" "^2.0.0" + "@abp/ng.theme.shared" "^2.0.0" tslib "^1.9.0" -"@abp/ng.tenant-management.config@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management.config/-/ng.tenant-management.config-1.1.1.tgz#1aee4705e6ec06954d5d04ad78bb02c636dc36ae" - integrity sha512-KoYPIqsm7a/VrMZumfFKBKYwzZm1zzJeyoWpf84PZ2gvhkuh45gYwvXzMHzQu/HQ6FpJ9+NL7ro/uee1ka+DzQ== +"@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== dependencies: tslib "^1.9.0" -"@abp/ng.tenant-management@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-1.1.1.tgz#b08a9498957f8dd54a2089d7d4cffafb48753508" - integrity sha512-hjs8U+lRA0y2yVa1tVZgm02kxyQdsmyMtzG8ZB76MFJThmMtf3ogrLHRGZ0etgQHe0bmMjkpdC84wS1VtyK5VA== +"@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== dependencies: - "@abp/ng.feature-management" "^1.1.1" - "@abp/ng.tenant-management.config" "^1.1.1" - "@abp/ng.theme.shared" "^1.1.1" + "@abp/ng.feature-management" "^2.0.0" + "@abp/ng.tenant-management.config" "^2.0.0" + "@abp/ng.theme.shared" "^2.0.0" tslib "^1.9.0" -"@abp/ng.theme.basic@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-1.1.1.tgz#ee3c3a35f4254a0f727b11bb343ceab3aa975773" - integrity sha512-1z13+H2UhIGDsbsd5uyhuBi3v4lxim1yIECZ3HxFJxIKthHO1wlVb8ka8WrIrxj7JBOl6f9srMCzuCNm2rMGLg== +"@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== dependencies: - "@abp/ng.theme.shared" "^1.1.1" + "@abp/ng.theme.shared" "^2.0.0" tslib "^1.9.0" -"@abp/ng.theme.shared@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-1.1.1.tgz#436b9c909a25cc5722c2a639399d05668a241262" - integrity sha512-eQDrznFKwD63cdO/HPSyGMwIFPmGhv4MAEgITyZkUY76g+owYa/tK+GEjpSqsvQsL//qrHqcG+nwuK9RrCBy+A== +"@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== dependencies: - "@abp/ng.core" "^1.1.1" + "@abp/ng.core" "^2.0.0" "@angular/cdk" "^8.2.3" "@fortawesome/fontawesome-free" "^5.11.2" "@ng-bootstrap/ng-bootstrap" "^5.1.4" @@ -119,7 +119,6 @@ bootstrap "^4.3.1" chart.js "^2.9.2" font-awesome "^4.7.0" - ngx-perfect-scrollbar "^8.0.0" primeicons "^2.0.0" primeng "^8.1.1" tslib "^1.9.0" @@ -8488,14 +8487,6 @@ ng-packagr@^5.7.1: terser "^4.1.2" update-notifier "^3.0.0" -ngx-perfect-scrollbar@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/ngx-perfect-scrollbar/-/ngx-perfect-scrollbar-8.0.0.tgz#19c1bbf9b1a36d89b00a68f7834e39427d29182f" - integrity sha512-IXoFbULQnxyJj0gdCcKCLE/6OW9HCP9KARzMCKS1kNxTuzG4DghjM2AaCBRM5/sFwdbn6rqOKMCINtHA8W8YCA== - dependencies: - perfect-scrollbar "^1.4.0" - resize-observer-polyfill "^1.5.0" - ngxs-reset-plugin@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/ngxs-reset-plugin/-/ngxs-reset-plugin-1.2.0.tgz#38dd8363f45cad7410e00ce346a98001241944f8" @@ -9409,11 +9400,6 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -perfect-scrollbar@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/perfect-scrollbar/-/perfect-scrollbar-1.4.0.tgz#5d014ef9775e1f43058a1dbae9ed1daf0e7091f1" - integrity sha512-/2Sk/khljhdrsamjJYS5NjrH+GKEHEwh7zFSiYyxROyYKagkE4kSn2zDQDRTOMo8mpT2jikxx6yI1dG7lNP/hw== - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -10251,11 +10237,6 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= -resize-observer-polyfill@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" - integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== - resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" From 4b1b051a027ad6fc263f685b82cfcd1541d13826 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 14 Jan 2020 16:37:53 +0800 Subject: [PATCH 187/411] Add PostConfigure & PostConfigureAll method to AbpModule. --- .../Volo.Abp.Core/Volo/Abp/Modularity/AbpModule.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModule.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModule.cs index 6153f4be97..f40c6caf12 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModule.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModule.cs @@ -121,5 +121,17 @@ namespace Volo.Abp.Modularity { ServiceConfigurationContext.Services.PreConfigure(configureOptions); } + + protected void PostConfigure(Action configureOptions) + where TOptions : class + { + ServiceConfigurationContext.Services.PostConfigure(configureOptions); + } + + protected void PostConfigureAll(Action configureOptions) + where TOptions : class + { + ServiceConfigurationContext.Services.PostConfigureAll(configureOptions); + } } } \ No newline at end of file From 530f5c6b2310394f86b4498dc437712f66f9c415 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 14 Jan 2020 11:38:48 +0300 Subject: [PATCH 188/411] Update AbpIoApiKeyService.cs --- .../Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs index 4ed8746ce6..e1939f37cc 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs @@ -81,8 +81,7 @@ namespace Volo.Abp.Cli.Licensing var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var apiKeyResult = JsonSerializer.Deserialize(responseContent); - if (apiKeyResult == null || - string.IsNullOrEmpty(apiKeyResult.ApiKey)) + if (string.IsNullOrEmpty(apiKeyResult?.ApiKey)) { _logger.LogError("Couldn't retrieve your NuGet API key!"); _logger.LogWarning(File.Exists(CliPaths.AccessToken) From 553508b15f835936175a8a391727698483269b70 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Tue, 14 Jan 2020 12:26:43 +0300 Subject: [PATCH 189/411] refactor(theme-shared): change toast close button style --- .../src/lib/components/toast/toast.component.html | 6 +++--- .../src/lib/components/toast/toast.component.scss | 12 +++++------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.html index 985ea58888..a7d5e77fb7 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.html +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.html @@ -3,14 +3,14 @@
    -
    {{ toast.title | abpLocalization: toast.options?.titleLocalizationParams }}
    -
    +

    {{ toast.message | abpLocalization: toast.options?.messageLocalizationParams }} -

    +

    diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss index 1bd780815c..be5c871082 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss @@ -45,7 +45,7 @@ } .toast-content { position: relative; - .close-button { + .toast-close-button { position: absolute; top: 0; right: 0; @@ -53,20 +53,16 @@ align-items: center; justify-content: center; margin: 0; - padding: 5px 10px 5px 5px; + padding: 0px 5px 0 0; width: 25px; height: 25px; border: none; border-radius: 50%; background: transparent; + color: inherit; &:focus { outline: none; } - .close-icon { - width: 16px; - height: 16px; - stroke: #000; - } } .toast-title { margin: 0; @@ -75,6 +71,8 @@ font-weight: 600; } .toast-message { + margin: 0; + padding: 0; } } } From 524ed4328df276973a15b487d73e23e0737b8715 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 14 Jan 2020 12:50:23 +0300 Subject: [PATCH 190/411] fix cli incorrect license error and warning resolves https://github.com/abpframework/abp/issues/2626 --- .../Volo/Abp/Cli/Auth/AuthService.cs | 5 +++++ .../Volo/Abp/Cli/Http/CliHttpClient.cs | 3 ++- .../Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs | 16 ++++++---------- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs index 3fdd0aae1d..a8ac0e0357 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs @@ -45,5 +45,10 @@ namespace Volo.Abp.Cli.Auth FileHelper.DeleteIfExists(CliPaths.AccessToken); return Task.CompletedTask; } + + public static bool IsLoggedIn() + { + return File.Exists(CliPaths.AccessToken); + } } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs index 81c64a3b5f..ca1a23fcfc 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs @@ -3,6 +3,7 @@ using System.IO; using System.Net.Http; using System.Text; using IdentityModel.Client; +using Volo.Abp.Cli.Auth; namespace Volo.Abp.Cli.Http { @@ -29,7 +30,7 @@ namespace Volo.Abp.Cli.Http private static void AddAuthentication(HttpClient client) { - if (!File.Exists(CliPaths.AccessToken)) + if (!AuthService.IsLoggedIn()) { return; } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs index e1939f37cc..a22b6bba4a 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs @@ -8,6 +8,7 @@ using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Polly; using Polly.Extensions.Http; +using Volo.Abp.Cli.Auth; using Volo.Abp.Cli.Http; using Volo.Abp.Cli.ProjectBuilding; using Volo.Abp.DependencyInjection; @@ -31,6 +32,11 @@ namespace Volo.Abp.Cli.Licensing public async Task GetApiKeyOrNullAsync(bool invalidateCache = false) { + if (!AuthService.IsLoggedIn()) + { + return null; + } + if (invalidateCache) { _apiKeyResult = null; @@ -81,16 +87,6 @@ namespace Volo.Abp.Cli.Licensing var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var apiKeyResult = JsonSerializer.Deserialize(responseContent); - if (string.IsNullOrEmpty(apiKeyResult?.ApiKey)) - { - _logger.LogError("Couldn't retrieve your NuGet API key!"); - _logger.LogWarning(File.Exists(CliPaths.AccessToken) - ? "Make sure you have an active session and license on commercial.abp.io. To re-sign in you can use the CLI command \"abp login \"." - : "You are not signed in to commercial.abp.io. Use the CLI command \"abp login \" to sign in."); - - return null; - } - return apiKeyResult; } } From c39755e281b7d74464e2c5990407120b28079a75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 14 Jan 2020 13:24:43 +0300 Subject: [PATCH 191/411] ABP Framework v2.0 blog post --- .../2020-01-15 v2_0_Release/Post.md | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md diff --git a/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md new file mode 100644 index 0000000000..36905df43c --- /dev/null +++ b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md @@ -0,0 +1,73 @@ +# ABP Framework v2.0 Has Been Released + +ABP Framework v2.0 has been released in this week. This post explains why we've released an early major version and what is changed with the v2.0. + +## Why 2.0 instead of 1.2? + +Actually, it was planned to release v1.2 after the [v1.1.2](https://github.com/abpframework/abp/releases/tag/1.1.2) release. However, [it is reported](https://github.com/abpframework/abp/issues/2026) that v1.x has some **performance** and **stability** problems on Linux, especially when you deploy your application into **Linux** containers with **low CPU and memory** resources. + +We have investigated the problem deeply and have seen that the root cause of the problem is related to the implementation of **intercepting async methods**. In addition, there were some **async over sync** usages effected the thread pool optimization. + +Finally, we **solved all the problems** with the huge help of the **community**. But we also had some important **design decisions** which cause some **breaking changes** and we had to change the major version number of the framework because of the **semantic versioning**. + +Most of the applications won't be effected by [the breaking changes](https://github.com/abpframework/abp/releases), or it will be trivial to make necessary changes. + +## Breaking Changes + +### Removed Some Sync APIs + +We've [removed some sync APIs](https://github.com/abpframework/abp/pull/2464) because they eventually causes async over sync problems. Because some of the interceptors need to use async APIs and if they intercept sync methods they need to call async over sync. + +**Async over sync** problem is a classic problem of C# when you need to **call an async method inside a sync method**. While there are some solutions to this problem, they all have **disadvantages** and it is suggested to **not write** such code at all. You can find plenty of documents related to this topic on the web, so I will not write more about it. + +So, to not cause this problem; + +* Removed sync [Repository](https://docs.abp.io/en/abp/latest/Repositories) methods (like Insert, Update... etc). +* Removed sync APIs of the [Unit Of Work](https://docs.abp.io/en/abp/latest/Unit-Of-Work). +* Removed sync API of the [background jobs](https://docs.abp.io/en/abp/latest/Background-Jobs). +* Removed sync APIs of [Audit logging](https://docs.abp.io/en/abp/latest/Audit-Logging). + +Also removed some other rarely used sync APIs. If you get any compile error, just use the async versions of these APIs. + +### Always Async! + +Beginning from the v2.0, ABP framework assumes that you are writing your application code async. Otherwise, some framework funtionalities may not properly work. + +It is suggested to write async for all your [application services](https://docs.abp.io/en/abp/latest/Application-Services), [repository methods](https://docs.abp.io/en/abp/latest/Repositories), controller actions, page handlers. + +Even if your application service method doesn't need to be async, write it as async, because interceptors perform async operations (for authorization, unit of work... etc.). You can return `Task.Completed` from a method that doesn't make an async call. + +Example: + +````csharp +public Task GetValueAsync() +{ + ... + return Task.CompletedTask(42); +} +```` + +The example above doesn't need to be async because it doesn't perform an async call to any service. However, making it async helps to the ABP framework to run interceptors without async over sync calls. + +This rule doesn't force you to write every method async. This would not be good and would be tedious. It is only needed for the intercepted services (especially for [application services](https://docs.abp.io/en/abp/latest/Application-Services) and [repository methods](https://docs.abp.io/en/abp/latest/Repositories)) + +### Other Breaking Changes + +See [the release notes](https://github.com/abpframework/abp/releases/tag/2.0.0) for the other breaking changes while most of them will not effect your application code. + +## New Features + +This release also contains a few new features and tens of enhancements. Some of them are; + +* [#2597](https://github.com/abpframework/abp/pull/2597) New Volo.Abp.AspNetCore.Serilog package. +* [#2526](https://github.com/abpframework/abp/issues/2526) Client side validation for the dynamic C# client proxies. +* [#2374](https://github.com/abpframework/abp/issues/2374) Async background jobs. +* [#265](https://github.com/abpframework/abp/issues/265) Managing the application shutdown. +* [#2472](https://github.com/abpframework/abp/issues/2472) Implemented DeviceFlowCodes and TokenCleanupService for the IdentityServer module. + +See [the release notes](https://github.com/abpframework/abp/releases/tag/2.0.0) for the other features, enhancements and bug fixes. + +## Documentation + +We've completed some missing documentation with the v2.0 release. In the next weeks, we will mostly focus on the basic documentation and tutorials. + From 97bc1d03bca144b658530ec021b55943aae1bd98 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 14 Jan 2020 13:51:46 +0300 Subject: [PATCH 192/411] chore: update favicon files --- npm/ng-packs/apps/dev-app/src/favicon.ico | Bin 948 -> 102968 bytes templates/app/angular/src/favicon.ico | Bin 5430 -> 102968 bytes templates/module/angular/src/favicon.ico | Bin 5430 -> 102968 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/npm/ng-packs/apps/dev-app/src/favicon.ico b/npm/ng-packs/apps/dev-app/src/favicon.ico index 997406ad22c29aae95893fb3d666c30258a09537..39695854d21146f87f3c65b27b9baef29b609255 100644 GIT binary patch literal 102968 zcmeI537pq+{>Q&#(w&J=Nlo~pW0Qn59Wxb$bSNuPvRT%hqf4s;ZCSZ(OWK-7Y)i-r zZEQ`BWU(4$h17J>bWX=~%{0yb`I^3;@t%*GgB-i_?eTc}yx-r?{dphX@9!Ex5EGOS z^e-l;AAC?X2(CpQHEO@!pkhpLdbJ=(N(%M%L2%hITswWg{Go3(h~chiXMdP2K1AzcFXkM=vQ{WM`>iK5IQHnHPQRzt zxkvx;s7jSiY*7E1QRg0e@=fmruisv=!i!UmiT(7r-c?Q>^;)%O7fpC5@2#Ahhc^GJ zc5>$0C7GKhH6QZVg@0M|&$Vr0QyMMH=rZ<+jg^Mi%Dysf$mp&MT9hAtOjga5#7eo% zGP;fLU+3RXrM>z31*vgKJ@U>8o_Y89phy2Bf`-j1jQZ1)u}K$x6jT4?v(qwTGiKeA zHD<-h+f$OuP5Lb6qfu?Y7@Ji-V?ffhLFHz3NS$`{((5kWxw^xI2B+jSed3wQ-T>bO zj~sPJaQ+{=WDg3KW!zk;Y3|K(S*CgxBl++`JUy(6z(p?=ty|YGk=d|n7^S(%X_z(L|&WIn=HLt>ZQ_|ydUtr;T zdSyLY#Igrv4-by~9>>cSTZimE4LMSznFLY?oLkyLnpE zd)n5`UYXYPwE4GW&AoEptxvsn@modAv*ozES`5p2szyqSw75|tnh*SPR_=#sv+f=d zlXd;YV<*Sw)yg_Kt>4{U6VqF!?Yg&ZTtb^&qtfoEaN6A?nq)0b=~sSu#q5NPDi{9! z!EeU=ZAI;GUCnMqo>=FOrrDd*)+MxBwy?{Rtv608KRhmDU~0~B8C6pH#SZWN_11rn z?wXu8krq2UO-Zga>9YxGcN}@zg9(ZE&aIL)qusQ%NBpJl{mU}iT*ApMeBzBF40H2G z38NlQ!Drq%XJp*HX>X3t?6zw|a)sPpY3pXk^lG0TpRjB|w++Fi?MIf&ZaO77Cih_~ zf>*n)XrIxoL*9`Czsy{9b=vilKB#oog0)3#D0W%KC)=0CkLtRx6MnPg?*s0>vemnn zcIX%69+C08c0|)_Ip6GBS~+82-MnELucp8AHIBA#e%ix#cU`h>#+a@f`qUdcVqn8z z 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 Kp#2tJdH+9GLJime literal 948 zcmV;l155mgP)CBYU7IjCFmI-B}4sMJt3^s9NVg!P0 z6hDQy(L`XWMkB@zOLgN$4KYz;j0zZxq9KKdpZE#5@k0crP^5f9KO};h)ZDQ%ybhht z%t9#h|nu0K(bJ ztIkhEr!*UyrZWQ1k2+YkGqDi8Z<|mIN&$kzpKl{cNP=OQzXHz>vn+c)F)zO|Bou>E z2|-d_=qY#Y+yOu1a}XI?cU}%04)zz%anD(XZC{#~WreV!a$7k2Ug`?&CUEc0EtrkZ zL49MB)h!_K{H(*l_93D5tO0;BUnvYlo+;yss%n^&qjt6fZOa+}+FDO(~2>G z2dx@=JZ?DHP^;b7*Y1as5^uphBsh*s*z&MBd?e@I>-9kU>63PjP&^#5YTOb&x^6Cf z?674rmSHB5Fk!{Gv7rv!?qX#ei_L(XtwVqLX3L}$MI|kJ*w(rhx~tc&L&xP#?cQow zX_|gx$wMr3pRZIIr_;;O|8fAjd;1`nOeu5K(pCu7>^3E&D2OBBq?sYa(%S?GwG&_0-s%_v$L@R!5H_fc)lOb9ZoOO#p`Nn`KU z3LTTBtjwo`7(HA6 z7gmO$yTR!5L>Bsg!X8616{JUngg_@&85%>W=mChTR;x4`P=?PJ~oPuy5 zU-L`C@_!34D21{fD~Y8NVnR3t;aqZI3fIhmgmx}$oc-dKDC6Ap$Gy>a!`A*x2L1v0 WcZ@i?LyX}70000Q&#(w&J=Nlo~pW0Qn59Wxb$bSNuPvRT%hqf4s;ZCSZ(OWK-7Y)i-r zZEQ`BWU(4$h17J>bWX=~%{0yb`I^3;@t%*GgB-i_?eTc}yx-r?{dphX@9!Ex5EGOS z^e-l;AAC?X2(CpQHEO@!pkhpLdbJ=(N(%M%L2%hITswWg{Go3(h~chiXMdP2K1AzcFXkM=vQ{WM`>iK5IQHnHPQRzt zxkvx;s7jSiY*7E1QRg0e@=fmruisv=!i!UmiT(7r-c?Q>^;)%O7fpC5@2#Ahhc^GJ zc5>$0C7GKhH6QZVg@0M|&$Vr0QyMMH=rZ<+jg^Mi%Dysf$mp&MT9hAtOjga5#7eo% zGP;fLU+3RXrM>z31*vgKJ@U>8o_Y89phy2Bf`-j1jQZ1)u}K$x6jT4?v(qwTGiKeA zHD<-h+f$OuP5Lb6qfu?Y7@Ji-V?ffhLFHz3NS$`{((5kWxw^xI2B+jSed3wQ-T>bO zj~sPJaQ+{=WDg3KW!zk;Y3|K(S*CgxBl++`JUy(6z(p?=ty|YGk=d|n7^S(%X_z(L|&WIn=HLt>ZQ_|ydUtr;T zdSyLY#Igrv4-by~9>>cSTZimE4LMSznFLY?oLkyLnpE zd)n5`UYXYPwE4GW&AoEptxvsn@modAv*ozES`5p2szyqSw75|tnh*SPR_=#sv+f=d zlXd;YV<*Sw)yg_Kt>4{U6VqF!?Yg&ZTtb^&qtfoEaN6A?nq)0b=~sSu#q5NPDi{9! z!EeU=ZAI;GUCnMqo>=FOrrDd*)+MxBwy?{Rtv608KRhmDU~0~B8C6pH#SZWN_11rn z?wXu8krq2UO-Zga>9YxGcN}@zg9(ZE&aIL)qusQ%NBpJl{mU}iT*ApMeBzBF40H2G z38NlQ!Drq%XJp*HX>X3t?6zw|a)sPpY3pXk^lG0TpRjB|w++Fi?MIf&ZaO77Cih_~ zf>*n)XrIxoL*9`Czsy{9b=vilKB#oog0)3#D0W%KC)=0CkLtRx6MnPg?*s0>vemnn zcIX%69+C08c0|)_Ip6GBS~+82-MnELucp8AHIBA#e%ix#cU`h>#+a@f`qUdcVqn8z z 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 Kp#2tJdH+9GLJime literal 5430 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 z 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 Kp#2tJdH+9GLJime literal 5430 zcmc(je{54#6vvCoAI3i*G5%$U7!sA3wtMZ$fH6V9C`=eXGJb@R1%(I_{vnZtpD{6n z5Pl{DmxzBDbrB>}`90e12m8T*36WoeDLA&SD_hw{H^wM!cl_RWcVA!I+x87ee975; z@4kD^=bYPn&pmG@(+JZ`rqQEKxW<}RzhW}I!|ulN=fmjVi@x{p$cC`)5$a!)X&U+blKNvN5tg=uLvuLnuqRM;Yc*swiexsoh#XPNu{9F#c`G zQLe{yWA(Y6(;>y|-efAy11k<09(@Oo1B2@0`PtZSkqK&${ zgEY}`W@t{%?9u5rF?}Y7OL{338l*JY#P!%MVQY@oqnItpZ}?s z!r?*kwuR{A@jg2Chlf0^{q*>8n5Ir~YWf*wmsh7B5&EpHfd5@xVaj&gqsdui^spyL zB|kUoblGoO7G(MuKTfa9?pGH0@QP^b#!lM1yHWLh*2iq#`C1TdrnO-d#?Oh@XV2HK zKA{`eo{--^K&MW66Lgsktfvn#cCAc*(}qsfhrvOjMGLE?`dHVipu1J3Kgr%g?cNa8 z)pkmC8DGH~fG+dlrp(5^-QBeEvkOvv#q7MBVLtm2oD^$lJZx--_=K&Ttd=-krx(Bb zcEoKJda@S!%%@`P-##$>*u%T*mh+QjV@)Qa=Mk1?#zLk+M4tIt%}wagT{5J%!tXAE;r{@=bb%nNVxvI+C+$t?!VJ@0d@HIyMJTI{vEw0Ul ze(ha!e&qANbTL1ZneNl45t=#Ot??C0MHjjgY8%*mGisN|S6%g3;Hlx#fMNcL<87MW zZ>6moo1YD?P!fJ#Jb(4)_cc50X5n0KoDYfdPoL^iV`k&o{LPyaoqMqk92wVM#_O0l z09$(A-D+gVIlq4TA&{1T@BsUH`Bm=r#l$Z51J-U&F32+hfUP-iLo=jg7Xmy+WLq6_tWv&`wDlz#`&)Jp~iQf zZP)tu>}pIIJKuw+$&t}GQuqMd%Z>0?t%&BM&Wo^4P^Y z)c6h^f2R>X8*}q|bblAF?@;%?2>$y+cMQbN{X$)^R>vtNq_5AB|0N5U*d^T?X9{xQnJYeU{ zoZL#obI;~Pp95f1`%X3D$Mh*4^?O?IT~7HqlWguezmg?Ybq|7>qQ(@pPHbE9V?f|( z+0xo!#m@Np9PljsyxBY-UA*{U*la#8Wz2sO|48_-5t8%_!n?S$zlGe+NA%?vmxjS- zHE5O3ZarU=X}$7>;Okp(UWXJxI%G_J-@IH;%5#Rt$(WUX?6*Ux!IRd$dLP6+SmPn= z8zjm4jGjN772R{FGkXwcNv8GBcZI#@Y2m{RNF_w8(Z%^A*!bS*!}s6sh*NnURytky humW;*g7R+&|Ledvc- Date: Tue, 14 Jan 2020 13:52:40 +0300 Subject: [PATCH 193/411] fix(theme-shared): fix date formatting for ngb datepicker --- .../src/lib/utils/date-parser-formatter.ts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/utils/date-parser-formatter.ts b/npm/ng-packs/packages/theme-shared/src/lib/utils/date-parser-formatter.ts index 5bae578d16..a18f6813c8 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/utils/date-parser-formatter.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/utils/date-parser-formatter.ts @@ -31,8 +31,17 @@ export class DateParserFormatter extends NgbDateParserFormatter { return { year: toInteger(dateParts[0]), month: null, day: null }; } else if (dateParts.length === 2 && isNumber(dateParts[0]) && isNumber(dateParts[1])) { return { year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: null }; - } else if (dateParts.length === 3 && isNumber(dateParts[0]) && isNumber(dateParts[1]) && isNumber(dateParts[2])) { - return { year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: toInteger(dateParts[2]) }; + } else if ( + dateParts.length === 3 && + isNumber(dateParts[0]) && + isNumber(dateParts[1]) && + isNumber(dateParts[2]) + ) { + return { + year: toInteger(dateParts[0]), + month: toInteger(dateParts[1]), + day: toInteger(dateParts[2]), + }; } } return null; @@ -40,7 +49,7 @@ export class DateParserFormatter extends NgbDateParserFormatter { format(date: NgbDateStruct): string { if (date && this.datePipe) { - return this.datePipe.transform(new Date(date.year, date.month, date.day), 'shortDate'); + return this.datePipe.transform(new Date(date.year, date.month - 1, date.day), 'shortDate'); } else { return date ? `${date.year}-${isNumber(date.month) ? padNumber(date.month) : ''}-${ From af08ea52abc550c986a7638224d1eeadb826dd0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 14 Jan 2020 14:35:52 +0300 Subject: [PATCH 194/411] Update post --- .../2020-01-15 v2_0_Release/Post.md | 76 ++++++++++++++++--- 1 file changed, 67 insertions(+), 9 deletions(-) diff --git a/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md index 36905df43c..b11ac5004e 100644 --- a/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md +++ b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md @@ -1,8 +1,12 @@ -# ABP Framework v2.0 Has Been Released +# ABP Framework v2.0 and the ABP Commercial -ABP Framework v2.0 has been released in this week. This post explains why we've released an early major version and what is changed with the v2.0. +ABP Framework v2.0 has been released in this week. This post explains why we've released an **early major version** and what is changed with the v2.0. -## Why 2.0 instead of 1.2? +In addition to the v2.0 release, we've also announcing the **ABP Commercial** which is a set of professional modules, tools, themes and services built on top of the open source ABP framework + +## ABP Framework v2.0 + +### Why 2.0 instead of 1.2? Actually, it was planned to release v1.2 after the [v1.1.2](https://github.com/abpframework/abp/releases/tag/1.1.2) release. However, [it is reported](https://github.com/abpframework/abp/issues/2026) that v1.x has some **performance** and **stability** problems on Linux, especially when you deploy your application into **Linux** containers with **low CPU and memory** resources. @@ -12,9 +16,9 @@ Finally, we **solved all the problems** with the huge help of the **community**. Most of the applications won't be effected by [the breaking changes](https://github.com/abpframework/abp/releases), or it will be trivial to make necessary changes. -## Breaking Changes +### Breaking Changes -### Removed Some Sync APIs +#### Removed Some Sync APIs We've [removed some sync APIs](https://github.com/abpframework/abp/pull/2464) because they eventually causes async over sync problems. Because some of the interceptors need to use async APIs and if they intercept sync methods they need to call async over sync. @@ -29,7 +33,7 @@ So, to not cause this problem; Also removed some other rarely used sync APIs. If you get any compile error, just use the async versions of these APIs. -### Always Async! +#### Always Async! Beginning from the v2.0, ABP framework assumes that you are writing your application code async. Otherwise, some framework funtionalities may not properly work. @@ -51,11 +55,11 @@ The example above doesn't need to be async because it doesn't perform an async c This rule doesn't force you to write every method async. This would not be good and would be tedious. It is only needed for the intercepted services (especially for [application services](https://docs.abp.io/en/abp/latest/Application-Services) and [repository methods](https://docs.abp.io/en/abp/latest/Repositories)) -### Other Breaking Changes +#### Other Breaking Changes See [the release notes](https://github.com/abpframework/abp/releases/tag/2.0.0) for the other breaking changes while most of them will not effect your application code. -## New Features +### New Features This release also contains a few new features and tens of enhancements. Some of them are; @@ -67,7 +71,61 @@ This release also contains a few new features and tens of enhancements. Some of See [the release notes](https://github.com/abpframework/abp/releases/tag/2.0.0) for the other features, enhancements and bug fixes. -## Documentation +### Documentation We've completed some missing documentation with the v2.0 release. In the next weeks, we will mostly focus on the basic documentation and tutorials. +## ABP Commercial + +[ABP Commercial](https://commercial.abp.io/) is a set of professional **modules, tools, themes and services** built on top of the open source ABP framework. + +* It provides [professional modules](https://commercial.abp.io/modules) in addition to ABP Framework's free & [open source modules](https://docs.abp.io/en/abp/latest/Modules/Index). +* It includes a beautiful [UI theme](https://commercial.abp.io/themes). +* It provides [ABP Suite](https://commercial.abp.io/tools/suite), a tool to assist your development to make you more productive. It currently can create full-stack CRUD pages in a few seconds by configuring your entity properties. More functionalities will be added by the time. +* [Premium support](https://commercial.abp.io/support) for enterprise companies. + +In addition to these standard set of features, we will provide customer basis services. See the [commercial.abp.io](https://commercial.abp.io/) web site for other details. + +### ABP Framework vs the ABP Commercial + +The ABP Commercial **is not a paid version** of the ABP Framework. You can think it as **additional benefits** for professional companies. If you have budget, you can use it to save your time and develop your product faster. + +ABP Framework is open source & free and will always be like that. + +As a principle, we build the main infrastructure as open source while we sell additional pre-built application features, themes and tools. If you were following the [ASP.NET Boilerplate](https://aspnetboilerplate.com/) & the [ASP.NET Zero](https://aspnetzero.com/) products, the main idea is similar. + +Buying a commercial license saves your significant time and effort and you can focus on your own business much more, you take a dedicated and high priority support. Also, in this way, you support the ABP core team since we are spending most of our time to develop, maintain and support the open source ABP Framework. + +### Pricing + +You can build **unlimited projects/products**, sell to **unlimited customers**, host in **unlimited of servers** without any restriction. Pricing is mostly based on your **developer count**, required **support level** and **source code** access. There are three main packages; + +* **Team license**: Includes all the modules, themes and tools. Allows to develop your product with 3 developers. You can buy additional developer licenses. +* **Business license**: Allows to download the source code of all the modules and the themes. Also, includes 5 developer licenses by default. You can buy additional developer licenses. +* **Enterprise license**: Provides unlimited and private support in addition to the benefits of the business license. + +See the [pricing page](https://commercial.abp.io/pricing) for details. In addition to the standard packages, we are also providing custom services and custom licensing. [Contact us](https://commercial.abp.io/contact) if you have any questions. + +#### License Comparison + +The license price changes based on your developer count, required support level and source code access. + +##### The Source Code + +Team license doesn't include the source code of the pre-built modules & themes. It uses all these modules as NuGet & NPM packages. In this was, you can easily get new features and bug fixes by just updating the package dependencies. But you can't access their source code. So you don't have to possibility to embed a module's source code into your application and freely change the source code. + +Pre-built modules provides some level of customizability and extensibility and allows you to override services, UI parts and so on. We are working on to make them much more customizable and extensible. So, if you don't need to make major changes on the pre-built modules, the team license will be ideal for you; Because it is cheaper and allows you to easily get new features and bug fixes. + +Business and Enterprise licenses allow you to download the source code of any module or theme when you need. They also uses the same startup template with the team license, so all modules are used as NuGet and NPM packages. But in case of need, you can remove the package dependencies for a module and embed its source code into your own solution to completely customize it. In this case, upgrading the module will not be as easy as before when a new version is available. You don't have to upgrade it, surely. But if you want, you should do it yourself using some merge tool or Git branch system. + +#### License Lifetime + +ABP Commercial license is **perpetual**, that means you can **use it forever** and continue to develop your applications. + +However, the following services are for one year: + +* Premium **support** ends after one year. You can continue to get the community support. +* You can not get **updates** of the modules & themes after one year. You can continue to use the last obtained version. You can even get bug fixes and enhancements for your current major version. +* You can use the ABP **Suite** tooling for one year. + +If you want to continue to get these benefits, you can extend your license period. Renewing price is 20% less than the regular price. \ No newline at end of file From ae53dc740add3120a0092802ed0ce2e07d327f0d Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 14 Jan 2020 14:59:32 +0300 Subject: [PATCH 195/411] chore: install typescript to scripts folder --- npm/ng-packs/scripts/package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/scripts/package.json b/npm/ng-packs/scripts/package.json index 14550a8277..c5f1527943 100644 --- a/npm/ng-packs/scripts/package.json +++ b/npm/ng-packs/scripts/package.json @@ -16,13 +16,13 @@ "commander": "^4.0.1", "execa": "^2.0.3", "fs-extra": "^8.1.0", - "prompt-confirm": "^2.0.4", - "typescript": "^3.7.4" + "prompt-confirm": "^2.0.4" }, "devDependencies": { "@types/node": "^13.1.2", "esm": "^3.2.25", "ts-node": "^8.5.4", - "tsconfig-paths": "^3.9.0" + "tsconfig-paths": "^3.9.0", + "typescript": "^3.7.4" } } From 69a03f1ece9ea2bf1e729892281d5f5a05c35dd9 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 14 Jan 2020 15:17:45 +0300 Subject: [PATCH 196/411] fix(scripts): remove version control from publish script --- npm/ng-packs/scripts/publish.ts | 9 --------- 1 file changed, 9 deletions(-) diff --git a/npm/ng-packs/scripts/publish.ts b/npm/ng-packs/scripts/publish.ts index 04907b451f..b7e5d4f219 100644 --- a/npm/ng-packs/scripts/publish.ts +++ b/npm/ng-packs/scripts/publish.ts @@ -5,15 +5,6 @@ const publish = async () => { const versions = ['major', 'minor', 'patch', 'premajor', 'preminor', 'prepatch', 'prerelease']; let nextSemanticVersion = (process.argv[2] || '').toLowerCase(); - if (versions.indexOf(nextSemanticVersion) < 0) { - console.log( - "Please enter the next semantic version like this: 'npm run publish patch'. Available versions:\n " + - JSON.stringify(versions), - ); - - process.exit(1); - } - try { await execa('yarn', ['install-new-dependencies'], { stdout: 'inherit' }); From 8106ed568603a7a6576020a55c7a23c46e1892a2 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Tue, 14 Jan 2020 15:46:19 +0300 Subject: [PATCH 197/411] Improved ABP Framework v2.0 and the ABP Commercial blog post. --- .../2020-01-15 v2_0_Release/Post.md | 107 +++++++++--------- 1 file changed, 54 insertions(+), 53 deletions(-) diff --git a/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md index b11ac5004e..b87945f11b 100644 --- a/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md +++ b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md @@ -1,131 +1,132 @@ # ABP Framework v2.0 and the ABP Commercial -ABP Framework v2.0 has been released in this week. This post explains why we've released an **early major version** and what is changed with the v2.0. +ABP Framework v2.0 has been released this week. This post explains why we have released an **early major version** and what is changed with version 2.0. -In addition to the v2.0 release, we've also announcing the **ABP Commercial** which is a set of professional modules, tools, themes and services built on top of the open source ABP framework +In addition to the v2.0 release, we have also announced **ABP Commercial** which is a set of professional modules, tools, themes, and services built on top of the open-source ABP framework. ## ABP Framework v2.0 ### Why 2.0 instead of 1.2? -Actually, it was planned to release v1.2 after the [v1.1.2](https://github.com/abpframework/abp/releases/tag/1.1.2) release. However, [it is reported](https://github.com/abpframework/abp/issues/2026) that v1.x has some **performance** and **stability** problems on Linux, especially when you deploy your application into **Linux** containers with **low CPU and memory** resources. +It was planned to release v1.2 after the [v1.1.2](https://github.com/abpframework/abp/releases/tag/1.1.2) release. However, [it is reported](https://github.com/abpframework/abp/issues/2026) that v1.x has some **performance** and **stability** issues on Linux, especially when you deploy your application to **Linux** containers with **low CPU and memory** resources. -We have investigated the problem deeply and have seen that the root cause of the problem is related to the implementation of **intercepting async methods**. In addition, there were some **async over sync** usages effected the thread pool optimization. +We have investigated the problem deeply and have seen that the root cause of the problem was related to the implementation of **intercepting `async ` methods**. Besides, there were some **`async` over `sync`** usages that effected the thread pool optimization. -Finally, we **solved all the problems** with the huge help of the **community**. But we also had some important **design decisions** which cause some **breaking changes** and we had to change the major version number of the framework because of the **semantic versioning**. +Finally, we **solved all the problems** with the great help of the **community**. But we also had some important **design decisions** which cause some **breaking changes** and we had to change the major version number of the framework because of the **semantic versioning**. -Most of the applications won't be effected by [the breaking changes](https://github.com/abpframework/abp/releases), or it will be trivial to make necessary changes. +Most of the applications won't be affected by [the breaking changes](https://github.com/abpframework/abp/releases), or it will be trivial to make these necessary changes. ### Breaking Changes #### Removed Some Sync APIs -We've [removed some sync APIs](https://github.com/abpframework/abp/pull/2464) because they eventually causes async over sync problems. Because some of the interceptors need to use async APIs and if they intercept sync methods they need to call async over sync. +Some of the interceptors are required to use `async` APIs. When they intercept `sync` methods, they need to call `async` over `sync`. This eventually ends up with `async` over `sync` problem. That's why we have [removed some sync APIs](https://github.com/abpframework/abp/pull/2464). -**Async over sync** problem is a classic problem of C# when you need to **call an async method inside a sync method**. While there are some solutions to this problem, they all have **disadvantages** and it is suggested to **not write** such code at all. You can find plenty of documents related to this topic on the web, so I will not write more about it. +**`Async` over `sync`** pattern is a classical problem of `C#` when you need to **call an `async` method inside a `sync` method**. While there are some workarounds to this problem, they all have **disadvantages** and it is suggested to **not write** such code at all. You can find many documents related to this topic on the web. -So, to not cause this problem; +To avoid this problem, we have removed: -* Removed sync [Repository](https://docs.abp.io/en/abp/latest/Repositories) methods (like Insert, Update... etc). -* Removed sync APIs of the [Unit Of Work](https://docs.abp.io/en/abp/latest/Unit-Of-Work). -* Removed sync API of the [background jobs](https://docs.abp.io/en/abp/latest/Background-Jobs). -* Removed sync APIs of [Audit logging](https://docs.abp.io/en/abp/latest/Audit-Logging). +- `sync` [repository](https://docs.abp.io/en/abp/latest/Repositories) methods (like `insert`, `update`, etc...), +- `sync` APIs of the [unit of work](https://docs.abp.io/en/abp/latest/Unit-Of-Work), +- `sync ` APIs of the [background jobs](https://docs.abp.io/en/abp/latest/Background-Jobs), +- `sync` APIs of the [audit logging](https://docs.abp.io/en/abp/latest/Audit-Logging), +- some other rarely used `sync` APIs. -Also removed some other rarely used sync APIs. If you get any compile error, just use the async versions of these APIs. +If you get any compile error, just use the `async` versions of these APIs. #### Always Async! -Beginning from the v2.0, ABP framework assumes that you are writing your application code async. Otherwise, some framework funtionalities may not properly work. +Beginning from the v2.0, the ABP framework assumes that you are writing your application code `async` first. Otherwise, some framework functionalities may not properly work. -It is suggested to write async for all your [application services](https://docs.abp.io/en/abp/latest/Application-Services), [repository methods](https://docs.abp.io/en/abp/latest/Repositories), controller actions, page handlers. +It is suggested to write `async` to all your [application services](https://docs.abp.io/en/abp/latest/Application-Services), [repository methods](https://docs.abp.io/en/abp/latest/Repositories), controller actions, page handlers. -Even if your application service method doesn't need to be async, write it as async, because interceptors perform async operations (for authorization, unit of work... etc.). You can return `Task.Completed` from a method that doesn't make an async call. +Even if your application service method doesn't need to be `async` , set it as `async` , because interceptors perform `async` operations (for authorization, unit of work, etc...). You can return `Task.Completed` from a method that doesn't make an `async` call. Example: ````csharp public Task GetValueAsync() { - ... + //this method doesn't make any async call. return Task.CompletedTask(42); } ```` -The example above doesn't need to be async because it doesn't perform an async call to any service. However, making it async helps to the ABP framework to run interceptors without async over sync calls. +The example above normally doesn't need to be `async` because it doesn't perform an `async` call. However, making it `async` helps the ABP framework to run interceptors without `async` over sync calls. -This rule doesn't force you to write every method async. This would not be good and would be tedious. It is only needed for the intercepted services (especially for [application services](https://docs.abp.io/en/abp/latest/Application-Services) and [repository methods](https://docs.abp.io/en/abp/latest/Repositories)) +This rule doesn't force you to write every method `async` . This would not be good and would be tedious. It is only needed for the intercepted services (especially for [application services](https://docs.abp.io/en/abp/latest/Application-Services) and [repository methods](https://docs.abp.io/en/abp/latest/Repositories)) #### Other Breaking Changes -See [the release notes](https://github.com/abpframework/abp/releases/tag/2.0.0) for the other breaking changes while most of them will not effect your application code. +See [the release notes](https://github.com/abpframework/abp/releases/tag/2.0.0) for the other breaking changes. Most of them will not affect your application code. ### New Features -This release also contains a few new features and tens of enhancements. Some of them are; +This release also contains some new features and tens of enhancements: -* [#2597](https://github.com/abpframework/abp/pull/2597) New Volo.Abp.AspNetCore.Serilog package. -* [#2526](https://github.com/abpframework/abp/issues/2526) Client side validation for the dynamic C# client proxies. -* [#2374](https://github.com/abpframework/abp/issues/2374) Async background jobs. -* [#265](https://github.com/abpframework/abp/issues/265) Managing the application shutdown. -* [#2472](https://github.com/abpframework/abp/issues/2472) Implemented DeviceFlowCodes and TokenCleanupService for the IdentityServer module. +- [#2597](https://github.com/abpframework/abp/pull/2597) New `Volo.Abp.AspNetCore.Serilog` package. +- [#2526](https://github.com/abpframework/abp/issues/2526) Client-side validation for the dynamic `C#` client proxies. +- [#2374](https://github.com/abpframework/abp/issues/2374) `Async` background jobs. +- [#265](https://github.com/abpframework/abp/issues/265) Managing the application shutdown. +- [#2472](https://github.com/abpframework/abp/issues/2472) Implemented `DeviceFlowCodes` and `TokenCleanupService` for the `IdentityServer` module. -See [the release notes](https://github.com/abpframework/abp/releases/tag/2.0.0) for the other features, enhancements and bug fixes. +See [the release notes](https://github.com/abpframework/abp/releases/tag/2.0.0) for the complete list of features, enhancements and bug fixes. ### Documentation -We've completed some missing documentation with the v2.0 release. In the next weeks, we will mostly focus on the basic documentation and tutorials. +We have completed some missing documentation with the v2.0 release. In the following weeks, we will mostly focus on the basic documentation and tutorials. ## ABP Commercial -[ABP Commercial](https://commercial.abp.io/) is a set of professional **modules, tools, themes and services** built on top of the open source ABP framework. +[ABP Commercial](https://commercial.abp.io/) is a set of professional **modules, tools, themes, and services** built on top of the open-source ABP framework. -* It provides [professional modules](https://commercial.abp.io/modules) in addition to ABP Framework's free & [open source modules](https://docs.abp.io/en/abp/latest/Modules/Index). -* It includes a beautiful [UI theme](https://commercial.abp.io/themes). -* It provides [ABP Suite](https://commercial.abp.io/tools/suite), a tool to assist your development to make you more productive. It currently can create full-stack CRUD pages in a few seconds by configuring your entity properties. More functionalities will be added by the time. -* [Premium support](https://commercial.abp.io/support) for enterprise companies. +- It provides [professional modules](https://commercial.abp.io/modules) in addition to the ABP Framework's free & [open source modules](https://docs.abp.io/en/abp/latest/Modules/Index). +- It includes a beautiful a [UI theme](https://commercial.abp.io/themes). +- It provides [ABP Suite](https://commercial.abp.io/tools/suite); A tool to assist your development to make you more productive. It currently can create full-stack CRUD pages in a few seconds by configuring your entity properties. More functionalities will be added over time. +- [Premium support](https://commercial.abp.io/support) for enterprise companies. In addition to these standard set of features, we will provide customer basis services. See the [commercial.abp.io](https://commercial.abp.io/) web site for other details. ### ABP Framework vs the ABP Commercial -The ABP Commercial **is not a paid version** of the ABP Framework. You can think it as **additional benefits** for professional companies. If you have budget, you can use it to save your time and develop your product faster. +The ABP Commercial **is not a paid version** of the ABP Framework. You can consider it as **set of additional benefits** for professional companies. You can use it to save your time and develop your product faster. -ABP Framework is open source & free and will always be like that. +ABP Framework is open source & free and will always be free! -As a principle, we build the main infrastructure as open source while we sell additional pre-built application features, themes and tools. If you were following the [ASP.NET Boilerplate](https://aspnetboilerplate.com/) & the [ASP.NET Zero](https://aspnetzero.com/) products, the main idea is similar. +As a principle, we build the main infrastructure as open-source and sell additional pre-built application features, themes, and tools. The main idea similar to the [ASP.NET Boilerplate](https://aspnetboilerplate.com/) & the [ASP.NET Zero](https://aspnetzero.com/) products. -Buying a commercial license saves your significant time and effort and you can focus on your own business much more, you take a dedicated and high priority support. Also, in this way, you support the ABP core team since we are spending most of our time to develop, maintain and support the open source ABP Framework. +Buying a commercial license saves you significant time and effort and you can focus on your own business, besides you get dedicated and high priority support. Also, you will be supporting the ABP core team since we are spending most of our time to develop, maintain and support the open-source ABP Framework. ### Pricing -You can build **unlimited projects/products**, sell to **unlimited customers**, host in **unlimited of servers** without any restriction. Pricing is mostly based on your **developer count**, required **support level** and **source code** access. There are three main packages; +You can build **unlimited projects/products**, sell to **unlimited customers**, host **unlimited servers** without any restriction. Pricing is mostly based on the **developer count**, **support level** and **source code** requirement. There are three main packages; -* **Team license**: Includes all the modules, themes and tools. Allows to develop your product with 3 developers. You can buy additional developer licenses. -* **Business license**: Allows to download the source code of all the modules and the themes. Also, includes 5 developer licenses by default. You can buy additional developer licenses. -* **Enterprise license**: Provides unlimited and private support in addition to the benefits of the business license. +- **Team license**: Includes all the modules, themes and tools. Allows developing your product with up to 3 developers. You can buy additional developer licenses. +- **Business license**: Allows downloading the source code of all the modules and the themes. Also, it includes 5 developer licenses by default. You can buy additional developer licenses. +- **Enterprise license**: Provides unlimited and private support in addition to the benefits of the business license. -See the [pricing page](https://commercial.abp.io/pricing) for details. In addition to the standard packages, we are also providing custom services and custom licensing. [Contact us](https://commercial.abp.io/contact) if you have any questions. +See the [pricing page](https://commercial.abp.io/pricing) for details. In addition to the standard packages, we are also providing custom services and custom licensing. [Contact us](https://commercial.abp.io/contact) if you have further questions. #### License Comparison -The license price changes based on your developer count, required support level and source code access. +The license price changes based on your developer count, support level and source-code access. -##### The Source Code +##### The Source-Code -Team license doesn't include the source code of the pre-built modules & themes. It uses all these modules as NuGet & NPM packages. In this was, you can easily get new features and bug fixes by just updating the package dependencies. But you can't access their source code. So you don't have to possibility to embed a module's source code into your application and freely change the source code. +Team license doesn't include the source-code of the pre-built modules & themes. It uses all these modules as `NuGet` & `NPM` packages. In this way, you can easily get new features and bug fixes by just updating the package dependencies. But you can't access their source-code. So you don't have the possibility to embed a module's source code into your application and freely change the source-code. -Pre-built modules provides some level of customizability and extensibility and allows you to override services, UI parts and so on. We are working on to make them much more customizable and extensible. So, if you don't need to make major changes on the pre-built modules, the team license will be ideal for you; Because it is cheaper and allows you to easily get new features and bug fixes. +Pre-built modules provide some level of customization and extensibility and allow you to override services, UI parts and so on. We are working on to make them much more customizable and extensible. If you don't need to make major changes in the pre-built modules, the team license will be ideal for you, because it is cheaper and allows you to easily get new features and bug fixes. -Business and Enterprise licenses allow you to download the source code of any module or theme when you need. They also uses the same startup template with the team license, so all modules are used as NuGet and NPM packages. But in case of need, you can remove the package dependencies for a module and embed its source code into your own solution to completely customize it. In this case, upgrading the module will not be as easy as before when a new version is available. You don't have to upgrade it, surely. But if you want, you should do it yourself using some merge tool or Git branch system. +Business and Enterprise licenses allow you to download the source-code of any module or the theme when you need it. They also use the same startup template with the team license, so all modules are used as `NuGet` & `NPM` packages. But in case of need, you can remove the package dependencies for a module and embed its source-code into your own solution to completely customize it. In this case, upgrading the module will not be as easy as before when a new version is available. You don't have to upgrade it, surely! But if you want, you should do it yourself using some merge tool or `Git` branch system. #### License Lifetime -ABP Commercial license is **perpetual**, that means you can **use it forever** and continue to develop your applications. +ABP Commercial license is **perpetual**, which means you can **use it forever** and continue to develop your applications. -However, the following services are for one year: +However, the following services are covered for one year: -* Premium **support** ends after one year. You can continue to get the community support. -* You can not get **updates** of the modules & themes after one year. You can continue to use the last obtained version. You can even get bug fixes and enhancements for your current major version. -* You can use the ABP **Suite** tooling for one year. +- Premium **support** ends after one year. You can continue to get community support. +- You can not get **updates** of the modules & the themes after one year. You can continue to use the last obtained version. You can even get bug fixes and enhancements for your current major version. +- You can use the **ABP Suite** tool for one year. If you want to continue to get these benefits, you can extend your license period. Renewing price is 20% less than the regular price. \ No newline at end of file From 071b3a9b32d575656efd77f4c339d36f65fe4353 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Tue, 14 Jan 2020 15:48:26 +0300 Subject: [PATCH 198/411] Update Post.md --- docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md index b87945f11b..c4646e66d1 100644 --- a/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md +++ b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md @@ -10,7 +10,7 @@ In addition to the v2.0 release, we have also announced **ABP Commercial** which It was planned to release v1.2 after the [v1.1.2](https://github.com/abpframework/abp/releases/tag/1.1.2) release. However, [it is reported](https://github.com/abpframework/abp/issues/2026) that v1.x has some **performance** and **stability** issues on Linux, especially when you deploy your application to **Linux** containers with **low CPU and memory** resources. -We have investigated the problem deeply and have seen that the root cause of the problem was related to the implementation of **intercepting `async ` methods**. Besides, there were some **`async` over `sync`** usages that effected the thread pool optimization. +We have investigated the problem deeply and have seen that the root cause of the problem was related to the implementation of **intercepting `async` methods**. Besides, there were some **`async` over `sync`** usages that effected the thread pool optimization. Finally, we **solved all the problems** with the great help of the **community**. But we also had some important **design decisions** which cause some **breaking changes** and we had to change the major version number of the framework because of the **semantic versioning**. @@ -28,7 +28,7 @@ To avoid this problem, we have removed: - `sync` [repository](https://docs.abp.io/en/abp/latest/Repositories) methods (like `insert`, `update`, etc...), - `sync` APIs of the [unit of work](https://docs.abp.io/en/abp/latest/Unit-Of-Work), -- `sync ` APIs of the [background jobs](https://docs.abp.io/en/abp/latest/Background-Jobs), +- `sync` APIs of the [background jobs](https://docs.abp.io/en/abp/latest/Background-Jobs), - `sync` APIs of the [audit logging](https://docs.abp.io/en/abp/latest/Audit-Logging), - some other rarely used `sync` APIs. From fb4b8b8c4dcf489db4a097f433f462412f45332d Mon Sep 17 00:00:00 2001 From: olicooper Date: Tue, 14 Jan 2020 17:36:33 +0000 Subject: [PATCH 199/411] Grammatical issues on Account en.json Using "self-registration" rather than "self user registration" to align _DisplayName:Abp.Account.IsSelfRegistrationEnabled_ with _SelfRegistrationDisabledMessage_. --- .../Volo/Abp/Account/Localization/Resources/en.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json index 1f8c0f2eca..ea2d94f5f2 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json @@ -1,16 +1,16 @@ { "culture": "en", "texts": { - "UserName": "User name", + "UserName": "Username", "EmailAddress": "Email address", - "UserNameOrEmailAddress": "User name or email address", + "UserNameOrEmailAddress": "Username or email address", "Password": "Password", "RememberMe": "Remember me", "UseAnotherServiceToLogin": "Use another service to log in", "UserLockedOutMessage": "The user account has been locked out due to invalid login attempts. Please wait a while and try again.", "InvalidUserNameOrPassword": "Invalid username or password!", "LoginIsNotAllowed": "You are not allowed to login! You need to confirm your email/phone number.", - "SelfRegistrationDisabledMessage": "Self user registration is disabled for this application. Contact to the application administrator to register a new user.", + "SelfRegistrationDisabledMessage": "Self-registration is disabled for this application. Please contact the application administrator to register a new user.", "Login": "Login", "Cancel": "Cancel", "Register": "Register", @@ -23,7 +23,7 @@ "DisplayName:NewPassword": "New password", "DisplayName:NewPasswordConfirm": "Confirm new password", "PasswordChangedMessage": "Your password has been changed successfully.", - "DisplayName:UserName": "User name", + "DisplayName:UserName": "Username", "DisplayName:Email": "Email", "DisplayName:Name": "Name", "DisplayName:Surname": "Surname", @@ -39,6 +39,6 @@ "DisplayName:Abp.Account.IsSelfRegistrationEnabled": "Is self-registration enabled", "Description:Abp.Account.IsSelfRegistrationEnabled": "Whether a user can register the account by him or herself.", "DisplayName:Abp.Account.EnableLocalLogin": "Authenticate with a local account", - "Description:Abp.Account.EnableLocalLogin": "Indicates if Server will allow users to authenticate with a local account." + "Description:Abp.Account.EnableLocalLogin": "Indicates if the server will allow users to authenticate with a local account." } -} \ No newline at end of file +} From 65186e9a884944bd7a31e29a328e2333c3971dc5 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 15 Jan 2020 09:59:38 +0800 Subject: [PATCH 200/411] Output a warning if the command is not found. --- .../Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/HelpCommand.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/HelpCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/HelpCommand.cs index 060bd91cc7..70d5112e95 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/HelpCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/HelpCommand.cs @@ -32,6 +32,13 @@ namespace Volo.Abp.Cli.Commands return Task.CompletedTask; } + if (!AbpCliOptions.Commands.ContainsKey(commandLineArgs.Target)) + { + Logger.LogWarning($"There is no command named {commandLineArgs.Target}."); + Logger.LogInformation(GetUsageInfo()); + return Task.CompletedTask; + } + var commandType = AbpCliOptions.Commands[commandLineArgs.Target]; using (var scope = ServiceScopeFactory.CreateScope()) From a2e3f30c44be494ef18ac2653a4780af13eb0503 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 15 Jan 2020 17:02:55 +0800 Subject: [PATCH 201/411] Add configureawait.props & FodyWeavers.xml & FodyWeavers.xsd. --- .../AbpIoLocalization.csproj | 4 ++- .../AbpIoLocalization/FodyWeavers.xml | 3 ++ .../AbpIoLocalization/FodyWeavers.xsd | 30 +++++++++++++++++++ configureawait.props | 9 ++++++ .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Volo.Abp.ApiVersioning.Abstractions.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...AspNetCore.Authentication.JwtBearer.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Abp.AspNetCore.Authentication.OAuth.csproj | 5 ++-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.AspNetCore.MultiTenancy.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.AspNetCore.Mvc.Client.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.AspNetCore.Mvc.Contracts.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...olo.Abp.AspNetCore.Mvc.UI.Bootstrap.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Volo.Abp.AspNetCore.Mvc.UI.Bundling.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ....Abp.AspNetCore.Mvc.UI.MultiTenancy.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Volo.Abp.AspNetCore.Mvc.UI.Packages.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...o.Abp.AspNetCore.Mvc.UI.Theme.Basic.csproj | 5 ++-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ....Abp.AspNetCore.Mvc.UI.Theme.Shared.csproj | 5 ++-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.AspNetCore.Mvc.UI.Widgets.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.AspNetCore.Mvc.UI.csproj | 3 +- .../Volo.Abp.AspNetCore.Mvc/FodyWeavers.xml | 3 ++ .../Volo.Abp.AspNetCore.Mvc/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.AspNetCore.Mvc.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.AspNetCore.Serilog.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.AspNetCore.TestBase.csproj | 3 +- .../src/Volo.Abp.AspNetCore/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.AspNetCore/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.AspNetCore.csproj | 3 +- .../src/Volo.Abp.Auditing/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.Auditing/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Auditing.csproj | 1 + .../Volo.Abp.Authorization/FodyWeavers.xml | 3 ++ .../Volo.Abp.Authorization/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Authorization.csproj | 1 + .../src/Volo.Abp.AutoMapper/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.AutoMapper/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.AutoMapper.csproj | 5 ++-- .../src/Volo.Abp.Autofac/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.Autofac/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Autofac/Volo.Abp.Autofac.csproj | 5 ++-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...olo.Abp.BackgroundJobs.Abstractions.csproj | 5 ++-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.BackgroundJobs.HangFire.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.BackgroundJobs.RabbitMQ.csproj | 3 +- .../Volo.Abp.BackgroundJobs/FodyWeavers.xml | 3 ++ .../Volo.Abp.BackgroundJobs/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.BackgroundJobs.csproj | 5 ++-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.BackgroundWorkers.csproj | 5 ++-- .../src/Volo.Abp.Caching/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.Caching/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Caching/Volo.Abp.Caching.csproj | 3 +- .../src/Volo.Abp.Castle.Core/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.Castle.Core/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Castle.Core.csproj | 5 ++-- .../src/Volo.Abp.Cli.Core/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.Cli.Core/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Cli.Core.csproj | 5 ++-- framework/src/Volo.Abp.Cli/FodyWeavers.xml | 3 ++ framework/src/Volo.Abp.Cli/FodyWeavers.xsd | 30 +++++++++++++++++++ .../src/Volo.Abp.Cli/Volo.Abp.Cli.csproj | 3 +- framework/src/Volo.Abp.Core/FodyWeavers.xml | 3 ++ framework/src/Volo.Abp.Core/FodyWeavers.xsd | 30 +++++++++++++++++++ .../src/Volo.Abp.Core/Volo.Abp.Core.csproj | 7 +++-- framework/src/Volo.Abp.Dapper/FodyWeavers.xml | 3 ++ framework/src/Volo.Abp.Dapper/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Dapper/Volo.Abp.Dapper.csproj | 5 ++-- framework/src/Volo.Abp.Data/FodyWeavers.xml | 3 ++ framework/src/Volo.Abp.Data/FodyWeavers.xsd | 30 +++++++++++++++++++ .../src/Volo.Abp.Data/Volo.Abp.Data.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Ddd.Application.Contracts.csproj | 5 ++-- .../Volo.Abp.Ddd.Application/FodyWeavers.xml | 3 ++ .../Volo.Abp.Ddd.Application/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Ddd.Application.csproj | 3 +- .../src/Volo.Abp.Ddd.Domain/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.Ddd.Domain/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Ddd.Domain.csproj | 1 + .../src/Volo.Abp.Emailing/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.Emailing/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Emailing.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.EntityFrameworkCore.MySQL.csproj | 5 ++-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ....Abp.EntityFrameworkCore.PostgreSql.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...o.Abp.EntityFrameworkCore.SqlServer.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Volo.Abp.EntityFrameworkCore.Sqlite.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.EntityFrameworkCore.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.EventBus.RabbitMQ.csproj | 3 +- .../src/Volo.Abp.EventBus/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.EventBus/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.EventBus.csproj | 1 + .../src/Volo.Abp.Features/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.Features/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Features.csproj | 3 +- .../Volo.Abp.FluentValidation/FodyWeavers.xml | 3 ++ .../Volo.Abp.FluentValidation/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.FluentValidation.csproj | 3 +- framework/src/Volo.Abp.Guids/FodyWeavers.xml | 3 ++ framework/src/Volo.Abp.Guids/FodyWeavers.xsd | 30 +++++++++++++++++++ .../src/Volo.Abp.Guids/Volo.Abp.Guids.csproj | 3 +- .../src/Volo.Abp.HangFire/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.HangFire/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.HangFire.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Http.Abstractions.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Http.Client.IdentityModel.csproj | 5 ++-- .../src/Volo.Abp.Http.Client/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.Http.Client/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Http.Client.csproj | 5 ++-- framework/src/Volo.Abp.Http/FodyWeavers.xml | 3 ++ framework/src/Volo.Abp.Http/FodyWeavers.xsd | 30 +++++++++++++++++++ .../src/Volo.Abp.Http/Volo.Abp.Http.csproj | 3 +- .../Volo.Abp.IdentityModel/FodyWeavers.xml | 3 ++ .../Volo.Abp.IdentityModel/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.IdentityModel.csproj | 5 ++-- framework/src/Volo.Abp.Json/FodyWeavers.xml | 3 ++ framework/src/Volo.Abp.Json/FodyWeavers.xsd | 30 +++++++++++++++++++ .../src/Volo.Abp.Json/Volo.Abp.Json.csproj | 5 ++-- framework/src/Volo.Abp.Ldap/FodyWeavers.xml | 3 ++ framework/src/Volo.Abp.Ldap/FodyWeavers.xsd | 30 +++++++++++++++++++ .../src/Volo.Abp.Ldap/Volo.Abp.Ldap.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Localization.Abstractions.csproj | 3 +- .../src/Volo.Abp.Localization/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.Localization/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Localization.csproj | 3 +- .../src/Volo.Abp.MailKit/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.MailKit/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.MailKit/Volo.Abp.MailKit.csproj | 5 ++-- .../src/Volo.Abp.MemoryDb/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.MemoryDb/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.MemoryDb.csproj | 3 +- framework/src/Volo.Abp.Minify/FodyWeavers.xml | 3 ++ framework/src/Volo.Abp.Minify/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Minify/Volo.Abp.Minify.csproj | 5 ++-- .../src/Volo.Abp.MongoDB/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.MongoDB/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj | 3 +- .../src/Volo.Abp.MultiTenancy/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.MultiTenancy/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.MultiTenancy.csproj | 1 + .../Volo.Abp.ObjectMapping/FodyWeavers.xml | 3 ++ .../Volo.Abp.ObjectMapping/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.ObjectMapping.csproj | 1 + .../src/Volo.Abp.RabbitMQ/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.RabbitMQ/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.RabbitMQ.csproj | 3 +- .../src/Volo.Abp.Security/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.Security/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Security.csproj | 1 + .../Volo.Abp.Serialization/FodyWeavers.xml | 3 ++ .../Volo.Abp.Serialization/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Serialization.csproj | 1 + .../src/Volo.Abp.Settings/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.Settings/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Settings.csproj | 3 +- framework/src/Volo.Abp.Sms/FodyWeavers.xml | 3 ++ framework/src/Volo.Abp.Sms/FodyWeavers.xsd | 30 +++++++++++++++++++ .../src/Volo.Abp.Sms/Volo.Abp.Sms.csproj | 3 +- .../Volo.Abp.Specifications/FodyWeavers.xml | 3 ++ .../Volo.Abp.Specifications/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Specifications.csproj | 3 +- .../src/Volo.Abp.TestBase/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.TestBase/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.TestBase.csproj | 3 +- .../src/Volo.Abp.Threading/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.Threading/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Threading.csproj | 1 + framework/src/Volo.Abp.Timing/FodyWeavers.xml | 3 ++ framework/src/Volo.Abp.Timing/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Timing/Volo.Abp.Timing.csproj | 3 +- .../Volo.Abp.UI.Navigation/FodyWeavers.xml | 3 ++ .../Volo.Abp.UI.Navigation/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.UI.Navigation.csproj | 5 ++-- framework/src/Volo.Abp.UI/FodyWeavers.xml | 3 ++ framework/src/Volo.Abp.UI/FodyWeavers.xsd | 30 +++++++++++++++++++ framework/src/Volo.Abp.UI/Volo.Abp.UI.csproj | 5 ++-- framework/src/Volo.Abp.Uow/FodyWeavers.xml | 3 ++ framework/src/Volo.Abp.Uow/FodyWeavers.xsd | 30 +++++++++++++++++++ .../src/Volo.Abp.Uow/Volo.Abp.Uow.csproj | 1 + .../src/Volo.Abp.Validation/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.Validation/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Validation.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.VirtualFileSystem.csproj | 1 + framework/src/Volo.Abp/FodyWeavers.xml | 3 ++ framework/src/Volo.Abp/FodyWeavers.xsd | 30 +++++++++++++++++++ framework/src/Volo.Abp/Volo.Abp.csproj | 7 +++-- framework/test/AbpTestBase/AbpTestBase.csproj | 3 +- framework/test/AbpTestBase/FodyWeavers.xml | 3 ++ framework/test/AbpTestBase/FodyWeavers.xsd | 30 +++++++++++++++++++ .../test/SimpleConsoleDemo/FodyWeavers.xml | 3 ++ .../test/SimpleConsoleDemo/FodyWeavers.xsd | 30 +++++++++++++++++++ .../SimpleConsoleDemo.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...pNetCore.Authentication.OAuth.Tests.csproj | 5 ++-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...o.Abp.AspNetCore.MultiTenancy.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.AspNetCore.Mvc.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...NetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...bp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.AspNetCore.Mvc.UI.Tests.csproj | 5 ++-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Abp.AspNetCore.Mvc.Versioning.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.AspNetCore.Serilog.Tests.csproj | 5 ++-- .../Volo.Abp.AspNetCore.Tests/FodyWeavers.xml | 3 ++ .../Volo.Abp.AspNetCore.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.AspNetCore.Tests.csproj | 3 +- .../Volo.Abp.Auditing.Tests/FodyWeavers.xml | 3 ++ .../Volo.Abp.Auditing.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Auditing.Tests.csproj | 5 ++-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Authorization.Tests.csproj | 3 +- .../Volo.Abp.AutoMapper.Tests/FodyWeavers.xml | 3 ++ .../Volo.Abp.AutoMapper.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.AutoMapper.Tests.csproj | 5 ++-- .../Volo.Abp.Autofac.Tests/FodyWeavers.xml | 3 ++ .../Volo.Abp.Autofac.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Autofac.Tests.csproj | 5 ++-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.BackgroundJobs.Tests.csproj | 5 ++-- .../Volo.Abp.Caching.Tests/FodyWeavers.xml | 3 ++ .../Volo.Abp.Caching.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Caching.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Castle.Core.Tests.csproj | 5 ++-- .../Volo.Abp.Cli.Core.Tests/FodyWeavers.xml | 3 ++ .../Volo.Abp.Cli.Core.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Cli.Core.Tests.csproj | 3 +- .../test/Volo.Abp.Core.Tests/FodyWeavers.xml | 3 ++ .../test/Volo.Abp.Core.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Core.Tests.csproj | 3 +- .../Volo.Abp.Dapper.Tests/FodyWeavers.xml | 3 ++ .../Volo.Abp.Dapper.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Dapper.Tests.csproj | 5 ++-- .../test/Volo.Abp.Data.Tests/FodyWeavers.xml | 3 ++ .../test/Volo.Abp.Data.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Data.Tests.csproj | 3 +- .../test/Volo.Abp.Ddd.Tests/FodyWeavers.xml | 3 ++ .../test/Volo.Abp.Ddd.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Ddd.Tests.csproj | 3 +- .../Volo.Abp.Emailing.Tests/FodyWeavers.xml | 3 ++ .../Volo.Abp.Emailing.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Emailing.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...tyFrameworkCore.Tests.SecondContext.csproj | 5 ++-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.EntityFrameworkCore.Tests.csproj | 5 ++-- .../Volo.Abp.EventBus.Tests/FodyWeavers.xml | 3 ++ .../Volo.Abp.EventBus.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.EventBus.Tests.csproj | 3 +- .../Volo.Abp.Features.Tests/FodyWeavers.xml | 3 ++ .../Volo.Abp.Features.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Features.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.FluentValidation.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Http.Client.Tests.csproj | 5 ++-- .../test/Volo.Abp.Ldap.Tests/FodyWeavers.xml | 3 ++ .../test/Volo.Abp.Ldap.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Ldap.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Localization.Tests.csproj | 5 ++-- .../Volo.Abp.MailKit.Tests/FodyWeavers.xml | 3 ++ .../Volo.Abp.MailKit.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.MailKit.Tests.csproj | 5 ++-- .../Volo.Abp.MemoryDb.Tests/FodyWeavers.xml | 3 ++ .../Volo.Abp.MemoryDb.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.MemoryDb.Tests.csproj | 5 ++-- .../Volo.Abp.Minify.Tests/FodyWeavers.xml | 3 ++ .../Volo.Abp.Minify.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Minify.Tests.csproj | 5 ++-- .../Volo.Abp.MongoDB.Tests/FodyWeavers.xml | 3 ++ .../Volo.Abp.MongoDB.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.MongoDB.Tests.csproj | 5 ++-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.MultiTenancy.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.ObjectMapping.Tests.csproj | 3 +- .../Volo.Abp.Security.Tests/FodyWeavers.xml | 3 ++ .../Volo.Abp.Security.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Security.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Serialization.Tests.csproj | 3 +- .../Volo.Abp.Settings.Tests/FodyWeavers.xml | 3 ++ .../Volo.Abp.Settings.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Settings.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Specifications.Tests.csproj | 5 ++-- .../Volo.Abp.TestApp.Tests/FodyWeavers.xml | 3 ++ .../Volo.Abp.TestApp.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.TestApp.Tests.csproj | 3 +- .../test/Volo.Abp.TestApp/FodyWeavers.xml | 3 ++ .../test/Volo.Abp.TestApp/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.TestApp/Volo.Abp.TestApp.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.UI.Navigation.Tests.csproj | 3 +- .../test/Volo.Abp.Uow.Tests/FodyWeavers.xml | 3 ++ .../test/Volo.Abp.Uow.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Uow.Tests.csproj | 3 +- .../Volo.Abp.Validation.Tests/FodyWeavers.xml | 3 ++ .../Volo.Abp.Validation.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Validation.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.VirtualFileSystem.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...o.Abp.Account.Application.Contracts.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Account.Application.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Account.HttpApi.Client.csproj | 3 +- .../Volo.Abp.Account.HttpApi/FodyWeavers.xml | 3 ++ .../Volo.Abp.Account.HttpApi/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Account.HttpApi.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Volo.Abp.Account.Web.IdentityServer.csproj | 3 +- .../src/Volo.Abp.Account.Web/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.Account.Web/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Account.Web.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Account.Application.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Volo.Abp.AuditLogging.Domain.Shared.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.AuditLogging.Domain.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...bp.AuditLogging.EntityFrameworkCore.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.AuditLogging.MongoDB.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...itLogging.EntityFrameworkCore.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Volo.Abp.AuditLogging.MongoDB.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.AuditLogging.TestBase.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.AuditLogging.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Abp.BackgroundJobs.DemoApp.HangFire.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Abp.BackgroundJobs.DemoApp.RabbitMq.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...o.Abp.BackgroundJobs.DemoApp.Shared.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.BackgroundJobs.DemoApp.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...lo.Abp.BackgroundJobs.Domain.Shared.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.BackgroundJobs.Domain.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ....BackgroundJobs.EntityFrameworkCore.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.BackgroundJobs.MongoDB.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...olo.Abp.BackgroundJobs.Domain.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...roundJobs.EntityFrameworkCore.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...lo.Abp.BackgroundJobs.MongoDB.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.BackgroundJobs.TestBase.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...BloggingTestApp.EntityFrameworkCore.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.BloggingTestApp.MongoDB.csproj | 4 ++- .../app/Volo.BloggingTestApp/FodyWeavers.xml | 3 ++ .../app/Volo.BloggingTestApp/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.BloggingTestApp.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Volo.Blogging.Application.Contracts.csproj | 3 +- .../Volo.Blogging.Application/FodyWeavers.xml | 3 ++ .../Volo.Blogging.Application/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Blogging.Application.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Blogging.Domain.Shared.csproj | 3 +- .../src/Volo.Blogging.Domain/FodyWeavers.xml | 3 ++ .../src/Volo.Blogging.Domain/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Blogging.Domain.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Blogging.EntityFrameworkCore.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Blogging.HttpApi.Client.csproj | 3 +- .../src/Volo.Blogging.HttpApi/FodyWeavers.xml | 3 ++ .../src/Volo.Blogging.HttpApi/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Blogging.HttpApi.csproj | 3 +- .../src/Volo.Blogging.MongoDB/FodyWeavers.xml | 3 ++ .../src/Volo.Blogging.MongoDB/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Blogging.MongoDB.csproj | 3 +- .../src/Volo.Blogging.Web/FodyWeavers.xml | 3 ++ .../src/Volo.Blogging.Web/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Blogging.Web.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Blogging.Application.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Blogging.Domain.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ....Blogging.EntityFrameworkCore.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Blogging.MongoDB.Tests.csproj | 4 ++- .../Volo.Blogging.TestBase/FodyWeavers.xml | 3 ++ .../Volo.Blogging.TestBase/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Blogging.TestBase.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.ClientSimulation.Demo.csproj | 3 +- .../Volo.ClientSimulation.Web/FodyWeavers.xml | 3 ++ .../Volo.ClientSimulation.Web/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.ClientSimulation.Web.csproj | 3 +- .../src/Volo.ClientSimulation/FodyWeavers.xml | 3 ++ .../src/Volo.ClientSimulation/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.ClientSimulation.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../VoloDocs.EntityFrameworkCore.csproj | 4 ++- .../app/VoloDocs.Migrator/FodyWeavers.xml | 3 ++ .../app/VoloDocs.Migrator/FodyWeavers.xsd | 30 +++++++++++++++++++ .../VoloDocs.Migrator.csproj | 4 ++- modules/docs/app/VoloDocs.Web/FodyWeavers.xml | 3 ++ modules/docs/app/VoloDocs.Web/FodyWeavers.xsd | 30 +++++++++++++++++++ .../docs/app/VoloDocs.Web/VoloDocs.Web.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...lo.Docs.Admin.Application.Contracts.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Docs.Admin.Application.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Docs.Admin.HttpApi.Client.csproj | 3 +- .../Volo.Docs.Admin.HttpApi/FodyWeavers.xml | 3 ++ .../Volo.Docs.Admin.HttpApi/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Docs.Admin.HttpApi.csproj | 3 +- .../src/Volo.Docs.Admin.Web/FodyWeavers.xml | 3 ++ .../src/Volo.Docs.Admin.Web/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Docs.Admin.Web.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Docs.Application.Contracts.csproj | 3 +- .../src/Volo.Docs.Application/FodyWeavers.xml | 3 ++ .../src/Volo.Docs.Application/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Docs.Application.csproj | 3 +- .../Volo.Docs.Domain.Shared/FodyWeavers.xml | 3 ++ .../Volo.Docs.Domain.Shared/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Docs.Domain.Shared.csproj | 3 +- .../docs/src/Volo.Docs.Domain/FodyWeavers.xml | 3 ++ .../docs/src/Volo.Docs.Domain/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Docs.Domain/Volo.Docs.Domain.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Docs.EntityFrameworkCore.csproj | 3 +- .../Volo.Docs.HttpApi.Client/FodyWeavers.xml | 3 ++ .../Volo.Docs.HttpApi.Client/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Docs.HttpApi.Client.csproj | 3 +- .../src/Volo.Docs.HttpApi/FodyWeavers.xml | 3 ++ .../src/Volo.Docs.HttpApi/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Docs.HttpApi.csproj | 3 +- .../src/Volo.Docs.MongoDB/FodyWeavers.xml | 3 ++ .../src/Volo.Docs.MongoDB/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Docs.MongoDB.csproj | 3 +- .../docs/src/Volo.Docs.Web/FodyWeavers.xml | 3 ++ .../docs/src/Volo.Docs.Web/FodyWeavers.xsd | 30 +++++++++++++++++++ .../src/Volo.Docs.Web/Volo.Docs.Web.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Docs.Admin.Application.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Docs.Application.Tests.csproj | 4 ++- .../Volo.Docs.Domain.Tests/FodyWeavers.xml | 3 ++ .../Volo.Docs.Domain.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Docs.Domain.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Volo.Docs.EntityFrameworkCore.Tests.csproj | 4 ++- .../Volo.Docs.MongoDB.Tests/FodyWeavers.xml | 3 ++ .../Volo.Docs.MongoDB.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Docs.MongoDB.Tests.csproj | 4 ++- .../test/Volo.Docs.TestBase/FodyWeavers.xml | 3 ++ .../test/Volo.Docs.TestBase/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Docs.TestBase.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...ureManagement.Application.Contracts.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...o.Abp.FeatureManagement.Application.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Abp.FeatureManagement.Domain.Shared.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.FeatureManagement.Domain.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...atureManagement.EntityFrameworkCore.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...bp.FeatureManagement.HttpApi.Client.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.FeatureManagement.HttpApi.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.FeatureManagement.MongoDB.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.FeatureManagement.Web.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...FeatureManagement.Application.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ....Abp.FeatureManagement.Domain.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...anagement.EntityFrameworkCore.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Abp.FeatureManagement.MongoDB.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Volo.Abp.FeatureManagement.TestBase.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ....Abp.Identity.Application.Contracts.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Identity.Application.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Identity.AspNetCore.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Identity.Domain.Shared.csproj | 3 +- .../Volo.Abp.Identity.Domain/FodyWeavers.xml | 3 ++ .../Volo.Abp.Identity.Domain/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Identity.Domain.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...lo.Abp.Identity.EntityFrameworkCore.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Identity.HttpApi.Client.csproj | 3 +- .../Volo.Abp.Identity.HttpApi/FodyWeavers.xml | 3 ++ .../Volo.Abp.Identity.HttpApi/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Identity.HttpApi.csproj | 3 +- .../Volo.Abp.Identity.MongoDB/FodyWeavers.xml | 3 ++ .../Volo.Abp.Identity.MongoDB/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Identity.MongoDB.csproj | 3 +- .../src/Volo.Abp.Identity.Web/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.Identity.Web/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Identity.Web.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...ermissionManagement.Domain.Identity.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Volo.Abp.Identity.Application.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Identity.Domain.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ....Identity.EntityFrameworkCore.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Identity.MongoDB.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Identity.TestBase.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...lo.Abp.IdentityServer.Domain.Shared.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.IdentityServer.Domain.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ....IdentityServer.EntityFrameworkCore.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.IdentityServer.MongoDB.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...ionManagement.Domain.IdentityServer.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...olo.Abp.IdentityServer.Domain.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...ityServer.EntityFrameworkCore.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...lo.Abp.IdentityServer.MongoDB.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.IdentityServer.TestBase.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...ionManagement.Application.Contracts.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...bp.PermissionManagement.Application.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ....PermissionManagement.Domain.Shared.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...olo.Abp.PermissionManagement.Domain.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...ssionManagement.EntityFrameworkCore.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...PermissionManagement.HttpApi.Client.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...lo.Abp.PermissionManagement.HttpApi.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...lo.Abp.PermissionManagement.MongoDB.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.PermissionManagement.Web.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...missionManagement.Application.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...anagement.EntityFrameworkCore.Tests.csproj | 6 ++-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ....PermissionManagement.MongoDB.Tests.csproj | 6 ++-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...o.Abp.PermissionManagement.TestBase.csproj | 6 ++-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...p.PermissionManagement.Domain.Tests.csproj | 6 ++-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Abp.SettingManagement.Domain.Shared.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.SettingManagement.Domain.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...ttingManagement.EntityFrameworkCore.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.SettingManagement.MongoDB.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.SettingManagement.Web.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...anagement.EntityFrameworkCore.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Abp.SettingManagement.MongoDB.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Volo.Abp.SettingManagement.TestBase.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.SettingManagement.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...antManagement.Application.Contracts.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...lo.Abp.TenantManagement.Application.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ....Abp.TenantManagement.Domain.Shared.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.TenantManagement.Domain.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...enantManagement.EntityFrameworkCore.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Abp.TenantManagement.HttpApi.Client.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.TenantManagement.HttpApi.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.TenantManagement.MongoDB.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.TenantManagement.Web.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ....TenantManagement.Application.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...o.Abp.TenantManagement.Domain.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...anagement.EntityFrameworkCore.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ....Abp.TenantManagement.MongoDB.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.TenantManagement.TestBase.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Users.Abstractions.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Users.Domain.Shared.csproj | 1 + .../src/Volo.Abp.Users.Domain/FodyWeavers.xml | 3 ++ .../src/Volo.Abp.Users.Domain/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Users.Domain.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Users.EntityFrameworkCore.csproj | 3 +- .../Volo.Abp.Users.MongoDB/FodyWeavers.xml | 3 ++ .../Volo.Abp.Users.MongoDB/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.Users.MongoDB.csproj | 1 + ...Abp.Users.EntityFrameworkCore.Tests.csproj | 4 ++- .../Volo.Abp.Users.MongoDB.Tests.csproj | 4 ++- .../Volo.Abp.Users.Tests.Shared.csproj | 2 ++ .../BasicAspNetCoreApplication.csproj | 2 ++ .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../AbpConsoleDemo/AbpConsoleDemo.csproj | 4 ++- .../AbpConsoleDemo/FodyWeavers.xml | 3 ++ .../AbpConsoleDemo/FodyWeavers.xsd | 30 +++++++++++++++++++ ...cme.BookStore.Application.Contracts.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.Application.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.DbMigrator.csproj | 1 + .../Acme.BookStore.DbMigrator/FodyWeavers.xml | 3 ++ .../Acme.BookStore.DbMigrator/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.Domain.Shared.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.Domain.csproj | 1 + .../src/Acme.BookStore.Domain/FodyWeavers.xml | 3 ++ .../src/Acme.BookStore.Domain/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.HttpApi.Client.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.HttpApi.Host.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.HttpApi.csproj | 1 + .../Acme.BookStore.HttpApi/FodyWeavers.xml | 3 ++ .../Acme.BookStore.HttpApi/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.MongoDB.csproj | 1 + .../Acme.BookStore.MongoDB/FodyWeavers.xml | 3 ++ .../Acme.BookStore.MongoDB/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.Application.Tests.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.Domain.Tests.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Store.HttpApi.Client.ConsoleTestApp.csproj | 2 ++ .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.MongoDB.Tests.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.TestBase.csproj | 1 + .../Acme.BookStore.TestBase/FodyWeavers.xml | 3 ++ .../Acme.BookStore.TestBase/FodyWeavers.xsd | 30 +++++++++++++++++++ ...cme.BookStore.Application.Contracts.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.Application.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.DbMigrator.csproj | 1 + .../Acme.BookStore.DbMigrator/FodyWeavers.xml | 3 ++ .../Acme.BookStore.DbMigrator/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.Domain.Shared.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.Domain.csproj | 1 + .../src/Acme.BookStore.Domain/FodyWeavers.xml | 3 ++ .../src/Acme.BookStore.Domain/FodyWeavers.xsd | 30 +++++++++++++++++++ ...re.EntityFrameworkCore.DbMigrations.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.EntityFrameworkCore.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.HttpApi.Client.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.HttpApi.csproj | 1 + .../Acme.BookStore.HttpApi/FodyWeavers.xml | 3 ++ .../Acme.BookStore.HttpApi/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.Web.csproj | 3 +- .../src/Acme.BookStore.Web/FodyWeavers.xml | 3 ++ .../src/Acme.BookStore.Web/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.Application.Tests.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.Domain.Tests.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...BookStore.EntityFrameworkCore.Tests.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Store.HttpApi.Client.ConsoleTestApp.csproj | 2 ++ .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.TestBase.csproj | 1 + .../Acme.BookStore.TestBase/FodyWeavers.xml | 3 ++ .../Acme.BookStore.TestBase/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.Web.Tests.csproj | 1 + .../Acme.BookStore.Web.Tests/FodyWeavers.xml | 3 ++ .../Acme.BookStore.Web.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ ...ookStore.BookManagement.Host.Shared.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...okStore.BookManagement.HttpApi.Host.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Store.BookManagement.IdentityServer.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...e.BookStore.BookManagement.Web.Host.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...ookStore.BookManagement.Web.Unified.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...ookManagement.Application.Contracts.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...ookStore.BookManagement.Application.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...kStore.BookManagement.Domain.Shared.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...cme.BookStore.BookManagement.Domain.csproj | 5 ++-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ....BookManagement.EntityFrameworkCore.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Store.BookManagement.HttpApi.Client.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...me.BookStore.BookManagement.HttpApi.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...me.BookStore.BookManagement.MongoDB.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.BookManagement.Web.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...re.BookManagement.Application.Tests.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...okStore.BookManagement.Domain.Tests.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...anagement.EntityFrameworkCore.Tests.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...ement.HttpApi.Client.ConsoleTestApp.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...kStore.BookManagement.MongoDB.Tests.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...e.BookStore.BookManagement.TestBase.csproj | 1 + .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...cme.BookStore.Application.Contracts.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.Application.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.DbMigrator.csproj | 3 +- .../Acme.BookStore.DbMigrator/FodyWeavers.xml | 3 ++ .../Acme.BookStore.DbMigrator/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.Domain.Shared.csproj | 5 ++-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.Domain.csproj | 3 +- .../src/Acme.BookStore.Domain/FodyWeavers.xml | 3 ++ .../src/Acme.BookStore.Domain/FodyWeavers.xsd | 30 +++++++++++++++++++ ...re.EntityFrameworkCore.DbMigrations.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.EntityFrameworkCore.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.HttpApi.Client.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.HttpApi.csproj | 3 +- .../Acme.BookStore.HttpApi/FodyWeavers.xml | 3 ++ .../Acme.BookStore.HttpApi/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.Web.csproj | 3 +- .../src/Acme.BookStore.Web/FodyWeavers.xml | 3 ++ .../src/Acme.BookStore.Web/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.Application.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.Domain.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...BookStore.EntityFrameworkCore.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...Store.HttpApi.Client.ConsoleTestApp.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.TestBase.csproj | 3 +- .../Acme.BookStore.TestBase/FodyWeavers.xml | 3 ++ .../Acme.BookStore.TestBase/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Acme.BookStore.Web.Tests.csproj | 3 +- .../Acme.BookStore.Web.Tests/FodyWeavers.xml | 3 ++ .../Acme.BookStore.Web.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ ...DashboardDemo.Application.Contracts.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../DashboardDemo.Application.csproj | 3 +- .../DashboardDemo.Application/FodyWeavers.xml | 3 ++ .../DashboardDemo.Application/FodyWeavers.xsd | 30 +++++++++++++++++++ .../DashboardDemo.DbMigrator.csproj | 3 +- .../DashboardDemo.DbMigrator/FodyWeavers.xml | 3 ++ .../DashboardDemo.DbMigrator/FodyWeavers.xsd | 30 +++++++++++++++++++ .../DashboardDemo.Domain.Shared.csproj | 5 ++-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../DashboardDemo.Domain.csproj | 3 +- .../src/DashboardDemo.Domain/FodyWeavers.xml | 3 ++ .../src/DashboardDemo.Domain/FodyWeavers.xsd | 30 +++++++++++++++++++ ...mo.EntityFrameworkCore.DbMigrations.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../DashboardDemo.EntityFrameworkCore.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../DashboardDemo.HttpApi.Client.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../DashboardDemo.HttpApi.csproj | 3 +- .../src/DashboardDemo.HttpApi/FodyWeavers.xml | 3 ++ .../src/DashboardDemo.HttpApi/FodyWeavers.xsd | 30 +++++++++++++++++++ .../DashboardDemo.Web.csproj | 3 +- .../src/DashboardDemo.Web/FodyWeavers.xml | 3 ++ .../src/DashboardDemo.Web/FodyWeavers.xsd | 30 +++++++++++++++++++ .../DashboardDemo.Application.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../DashboardDemo.Domain.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...boardDemo.EntityFrameworkCore.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...dDemo.HttpApi.Client.ConsoleTestApp.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../DashboardDemo.TestBase.csproj | 3 +- .../DashboardDemo.TestBase/FodyWeavers.xml | 3 ++ .../DashboardDemo.TestBase/FodyWeavers.xsd | 30 +++++++++++++++++++ .../DashboardDemo.Web.Tests.csproj | 3 +- .../DashboardDemo.Web.Tests/FodyWeavers.xml | 3 ++ .../DashboardDemo.Web.Tests/FodyWeavers.xsd | 30 +++++++++++++++++++ .../AuthServer.Host/AuthServer.Host.csproj | 4 ++- .../AuthServer.Host/FodyWeavers.xml | 3 ++ .../AuthServer.Host/FodyWeavers.xsd | 30 +++++++++++++++++++ .../BackendAdminApp.Host.csproj | 4 ++- .../BackendAdminApp.Host/FodyWeavers.xml | 3 ++ .../BackendAdminApp.Host/FodyWeavers.xsd | 30 +++++++++++++++++++ .../ConsoleClientDemo.csproj | 4 ++- .../ConsoleClientDemo/FodyWeavers.xml | 3 ++ .../ConsoleClientDemo/FodyWeavers.xsd | 30 +++++++++++++++++++ .../PublicWebSite.Host/FodyWeavers.xml | 3 ++ .../PublicWebSite.Host/FodyWeavers.xsd | 30 +++++++++++++++++++ .../PublicWebSite.Host.csproj | 4 ++- .../BackendAdminAppGateway.Host.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../InternalGateway.Host/FodyWeavers.xml | 3 ++ .../InternalGateway.Host/FodyWeavers.xsd | 30 +++++++++++++++++++ .../InternalGateway.Host.csproj | 4 ++- .../PublicWebSiteGateway.Host/FodyWeavers.xml | 3 ++ .../PublicWebSiteGateway.Host/FodyWeavers.xsd | 30 +++++++++++++++++++ .../PublicWebSiteGateway.Host.csproj | 6 ++-- .../BloggingService.Host.csproj | 4 ++- .../BloggingService.Host/FodyWeavers.xml | 3 ++ .../BloggingService.Host/FodyWeavers.xsd | 30 +++++++++++++++++++ .../IdentityService.Host/FodyWeavers.xml | 3 ++ .../IdentityService.Host/FodyWeavers.xsd | 30 +++++++++++++++++++ .../IdentityService.Host.csproj | 4 ++- .../ProductService.Host/FodyWeavers.xml | 3 ++ .../ProductService.Host/FodyWeavers.xsd | 30 +++++++++++++++++++ .../ProductService.Host.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...uctManagement.Application.Contracts.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../ProductManagement.Application.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../ProductManagement.Domain.Shared.csproj | 4 ++- .../ProductManagement.Domain/FodyWeavers.xml | 3 ++ .../ProductManagement.Domain/FodyWeavers.xsd | 30 +++++++++++++++++++ .../ProductManagement.Domain.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...oductManagement.EntityFrameworkCore.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../ProductManagement.HttpApi.Client.csproj | 4 ++- .../ProductManagement.HttpApi/FodyWeavers.xml | 3 ++ .../ProductManagement.HttpApi/FodyWeavers.xsd | 30 +++++++++++++++++++ .../ProductManagement.HttpApi.csproj | 4 ++- .../src/ProductManagement.Web/FodyWeavers.xml | 3 ++ .../src/ProductManagement.Web/FodyWeavers.xsd | 30 +++++++++++++++++++ .../ProductManagement.Web.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...ProductManagement.Application.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../ProductManagement.Domain.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...anagement.EntityFrameworkCore.Tests.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../ProductManagement.TestBase.csproj | 4 ++- samples/RabbitMqEventBus/App1/App1.csproj | 4 ++- samples/RabbitMqEventBus/App1/FodyWeavers.xml | 3 ++ samples/RabbitMqEventBus/App1/FodyWeavers.xsd | 30 +++++++++++++++++++ samples/RabbitMqEventBus/App2/App2.csproj | 4 ++- samples/RabbitMqEventBus/App2/FodyWeavers.xml | 3 ++ samples/RabbitMqEventBus/App2/FodyWeavers.xsd | 30 +++++++++++++++++++ .../SharedModule/FodyWeavers.xml | 3 ++ .../SharedModule/FodyWeavers.xsd | 30 +++++++++++++++++++ .../SharedModule/SharedModule.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...MyProjectName.Application.Contracts.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...mpanyName.MyProjectName.Application.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...ompanyName.MyProjectName.DbMigrator.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...anyName.MyProjectName.Domain.Shared.csproj | 5 ++-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../MyCompanyName.MyProjectName.Domain.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...me.EntityFrameworkCore.DbMigrations.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...e.MyProjectName.EntityFrameworkCore.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...nyName.MyProjectName.HttpApi.Client.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...panyName.MyProjectName.HttpApi.Host.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...e.MyProjectName.HttpApi.HostWithIds.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...MyCompanyName.MyProjectName.HttpApi.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...nyName.MyProjectName.IdentityServer.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...MyCompanyName.MyProjectName.MongoDB.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...yCompanyName.MyProjectName.Web.Host.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../MyCompanyName.MyProjectName.Web.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...ame.MyProjectName.Application.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...panyName.MyProjectName.Domain.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...ojectName.EntityFrameworkCore.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...tName.HttpApi.Client.ConsoleTestApp.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...anyName.MyProjectName.MongoDB.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...yCompanyName.MyProjectName.TestBase.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...CompanyName.MyProjectName.Web.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...mpanyName.MyProjectName.Host.Shared.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...panyName.MyProjectName.HttpApi.Host.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...nyName.MyProjectName.IdentityServer.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...yCompanyName.MyProjectName.Web.Host.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...mpanyName.MyProjectName.Web.Unified.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...MyProjectName.Application.Contracts.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...mpanyName.MyProjectName.Application.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...anyName.MyProjectName.Domain.Shared.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../MyCompanyName.MyProjectName.Domain.csproj | 5 ++-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...e.MyProjectName.EntityFrameworkCore.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...nyName.MyProjectName.HttpApi.Client.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...MyCompanyName.MyProjectName.HttpApi.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...MyCompanyName.MyProjectName.MongoDB.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../MyCompanyName.MyProjectName.Web.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...ame.MyProjectName.Application.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...panyName.MyProjectName.Domain.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...ojectName.EntityFrameworkCore.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...tName.HttpApi.Client.ConsoleTestApp.csproj | 4 ++- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...anyName.MyProjectName.MongoDB.Tests.csproj | 3 +- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...yCompanyName.MyProjectName.TestBase.csproj | 3 +- 1294 files changed, 15151 insertions(+), 433 deletions(-) create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/FodyWeavers.xml create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/FodyWeavers.xsd create mode 100644 configureawait.props create mode 100644 framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.AspNetCore/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.AspNetCore/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Auditing/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Auditing/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Authorization/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Authorization/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.AutoMapper/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.AutoMapper/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Autofac/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Autofac/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Caching/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Caching/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Castle.Core/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Castle.Core/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Cli.Core/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Cli.Core/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Cli/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Cli/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Core/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Core/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Dapper/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Dapper/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Data/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Data/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Emailing/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Emailing/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.EventBus.RabbitMQ/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.EventBus.RabbitMQ/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.EventBus/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.EventBus/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Features/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Features/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.FluentValidation/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.FluentValidation/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Guids/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Guids/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.HangFire/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.HangFire/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Http.Abstractions/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Http.Abstractions/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Http.Client.IdentityModel/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Http.Client.IdentityModel/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Http.Client/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Http.Client/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Http/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Http/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.IdentityModel/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.IdentityModel/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Json/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Json/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Ldap/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Ldap/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Localization.Abstractions/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Localization.Abstractions/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Localization/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Localization/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.MailKit/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.MailKit/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.MemoryDb/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.MemoryDb/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Minify/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Minify/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.MongoDB/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.MongoDB/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.MultiTenancy/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.MultiTenancy/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.ObjectMapping/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.ObjectMapping/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.RabbitMQ/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.RabbitMQ/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Security/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Security/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Serialization/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Serialization/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Settings/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Settings/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Sms/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Sms/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Specifications/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Specifications/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.TestBase/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.TestBase/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Threading/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Threading/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Timing/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Timing/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.UI.Navigation/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.UI.Navigation/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.UI/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.UI/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Uow/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Uow/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Validation/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Validation/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.VirtualFileSystem/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.VirtualFileSystem/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp/FodyWeavers.xsd create mode 100644 framework/test/AbpTestBase/FodyWeavers.xml create mode 100644 framework/test/AbpTestBase/FodyWeavers.xsd create mode 100644 framework/test/SimpleConsoleDemo/FodyWeavers.xml create mode 100644 framework/test/SimpleConsoleDemo/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.AspNetCore.Serilog.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.AspNetCore.Serilog.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.AspNetCore.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.AspNetCore.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.Auditing.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.Auditing.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.Authorization.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.Authorization.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.AutoMapper.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.AutoMapper.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.Autofac.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.Autofac.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.BackgroundJobs.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.BackgroundJobs.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.Caching.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.Caching.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.Castle.Core.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.Castle.Core.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.Cli.Core.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.Cli.Core.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.Core.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.Core.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.Dapper.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.Dapper.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.Data.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.Data.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.Ddd.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.Ddd.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.Emailing.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.Emailing.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.EntityFrameworkCore.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.EntityFrameworkCore.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.EventBus.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.EventBus.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.Features.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.Features.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.FluentValidation.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.FluentValidation.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.Http.Client.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.Http.Client.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.Ldap.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.Ldap.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.Localization.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.Localization.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.MailKit.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.MailKit.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.MemoryDb.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.MemoryDb.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.Minify.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.Minify.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.MongoDB.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.MongoDB.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.MultiTenancy.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.MultiTenancy.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.ObjectMapping.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.ObjectMapping.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.Security.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.Security.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.Serialization.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.Serialization.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.Settings.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.Settings.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.Specifications.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.Specifications.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.TestApp.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.TestApp.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.TestApp/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.TestApp/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.UI.Navigation.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.UI.Navigation.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.Uow.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.Uow.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.Validation.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.Validation.Tests/FodyWeavers.xsd create mode 100644 framework/test/Volo.Abp.VirtualFileSystem.Tests/FodyWeavers.xml create mode 100644 framework/test/Volo.Abp.VirtualFileSystem.Tests/FodyWeavers.xsd create mode 100644 modules/account/src/Volo.Abp.Account.Application.Contracts/FodyWeavers.xml create mode 100644 modules/account/src/Volo.Abp.Account.Application.Contracts/FodyWeavers.xsd create mode 100644 modules/account/src/Volo.Abp.Account.Application/FodyWeavers.xml create mode 100644 modules/account/src/Volo.Abp.Account.Application/FodyWeavers.xsd create mode 100644 modules/account/src/Volo.Abp.Account.HttpApi.Client/FodyWeavers.xml create mode 100644 modules/account/src/Volo.Abp.Account.HttpApi.Client/FodyWeavers.xsd create mode 100644 modules/account/src/Volo.Abp.Account.HttpApi/FodyWeavers.xml create mode 100644 modules/account/src/Volo.Abp.Account.HttpApi/FodyWeavers.xsd create mode 100644 modules/account/src/Volo.Abp.Account.Web.IdentityServer/FodyWeavers.xml create mode 100644 modules/account/src/Volo.Abp.Account.Web.IdentityServer/FodyWeavers.xsd create mode 100644 modules/account/src/Volo.Abp.Account.Web/FodyWeavers.xml create mode 100644 modules/account/src/Volo.Abp.Account.Web/FodyWeavers.xsd create mode 100644 modules/account/test/Volo.Abp.Account.Application.Tests/FodyWeavers.xml create mode 100644 modules/account/test/Volo.Abp.Account.Application.Tests/FodyWeavers.xsd create mode 100644 modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/FodyWeavers.xml create mode 100644 modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/FodyWeavers.xsd create mode 100644 modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/FodyWeavers.xml create mode 100644 modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/FodyWeavers.xsd create mode 100644 modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/FodyWeavers.xml create mode 100644 modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/FodyWeavers.xsd create mode 100644 modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/FodyWeavers.xml create mode 100644 modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/FodyWeavers.xsd create mode 100644 modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/FodyWeavers.xml create mode 100644 modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/FodyWeavers.xsd create mode 100644 modules/audit-logging/test/Volo.Abp.AuditLogging.MongoDB.Tests/FodyWeavers.xml create mode 100644 modules/audit-logging/test/Volo.Abp.AuditLogging.MongoDB.Tests/FodyWeavers.xsd create mode 100644 modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/FodyWeavers.xml create mode 100644 modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/FodyWeavers.xsd create mode 100644 modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/FodyWeavers.xml create mode 100644 modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/FodyWeavers.xsd create mode 100644 modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/FodyWeavers.xml create mode 100644 modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/FodyWeavers.xsd create mode 100644 modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/FodyWeavers.xml create mode 100644 modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/FodyWeavers.xsd create mode 100644 modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/FodyWeavers.xml create mode 100644 modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/FodyWeavers.xsd create mode 100644 modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/FodyWeavers.xml create mode 100644 modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/FodyWeavers.xsd create mode 100644 modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/FodyWeavers.xml create mode 100644 modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/FodyWeavers.xsd create mode 100644 modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/FodyWeavers.xml create mode 100644 modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/FodyWeavers.xsd create mode 100644 modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/FodyWeavers.xml create mode 100644 modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/FodyWeavers.xsd create mode 100644 modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/FodyWeavers.xml create mode 100644 modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/FodyWeavers.xsd create mode 100644 modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/FodyWeavers.xml create mode 100644 modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/FodyWeavers.xsd create mode 100644 modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/FodyWeavers.xml create mode 100644 modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/FodyWeavers.xsd create mode 100644 modules/background-jobs/test/Volo.Abp.BackgroundJobs.MongoDB.Tests/FodyWeavers.xml create mode 100644 modules/background-jobs/test/Volo.Abp.BackgroundJobs.MongoDB.Tests/FodyWeavers.xsd create mode 100644 modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/FodyWeavers.xml create mode 100644 modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/FodyWeavers.xsd create mode 100644 modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/FodyWeavers.xml create mode 100644 modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/FodyWeavers.xsd create mode 100644 modules/blogging/app/Volo.BloggingTestApp.MongoDB/FodyWeavers.xml create mode 100644 modules/blogging/app/Volo.BloggingTestApp.MongoDB/FodyWeavers.xsd create mode 100644 modules/blogging/app/Volo.BloggingTestApp/FodyWeavers.xml create mode 100644 modules/blogging/app/Volo.BloggingTestApp/FodyWeavers.xsd create mode 100644 modules/blogging/src/Volo.Blogging.Application.Contracts/FodyWeavers.xml create mode 100644 modules/blogging/src/Volo.Blogging.Application.Contracts/FodyWeavers.xsd create mode 100644 modules/blogging/src/Volo.Blogging.Application/FodyWeavers.xml create mode 100644 modules/blogging/src/Volo.Blogging.Application/FodyWeavers.xsd create mode 100644 modules/blogging/src/Volo.Blogging.Domain.Shared/FodyWeavers.xml create mode 100644 modules/blogging/src/Volo.Blogging.Domain.Shared/FodyWeavers.xsd create mode 100644 modules/blogging/src/Volo.Blogging.Domain/FodyWeavers.xml create mode 100644 modules/blogging/src/Volo.Blogging.Domain/FodyWeavers.xsd create mode 100644 modules/blogging/src/Volo.Blogging.EntityFrameworkCore/FodyWeavers.xml create mode 100644 modules/blogging/src/Volo.Blogging.EntityFrameworkCore/FodyWeavers.xsd create mode 100644 modules/blogging/src/Volo.Blogging.HttpApi.Client/FodyWeavers.xml create mode 100644 modules/blogging/src/Volo.Blogging.HttpApi.Client/FodyWeavers.xsd create mode 100644 modules/blogging/src/Volo.Blogging.HttpApi/FodyWeavers.xml create mode 100644 modules/blogging/src/Volo.Blogging.HttpApi/FodyWeavers.xsd create mode 100644 modules/blogging/src/Volo.Blogging.MongoDB/FodyWeavers.xml create mode 100644 modules/blogging/src/Volo.Blogging.MongoDB/FodyWeavers.xsd create mode 100644 modules/blogging/src/Volo.Blogging.Web/FodyWeavers.xml create mode 100644 modules/blogging/src/Volo.Blogging.Web/FodyWeavers.xsd create mode 100644 modules/blogging/test/Volo.Blogging.Application.Tests/FodyWeavers.xml create mode 100644 modules/blogging/test/Volo.Blogging.Application.Tests/FodyWeavers.xsd create mode 100644 modules/blogging/test/Volo.Blogging.Domain.Tests/FodyWeavers.xml create mode 100644 modules/blogging/test/Volo.Blogging.Domain.Tests/FodyWeavers.xsd create mode 100644 modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/FodyWeavers.xml create mode 100644 modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/FodyWeavers.xsd create mode 100644 modules/blogging/test/Volo.Blogging.MongoDB.Tests/FodyWeavers.xml create mode 100644 modules/blogging/test/Volo.Blogging.MongoDB.Tests/FodyWeavers.xsd create mode 100644 modules/blogging/test/Volo.Blogging.TestBase/FodyWeavers.xml create mode 100644 modules/blogging/test/Volo.Blogging.TestBase/FodyWeavers.xsd create mode 100644 modules/client-simulation/demo/Volo.ClientSimulation.Demo/FodyWeavers.xml create mode 100644 modules/client-simulation/demo/Volo.ClientSimulation.Demo/FodyWeavers.xsd create mode 100644 modules/client-simulation/src/Volo.ClientSimulation.Web/FodyWeavers.xml create mode 100644 modules/client-simulation/src/Volo.ClientSimulation.Web/FodyWeavers.xsd create mode 100644 modules/client-simulation/src/Volo.ClientSimulation/FodyWeavers.xml create mode 100644 modules/client-simulation/src/Volo.ClientSimulation/FodyWeavers.xsd create mode 100644 modules/docs/app/VoloDocs.EntityFrameworkCore/FodyWeavers.xml create mode 100644 modules/docs/app/VoloDocs.EntityFrameworkCore/FodyWeavers.xsd create mode 100644 modules/docs/app/VoloDocs.Migrator/FodyWeavers.xml create mode 100644 modules/docs/app/VoloDocs.Migrator/FodyWeavers.xsd create mode 100644 modules/docs/app/VoloDocs.Web/FodyWeavers.xml create mode 100644 modules/docs/app/VoloDocs.Web/FodyWeavers.xsd create mode 100644 modules/docs/src/Volo.Docs.Admin.Application.Contracts/FodyWeavers.xml create mode 100644 modules/docs/src/Volo.Docs.Admin.Application.Contracts/FodyWeavers.xsd create mode 100644 modules/docs/src/Volo.Docs.Admin.Application/FodyWeavers.xml create mode 100644 modules/docs/src/Volo.Docs.Admin.Application/FodyWeavers.xsd create mode 100644 modules/docs/src/Volo.Docs.Admin.HttpApi.Client/FodyWeavers.xml create mode 100644 modules/docs/src/Volo.Docs.Admin.HttpApi.Client/FodyWeavers.xsd create mode 100644 modules/docs/src/Volo.Docs.Admin.HttpApi/FodyWeavers.xml create mode 100644 modules/docs/src/Volo.Docs.Admin.HttpApi/FodyWeavers.xsd create mode 100644 modules/docs/src/Volo.Docs.Admin.Web/FodyWeavers.xml create mode 100644 modules/docs/src/Volo.Docs.Admin.Web/FodyWeavers.xsd create mode 100644 modules/docs/src/Volo.Docs.Application.Contracts/FodyWeavers.xml create mode 100644 modules/docs/src/Volo.Docs.Application.Contracts/FodyWeavers.xsd create mode 100644 modules/docs/src/Volo.Docs.Application/FodyWeavers.xml create mode 100644 modules/docs/src/Volo.Docs.Application/FodyWeavers.xsd create mode 100644 modules/docs/src/Volo.Docs.Domain.Shared/FodyWeavers.xml create mode 100644 modules/docs/src/Volo.Docs.Domain.Shared/FodyWeavers.xsd create mode 100644 modules/docs/src/Volo.Docs.Domain/FodyWeavers.xml create mode 100644 modules/docs/src/Volo.Docs.Domain/FodyWeavers.xsd create mode 100644 modules/docs/src/Volo.Docs.EntityFrameworkCore/FodyWeavers.xml create mode 100644 modules/docs/src/Volo.Docs.EntityFrameworkCore/FodyWeavers.xsd create mode 100644 modules/docs/src/Volo.Docs.HttpApi.Client/FodyWeavers.xml create mode 100644 modules/docs/src/Volo.Docs.HttpApi.Client/FodyWeavers.xsd create mode 100644 modules/docs/src/Volo.Docs.HttpApi/FodyWeavers.xml create mode 100644 modules/docs/src/Volo.Docs.HttpApi/FodyWeavers.xsd create mode 100644 modules/docs/src/Volo.Docs.MongoDB/FodyWeavers.xml create mode 100644 modules/docs/src/Volo.Docs.MongoDB/FodyWeavers.xsd create mode 100644 modules/docs/src/Volo.Docs.Web/FodyWeavers.xml create mode 100644 modules/docs/src/Volo.Docs.Web/FodyWeavers.xsd create mode 100644 modules/docs/test/Volo.Docs.Admin.Application.Tests/FodyWeavers.xml create mode 100644 modules/docs/test/Volo.Docs.Admin.Application.Tests/FodyWeavers.xsd create mode 100644 modules/docs/test/Volo.Docs.Application.Tests/FodyWeavers.xml create mode 100644 modules/docs/test/Volo.Docs.Application.Tests/FodyWeavers.xsd create mode 100644 modules/docs/test/Volo.Docs.Domain.Tests/FodyWeavers.xml create mode 100644 modules/docs/test/Volo.Docs.Domain.Tests/FodyWeavers.xsd create mode 100644 modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/FodyWeavers.xml create mode 100644 modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/FodyWeavers.xsd create mode 100644 modules/docs/test/Volo.Docs.MongoDB.Tests/FodyWeavers.xml create mode 100644 modules/docs/test/Volo.Docs.MongoDB.Tests/FodyWeavers.xsd create mode 100644 modules/docs/test/Volo.Docs.TestBase/FodyWeavers.xml create mode 100644 modules/docs/test/Volo.Docs.TestBase/FodyWeavers.xsd create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/FodyWeavers.xml create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/FodyWeavers.xsd create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Application/FodyWeavers.xml create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Application/FodyWeavers.xsd create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/FodyWeavers.xml create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/FodyWeavers.xsd create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/FodyWeavers.xml create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/FodyWeavers.xsd create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/FodyWeavers.xml create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/FodyWeavers.xsd create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/FodyWeavers.xml create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/FodyWeavers.xsd create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/FodyWeavers.xml create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/FodyWeavers.xsd create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/FodyWeavers.xml create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/FodyWeavers.xsd create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Web/FodyWeavers.xml create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Web/FodyWeavers.xsd create mode 100644 modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/FodyWeavers.xml create mode 100644 modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/FodyWeavers.xsd create mode 100644 modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/FodyWeavers.xml create mode 100644 modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/FodyWeavers.xsd create mode 100644 modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/FodyWeavers.xml create mode 100644 modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd create mode 100644 modules/feature-management/test/Volo.Abp.FeatureManagement.MongoDB.Tests/FodyWeavers.xml create mode 100644 modules/feature-management/test/Volo.Abp.FeatureManagement.MongoDB.Tests/FodyWeavers.xsd create mode 100644 modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/FodyWeavers.xml create mode 100644 modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/FodyWeavers.xsd create mode 100644 modules/identity/src/Volo.Abp.Identity.Application.Contracts/FodyWeavers.xml create mode 100644 modules/identity/src/Volo.Abp.Identity.Application.Contracts/FodyWeavers.xsd create mode 100644 modules/identity/src/Volo.Abp.Identity.Application/FodyWeavers.xml create mode 100644 modules/identity/src/Volo.Abp.Identity.Application/FodyWeavers.xsd create mode 100644 modules/identity/src/Volo.Abp.Identity.AspNetCore/FodyWeavers.xml create mode 100644 modules/identity/src/Volo.Abp.Identity.AspNetCore/FodyWeavers.xsd create mode 100644 modules/identity/src/Volo.Abp.Identity.Domain.Shared/FodyWeavers.xml create mode 100644 modules/identity/src/Volo.Abp.Identity.Domain.Shared/FodyWeavers.xsd create mode 100644 modules/identity/src/Volo.Abp.Identity.Domain/FodyWeavers.xml create mode 100644 modules/identity/src/Volo.Abp.Identity.Domain/FodyWeavers.xsd create mode 100644 modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/FodyWeavers.xml create mode 100644 modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/FodyWeavers.xsd create mode 100644 modules/identity/src/Volo.Abp.Identity.HttpApi.Client/FodyWeavers.xml create mode 100644 modules/identity/src/Volo.Abp.Identity.HttpApi.Client/FodyWeavers.xsd create mode 100644 modules/identity/src/Volo.Abp.Identity.HttpApi/FodyWeavers.xml create mode 100644 modules/identity/src/Volo.Abp.Identity.HttpApi/FodyWeavers.xsd create mode 100644 modules/identity/src/Volo.Abp.Identity.MongoDB/FodyWeavers.xml create mode 100644 modules/identity/src/Volo.Abp.Identity.MongoDB/FodyWeavers.xsd create mode 100644 modules/identity/src/Volo.Abp.Identity.Web/FodyWeavers.xml create mode 100644 modules/identity/src/Volo.Abp.Identity.Web/FodyWeavers.xsd create mode 100644 modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/FodyWeavers.xml create mode 100644 modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/FodyWeavers.xsd create mode 100644 modules/identity/test/Volo.Abp.Identity.Application.Tests/FodyWeavers.xml create mode 100644 modules/identity/test/Volo.Abp.Identity.Application.Tests/FodyWeavers.xsd create mode 100644 modules/identity/test/Volo.Abp.Identity.Domain.Tests/FodyWeavers.xml create mode 100644 modules/identity/test/Volo.Abp.Identity.Domain.Tests/FodyWeavers.xsd create mode 100644 modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/FodyWeavers.xml create mode 100644 modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/FodyWeavers.xsd create mode 100644 modules/identity/test/Volo.Abp.Identity.MongoDB.Tests/FodyWeavers.xml create mode 100644 modules/identity/test/Volo.Abp.Identity.MongoDB.Tests/FodyWeavers.xsd create mode 100644 modules/identity/test/Volo.Abp.Identity.TestBase/FodyWeavers.xml create mode 100644 modules/identity/test/Volo.Abp.Identity.TestBase/FodyWeavers.xsd create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/FodyWeavers.xml create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/FodyWeavers.xsd create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain/FodyWeavers.xml create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain/FodyWeavers.xsd create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/FodyWeavers.xml create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/FodyWeavers.xsd create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/FodyWeavers.xml create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/FodyWeavers.xsd create mode 100644 modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/FodyWeavers.xml create mode 100644 modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/FodyWeavers.xsd create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/FodyWeavers.xml create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/FodyWeavers.xsd create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/FodyWeavers.xml create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/FodyWeavers.xsd create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/FodyWeavers.xml create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/FodyWeavers.xsd create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/FodyWeavers.xml create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/FodyWeavers.xsd create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/FodyWeavers.xml create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/FodyWeavers.xsd create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.Application/FodyWeavers.xml create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.Application/FodyWeavers.xsd create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/FodyWeavers.xml create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/FodyWeavers.xsd create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/FodyWeavers.xml create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/FodyWeavers.xsd create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xml create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xsd create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/FodyWeavers.xml create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/FodyWeavers.xsd create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/FodyWeavers.xml create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/FodyWeavers.xsd create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/FodyWeavers.xml create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/FodyWeavers.xsd create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.Web/FodyWeavers.xml create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.Web/FodyWeavers.xsd create mode 100644 modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/FodyWeavers.xml create mode 100644 modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/FodyWeavers.xsd create mode 100644 modules/permission-management/test/Volo.Abp.PermissionManagement.EntityFrameworkCore.Tests/FodyWeavers.xml create mode 100644 modules/permission-management/test/Volo.Abp.PermissionManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd create mode 100644 modules/permission-management/test/Volo.Abp.PermissionManagement.MongoDB.Tests/FodyWeavers.xml create mode 100644 modules/permission-management/test/Volo.Abp.PermissionManagement.MongoDB.Tests/FodyWeavers.xsd create mode 100644 modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/FodyWeavers.xml create mode 100644 modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/FodyWeavers.xsd create mode 100644 modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/FodyWeavers.xml create mode 100644 modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/FodyWeavers.xsd create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/FodyWeavers.xml create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/FodyWeavers.xsd create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Domain/FodyWeavers.xml create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Domain/FodyWeavers.xsd create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/FodyWeavers.xml create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/FodyWeavers.xsd create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/FodyWeavers.xml create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/FodyWeavers.xsd create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Web/FodyWeavers.xml create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Web/FodyWeavers.xsd create mode 100644 modules/setting-management/test/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests/FodyWeavers.xml create mode 100644 modules/setting-management/test/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd create mode 100644 modules/setting-management/test/Volo.Abp.SettingManagement.MongoDB.Tests/FodyWeavers.xml create mode 100644 modules/setting-management/test/Volo.Abp.SettingManagement.MongoDB.Tests/FodyWeavers.xsd create mode 100644 modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/FodyWeavers.xml create mode 100644 modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/FodyWeavers.xsd create mode 100644 modules/setting-management/test/Volo.Abp.SettingManagement.Tests/FodyWeavers.xml create mode 100644 modules/setting-management/test/Volo.Abp.SettingManagement.Tests/FodyWeavers.xsd create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/FodyWeavers.xml create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/FodyWeavers.xsd create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Application/FodyWeavers.xml create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Application/FodyWeavers.xsd create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/FodyWeavers.xml create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/FodyWeavers.xsd create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/FodyWeavers.xml create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/FodyWeavers.xsd create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/FodyWeavers.xml create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/FodyWeavers.xsd create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/FodyWeavers.xml create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/FodyWeavers.xsd create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/FodyWeavers.xml create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/FodyWeavers.xsd create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/FodyWeavers.xml create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/FodyWeavers.xsd create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Web/FodyWeavers.xml create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Web/FodyWeavers.xsd create mode 100644 modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/FodyWeavers.xml create mode 100644 modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/FodyWeavers.xsd create mode 100644 modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/FodyWeavers.xml create mode 100644 modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/FodyWeavers.xsd create mode 100644 modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/FodyWeavers.xml create mode 100644 modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd create mode 100644 modules/tenant-management/test/Volo.Abp.TenantManagement.MongoDB.Tests/FodyWeavers.xml create mode 100644 modules/tenant-management/test/Volo.Abp.TenantManagement.MongoDB.Tests/FodyWeavers.xsd create mode 100644 modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/FodyWeavers.xml create mode 100644 modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/FodyWeavers.xsd create mode 100644 modules/users/src/Volo.Abp.Users.Abstractions/FodyWeavers.xml create mode 100644 modules/users/src/Volo.Abp.Users.Abstractions/FodyWeavers.xsd create mode 100644 modules/users/src/Volo.Abp.Users.Domain.Shared/FodyWeavers.xml create mode 100644 modules/users/src/Volo.Abp.Users.Domain.Shared/FodyWeavers.xsd create mode 100644 modules/users/src/Volo.Abp.Users.Domain/FodyWeavers.xml create mode 100644 modules/users/src/Volo.Abp.Users.Domain/FodyWeavers.xsd create mode 100644 modules/users/src/Volo.Abp.Users.EntityFrameworkCore/FodyWeavers.xml create mode 100644 modules/users/src/Volo.Abp.Users.EntityFrameworkCore/FodyWeavers.xsd create mode 100644 modules/users/src/Volo.Abp.Users.MongoDB/FodyWeavers.xml create mode 100644 modules/users/src/Volo.Abp.Users.MongoDB/FodyWeavers.xsd create mode 100644 samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/FodyWeavers.xml create mode 100644 samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/FodyWeavers.xsd create mode 100644 samples/BasicConsoleApplication/AbpConsoleDemo/FodyWeavers.xml create mode 100644 samples/BasicConsoleApplication/AbpConsoleDemo/FodyWeavers.xsd create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/FodyWeavers.xml create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/FodyWeavers.xsd create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/FodyWeavers.xml create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/FodyWeavers.xml create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/FodyWeavers.xsd create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/FodyWeavers.xml create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/FodyWeavers.xsd create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/FodyWeavers.xml create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/FodyWeavers.xsd create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/FodyWeavers.xml create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/FodyWeavers.xsd create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/FodyWeavers.xml create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/FodyWeavers.xml create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/FodyWeavers.xsd create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/FodyWeavers.xml create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.Application/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.Application/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.Domain/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.Domain/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.Web/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.Web/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/FodyWeavers.xsd create mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/FodyWeavers.xml create mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/FodyWeavers.xsd create mode 100644 samples/BookStore/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml create mode 100644 samples/BookStore/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd create mode 100644 samples/BookStore/src/Acme.BookStore.Application/FodyWeavers.xml create mode 100644 samples/BookStore/src/Acme.BookStore.Application/FodyWeavers.xsd create mode 100644 samples/BookStore/src/Acme.BookStore.DbMigrator/FodyWeavers.xml create mode 100644 samples/BookStore/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd create mode 100644 samples/BookStore/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml create mode 100644 samples/BookStore/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd create mode 100644 samples/BookStore/src/Acme.BookStore.Domain/FodyWeavers.xml create mode 100644 samples/BookStore/src/Acme.BookStore.Domain/FodyWeavers.xsd create mode 100644 samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml create mode 100644 samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd create mode 100644 samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml create mode 100644 samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xsd create mode 100644 samples/BookStore/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml create mode 100644 samples/BookStore/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd create mode 100644 samples/BookStore/src/Acme.BookStore.HttpApi/FodyWeavers.xml create mode 100644 samples/BookStore/src/Acme.BookStore.HttpApi/FodyWeavers.xsd create mode 100644 samples/BookStore/src/Acme.BookStore.Web/FodyWeavers.xml create mode 100644 samples/BookStore/src/Acme.BookStore.Web/FodyWeavers.xsd create mode 100644 samples/BookStore/test/Acme.BookStore.Application.Tests/FodyWeavers.xml create mode 100644 samples/BookStore/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd create mode 100644 samples/BookStore/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml create mode 100644 samples/BookStore/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd create mode 100644 samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml create mode 100644 samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xsd create mode 100644 samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml create mode 100644 samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd create mode 100644 samples/BookStore/test/Acme.BookStore.TestBase/FodyWeavers.xml create mode 100644 samples/BookStore/test/Acme.BookStore.TestBase/FodyWeavers.xsd create mode 100644 samples/BookStore/test/Acme.BookStore.Web.Tests/FodyWeavers.xml create mode 100644 samples/BookStore/test/Acme.BookStore.Web.Tests/FodyWeavers.xsd create mode 100644 samples/DashboardDemo/src/DashboardDemo.Application.Contracts/FodyWeavers.xml create mode 100644 samples/DashboardDemo/src/DashboardDemo.Application.Contracts/FodyWeavers.xsd create mode 100644 samples/DashboardDemo/src/DashboardDemo.Application/FodyWeavers.xml create mode 100644 samples/DashboardDemo/src/DashboardDemo.Application/FodyWeavers.xsd create mode 100644 samples/DashboardDemo/src/DashboardDemo.DbMigrator/FodyWeavers.xml create mode 100644 samples/DashboardDemo/src/DashboardDemo.DbMigrator/FodyWeavers.xsd create mode 100644 samples/DashboardDemo/src/DashboardDemo.Domain.Shared/FodyWeavers.xml create mode 100644 samples/DashboardDemo/src/DashboardDemo.Domain.Shared/FodyWeavers.xsd create mode 100644 samples/DashboardDemo/src/DashboardDemo.Domain/FodyWeavers.xml create mode 100644 samples/DashboardDemo/src/DashboardDemo.Domain/FodyWeavers.xsd create mode 100644 samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/FodyWeavers.xml create mode 100644 samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd create mode 100644 samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/FodyWeavers.xml create mode 100644 samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/FodyWeavers.xsd create mode 100644 samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/FodyWeavers.xml create mode 100644 samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/FodyWeavers.xsd create mode 100644 samples/DashboardDemo/src/DashboardDemo.HttpApi/FodyWeavers.xml create mode 100644 samples/DashboardDemo/src/DashboardDemo.HttpApi/FodyWeavers.xsd create mode 100644 samples/DashboardDemo/src/DashboardDemo.Web/FodyWeavers.xml create mode 100644 samples/DashboardDemo/src/DashboardDemo.Web/FodyWeavers.xsd create mode 100644 samples/DashboardDemo/test/DashboardDemo.Application.Tests/FodyWeavers.xml create mode 100644 samples/DashboardDemo/test/DashboardDemo.Application.Tests/FodyWeavers.xsd create mode 100644 samples/DashboardDemo/test/DashboardDemo.Domain.Tests/FodyWeavers.xml create mode 100644 samples/DashboardDemo/test/DashboardDemo.Domain.Tests/FodyWeavers.xsd create mode 100644 samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/FodyWeavers.xml create mode 100644 samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/FodyWeavers.xsd create mode 100644 samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml create mode 100644 samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd create mode 100644 samples/DashboardDemo/test/DashboardDemo.TestBase/FodyWeavers.xml create mode 100644 samples/DashboardDemo/test/DashboardDemo.TestBase/FodyWeavers.xsd create mode 100644 samples/DashboardDemo/test/DashboardDemo.Web.Tests/FodyWeavers.xml create mode 100644 samples/DashboardDemo/test/DashboardDemo.Web.Tests/FodyWeavers.xsd create mode 100644 samples/MicroserviceDemo/applications/AuthServer.Host/FodyWeavers.xml create mode 100644 samples/MicroserviceDemo/applications/AuthServer.Host/FodyWeavers.xsd create mode 100644 samples/MicroserviceDemo/applications/BackendAdminApp.Host/FodyWeavers.xml create mode 100644 samples/MicroserviceDemo/applications/BackendAdminApp.Host/FodyWeavers.xsd create mode 100644 samples/MicroserviceDemo/applications/ConsoleClientDemo/FodyWeavers.xml create mode 100644 samples/MicroserviceDemo/applications/ConsoleClientDemo/FodyWeavers.xsd create mode 100644 samples/MicroserviceDemo/applications/PublicWebSite.Host/FodyWeavers.xml create mode 100644 samples/MicroserviceDemo/applications/PublicWebSite.Host/FodyWeavers.xsd create mode 100644 samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/FodyWeavers.xml create mode 100644 samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/FodyWeavers.xsd create mode 100644 samples/MicroserviceDemo/gateways/InternalGateway.Host/FodyWeavers.xml create mode 100644 samples/MicroserviceDemo/gateways/InternalGateway.Host/FodyWeavers.xsd create mode 100644 samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/FodyWeavers.xml create mode 100644 samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/FodyWeavers.xsd create mode 100644 samples/MicroserviceDemo/microservices/BloggingService.Host/FodyWeavers.xml create mode 100644 samples/MicroserviceDemo/microservices/BloggingService.Host/FodyWeavers.xsd create mode 100644 samples/MicroserviceDemo/microservices/IdentityService.Host/FodyWeavers.xml create mode 100644 samples/MicroserviceDemo/microservices/IdentityService.Host/FodyWeavers.xsd create mode 100644 samples/MicroserviceDemo/microservices/ProductService.Host/FodyWeavers.xml create mode 100644 samples/MicroserviceDemo/microservices/ProductService.Host/FodyWeavers.xsd create mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/FodyWeavers.xml create mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/FodyWeavers.xsd create mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/FodyWeavers.xml create mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/FodyWeavers.xsd create mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/FodyWeavers.xml create mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/FodyWeavers.xsd create mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/FodyWeavers.xml create mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/FodyWeavers.xsd create mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/FodyWeavers.xml create mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/FodyWeavers.xsd create mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/FodyWeavers.xml create mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/FodyWeavers.xsd create mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/FodyWeavers.xml create mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/FodyWeavers.xsd create mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/FodyWeavers.xml create mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/FodyWeavers.xsd create mode 100644 samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/FodyWeavers.xml create mode 100644 samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/FodyWeavers.xsd create mode 100644 samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/FodyWeavers.xml create mode 100644 samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/FodyWeavers.xsd create mode 100644 samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/FodyWeavers.xml create mode 100644 samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd create mode 100644 samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/FodyWeavers.xml create mode 100644 samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/FodyWeavers.xsd create mode 100644 samples/RabbitMqEventBus/App1/FodyWeavers.xml create mode 100644 samples/RabbitMqEventBus/App1/FodyWeavers.xsd create mode 100644 samples/RabbitMqEventBus/App2/FodyWeavers.xml create mode 100644 samples/RabbitMqEventBus/App2/FodyWeavers.xsd create mode 100644 samples/RabbitMqEventBus/SharedModule/FodyWeavers.xml create mode 100644 samples/RabbitMqEventBus/SharedModule/FodyWeavers.xsd create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xsd create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xsd create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/FodyWeavers.xml create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/FodyWeavers.xsd create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xsd create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xsd create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/FodyWeavers.xml create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xsd create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xsd create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xsd create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/FodyWeavers.xml create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/FodyWeavers.xsd create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xsd create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xsd create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xsd create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xsd create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xsd create mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml create mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xsd create mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml create mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xsd create mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml create mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xsd create mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml create mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd create mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml create mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xsd create mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml create mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xsd create mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/FodyWeavers.xml create mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/FodyWeavers.xsd create mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xml create mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xsd create mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml create mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xsd create mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml create mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xsd create mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml create mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xsd create mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xml create mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xsd create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xsd create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xsd create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xsd create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xsd create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xsd create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xsd create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xsd create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xsd create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xsd create mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml create mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xsd create mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml create mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xsd create mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml create mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xsd create mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml create mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd create mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml create mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xsd create mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml create mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xsd diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj b/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj index aaebfafe6f..015357cdee 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj @@ -1,4 +1,6 @@ - + + + netstandard2.0 diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/FodyWeavers.xml b/abp_io/AbpIoLocalization/AbpIoLocalization/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/FodyWeavers.xsd b/abp_io/AbpIoLocalization/AbpIoLocalization/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/configureawait.props b/configureawait.props new file mode 100644 index 0000000000..5247c80ae0 --- /dev/null +++ b/configureawait.props @@ -0,0 +1,9 @@ + + + + + all + runtime; build; native; contentfiles; analyzers + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xml b/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xsd b/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.ApiVersioning.Abstractions/Volo.Abp.ApiVersioning.Abstractions.csproj b/framework/src/Volo.Abp.ApiVersioning.Abstractions/Volo.Abp.ApiVersioning.Abstractions.csproj index 43ebfb8230..365450cd73 100644 --- a/framework/src/Volo.Abp.ApiVersioning.Abstractions/Volo.Abp.ApiVersioning.Abstractions.csproj +++ b/framework/src/Volo.Abp.ApiVersioning.Abstractions/Volo.Abp.ApiVersioning.Abstractions.csproj @@ -1,5 +1,6 @@ + diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 eb6908d0cd..e2392c2b53 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Volo.Abp.AspNetCore.Authentication.OAuth.csproj b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Volo.Abp.AspNetCore.Authentication.OAuth.csproj index 6a5f7edb36..ae032e5b9e 100644 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Volo.Abp.AspNetCore.Authentication.OAuth.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Volo.Abp.AspNetCore.Authentication.OAuth.csproj @@ -1,5 +1,6 @@ - + + @@ -19,4 +20,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo.Abp.AspNetCore.MultiTenancy.csproj b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo.Abp.AspNetCore.MultiTenancy.csproj index 6688526622..e9fa75d716 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo.Abp.AspNetCore.MultiTenancy.csproj +++ b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo.Abp.AspNetCore.MultiTenancy.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo.Abp.AspNetCore.Mvc.Client.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo.Abp.AspNetCore.Mvc.Client.csproj index aa45445c43..87641365b2 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo.Abp.AspNetCore.Mvc.Client.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo.Abp.AspNetCore.Mvc.Client.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo.Abp.AspNetCore.Mvc.Contracts.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo.Abp.AspNetCore.Mvc.Contracts.csproj index 9d3107e90c..a979cfa637 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo.Abp.AspNetCore.Mvc.Contracts.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo.Abp.AspNetCore.Mvc.Contracts.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.csproj index c6ad85408b..2fb94ac218 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo.Abp.AspNetCore.Mvc.UI.Bundling.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo.Abp.AspNetCore.Mvc.UI.Bundling.csproj index a1b83cbaef..84ea011233 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo.Abp.AspNetCore.Mvc.UI.Bundling.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo.Abp.AspNetCore.Mvc.UI.Bundling.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy.csproj index 7a31569dda..2400b9c291 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo.Abp.AspNetCore.Mvc.UI.Packages.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo.Abp.AspNetCore.Mvc.UI.Packages.csproj index 7a86cbb464..6cb0a02153 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo.Abp.AspNetCore.Mvc.UI.Packages.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo.Abp.AspNetCore.Mvc.UI.Packages.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.csproj index 168ca481fd..43f5bc20bf 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.csproj @@ -1,5 +1,6 @@ - + + @@ -36,4 +37,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.csproj index 0962057909..7c4147bba5 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.csproj @@ -1,5 +1,6 @@ - + + @@ -39,4 +40,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo.Abp.AspNetCore.Mvc.UI.Widgets.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo.Abp.AspNetCore.Mvc.UI.Widgets.csproj index d26c12fc7a..06afcf3f3e 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo.Abp.AspNetCore.Mvc.UI.Widgets.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo.Abp.AspNetCore.Mvc.UI.Widgets.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 fb784efd44..ffdaf02d94 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 0778c57747..dabe2e30d4 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 f450e04423..b0bb8930df 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 2a9b1d394b..38d9a34867 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj b/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj index 3ae691a1fc..a3089646d2 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj +++ b/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.Auditing/FodyWeavers.xml b/framework/src/Volo.Abp.Auditing/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Auditing/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Auditing/FodyWeavers.xsd b/framework/src/Volo.Abp.Auditing/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Auditing/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Auditing/Volo.Abp.Auditing.csproj b/framework/src/Volo.Abp.Auditing/Volo.Abp.Auditing.csproj index cca8e99545..4ac2420c8f 100644 --- a/framework/src/Volo.Abp.Auditing/Volo.Abp.Auditing.csproj +++ b/framework/src/Volo.Abp.Auditing/Volo.Abp.Auditing.csproj @@ -1,5 +1,6 @@ + diff --git a/framework/src/Volo.Abp.Authorization/FodyWeavers.xml b/framework/src/Volo.Abp.Authorization/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Authorization/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Authorization/FodyWeavers.xsd b/framework/src/Volo.Abp.Authorization/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Authorization/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Authorization/Volo.Abp.Authorization.csproj b/framework/src/Volo.Abp.Authorization/Volo.Abp.Authorization.csproj index 616436707f..8c6482837f 100644 --- a/framework/src/Volo.Abp.Authorization/Volo.Abp.Authorization.csproj +++ b/framework/src/Volo.Abp.Authorization/Volo.Abp.Authorization.csproj @@ -1,5 +1,6 @@ + diff --git a/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xml b/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xsd b/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj b/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj index ae6d39c61c..e6146fedde 100644 --- a/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj +++ b/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj @@ -1,5 +1,6 @@ - + + @@ -21,4 +22,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.Autofac/FodyWeavers.xml b/framework/src/Volo.Abp.Autofac/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Autofac/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Autofac/FodyWeavers.xsd b/framework/src/Volo.Abp.Autofac/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Autofac/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj b/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj index 8caf74b672..868f7e6719 100644 --- a/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj +++ b/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj @@ -1,5 +1,6 @@ - + + @@ -23,4 +24,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xsd b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo.Abp.BackgroundJobs.Abstractions.csproj b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo.Abp.BackgroundJobs.Abstractions.csproj index f85081f15a..1788867e39 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo.Abp.BackgroundJobs.Abstractions.csproj +++ b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo.Abp.BackgroundJobs.Abstractions.csproj @@ -1,5 +1,6 @@ - + + @@ -17,4 +18,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xsd b/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundJobs.HangFire/Volo.Abp.BackgroundJobs.HangFire.csproj b/framework/src/Volo.Abp.BackgroundJobs.HangFire/Volo.Abp.BackgroundJobs.HangFire.csproj index e47408ca4b..9a197ef095 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.HangFire/Volo.Abp.BackgroundJobs.HangFire.csproj +++ b/framework/src/Volo.Abp.BackgroundJobs.HangFire/Volo.Abp.BackgroundJobs.HangFire.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xsd b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo.Abp.BackgroundJobs.RabbitMQ.csproj b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo.Abp.BackgroundJobs.RabbitMQ.csproj index 8ee2c499b6..a74903bad4 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo.Abp.BackgroundJobs.RabbitMQ.csproj +++ b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo.Abp.BackgroundJobs.RabbitMQ.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xsd b/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundJobs/Volo.Abp.BackgroundJobs.csproj b/framework/src/Volo.Abp.BackgroundJobs/Volo.Abp.BackgroundJobs.csproj index a39b8bbbee..858038e5df 100644 --- a/framework/src/Volo.Abp.BackgroundJobs/Volo.Abp.BackgroundJobs.csproj +++ b/framework/src/Volo.Abp.BackgroundJobs/Volo.Abp.BackgroundJobs.csproj @@ -1,5 +1,6 @@ - + + @@ -21,4 +22,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xsd b/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundWorkers/Volo.Abp.BackgroundWorkers.csproj b/framework/src/Volo.Abp.BackgroundWorkers/Volo.Abp.BackgroundWorkers.csproj index 61bc5af316..c8e518c4d3 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers/Volo.Abp.BackgroundWorkers.csproj +++ b/framework/src/Volo.Abp.BackgroundWorkers/Volo.Abp.BackgroundWorkers.csproj @@ -1,5 +1,6 @@ - + + @@ -17,4 +18,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.Caching/FodyWeavers.xml b/framework/src/Volo.Abp.Caching/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Caching/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Caching/FodyWeavers.xsd b/framework/src/Volo.Abp.Caching/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Caching/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Caching/Volo.Abp.Caching.csproj b/framework/src/Volo.Abp.Caching/Volo.Abp.Caching.csproj index 054f41c28e..f59d9fe116 100644 --- a/framework/src/Volo.Abp.Caching/Volo.Abp.Caching.csproj +++ b/framework/src/Volo.Abp.Caching/Volo.Abp.Caching.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xml b/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xsd b/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 3d01363064..24f7fbe682 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 @@ -1,5 +1,6 @@ - + + @@ -22,4 +23,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xml b/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xsd b/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 1ddfe2abec..0b9306be91 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 @@ -1,5 +1,6 @@ - + + @@ -30,4 +31,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.Cli/FodyWeavers.xml b/framework/src/Volo.Abp.Cli/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Cli/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli/FodyWeavers.xsd b/framework/src/Volo.Abp.Cli/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Cli/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli/Volo.Abp.Cli.csproj b/framework/src/Volo.Abp.Cli/Volo.Abp.Cli.csproj index 333311afd2..f6bcbd5def 100644 --- a/framework/src/Volo.Abp.Cli/Volo.Abp.Cli.csproj +++ b/framework/src/Volo.Abp.Cli/Volo.Abp.Cli.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.Core/FodyWeavers.xml b/framework/src/Volo.Abp.Core/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Core/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/FodyWeavers.xsd b/framework/src/Volo.Abp.Core/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Core/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj b/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj index 42c60785ba..5ffc15d19f 100644 --- a/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj +++ b/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj @@ -1,5 +1,6 @@ - - + + + netstandard2.0 Volo.Abp.Core @@ -29,4 +30,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.Dapper/FodyWeavers.xml b/framework/src/Volo.Abp.Dapper/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Dapper/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Dapper/FodyWeavers.xsd b/framework/src/Volo.Abp.Dapper/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Dapper/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Dapper/Volo.Abp.Dapper.csproj b/framework/src/Volo.Abp.Dapper/Volo.Abp.Dapper.csproj index f7b9d76169..47a6a9d83c 100644 --- a/framework/src/Volo.Abp.Dapper/Volo.Abp.Dapper.csproj +++ b/framework/src/Volo.Abp.Dapper/Volo.Abp.Dapper.csproj @@ -1,5 +1,6 @@ - + + @@ -21,4 +22,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.Data/FodyWeavers.xml b/framework/src/Volo.Abp.Data/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Data/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Data/FodyWeavers.xsd b/framework/src/Volo.Abp.Data/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Data/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Data/Volo.Abp.Data.csproj b/framework/src/Volo.Abp.Data/Volo.Abp.Data.csproj index d2734cb119..7a53782ae1 100644 --- a/framework/src/Volo.Abp.Data/Volo.Abp.Data.csproj +++ b/framework/src/Volo.Abp.Data/Volo.Abp.Data.csproj @@ -1,5 +1,6 @@ + diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xml b/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xsd b/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo.Abp.Ddd.Application.Contracts.csproj b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo.Abp.Ddd.Application.Contracts.csproj index 6f1674f8ce..c210a7c54c 100644 --- a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo.Abp.Ddd.Application.Contracts.csproj +++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo.Abp.Ddd.Application.Contracts.csproj @@ -1,5 +1,6 @@ - + + @@ -23,4 +24,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xml b/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xsd b/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo.Abp.Ddd.Application.csproj b/framework/src/Volo.Abp.Ddd.Application/Volo.Abp.Ddd.Application.csproj index 09198e47f6..f88e0f4795 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo.Abp.Ddd.Application.csproj +++ b/framework/src/Volo.Abp.Ddd.Application/Volo.Abp.Ddd.Application.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xml b/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xsd b/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj b/framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj index cc1cb1494f..ab162e60c7 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj @@ -1,5 +1,6 @@ + diff --git a/framework/src/Volo.Abp.Emailing/FodyWeavers.xml b/framework/src/Volo.Abp.Emailing/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Emailing/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Emailing/FodyWeavers.xsd b/framework/src/Volo.Abp.Emailing/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Emailing/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Emailing/Volo.Abp.Emailing.csproj b/framework/src/Volo.Abp.Emailing/Volo.Abp.Emailing.csproj index 40fe0b3610..be953a1f26 100644 --- a/framework/src/Volo.Abp.Emailing/Volo.Abp.Emailing.csproj +++ b/framework/src/Volo.Abp.Emailing/Volo.Abp.Emailing.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xml b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xsd b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 b63a2ae7cb..22dac89e9b 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 @@ -1,5 +1,6 @@ - - + + + diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/FodyWeavers.xml b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/FodyWeavers.xsd b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 0154d1b773..23c1fd4cab 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/FodyWeavers.xml b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/FodyWeavers.xsd b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 d0d338be9d..2062091493 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/FodyWeavers.xml b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/FodyWeavers.xsd b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 d3c5313898..30675ff6ff 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/FodyWeavers.xml b/framework/src/Volo.Abp.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/FodyWeavers.xsd b/framework/src/Volo.Abp.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj b/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj index 3e83001eb2..05f93d998b 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/FodyWeavers.xml b/framework/src/Volo.Abp.EventBus.RabbitMQ/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/FodyWeavers.xsd b/framework/src/Volo.Abp.EventBus.RabbitMQ/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo.Abp.EventBus.RabbitMQ.csproj b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo.Abp.EventBus.RabbitMQ.csproj index c9bab15898..40787f3fb2 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo.Abp.EventBus.RabbitMQ.csproj +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo.Abp.EventBus.RabbitMQ.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.EventBus/FodyWeavers.xml b/framework/src/Volo.Abp.EventBus/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/FodyWeavers.xsd b/framework/src/Volo.Abp.EventBus/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo.Abp.EventBus.csproj b/framework/src/Volo.Abp.EventBus/Volo.Abp.EventBus.csproj index ccce953cce..566767e111 100644 --- a/framework/src/Volo.Abp.EventBus/Volo.Abp.EventBus.csproj +++ b/framework/src/Volo.Abp.EventBus/Volo.Abp.EventBus.csproj @@ -1,5 +1,6 @@ + diff --git a/framework/src/Volo.Abp.Features/FodyWeavers.xml b/framework/src/Volo.Abp.Features/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Features/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Features/FodyWeavers.xsd b/framework/src/Volo.Abp.Features/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Features/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Features/Volo.Abp.Features.csproj b/framework/src/Volo.Abp.Features/Volo.Abp.Features.csproj index 269f447fdf..a2d098f970 100644 --- a/framework/src/Volo.Abp.Features/Volo.Abp.Features.csproj +++ b/framework/src/Volo.Abp.Features/Volo.Abp.Features.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.FluentValidation/FodyWeavers.xml b/framework/src/Volo.Abp.FluentValidation/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.FluentValidation/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.FluentValidation/FodyWeavers.xsd b/framework/src/Volo.Abp.FluentValidation/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.FluentValidation/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.FluentValidation/Volo.Abp.FluentValidation.csproj b/framework/src/Volo.Abp.FluentValidation/Volo.Abp.FluentValidation.csproj index 5510af3e25..52cee1ade7 100644 --- a/framework/src/Volo.Abp.FluentValidation/Volo.Abp.FluentValidation.csproj +++ b/framework/src/Volo.Abp.FluentValidation/Volo.Abp.FluentValidation.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.Guids/FodyWeavers.xml b/framework/src/Volo.Abp.Guids/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Guids/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Guids/FodyWeavers.xsd b/framework/src/Volo.Abp.Guids/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Guids/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Guids/Volo.Abp.Guids.csproj b/framework/src/Volo.Abp.Guids/Volo.Abp.Guids.csproj index 86f8e3243f..6c8c4c4916 100644 --- a/framework/src/Volo.Abp.Guids/Volo.Abp.Guids.csproj +++ b/framework/src/Volo.Abp.Guids/Volo.Abp.Guids.csproj @@ -1,5 +1,6 @@ + @@ -17,4 +18,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.HangFire/FodyWeavers.xml b/framework/src/Volo.Abp.HangFire/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.HangFire/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.HangFire/FodyWeavers.xsd b/framework/src/Volo.Abp.HangFire/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.HangFire/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj b/framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj index c87b39d494..eb6172b111 100644 --- a/framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj +++ b/framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.Http.Abstractions/FodyWeavers.xml b/framework/src/Volo.Abp.Http.Abstractions/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Http.Abstractions/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Abstractions/FodyWeavers.xsd b/framework/src/Volo.Abp.Http.Abstractions/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Http.Abstractions/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Abstractions/Volo.Abp.Http.Abstractions.csproj b/framework/src/Volo.Abp.Http.Abstractions/Volo.Abp.Http.Abstractions.csproj index 5c5ec94603..59de087fc4 100644 --- a/framework/src/Volo.Abp.Http.Abstractions/Volo.Abp.Http.Abstractions.csproj +++ b/framework/src/Volo.Abp.Http.Abstractions/Volo.Abp.Http.Abstractions.csproj @@ -1,5 +1,6 @@ + @@ -17,4 +18,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel/FodyWeavers.xml b/framework/src/Volo.Abp.Http.Client.IdentityModel/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel/FodyWeavers.xsd b/framework/src/Volo.Abp.Http.Client.IdentityModel/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel/Volo.Abp.Http.Client.IdentityModel.csproj b/framework/src/Volo.Abp.Http.Client.IdentityModel/Volo.Abp.Http.Client.IdentityModel.csproj index 84413c7764..e62293964a 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel/Volo.Abp.Http.Client.IdentityModel.csproj +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel/Volo.Abp.Http.Client.IdentityModel.csproj @@ -1,5 +1,6 @@ - + + @@ -20,4 +21,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.Http.Client/FodyWeavers.xml b/framework/src/Volo.Abp.Http.Client/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Http.Client/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Client/FodyWeavers.xsd b/framework/src/Volo.Abp.Http.Client/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Http.Client/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 e7198718b1..461a0c35f5 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 @@ -1,5 +1,6 @@ - + + @@ -27,4 +28,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.Http/FodyWeavers.xml b/framework/src/Volo.Abp.Http/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Http/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http/FodyWeavers.xsd b/framework/src/Volo.Abp.Http/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Http/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http/Volo.Abp.Http.csproj b/framework/src/Volo.Abp.Http/Volo.Abp.Http.csproj index 57f447604e..d707299f21 100644 --- a/framework/src/Volo.Abp.Http/Volo.Abp.Http.csproj +++ b/framework/src/Volo.Abp.Http/Volo.Abp.Http.csproj @@ -1,5 +1,6 @@ + @@ -19,4 +20,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.IdentityModel/FodyWeavers.xml b/framework/src/Volo.Abp.IdentityModel/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.IdentityModel/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.IdentityModel/FodyWeavers.xsd b/framework/src/Volo.Abp.IdentityModel/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.IdentityModel/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj b/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj index 886e092fdd..3e4ae78b91 100644 --- a/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj +++ b/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj @@ -1,5 +1,6 @@ - + + @@ -18,4 +19,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.Json/FodyWeavers.xml b/framework/src/Volo.Abp.Json/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Json/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Json/FodyWeavers.xsd b/framework/src/Volo.Abp.Json/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Json/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj b/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj index d5407991c1..8af6ecc68f 100644 --- a/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj +++ b/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj @@ -1,5 +1,6 @@ - + + @@ -21,4 +22,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.Ldap/FodyWeavers.xml b/framework/src/Volo.Abp.Ldap/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Ldap/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ldap/FodyWeavers.xsd b/framework/src/Volo.Abp.Ldap/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Ldap/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ldap/Volo.Abp.Ldap.csproj b/framework/src/Volo.Abp.Ldap/Volo.Abp.Ldap.csproj index 6b1cba1094..229f3c6c7d 100644 --- a/framework/src/Volo.Abp.Ldap/Volo.Abp.Ldap.csproj +++ b/framework/src/Volo.Abp.Ldap/Volo.Abp.Ldap.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.Localization.Abstractions/FodyWeavers.xml b/framework/src/Volo.Abp.Localization.Abstractions/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Localization.Abstractions/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Localization.Abstractions/FodyWeavers.xsd b/framework/src/Volo.Abp.Localization.Abstractions/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Localization.Abstractions/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Localization.Abstractions/Volo.Abp.Localization.Abstractions.csproj b/framework/src/Volo.Abp.Localization.Abstractions/Volo.Abp.Localization.Abstractions.csproj index b4df348774..b883ae7011 100644 --- a/framework/src/Volo.Abp.Localization.Abstractions/Volo.Abp.Localization.Abstractions.csproj +++ b/framework/src/Volo.Abp.Localization.Abstractions/Volo.Abp.Localization.Abstractions.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.Localization/FodyWeavers.xml b/framework/src/Volo.Abp.Localization/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Localization/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Localization/FodyWeavers.xsd b/framework/src/Volo.Abp.Localization/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Localization/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Localization/Volo.Abp.Localization.csproj b/framework/src/Volo.Abp.Localization/Volo.Abp.Localization.csproj index aad9dcf58d..0fd10d94ca 100644 --- a/framework/src/Volo.Abp.Localization/Volo.Abp.Localization.csproj +++ b/framework/src/Volo.Abp.Localization/Volo.Abp.Localization.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.MailKit/FodyWeavers.xml b/framework/src/Volo.Abp.MailKit/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.MailKit/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.MailKit/FodyWeavers.xsd b/framework/src/Volo.Abp.MailKit/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.MailKit/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj b/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj index d96ab22fbe..8aa654922a 100644 --- a/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj +++ b/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj @@ -1,5 +1,6 @@ - + + @@ -21,4 +22,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.MemoryDb/FodyWeavers.xml b/framework/src/Volo.Abp.MemoryDb/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.MemoryDb/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.MemoryDb/FodyWeavers.xsd b/framework/src/Volo.Abp.MemoryDb/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.MemoryDb/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.MemoryDb/Volo.Abp.MemoryDb.csproj b/framework/src/Volo.Abp.MemoryDb/Volo.Abp.MemoryDb.csproj index ad7b834c7c..1a896b8891 100644 --- a/framework/src/Volo.Abp.MemoryDb/Volo.Abp.MemoryDb.csproj +++ b/framework/src/Volo.Abp.MemoryDb/Volo.Abp.MemoryDb.csproj @@ -1,5 +1,6 @@ + @@ -17,4 +18,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.Minify/FodyWeavers.xml b/framework/src/Volo.Abp.Minify/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Minify/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Minify/FodyWeavers.xsd b/framework/src/Volo.Abp.Minify/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Minify/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Minify/Volo.Abp.Minify.csproj b/framework/src/Volo.Abp.Minify/Volo.Abp.Minify.csproj index 6abb3fcc37..ee2ecc23e6 100644 --- a/framework/src/Volo.Abp.Minify/Volo.Abp.Minify.csproj +++ b/framework/src/Volo.Abp.Minify/Volo.Abp.Minify.csproj @@ -1,5 +1,6 @@ - + + @@ -21,4 +22,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.MongoDB/FodyWeavers.xml b/framework/src/Volo.Abp.MongoDB/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.MongoDB/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.MongoDB/FodyWeavers.xsd b/framework/src/Volo.Abp.MongoDB/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.MongoDB/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj b/framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj index 5cf143f99a..7e14eb9a9e 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj +++ b/framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.MultiTenancy/FodyWeavers.xml b/framework/src/Volo.Abp.MultiTenancy/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.MultiTenancy/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.MultiTenancy/FodyWeavers.xsd b/framework/src/Volo.Abp.MultiTenancy/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.MultiTenancy/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo.Abp.MultiTenancy.csproj b/framework/src/Volo.Abp.MultiTenancy/Volo.Abp.MultiTenancy.csproj index b67e76c459..951712c7f0 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo.Abp.MultiTenancy.csproj +++ b/framework/src/Volo.Abp.MultiTenancy/Volo.Abp.MultiTenancy.csproj @@ -1,5 +1,6 @@ + diff --git a/framework/src/Volo.Abp.ObjectMapping/FodyWeavers.xml b/framework/src/Volo.Abp.ObjectMapping/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.ObjectMapping/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.ObjectMapping/FodyWeavers.xsd b/framework/src/Volo.Abp.ObjectMapping/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.ObjectMapping/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.ObjectMapping/Volo.Abp.ObjectMapping.csproj b/framework/src/Volo.Abp.ObjectMapping/Volo.Abp.ObjectMapping.csproj index 5c08dd7ed7..163fd6d534 100644 --- a/framework/src/Volo.Abp.ObjectMapping/Volo.Abp.ObjectMapping.csproj +++ b/framework/src/Volo.Abp.ObjectMapping/Volo.Abp.ObjectMapping.csproj @@ -1,5 +1,6 @@ + diff --git a/framework/src/Volo.Abp.RabbitMQ/FodyWeavers.xml b/framework/src/Volo.Abp.RabbitMQ/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.RabbitMQ/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.RabbitMQ/FodyWeavers.xsd b/framework/src/Volo.Abp.RabbitMQ/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.RabbitMQ/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.RabbitMQ/Volo.Abp.RabbitMQ.csproj b/framework/src/Volo.Abp.RabbitMQ/Volo.Abp.RabbitMQ.csproj index 2f268c964b..1a7860deeb 100644 --- a/framework/src/Volo.Abp.RabbitMQ/Volo.Abp.RabbitMQ.csproj +++ b/framework/src/Volo.Abp.RabbitMQ/Volo.Abp.RabbitMQ.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.Security/FodyWeavers.xml b/framework/src/Volo.Abp.Security/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Security/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Security/FodyWeavers.xsd b/framework/src/Volo.Abp.Security/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Security/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Security/Volo.Abp.Security.csproj b/framework/src/Volo.Abp.Security/Volo.Abp.Security.csproj index 792aaf98ff..65aca85c88 100644 --- a/framework/src/Volo.Abp.Security/Volo.Abp.Security.csproj +++ b/framework/src/Volo.Abp.Security/Volo.Abp.Security.csproj @@ -1,5 +1,6 @@ + diff --git a/framework/src/Volo.Abp.Serialization/FodyWeavers.xml b/framework/src/Volo.Abp.Serialization/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Serialization/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Serialization/FodyWeavers.xsd b/framework/src/Volo.Abp.Serialization/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Serialization/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Serialization/Volo.Abp.Serialization.csproj b/framework/src/Volo.Abp.Serialization/Volo.Abp.Serialization.csproj index 62ba5b9b14..b23178d760 100644 --- a/framework/src/Volo.Abp.Serialization/Volo.Abp.Serialization.csproj +++ b/framework/src/Volo.Abp.Serialization/Volo.Abp.Serialization.csproj @@ -1,5 +1,6 @@ + diff --git a/framework/src/Volo.Abp.Settings/FodyWeavers.xml b/framework/src/Volo.Abp.Settings/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Settings/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/FodyWeavers.xsd b/framework/src/Volo.Abp.Settings/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Settings/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo.Abp.Settings.csproj b/framework/src/Volo.Abp.Settings/Volo.Abp.Settings.csproj index 15a41c3672..65f985a87b 100644 --- a/framework/src/Volo.Abp.Settings/Volo.Abp.Settings.csproj +++ b/framework/src/Volo.Abp.Settings/Volo.Abp.Settings.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.Sms/FodyWeavers.xml b/framework/src/Volo.Abp.Sms/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Sms/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Sms/FodyWeavers.xsd b/framework/src/Volo.Abp.Sms/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Sms/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Sms/Volo.Abp.Sms.csproj b/framework/src/Volo.Abp.Sms/Volo.Abp.Sms.csproj index 33ef1dbf23..35adb7e62c 100644 --- a/framework/src/Volo.Abp.Sms/Volo.Abp.Sms.csproj +++ b/framework/src/Volo.Abp.Sms/Volo.Abp.Sms.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.Specifications/FodyWeavers.xml b/framework/src/Volo.Abp.Specifications/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Specifications/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Specifications/FodyWeavers.xsd b/framework/src/Volo.Abp.Specifications/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Specifications/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Specifications/Volo.Abp.Specifications.csproj b/framework/src/Volo.Abp.Specifications/Volo.Abp.Specifications.csproj index 97c236cfc5..6e17993ba1 100644 --- a/framework/src/Volo.Abp.Specifications/Volo.Abp.Specifications.csproj +++ b/framework/src/Volo.Abp.Specifications/Volo.Abp.Specifications.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.TestBase/FodyWeavers.xml b/framework/src/Volo.Abp.TestBase/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.TestBase/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.TestBase/FodyWeavers.xsd b/framework/src/Volo.Abp.TestBase/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.TestBase/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.TestBase/Volo.Abp.TestBase.csproj b/framework/src/Volo.Abp.TestBase/Volo.Abp.TestBase.csproj index a8b967561e..004a0fa4d6 100644 --- a/framework/src/Volo.Abp.TestBase/Volo.Abp.TestBase.csproj +++ b/framework/src/Volo.Abp.TestBase/Volo.Abp.TestBase.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.Threading/FodyWeavers.xml b/framework/src/Volo.Abp.Threading/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Threading/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Threading/FodyWeavers.xsd b/framework/src/Volo.Abp.Threading/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Threading/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Threading/Volo.Abp.Threading.csproj b/framework/src/Volo.Abp.Threading/Volo.Abp.Threading.csproj index b4e53162d5..0f5fbf3e9a 100644 --- a/framework/src/Volo.Abp.Threading/Volo.Abp.Threading.csproj +++ b/framework/src/Volo.Abp.Threading/Volo.Abp.Threading.csproj @@ -1,5 +1,6 @@ + diff --git a/framework/src/Volo.Abp.Timing/FodyWeavers.xml b/framework/src/Volo.Abp.Timing/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Timing/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Timing/FodyWeavers.xsd b/framework/src/Volo.Abp.Timing/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Timing/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Timing/Volo.Abp.Timing.csproj b/framework/src/Volo.Abp.Timing/Volo.Abp.Timing.csproj index dbaa8d11dd..4f9eb21f2f 100644 --- a/framework/src/Volo.Abp.Timing/Volo.Abp.Timing.csproj +++ b/framework/src/Volo.Abp.Timing/Volo.Abp.Timing.csproj @@ -1,5 +1,6 @@ + @@ -17,4 +18,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.UI.Navigation/FodyWeavers.xml b/framework/src/Volo.Abp.UI.Navigation/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.UI.Navigation/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI.Navigation/FodyWeavers.xsd b/framework/src/Volo.Abp.UI.Navigation/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.UI.Navigation/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo.Abp.UI.Navigation.csproj b/framework/src/Volo.Abp.UI.Navigation/Volo.Abp.UI.Navigation.csproj index c218698017..5236bf0404 100644 --- a/framework/src/Volo.Abp.UI.Navigation/Volo.Abp.UI.Navigation.csproj +++ b/framework/src/Volo.Abp.UI.Navigation/Volo.Abp.UI.Navigation.csproj @@ -1,5 +1,6 @@ - + + @@ -22,4 +23,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.UI/FodyWeavers.xml b/framework/src/Volo.Abp.UI/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.UI/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI/FodyWeavers.xsd b/framework/src/Volo.Abp.UI/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.UI/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI/Volo.Abp.UI.csproj b/framework/src/Volo.Abp.UI/Volo.Abp.UI.csproj index 8716d7a210..acff7d004b 100644 --- a/framework/src/Volo.Abp.UI/Volo.Abp.UI.csproj +++ b/framework/src/Volo.Abp.UI/Volo.Abp.UI.csproj @@ -1,5 +1,6 @@ - + + @@ -22,4 +23,4 @@ - \ No newline at end of file + diff --git a/framework/src/Volo.Abp.Uow/FodyWeavers.xml b/framework/src/Volo.Abp.Uow/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Uow/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Uow/FodyWeavers.xsd b/framework/src/Volo.Abp.Uow/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Uow/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Uow/Volo.Abp.Uow.csproj b/framework/src/Volo.Abp.Uow/Volo.Abp.Uow.csproj index 00e4ad77d4..1c5552d1da 100644 --- a/framework/src/Volo.Abp.Uow/Volo.Abp.Uow.csproj +++ b/framework/src/Volo.Abp.Uow/Volo.Abp.Uow.csproj @@ -1,5 +1,6 @@ + diff --git a/framework/src/Volo.Abp.Validation/FodyWeavers.xml b/framework/src/Volo.Abp.Validation/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.Validation/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Validation/FodyWeavers.xsd b/framework/src/Volo.Abp.Validation/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Validation/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Validation/Volo.Abp.Validation.csproj b/framework/src/Volo.Abp.Validation/Volo.Abp.Validation.csproj index 86017b9628..edbcf2f04d 100644 --- a/framework/src/Volo.Abp.Validation/Volo.Abp.Validation.csproj +++ b/framework/src/Volo.Abp.Validation/Volo.Abp.Validation.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/src/Volo.Abp.VirtualFileSystem/FodyWeavers.xml b/framework/src/Volo.Abp.VirtualFileSystem/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp.VirtualFileSystem/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.VirtualFileSystem/FodyWeavers.xsd b/framework/src/Volo.Abp.VirtualFileSystem/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.VirtualFileSystem/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj b/framework/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj index 512c901b69..2ba15cae3d 100644 --- a/framework/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj +++ b/framework/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj @@ -1,5 +1,6 @@ + diff --git a/framework/src/Volo.Abp/FodyWeavers.xml b/framework/src/Volo.Abp/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/src/Volo.Abp/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp/FodyWeavers.xsd b/framework/src/Volo.Abp/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp/Volo.Abp.csproj b/framework/src/Volo.Abp/Volo.Abp.csproj index b3cf4f5752..37f9ded71c 100644 --- a/framework/src/Volo.Abp/Volo.Abp.csproj +++ b/framework/src/Volo.Abp/Volo.Abp.csproj @@ -1,5 +1,6 @@ - - + + + @@ -16,4 +17,4 @@ - \ No newline at end of file + diff --git a/framework/test/AbpTestBase/AbpTestBase.csproj b/framework/test/AbpTestBase/AbpTestBase.csproj index 566bfde770..e91bf5a897 100644 --- a/framework/test/AbpTestBase/AbpTestBase.csproj +++ b/framework/test/AbpTestBase/AbpTestBase.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/AbpTestBase/FodyWeavers.xml b/framework/test/AbpTestBase/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/AbpTestBase/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/AbpTestBase/FodyWeavers.xsd b/framework/test/AbpTestBase/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/AbpTestBase/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/test/SimpleConsoleDemo/FodyWeavers.xml b/framework/test/SimpleConsoleDemo/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/SimpleConsoleDemo/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/SimpleConsoleDemo/FodyWeavers.xsd b/framework/test/SimpleConsoleDemo/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/SimpleConsoleDemo/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/test/SimpleConsoleDemo/SimpleConsoleDemo.csproj b/framework/test/SimpleConsoleDemo/SimpleConsoleDemo.csproj index 133f84bd10..8973c42c38 100644 --- a/framework/test/SimpleConsoleDemo/SimpleConsoleDemo.csproj +++ b/framework/test/SimpleConsoleDemo/SimpleConsoleDemo.csproj @@ -1,4 +1,6 @@ - + + + Exe diff --git a/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 2e6a7187fd..ba177b25f0 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 @@ -1,5 +1,6 @@ - - + + + diff --git a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 06b6fbcd94..ea880b49f0 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 4dad128d56..68142e2a5e 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj index 8a76a15f5d..bf7f407d2e 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/FodyWeavers.xml b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/FodyWeavers.xsd b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj index 931eb63088..d407214fc1 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 0a19e5dbdf..b7cc4969a5 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 @@ -1,5 +1,6 @@ - - + + + diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 9ed9312919..e2abf5baaa 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 740c57949d..65c0c8129a 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 @@ -1,5 +1,6 @@ - + + @@ -21,4 +22,4 @@ - \ No newline at end of file + diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.AspNetCore.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.AspNetCore.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 dd8b1fc805..3df84bf584 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.Auditing.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Auditing.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.Auditing.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Auditing.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.Auditing.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.Auditing.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 770ad82870..5962fdee9a 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 @@ -1,5 +1,6 @@ - - + + + diff --git a/framework/test/Volo.Abp.Authorization.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Authorization.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.Authorization.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Authorization.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.Authorization.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.Authorization.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 5abc0fc670..3305f0c1d3 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.AutoMapper.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.AutoMapper.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.AutoMapper.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.AutoMapper.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 4bf0661800..6d017de0a2 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 @@ -1,5 +1,6 @@ - + + @@ -15,4 +16,4 @@ - \ No newline at end of file + diff --git a/framework/test/Volo.Abp.Autofac.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Autofac.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.Autofac.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Autofac.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.Autofac.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.Autofac.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 bbbee3bbbb..4733991a33 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 @@ -1,5 +1,6 @@ - + + @@ -17,4 +18,4 @@ - \ No newline at end of file + diff --git a/framework/test/Volo.Abp.BackgroundJobs.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.BackgroundJobs.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.BackgroundJobs.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.BackgroundJobs.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.BackgroundJobs.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.BackgroundJobs.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 b352c05455..d731e1dbb9 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 @@ -1,5 +1,6 @@ - + + @@ -16,4 +17,4 @@ - \ No newline at end of file + diff --git a/framework/test/Volo.Abp.Caching.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Caching.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.Caching.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Caching.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.Caching.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.Caching.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 4301d8c1f4..4ab3a5ec28 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.Castle.Core.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Castle.Core.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.Castle.Core.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Castle.Core.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.Castle.Core.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.Castle.Core.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 9911775a60..1c3cd15c62 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 @@ -1,5 +1,6 @@ - + + @@ -13,4 +14,4 @@ - \ No newline at end of file + diff --git a/framework/test/Volo.Abp.Cli.Core.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Cli.Core.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.Cli.Core.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Cli.Core.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.Cli.Core.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.Cli.Core.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 76de07406a..b1929bb7bb 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.Core.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Core.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.Core.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Core.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.Core.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.Core.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 5a5d49e9e0..96e2ec28e6 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.Dapper.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Dapper.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.Dapper.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Dapper.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.Dapper.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.Dapper.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 33bdd870e2..cad17950cc 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 @@ -1,5 +1,6 @@ - + + @@ -17,4 +18,4 @@ - \ No newline at end of file + diff --git a/framework/test/Volo.Abp.Data.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Data.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.Data.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Data.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.Data.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.Data.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 9e7cb21644..8be06c7abd 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.Ddd.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Ddd.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.Ddd.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Ddd.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.Ddd.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.Ddd.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 6c7bcc9ca5..cab7f32a90 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.Emailing.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Emailing.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.Emailing.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Emailing.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.Emailing.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.Emailing.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 3a1b803370..8a8cac5b71 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/FodyWeavers.xml b/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/FodyWeavers.xsd b/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/Volo.Abp.EntityFrameworkCore.Tests.SecondContext.csproj b/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/Volo.Abp.EntityFrameworkCore.Tests.SecondContext.csproj index 14d04a597a..824e413b19 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/Volo.Abp.EntityFrameworkCore.Tests.SecondContext.csproj +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/Volo.Abp.EntityFrameworkCore.Tests.SecondContext.csproj @@ -1,5 +1,6 @@ - + + @@ -16,4 +17,4 @@ - \ No newline at end of file + diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 a01e3d111a..7e74f6ea21 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 @@ -1,5 +1,6 @@ - + + @@ -20,4 +21,4 @@ - \ No newline at end of file + diff --git a/framework/test/Volo.Abp.EventBus.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.EventBus.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.EventBus.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.EventBus.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.EventBus.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.EventBus.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 6a7a017f4e..dd2d38ec44 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.Features.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Features.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.Features.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Features.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.Features.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.Features.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 7cf1656de6..8311da15b3 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.FluentValidation.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.FluentValidation.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.FluentValidation.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.FluentValidation.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.FluentValidation.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.FluentValidation.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 7f62578e7d..4d248f62ba 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.Http.Client.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Http.Client.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.Http.Client.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Http.Client.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.Http.Client.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.Http.Client.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 db0f9d45bf..cd0838676d 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 @@ -1,5 +1,6 @@ - + + @@ -14,4 +15,4 @@ - \ No newline at end of file + diff --git a/framework/test/Volo.Abp.Ldap.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Ldap.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.Ldap.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Ldap.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.Ldap.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.Ldap.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 8f803774b2..7caf1748b2 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.Localization.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Localization.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.Localization.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 b3afc78948..95c6520252 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 @@ -1,5 +1,6 @@ - - + + + diff --git a/framework/test/Volo.Abp.MailKit.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.MailKit.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.MailKit.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.MailKit.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.MailKit.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.MailKit.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 b8f417d384..aef7f0e536 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 @@ -1,5 +1,6 @@ - + + @@ -14,4 +15,4 @@ - \ No newline at end of file + diff --git a/framework/test/Volo.Abp.MemoryDb.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.MemoryDb.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.MemoryDb.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.MemoryDb.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.MemoryDb.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.MemoryDb.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 ad478b062a..7b2a63f21a 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 @@ -1,5 +1,6 @@ - + + @@ -15,4 +16,4 @@ - \ No newline at end of file + diff --git a/framework/test/Volo.Abp.Minify.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Minify.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.Minify.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Minify.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.Minify.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.Minify.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 5d07377aa1..8e9edfd167 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 @@ -1,5 +1,6 @@ - + + @@ -13,4 +14,4 @@ - \ No newline at end of file + diff --git a/framework/test/Volo.Abp.MongoDB.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.MongoDB.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.MongoDB.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.MongoDB.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.MongoDB.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.MongoDB.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 cc1cb52a96..194756ecfc 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 @@ -1,5 +1,6 @@ - + + @@ -19,4 +20,4 @@ - \ No newline at end of file + diff --git a/framework/test/Volo.Abp.MultiTenancy.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.MultiTenancy.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.MultiTenancy.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.MultiTenancy.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.MultiTenancy.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.MultiTenancy.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 808b58409e..78390807bc 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.ObjectMapping.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.ObjectMapping.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.ObjectMapping.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.ObjectMapping.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.ObjectMapping.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.ObjectMapping.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 a77a4e3301..1956da7c57 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.Security.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Security.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.Security.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Security.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.Security.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.Security.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 7688e0c040..39e65cbf21 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.Serialization.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Serialization.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.Serialization.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Serialization.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.Serialization.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.Serialization.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 c973b4fcd1..c3ae46e29e 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.Settings.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Settings.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.Settings.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Settings.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.Settings.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.Settings.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 183b0b6c81..6b7501a4a9 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.Specifications.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Specifications.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.Specifications.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Specifications.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.Specifications.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.Specifications.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 6b836d2efe..1cbfdff3b1 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 @@ -1,5 +1,6 @@ - + + @@ -13,4 +14,4 @@ - \ No newline at end of file + diff --git a/framework/test/Volo.Abp.TestApp.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.TestApp.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.TestApp.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.TestApp.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.TestApp.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.TestApp.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 1d54a745ab..94807cc07e 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.TestApp/FodyWeavers.xml b/framework/test/Volo.Abp.TestApp/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.TestApp/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.TestApp/FodyWeavers.xsd b/framework/test/Volo.Abp.TestApp/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.TestApp/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj b/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj index 522d166014..6ff892573d 100644 --- a/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj +++ b/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.UI.Navigation.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.UI.Navigation.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.UI.Navigation.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.UI.Navigation.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.UI.Navigation.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.UI.Navigation.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 51beb181a1..ed191b89d4 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.Uow.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Uow.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.Uow.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Uow.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.Uow.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.Uow.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 256dd07ed6..d2b8332528 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.Validation.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Validation.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.Validation.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Validation.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.Validation.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.Validation.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 a16495ccda..59b948d97a 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 @@ -1,5 +1,6 @@ - + + diff --git a/framework/test/Volo.Abp.VirtualFileSystem.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.VirtualFileSystem.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/framework/test/Volo.Abp.VirtualFileSystem.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.VirtualFileSystem.Tests/FodyWeavers.xsd b/framework/test/Volo.Abp.VirtualFileSystem.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/test/Volo.Abp.VirtualFileSystem.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 63617f36c0..6b891067c9 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/FodyWeavers.xml b/modules/account/src/Volo.Abp.Account.Application.Contracts/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/FodyWeavers.xsd b/modules/account/src/Volo.Abp.Account.Application.Contracts/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 039c559860..58b2266340 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/account/src/Volo.Abp.Account.Application/FodyWeavers.xml b/modules/account/src/Volo.Abp.Account.Application/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Application/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application/FodyWeavers.xsd b/modules/account/src/Volo.Abp.Account.Application/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Application/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 f5966d7e30..1ddc2323d1 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/account/src/Volo.Abp.Account.HttpApi.Client/FodyWeavers.xml b/modules/account/src/Volo.Abp.Account.HttpApi.Client/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.HttpApi.Client/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.HttpApi.Client/FodyWeavers.xsd b/modules/account/src/Volo.Abp.Account.HttpApi.Client/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.HttpApi.Client/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.HttpApi.Client/Volo.Abp.Account.HttpApi.Client.csproj b/modules/account/src/Volo.Abp.Account.HttpApi.Client/Volo.Abp.Account.HttpApi.Client.csproj index 4a7602754a..89679b3e22 100644 --- a/modules/account/src/Volo.Abp.Account.HttpApi.Client/Volo.Abp.Account.HttpApi.Client.csproj +++ b/modules/account/src/Volo.Abp.Account.HttpApi.Client/Volo.Abp.Account.HttpApi.Client.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/account/src/Volo.Abp.Account.HttpApi/FodyWeavers.xml b/modules/account/src/Volo.Abp.Account.HttpApi/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.HttpApi/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.HttpApi/FodyWeavers.xsd b/modules/account/src/Volo.Abp.Account.HttpApi/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.HttpApi/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.HttpApi/Volo.Abp.Account.HttpApi.csproj b/modules/account/src/Volo.Abp.Account.HttpApi/Volo.Abp.Account.HttpApi.csproj index 3459ab0294..2e074722b2 100644 --- a/modules/account/src/Volo.Abp.Account.HttpApi/Volo.Abp.Account.HttpApi.csproj +++ b/modules/account/src/Volo.Abp.Account.HttpApi/Volo.Abp.Account.HttpApi.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/FodyWeavers.xml b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/FodyWeavers.xsd b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 81f0ee4375..2ab190b724 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/account/src/Volo.Abp.Account.Web/FodyWeavers.xml b/modules/account/src/Volo.Abp.Account.Web/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Web/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Web/FodyWeavers.xsd b/modules/account/src/Volo.Abp.Account.Web/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Web/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 880353ceab..2fd67e2acb 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/account/test/Volo.Abp.Account.Application.Tests/FodyWeavers.xml b/modules/account/test/Volo.Abp.Account.Application.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/account/test/Volo.Abp.Account.Application.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/account/test/Volo.Abp.Account.Application.Tests/FodyWeavers.xsd b/modules/account/test/Volo.Abp.Account.Application.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/account/test/Volo.Abp.Account.Application.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 2055dfc4ef..86463db97c 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/FodyWeavers.xml b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/FodyWeavers.xsd b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 44c36fd1d1..ce65a161ce 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/FodyWeavers.xml b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/FodyWeavers.xsd b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo.Abp.AuditLogging.Domain.csproj b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo.Abp.AuditLogging.Domain.csproj index f33375143a..161e952593 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo.Abp.AuditLogging.Domain.csproj +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo.Abp.AuditLogging.Domain.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/FodyWeavers.xml b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/FodyWeavers.xsd b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.csproj b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.csproj index 93422d8f3f..01ef3be28f 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.csproj +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/FodyWeavers.xml b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/FodyWeavers.xsd b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo.Abp.AuditLogging.MongoDB.csproj b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo.Abp.AuditLogging.MongoDB.csproj index 0e86989a77..c22202f7f9 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo.Abp.AuditLogging.MongoDB.csproj +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo.Abp.AuditLogging.MongoDB.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/FodyWeavers.xml b/modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/FodyWeavers.xsd b/modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 8ee9a2e2f6..a6bf227f7d 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.MongoDB.Tests/FodyWeavers.xml b/modules/audit-logging/test/Volo.Abp.AuditLogging.MongoDB.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.MongoDB.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.MongoDB.Tests/FodyWeavers.xsd b/modules/audit-logging/test/Volo.Abp.AuditLogging.MongoDB.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.MongoDB.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 b5c7084cf2..0fd9b0752a 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/FodyWeavers.xml b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/FodyWeavers.xsd b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 157301aecb..262a1f93cd 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/FodyWeavers.xml b/modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/FodyWeavers.xsd b/modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 31a70aa5b1..f25d7672a0 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/FodyWeavers.xml b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/FodyWeavers.xsd b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 3490b31f67..f27272bd28 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 @@ -1,4 +1,6 @@ - + + + Exe diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/FodyWeavers.xml b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/FodyWeavers.xsd b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq.csproj b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq.csproj index adcf9be1aa..460716fb26 100644 --- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq.csproj +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq.csproj @@ -1,4 +1,6 @@ - + + + Exe diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/FodyWeavers.xml b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/FodyWeavers.xsd b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 3bd6feee59..582cc3d634 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 @@ -1,4 +1,6 @@ - + + + netstandard2.0 diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/FodyWeavers.xml b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/FodyWeavers.xsd b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 b3bc53a2ed..6c9c118af4 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 @@ -1,4 +1,6 @@ - + + + Exe diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/FodyWeavers.xml b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/FodyWeavers.xsd b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/Volo.Abp.BackgroundJobs.Domain.Shared.csproj b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/Volo.Abp.BackgroundJobs.Domain.Shared.csproj index e7334e2348..4c79e9bcfd 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/Volo.Abp.BackgroundJobs.Domain.Shared.csproj +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/Volo.Abp.BackgroundJobs.Domain.Shared.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/FodyWeavers.xml b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/FodyWeavers.xsd b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj index 82fd254232..7eb9015b73 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/FodyWeavers.xml b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/FodyWeavers.xsd b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo.Abp.BackgroundJobs.EntityFrameworkCore.csproj b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo.Abp.BackgroundJobs.EntityFrameworkCore.csproj index eb92972675..92d8c471fd 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo.Abp.BackgroundJobs.EntityFrameworkCore.csproj +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo.Abp.BackgroundJobs.EntityFrameworkCore.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/FodyWeavers.xml b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/FodyWeavers.xsd b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.csproj b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.csproj index 4b3184d0ab..56c1391ab9 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.csproj +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/FodyWeavers.xml b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/FodyWeavers.xsd b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 c7d43a8e71..f4e94abe4b 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/FodyWeavers.xml b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/FodyWeavers.xsd b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 25434f3b06..37a9eb312a 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.MongoDB.Tests/FodyWeavers.xml b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.MongoDB.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.MongoDB.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.MongoDB.Tests/FodyWeavers.xsd b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.MongoDB.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.MongoDB.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 faece9ea33..9d9ef87200 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/FodyWeavers.xml b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/FodyWeavers.xsd b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 538f9376fb..6d1c6f48c7 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/FodyWeavers.xml b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/FodyWeavers.xsd b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 27fa209d2c..8e713189ca 100644 --- a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.csproj +++ b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.csproj @@ -1,4 +1,6 @@ - + + + netstandard2.1 diff --git a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/FodyWeavers.xml b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/FodyWeavers.xsd b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj index 0f21d360e4..cf886e234f 100644 --- a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj +++ b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj @@ -1,4 +1,6 @@ - + + + netstandard2.0 diff --git a/modules/blogging/app/Volo.BloggingTestApp/FodyWeavers.xml b/modules/blogging/app/Volo.BloggingTestApp/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/blogging/app/Volo.BloggingTestApp/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/blogging/app/Volo.BloggingTestApp/FodyWeavers.xsd b/modules/blogging/app/Volo.BloggingTestApp/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/blogging/app/Volo.BloggingTestApp/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj b/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj index 1ef5fb5c4c..90c58300d1 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj +++ b/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.Application.Contracts/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.Application.Contracts/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.csproj b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.csproj index dccdef1e0d..ba9aa67e7a 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.csproj +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/blogging/src/Volo.Blogging.Application/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.Application/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Application/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Application/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.Application/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Application/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 a162d644df..9c4070fe25 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj +++ b/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.Domain.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.Domain.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 c71ae5aef5..da706316f9 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/blogging/src/Volo.Blogging.Domain/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.Domain/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Domain/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Domain/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.Domain/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Domain/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj b/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj index b30b54fede..a7cbc2c7c6 100644 --- a/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj +++ b/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo.Blogging.EntityFrameworkCore.csproj b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo.Blogging.EntityFrameworkCore.csproj index 122385c76f..b8808cd8c9 100644 --- a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo.Blogging.EntityFrameworkCore.csproj +++ b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo.Blogging.EntityFrameworkCore.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/blogging/src/Volo.Blogging.HttpApi.Client/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.HttpApi.Client/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.HttpApi.Client/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.HttpApi.Client/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.HttpApi.Client/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.HttpApi.Client/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.HttpApi.Client/Volo.Blogging.HttpApi.Client.csproj b/modules/blogging/src/Volo.Blogging.HttpApi.Client/Volo.Blogging.HttpApi.Client.csproj index 0c688104db..754382f89c 100644 --- a/modules/blogging/src/Volo.Blogging.HttpApi.Client/Volo.Blogging.HttpApi.Client.csproj +++ b/modules/blogging/src/Volo.Blogging.HttpApi.Client/Volo.Blogging.HttpApi.Client.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/blogging/src/Volo.Blogging.HttpApi/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.HttpApi/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.HttpApi/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.HttpApi/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.HttpApi/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.HttpApi/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.HttpApi/Volo.Blogging.HttpApi.csproj b/modules/blogging/src/Volo.Blogging.HttpApi/Volo.Blogging.HttpApi.csproj index 8965b8782e..94181bf3fe 100644 --- a/modules/blogging/src/Volo.Blogging.HttpApi/Volo.Blogging.HttpApi.csproj +++ b/modules/blogging/src/Volo.Blogging.HttpApi/Volo.Blogging.HttpApi.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/blogging/src/Volo.Blogging.MongoDB/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.MongoDB/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.MongoDB/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.MongoDB/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.MongoDB/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.MongoDB/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj b/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj index 0d299c1f3d..5019b843f2 100644 --- a/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj +++ b/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/blogging/src/Volo.Blogging.Web/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.Web/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Web/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Web/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.Web/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Web/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 d85f182bcc..7313becddb 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.csproj +++ b/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/blogging/test/Volo.Blogging.Application.Tests/FodyWeavers.xml b/modules/blogging/test/Volo.Blogging.Application.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/blogging/test/Volo.Blogging.Application.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/blogging/test/Volo.Blogging.Application.Tests/FodyWeavers.xsd b/modules/blogging/test/Volo.Blogging.Application.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/blogging/test/Volo.Blogging.Application.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 473f1442c8..a411ed4000 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/blogging/test/Volo.Blogging.Domain.Tests/FodyWeavers.xml b/modules/blogging/test/Volo.Blogging.Domain.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/blogging/test/Volo.Blogging.Domain.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/blogging/test/Volo.Blogging.Domain.Tests/FodyWeavers.xsd b/modules/blogging/test/Volo.Blogging.Domain.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/blogging/test/Volo.Blogging.Domain.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 dbc49033d3..c8f4e5498c 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/FodyWeavers.xml b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/FodyWeavers.xsd b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 8b92f8b67b..6be39435ee 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/blogging/test/Volo.Blogging.MongoDB.Tests/FodyWeavers.xml b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/blogging/test/Volo.Blogging.MongoDB.Tests/FodyWeavers.xsd b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 cc46eead03..3d39213139 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/blogging/test/Volo.Blogging.TestBase/FodyWeavers.xml b/modules/blogging/test/Volo.Blogging.TestBase/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/blogging/test/Volo.Blogging.TestBase/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/blogging/test/Volo.Blogging.TestBase/FodyWeavers.xsd b/modules/blogging/test/Volo.Blogging.TestBase/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/blogging/test/Volo.Blogging.TestBase/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 bdc6873c3a..578a09c4ba 100644 --- a/modules/blogging/test/Volo.Blogging.TestBase/Volo.Blogging.TestBase.csproj +++ b/modules/blogging/test/Volo.Blogging.TestBase/Volo.Blogging.TestBase.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/FodyWeavers.xml b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/FodyWeavers.xsd b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 0f9f7bde5e..1173121c3c 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/client-simulation/src/Volo.ClientSimulation.Web/FodyWeavers.xml b/modules/client-simulation/src/Volo.ClientSimulation.Web/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/client-simulation/src/Volo.ClientSimulation.Web/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/client-simulation/src/Volo.ClientSimulation.Web/FodyWeavers.xsd b/modules/client-simulation/src/Volo.ClientSimulation.Web/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/client-simulation/src/Volo.ClientSimulation.Web/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.csproj b/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.csproj index 108c048937..ad0ce496f5 100644 --- a/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.csproj +++ b/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/client-simulation/src/Volo.ClientSimulation/FodyWeavers.xml b/modules/client-simulation/src/Volo.ClientSimulation/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/client-simulation/src/Volo.ClientSimulation/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/client-simulation/src/Volo.ClientSimulation/FodyWeavers.xsd b/modules/client-simulation/src/Volo.ClientSimulation/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/client-simulation/src/Volo.ClientSimulation/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/client-simulation/src/Volo.ClientSimulation/Volo.ClientSimulation.csproj b/modules/client-simulation/src/Volo.ClientSimulation/Volo.ClientSimulation.csproj index 82a5932188..3876e7deb5 100644 --- a/modules/client-simulation/src/Volo.ClientSimulation/Volo.ClientSimulation.csproj +++ b/modules/client-simulation/src/Volo.ClientSimulation/Volo.ClientSimulation.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/docs/app/VoloDocs.EntityFrameworkCore/FodyWeavers.xml b/modules/docs/app/VoloDocs.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/app/VoloDocs.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.EntityFrameworkCore/FodyWeavers.xsd b/modules/docs/app/VoloDocs.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/app/VoloDocs.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.csproj b/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.csproj index d7f8b49bae..5788ba6dca 100644 --- a/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.csproj +++ b/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.csproj @@ -1,4 +1,6 @@ - + + + netstandard2.1 diff --git a/modules/docs/app/VoloDocs.Migrator/FodyWeavers.xml b/modules/docs/app/VoloDocs.Migrator/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/app/VoloDocs.Migrator/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Migrator/FodyWeavers.xsd b/modules/docs/app/VoloDocs.Migrator/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/app/VoloDocs.Migrator/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Migrator/VoloDocs.Migrator.csproj b/modules/docs/app/VoloDocs.Migrator/VoloDocs.Migrator.csproj index 7304dda469..e1fba61428 100644 --- a/modules/docs/app/VoloDocs.Migrator/VoloDocs.Migrator.csproj +++ b/modules/docs/app/VoloDocs.Migrator/VoloDocs.Migrator.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/docs/app/VoloDocs.Web/FodyWeavers.xml b/modules/docs/app/VoloDocs.Web/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/FodyWeavers.xsd b/modules/docs/app/VoloDocs.Web/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj b/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj index c5e164247b..8890e1b681 100644 --- a/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj +++ b/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 2805d03357..16ef215c5c 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/docs/src/Volo.Docs.Admin.Application/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Admin.Application/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Admin.Application/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.Admin.Application/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Admin.Application/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.csproj b/modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.csproj index 73d2afc26b..666b4dd79d 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.csproj +++ b/modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo.Docs.Admin.HttpApi.Client.csproj b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo.Docs.Admin.HttpApi.Client.csproj index 13f2faebf5..50e135a237 100644 --- a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo.Docs.Admin.HttpApi.Client.csproj +++ b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo.Docs.Admin.HttpApi.Client.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Admin.HttpApi/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Admin.HttpApi/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.Admin.HttpApi/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Admin.HttpApi/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo.Docs.Admin.HttpApi.csproj b/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo.Docs.Admin.HttpApi.csproj index ef87e7a6e4..eb0da981f4 100644 --- a/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo.Docs.Admin.HttpApi.csproj +++ b/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo.Docs.Admin.HttpApi.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/docs/src/Volo.Docs.Admin.Web/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Admin.Web/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Admin.Web/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Web/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.Admin.Web/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Admin.Web/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 ab6da2e1d0..4cad3d9e71 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Application.Contracts/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Application.Contracts/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.Application.Contracts/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Application.Contracts/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/Volo.Docs.Application.Contracts.csproj b/modules/docs/src/Volo.Docs.Application.Contracts/Volo.Docs.Application.Contracts.csproj index 2dc6d77b21..15df62ac54 100644 --- a/modules/docs/src/Volo.Docs.Application.Contracts/Volo.Docs.Application.Contracts.csproj +++ b/modules/docs/src/Volo.Docs.Application.Contracts/Volo.Docs.Application.Contracts.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/docs/src/Volo.Docs.Application/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Application/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Application/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Application/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.Application/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Application/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.csproj b/modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.csproj index 1d2f977806..1009305c17 100644 --- a/modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.csproj +++ b/modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Domain.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.Domain.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 185bc84d5b..453026ef95 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/docs/src/Volo.Docs.Domain/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Domain/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.Domain/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 9de0a675ea..234832ef1a 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj +++ b/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/FodyWeavers.xml b/modules/docs/src/Volo.Docs.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo.Docs.EntityFrameworkCore.csproj b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo.Docs.EntityFrameworkCore.csproj index 1111fa62a2..ad433e02a3 100644 --- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo.Docs.EntityFrameworkCore.csproj +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo.Docs.EntityFrameworkCore.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/docs/src/Volo.Docs.HttpApi.Client/FodyWeavers.xml b/modules/docs/src/Volo.Docs.HttpApi.Client/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/src/Volo.Docs.HttpApi.Client/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.HttpApi.Client/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.HttpApi.Client/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/src/Volo.Docs.HttpApi.Client/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.HttpApi.Client/Volo.Docs.HttpApi.Client.csproj b/modules/docs/src/Volo.Docs.HttpApi.Client/Volo.Docs.HttpApi.Client.csproj index eedcfc905c..f527001c45 100644 --- a/modules/docs/src/Volo.Docs.HttpApi.Client/Volo.Docs.HttpApi.Client.csproj +++ b/modules/docs/src/Volo.Docs.HttpApi.Client/Volo.Docs.HttpApi.Client.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/docs/src/Volo.Docs.HttpApi/FodyWeavers.xml b/modules/docs/src/Volo.Docs.HttpApi/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/src/Volo.Docs.HttpApi/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.HttpApi/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.HttpApi/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/src/Volo.Docs.HttpApi/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.HttpApi/Volo.Docs.HttpApi.csproj b/modules/docs/src/Volo.Docs.HttpApi/Volo.Docs.HttpApi.csproj index 60dfef5bd4..671d5dbbac 100644 --- a/modules/docs/src/Volo.Docs.HttpApi/Volo.Docs.HttpApi.csproj +++ b/modules/docs/src/Volo.Docs.HttpApi/Volo.Docs.HttpApi.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/docs/src/Volo.Docs.MongoDB/FodyWeavers.xml b/modules/docs/src/Volo.Docs.MongoDB/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/src/Volo.Docs.MongoDB/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.MongoDB/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.MongoDB/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/src/Volo.Docs.MongoDB/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj b/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj index ebe3500cac..9a5cd19550 100644 --- a/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj +++ b/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/docs/src/Volo.Docs.Web/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Web/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Web/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.Web/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Web/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 2adfb50de0..2e89e9b255 100644 --- a/modules/docs/src/Volo.Docs.Web/Volo.Docs.Web.csproj +++ b/modules/docs/src/Volo.Docs.Web/Volo.Docs.Web.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/docs/test/Volo.Docs.Admin.Application.Tests/FodyWeavers.xml b/modules/docs/test/Volo.Docs.Admin.Application.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/test/Volo.Docs.Admin.Application.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/test/Volo.Docs.Admin.Application.Tests/FodyWeavers.xsd b/modules/docs/test/Volo.Docs.Admin.Application.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/test/Volo.Docs.Admin.Application.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 1063314379..811979e2d5 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/docs/test/Volo.Docs.Application.Tests/FodyWeavers.xml b/modules/docs/test/Volo.Docs.Application.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/test/Volo.Docs.Application.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/test/Volo.Docs.Application.Tests/FodyWeavers.xsd b/modules/docs/test/Volo.Docs.Application.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/test/Volo.Docs.Application.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 4b86efc543..6c5c76513e 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/docs/test/Volo.Docs.Domain.Tests/FodyWeavers.xml b/modules/docs/test/Volo.Docs.Domain.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/test/Volo.Docs.Domain.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/test/Volo.Docs.Domain.Tests/FodyWeavers.xsd b/modules/docs/test/Volo.Docs.Domain.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/test/Volo.Docs.Domain.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 ea4e45c897..5dc5099b5f 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/FodyWeavers.xml b/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/FodyWeavers.xsd b/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 c17dc2c2da..6f9d28cb8f 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/docs/test/Volo.Docs.MongoDB.Tests/FodyWeavers.xml b/modules/docs/test/Volo.Docs.MongoDB.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/test/Volo.Docs.MongoDB.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/test/Volo.Docs.MongoDB.Tests/FodyWeavers.xsd b/modules/docs/test/Volo.Docs.MongoDB.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/test/Volo.Docs.MongoDB.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 3a8d3cb7d9..58eace434f 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/docs/test/Volo.Docs.TestBase/FodyWeavers.xml b/modules/docs/test/Volo.Docs.TestBase/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/docs/test/Volo.Docs.TestBase/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/docs/test/Volo.Docs.TestBase/FodyWeavers.xsd b/modules/docs/test/Volo.Docs.TestBase/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/docs/test/Volo.Docs.TestBase/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 aeed82e1dd..c7499a3f91 100644 --- a/modules/docs/test/Volo.Docs.TestBase/Volo.Docs.TestBase.csproj +++ b/modules/docs/test/Volo.Docs.TestBase/Volo.Docs.TestBase.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/FodyWeavers.xsd b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo.Abp.FeatureManagement.Application.Contracts.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo.Abp.FeatureManagement.Application.Contracts.csproj index 760805086f..09376e7f2a 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo.Abp.FeatureManagement.Application.Contracts.csproj +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo.Abp.FeatureManagement.Application.Contracts.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/FodyWeavers.xsd b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo.Abp.FeatureManagement.Application.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo.Abp.FeatureManagement.Application.csproj index 243ec87813..eab014478e 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo.Abp.FeatureManagement.Application.csproj +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo.Abp.FeatureManagement.Application.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/FodyWeavers.xsd b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 bfa20270c8..5ffd761bf0 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/FodyWeavers.xsd b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 8b29b704ce..10033847c2 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/FodyWeavers.xsd b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo.Abp.FeatureManagement.EntityFrameworkCore.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo.Abp.FeatureManagement.EntityFrameworkCore.csproj index 297d7fcaa4..ced4c82c7a 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo.Abp.FeatureManagement.EntityFrameworkCore.csproj +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo.Abp.FeatureManagement.EntityFrameworkCore.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/FodyWeavers.xsd b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/Volo.Abp.FeatureManagement.HttpApi.Client.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/Volo.Abp.FeatureManagement.HttpApi.Client.csproj index a99f8e0bfb..1a784f6e6c 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/Volo.Abp.FeatureManagement.HttpApi.Client.csproj +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/Volo.Abp.FeatureManagement.HttpApi.Client.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/FodyWeavers.xsd b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo.Abp.FeatureManagement.HttpApi.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo.Abp.FeatureManagement.HttpApi.csproj index d49cd4f813..c809224e43 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo.Abp.FeatureManagement.HttpApi.csproj +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo.Abp.FeatureManagement.HttpApi.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/FodyWeavers.xsd b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo.Abp.FeatureManagement.MongoDB.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo.Abp.FeatureManagement.MongoDB.csproj index 5f4d23bf4e..44c720110d 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo.Abp.FeatureManagement.MongoDB.csproj +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo.Abp.FeatureManagement.MongoDB.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/FodyWeavers.xsd b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 e44deb17e7..b4917d34d6 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/FodyWeavers.xml b/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/FodyWeavers.xsd b/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 ef81b4b9ea..f5d2802fc9 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/FodyWeavers.xml b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/FodyWeavers.xsd b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 585f399d3e..7e13942027 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/FodyWeavers.xml b/modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd b/modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 8a8b62a666..2bd41cad49 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.MongoDB.Tests/FodyWeavers.xml b/modules/feature-management/test/Volo.Abp.FeatureManagement.MongoDB.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.MongoDB.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.MongoDB.Tests/FodyWeavers.xsd b/modules/feature-management/test/Volo.Abp.FeatureManagement.MongoDB.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.MongoDB.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 37ebd8aa4a..8dce64e5ae 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/FodyWeavers.xml b/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/FodyWeavers.xsd b/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 571adf02c8..97dce29344 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.csproj b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.csproj index f14910c068..9703b293d8 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.csproj +++ b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/identity/src/Volo.Abp.Identity.Application/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.Application/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Application/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Application/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.Application/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Application/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.csproj b/modules/identity/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.csproj index 8eac9e9162..fc01ba4400 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.csproj +++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/identity/src/Volo.Abp.Identity.AspNetCore/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.AspNetCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.AspNetCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.AspNetCore/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.AspNetCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.AspNetCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo.Abp.Identity.AspNetCore.csproj b/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo.Abp.Identity.AspNetCore.csproj index 7ecd91595f..5125c7a89c 100644 --- a/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo.Abp.Identity.AspNetCore.csproj +++ b/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo.Abp.Identity.AspNetCore.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 460f5285e4..0af270c597 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.Domain/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.Domain/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 3e348db1e3..f6eb1df909 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo.Abp.Identity.EntityFrameworkCore.csproj b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo.Abp.Identity.EntityFrameworkCore.csproj index 945905d75f..b59d65d8ad 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo.Abp.Identity.EntityFrameworkCore.csproj +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo.Abp.Identity.EntityFrameworkCore.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo.Abp.Identity.HttpApi.Client.csproj b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo.Abp.Identity.HttpApi.Client.csproj index 0f5d63db37..11fd0a40b6 100644 --- a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo.Abp.Identity.HttpApi.Client.csproj +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo.Abp.Identity.HttpApi.Client.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.HttpApi/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.HttpApi/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo.Abp.Identity.HttpApi.csproj b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo.Abp.Identity.HttpApi.csproj index c7ca885378..55629d070e 100644 --- a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo.Abp.Identity.HttpApi.csproj +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo.Abp.Identity.HttpApi.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.MongoDB/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.MongoDB/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo.Abp.Identity.MongoDB.csproj b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo.Abp.Identity.MongoDB.csproj index 06e5717e03..762582ef67 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo.Abp.Identity.MongoDB.csproj +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo.Abp.Identity.MongoDB.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/identity/src/Volo.Abp.Identity.Web/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.Web/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Web/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Web/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.Web/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Web/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 6a68d21e4b..98cdf702d4 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/FodyWeavers.xml b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo.Abp.PermissionManagement.Domain.Identity.csproj b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo.Abp.PermissionManagement.Domain.Identity.csproj index ee8e336088..40a310cf2d 100644 --- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo.Abp.PermissionManagement.Domain.Identity.csproj +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo.Abp.PermissionManagement.Domain.Identity.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/identity/test/Volo.Abp.Identity.Application.Tests/FodyWeavers.xml b/modules/identity/test/Volo.Abp.Identity.Application.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identity/test/Volo.Abp.Identity.Application.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identity/test/Volo.Abp.Identity.Application.Tests/FodyWeavers.xsd b/modules/identity/test/Volo.Abp.Identity.Application.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identity/test/Volo.Abp.Identity.Application.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 58a34d0198..941ad1ac05 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/FodyWeavers.xml b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/FodyWeavers.xsd b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 59614115e4..8a826f4680 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/FodyWeavers.xml b/modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/FodyWeavers.xsd b/modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 5e01379951..806d9ff49f 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/identity/test/Volo.Abp.Identity.MongoDB.Tests/FodyWeavers.xml b/modules/identity/test/Volo.Abp.Identity.MongoDB.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identity/test/Volo.Abp.Identity.MongoDB.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identity/test/Volo.Abp.Identity.MongoDB.Tests/FodyWeavers.xsd b/modules/identity/test/Volo.Abp.Identity.MongoDB.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identity/test/Volo.Abp.Identity.MongoDB.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 22edeae68a..11f5a0119d 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/identity/test/Volo.Abp.Identity.TestBase/FodyWeavers.xml b/modules/identity/test/Volo.Abp.Identity.TestBase/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identity/test/Volo.Abp.Identity.TestBase/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identity/test/Volo.Abp.Identity.TestBase/FodyWeavers.xsd b/modules/identity/test/Volo.Abp.Identity.TestBase/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identity/test/Volo.Abp.Identity.TestBase/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 de9dc07587..a8ac6375b1 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/FodyWeavers.xml b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/FodyWeavers.xsd b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo.Abp.IdentityServer.Domain.Shared.csproj b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo.Abp.IdentityServer.Domain.Shared.csproj index 71d99b826b..e8a623fad6 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo.Abp.IdentityServer.Domain.Shared.csproj +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo.Abp.IdentityServer.Domain.Shared.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/FodyWeavers.xml b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/FodyWeavers.xsd b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 e7f4a6bc43..3ad4d2bb05 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/FodyWeavers.xml b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/FodyWeavers.xsd b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo.Abp.IdentityServer.EntityFrameworkCore.csproj b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo.Abp.IdentityServer.EntityFrameworkCore.csproj index 72681fbf9d..5396e34103 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo.Abp.IdentityServer.EntityFrameworkCore.csproj +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo.Abp.IdentityServer.EntityFrameworkCore.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/FodyWeavers.xml b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/FodyWeavers.xsd b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo.Abp.IdentityServer.MongoDB.csproj b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo.Abp.IdentityServer.MongoDB.csproj index 64ee9f6eee..0fd4cc51cf 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo.Abp.IdentityServer.MongoDB.csproj +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo.Abp.IdentityServer.MongoDB.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/FodyWeavers.xml b/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/FodyWeavers.xsd b/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/Volo.Abp.PermissionManagement.Domain.IdentityServer.csproj b/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/Volo.Abp.PermissionManagement.Domain.IdentityServer.csproj index a1579f3f31..e1c009e432 100644 --- a/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/Volo.Abp.PermissionManagement.Domain.IdentityServer.csproj +++ b/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/Volo.Abp.PermissionManagement.Domain.IdentityServer.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/FodyWeavers.xml b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/FodyWeavers.xsd b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 ce12bb92eb..1dbcd2f3b1 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/FodyWeavers.xml b/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/FodyWeavers.xsd b/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 4876a42c56..577dc4c45b 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/FodyWeavers.xml b/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/FodyWeavers.xsd b/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 6459a4c307..8c2298fce5 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/FodyWeavers.xml b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/FodyWeavers.xsd b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 c02b7d5c13..51dc255ae9 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/FodyWeavers.xsd b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo.Abp.PermissionManagement.Application.Contracts.csproj b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo.Abp.PermissionManagement.Application.Contracts.csproj index 9e1d805b8a..8bb01c8fff 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo.Abp.PermissionManagement.Application.Contracts.csproj +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo.Abp.PermissionManagement.Application.Contracts.csproj @@ -1,5 +1,6 @@ + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/FodyWeavers.xsd b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo.Abp.PermissionManagement.Application.csproj b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo.Abp.PermissionManagement.Application.csproj index cd39199733..41a280d054 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo.Abp.PermissionManagement.Application.csproj +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo.Abp.PermissionManagement.Application.csproj @@ -1,5 +1,6 @@ + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/FodyWeavers.xsd b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 ff0ba6fbee..629d9f1742 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/FodyWeavers.xsd b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 8bfc4e4683..1a44f1f6a1 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 @@ -1,5 +1,6 @@ + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xsd b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo.Abp.PermissionManagement.EntityFrameworkCore.csproj b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo.Abp.PermissionManagement.EntityFrameworkCore.csproj index c13b3da80b..93c9f52329 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo.Abp.PermissionManagement.EntityFrameworkCore.csproj +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo.Abp.PermissionManagement.EntityFrameworkCore.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/FodyWeavers.xsd b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/Volo.Abp.PermissionManagement.HttpApi.Client.csproj b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/Volo.Abp.PermissionManagement.HttpApi.Client.csproj index c634f59f65..8360442b75 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/Volo.Abp.PermissionManagement.HttpApi.Client.csproj +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/Volo.Abp.PermissionManagement.HttpApi.Client.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/FodyWeavers.xsd b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo.Abp.PermissionManagement.HttpApi.csproj b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo.Abp.PermissionManagement.HttpApi.csproj index 2411e5cf47..a41a82b330 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo.Abp.PermissionManagement.HttpApi.csproj +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo.Abp.PermissionManagement.HttpApi.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/FodyWeavers.xsd b/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/Volo.Abp.PermissionManagement.MongoDB.csproj b/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/Volo.Abp.PermissionManagement.MongoDB.csproj index 53ad2adde2..4dd5b952f4 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/Volo.Abp.PermissionManagement.MongoDB.csproj +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/Volo.Abp.PermissionManagement.MongoDB.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/FodyWeavers.xsd b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 1bf27e1ddc..2c1e0b290d 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/FodyWeavers.xml b/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/FodyWeavers.xsd b/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 81e3861ed9..266c3f2485 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.EntityFrameworkCore.Tests/FodyWeavers.xml b/modules/permission-management/test/Volo.Abp.PermissionManagement.EntityFrameworkCore.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd b/modules/permission-management/test/Volo.Abp.PermissionManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 c3e5d1d750..d4a059d6c3 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 @@ -21,4 +23,4 @@ - \ No newline at end of file + diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.MongoDB.Tests/FodyWeavers.xml b/modules/permission-management/test/Volo.Abp.PermissionManagement.MongoDB.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.MongoDB.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.MongoDB.Tests/FodyWeavers.xsd b/modules/permission-management/test/Volo.Abp.PermissionManagement.MongoDB.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.MongoDB.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 1f66b07cf5..63f8930276 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 @@ -21,4 +23,4 @@ - \ No newline at end of file + diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/FodyWeavers.xml b/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/FodyWeavers.xsd b/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 ba8c20e337..9186c6f4dc 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 @@ -26,4 +28,4 @@ - \ No newline at end of file + diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/FodyWeavers.xml b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/FodyWeavers.xsd b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo.Abp.PermissionManagement.Domain.Tests.csproj b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo.Abp.PermissionManagement.Domain.Tests.csproj index c9a10af869..1b428ebc3c 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo.Abp.PermissionManagement.Domain.Tests.csproj +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo.Abp.PermissionManagement.Domain.Tests.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 @@ -21,4 +23,4 @@ - \ No newline at end of file + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/FodyWeavers.xsd b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 8de8ec1923..406ef82aba 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/FodyWeavers.xsd b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 8345be068a..8b0ced6f97 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/FodyWeavers.xsd b/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo.Abp.SettingManagement.EntityFrameworkCore.csproj b/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo.Abp.SettingManagement.EntityFrameworkCore.csproj index f5e1761cc5..a5a996ba85 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo.Abp.SettingManagement.EntityFrameworkCore.csproj +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo.Abp.SettingManagement.EntityFrameworkCore.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/FodyWeavers.xsd b/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/Volo.Abp.SettingManagement.MongoDB.csproj b/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/Volo.Abp.SettingManagement.MongoDB.csproj index 8f068d1f12..84c98c6981 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/Volo.Abp.SettingManagement.MongoDB.csproj +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/Volo.Abp.SettingManagement.MongoDB.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/FodyWeavers.xsd b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 854fedf853..cbf526e751 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests/FodyWeavers.xml b/modules/setting-management/test/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd b/modules/setting-management/test/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 1a04328983..11697cd8fa 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.MongoDB.Tests/FodyWeavers.xml b/modules/setting-management/test/Volo.Abp.SettingManagement.MongoDB.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.MongoDB.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.MongoDB.Tests/FodyWeavers.xsd b/modules/setting-management/test/Volo.Abp.SettingManagement.MongoDB.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.MongoDB.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 791758698d..9310b74007 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/FodyWeavers.xml b/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/FodyWeavers.xsd b/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 75f44e1ca3..f985a0948a 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/FodyWeavers.xml b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/FodyWeavers.xsd b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 7f99e1ae2c..4aaf1d1fdd 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/FodyWeavers.xsd b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo.Abp.TenantManagement.Application.Contracts.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo.Abp.TenantManagement.Application.Contracts.csproj index 57f177df96..41620fcc1d 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo.Abp.TenantManagement.Application.Contracts.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo.Abp.TenantManagement.Application.Contracts.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/FodyWeavers.xsd b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.csproj index bd5926a785..2e8bff8d48 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/FodyWeavers.xsd b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 5cdaa28369..925834d1f6 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/FodyWeavers.xsd b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo.Abp.TenantManagement.Domain.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo.Abp.TenantManagement.Domain.csproj index 9f516e45fd..28541197c4 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo.Abp.TenantManagement.Domain.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo.Abp.TenantManagement.Domain.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/FodyWeavers.xsd b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo.Abp.TenantManagement.EntityFrameworkCore.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo.Abp.TenantManagement.EntityFrameworkCore.csproj index 259f5e7a73..fba231b5ee 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo.Abp.TenantManagement.EntityFrameworkCore.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo.Abp.TenantManagement.EntityFrameworkCore.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/FodyWeavers.xsd b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/Volo.Abp.TenantManagement.HttpApi.Client.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/Volo.Abp.TenantManagement.HttpApi.Client.csproj index cb8c188e9b..9c36b1b29e 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/Volo.Abp.TenantManagement.HttpApi.Client.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/Volo.Abp.TenantManagement.HttpApi.Client.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/FodyWeavers.xsd b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/Volo.Abp.TenantManagement.HttpApi.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/Volo.Abp.TenantManagement.HttpApi.csproj index a26db3823b..082be51571 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/Volo.Abp.TenantManagement.HttpApi.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/Volo.Abp.TenantManagement.HttpApi.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/FodyWeavers.xsd b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo.Abp.TenantManagement.MongoDB.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo.Abp.TenantManagement.MongoDB.csproj index aa7c7f9340..870d87b6c4 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo.Abp.TenantManagement.MongoDB.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo.Abp.TenantManagement.MongoDB.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/FodyWeavers.xsd b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 93fa5b3817..56e6d3cae7 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 @@ -1,5 +1,6 @@ - + + diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/FodyWeavers.xml b/modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/FodyWeavers.xsd b/modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 65498d6f38..16b3dd62b2 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/FodyWeavers.xml b/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/FodyWeavers.xsd b/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 8dd16201cb..da8e1f050a 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/FodyWeavers.xml b/modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd b/modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 528fd9e4e9..bdd94d4130 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.MongoDB.Tests/FodyWeavers.xml b/modules/tenant-management/test/Volo.Abp.TenantManagement.MongoDB.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.MongoDB.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.MongoDB.Tests/FodyWeavers.xsd b/modules/tenant-management/test/Volo.Abp.TenantManagement.MongoDB.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.MongoDB.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 8cd0fbdae2..1a8b95eff5 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/FodyWeavers.xml b/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/FodyWeavers.xsd b/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 89b9c1aae2..6340ffee63 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/modules/users/src/Volo.Abp.Users.Abstractions/FodyWeavers.xml b/modules/users/src/Volo.Abp.Users.Abstractions/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/users/src/Volo.Abp.Users.Abstractions/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.Abstractions/FodyWeavers.xsd b/modules/users/src/Volo.Abp.Users.Abstractions/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/users/src/Volo.Abp.Users.Abstractions/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.Abstractions/Volo.Abp.Users.Abstractions.csproj b/modules/users/src/Volo.Abp.Users.Abstractions/Volo.Abp.Users.Abstractions.csproj index 92d5a13bfc..43907cd41d 100644 --- a/modules/users/src/Volo.Abp.Users.Abstractions/Volo.Abp.Users.Abstractions.csproj +++ b/modules/users/src/Volo.Abp.Users.Abstractions/Volo.Abp.Users.Abstractions.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/users/src/Volo.Abp.Users.Domain.Shared/FodyWeavers.xml b/modules/users/src/Volo.Abp.Users.Domain.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/users/src/Volo.Abp.Users.Domain.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.Domain.Shared/FodyWeavers.xsd b/modules/users/src/Volo.Abp.Users.Domain.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/users/src/Volo.Abp.Users.Domain.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.Domain.Shared/Volo.Abp.Users.Domain.Shared.csproj b/modules/users/src/Volo.Abp.Users.Domain.Shared/Volo.Abp.Users.Domain.Shared.csproj index 00423f67ae..30a5701451 100644 --- a/modules/users/src/Volo.Abp.Users.Domain.Shared/Volo.Abp.Users.Domain.Shared.csproj +++ b/modules/users/src/Volo.Abp.Users.Domain.Shared/Volo.Abp.Users.Domain.Shared.csproj @@ -1,5 +1,6 @@ + diff --git a/modules/users/src/Volo.Abp.Users.Domain/FodyWeavers.xml b/modules/users/src/Volo.Abp.Users.Domain/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/users/src/Volo.Abp.Users.Domain/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.Domain/FodyWeavers.xsd b/modules/users/src/Volo.Abp.Users.Domain/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/users/src/Volo.Abp.Users.Domain/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.Domain/Volo.Abp.Users.Domain.csproj b/modules/users/src/Volo.Abp.Users.Domain/Volo.Abp.Users.Domain.csproj index 8d39887121..fadbff5be4 100644 --- a/modules/users/src/Volo.Abp.Users.Domain/Volo.Abp.Users.Domain.csproj +++ b/modules/users/src/Volo.Abp.Users.Domain/Volo.Abp.Users.Domain.csproj @@ -1,5 +1,6 @@ + diff --git a/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/FodyWeavers.xml b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/FodyWeavers.xsd b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo.Abp.Users.EntityFrameworkCore.csproj b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo.Abp.Users.EntityFrameworkCore.csproj index d70b92e1a4..7c21b91633 100644 --- a/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo.Abp.Users.EntityFrameworkCore.csproj +++ b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo.Abp.Users.EntityFrameworkCore.csproj @@ -1,5 +1,6 @@ - + + diff --git a/modules/users/src/Volo.Abp.Users.MongoDB/FodyWeavers.xml b/modules/users/src/Volo.Abp.Users.MongoDB/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/users/src/Volo.Abp.Users.MongoDB/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.MongoDB/FodyWeavers.xsd b/modules/users/src/Volo.Abp.Users.MongoDB/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/users/src/Volo.Abp.Users.MongoDB/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.MongoDB/Volo.Abp.Users.MongoDB.csproj b/modules/users/src/Volo.Abp.Users.MongoDB/Volo.Abp.Users.MongoDB.csproj index 205d39d7ae..4efc907924 100644 --- a/modules/users/src/Volo.Abp.Users.MongoDB/Volo.Abp.Users.MongoDB.csproj +++ b/modules/users/src/Volo.Abp.Users.MongoDB/Volo.Abp.Users.MongoDB.csproj @@ -1,5 +1,6 @@ + diff --git a/modules/users/test/Volo.Abp.Users.EntityFrameworkCore.Tests/Volo.Abp.Users.EntityFrameworkCore.Tests.csproj b/modules/users/test/Volo.Abp.Users.EntityFrameworkCore.Tests/Volo.Abp.Users.EntityFrameworkCore.Tests.csproj index 286cfbf85d..ad7df9abc9 100644 --- a/modules/users/test/Volo.Abp.Users.EntityFrameworkCore.Tests/Volo.Abp.Users.EntityFrameworkCore.Tests.csproj +++ b/modules/users/test/Volo.Abp.Users.EntityFrameworkCore.Tests/Volo.Abp.Users.EntityFrameworkCore.Tests.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp2.2 diff --git a/modules/users/test/Volo.Abp.Users.MongoDB.Tests/Volo.Abp.Users.MongoDB.Tests.csproj b/modules/users/test/Volo.Abp.Users.MongoDB.Tests/Volo.Abp.Users.MongoDB.Tests.csproj index 5a5fdebd93..8622558e01 100644 --- a/modules/users/test/Volo.Abp.Users.MongoDB.Tests/Volo.Abp.Users.MongoDB.Tests.csproj +++ b/modules/users/test/Volo.Abp.Users.MongoDB.Tests/Volo.Abp.Users.MongoDB.Tests.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp2.2 diff --git a/modules/users/test/Volo.Abp.Users.Tests.Shared/Volo.Abp.Users.Tests.Shared.csproj b/modules/users/test/Volo.Abp.Users.Tests.Shared/Volo.Abp.Users.Tests.Shared.csproj index ececb4eddd..f35928c026 100644 --- a/modules/users/test/Volo.Abp.Users.Tests.Shared/Volo.Abp.Users.Tests.Shared.csproj +++ b/modules/users/test/Volo.Abp.Users.Tests.Shared/Volo.Abp.Users.Tests.Shared.csproj @@ -1,5 +1,7 @@ + + netcoreapp2.2 Volo.Abp.Users.Tests.Shared diff --git a/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/BasicAspNetCoreApplication.csproj b/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/BasicAspNetCoreApplication.csproj index 6c67e821bc..7c2f141f63 100644 --- a/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/BasicAspNetCoreApplication.csproj +++ b/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/BasicAspNetCoreApplication.csproj @@ -1,5 +1,7 @@ + + netcoreapp3.1 diff --git a/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/FodyWeavers.xml b/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/FodyWeavers.xsd b/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BasicConsoleApplication/AbpConsoleDemo/AbpConsoleDemo.csproj b/samples/BasicConsoleApplication/AbpConsoleDemo/AbpConsoleDemo.csproj index c3c4e39fd8..51a237c1d3 100644 --- a/samples/BasicConsoleApplication/AbpConsoleDemo/AbpConsoleDemo.csproj +++ b/samples/BasicConsoleApplication/AbpConsoleDemo/AbpConsoleDemo.csproj @@ -1,4 +1,6 @@ - + + + Exe diff --git a/samples/BasicConsoleApplication/AbpConsoleDemo/FodyWeavers.xml b/samples/BasicConsoleApplication/AbpConsoleDemo/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BasicConsoleApplication/AbpConsoleDemo/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BasicConsoleApplication/AbpConsoleDemo/FodyWeavers.xsd b/samples/BasicConsoleApplication/AbpConsoleDemo/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BasicConsoleApplication/AbpConsoleDemo/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj index 5f891705ab..c9929bc268 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj index d5c461a4ec..bed9fb9b01 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj index 9b7543cf7f..544cc9aea4 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj index acc9b5d652..f2a1a15c6b 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj @@ -1,5 +1,6 @@ + @@ -23,4 +24,4 @@ - \ No newline at end of file + diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj index 0d4f4786b9..e91ce47353 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj index 92f405974e..5f099e6f59 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/Acme.BookStore.HttpApi.Host.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/Acme.BookStore.HttpApi.Host.csproj index ad0861edc7..5ce0c2e318 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/Acme.BookStore.HttpApi.Host.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/Acme.BookStore.HttpApi.Host.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj index d9ddc1b9f5..b0a778d284 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/Acme.BookStore.MongoDB.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/Acme.BookStore.MongoDB.csproj index 2bca7ac168..8158d6dcf2 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/Acme.BookStore.MongoDB.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/Acme.BookStore.MongoDB.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj index ae2a3df88f..fbacb8ac6c 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj index f8845ac4dd..3c58f22367 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj index af90ca7a55..e6a758a5ee 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj @@ -1,5 +1,7 @@ + + Exe netcoreapp3.1 diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/Acme.BookStore.MongoDB.Tests.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/Acme.BookStore.MongoDB.Tests.csproj index df57cc47c2..1d847e3d94 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/Acme.BookStore.MongoDB.Tests.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/Acme.BookStore.MongoDB.Tests.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj index 7493c31929..a30df18c0e 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj index 190f9a7d1a..d86baf264c 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd b/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj index a013275101..5369d8a536 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Application/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.Application/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Application/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Application/FodyWeavers.xsd b/samples/BookStore-Modular/application/src/Acme.BookStore.Application/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Application/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj index 7b08e55bda..96b2635682 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj index d0d0942a4a..a67e7ef8c9 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj @@ -1,5 +1,6 @@ + @@ -24,4 +25,4 @@ - \ No newline at end of file + diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj index e60a8b41fc..977df2784d 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/FodyWeavers.xsd b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj index b38c71d1d4..3bc80f3b52 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/Acme.BookStore.EntityFrameworkCore.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/Acme.BookStore.EntityFrameworkCore.csproj index 3ffa519de6..02f13f8005 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/Acme.BookStore.EntityFrameworkCore.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/Acme.BookStore.EntityFrameworkCore.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xsd b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj index 80934a8e71..9e67bd6564 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj index 9814743a3a..d70fd6a24c 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/FodyWeavers.xsd b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj index 9d4115179c..02e66458a1 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Web/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.Web/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Web/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Web/FodyWeavers.xsd b/samples/BookStore-Modular/application/src/Acme.BookStore.Web/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Web/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj b/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj index ae2a3df88f..fbacb8ac6c 100644 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/FodyWeavers.xml b/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd b/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj b/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj index 1f9b387058..abb65f4e60 100644 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml b/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd b/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/Acme.BookStore.EntityFrameworkCore.Tests.csproj b/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/Acme.BookStore.EntityFrameworkCore.Tests.csproj index dd2137ad06..d14c887e96 100644 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/Acme.BookStore.EntityFrameworkCore.Tests.csproj +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/Acme.BookStore.EntityFrameworkCore.Tests.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml b/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xsd b/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj b/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj index af90ca7a55..e6a758a5ee 100644 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj @@ -1,5 +1,7 @@ + + Exe netcoreapp3.1 diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml b/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd b/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj b/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj index 7493c31929..a30df18c0e 100644 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/FodyWeavers.xml b/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/FodyWeavers.xsd b/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/Acme.BookStore.Web.Tests.csproj b/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/Acme.BookStore.Web.Tests.csproj index df1197d3b2..0ad37386d5 100644 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/Acme.BookStore.Web.Tests.csproj +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/Acme.BookStore.Web.Tests.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/FodyWeavers.xml b/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/FodyWeavers.xsd b/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/Acme.BookStore.BookManagement.Host.Shared.csproj b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/Acme.BookStore.BookManagement.Host.Shared.csproj index 50352a1d1c..ba27c9ed67 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/Acme.BookStore.BookManagement.Host.Shared.csproj +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/Acme.BookStore.BookManagement.Host.Shared.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/Acme.BookStore.BookManagement.HttpApi.Host.csproj b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/Acme.BookStore.BookManagement.HttpApi.Host.csproj index 60f118bc93..677c0b64fc 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/Acme.BookStore.BookManagement.HttpApi.Host.csproj +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/Acme.BookStore.BookManagement.HttpApi.Host.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Acme.BookStore.BookManagement.IdentityServer.csproj b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Acme.BookStore.BookManagement.IdentityServer.csproj index d9b39f407e..fa91a2889f 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Acme.BookStore.BookManagement.IdentityServer.csproj +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Acme.BookStore.BookManagement.IdentityServer.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/Acme.BookStore.BookManagement.Web.Host.csproj b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/Acme.BookStore.BookManagement.Web.Host.csproj index 1df46016b4..95ea1f51ea 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/Acme.BookStore.BookManagement.Web.Host.csproj +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/Acme.BookStore.BookManagement.Web.Host.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Acme.BookStore.BookManagement.Web.Unified.csproj b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Acme.BookStore.BookManagement.Web.Unified.csproj index 04993f9b69..fbe4ee99da 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Acme.BookStore.BookManagement.Web.Unified.csproj +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Acme.BookStore.BookManagement.Web.Unified.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/Acme.BookStore.BookManagement.Application.Contracts.csproj b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/Acme.BookStore.BookManagement.Application.Contracts.csproj index 4c1d84fa66..6da883d0e7 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/Acme.BookStore.BookManagement.Application.Contracts.csproj +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/Acme.BookStore.BookManagement.Application.Contracts.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/Acme.BookStore.BookManagement.Application.csproj b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/Acme.BookStore.BookManagement.Application.csproj index 45097c877b..9178e306aa 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/Acme.BookStore.BookManagement.Application.csproj +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/Acme.BookStore.BookManagement.Application.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/Acme.BookStore.BookManagement.Domain.Shared.csproj b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/Acme.BookStore.BookManagement.Domain.Shared.csproj index 5237b88c14..657dbc383a 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/Acme.BookStore.BookManagement.Domain.Shared.csproj +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/Acme.BookStore.BookManagement.Domain.Shared.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/Acme.BookStore.BookManagement.Domain.csproj b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/Acme.BookStore.BookManagement.Domain.csproj index 05176a1c2a..c572e909fa 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/Acme.BookStore.BookManagement.Domain.csproj +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/Acme.BookStore.BookManagement.Domain.csproj @@ -1,5 +1,6 @@ - + + @@ -12,4 +13,4 @@ - \ No newline at end of file + diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/Acme.BookStore.BookManagement.EntityFrameworkCore.csproj b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/Acme.BookStore.BookManagement.EntityFrameworkCore.csproj index 5d0a8647fe..5979830799 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/Acme.BookStore.BookManagement.EntityFrameworkCore.csproj +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/Acme.BookStore.BookManagement.EntityFrameworkCore.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/Acme.BookStore.BookManagement.HttpApi.Client.csproj b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/Acme.BookStore.BookManagement.HttpApi.Client.csproj index 5b821bf6c3..123be5d956 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/Acme.BookStore.BookManagement.HttpApi.Client.csproj +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/Acme.BookStore.BookManagement.HttpApi.Client.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/Acme.BookStore.BookManagement.HttpApi.csproj b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/Acme.BookStore.BookManagement.HttpApi.csproj index 191d172412..7f448ab7c4 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/Acme.BookStore.BookManagement.HttpApi.csproj +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/Acme.BookStore.BookManagement.HttpApi.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/Acme.BookStore.BookManagement.MongoDB.csproj b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/Acme.BookStore.BookManagement.MongoDB.csproj index dd5bf6c2f7..c88a63733b 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/Acme.BookStore.BookManagement.MongoDB.csproj +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/Acme.BookStore.BookManagement.MongoDB.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/Acme.BookStore.BookManagement.Web.csproj b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/Acme.BookStore.BookManagement.Web.csproj index fd2fb9a015..2479b21d70 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/Acme.BookStore.BookManagement.Web.csproj +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/Acme.BookStore.BookManagement.Web.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/Acme.BookStore.BookManagement.Application.Tests.csproj b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/Acme.BookStore.BookManagement.Application.Tests.csproj index c0441db54c..d51290a30d 100644 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/Acme.BookStore.BookManagement.Application.Tests.csproj +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/Acme.BookStore.BookManagement.Application.Tests.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/Acme.BookStore.BookManagement.Domain.Tests.csproj b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/Acme.BookStore.BookManagement.Domain.Tests.csproj index de67d2e56e..c769e873e1 100644 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/Acme.BookStore.BookManagement.Domain.Tests.csproj +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/Acme.BookStore.BookManagement.Domain.Tests.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests.csproj b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests.csproj index a262f7fe57..fefb2b2dfb 100644 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests.csproj +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp.csproj b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp.csproj index 92b2378eef..1d095f1564 100644 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp.csproj +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp.csproj @@ -1,4 +1,6 @@ - + + + Exe diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/Acme.BookStore.BookManagement.MongoDB.Tests.csproj b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/Acme.BookStore.BookManagement.MongoDB.Tests.csproj index 6bface97bf..9889fa2d9a 100644 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/Acme.BookStore.BookManagement.MongoDB.Tests.csproj +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/Acme.BookStore.BookManagement.MongoDB.Tests.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/Acme.BookStore.BookManagement.TestBase.csproj b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/Acme.BookStore.BookManagement.TestBase.csproj index 81698d278f..3fc0ad29d8 100644 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/Acme.BookStore.BookManagement.TestBase.csproj +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/Acme.BookStore.BookManagement.TestBase.csproj @@ -1,5 +1,6 @@ + diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj b/samples/BookStore/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj index ba56e3b6b0..5e00fba216 100644 --- a/samples/BookStore/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj +++ b/samples/BookStore/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd b/samples/BookStore/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj b/samples/BookStore/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj index be36aa7a2c..db07da9451 100644 --- a/samples/BookStore/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj +++ b/samples/BookStore/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore/src/Acme.BookStore.Application/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.Application/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.Application/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Application/FodyWeavers.xsd b/samples/BookStore/src/Acme.BookStore.Application/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.Application/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj b/samples/BookStore/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj index 6003aa8be2..350a92d76f 100644 --- a/samples/BookStore/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj +++ b/samples/BookStore/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore/src/Acme.BookStore.DbMigrator/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.DbMigrator/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.DbMigrator/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd b/samples/BookStore/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj b/samples/BookStore/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj index d9a183a46f..ace979d540 100644 --- a/samples/BookStore/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj +++ b/samples/BookStore/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj @@ -1,5 +1,6 @@ - + + @@ -23,4 +24,4 @@ - \ No newline at end of file + diff --git a/samples/BookStore/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd b/samples/BookStore/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj b/samples/BookStore/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj index dc2df7a7fe..91edc68463 100644 --- a/samples/BookStore/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj +++ b/samples/BookStore/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore/src/Acme.BookStore.Domain/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.Domain/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.Domain/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Domain/FodyWeavers.xsd b/samples/BookStore/src/Acme.BookStore.Domain/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.Domain/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj index fadc1c8e0c..019df5c96f 100644 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Acme.BookStore.EntityFrameworkCore.csproj b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Acme.BookStore.EntityFrameworkCore.csproj index 028b89d57a..bff38865e2 100644 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Acme.BookStore.EntityFrameworkCore.csproj +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Acme.BookStore.EntityFrameworkCore.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xsd b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj b/samples/BookStore/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj index 1aaceaa8aa..206e743dc1 100644 --- a/samples/BookStore/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj +++ b/samples/BookStore/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd b/samples/BookStore/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj b/samples/BookStore/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj index 1b664dea92..91c3520976 100644 --- a/samples/BookStore/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj +++ b/samples/BookStore/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore/src/Acme.BookStore.HttpApi/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.HttpApi/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.HttpApi/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.HttpApi/FodyWeavers.xsd b/samples/BookStore/src/Acme.BookStore.HttpApi/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.HttpApi/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj b/samples/BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj index 832114ce3b..eac35c1085 100644 --- a/samples/BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj +++ b/samples/BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore/src/Acme.BookStore.Web/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.Web/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.Web/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Web/FodyWeavers.xsd b/samples/BookStore/src/Acme.BookStore.Web/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.Web/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj b/samples/BookStore/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj index 01f80db3bd..3d8961db86 100644 --- a/samples/BookStore/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj +++ b/samples/BookStore/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore/test/Acme.BookStore.Application.Tests/FodyWeavers.xml b/samples/BookStore/test/Acme.BookStore.Application.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore/test/Acme.BookStore.Application.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd b/samples/BookStore/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj b/samples/BookStore/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj index af4d93ed74..2635164c31 100644 --- a/samples/BookStore/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj +++ b/samples/BookStore/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml b/samples/BookStore/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd b/samples/BookStore/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/Acme.BookStore.EntityFrameworkCore.Tests.csproj b/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/Acme.BookStore.EntityFrameworkCore.Tests.csproj index b326d0ccf5..3092807849 100644 --- a/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/Acme.BookStore.EntityFrameworkCore.Tests.csproj +++ b/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/Acme.BookStore.EntityFrameworkCore.Tests.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml b/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xsd b/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj b/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj index 7620a76c90..25e114c271 100644 --- a/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj +++ b/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj @@ -1,4 +1,6 @@ - + + + Exe diff --git a/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml b/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd b/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj b/samples/BookStore/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj index 516e550f01..72d0326e70 100644 --- a/samples/BookStore/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj +++ b/samples/BookStore/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore/test/Acme.BookStore.TestBase/FodyWeavers.xml b/samples/BookStore/test/Acme.BookStore.TestBase/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore/test/Acme.BookStore.TestBase/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.TestBase/FodyWeavers.xsd b/samples/BookStore/test/Acme.BookStore.TestBase/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore/test/Acme.BookStore.TestBase/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.Web.Tests/Acme.BookStore.Web.Tests.csproj b/samples/BookStore/test/Acme.BookStore.Web.Tests/Acme.BookStore.Web.Tests.csproj index 30f34edd0d..a74205d54c 100644 --- a/samples/BookStore/test/Acme.BookStore.Web.Tests/Acme.BookStore.Web.Tests.csproj +++ b/samples/BookStore/test/Acme.BookStore.Web.Tests/Acme.BookStore.Web.Tests.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/BookStore/test/Acme.BookStore.Web.Tests/FodyWeavers.xml b/samples/BookStore/test/Acme.BookStore.Web.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/BookStore/test/Acme.BookStore.Web.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.Web.Tests/FodyWeavers.xsd b/samples/BookStore/test/Acme.BookStore.Web.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/BookStore/test/Acme.BookStore.Web.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/DashboardDemo.Application.Contracts.csproj b/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/DashboardDemo.Application.Contracts.csproj index eac22963c5..f6062235f3 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/DashboardDemo.Application.Contracts.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/DashboardDemo.Application.Contracts.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/FodyWeavers.xsd b/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Application/DashboardDemo.Application.csproj b/samples/DashboardDemo/src/DashboardDemo.Application/DashboardDemo.Application.csproj index 4161f43bf5..9d23613656 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Application/DashboardDemo.Application.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.Application/DashboardDemo.Application.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/DashboardDemo/src/DashboardDemo.Application/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.Application/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.Application/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Application/FodyWeavers.xsd b/samples/DashboardDemo/src/DashboardDemo.Application/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.Application/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.DbMigrator/DashboardDemo.DbMigrator.csproj b/samples/DashboardDemo/src/DashboardDemo.DbMigrator/DashboardDemo.DbMigrator.csproj index cb4d1b1604..d4ac9b709e 100644 --- a/samples/DashboardDemo/src/DashboardDemo.DbMigrator/DashboardDemo.DbMigrator.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.DbMigrator/DashboardDemo.DbMigrator.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/DashboardDemo/src/DashboardDemo.DbMigrator/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.DbMigrator/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.DbMigrator/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.DbMigrator/FodyWeavers.xsd b/samples/DashboardDemo/src/DashboardDemo.DbMigrator/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.DbMigrator/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/DashboardDemo.Domain.Shared.csproj b/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/DashboardDemo.Domain.Shared.csproj index 81bef40c1b..2cb35edb80 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/DashboardDemo.Domain.Shared.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/DashboardDemo.Domain.Shared.csproj @@ -1,5 +1,6 @@ - + + @@ -23,4 +24,4 @@ - \ No newline at end of file + diff --git a/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/FodyWeavers.xsd b/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Domain/DashboardDemo.Domain.csproj b/samples/DashboardDemo/src/DashboardDemo.Domain/DashboardDemo.Domain.csproj index 4d8065b1d4..f23f858019 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Domain/DashboardDemo.Domain.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.Domain/DashboardDemo.Domain.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/DashboardDemo/src/DashboardDemo.Domain/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.Domain/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.Domain/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Domain/FodyWeavers.xsd b/samples/DashboardDemo/src/DashboardDemo.Domain/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.Domain/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/DashboardDemo.EntityFrameworkCore.DbMigrations.csproj b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/DashboardDemo.EntityFrameworkCore.DbMigrations.csproj index e276e160a2..45948431a6 100644 --- a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/DashboardDemo.EntityFrameworkCore.DbMigrations.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/DashboardDemo.EntityFrameworkCore.DbMigrations.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/DashboardDemo.EntityFrameworkCore.csproj b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/DashboardDemo.EntityFrameworkCore.csproj index 7095ccc19e..6d2c1a307a 100644 --- a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/DashboardDemo.EntityFrameworkCore.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/DashboardDemo.EntityFrameworkCore.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/FodyWeavers.xsd b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/DashboardDemo.HttpApi.Client.csproj b/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/DashboardDemo.HttpApi.Client.csproj index 658ec3f724..fd760fbcdb 100644 --- a/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/DashboardDemo.HttpApi.Client.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/DashboardDemo.HttpApi.Client.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/FodyWeavers.xsd b/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.HttpApi/DashboardDemo.HttpApi.csproj b/samples/DashboardDemo/src/DashboardDemo.HttpApi/DashboardDemo.HttpApi.csproj index 2afac6c2b8..30fbe5eb6c 100644 --- a/samples/DashboardDemo/src/DashboardDemo.HttpApi/DashboardDemo.HttpApi.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.HttpApi/DashboardDemo.HttpApi.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/DashboardDemo/src/DashboardDemo.HttpApi/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.HttpApi/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.HttpApi/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.HttpApi/FodyWeavers.xsd b/samples/DashboardDemo/src/DashboardDemo.HttpApi/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.HttpApi/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemo.Web.csproj b/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemo.Web.csproj index f00f144407..50d1561329 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemo.Web.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemo.Web.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/DashboardDemo/src/DashboardDemo.Web/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.Web/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.Web/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Web/FodyWeavers.xsd b/samples/DashboardDemo/src/DashboardDemo.Web/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.Web/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.Application.Tests/DashboardDemo.Application.Tests.csproj b/samples/DashboardDemo/test/DashboardDemo.Application.Tests/DashboardDemo.Application.Tests.csproj index 66ac6f7698..be589f5a4f 100644 --- a/samples/DashboardDemo/test/DashboardDemo.Application.Tests/DashboardDemo.Application.Tests.csproj +++ b/samples/DashboardDemo/test/DashboardDemo.Application.Tests/DashboardDemo.Application.Tests.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/DashboardDemo/test/DashboardDemo.Application.Tests/FodyWeavers.xml b/samples/DashboardDemo/test/DashboardDemo.Application.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/DashboardDemo/test/DashboardDemo.Application.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.Application.Tests/FodyWeavers.xsd b/samples/DashboardDemo/test/DashboardDemo.Application.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/DashboardDemo/test/DashboardDemo.Application.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/DashboardDemo.Domain.Tests.csproj b/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/DashboardDemo.Domain.Tests.csproj index 28f2ae7aee..f23a82121b 100644 --- a/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/DashboardDemo.Domain.Tests.csproj +++ b/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/DashboardDemo.Domain.Tests.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/FodyWeavers.xml b/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/FodyWeavers.xsd b/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/DashboardDemo.EntityFrameworkCore.Tests.csproj b/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/DashboardDemo.EntityFrameworkCore.Tests.csproj index 2d4e5d409e..e8360be71c 100644 --- a/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/DashboardDemo.EntityFrameworkCore.Tests.csproj +++ b/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/DashboardDemo.EntityFrameworkCore.Tests.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/FodyWeavers.xml b/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/FodyWeavers.xsd b/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/DashboardDemo.HttpApi.Client.ConsoleTestApp.csproj b/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/DashboardDemo.HttpApi.Client.ConsoleTestApp.csproj index ad5b3b7caa..b9eeffa311 100644 --- a/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/DashboardDemo.HttpApi.Client.ConsoleTestApp.csproj +++ b/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/DashboardDemo.HttpApi.Client.ConsoleTestApp.csproj @@ -1,4 +1,6 @@ - + + + Exe diff --git a/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml b/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd b/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.TestBase/DashboardDemo.TestBase.csproj b/samples/DashboardDemo/test/DashboardDemo.TestBase/DashboardDemo.TestBase.csproj index fc0fe296f5..257730eec1 100644 --- a/samples/DashboardDemo/test/DashboardDemo.TestBase/DashboardDemo.TestBase.csproj +++ b/samples/DashboardDemo/test/DashboardDemo.TestBase/DashboardDemo.TestBase.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/DashboardDemo/test/DashboardDemo.TestBase/FodyWeavers.xml b/samples/DashboardDemo/test/DashboardDemo.TestBase/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/DashboardDemo/test/DashboardDemo.TestBase/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.TestBase/FodyWeavers.xsd b/samples/DashboardDemo/test/DashboardDemo.TestBase/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/DashboardDemo/test/DashboardDemo.TestBase/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.Web.Tests/DashboardDemo.Web.Tests.csproj b/samples/DashboardDemo/test/DashboardDemo.Web.Tests/DashboardDemo.Web.Tests.csproj index 91bf825be1..f2f160eb7c 100644 --- a/samples/DashboardDemo/test/DashboardDemo.Web.Tests/DashboardDemo.Web.Tests.csproj +++ b/samples/DashboardDemo/test/DashboardDemo.Web.Tests/DashboardDemo.Web.Tests.csproj @@ -1,5 +1,6 @@ - + + diff --git a/samples/DashboardDemo/test/DashboardDemo.Web.Tests/FodyWeavers.xml b/samples/DashboardDemo/test/DashboardDemo.Web.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/DashboardDemo/test/DashboardDemo.Web.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.Web.Tests/FodyWeavers.xsd b/samples/DashboardDemo/test/DashboardDemo.Web.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/DashboardDemo/test/DashboardDemo.Web.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj index 47bf7813f8..d1500bee44 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/FodyWeavers.xml b/samples/MicroserviceDemo/applications/AuthServer.Host/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/FodyWeavers.xsd b/samples/MicroserviceDemo/applications/AuthServer.Host/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj index a22e073228..59160881b3 100644 --- a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj +++ b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/FodyWeavers.xml b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/FodyWeavers.xsd b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/applications/ConsoleClientDemo/ConsoleClientDemo.csproj b/samples/MicroserviceDemo/applications/ConsoleClientDemo/ConsoleClientDemo.csproj index 0e9b3e5faa..c3c4793bb2 100644 --- a/samples/MicroserviceDemo/applications/ConsoleClientDemo/ConsoleClientDemo.csproj +++ b/samples/MicroserviceDemo/applications/ConsoleClientDemo/ConsoleClientDemo.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/samples/MicroserviceDemo/applications/ConsoleClientDemo/FodyWeavers.xml b/samples/MicroserviceDemo/applications/ConsoleClientDemo/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/MicroserviceDemo/applications/ConsoleClientDemo/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/applications/ConsoleClientDemo/FodyWeavers.xsd b/samples/MicroserviceDemo/applications/ConsoleClientDemo/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/MicroserviceDemo/applications/ConsoleClientDemo/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/applications/PublicWebSite.Host/FodyWeavers.xml b/samples/MicroserviceDemo/applications/PublicWebSite.Host/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/MicroserviceDemo/applications/PublicWebSite.Host/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/applications/PublicWebSite.Host/FodyWeavers.xsd b/samples/MicroserviceDemo/applications/PublicWebSite.Host/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/MicroserviceDemo/applications/PublicWebSite.Host/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj b/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj index 3b4780b2cd..b3c44ea955 100644 --- a/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj +++ b/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj index 554555940d..83c3ccf439 100644 --- a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/FodyWeavers.xml b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/FodyWeavers.xsd b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/gateways/InternalGateway.Host/FodyWeavers.xml b/samples/MicroserviceDemo/gateways/InternalGateway.Host/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/MicroserviceDemo/gateways/InternalGateway.Host/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/gateways/InternalGateway.Host/FodyWeavers.xsd b/samples/MicroserviceDemo/gateways/InternalGateway.Host/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/MicroserviceDemo/gateways/InternalGateway.Host/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj b/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj index 73479d93ad..668b1dcba1 100644 --- a/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/FodyWeavers.xml b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/FodyWeavers.xsd b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj index 8ece4fe5f4..26d7be9c94 100644 --- a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 @@ -44,4 +46,4 @@ - \ No newline at end of file + diff --git a/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj b/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj index cd5bbc8b01..ac5c740612 100644 --- a/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/samples/MicroserviceDemo/microservices/BloggingService.Host/FodyWeavers.xml b/samples/MicroserviceDemo/microservices/BloggingService.Host/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/MicroserviceDemo/microservices/BloggingService.Host/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/microservices/BloggingService.Host/FodyWeavers.xsd b/samples/MicroserviceDemo/microservices/BloggingService.Host/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/MicroserviceDemo/microservices/BloggingService.Host/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/microservices/IdentityService.Host/FodyWeavers.xml b/samples/MicroserviceDemo/microservices/IdentityService.Host/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/MicroserviceDemo/microservices/IdentityService.Host/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/microservices/IdentityService.Host/FodyWeavers.xsd b/samples/MicroserviceDemo/microservices/IdentityService.Host/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/MicroserviceDemo/microservices/IdentityService.Host/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj b/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj index b9dd199a6c..b8a5ecc0f6 100644 --- a/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/samples/MicroserviceDemo/microservices/ProductService.Host/FodyWeavers.xml b/samples/MicroserviceDemo/microservices/ProductService.Host/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/MicroserviceDemo/microservices/ProductService.Host/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/microservices/ProductService.Host/FodyWeavers.xsd b/samples/MicroserviceDemo/microservices/ProductService.Host/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/MicroserviceDemo/microservices/ProductService.Host/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj b/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj index dc4f6aface..94ebd66263 100644 --- a/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/ProductManagement.Application.Contracts.csproj b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/ProductManagement.Application.Contracts.csproj index dd5556e22c..e6f989a4f3 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/ProductManagement.Application.Contracts.csproj +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/ProductManagement.Application.Contracts.csproj @@ -1,4 +1,6 @@ - + + + netstandard2.0 diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/ProductManagement.Application.csproj b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/ProductManagement.Application.csproj index e8979089f2..42e1d719ff 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/ProductManagement.Application.csproj +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/ProductManagement.Application.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/ProductManagement.Domain.Shared.csproj b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/ProductManagement.Domain.Shared.csproj index 18c95e3826..f546787c17 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/ProductManagement.Domain.Shared.csproj +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/ProductManagement.Domain.Shared.csproj @@ -1,4 +1,6 @@ - + + + netstandard2.0 diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/ProductManagement.Domain.csproj b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/ProductManagement.Domain.csproj index c542289d4c..e06b471709 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/ProductManagement.Domain.csproj +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/ProductManagement.Domain.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/ProductManagement.EntityFrameworkCore.csproj b/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/ProductManagement.EntityFrameworkCore.csproj index 6fa636813c..2528ae00f8 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/ProductManagement.EntityFrameworkCore.csproj +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/ProductManagement.EntityFrameworkCore.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/ProductManagement.HttpApi.Client.csproj b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/ProductManagement.HttpApi.Client.csproj index 3ac801cadc..2b0f5b7dfd 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/ProductManagement.HttpApi.Client.csproj +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/ProductManagement.HttpApi.Client.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/ProductManagement.HttpApi.csproj b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/ProductManagement.HttpApi.csproj index de724336b5..edb54a751f 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/ProductManagement.HttpApi.csproj +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/ProductManagement.HttpApi.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/ProductManagement.Web.csproj b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/ProductManagement.Web.csproj index a4690d2ceb..047d5857c6 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/ProductManagement.Web.csproj +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/ProductManagement.Web.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/ProductManagement.Application.Tests.csproj b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/ProductManagement.Application.Tests.csproj index 6e2e2fcd0f..6a267ebc29 100644 --- a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/ProductManagement.Application.Tests.csproj +++ b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/ProductManagement.Application.Tests.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/ProductManagement.Domain.Tests.csproj b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/ProductManagement.Domain.Tests.csproj index 4ba80b1a97..e8afef14ef 100644 --- a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/ProductManagement.Domain.Tests.csproj +++ b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/ProductManagement.Domain.Tests.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/ProductManagement.EntityFrameworkCore.Tests.csproj b/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/ProductManagement.EntityFrameworkCore.Tests.csproj index 6a10664e46..d67843c440 100644 --- a/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/ProductManagement.EntityFrameworkCore.Tests.csproj +++ b/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/ProductManagement.EntityFrameworkCore.Tests.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/ProductManagement.TestBase.csproj b/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/ProductManagement.TestBase.csproj index 7d0ffde718..b609d05686 100644 --- a/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/ProductManagement.TestBase.csproj +++ b/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/ProductManagement.TestBase.csproj @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/samples/RabbitMqEventBus/App1/App1.csproj b/samples/RabbitMqEventBus/App1/App1.csproj index bc811a5de1..a87bb5c4f6 100644 --- a/samples/RabbitMqEventBus/App1/App1.csproj +++ b/samples/RabbitMqEventBus/App1/App1.csproj @@ -1,4 +1,6 @@ - + + + Exe diff --git a/samples/RabbitMqEventBus/App1/FodyWeavers.xml b/samples/RabbitMqEventBus/App1/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/RabbitMqEventBus/App1/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/RabbitMqEventBus/App1/FodyWeavers.xsd b/samples/RabbitMqEventBus/App1/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/RabbitMqEventBus/App1/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/RabbitMqEventBus/App2/App2.csproj b/samples/RabbitMqEventBus/App2/App2.csproj index bc811a5de1..a87bb5c4f6 100644 --- a/samples/RabbitMqEventBus/App2/App2.csproj +++ b/samples/RabbitMqEventBus/App2/App2.csproj @@ -1,4 +1,6 @@ - + + + Exe diff --git a/samples/RabbitMqEventBus/App2/FodyWeavers.xml b/samples/RabbitMqEventBus/App2/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/RabbitMqEventBus/App2/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/RabbitMqEventBus/App2/FodyWeavers.xsd b/samples/RabbitMqEventBus/App2/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/RabbitMqEventBus/App2/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/RabbitMqEventBus/SharedModule/FodyWeavers.xml b/samples/RabbitMqEventBus/SharedModule/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/samples/RabbitMqEventBus/SharedModule/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/samples/RabbitMqEventBus/SharedModule/FodyWeavers.xsd b/samples/RabbitMqEventBus/SharedModule/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/samples/RabbitMqEventBus/SharedModule/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/samples/RabbitMqEventBus/SharedModule/SharedModule.csproj b/samples/RabbitMqEventBus/SharedModule/SharedModule.csproj index c659ddff0b..3ea7e235e3 100644 --- a/samples/RabbitMqEventBus/SharedModule/SharedModule.csproj +++ b/samples/RabbitMqEventBus/SharedModule/SharedModule.csproj @@ -1,4 +1,6 @@ - + + + netstandard2.0 diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj index 90af8423a9..aa060abe28 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj @@ -1,5 +1,6 @@ - + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj index 165267af77..e6b1d8dbde 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj @@ -1,5 +1,6 @@ - + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj index 0f2e701d93..e51a52d639 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj @@ -1,5 +1,6 @@ - + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj index 262569df97..68b085474e 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj @@ -1,5 +1,6 @@ - + + @@ -23,4 +24,4 @@ - \ No newline at end of file + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj index 13a78ff079..3b1a12e970 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj @@ -1,5 +1,6 @@ - + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations.csproj index a16e4c2ca5..6a34cde59e 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations.csproj @@ -1,5 +1,6 @@ - + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj index b6a1de012d..957eed2c52 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj @@ -1,5 +1,6 @@ - + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj index 42d25166ef..294f3d4b94 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj @@ -1,5 +1,6 @@ - + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 d41d991542..cb189073cc 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 @@ -1,5 +1,6 @@ - + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 9c7f66798e..80524511c1 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 @@ -1,5 +1,6 @@ - + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj index 639a3115bd..d74451627e 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj @@ -1,5 +1,6 @@ - + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 6ff7bde240..877133a1e0 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 @@ -1,5 +1,6 @@ - + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MyCompanyName.MyProjectName.MongoDB.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MyCompanyName.MyProjectName.MongoDB.csproj index 178ad5de8c..9666c3ab3e 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MyCompanyName.MyProjectName.MongoDB.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MyCompanyName.MyProjectName.MongoDB.csproj @@ -1,5 +1,6 @@ - + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 0bff1f34fc..2c93249ac0 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 @@ -1,5 +1,6 @@ - + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 db3998cc62..d75d0d3440 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 @@ -1,5 +1,6 @@ - + + diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xsd b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyCompanyName.MyProjectName.Application.Tests.csproj b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyCompanyName.MyProjectName.Application.Tests.csproj index c23b6af8d5..ccf676da60 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyCompanyName.MyProjectName.Application.Tests.csproj +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyCompanyName.MyProjectName.Application.Tests.csproj @@ -1,5 +1,6 @@ - + + diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xsd b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 12f900e989..ceb620a82f 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 @@ -1,5 +1,6 @@ - + + diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xsd b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 ad2d6683a1..3ba736b2be 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 @@ -1,5 +1,6 @@ - + + diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj index b03bbcef1a..746034b5b5 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj @@ -1,4 +1,6 @@ - + + + Exe diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xsd b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 caab5d1c24..c682f81f98 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 @@ -1,5 +1,6 @@ - + + diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xsd b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 b1f6aa363f..fecb50250c 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 @@ -1,5 +1,6 @@ - + + diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/FodyWeavers.xml b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/FodyWeavers.xsd b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 92649a5877..488329906e 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 @@ -1,5 +1,6 @@ - + + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xml b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xsd b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/MyCompanyName.MyProjectName.Host.Shared.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/MyCompanyName.MyProjectName.Host.Shared.csproj index 9b5949c5fe..4a92618672 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/MyCompanyName.MyProjectName.Host.Shared.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/MyCompanyName.MyProjectName.Host.Shared.csproj @@ -1,5 +1,6 @@ - + + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xsd b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 f041445109..1e44f063ce 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 @@ -1,5 +1,6 @@ - + + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xsd b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 2815d81262..0b0ec75956 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 @@ -1,4 +1,6 @@ - + + + netcoreapp3.1 diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xsd b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 6d6b11231a..cb979e484e 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 @@ -1,5 +1,6 @@ - + + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xml b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xsd b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 47f8629dde..12fd167aaf 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 @@ -1,5 +1,6 @@ - + + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj index fba582f665..55b4f76402 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj @@ -1,5 +1,6 @@ - + + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj index 04cbe3d9c1..54db88b84e 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj @@ -1,5 +1,6 @@ - + + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj index 6afc84fe77..a042aac112 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj @@ -1,5 +1,6 @@ - + + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj index 26ff6449ea..0b662331e2 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj @@ -1,5 +1,6 @@ - + + @@ -12,4 +13,4 @@ - \ No newline at end of file + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj index 6060761768..0b904baa37 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj @@ -1,5 +1,6 @@ - + + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj index de13c7ca19..04eaa733d4 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj @@ -1,5 +1,6 @@ - + + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj index ba4e986b5c..0196e1c796 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj @@ -1,5 +1,6 @@ - + + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MyCompanyName.MyProjectName.MongoDB.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MyCompanyName.MyProjectName.MongoDB.csproj index 05e4a798d6..8f6910e178 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MyCompanyName.MyProjectName.MongoDB.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MyCompanyName.MyProjectName.MongoDB.csproj @@ -1,5 +1,6 @@ - + + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj index bb17b03a01..3de9aff2cb 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj @@ -1,5 +1,6 @@ - + + diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xsd b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyCompanyName.MyProjectName.Application.Tests.csproj b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyCompanyName.MyProjectName.Application.Tests.csproj index 3aab1f8ff9..c7d1057588 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyCompanyName.MyProjectName.Application.Tests.csproj +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyCompanyName.MyProjectName.Application.Tests.csproj @@ -1,5 +1,6 @@ - + + diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xsd b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 fec1bbe88b..b8f4564c20 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 @@ -1,5 +1,6 @@ - + + diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xsd b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 e45d914ca5..41e5524b1c 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 @@ -1,5 +1,6 @@ - + + diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj index 98be0699f3..ee215ca3c1 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj @@ -1,4 +1,6 @@ - + + + Exe diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xsd b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 6ad7da064f..c46022a164 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 @@ -1,5 +1,6 @@ - + + diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xsd b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file 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 0345987266..62c4556427 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 @@ -1,5 +1,6 @@ - + + From 174e25b0bee9e12858f5289092fbd58087a7b98d Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 15 Jan 2020 17:22:55 +0800 Subject: [PATCH 202/411] Remove ConfigureAwait of async method. --- .../AbpIoLocalization/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../AspNetCore/Builder/JwtTokenMiddleware.cs | 4 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../MultiTenancy/MultiTenancyMiddleware.cs | 8 +- .../FodyWeavers.xml | 2 +- .../CachedApplicationConfigurationClient.cs | 4 +- .../Mvc/Client/RemoteFeatureChecker.cs | 2 +- .../Mvc/Client/RemoteLanguageProvider.cs | 2 +- .../Mvc/Client/RemotePermissionChecker.cs | 4 +- .../Mvc/Client/RemoteSettingProvider.cs | 4 +- .../Mvc/Client/RemoteTenantStore.cs | 12 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../AbpBreadcrumbTagHelperService.cs | 2 +- .../Carousel/AbpCarouselTagHelperService.cs | 2 +- .../AbpAccordionItemTagHelperService.cs | 2 +- .../Collapse/AbpAccordionTagHelperService.cs | 2 +- .../AbpCollapseBodyTagHelperService.cs | 2 +- .../AbpDropdownButtonTagHelperService.cs | 12 +- .../Extensions/TagHelperExtensions.cs | 4 +- .../Form/AbpDynamicformTagHelperService.cs | 20 +- .../Form/AbpInputTagHelperService.cs | 16 +- .../Form/AbpSelectTagHelperService.cs | 16 +- .../AbpPaginationTagHelperService.cs | 18 +- .../Tab/AbpTabDropdownTagHelperService.cs | 2 +- .../TagHelpers/Tab/AbpTabTagHelperService.cs | 2 +- .../TagHelpers/Tab/AbpTabsTagHelperService.cs | 2 +- .../FodyWeavers.xml | 2 +- .../Mvc/UI/Bundling/BundleManager.cs | 12 +- .../AbpBundleItemTagHelperService.cs | 2 +- .../TagHelpers/AbpBundleTagHelperService.cs | 6 +- .../TagHelpers/AbpTagHelperResourceService.cs | 2 +- .../TagHelpers/AbpTagHelperScriptService.cs | 2 +- .../TagHelpers/AbpTagHelperStyleService.cs | 2 +- .../FodyWeavers.xml | 2 +- .../Abp/MultiTenancy/AbpTenantAppService.cs | 4 +- .../Abp/MultiTenancy/AbpTenantController.cs | 4 +- .../MultiTenancy/TenantSwitchModal.cshtml.cs | 4 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Menu/MainNavbarMenuViewComponent.cs | 2 +- .../LanguageSwitchViewComponent.cs | 2 +- .../Toolbar/MainNavbarToolsViewComponent.cs | 2 +- .../Toolbar/UserMenu/UserMenuViewComponent.cs | 2 +- .../BasicThemeMainTopToolbarContributor.cs | 2 +- .../FodyWeavers.xml | 2 +- .../Toolbars/ToolbarManager.cs | 2 +- .../FodyWeavers.xml | 2 +- .../Mvc/UI/Widgets/AbpViewComponentHelper.cs | 10 +- .../Mvc/UI/Widgets/WidgetManager.cs | 6 +- .../FodyWeavers.xml | 2 +- .../Volo.Abp.AspNetCore.Mvc/FodyWeavers.xml | 2 +- .../AbpApplicationConfigurationAppService.cs | 16 +- .../AbpApplicationConfigurationController.cs | 2 +- ...pplicationConfigurationScriptController.cs | 2 +- .../Mvc/Auditing/AbpAuditActionFilter.cs | 4 +- .../ChallengeAccountController.cs | 2 +- .../Mvc/Features/AbpFeatureActionFilter.cs | 6 +- .../ModelBinding/AbpDateTimeModelBinder.cs | 2 +- .../AspNetCore/Mvc/Uow/AbpUowActionFilter.cs | 14 +- .../Validation/AbpValidationActionFilter.cs | 4 +- .../FodyWeavers.xml | 2 +- .../Serilog/AbpSerilogMiddleware.cs | 2 +- .../FodyWeavers.xml | 2 +- .../src/Volo.Abp.AspNetCore/FodyWeavers.xml | 2 +- .../AbpRequestLocalizationMiddleware.cs | 4 +- ...ltAbpRequestLocalizationOptionsProvider.cs | 6 +- .../Auditing/AbpAuditingMiddleware.cs | 6 +- .../AbpExceptionHandlingMiddleware.cs | 6 +- .../Tracing/AbpCorrelationIdMiddleware.cs | 2 +- .../AspNetCore/Uow/AbpUnitOfWorkMiddleware.cs | 4 +- .../src/Volo.Abp.Auditing/FodyWeavers.xml | 2 +- .../Volo/Abp/Auditing/AuditingInterceptor.cs | 4 +- .../Volo/Abp/Auditing/AuditingManager.cs | 4 +- .../Volo.Abp.Authorization/FodyWeavers.xml | 2 +- .../AbpAuthorizationServiceExtensions.cs | 38 +-- .../AbpAuthorizationPolicyProvider.cs | 2 +- .../Authorization/AuthorizationInterceptor.cs | 6 +- .../MethodInvocationAuthorizationService.cs | 4 +- .../PermissionRequirementHandler.cs | 2 +- .../ClientPermissionValueProvider.cs | 4 +- .../Permissions/PermissionChecker.cs | 4 +- .../RolePermissionValueProvider.cs | 2 +- .../UserPermissionValueProvider.cs | 2 +- .../src/Volo.Abp.AutoMapper/FodyWeavers.xml | 2 +- .../src/Volo.Abp.Autofac/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../BackgroundJobs/BackgroundJobExecuter.cs | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Abp/BackgroundJobs/RabbitMQ/JobQueue.cs | 10 +- .../RabbitMQ/JobQueueManager.cs | 8 +- .../RabbitMQ/RabbitMqBackgroundJobManager.cs | 4 +- .../Volo.Abp.BackgroundJobs/FodyWeavers.xml | 2 +- .../Abp/BackgroundJobs/BackgroundJobWorker.cs | 12 +- .../DefaultBackgroundJobManager.cs | 4 +- .../FodyWeavers.xml | 2 +- .../AsyncPeriodicBackgroundWorkerBase.cs | 4 +- .../BackgroundWorkerManager.cs | 4 +- .../PeriodicBackgroundWorkerBase.cs | 4 +- .../src/Volo.Abp.Caching/FodyWeavers.xml | 2 +- .../Volo/Abp/Caching/DistributedCache.cs | 70 ++--- .../src/Volo.Abp.Castle.Core/FodyWeavers.xml | 2 +- .../CastleAbpMethodInvocationAdapter.cs | 2 +- .../CastleAsyncAbpInterceptorAdapter.cs | 4 +- .../src/Volo.Abp.Cli.Core/FodyWeavers.xml | 2 +- .../Volo/Abp/Cli/Auth/AuthService.cs | 2 +- .../Volo/Abp/Cli/CliService.cs | 16 +- .../Volo/Abp/Cli/Commands/AddModuleCommand.cs | 2 +- .../Abp/Cli/Commands/AddPackageCommand.cs | 2 +- .../Volo/Abp/Cli/Commands/GetSourceCommand.cs | 2 +- .../Volo/Abp/Cli/Commands/LoginCommand.cs | 2 +- .../Volo/Abp/Cli/Commands/NewCommand.cs | 2 +- .../Volo/Abp/Cli/Commands/SuiteCommand.cs | 10 +- .../Volo/Abp/Cli/Commands/UpdateCommand.cs | 6 +- .../Abp/Cli/Licensing/AbpIoApiKeyService.cs | 6 +- .../Volo/Abp/Cli/NuGet/NuGetService.cs | 10 +- .../ProjectBuilding/AbpIoSourceCodeStore.cs | 16 +- .../Analyticses/CliAnalyticsCollect.cs | 4 +- .../Cli/ProjectBuilding/ModuleInfoProvider.cs | 8 +- .../ProjectBuilding/ModuleProjectBuilder.cs | 10 +- .../RemoteServiceExceptionHandler.cs | 4 +- .../ProjectBuilding/TemplateProjectBuilder.cs | 6 +- .../ProjectNugetPackageAdder.cs | 8 +- .../SolutionModuleAdder.cs | 12 +- .../VoloNugetPackagesVersionUpdater.cs | 8 +- framework/src/Volo.Abp.Cli/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Core/FodyWeavers.xml | 2 +- .../System/IO/AbpStreamExtensions.cs | 2 +- .../Volo.Abp.Core/Volo/Abp/IO/FileHelper.cs | 4 +- .../Volo/Abp/Threading/AsyncOneTimeRunner.cs | 4 +- .../Volo/Abp/Threading/InternalAsyncHelper.cs | 40 +-- framework/src/Volo.Abp.Dapper/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Data/FodyWeavers.xml | 2 +- .../Volo.Abp.Data/Volo/Abp/Data/DataSeeder.cs | 2 +- .../FodyWeavers.xml | 2 +- .../Volo.Abp.Ddd.Application/FodyWeavers.xml | 2 +- .../Services/ApplicationService.cs | 2 +- .../Application/Services/CrudAppService.cs | 34 +-- .../src/Volo.Abp.Ddd.Domain/FodyWeavers.xml | 2 +- .../Events/EntityChangeEventHelper.cs | 46 +-- .../Repositories/BasicRepositoryBase.cs | 6 +- .../Abp/Domain/Repositories/RepositoryBase.cs | 4 +- .../Repositories/RepositoryExtensions.cs | 4 +- .../src/Volo.Abp.Emailing/FodyWeavers.xml | 2 +- .../Volo/Abp/Emailing/EmailSenderBase.cs | 16 +- .../Abp/Emailing/EmailSenderConfiguration.cs | 2 +- .../Volo/Abp/Emailing/Smtp/SmtpEmailSender.cs | 18 +- .../Templates/EmailTemplateProvider.cs | 10 +- .../Abp/Emailing/Templates/TemplateRender.cs | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../EntityFrameworkCore/EfCoreRepository.cs | 26 +- .../Abp/EntityFrameworkCore/AbpDbContext.cs | 4 +- .../FodyWeavers.xml | 2 +- .../RabbitMq/RabbitMqDistributedEventBus.cs | 2 +- .../src/Volo.Abp.EventBus/FodyWeavers.xml | 2 +- .../Volo/Abp/EventBus/ActionEventHandler.cs | 2 +- .../Volo/Abp/EventBus/EventBusBase.cs | 10 +- .../Volo/Abp/EventBus/Local/LocalEventBus.cs | 2 +- .../src/Volo.Abp.Features/FodyWeavers.xml | 2 +- .../Features/EditionFeatureValueProvider.cs | 2 +- .../Volo/Abp/Features/FeatureChecker.cs | 4 +- .../Volo/Abp/Features/FeatureCheckerBase.cs | 2 +- .../Abp/Features/FeatureCheckerExtensions.cs | 12 +- .../Volo/Abp/Features/FeatureInterceptor.cs | 8 +- .../MethodInvocationFeatureCheckerService.cs | 2 +- .../Features/TenantFeatureValueProvider.cs | 2 +- .../Volo.Abp.FluentValidation/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Guids/FodyWeavers.xml | 2 +- .../src/Volo.Abp.HangFire/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- ...delRemoteServiceHttpClientAuthenticator.cs | 6 +- .../src/Volo.Abp.Http.Client/FodyWeavers.xml | 2 +- .../DynamicProxying/ApiDescriptionCache.cs | 4 +- .../DynamicProxying/ApiDescriptionFinder.cs | 8 +- .../DynamicHttpProxyInterceptor.cs | 20 +- framework/src/Volo.Abp.Http/FodyWeavers.xml | 2 +- .../Volo.Abp.IdentityModel/FodyWeavers.xml | 2 +- .../IdentityModelAuthenticationService.cs | 18 +- framework/src/Volo.Abp.Json/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Ldap/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../src/Volo.Abp.Localization/FodyWeavers.xml | 2 +- .../src/Volo.Abp.MailKit/FodyWeavers.xml | 2 +- .../Abp/MailKit/MailKitSmtpEmailSender.cs | 22 +- .../src/Volo.Abp.MemoryDb/FodyWeavers.xml | 2 +- .../MemoryDb/MemoryDbRepository.cs | 6 +- framework/src/Volo.Abp.Minify/FodyWeavers.xml | 2 +- .../src/Volo.Abp.MongoDB/FodyWeavers.xml | 2 +- .../Repositories/MongoDB/MongoDbRepository.cs | 54 ++-- .../src/Volo.Abp.MultiTenancy/FodyWeavers.xml | 2 +- .../Volo.Abp.ObjectMapping/FodyWeavers.xml | 2 +- .../src/Volo.Abp.RabbitMQ/FodyWeavers.xml | 2 +- .../Abp/RabbitMQ/RabbitMqMessageConsumer.cs | 8 +- .../src/Volo.Abp.Security/FodyWeavers.xml | 2 +- .../Volo.Abp.Serialization/FodyWeavers.xml | 2 +- .../src/Volo.Abp.Settings/FodyWeavers.xml | 2 +- .../Volo/Abp/Settings/SettingProvider.cs | 6 +- .../Abp/Settings/SettingProviderExtensions.cs | 4 +- .../Settings/TenantSettingValueProvider.cs | 2 +- .../Abp/Settings/UserSettingValueProvider.cs | 2 +- framework/src/Volo.Abp.Sms/FodyWeavers.xml | 2 +- .../Volo.Abp.Specifications/FodyWeavers.xml | 2 +- .../src/Volo.Abp.TestBase/FodyWeavers.xml | 2 +- .../src/Volo.Abp.Threading/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Timing/FodyWeavers.xml | 2 +- .../Volo.Abp.UI.Navigation/FodyWeavers.xml | 2 +- .../Volo/Abp/Ui/Navigation/MenuManager.cs | 2 +- .../Abp/Ui/Navigation/Urls/AppUrlProvider.cs | 6 +- framework/src/Volo.Abp.UI/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Uow/FodyWeavers.xml | 2 +- .../Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs | 18 +- .../Volo/Abp/Uow/UnitOfWorkInterceptor.cs | 6 +- .../src/Volo.Abp.Validation/FodyWeavers.xml | 2 +- .../Abp/Validation/ValidationInterceptor.cs | 2 +- .../FodyWeavers.xml | 2 +- .../FileProviders/AbpFileInfoExtensions.cs | 2 +- framework/src/Volo.Abp/FodyWeavers.xml | 2 +- framework/test/AbpTestBase/FodyWeavers.xml | 2 +- .../test/SimpleConsoleDemo/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Volo/Abp/AspNetCore/App/AppModule.cs | 2 +- ...reMultiTenancy_WithDomainResolver_Tests.cs | 6 +- ...ltiTenancy_Without_DomainResolver_Tests.cs | 8 +- .../FodyWeavers.xml | 2 +- .../AbpApiDefinitionController_Tests.cs | 2 +- .../ApplicationConfigurationBuilder_Tests.cs | 2 +- .../Authorization/AuthTestController_Tests.cs | 10 +- .../FakeAuthenticationMiddleware.cs | 2 +- .../ExceptionTestController_Tests.cs | 4 +- .../Features/FeatureTestController_Tests.cs | 6 +- .../Mvc/Json/JsonResultController_Tests.cs | 2 +- .../Mvc/Localization/MvcLocalization_Tests.cs | 6 +- .../ModelBindingController_Tests.cs | 20 +- .../AspNetCore/Mvc/PeopleAppService_Tests.cs | 30 +- .../AbpServiceProxiesController_Tests.cs | 6 +- .../Response/NoContentTestController_Tests.cs | 12 +- .../AspNetCore/Mvc/SimpleController_Tests.cs | 8 +- ...WorkMiddleware_Exception_Rollback_Tests.cs | 6 +- .../Mvc/Uow/UnitOfWorkMiddleware_Tests.cs | 4 +- .../ValidationTestController_Tests.cs | 12 +- .../FodyWeavers.xml | 2 +- .../Bootstrap/Demo/Components/Card_Tests.cs | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Versioning/Test/HelloController_Tests.cs | 6 +- .../Test/v1/TodoAppService_Tests.cs | 2 +- .../Test/v2/TodoAppService_Tests.cs | 2 +- .../FodyWeavers.xml | 2 +- .../Serilog/Serilog_Enrichers_Tests.cs | 6 +- .../Volo.Abp.AspNetCore.Tests/FodyWeavers.xml | 2 +- .../Abp/AspNetCore/AbpAspNetCoreTestBase.cs | 8 +- .../VirtualFileSystem_Tests.cs | 2 +- .../Volo.Abp.Auditing.Tests/FodyWeavers.xml | 2 +- .../Abp/Auditing/AuditingInterceptor_Tests.cs | 4 +- .../FodyWeavers.xml | 2 +- .../Abp/Authorization/Authorization_Tests.cs | 12 +- .../TestServices/MyAuthorizedService1.cs | 4 +- .../Volo.Abp.AutoMapper.Tests/FodyWeavers.xml | 2 +- .../Volo.Abp.Autofac.Tests/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../BackgroundJobManager_Tests.cs | 8 +- .../Volo.Abp.Caching.Tests/FodyWeavers.xml | 2 +- .../DistributedCache_ConfigureOptions_Test.cs | 2 +- .../Abp/Caching/DistributedCache_Tests.cs | 92 +++--- .../FodyWeavers.xml | 2 +- .../Volo.Abp.Cli.Core.Tests/FodyWeavers.xml | 2 +- .../test/Volo.Abp.Core.Tests/FodyWeavers.xml | 2 +- .../DynamicProxy/AbpInterceptionTestBase.cs | 18 +- .../Volo/Abp/DynamicProxy/CachedTestObject.cs | 4 +- .../DynamicProxy/SimpleAsyncInterceptor.cs | 8 +- .../SimpleInterceptionTargetClass.cs | 8 +- .../SimpleResultCacheTestInterceptor.cs | 6 +- .../Volo/Abp/Threading/AsyncHelper_Tests.cs | 4 +- .../Volo.Abp.Dapper.Tests/FodyWeavers.xml | 2 +- .../Repositories/PersonDapperRepository.cs | 4 +- .../PersonDapperRepository_Tests.cs | 12 +- .../test/Volo.Abp.Data.Tests/FodyWeavers.xml | 2 +- .../test/Volo.Abp.Ddd.Tests/FodyWeavers.xml | 2 +- .../Volo.Abp.Emailing.Tests/FodyWeavers.xml | 2 +- .../Abp/Emailing/EmailTemplateRender_Tests.cs | 2 +- .../Abp/Emailing/EmailTemplateStore_Tests.cs | 8 +- .../FodyWeavers.xml | 2 +- .../SecondContextTestDataBuilder.cs | 4 +- .../FodyWeavers.xml | 2 +- .../DbContext_Replace_Tests.cs | 2 +- .../Repository_Queryable_Tests.cs | 6 +- .../Transactions/Transaction_Tests.cs | 24 +- .../EntityFrameworkCore/CityRepository.cs | 6 +- .../EntityFrameworkCore/PersonRepository.cs | 2 +- .../Volo.Abp.EventBus.Tests/FodyWeavers.xml | 2 +- .../LocalDistributedEventBus_Test.cs | 6 +- .../Local/ActionBasedEventHandlerTest.cs | 44 +-- .../Local/EventBus_DI_Services_Test.cs | 8 +- .../EventBus/Local/EventBus_Exception_Test.cs | 8 +- .../Local/EventBus_MultipleHandle_Test.cs | 2 +- .../EventBus/Local/GenericInheritanceTest.cs | 4 +- .../Abp/EventBus/Local/InheritanceTest.cs | 16 +- .../TransientDisposableEventHandlerTest.cs | 6 +- .../Volo.Abp.Features.Tests/FodyWeavers.xml | 2 +- .../Volo/Abp/Features/FeatureChecker_Tests.cs | 12 +- .../Abp/Features/FeatureInterceptor_Tests.cs | 20 +- .../FodyWeavers.xml | 2 +- ...plicationService_FluentValidation_Tests.cs | 8 +- .../FodyWeavers.xml | 2 +- .../PersonAppServiceClientProxy_Tests.cs | 20 +- .../RegularTestControllerClientProxy_Tests.cs | 28 +- .../test/Volo.Abp.Ldap.Tests/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Volo.Abp.MailKit.Tests/FodyWeavers.xml | 2 +- .../MailKit/MailKitSmtpEmailSender_Tests.cs | 4 +- .../Volo.Abp.MemoryDb.Tests/FodyWeavers.xml | 2 +- .../Abp/TestApp/MemoryDb/CityRepository.cs | 2 +- .../Volo.Abp.Minify.Tests/FodyWeavers.xml | 2 +- .../Volo.Abp.MongoDB.Tests/FodyWeavers.xml | 2 +- .../Repositories/Repository_Basic_Tests.cs | 12 +- .../Abp/TestApp/MongoDb/CityRepository.cs | 6 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Volo.Abp.Security.Tests/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Volo.Abp.Settings.Tests/FodyWeavers.xml | 2 +- .../Abp/Settings/SettingProvider_Tests.cs | 4 +- .../FodyWeavers.xml | 2 +- .../Volo.Abp.TestApp.Tests/FodyWeavers.xml | 2 +- .../Application/PersonAppService_Tests.cs | 12 +- .../test/Volo.Abp.TestApp/FodyWeavers.xml | 2 +- .../TestApp/Application/PeopleAppService.cs | 10 +- .../Volo/Abp/TestApp/TestDataBuilder.cs | 40 +-- .../AbpDateTimeValueConverter_Tests.cs | 8 +- .../Abp/TestApp/Testing/Auditing_Tests.cs | 18 +- .../TestApp/Testing/ConcurrencyStamp_Tests.cs | 20 +- .../Abp/TestApp/Testing/DomainEvents_Tests.cs | 4 +- .../Testing/EntityChangeEvents_Tests.cs | 4 +- .../TestApp/Testing/ExtraProperties_Tests.cs | 14 +- .../Testing/MultiTenant_Creation_Tests.cs | 8 +- .../Testing/MultiTenant_Filter_Tests.cs | 4 +- .../TestApp/Testing/Repository_Basic_Tests.cs | 16 +- .../Repository_Basic_Tests_With_Int_Pk.cs | 6 +- .../Testing/Repository_Queryable_Tests.cs | 8 +- .../Repository_Specifications_Tests.cs | 2 +- .../Testing/SoftDelete_Filter_Tests.cs | 10 +- .../Abp/TestApp/Testing/SoftDelete_Tests.cs | 16 +- .../Abp/TestApp/Testing/TestAppTestBase.cs | 8 +- .../TestApp/Testing/Uow_Completed_Tests.cs | 6 +- .../FodyWeavers.xml | 2 +- .../Abp/Ui/Navigation/MenuManager_Tests.cs | 2 +- .../test/Volo.Abp.Uow.Tests/FodyWeavers.xml | 2 +- .../Abp/Uow/UnitOfWork_Ambient_Scope_Tests.cs | 8 +- .../Volo/Abp/Uow/UnitOfWork_Events_Tests.cs | 10 +- .../Volo/Abp/Uow/UnitOfWork_Nested_Tests.cs | 4 +- .../Volo.Abp.Validation.Tests/FodyWeavers.xml | 2 +- .../ApplicationService_Validation_Tests.cs | 38 +-- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Volo/Abp/Account/AccountAppService.cs | 6 +- .../FodyWeavers.xml | 2 +- .../Volo.Abp.Account.HttpApi/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../IdentityServerSupportedLoginModel.cs | 34 +-- .../Pages/Consent.cshtml.cs | 12 +- .../Account/Controllers/AccountController.cs | 14 +- .../Account/Controllers/LogoutController.cs | 2 +- .../src/Volo.Abp.Account.Web/FodyWeavers.xml | 2 +- .../Pages/Account/Login.cshtml.cs | 34 +-- .../Pages/Account/Manage.cshtml.cs | 2 +- .../Pages/Account/Register.cshtml.cs | 16 +- .../Pages/Account/SendSecurityCode.cshtml.cs | 2 +- .../FodyWeavers.xml | 2 +- .../Abp/Account/AccountAppService_Tests.cs | 6 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Volo/Abp/AuditLogging/AuditingStore.cs | 8 +- .../FodyWeavers.xml | 2 +- .../EfCoreAuditLogRepository.cs | 6 +- .../FodyWeavers.xml | 2 +- .../MongoDB/MongoAuditLogRepository.cs | 6 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../AuditLogging/AuditLogRepository_Tests.cs | 18 +- .../AuditLogging/AuditStore_Basic_Tests.cs | 12 +- .../FodyWeavers.xml | 2 +- .../AuditLogging/MultiTenantAuditLog_Tests.cs | 4 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Jobs/SampleJobCreator.cs | 8 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Abp/BackgroundJobs/BackgroundJobStore.cs | 12 +- .../FodyWeavers.xml | 2 +- .../EfCoreBackgroundJobRepository.cs | 2 +- .../FodyWeavers.xml | 2 +- .../MongoDB/MongoBackgroundJobRepository.cs | 2 +- .../FodyWeavers.xml | 2 +- .../BackgroundJobStore_Tests.cs | 4 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../BackgroundJobRepository_Tests.cs | 2 +- .../BackgroundJobsTestDataBuilder.cs | 6 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../app/Volo.BloggingTestApp/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Volo.Blogging.Application/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../src/Volo.Blogging.Domain/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../src/Volo.Blogging.HttpApi/FodyWeavers.xml | 2 +- .../src/Volo.Blogging.MongoDB/FodyWeavers.xml | 2 +- .../src/Volo.Blogging.Web/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Volo.Blogging.TestBase/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Volo.ClientSimulation.Web/FodyWeavers.xml | 2 +- .../src/Volo.ClientSimulation/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../app/VoloDocs.Migrator/FodyWeavers.xml | 2 +- modules/docs/app/VoloDocs.Web/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Volo.Docs.Admin.HttpApi/FodyWeavers.xml | 2 +- .../src/Volo.Docs.Admin.Web/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../src/Volo.Docs.Application/FodyWeavers.xml | 2 +- .../Volo.Docs.Domain.Shared/FodyWeavers.xml | 2 +- .../docs/src/Volo.Docs.Domain/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Volo.Docs.HttpApi.Client/FodyWeavers.xml | 2 +- .../src/Volo.Docs.HttpApi/FodyWeavers.xml | 2 +- .../src/Volo.Docs.MongoDB/FodyWeavers.xml | 2 +- .../docs/src/Volo.Docs.Web/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Volo.Docs.Domain.Tests/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Volo.Docs.MongoDB.Tests/FodyWeavers.xml | 2 +- .../test/Volo.Docs.TestBase/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FeatureManagement/FeatureAppService.cs | 10 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FeatureManagementProvider.cs | 6 +- .../FeatureManagementStore.cs | 18 +- .../Abp/FeatureManagement/FeatureManager.cs | 10 +- .../FeatureValueCacheItemInvalidator.cs | 2 +- .../FodyWeavers.xml | 2 +- .../EfCoreFeatureValueRepository.cs | 4 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../MongoDB/MongoFeatureValueRepository.cs | 4 +- .../FodyWeavers.xml | 2 +- .../FeatureManagementModal.cshtml.cs | 4 +- .../FodyWeavers.xml | 2 +- .../FeatureAppService_Tests.cs | 6 +- .../FodyWeavers.xml | 2 +- .../FeatureManagement/FeatureManager_Tests.cs | 24 +- .../FeatureValueCacheItemInvalidator_Tests.cs | 8 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FeatureManagementStore_Tests.cs | 22 +- .../FeatureManagementTestDataBuilder.cs | 28 +- .../FeatureValueRepository_Tests.cs | 6 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Abp/Identity/IdentityRoleAppService.cs | 22 +- .../Abp/Identity/IdentityUserAppService.cs | 52 ++-- .../Identity/IdentityUserLookupAppService.cs | 4 +- .../Volo/Abp/Identity/ProfileAppService.cs | 22 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Volo.Abp.Identity.Domain/FodyWeavers.xml | 2 +- .../Abp/Identity/AbpIdentityOptionsFactory.cs | 22 +- .../Identity/AbpUserClaimsPrincipalFactory.cs | 2 +- .../Abp/Identity/IdentityClaimTypeManager.cs | 8 +- .../Volo/Abp/Identity/IdentityDataSeeder.cs | 10 +- .../Volo/Abp/Identity/IdentityRoleManager.cs | 6 +- .../Volo/Abp/Identity/IdentityRoleStore.cs | 12 +- .../Volo/Abp/Identity/IdentityUserManager.cs | 8 +- ...sitoryExternalUserLookupServiceProvider.cs | 4 +- .../Volo/Abp/Identity/IdentityUserStore.cs | 44 +-- .../Volo/Abp/Identity/UserRoleFinder.cs | 2 +- .../FodyWeavers.xml | 2 +- .../EfCoreIdentityClaimTypeRepository.cs | 4 +- .../EfCoreIdentityRoleRepository.cs | 4 +- .../EfCoreIdentityUserRepository.cs | 20 +- .../FodyWeavers.xml | 2 +- .../Abp/Identity/HttpClientUserRoleFinder.cs | 2 +- .../Volo.Abp.Identity.HttpApi/FodyWeavers.xml | 2 +- .../Volo.Abp.Identity.MongoDB/FodyWeavers.xml | 2 +- .../MongoIdentityClaimTypeRepository.cs | 6 +- .../MongoDB/MongoIdentityRoleRepository.cs | 4 +- .../MongoDB/MongoIdentityUserRepository.cs | 24 +- .../src/Volo.Abp.Identity.Web/FodyWeavers.xml | 2 +- .../AbpIdentityWebMainMenuContributor.cs | 4 +- .../Identity/Roles/CreateModal.cshtml.cs | 2 +- .../Pages/Identity/Roles/EditModal.cshtml.cs | 4 +- .../Identity/Users/CreateModal.cshtml.cs | 4 +- .../Pages/Identity/Users/EditModal.cshtml.cs | 8 +- .../FodyWeavers.xml | 2 +- .../RolePermissionManagementProvider.cs | 4 +- .../Identity/RoleUpdateEventHandler.cs | 6 +- .../FodyWeavers.xml | 2 +- .../Identity/IdentityRoleAppService_Tests.cs | 22 +- .../Identity/IdentityUserAppService_Tests.cs | 28 +- .../IdentityUserLookupAppService_Tests.cs | 12 +- .../Abp/Identity/ProfileAppService_Tests.cs | 4 +- .../FodyWeavers.xml | 2 +- .../Distributed_User_Change_Event_Tests.cs | 6 +- .../IdentityClaimTypeManager_Tests.cs | 14 +- .../Abp/Identity/IdentityRoleManager_Tests.cs | 12 +- .../Abp/Identity/IdentityRoleStore_Tests.cs | 56 ++-- .../Abp/Identity/IdentityUserManager_Tests.cs | 16 +- .../Abp/Identity/IdentityUserStore_Tests.cs | 276 +++++++++--------- .../Abp/Identity/PermissionManager_Tests.cs | 28 +- .../Abp/Identity/RoleChangingEvents_Test.cs | 14 +- .../Abp/Identity/TestPermissionDataBuilder.cs | 20 +- .../Volo/Abp/Identity/UserRoleFinder_Tests.cs | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Abp/Identity/AbpIdentityTestBaseModule.cs | 4 +- .../Identity/AbpIdentityTestDataBuilder.cs | 24 +- .../IdentityClaimTypeRepository_Tests.cs | 4 +- .../Abp/Identity/IdentityDataSeeder_Tests.cs | 8 +- .../Identity/IdentityRoleRepository_Tests.cs | 10 +- .../Identity/IdentityUserRepository_Tests.cs | 42 +-- .../Volo/Abp/Identity/LazyLoading_Tests.cs | 8 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../IdentityServer/AbpCorsPolicyService.cs | 4 +- .../AllowedCorsOriginsCacheItemInvalidator.cs | 4 +- .../AspNetIdentity/AbpProfileService.cs | 4 +- .../AbpResourceOwnerPasswordValidator.cs | 24 +- .../Abp/IdentityServer/Clients/ClientStore.cs | 2 +- .../IdentityServer/Devices/DeviceFlowStore.cs | 14 +- .../Grants/PersistedGrantStore.cs | 18 +- .../IdentityResourceDataSeeder.cs | 12 +- .../IdentityServer/Jwt/JwtTokenMiddleware.cs | 4 +- .../Volo/Abp/IdentityServer/ResourceStore.cs | 10 +- .../Tokens/TokenCleanupBackgroundWorker.cs | 2 +- .../Tokens/TokenCleanupService.cs | 17 +- .../FodyWeavers.xml | 2 +- .../ApiResources/ApiResourceRepository.cs | 12 +- .../Clients/ClientRepository.cs | 8 +- .../Devices/DeviceFlowCodesRepository.cs | 8 +- .../Grants/PersistedGrantRepository.cs | 12 +- .../IdentityResourceRepository.cs | 8 +- .../FodyWeavers.xml | 2 +- .../MongoDB/MongoApiResourceRepository.cs | 10 +- .../MongoDB/MongoClientRepository.cs | 10 +- .../MongoDB/MongoDeviceFlowCodesRepository.cs | 8 +- .../MongoIdentityResourceRepository.cs | 10 +- .../MongoDB/MongoPersistedGrantRepository.cs | 11 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Clients/ClientStore_Tests.cs | 4 +- .../Clients/IdentityResourceStore_Tests.cs | 10 +- .../Clients/PersistentGrant_Tests.cs | 26 +- .../IdentityServer/CorsPolicyService_Tests.cs | 14 +- .../FodyWeavers.xml | 2 +- .../AbpIdentityServerTestDataBuilder.cs | 22 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../AbpIdentityServerTestDataBuilder.cs | 40 +-- .../ApiResourceRepository_Tests.cs | 4 +- .../IdentityServer/ClientRepository_Tests.cs | 4 +- .../IdentityResourceRepository_Tests.cs | 2 +- .../PersistentGrantRepository_Tests.cs | 12 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../PermissionAppService.cs | 10 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../PermissionDataSeeder.cs | 2 +- .../PermissionGrantCacheItemInvalidator.cs | 2 +- .../PermissionManagementProvider.cs | 8 +- .../PermissionManagement/PermissionManager.cs | 12 +- .../PermissionManagement/PermissionStore.cs | 6 +- .../FodyWeavers.xml | 2 +- .../EfCorePermissionGrantRepository.cs | 4 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../MongoDb/MongoPermissionGrantRepository.cs | 4 +- .../FodyWeavers.xml | 2 +- .../PermissionManagementModal.cshtml.cs | 4 +- .../FodyWeavers.xml | 2 +- .../PermissionAppService_Tests.cs | 18 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../PermissionGrantRepository_Tests.cs | 8 +- .../PermissionTestDataBuilder.cs | 4 +- .../FodyWeavers.xml | 2 +- .../PermissionChecker_Basic_Tests.cs | 4 +- .../PermissionChecker_User_Tests.cs | 8 +- .../PermissionDataSeeder_Tests.cs | 10 +- ...rmissionGrantCacheItemInvalidator_Tests.cs | 14 +- .../PermissionManagementProvider_Tests.cs | 14 +- .../PermissionManager_Tests.cs | 28 +- .../PermissionStore_Tests.cs | 4 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../SettingCacheItemInvalidator.cs | 2 +- .../SettingManagementProvider.cs | 6 +- .../SettingManagementStore.cs | 20 +- .../Abp/SettingManagement/SettingManager.cs | 12 +- .../FodyWeavers.xml | 2 +- .../EfCoreSettingRepository.cs | 4 +- .../FodyWeavers.xml | 2 +- .../MongoDB/MongoSettingRepository.cs | 4 +- .../FodyWeavers.xml | 2 +- .../SettingManagementMainMenuContributor.cs | 4 +- .../Pages/SettingManagement/Index.cshtml.cs | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../SettingRepository_Tests.cs | 8 +- .../SettingTestDataBuilder.cs | 12 +- .../FodyWeavers.xml | 2 +- ...ultValueSettingManagementProvider_Tests.cs | 6 +- .../SettingCacheItemInvalidator_Tests.cs | 21 +- .../SettingManagementStore_Tests.cs | 16 +- .../SettingManager_Basic_Tests.cs | 14 +- .../SettingManager_User_Tests.cs | 48 +-- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Abp/TenantManagement/TenantAppService.cs | 32 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Abp/TenantManagement/TenantManager.cs | 6 +- .../Volo/Abp/TenantManagement/TenantStore.cs | 4 +- .../FodyWeavers.xml | 2 +- .../EfCoreTenantRepository.cs | 4 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../MongoDb/MongoTenantRepository.cs | 4 +- .../FodyWeavers.xml | 2 +- ...pTenantManagementWebMainMenuContributor.cs | 2 +- .../Tenants/ConnectionStringsModal.cshtml.cs | 6 +- .../Tenants/CreateModal.cshtml.cs | 2 +- .../Tenants/EditModal.cshtml.cs | 4 +- .../FodyWeavers.xml | 2 +- .../TenantAppService_Tests.cs | 22 +- .../FodyWeavers.xml | 2 +- .../TenantManagement/TenantManager_Tests.cs | 12 +- .../Abp/TenantManagement/TenantStore_Tests.cs | 6 +- .../Volo/Abp/TenantManagement/Tenant_Tests.cs | 4 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../AbpTenantManagementTestDataBuilder.cs | 8 +- .../Abp/TenantManagement/LazyLoad_Tests.cs | 4 +- .../TenantRepository_Tests.cs | 18 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../src/Volo.Abp.Users.Domain/FodyWeavers.xml | 2 +- .../Volo/Abp/Users/UserLookupService.cs | 32 +- .../Abp/Users/UserLookupServiceExtensions.cs | 4 +- .../FodyWeavers.xml | 2 +- .../EfCoreAbpUserRepositoryBase.cs | 4 +- .../Volo.Abp.Users.MongoDB/FodyWeavers.xml | 2 +- .../Users/MongoDB/MongoUserRepositoryBase.cs | 4 +- .../FodyWeavers.xml | 2 +- .../AbpConsoleDemo/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Acme.BookStore.DbMigrator/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../src/Acme.BookStore.Domain/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Acme.BookStore.HttpApi/FodyWeavers.xml | 2 +- .../Acme.BookStore.MongoDB/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Acme.BookStore.TestBase/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Acme.BookStore.DbMigrator/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../src/Acme.BookStore.Domain/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Acme.BookStore.HttpApi/FodyWeavers.xml | 2 +- .../src/Acme.BookStore.Web/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Acme.BookStore.TestBase/FodyWeavers.xml | 2 +- .../Acme.BookStore.Web.Tests/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Acme.BookStore.DbMigrator/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../src/Acme.BookStore.Domain/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Acme.BookStore.HttpApi/FodyWeavers.xml | 2 +- .../src/Acme.BookStore.Web/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../Acme.BookStore.TestBase/FodyWeavers.xml | 2 +- .../Acme.BookStore.Web.Tests/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../DashboardDemo.Application/FodyWeavers.xml | 2 +- .../DashboardDemo.DbMigrator/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../src/DashboardDemo.Domain/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../src/DashboardDemo.HttpApi/FodyWeavers.xml | 2 +- .../src/DashboardDemo.Web/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../DashboardDemo.TestBase/FodyWeavers.xml | 2 +- .../DashboardDemo.Web.Tests/FodyWeavers.xml | 2 +- .../AuthServer.Host/FodyWeavers.xml | 2 +- .../BackendAdminApp.Host/FodyWeavers.xml | 2 +- .../ConsoleClientDemo/FodyWeavers.xml | 2 +- .../PublicWebSite.Host/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../InternalGateway.Host/FodyWeavers.xml | 2 +- .../PublicWebSiteGateway.Host/FodyWeavers.xml | 2 +- .../BloggingService.Host/FodyWeavers.xml | 2 +- .../IdentityService.Host/FodyWeavers.xml | 2 +- .../ProductService.Host/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../ProductManagement.Domain/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../ProductManagement.HttpApi/FodyWeavers.xml | 2 +- .../src/ProductManagement.Web/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- samples/RabbitMqEventBus/App1/FodyWeavers.xml | 2 +- samples/RabbitMqEventBus/App2/FodyWeavers.xml | 2 +- .../SharedModule/FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xml | 2 +- 838 files changed, 2506 insertions(+), 2521 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/FodyWeavers.xml b/abp_io/AbpIoLocalization/AbpIoLocalization/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/FodyWeavers.xml +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xml b/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xml +++ b/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Microsoft/AspNetCore/Builder/JwtTokenMiddleware.cs b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Microsoft/AspNetCore/Builder/JwtTokenMiddleware.cs index e93f558afd..4ff54f39bf 100644 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Microsoft/AspNetCore/Builder/JwtTokenMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Microsoft/AspNetCore/Builder/JwtTokenMiddleware.cs @@ -11,14 +11,14 @@ namespace Microsoft.AspNetCore.Builder { if (ctx.User.Identity?.IsAuthenticated != true) { - var result = await ctx.AuthenticateAsync(schema).ConfigureAwait(false); + var result = await ctx.AuthenticateAsync(schema); if (result.Succeeded && result.Principal != null) { ctx.User = result.Principal; } } - await next().ConfigureAwait(false); + await next(); }); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs index b260df4247..ba8802a80e 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs @@ -33,7 +33,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy TenantConfiguration tenant = null; if (resolveResult.TenantIdOrName != null) { - tenant = await FindTenantAsync(resolveResult.TenantIdOrName).ConfigureAwait(false); + tenant = await FindTenantAsync(resolveResult.TenantIdOrName); if (tenant == null) { //TODO: A better exception? @@ -45,7 +45,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy using (_currentTenant.Change(tenant?.Id, tenant?.Name)) { - await next(context).ConfigureAwait(false); + await next(context); } } @@ -53,11 +53,11 @@ namespace Volo.Abp.AspNetCore.MultiTenancy { if (Guid.TryParse(tenantIdOrName, out var parsedTenantId)) { - return await _tenantStore.FindAsync(parsedTenantId).ConfigureAwait(false); + return await _tenantStore.FindAsync(parsedTenantId); } else { - return await _tenantStore.FindAsync(tenantIdOrName).ConfigureAwait(false); + return await _tenantStore.FindAsync(tenantIdOrName); } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/CachedApplicationConfigurationClient.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/CachedApplicationConfigurationClient.cs index a4f7eb0567..1fbb72bb3e 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/CachedApplicationConfigurationClient.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/CachedApplicationConfigurationClient.cs @@ -43,12 +43,12 @@ namespace Volo.Abp.AspNetCore.Mvc.Client configuration = await Cache.GetOrAddAsync( cacheKey, - async () => await Proxy.Service.GetAsync().ConfigureAwait(false), + async () => await Proxy.Service.GetAsync(), () => new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(120) //TODO: Should be configurable. Default value should be higher (5 mins would be good). } - ).ConfigureAwait(false); + ); if (httpContext != null) { diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteFeatureChecker.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteFeatureChecker.cs index 9671703db8..f769f512a5 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteFeatureChecker.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteFeatureChecker.cs @@ -15,7 +15,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Client public override async Task GetOrNullAsync(string name) { - var configuration = await ConfigurationClient.GetAsync().ConfigureAwait(false); + var configuration = await ConfigurationClient.GetAsync(); return configuration.Features.Values.GetOrDefault(name); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteLanguageProvider.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteLanguageProvider.cs index 42b6eeb543..02c97c0598 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteLanguageProvider.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteLanguageProvider.cs @@ -16,7 +16,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Client public async Task> GetLanguagesAsync() { - var configuration = await ConfigurationClient.GetAsync().ConfigureAwait(false); + var configuration = await ConfigurationClient.GetAsync(); return configuration.Localization.Languages; } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemotePermissionChecker.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemotePermissionChecker.cs index 553160029b..18f5272e7b 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemotePermissionChecker.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemotePermissionChecker.cs @@ -16,7 +16,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Client public async Task IsGrantedAsync(string name) { - var configuration = await ConfigurationClient.GetAsync().ConfigureAwait(false); + var configuration = await ConfigurationClient.GetAsync(); return configuration.Auth.GrantedPolicies.ContainsKey(name); } @@ -24,7 +24,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Client public async Task IsGrantedAsync(ClaimsPrincipal claimsPrincipal, string name) { /* This provider always works for the current principal. */ - return await IsGrantedAsync(name).ConfigureAwait(false); + return await IsGrantedAsync(name); } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteSettingProvider.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteSettingProvider.cs index d6526a0b7b..db3ea6e9a6 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteSettingProvider.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteSettingProvider.cs @@ -17,13 +17,13 @@ namespace Volo.Abp.AspNetCore.Mvc.Client public async Task GetOrNullAsync(string name) { - var configuration = await ConfigurationClient.GetAsync().ConfigureAwait(false); + var configuration = await ConfigurationClient.GetAsync(); return configuration.Setting.Values.GetOrDefault(name); } public async Task> GetAllAsync() { - var configuration = await ConfigurationClient.GetAsync().ConfigureAwait(false); + var configuration = await ConfigurationClient.GetAsync(); return configuration .Setting.Values .Select(s => new SettingValue(s.Key, s.Value)) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteTenantStore.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteTenantStore.cs index 8e95376663..236387823c 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteTenantStore.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteTenantStore.cs @@ -39,13 +39,13 @@ namespace Volo.Abp.AspNetCore.Mvc.Client tenantConfiguration = await Cache.GetOrAddAsync( cacheKey, - async () => CreateTenantConfiguration(await Proxy.Service.FindTenantByNameAsync(name).ConfigureAwait(false)), + async () => CreateTenantConfiguration(await Proxy.Service.FindTenantByNameAsync(name)), () => new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5) //TODO: Should be configurable. } - ).ConfigureAwait(false); + ); if (httpContext != null) { @@ -67,13 +67,13 @@ namespace Volo.Abp.AspNetCore.Mvc.Client tenantConfiguration = await Cache.GetOrAddAsync( cacheKey, - async () => CreateTenantConfiguration(await Proxy.Service.FindTenantByIdAsync(id).ConfigureAwait(false)), + async () => CreateTenantConfiguration(await Proxy.Service.FindTenantByIdAsync(id)), () => new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5) //TODO: Should be configurable. } - ).ConfigureAwait(false); + ); if (httpContext != null) { @@ -95,7 +95,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Client tenantConfiguration = Cache.GetOrAdd( cacheKey, - () => AsyncHelper.RunSync(async () => CreateTenantConfiguration(await Proxy.Service.FindTenantByNameAsync(name).ConfigureAwait(false))), + () => AsyncHelper.RunSync(async () => CreateTenantConfiguration(await Proxy.Service.FindTenantByNameAsync(name))), () => new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = @@ -123,7 +123,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Client tenantConfiguration = Cache.GetOrAdd( cacheKey, - () => AsyncHelper.RunSync(async () => CreateTenantConfiguration(await Proxy.Service.FindTenantByIdAsync(id).ConfigureAwait(false))), + () => AsyncHelper.RunSync(async () => CreateTenantConfiguration(await Proxy.Service.FindTenantByIdAsync(id))), () => new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs index 4b3a4dd471..8eeeb1e929 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs @@ -12,7 +12,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb { var list = InitilizeFormGroupContentsContext(context, output); - await output.GetChildContentAsync().ConfigureAwait(false); + await output.GetChildContentAsync(); SetInnerOlTag(context, output); SetInnerList(context, output, list); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs index 65cffd8cb6..ffba80fb6f 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs @@ -19,7 +19,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel var itemList = InitilizeCarouselItemsContentsContext(context, output); - await output.GetChildContentAsync().ConfigureAwait(false); + await output.GetChildContentAsync(); SetOneItemAsActive(context, output, itemList); SetItems(context, output, itemList); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionItemTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionItemTagHelperService.cs index 509b801ba9..9dc279334b 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionItemTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionItemTagHelperService.cs @@ -12,7 +12,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse { SetRandomIdIfNotProvided(); - var innerContent = (await output.GetChildContentAsync().ConfigureAwait(false)).GetContent(); + var innerContent = (await output.GetChildContentAsync()).GetContent(); var html = GetAccordionHeaderItem(context, output) + GetAccordionContentItem(context, output, innerContent); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs index c6c5c2eb5e..20e62604a9 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs @@ -20,7 +20,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse var items = InitilizeFormGroupContentsContext(context, output); - await output.GetChildContentAsync().ConfigureAwait(false); + await output.GetChildContentAsync(); var content = GetContent(items); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpCollapseBodyTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpCollapseBodyTagHelperService.cs index 2b81961f67..10e49b92a7 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpCollapseBodyTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpCollapseBodyTagHelperService.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse output.Attributes.AddClass("multi-collapse"); } - var innerContent = (await output.GetChildContentAsync().ConfigureAwait(false)).GetContent(); + var innerContent = (await output.GetChildContentAsync()).GetContent(); output.Content.SetHtmlContent(innerContent); } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Dropdown/AbpDropdownButtonTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Dropdown/AbpDropdownButtonTagHelperService.cs index 459a7be318..673204b302 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Dropdown/AbpDropdownButtonTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Dropdown/AbpDropdownButtonTagHelperService.cs @@ -26,9 +26,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Dropdown public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { - var content = await output.GetChildContentAsync().ConfigureAwait(false); + var content = await output.GetChildContentAsync(); - var buttonsAsHtml = await GetButtonsAsHtmlAsync(context, output, content).ConfigureAwait(false); + var buttonsAsHtml = await GetButtonsAsHtmlAsync(context, output, content); output.PreElement.SetHtmlContent(buttonsAsHtml); @@ -43,13 +43,13 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Dropdown { var buttonBuilder = new StringBuilder(""); - var mainButton = await GetMainButtonAsync(context, output, content).ConfigureAwait(false); + var mainButton = await GetMainButtonAsync(context, output, content); buttonBuilder.AppendLine(mainButton); if (TagHelper.DropdownStyle == DropdownStyle.Split) { - var splitButton = await GetSplitButtonAsync(context, output).ConfigureAwait(false); + var splitButton = await GetSplitButtonAsync(context, output); buttonBuilder.AppendLine(splitButton); } @@ -68,7 +68,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Dropdown abpButtonTagHelper.ButtonType = TagHelper.ButtonType; var attributes = GetAttributesForMainButton(context, output); - var buttonTag = await abpButtonTagHelper.ProcessAndGetOutputAsync(attributes, context, "button", TagMode.StartTagAndEndTag).ConfigureAwait(false); + var buttonTag = await abpButtonTagHelper.ProcessAndGetOutputAsync(attributes, context, "button", TagMode.StartTagAndEndTag); buttonTag.PreContent.SetHtmlContent(content.GetContent()); @@ -89,7 +89,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Dropdown abpButtonTagHelper.ButtonType = TagHelper.ButtonType; var attributes = GetAttributesForSplitButton(context, output); - return await abpButtonTagHelper.RenderAsync(attributes, context, _htmlEncoder, "button", TagMode.StartTagAndEndTag).ConfigureAwait(false); + return await abpButtonTagHelper.RenderAsync(attributes, context, _htmlEncoder, "button", TagMode.StartTagAndEndTag); } protected virtual TagHelperAttributeList GetAttributesForMainButton(TagHelperContext context, TagHelperOutput output) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Extensions/TagHelperExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Extensions/TagHelperExtensions.cs index 6767e2bf1d..d925fd11e8 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Extensions/TagHelperExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Extensions/TagHelperExtensions.cs @@ -19,14 +19,14 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Extensions tagHelper.Init(context); - await tagHelper.ProcessAsync(innerContext, innerOutput).ConfigureAwait(false); + await tagHelper.ProcessAsync(innerContext, innerOutput); return innerOutput; } public static async Task RenderAsync(this TagHelper tagHelper, TagHelperAttributeList attributeList, TagHelperContext context, HtmlEncoder htmlEncoder, string tagName = "div", TagMode tagMode = TagMode.SelfClosing) { - var innerOutput = await tagHelper.ProcessAndGetOutputAsync(attributeList, context, tagName, tagMode).ConfigureAwait(false); + var innerOutput = await tagHelper.ProcessAndGetOutputAsync(attributeList, context, tagName, tagMode); return innerOutput.Render(htmlEncoder); } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs index 5fb439b6f7..ee2a920980 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpDynamicformTagHelperService.cs @@ -37,11 +37,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form NormalizeTagMode(context, output); - var childContent = (await output.GetChildContentAsync().ConfigureAwait(false)).GetContent(); + var childContent = (await output.GetChildContentAsync()).GetContent(); - await ConvertToMvcForm(context, output).ConfigureAwait(false); + await ConvertToMvcForm(context, output); - await ProcessFieldsAsync(context, output).ConfigureAwait(false); + await ProcessFieldsAsync(context, output); SetContent(context, output, list, childContent); @@ -67,9 +67,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form ViewContext = TagHelper.ViewContext }; - var formTagOutput = await formTagHelper.ProcessAndGetOutputAsync(output.Attributes, context, "form", TagMode.StartTagAndEndTag).ConfigureAwait(false); + var formTagOutput = await formTagHelper.ProcessAndGetOutputAsync(output.Attributes, context, "form", TagMode.StartTagAndEndTag); - await formTagOutput.GetChildContentAsync().ConfigureAwait(false); + await formTagOutput.GetChildContentAsync(); output.PostContent.SetHtmlContent(output.PostContent.GetContent() + formTagOutput.PostContent.GetContent()); output.PreContent.SetHtmlContent(output.PreContent.GetContent() + formTagOutput.PreContent.GetContent()); @@ -134,11 +134,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form { if (IsSelectGroup(context, model)) { - await ProcessSelectGroupAsync(context, output, model).ConfigureAwait(false); + await ProcessSelectGroupAsync(context, output, model); } else { - await ProcessInputGroupAsync(context, output, model).ConfigureAwait(false); + await ProcessInputGroupAsync(context, output, model); } } } @@ -147,7 +147,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form { var abpSelectTagHelper = GetSelectGroupTagHelper(context, output, model); - await abpSelectTagHelper.RenderAsync(new TagHelperAttributeList(), context, _htmlEncoder, "div", TagMode.StartTagAndEndTag).ConfigureAwait(false); + await abpSelectTagHelper.RenderAsync(new TagHelperAttributeList(), context, _htmlEncoder, "div", TagMode.StartTagAndEndTag); } protected virtual AbpTagHelper GetSelectGroupTagHelper(TagHelperContext context, TagHelperOutput output, ModelExpression model) @@ -185,7 +185,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form abpButtonTagHelper.Text = "Submit"; abpButtonTagHelper.ButtonType = AbpButtonType.Primary; - return await abpButtonTagHelper.RenderAsync(attributes, context, _htmlEncoder, "button", TagMode.StartTagAndEndTag).ConfigureAwait(false); + return await abpButtonTagHelper.RenderAsync(attributes, context, _htmlEncoder, "button", TagMode.StartTagAndEndTag); } protected virtual async Task ProcessInputGroupAsync(TagHelperContext context, TagHelperOutput output, ModelExpression model) @@ -195,7 +195,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form abpInputTagHelper.ViewContext = TagHelper.ViewContext; abpInputTagHelper.DisplayRequiredSymbol = TagHelper.RequiredSymbols ?? true; - await abpInputTagHelper.RenderAsync(new TagHelperAttributeList(), context, _htmlEncoder, "div", TagMode.StartTagAndEndTag).ConfigureAwait(false); + await abpInputTagHelper.RenderAsync(new TagHelperAttributeList(), context, _htmlEncoder, "div", TagMode.StartTagAndEndTag); } protected virtual List GetModels(TagHelperContext context, TagHelperOutput output) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs index b1195b729e..75fe4f23e7 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs @@ -27,7 +27,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { - var (innerHtml, isCheckBox) = await GetFormInputGroupAsHtmlAsync(context, output).ConfigureAwait(false); + var (innerHtml, isCheckBox) = await GetFormInputGroupAsHtmlAsync(context, output); var order = TagHelper.AspFor.ModelExplorer.GetDisplayOrder(); @@ -57,12 +57,12 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form protected virtual async Task<(string, bool)> GetFormInputGroupAsHtmlAsync(TagHelperContext context, TagHelperOutput output) { - var (inputTag, isCheckBox) = await GetInputTagHelperOutputAsync(context, output).ConfigureAwait(false); + var (inputTag, isCheckBox) = await GetInputTagHelperOutputAsync(context, output); var inputHtml = inputTag.Render(_encoder); - var label = await GetLabelAsHtmlAsync(context, output, inputTag, isCheckBox).ConfigureAwait(false); + var label = await GetLabelAsHtmlAsync(context, output, inputTag, isCheckBox); var info = GetInfoAsHtml(context, output, inputTag, isCheckBox); - var validation = isCheckBox ? "" : await GetValidationAsHtmlAsync(context, output, inputTag).ConfigureAwait(false); + var validation = isCheckBox ? "" : await GetValidationAsHtmlAsync(context, output, inputTag); return (GetContent(context, output, label, inputHtml, validation, info, isCheckBox), isCheckBox); } @@ -82,7 +82,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form var attributeList = new TagHelperAttributeList { { "class", "text-danger" } }; - return await validationMessageTagHelper.RenderAsync(attributeList, context, _encoder, "span", TagMode.StartTagAndEndTag).ConfigureAwait(false); + return await validationMessageTagHelper.RenderAsync(attributeList, context, _encoder, "span", TagMode.StartTagAndEndTag); } protected virtual string GetContent(TagHelperContext context, TagHelperOutput output, string label, string inputHtml, string validation, string infoHtml, bool isCheckbox) @@ -125,7 +125,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form { var tagHelper = GetInputTagHelper(context, output); - var inputTagHelperOutput = await tagHelper.ProcessAndGetOutputAsync(GetInputAttributes(context, output), context, "input").ConfigureAwait(false); + var inputTagHelperOutput = await tagHelper.ProcessAndGetOutputAsync(GetInputAttributes(context, output), context, "input"); ConvertToTextAreaIfTextArea(inputTagHelperOutput); AddDisabledAttribute(inputTagHelperOutput); @@ -227,7 +227,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form if (string.IsNullOrEmpty(TagHelper.Label)) { - return await GetLabelAsHtmlUsingTagHelperAsync(context, output, isCheckbox).ConfigureAwait(false) + GetRequiredSymbol(context, output); + return await GetLabelAsHtmlUsingTagHelperAsync(context, output, isCheckbox) + GetRequiredSymbol(context, output); } var checkboxClass = isCheckbox ? "class=\"custom-control-label\" " : ""; @@ -301,7 +301,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form attributeList.AddClass("custom-control-label"); } - return await labelTagHelper.RenderAsync(attributeList, context, _encoder, "label", TagMode.StartTagAndEndTag).ConfigureAwait(false); + return await labelTagHelper.RenderAsync(attributeList, context, _encoder, "label", TagMode.StartTagAndEndTag); } protected virtual void ConvertToTextAreaIfTextArea(TagHelperOutput tagHelperOutput) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs index f1260883ef..b18bc6ed75 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs @@ -30,7 +30,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { - var innerHtml = await GetFormInputGroupAsHtmlAsync(context, output).ConfigureAwait(false); + var innerHtml = await GetFormInputGroupAsHtmlAsync(context, output); var order = TagHelper.AspFor.ModelExplorer.GetDisplayOrder(); @@ -52,10 +52,10 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form protected virtual async Task GetFormInputGroupAsHtmlAsync(TagHelperContext context, TagHelperOutput output) { - var selectTag = await GetSelectTagAsync(context, output).ConfigureAwait(false); + var selectTag = await GetSelectTagAsync(context, output); var selectAsHtml = selectTag.Render(_encoder); - var label = await GetLabelAsHtmlAsync(context, output, selectTag).ConfigureAwait(false); - var validation = await GetValidationAsHtmlAsync(context, output, selectTag).ConfigureAwait(false); + var label = await GetLabelAsHtmlAsync(context, output, selectTag); + var validation = await GetValidationAsHtmlAsync(context, output, selectTag); var infoText = GetInfoAsHtml(context, output, selectTag); return label + Environment.NewLine + selectAsHtml + Environment.NewLine + infoText + Environment.NewLine + validation; @@ -75,7 +75,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form ViewContext = TagHelper.ViewContext }; - var selectTagHelperOutput = await selectTagHelper.ProcessAndGetOutputAsync(GetInputAttributes(context, output), context, "select", TagMode.StartTagAndEndTag).ConfigureAwait(false); + var selectTagHelperOutput = await selectTagHelper.ProcessAndGetOutputAsync(GetInputAttributes(context, output), context, "select", TagMode.StartTagAndEndTag); selectTagHelperOutput.Attributes.AddClass("form-control"); selectTagHelperOutput.Attributes.AddClass(GetSize(context, output)); @@ -123,7 +123,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form return "" + GetRequiredSymbol(context, output); } - return await GetLabelAsHtmlUsingTagHelperAsync(context, output).ConfigureAwait(false) + GetRequiredSymbol(context, output); + return await GetLabelAsHtmlUsingTagHelperAsync(context, output) + GetRequiredSymbol(context, output); } protected virtual string GetRequiredSymbol(TagHelperContext context, TagHelperOutput output) @@ -242,7 +242,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form ViewContext = TagHelper.ViewContext }; - return await labelTagHelper.RenderAsync(new TagHelperAttributeList(), context, _encoder, "label", TagMode.StartTagAndEndTag).ConfigureAwait(false); + return await labelTagHelper.RenderAsync(new TagHelperAttributeList(), context, _encoder, "label", TagMode.StartTagAndEndTag); } protected virtual async Task GetValidationAsHtmlAsync(TagHelperContext context, TagHelperOutput output, TagHelperOutput inputTag) @@ -255,7 +255,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form var attributeList = new TagHelperAttributeList { { "class", "text-danger" } }; - return await validationMessageTagHelper.RenderAsync(attributeList, context, _encoder, "span", TagMode.StartTagAndEndTag).ConfigureAwait(false); + return await validationMessageTagHelper.RenderAsync(attributeList, context, _encoder, "span", TagMode.StartTagAndEndTag); } protected virtual string GetSize(TagHelperContext context, TagHelperOutput output) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Pagination/AbpPaginationTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Pagination/AbpPaginationTagHelperService.cs index f1d2f5c02f..25307c3fee 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Pagination/AbpPaginationTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Pagination/AbpPaginationTagHelperService.cs @@ -31,7 +31,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination } ProcessMainTag(context, output); - await SetContentAsHtmlAsync(context, output).ConfigureAwait(false); + await SetContentAsHtmlAsync(context, output); } protected virtual async Task SetContentAsHtmlAsync(TagHelperContext context, TagHelperOutput output) @@ -39,9 +39,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination var html = new StringBuilder(""); html.AppendLine(GetOpeningTags(context, output)); - html.AppendLine(await GetPreviousButtonAsync(context, output).ConfigureAwait(false)); - html.AppendLine(await GetPagesAsync(context, output).ConfigureAwait(false)); - html.AppendLine(await GetNextButton(context, output).ConfigureAwait(false)); + html.AppendLine(await GetPreviousButtonAsync(context, output)); + html.AppendLine(await GetPagesAsync(context, output)); + html.AppendLine(await GetNextButton(context, output)); html.AppendLine(GetClosingTags(context, output)); output.Content.SetHtmlContent(html.ToString()); @@ -61,7 +61,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination foreach (var page in TagHelper.Model.Pages) { - pagesHtml.AppendLine(await GetPageAsync(context, output, page).ConfigureAwait(false)); + pagesHtml.AppendLine(await GetPageAsync(context, output, page)); } return pagesHtml.ToString(); @@ -86,7 +86,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination } else { - pageHtml.AppendLine(await RenderAnchorTagHelperLinkHtmlAsync(context, output, page.Index.ToString(), page.Index.ToString()).ConfigureAwait(false)); + pageHtml.AppendLine(await RenderAnchorTagHelperLinkHtmlAsync(context, output, page.Index.ToString(), page.Index.ToString())); } pageHtml.AppendLine(""); @@ -102,7 +102,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination : (TagHelper.Model.CurrentPage - 1).ToString(); return "
  • \r\n" + - (await RenderAnchorTagHelperLinkHtmlAsync(context, output, currentPage, localizationKey).ConfigureAwait(false)) + "
  • "; + (await RenderAnchorTagHelperLinkHtmlAsync(context, output, currentPage, localizationKey)) + " "; } protected virtual async Task GetNextButton(TagHelperContext context, TagHelperOutput output) @@ -111,7 +111,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination var currentPage = (TagHelper.Model.CurrentPage + 1).ToString(); return "
  • = TagHelper.Model.TotalPageCount ? "disabled" : "") + "\">\r\n" + - (await RenderAnchorTagHelperLinkHtmlAsync(context, output, currentPage, localizationKey).ConfigureAwait(false)) + + (await RenderAnchorTagHelperLinkHtmlAsync(context, output, currentPage, localizationKey)) + "
  • "; } @@ -121,7 +121,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination var anchorTagHelper = GetAnchorTagHelper(currentPage, out var attributeList); - var tagHelperOutput = await anchorTagHelper.ProcessAndGetOutputAsync(attributeList, context, "a", TagMode.StartTagAndEndTag).ConfigureAwait(false); + var tagHelperOutput = await anchorTagHelper.ProcessAndGetOutputAsync(attributeList, context, "a", TagMode.StartTagAndEndTag); tagHelperOutput.Content.SetHtmlContent(localizer[localizationKey]); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabDropdownTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabDropdownTagHelperService.cs index 1b74a338dd..fb724af9c8 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabDropdownTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabDropdownTagHelperService.cs @@ -15,7 +15,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab throw new Exception("Name of tab dropdown tag can not bu null or empty."); } - await output.GetChildContentAsync().ConfigureAwait(false); + await output.GetChildContentAsync(); var tabHeader = GetTabHeaderItem(context, output); var tabHeaderItems = context.GetValue>(TabItems); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabTagHelperService.cs index 7d8dc7224c..2de18d0592 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabTagHelperService.cs @@ -12,7 +12,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab { SetPlaceholderForNameIfNotProvided(); - var innerContent = await output.GetChildContentAsync().ConfigureAwait(false); + var innerContent = await output.GetChildContentAsync(); var tabHeader = GetTabHeaderItem(context, output); var tabContent = GetTabContentItem(context, output, innerContent.GetContent()); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs index 37d307ac05..0098cbc1f0 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs @@ -17,7 +17,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab var items = InitilizeFormGroupContentsContext(context, output); - await output.GetChildContentAsync().ConfigureAwait(false); + await output.GetChildContentAsync(); var headers = GetHeaders(context, output, items); var contents = GetConents(context, output, items); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/BundleManager.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/BundleManager.cs index 5683a2039f..f5806364f3 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/BundleManager.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/BundleManager.cs @@ -61,12 +61,12 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling public virtual async Task> GetStyleBundleFilesAsync(string bundleName) { - return await GetBundleFilesAsync(Options.StyleBundles, bundleName, StyleBundler).ConfigureAwait(false); + return await GetBundleFilesAsync(Options.StyleBundles, bundleName, StyleBundler); } public virtual async Task> GetScriptBundleFilesAsync(string bundleName) { - return await GetBundleFilesAsync(Options.ScriptBundles, bundleName, ScriptBundler).ConfigureAwait(false); + return await GetBundleFilesAsync(Options.ScriptBundles, bundleName, ScriptBundler); } protected virtual async Task> GetBundleFilesAsync(BundleConfigurationCollection bundles, string bundleName, IBundler bundler) @@ -185,17 +185,17 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling foreach (var contributor in contributors) { - await contributor.PreConfigureBundleAsync(context).ConfigureAwait(false); + await contributor.PreConfigureBundleAsync(context); } foreach (var contributor in contributors) { - await contributor.ConfigureBundleAsync(context).ConfigureAwait(false); + await contributor.ConfigureBundleAsync(context); } foreach (var contributor in contributors) { - await contributor.PostConfigureBundleAsync(context).ConfigureAwait(false); + await contributor.PostConfigureBundleAsync(context); } return context.Files; @@ -207,7 +207,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling foreach (var contributor in contributors) { - await contributor.ConfigureDynamicResourcesAsync(context).ConfigureAwait(false); + await contributor.ConfigureDynamicResourcesAsync(context); } return context.Files; diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleItemTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleItemTagHelperService.cs index a7c504054c..fc59051720 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleItemTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleItemTagHelperService.cs @@ -33,7 +33,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers TagHelper.CreateBundleTagHelperItem() }, TagHelper.GetNameOrNull() - ).ConfigureAwait(false); + ); } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleTagHelperService.cs index 45aeffaf92..a8eadce1e8 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpBundleTagHelperService.cs @@ -20,16 +20,16 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers await ResourceService.ProcessAsync( context, output, - await GetBundleItems(context, output).ConfigureAwait(false), + await GetBundleItems(context, output), TagHelper.GetNameOrNull() - ).ConfigureAwait(false); + ); } protected virtual async Task> GetBundleItems(TagHelperContext context, TagHelperOutput output) { var bundleItems = new List(); context.Items[AbpTagHelperConsts.ContextBundleItemListKey] = bundleItems; - await output.GetChildContentAsync().ConfigureAwait(false); //TODO: Is there a way of executing children without getting content? + await output.GetChildContentAsync(); //TODO: Is there a way of executing children without getting content? return bundleItems; } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceService.cs index 9095fdf335..73b6e025ea 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceService.cs @@ -56,7 +56,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers CreateBundle(bundleName, bundleItems); - var bundleFiles = await GetBundleFilesAsync(bundleName).ConfigureAwait(false); + var bundleFiles = await GetBundleFilesAsync(bundleName); output.Content.Clear(); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperScriptService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperScriptService.cs index 8ab0dffc15..b087db517f 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperScriptService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperScriptService.cs @@ -36,7 +36,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers protected override async Task> GetBundleFilesAsync(string bundleName) { - return await BundleManager.GetScriptBundleFilesAsync(bundleName).ConfigureAwait(false); + return await BundleManager.GetScriptBundleFilesAsync(bundleName); } protected override void AddHtmlTag(TagHelperContext context, TagHelperOutput output, string file) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperStyleService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperStyleService.cs index f82606fa03..2d273345cb 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperStyleService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperStyleService.cs @@ -36,7 +36,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers protected override async Task> GetBundleFilesAsync(string bundleName) { - return await BundleManager.GetStyleBundleFilesAsync(bundleName).ConfigureAwait(false); + return await BundleManager.GetStyleBundleFilesAsync(bundleName); } protected override void AddHtmlTag(TagHelperContext context, TagHelperOutput output, string file) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/AbpTenantAppService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/AbpTenantAppService.cs index 7cb02623f1..d0bea87196 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/AbpTenantAppService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/AbpTenantAppService.cs @@ -17,7 +17,7 @@ namespace Pages.Abp.MultiTenancy public async Task FindTenantByNameAsync(string name) { - var tenant = await TenantStore.FindAsync(name).ConfigureAwait(false); + var tenant = await TenantStore.FindAsync(name); if (tenant == null) { @@ -34,7 +34,7 @@ namespace Pages.Abp.MultiTenancy public async Task FindTenantByIdAsync(Guid id) { - var tenant = await TenantStore.FindAsync(id).ConfigureAwait(false); + var tenant = await TenantStore.FindAsync(id); if (tenant == null) { diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/AbpTenantController.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/AbpTenantController.cs index c36d36f61f..5da47875d9 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/AbpTenantController.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/AbpTenantController.cs @@ -21,14 +21,14 @@ namespace Pages.Abp.MultiTenancy [Route("tenants/by-name/{name}")] public async Task FindTenantByNameAsync(string name) { - return await _abpTenantAppService.FindTenantByNameAsync(name).ConfigureAwait(false); + return await _abpTenantAppService.FindTenantByNameAsync(name); } [HttpGet] [Route("tenants/by-id/{id}")] public async Task FindTenantByIdAsync(Guid id) { - return await _abpTenantAppService.FindTenantByIdAsync(id).ConfigureAwait(false); + return await _abpTenantAppService.FindTenantByIdAsync(id); } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/TenantSwitchModal.cshtml.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/TenantSwitchModal.cshtml.cs index da4d6d207d..bfdbb98db8 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/TenantSwitchModal.cshtml.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/TenantSwitchModal.cshtml.cs @@ -34,7 +34,7 @@ namespace Pages.Abp.MultiTenancy if (CurrentTenant.IsAvailable) { - var tenant = await TenantStore.FindAsync(CurrentTenant.GetId()).ConfigureAwait(false); + var tenant = await TenantStore.FindAsync(CurrentTenant.GetId()); Input.Name = tenant?.Name; } } @@ -47,7 +47,7 @@ namespace Pages.Abp.MultiTenancy } else { - var tenant = await TenantStore.FindAsync(Input.Name).ConfigureAwait(false); + var tenant = await TenantStore.FindAsync(Input.Name); if (tenant == null) { throw new UserFriendlyException(L["GivenTenantIsNotAvailable", Input.Name]); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Menu/MainNavbarMenuViewComponent.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Menu/MainNavbarMenuViewComponent.cs index bccd8e00de..0369457165 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Menu/MainNavbarMenuViewComponent.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Menu/MainNavbarMenuViewComponent.cs @@ -15,7 +15,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Themes.Basic.Components.Menu public async Task InvokeAsync() { - var menu = await _menuManager.GetAsync(StandardMenus.Main).ConfigureAwait(false); + var menu = await _menuManager.GetAsync(StandardMenus.Main); return View("~/Themes/Basic/Components/Menu/Default.cshtml", menu); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Toolbar/LanguageSwitch/LanguageSwitchViewComponent.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Toolbar/LanguageSwitch/LanguageSwitchViewComponent.cs index e58190060b..c6921d3210 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Toolbar/LanguageSwitch/LanguageSwitchViewComponent.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Toolbar/LanguageSwitch/LanguageSwitchViewComponent.cs @@ -17,7 +17,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Themes.Basic.Components.Toolbar public async Task InvokeAsync() { - var languages = await _languageProvider.GetLanguagesAsync().ConfigureAwait(false); + var languages = await _languageProvider.GetLanguagesAsync(); var currentLanguage = languages.FindByCulture( CultureInfo.CurrentCulture.Name, CultureInfo.CurrentUICulture.Name diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Toolbar/MainNavbarToolsViewComponent.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Toolbar/MainNavbarToolsViewComponent.cs index 862dbe7e2f..bfd02bbf4a 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Toolbar/MainNavbarToolsViewComponent.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Toolbar/MainNavbarToolsViewComponent.cs @@ -15,7 +15,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Themes.Basic.Components.Toolbar public async Task InvokeAsync() { - var toolbar = await _toolbarManager.GetAsync(StandardToolbars.Main).ConfigureAwait(false); + var toolbar = await _toolbarManager.GetAsync(StandardToolbars.Main); return View("~/Themes/Basic/Components/Toolbar/Default.cshtml", toolbar); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Toolbar/UserMenu/UserMenuViewComponent.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Toolbar/UserMenu/UserMenuViewComponent.cs index feb7fb09a5..cde4208578 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Toolbar/UserMenu/UserMenuViewComponent.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Toolbar/UserMenu/UserMenuViewComponent.cs @@ -15,7 +15,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Themes.Basic.Components.Toolbar public async Task InvokeAsync() { - var menu = await _menuManager.GetAsync(StandardMenus.User).ConfigureAwait(false); + var menu = await _menuManager.GetAsync(StandardMenus.User); return View("~/Themes/Basic/Components/Toolbar/UserMenu/Default.cshtml", menu); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Toolbars/BasicThemeMainTopToolbarContributor.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Toolbars/BasicThemeMainTopToolbarContributor.cs index 01e812adfe..1ed1d2d5d3 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Toolbars/BasicThemeMainTopToolbarContributor.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Toolbars/BasicThemeMainTopToolbarContributor.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Toolbars var languageProvider = context.ServiceProvider.GetService(); //TODO: This duplicates GetLanguages() usage. Can we eleminate this? - var languages = await languageProvider.GetLanguagesAsync().ConfigureAwait(false); + var languages = await languageProvider.GetLanguagesAsync(); if (languages.Count > 1) { context.Toolbar.Items.Add(new ToolbarItem(typeof(LanguageSwitchViewComponent))); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/ToolbarManager.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/ToolbarManager.cs index e2d66a7d11..f1ac30779a 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/ToolbarManager.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/ToolbarManager.cs @@ -33,7 +33,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Toolbars foreach (var contributor in Options.Contributors) { - await contributor.ConfigureToolbarAsync(context).ConfigureAwait(false); + await contributor.ConfigureToolbarAsync(context); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo/Abp/AspNetCore/Mvc/UI/Widgets/AbpViewComponentHelper.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo/Abp/AspNetCore/Mvc/UI/Widgets/AbpViewComponentHelper.cs index e148947c77..826c7635cf 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo/Abp/AspNetCore/Mvc/UI/Widgets/AbpViewComponentHelper.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo/Abp/AspNetCore/Mvc/UI/Widgets/AbpViewComponentHelper.cs @@ -33,10 +33,10 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Widgets var widget = Options.Widgets.Find(name); if (widget == null) { - return await DefaultViewComponentHelper.InvokeAsync(name, arguments).ConfigureAwait(false); + return await DefaultViewComponentHelper.InvokeAsync(name, arguments); } - return await InvokeWidgetAsync(arguments, widget).ConfigureAwait(false); + return await InvokeWidgetAsync(arguments, widget); } public virtual async Task InvokeAsync(Type componentType, object arguments) @@ -44,10 +44,10 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Widgets var widget = Options.Widgets.Find(componentType); if (widget == null) { - return await DefaultViewComponentHelper.InvokeAsync(componentType, arguments).ConfigureAwait(false); + return await DefaultViewComponentHelper.InvokeAsync(componentType, arguments); } - return await InvokeWidgetAsync(arguments, widget).ConfigureAwait(false); + return await InvokeWidgetAsync(arguments, widget); } public virtual void Contextualize(ViewContext viewContext) @@ -68,7 +68,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Widgets return new HtmlContentBuilder() .AppendHtml($"
    ") - .AppendHtml(await DefaultViewComponentHelper.InvokeAsync(widget.ViewComponentType, arguments).ConfigureAwait(false)) + .AppendHtml(await DefaultViewComponentHelper.InvokeAsync(widget.ViewComponentType, arguments)) .AppendHtml("
    "); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo/Abp/AspNetCore/Mvc/UI/Widgets/WidgetManager.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo/Abp/AspNetCore/Mvc/UI/Widgets/WidgetManager.cs index 2249090bd8..ffd03d28dc 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo/Abp/AspNetCore/Mvc/UI/Widgets/WidgetManager.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo/Abp/AspNetCore/Mvc/UI/Widgets/WidgetManager.cs @@ -27,14 +27,14 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Widgets { var widget = Options.Widgets.Find(widgetComponentType); - return await IsGrantedAsyncInternal(widget, widgetComponentType.FullName).ConfigureAwait(false); + return await IsGrantedAsyncInternal(widget, widgetComponentType.FullName); } public async Task IsGrantedAsync(string name) { var widget = Options.Widgets.Find(name); - return await IsGrantedAsyncInternal(widget, name).ConfigureAwait(false); + return await IsGrantedAsyncInternal(widget, name); } private async Task IsGrantedAsyncInternal(WidgetDefinition widget, string wantedWidgetName) @@ -48,7 +48,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Widgets { foreach (var requiredPolicy in widget.RequiredPolicies) { - if (!(await AuthorizationService.AuthorizeAsync(requiredPolicy).ConfigureAwait(false)).Succeeded) + if (!(await AuthorizationService.AuthorizeAsync(requiredPolicy)).Succeeded) { return false; } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs index 1744658d41..69f75a31b2 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs @@ -56,12 +56,12 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations return new ApplicationConfigurationDto { - Auth = await GetAuthConfigAsync().ConfigureAwait(false), - Features = await GetFeaturesConfigAsync().ConfigureAwait(false), - Localization = await GetLocalizationConfigAsync().ConfigureAwait(false), + Auth = await GetAuthConfigAsync(), + Features = await GetFeaturesConfigAsync(), + Localization = await GetLocalizationConfigAsync(), CurrentUser = GetCurrentUser(), Setting = await GetSettingConfigAsync() -.ConfigureAwait(false) + }; } @@ -82,7 +82,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations var authConfig = new ApplicationAuthConfigurationDto(); - var policyNames = await _abpAuthorizationPolicyProvider.GetPoliciesNamesAsync().ConfigureAwait(false); + var policyNames = await _abpAuthorizationPolicyProvider.GetPoliciesNamesAsync(); Logger.LogDebug($"GetPoliciesNamesAsync returns {policyNames.Count} items."); @@ -92,7 +92,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations Logger.LogDebug($"_authorizationService.IsGrantedAsync? {policyName}"); - if (await _authorizationService.IsGrantedAsync(policyName).ConfigureAwait(false)) + if (await _authorizationService.IsGrantedAsync(policyName)) { authConfig.GrantedPolicies[policyName] = true; } @@ -175,7 +175,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations continue; } - result.Values[settingDefinition.Name] = await _settingProvider.GetOrNullAsync(settingDefinition.Name).ConfigureAwait(false); + result.Values[settingDefinition.Name] = await _settingProvider.GetOrNullAsync(settingDefinition.Name); } Logger.LogDebug("Executed AbpApplicationConfigurationAppService.GetSettingConfigAsync()"); @@ -196,7 +196,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations continue; } - result.Values[featureDefinition.Name] = await FeatureChecker.GetOrNullAsync(featureDefinition.Name).ConfigureAwait(false); + result.Values[featureDefinition.Name] = await FeatureChecker.GetOrNullAsync(featureDefinition.Name); } Logger.LogDebug("Executed AbpApplicationConfigurationAppService.GetFeaturesConfigAsync()"); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationController.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationController.cs index ae41e579c9..67672986be 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationController.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationController.cs @@ -17,7 +17,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations [HttpGet] public async Task GetAsync() { - return await _applicationConfigurationAppService.GetAsync().ConfigureAwait(false); + return await _applicationConfigurationAppService.GetAsync(); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationScriptController.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationScriptController.cs index 00cef65179..6cc01966a5 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationScriptController.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationScriptController.cs @@ -35,7 +35,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations [Produces(MimeTypes.Application.Javascript, MimeTypes.Text.Plain)] public async Task Get() { - var script = CreateAbpExtendScript(await _configurationAppService.GetAsync().ConfigureAwait(false)); + var script = CreateAbpExtendScript(await _configurationAppService.GetAsync()); return Content( _options.MinifyGeneratedScript == true diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Auditing/AbpAuditActionFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Auditing/AbpAuditActionFilter.cs index 4699689d76..33932137cb 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Auditing/AbpAuditActionFilter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Auditing/AbpAuditActionFilter.cs @@ -27,7 +27,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Auditing { if (!ShouldSaveAudit(context, out var auditLog, out var auditLogAction)) { - await next().ConfigureAwait(false); + await next(); return; } @@ -37,7 +37,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Auditing try { - var result = await next().ConfigureAwait(false); + var result = await next(); if (result.Exception != null && !result.ExceptionHandled) { diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Authentication/ChallengeAccountController.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Authentication/ChallengeAccountController.cs index d3a8025813..de8958920d 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Authentication/ChallengeAccountController.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Authentication/ChallengeAccountController.cs @@ -40,7 +40,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Authentication [HttpGet] public async Task Logout(string returnUrl = "", string returnUrlHash = "") { - await HttpContext.SignOutAsync().ConfigureAwait(false); + await HttpContext.SignOutAsync(); return RedirectSafely(returnUrl, returnUrlHash); } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Features/AbpFeatureActionFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Features/AbpFeatureActionFilter.cs index ffca5b12ee..577acda339 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Features/AbpFeatureActionFilter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Features/AbpFeatureActionFilter.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Features { if (!context.ActionDescriptor.IsControllerAction()) { - await next().ConfigureAwait(false); + await next(); return; } @@ -33,9 +33,9 @@ namespace Volo.Abp.AspNetCore.Mvc.Features { await _methodInvocationAuthorizationService.CheckAsync( new MethodInvocationFeatureCheckerContext(methodInfo) - ).ConfigureAwait(false); + ); - await next().ConfigureAwait(false); + await next(); } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ModelBinding/AbpDateTimeModelBinder.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ModelBinding/AbpDateTimeModelBinder.cs index 1e31da90f8..1916b9aa16 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ModelBinding/AbpDateTimeModelBinder.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ModelBinding/AbpDateTimeModelBinder.cs @@ -24,7 +24,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding public async Task BindModelAsync(ModelBindingContext bindingContext) { - await _simpleTypeModelBinder.BindModelAsync(bindingContext).ConfigureAwait(false); + await _simpleTypeModelBinder.BindModelAsync(bindingContext); if (!bindingContext.Result.IsModelSet) { diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowActionFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowActionFilter.cs index 56153fedea..552ce7e04e 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowActionFilter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowActionFilter.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Uow { if (!context.ActionDescriptor.IsControllerAction()) { - await next().ConfigureAwait(false); + await next(); return; } @@ -39,7 +39,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Uow if (unitOfWorkAttr?.IsDisabled == true) { - await next().ConfigureAwait(false); + await next(); return; } @@ -48,10 +48,10 @@ namespace Volo.Abp.AspNetCore.Mvc.Uow //Trying to begin a reserved UOW by AbpUnitOfWorkMiddleware if (_unitOfWorkManager.TryBeginReserved(AbpUnitOfWorkMiddleware.UnitOfWorkReservationName, options)) { - var result = await next().ConfigureAwait(false); + var result = await next(); if (!Succeed(result)) { - await RollbackAsync(context).ConfigureAwait(false); + await RollbackAsync(context); } return; @@ -60,10 +60,10 @@ namespace Volo.Abp.AspNetCore.Mvc.Uow //Begin a new, independent unit of work using (var uow = _unitOfWorkManager.Begin(options)) { - var result = await next().ConfigureAwait(false); + var result = await next(); if (Succeed(result)) { - await uow.CompleteAsync(context.HttpContext.RequestAborted).ConfigureAwait(false); + await uow.CompleteAsync(context.HttpContext.RequestAborted); } } } @@ -89,7 +89,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Uow var currentUow = _unitOfWorkManager.Current; if (currentUow != null) { - await currentUow.RollbackAsync(context.HttpContext.RequestAborted).ConfigureAwait(false); + await currentUow.RollbackAsync(context.HttpContext.RequestAborted); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Validation/AbpValidationActionFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Validation/AbpValidationActionFilter.cs index ae047fa30a..8fe699f4ba 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Validation/AbpValidationActionFilter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Validation/AbpValidationActionFilter.cs @@ -21,12 +21,12 @@ namespace Volo.Abp.AspNetCore.Mvc.Validation if (!context.ActionDescriptor.IsControllerAction() || !context.ActionDescriptor.HasObjectResult()) { - await next().ConfigureAwait(false); + await next(); return; } _validator.Validate(context.ModelState); - await next().ConfigureAwait(false); + await next(); } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogMiddleware.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogMiddleware.cs index 8a8f032766..be84d552ad 100644 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogMiddleware.cs @@ -62,7 +62,7 @@ namespace Volo.Abp.AspNetCore.Serilog using (LogContext.Push(enrichers.ToArray())) { - await next(context).ConfigureAwait(false); + await next(context); } } } diff --git a/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/AbpRequestLocalizationMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/AbpRequestLocalizationMiddleware.cs index 32fed42dc2..2a8c48b1c5 100644 --- a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/AbpRequestLocalizationMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/AbpRequestLocalizationMiddleware.cs @@ -27,11 +27,11 @@ namespace Microsoft.AspNetCore.RequestLocalization next, new OptionsWrapper( await _requestLocalizationOptionsProvider.GetLocalizationOptionsAsync() -.ConfigureAwait(false)), +), _loggerFactory ); - await middleware.Invoke(context).ConfigureAwait(false); + await middleware.Invoke(context); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/DefaultAbpRequestLocalizationOptionsProvider.cs b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/DefaultAbpRequestLocalizationOptionsProvider.cs index 51932953ed..c30eafb9d0 100644 --- a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/DefaultAbpRequestLocalizationOptionsProvider.cs +++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/DefaultAbpRequestLocalizationOptionsProvider.cs @@ -36,15 +36,15 @@ namespace Microsoft.AspNetCore.RequestLocalization { if (_requestLocalizationOptions == null) { - using (await _syncSemaphore.LockAsync().ConfigureAwait(false)) + using (await _syncSemaphore.LockAsync()) { using (var serviceScope = _serviceProviderFactory.CreateScope()) { var languageProvider = serviceScope.ServiceProvider.GetRequiredService(); var settingProvider = serviceScope.ServiceProvider.GetRequiredService(); - var languages = await languageProvider.GetLanguagesAsync().ConfigureAwait(false); - var defaultLanguage = await settingProvider.GetOrNullAsync(LocalizationSettingNames.DefaultLanguage).ConfigureAwait(false); + var languages = await languageProvider.GetLanguagesAsync(); + var defaultLanguage = await settingProvider.GetOrNullAsync(LocalizationSettingNames.DefaultLanguage); var options = !languages.Any() ? new RequestLocalizationOptions() diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs index d56c29709a..78ae28e63f 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs @@ -30,7 +30,7 @@ namespace Volo.Abp.AspNetCore.Auditing { if (!ShouldWriteAuditLog(context)) { - await next(context).ConfigureAwait(false); + await next(context); return; } @@ -38,11 +38,11 @@ namespace Volo.Abp.AspNetCore.Auditing { try { - await next(context).ConfigureAwait(false); + await next(context); } finally { - await scope.SaveAsync().ConfigureAwait(false); + await scope.SaveAsync(); } } } diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/ExceptionHandling/AbpExceptionHandlingMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/ExceptionHandling/AbpExceptionHandlingMiddleware.cs index d9954dc424..cdd921dae4 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/ExceptionHandling/AbpExceptionHandlingMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/ExceptionHandling/AbpExceptionHandlingMiddleware.cs @@ -29,7 +29,7 @@ namespace Volo.Abp.AspNetCore.ExceptionHandling { try { - await next(context).ConfigureAwait(false); + await next(context); } catch (Exception ex) { @@ -44,7 +44,7 @@ namespace Volo.Abp.AspNetCore.ExceptionHandling { if (actionInfo.IsObjectResult) //TODO: Align with AbpExceptionFilter.ShouldHandleException! { - await HandleAndWrapException(context, ex).ConfigureAwait(false); + await HandleAndWrapException(context, ex); return; } } @@ -72,7 +72,7 @@ namespace Volo.Abp.AspNetCore.ExceptionHandling errorInfoConverter.Convert(exception) ) ) - ).ConfigureAwait(false); + ); } private Task ClearCacheHeaders(object state) diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Tracing/AbpCorrelationIdMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Tracing/AbpCorrelationIdMiddleware.cs index 068adffefb..b3ee565100 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Tracing/AbpCorrelationIdMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Tracing/AbpCorrelationIdMiddleware.cs @@ -24,7 +24,7 @@ namespace Volo.Abp.AspNetCore.Tracing try { - await next(context).ConfigureAwait(false); + await next(context); } finally { diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AbpUnitOfWorkMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AbpUnitOfWorkMiddleware.cs index 46572b4450..c9ac1be509 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AbpUnitOfWorkMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AbpUnitOfWorkMiddleware.cs @@ -20,8 +20,8 @@ namespace Volo.Abp.AspNetCore.Uow { using (var uow = _unitOfWorkManager.Reserve(UnitOfWorkReservationName)) { - await next(context).ConfigureAwait(false); - await uow.CompleteAsync(context.RequestAborted).ConfigureAwait(false); + await next(context); + await uow.CompleteAsync(context.RequestAborted); } } } diff --git a/framework/src/Volo.Abp.Auditing/FodyWeavers.xml b/framework/src/Volo.Abp.Auditing/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Auditing/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Auditing/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingInterceptor.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingInterceptor.cs index a49145298a..5a401a218e 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingInterceptor.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingInterceptor.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.Auditing { if (!ShouldIntercept(invocation, out var auditLog, out var auditLogAction)) { - await invocation.ProceedAsync().ConfigureAwait(false); + await invocation.ProceedAsync(); return; } @@ -30,7 +30,7 @@ namespace Volo.Abp.Auditing try { - await invocation.ProceedAsync().ConfigureAwait(false); + await invocation.ProceedAsync(); } catch (Exception ex) { diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingManager.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingManager.cs index 25738843c0..070684f48a 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingManager.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingManager.cs @@ -116,7 +116,7 @@ namespace Volo.Abp.Auditing if (ShouldSave(saveHandle.AuditLog)) { - await _auditingStore.SaveAsync(saveHandle.AuditLog).ConfigureAwait(false); + await _auditingStore.SaveAsync(saveHandle.AuditLog); } } @@ -152,7 +152,7 @@ namespace Volo.Abp.Auditing public async Task SaveAsync() { - await _auditingManager.SaveAsync(this).ConfigureAwait(false); + await _auditingManager.SaveAsync(this); } public void Dispose() diff --git a/framework/src/Volo.Abp.Authorization/FodyWeavers.xml b/framework/src/Volo.Abp.Authorization/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Authorization/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Authorization/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Authorization/Microsoft/AspNetCore/Authorization/AbpAuthorizationServiceExtensions.cs b/framework/src/Volo.Abp.Authorization/Microsoft/AspNetCore/Authorization/AbpAuthorizationServiceExtensions.cs index ef033170f6..45650b06a4 100644 --- a/framework/src/Volo.Abp.Authorization/Microsoft/AspNetCore/Authorization/AbpAuthorizationServiceExtensions.cs +++ b/framework/src/Volo.Abp.Authorization/Microsoft/AspNetCore/Authorization/AbpAuthorizationServiceExtensions.cs @@ -13,7 +13,7 @@ namespace Microsoft.AspNetCore.Authorization authorizationService, null, policyName - ).ConfigureAwait(false); + ); } public static async Task AuthorizeAsync(this IAuthorizationService authorizationService, object resource, IAuthorizationRequirement requirement) @@ -22,7 +22,7 @@ namespace Microsoft.AspNetCore.Authorization authorizationService.AsAbpAuthorizationService().CurrentPrincipal, resource, requirement - ).ConfigureAwait(false); + ); } public static async Task AuthorizeAsync(this IAuthorizationService authorizationService, object resource, AuthorizationPolicy policy) @@ -31,16 +31,16 @@ namespace Microsoft.AspNetCore.Authorization authorizationService.AsAbpAuthorizationService().CurrentPrincipal, resource, policy - ).ConfigureAwait(false); + ); } public static async Task AuthorizeAsync(this IAuthorizationService authorizationService, AuthorizationPolicy policy) { return await AuthorizeAsync( - authorizationService, + authorizationService, null, policy - ).ConfigureAwait(false); + ); } public static async Task AuthorizeAsync(this IAuthorizationService authorizationService, object resource, IEnumerable requirements) @@ -49,7 +49,7 @@ namespace Microsoft.AspNetCore.Authorization authorizationService.AsAbpAuthorizationService().CurrentPrincipal, resource, requirements - ).ConfigureAwait(false); + ); } public static async Task AuthorizeAsync(this IAuthorizationService authorizationService, object resource, string policyName) @@ -58,42 +58,42 @@ namespace Microsoft.AspNetCore.Authorization authorizationService.AsAbpAuthorizationService().CurrentPrincipal, resource, policyName - ).ConfigureAwait(false); + ); } public static async Task IsGrantedAsync(this IAuthorizationService authorizationService, string policyName) { - return (await authorizationService.AuthorizeAsync(policyName).ConfigureAwait(false)).Succeeded; + return (await authorizationService.AuthorizeAsync(policyName)).Succeeded; } public static async Task IsGrantedAsync(this IAuthorizationService authorizationService, object resource, IAuthorizationRequirement requirement) { - return (await authorizationService.AuthorizeAsync(resource, requirement).ConfigureAwait(false)).Succeeded; + return (await authorizationService.AuthorizeAsync(resource, requirement)).Succeeded; } public static async Task IsGrantedAsync(this IAuthorizationService authorizationService, object resource, AuthorizationPolicy policy) { - return (await authorizationService.AuthorizeAsync(resource, policy).ConfigureAwait(false)).Succeeded; + return (await authorizationService.AuthorizeAsync(resource, policy)).Succeeded; } public static async Task IsGrantedAsync(this IAuthorizationService authorizationService, AuthorizationPolicy policy) { - return (await authorizationService.AuthorizeAsync(policy).ConfigureAwait(false)).Succeeded; + return (await authorizationService.AuthorizeAsync(policy)).Succeeded; } public static async Task IsGrantedAsync(this IAuthorizationService authorizationService, object resource, IEnumerable requirements) { - return (await authorizationService.AuthorizeAsync(resource, requirements).ConfigureAwait(false)).Succeeded; + return (await authorizationService.AuthorizeAsync(resource, requirements)).Succeeded; } public static async Task IsGrantedAsync(this IAuthorizationService authorizationService, object resource, string policyName) { - return (await authorizationService.AuthorizeAsync(resource, policyName).ConfigureAwait(false)).Succeeded; + return (await authorizationService.AuthorizeAsync(resource, policyName)).Succeeded; } public static async Task CheckAsync(this IAuthorizationService authorizationService, string policyName) { - if (!await authorizationService.IsGrantedAsync(policyName).ConfigureAwait(false)) + if (!await authorizationService.IsGrantedAsync(policyName)) { throw new AbpAuthorizationException("Authorization failed! Given policy has not granted: " + policyName); } @@ -101,7 +101,7 @@ namespace Microsoft.AspNetCore.Authorization public static async Task CheckAsync(this IAuthorizationService authorizationService, object resource, IAuthorizationRequirement requirement) { - if (!await authorizationService.IsGrantedAsync(resource, requirement).ConfigureAwait(false)) + if (!await authorizationService.IsGrantedAsync(resource, requirement)) { throw new AbpAuthorizationException("Authorization failed! Given requirement has not granted for given resource: " + resource); } @@ -109,7 +109,7 @@ namespace Microsoft.AspNetCore.Authorization public static async Task CheckAsync(this IAuthorizationService authorizationService, object resource, AuthorizationPolicy policy) { - if (!await authorizationService.IsGrantedAsync(resource, policy).ConfigureAwait(false)) + if (!await authorizationService.IsGrantedAsync(resource, policy)) { throw new AbpAuthorizationException("Authorization failed! Given policy has not granted for given resource: " + resource); } @@ -117,7 +117,7 @@ namespace Microsoft.AspNetCore.Authorization public static async Task CheckAsync(this IAuthorizationService authorizationService, AuthorizationPolicy policy) { - if (!await authorizationService.IsGrantedAsync(policy).ConfigureAwait(false)) + if (!await authorizationService.IsGrantedAsync(policy)) { throw new AbpAuthorizationException("Authorization failed! Given policy has not granted."); } @@ -125,7 +125,7 @@ namespace Microsoft.AspNetCore.Authorization public static async Task CheckAsync(this IAuthorizationService authorizationService, object resource, IEnumerable requirements) { - if (!await authorizationService.IsGrantedAsync(resource, requirements).ConfigureAwait(false)) + if (!await authorizationService.IsGrantedAsync(resource, requirements)) { throw new AbpAuthorizationException("Authorization failed! Given requirements have not granted for given resource: " + resource); } @@ -133,7 +133,7 @@ namespace Microsoft.AspNetCore.Authorization public static async Task CheckAsync(this IAuthorizationService authorizationService, object resource, string policyName) { - if (!await authorizationService.IsGrantedAsync(resource, policyName).ConfigureAwait(false)) + if (!await authorizationService.IsGrantedAsync(resource, policyName)) { throw new AbpAuthorizationException("Authorization failed! Given polist has not granted for given resource: " + resource); } diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationPolicyProvider.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationPolicyProvider.cs index 61454b76e1..f636877fc1 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationPolicyProvider.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationPolicyProvider.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.Authorization public override async Task GetPolicyAsync(string policyName) { - var policy = await base.GetPolicyAsync(policyName).ConfigureAwait(false); + var policy = await base.GetPolicyAsync(policyName); if (policy != null) { return policy; diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AuthorizationInterceptor.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AuthorizationInterceptor.cs index 5c7afbd7c7..44466884dd 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AuthorizationInterceptor.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AuthorizationInterceptor.cs @@ -15,8 +15,8 @@ namespace Volo.Abp.Authorization public override async Task InterceptAsync(IAbpMethodInvocation invocation) { - await AuthorizeAsync(invocation).ConfigureAwait(false); - await invocation.ProceedAsync().ConfigureAwait(false); + await AuthorizeAsync(invocation); + await invocation.ProceedAsync(); } protected virtual async Task AuthorizeAsync(IAbpMethodInvocation invocation) @@ -25,7 +25,7 @@ namespace Volo.Abp.Authorization new MethodInvocationAuthorizationContext( invocation.Method ) - ).ConfigureAwait(false); + ); } } } diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/MethodInvocationAuthorizationService.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/MethodInvocationAuthorizationService.cs index 1e063f1f0e..56baba8ce4 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/MethodInvocationAuthorizationService.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/MethodInvocationAuthorizationService.cs @@ -34,7 +34,7 @@ namespace Volo.Abp.Authorization foreach (var authorizationAttribute in GetAuthorizationDataAttributes(context.Method)) { - await CheckAsync(authorizationAttribute).ConfigureAwait(false); + await CheckAsync(authorizationAttribute); } } @@ -74,7 +74,7 @@ namespace Volo.Abp.Authorization } else { - await _authorizationService.CheckAsync(authorizationAttribute.Policy).ConfigureAwait(false); + await _authorizationService.CheckAsync(authorizationAttribute.Policy); } //TODO: What about roles and other props? diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/PermissionRequirementHandler.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/PermissionRequirementHandler.cs index 89c0a1f71b..d4ec7c1d3c 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/PermissionRequirementHandler.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/PermissionRequirementHandler.cs @@ -17,7 +17,7 @@ namespace Volo.Abp.Authorization AuthorizationHandlerContext context, PermissionRequirement requirement) { - if (await _permissionChecker.IsGrantedAsync(context.User, requirement.PermissionName).ConfigureAwait(false)) + if (await _permissionChecker.IsGrantedAsync(context.User, requirement.PermissionName)) { context.Succeed(requirement); } diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/ClientPermissionValueProvider.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/ClientPermissionValueProvider.cs index 33aeb568b2..38c29b1ddf 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/ClientPermissionValueProvider.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/ClientPermissionValueProvider.cs @@ -24,8 +24,8 @@ namespace Volo.Abp.Authorization.Permissions return PermissionGrantResult.Undefined; } - return await PermissionStore.IsGrantedAsync(context.Permission.Name, Name, clientId) -.ConfigureAwait(false) ? PermissionGrantResult.Granted + return await PermissionStore.IsGrantedAsync(context.Permission.Name, Name, clientId) + ? PermissionGrantResult.Granted : PermissionGrantResult.Undefined; } } diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionChecker.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionChecker.cs index 165a354743..51c8530ee6 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionChecker.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionChecker.cs @@ -29,7 +29,7 @@ namespace Volo.Abp.Authorization.Permissions public virtual async Task IsGrantedAsync(string name) { - return await IsGrantedAsync(PrincipalAccessor.Principal, name).ConfigureAwait(false); + return await IsGrantedAsync(PrincipalAccessor.Principal, name); } public virtual async Task IsGrantedAsync(ClaimsPrincipal claimsPrincipal, string name) @@ -56,7 +56,7 @@ namespace Volo.Abp.Authorization.Permissions continue; } - var result = await provider.CheckAsync(context).ConfigureAwait(false); + var result = await provider.CheckAsync(context); if (result == PermissionGrantResult.Granted) { diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RolePermissionValueProvider.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RolePermissionValueProvider.cs index f5322b4f12..b98867a78e 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RolePermissionValueProvider.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RolePermissionValueProvider.cs @@ -27,7 +27,7 @@ namespace Volo.Abp.Authorization.Permissions foreach (var role in roles) { - if (await PermissionStore.IsGrantedAsync(context.Permission.Name, Name, role).ConfigureAwait(false)) + if (await PermissionStore.IsGrantedAsync(context.Permission.Name, Name, role)) { return PermissionGrantResult.Granted; } diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/UserPermissionValueProvider.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/UserPermissionValueProvider.cs index 49a1eec366..c7f327c40c 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/UserPermissionValueProvider.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/UserPermissionValueProvider.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.Authorization.Permissions } return await PermissionStore.IsGrantedAsync(context.Permission.Name, Name, userId) -.ConfigureAwait(false) ? PermissionGrantResult.Granted + ? PermissionGrantResult.Granted : PermissionGrantResult.Undefined; } } diff --git a/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xml b/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Autofac/FodyWeavers.xml b/framework/src/Volo.Abp.Autofac/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Autofac/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Autofac/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xml +++ b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobExecuter.cs b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobExecuter.cs index c9b5790003..d4ce5cd03a 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobExecuter.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/BackgroundJobExecuter.cs @@ -40,7 +40,7 @@ namespace Volo.Abp.BackgroundJobs { if (jobExecuteMethod.Name == nameof(IAsyncBackgroundJob.ExecuteAsync)) { - await ((Task) jobExecuteMethod.Invoke(job, new[] {context.JobArgs})).ConfigureAwait(false); + await ((Task) jobExecuteMethod.Invoke(job, new[] {context.JobArgs})); } else { diff --git a/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xml +++ b/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xml +++ b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs index fb18ca00f9..4cb4f04a09 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs @@ -72,11 +72,11 @@ namespace Volo.Abp.BackgroundJobs.RabbitMQ { CheckDisposed(); - using (await SyncObj.LockAsync().ConfigureAwait(false)) + using (await SyncObj.LockAsync()) { - await EnsureInitializedAsync().ConfigureAwait(false); + await EnsureInitializedAsync(); - await PublishAsync(args, priority, delay).ConfigureAwait(false); + await PublishAsync(args, priority, delay); return null; } @@ -91,9 +91,9 @@ namespace Volo.Abp.BackgroundJobs.RabbitMQ return; } - using (await SyncObj.LockAsync().ConfigureAwait(false)) + using (await SyncObj.LockAsync()) { - await EnsureInitializedAsync().ConfigureAwait(false); + await EnsureInitializedAsync(); } } diff --git a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueueManager.cs b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueueManager.cs index 6c50460003..f07564ad5a 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueueManager.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueueManager.cs @@ -40,7 +40,7 @@ namespace Volo.Abp.BackgroundJobs.RabbitMQ foreach (var jobConfiguration in Options.GetJobs()) { var jobQueue = (IRunnable)ServiceProvider.GetRequiredService(typeof(IJobQueue<>).MakeGenericType(jobConfiguration.ArgsType)); - await jobQueue.StartAsync(cancellationToken).ConfigureAwait(false); + await jobQueue.StartAsync(cancellationToken); JobQueues[jobConfiguration.JobName] = jobQueue; } } @@ -49,7 +49,7 @@ namespace Volo.Abp.BackgroundJobs.RabbitMQ { foreach (var jobQueue in JobQueues.Values) { - await jobQueue.StopAsync(cancellationToken).ConfigureAwait(false); + await jobQueue.StopAsync(cancellationToken); } JobQueues.Clear(); @@ -64,7 +64,7 @@ namespace Volo.Abp.BackgroundJobs.RabbitMQ return (IJobQueue)jobQueue; } - using (await SyncSemaphore.LockAsync().ConfigureAwait(false)) + using (await SyncSemaphore.LockAsync()) { if (JobQueues.TryGetValue(jobConfiguration.JobName, out jobQueue)) { @@ -74,7 +74,7 @@ namespace Volo.Abp.BackgroundJobs.RabbitMQ jobQueue = (IJobQueue)ServiceProvider .GetRequiredService(typeof(IJobQueue<>).MakeGenericType(typeof(TArgs))); - await jobQueue.StartAsync().ConfigureAwait(false); + await jobQueue.StartAsync(); JobQueues.TryAdd(jobConfiguration.JobName, jobQueue); diff --git a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/RabbitMqBackgroundJobManager.cs b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/RabbitMqBackgroundJobManager.cs index 8945beb6cb..f70d553128 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/RabbitMqBackgroundJobManager.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/RabbitMqBackgroundJobManager.cs @@ -19,8 +19,8 @@ namespace Volo.Abp.BackgroundJobs.RabbitMQ BackgroundJobPriority priority = BackgroundJobPriority.Normal, TimeSpan? delay = null) { - var jobQueue = await _jobQueueManager.GetAsync().ConfigureAwait(false); - return await jobQueue.EnqueueAsync(args, priority, delay).ConfigureAwait(false); + var jobQueue = await _jobQueueManager.GetAsync(); + return await jobQueue.EnqueueAsync(args, priority, delay); } } } diff --git a/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xml +++ b/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs b/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs index a16690f346..fdf0b8c90d 100644 --- a/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs +++ b/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/BackgroundJobWorker.cs @@ -34,7 +34,7 @@ namespace Volo.Abp.BackgroundJobs { var store = workerContext.ServiceProvider.GetRequiredService(); - var waitingJobs = await store.GetWaitingJobsAsync(WorkerOptions.MaxJobFetchCount).ConfigureAwait(false); + var waitingJobs = await store.GetWaitingJobsAsync(WorkerOptions.MaxJobFetchCount); if (!waitingJobs.Any()) { @@ -58,9 +58,9 @@ namespace Volo.Abp.BackgroundJobs try { - await jobExecuter.ExecuteAsync(context).ConfigureAwait(false); + await jobExecuter.ExecuteAsync(context); - await store.DeleteAsync(jobInfo.Id).ConfigureAwait(false); + await store.DeleteAsync(jobInfo.Id); } catch (BackgroundJobExecutionException) { @@ -75,14 +75,14 @@ namespace Volo.Abp.BackgroundJobs jobInfo.IsAbandoned = true; } - await TryUpdateAsync(store, jobInfo).ConfigureAwait(false); + await TryUpdateAsync(store, jobInfo); } } catch (Exception ex) { Logger.LogException(ex); jobInfo.IsAbandoned = true; - await TryUpdateAsync(store, jobInfo).ConfigureAwait(false); + await TryUpdateAsync(store, jobInfo); } } } @@ -91,7 +91,7 @@ namespace Volo.Abp.BackgroundJobs { try { - await store.UpdateAsync(jobInfo).ConfigureAwait(false); + await store.UpdateAsync(jobInfo); } catch (Exception updateEx) { diff --git a/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/DefaultBackgroundJobManager.cs b/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/DefaultBackgroundJobManager.cs index 266bb37fde..0994029f70 100644 --- a/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/DefaultBackgroundJobManager.cs +++ b/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/DefaultBackgroundJobManager.cs @@ -32,7 +32,7 @@ namespace Volo.Abp.BackgroundJobs public virtual async Task EnqueueAsync(TArgs args, BackgroundJobPriority priority = BackgroundJobPriority.Normal, TimeSpan? delay = null) { var jobName = BackgroundJobNameAttribute.GetName(); - var jobId = await EnqueueAsync(jobName, args, priority, delay).ConfigureAwait(false); + var jobId = await EnqueueAsync(jobName, args, priority, delay); return jobId.ToString(); } @@ -53,7 +53,7 @@ namespace Volo.Abp.BackgroundJobs jobInfo.NextTryTime = Clock.Now.Add(delay.Value); } - await Store.InsertAsync(jobInfo).ConfigureAwait(false); + await Store.InsertAsync(jobInfo); return jobInfo.Id; } diff --git a/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xml +++ b/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/AsyncPeriodicBackgroundWorkerBase.cs b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/AsyncPeriodicBackgroundWorkerBase.cs index cd8474e654..62da163eb9 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/AsyncPeriodicBackgroundWorkerBase.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/AsyncPeriodicBackgroundWorkerBase.cs @@ -23,14 +23,14 @@ namespace Volo.Abp.BackgroundWorkers public override async Task StartAsync(CancellationToken cancellationToken = default) { - await base.StartAsync(cancellationToken).ConfigureAwait(false); + await base.StartAsync(cancellationToken); Timer.Start(cancellationToken); } public override async Task StopAsync(CancellationToken cancellationToken = default) { Timer.Stop(cancellationToken); - await base.StopAsync(cancellationToken).ConfigureAwait(false); + await base.StopAsync(cancellationToken); } private void Timer_Elapsed(object sender, System.EventArgs e) diff --git a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkerManager.cs b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkerManager.cs index 27a0b05173..a8b884e096 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkerManager.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkerManager.cs @@ -56,7 +56,7 @@ namespace Volo.Abp.BackgroundWorkers foreach (var worker in _backgroundWorkers) { - await worker.StartAsync(cancellationToken).ConfigureAwait(false); + await worker.StartAsync(cancellationToken); } } @@ -66,7 +66,7 @@ namespace Volo.Abp.BackgroundWorkers foreach (var worker in _backgroundWorkers) { - await worker.StopAsync(cancellationToken).ConfigureAwait(false); + await worker.StopAsync(cancellationToken); } } } diff --git a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/PeriodicBackgroundWorkerBase.cs b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/PeriodicBackgroundWorkerBase.cs index 863657ab79..091bcc917f 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/PeriodicBackgroundWorkerBase.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/PeriodicBackgroundWorkerBase.cs @@ -26,14 +26,14 @@ namespace Volo.Abp.BackgroundWorkers public override async Task StartAsync(CancellationToken cancellationToken = default) { - await base.StartAsync(cancellationToken).ConfigureAwait(false); + await base.StartAsync(cancellationToken); Timer.Start(cancellationToken); } public override async Task StopAsync(CancellationToken cancellationToken = default) { Timer.Stop(cancellationToken); - await base.StopAsync(cancellationToken).ConfigureAwait(false); + await base.StopAsync(cancellationToken); } private void Timer_Elapsed(object sender, System.EventArgs e) diff --git a/framework/src/Volo.Abp.Caching/FodyWeavers.xml b/framework/src/Volo.Abp.Caching/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Caching/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Caching/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs b/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs index daa64060f7..c23fb05aa7 100644 --- a/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs +++ b/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs @@ -41,7 +41,7 @@ namespace Volo.Abp.Caching /// The type of cache key being used. public class DistributedCache : IDistributedCache where TCacheItem : class - { + { public ILogger> Logger { get; set; } protected string CacheName { get; set; } @@ -124,7 +124,7 @@ namespace Volo.Abp.Caching /// Indicates to throw or hide the exceptions for the distributed cache. /// The cache item, or null. public virtual TCacheItem Get( - TCacheKey key, + TCacheKey key, bool? hideErrors = null) { hideErrors = hideErrors ?? _distributedCacheOption.HideErrors; @@ -162,8 +162,8 @@ namespace Volo.Abp.Caching /// The for the task. /// The cache item, or null. public virtual async Task GetAsync( - TCacheKey key, - bool? hideErrors = null, + TCacheKey key, + bool? hideErrors = null, CancellationToken token = default) { hideErrors = hideErrors ?? _distributedCacheOption.HideErrors; @@ -175,7 +175,7 @@ namespace Volo.Abp.Caching cachedBytes = await Cache.GetAsync( NormalizeKey(key), CancellationTokenProvider.FallbackToProvider(token) - ).ConfigureAwait(false); + ); } catch (Exception ex) { @@ -206,9 +206,9 @@ namespace Volo.Abp.Caching /// Indicates to throw or hide the exceptions for the distributed cache. /// The cache item. public virtual TCacheItem GetOrAdd( - TCacheKey key, - Func factory, - Func optionsFactory = null, + TCacheKey key, + Func factory, + Func optionsFactory = null, bool? hideErrors = null) { var value = Get(key, hideErrors); @@ -243,29 +243,29 @@ namespace Volo.Abp.Caching /// The for the task. /// The cache item. public virtual async Task GetOrAddAsync( - TCacheKey key, - Func> factory, - Func optionsFactory = null, - bool? hideErrors = null, + TCacheKey key, + Func> factory, + Func optionsFactory = null, + bool? hideErrors = null, CancellationToken token = default) { token = CancellationTokenProvider.FallbackToProvider(token); - var value = await GetAsync(key, hideErrors, token).ConfigureAwait(false); + var value = await GetAsync(key, hideErrors, token); if (value != null) { return value; } - using (await SyncSemaphore.LockAsync(token).ConfigureAwait(false)) + using (await SyncSemaphore.LockAsync(token)) { - value = await GetAsync(key, hideErrors, token).ConfigureAwait(false); + value = await GetAsync(key, hideErrors, token); if (value != null) { return value; } - value = await factory().ConfigureAwait(false); - await SetAsync(key, value, optionsFactory?.Invoke(), hideErrors, token).ConfigureAwait(false); + value = await factory(); + await SetAsync(key, value, optionsFactory?.Invoke(), hideErrors, token); } return value; @@ -279,9 +279,9 @@ namespace Volo.Abp.Caching /// The cache options for the value. /// Indicates to throw or hide the exceptions for the distributed cache. public virtual void Set( - TCacheKey key, - TCacheItem value, - DistributedCacheEntryOptions options = null, + TCacheKey key, + TCacheItem value, + DistributedCacheEntryOptions options = null, bool? hideErrors = null) { hideErrors = hideErrors ?? _distributedCacheOption.HideErrors; @@ -316,10 +316,10 @@ namespace Volo.Abp.Caching /// The for the task. /// The indicating that the operation is asynchronous. public virtual async Task SetAsync( - TCacheKey key, - TCacheItem value, - DistributedCacheEntryOptions options = null, - bool? hideErrors = null, + TCacheKey key, + TCacheItem value, + DistributedCacheEntryOptions options = null, + bool? hideErrors = null, CancellationToken token = default) { hideErrors = hideErrors ?? _distributedCacheOption.HideErrors; @@ -331,7 +331,7 @@ namespace Volo.Abp.Caching Serializer.Serialize(value), options ?? DefaultCacheOptions, CancellationTokenProvider.FallbackToProvider(token) - ).ConfigureAwait(false); + ); } catch (Exception ex) { @@ -351,7 +351,7 @@ namespace Volo.Abp.Caching /// The key of cached item to be retrieved from the cache. /// Indicates to throw or hide the exceptions for the distributed cache. public virtual void Refresh( - TCacheKey key, bool? + TCacheKey key, bool? hideErrors = null) { hideErrors = hideErrors ?? _distributedCacheOption.HideErrors; @@ -379,15 +379,15 @@ namespace Volo.Abp.Caching /// The for the task. /// The indicating that the operation is asynchronous. public virtual async Task RefreshAsync( - TCacheKey key, - bool? hideErrors = null, + TCacheKey key, + bool? hideErrors = null, CancellationToken token = default) { hideErrors = hideErrors ?? _distributedCacheOption.HideErrors; try { - await Cache.RefreshAsync(NormalizeKey(key), CancellationTokenProvider.FallbackToProvider(token)).ConfigureAwait(false); + await Cache.RefreshAsync(NormalizeKey(key), CancellationTokenProvider.FallbackToProvider(token)); } catch (Exception ex) { @@ -407,7 +407,7 @@ namespace Volo.Abp.Caching /// The key of cached item to be retrieved from the cache. /// Indicates to throw or hide the exceptions for the distributed cache. public virtual void Remove( - TCacheKey key, + TCacheKey key, bool? hideErrors = null) { hideErrors = hideErrors ?? _distributedCacheOption.HideErrors; @@ -435,15 +435,15 @@ namespace Volo.Abp.Caching /// The for the task. /// The indicating that the operation is asynchronous. public virtual async Task RemoveAsync( - TCacheKey key, - bool? hideErrors = null, + TCacheKey key, + bool? hideErrors = null, CancellationToken token = default) { hideErrors = hideErrors ?? _distributedCacheOption.HideErrors; try { - await Cache.RemoveAsync(NormalizeKey(key), CancellationTokenProvider.FallbackToProvider(token)).ConfigureAwait(false); + await Cache.RemoveAsync(NormalizeKey(key), CancellationTokenProvider.FallbackToProvider(token)); } catch (Exception ex) { @@ -455,6 +455,6 @@ namespace Volo.Abp.Caching throw; } - } - } + } + } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xml b/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAbpMethodInvocationAdapter.cs b/framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAbpMethodInvocationAdapter.cs index 7fbc9fdf0a..89f3713521 100644 --- a/framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAbpMethodInvocationAdapter.cs +++ b/framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAbpMethodInvocationAdapter.cs @@ -20,7 +20,7 @@ namespace Volo.Abp.Castle.DynamicProxy public override async Task ProceedAsync() { - await Proceed(Invocation, ProceedInfo).ConfigureAwait(false); + await Proceed(Invocation, ProceedInfo); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAsyncAbpInterceptorAdapter.cs b/framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAsyncAbpInterceptorAdapter.cs index bd379f442d..8a0c4fdd45 100644 --- a/framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAsyncAbpInterceptorAdapter.cs +++ b/framework/src/Volo.Abp.Castle.Core/Volo/Abp/Castle/DynamicProxy/CastleAsyncAbpInterceptorAdapter.cs @@ -19,7 +19,7 @@ namespace Volo.Abp.Castle.DynamicProxy { await _abpInterceptor.InterceptAsync( new CastleAbpMethodInvocationAdapter(invocation, proceedInfo, proceed) - ).ConfigureAwait(false); + ); } protected override async Task InterceptAsync(IInvocation invocation, IInvocationProceedInfo proceedInfo, Func> proceed) @@ -28,7 +28,7 @@ namespace Volo.Abp.Castle.DynamicProxy await _abpInterceptor.InterceptAsync( adapter - ).ConfigureAwait(false); + ); return (TResult)adapter.ReturnValue; } diff --git a/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xml b/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs index a8ac0e0357..8bf8f1c275 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs @@ -35,7 +35,7 @@ namespace Volo.Abp.Cli.Auth configuration["[o]abp-organization-name"] = organizationName; } - var accessToken = await AuthenticationService.GetAccessTokenAsync(configuration).ConfigureAwait(false); + var accessToken = await AuthenticationService.GetAccessTokenAsync(configuration); File.WriteAllText(CliPaths.AccessToken, accessToken, Encoding.UTF8); } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs index b53327cba3..436e169aad 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs @@ -41,7 +41,7 @@ namespace Volo.Abp.Cli { Logger.LogInformation("ABP CLI (https://abp.io)"); - await CheckCliVersionAsync().ConfigureAwait(false); + await CheckCliVersionAsync(); var commandLineArgs = CommandLineArgumentParser.Parse(args); var commandType = CommandSelector.Select(commandLineArgs); @@ -52,7 +52,7 @@ namespace Volo.Abp.Cli try { - await command.ExecuteAsync(commandLineArgs).ConfigureAwait(false); + await command.ExecuteAsync(commandLineArgs); } catch (CliUsageException usageException) { @@ -69,14 +69,14 @@ namespace Volo.Abp.Cli { var assembly = typeof(CliService).Assembly; var toolPath = GetToolPath(assembly); - var currentCliVersion = await GetCurrentCliVersion(assembly).ConfigureAwait(false); + var currentCliVersion = await GetCurrentCliVersion(assembly); var updateChannel = GetUpdateChannel(currentCliVersion); Logger.LogInformation($"Version {currentCliVersion} ({updateChannel} channel)"); try { - var latestVersion = await GetLatestVersion(updateChannel).ConfigureAwait(false); + var latestVersion = await GetLatestVersion(updateChannel); if (latestVersion != null && latestVersion > currentCliVersion) { @@ -106,7 +106,7 @@ namespace Volo.Abp.Cli var consoleOutput = new StringReader(CmdHelper.RunCmdAndGetOutput($"dotnet tool list -g")); string line; - while ((line = await consoleOutput.ReadLineAsync().ConfigureAwait(false)) != null) + while ((line = await consoleOutput.ReadLineAsync()) != null) { if (line.StartsWith("volo.abp.cli", StringComparison.InvariantCultureIgnoreCase)) { @@ -155,13 +155,13 @@ namespace Volo.Abp.Cli switch (updateChannel) { case UpdateChannel.Stable: - return await NuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Cli").ConfigureAwait(false); + return await NuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Cli"); case UpdateChannel.Prerelease: - return await NuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Cli", includePreviews: true).ConfigureAwait(false); + return await NuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Cli", includePreviews: true); case UpdateChannel.Nightly: - return await NuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Cli", includeNightly: true).ConfigureAwait(false); + return await NuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Cli", includeNightly: true); default: return default; diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs index d8715c2700..58adc65fc4 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs @@ -42,7 +42,7 @@ namespace Volo.Abp.Cli.Commands commandLineArgs.Target, commandLineArgs.Options.GetOrNull(Options.StartupProject.Short, Options.StartupProject.Long), skipDbMigrations - ).ConfigureAwait(false); + ); } public string GetUsageInfo() diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddPackageCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddPackageCommand.cs index cbfde5610f..03e228f255 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddPackageCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddPackageCommand.cs @@ -37,7 +37,7 @@ namespace Volo.Abp.Cli.Commands await ProjectNugetPackageAdder.AddAsync( GetProjectFile(commandLineArgs), commandLineArgs.Target - ).ConfigureAwait(false); + ); } public string GetUsageInfo() diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GetSourceCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GetSourceCommand.cs index edd7bd985a..e1536c2973 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GetSourceCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GetSourceCommand.cs @@ -79,7 +79,7 @@ namespace Volo.Abp.Cli.Commands gitHubLocalRepositoryPath, commandLineArgs.Options ) - ).ConfigureAwait(false); + ); using (var templateFileStream = new MemoryStream(result.ZipContent)) { diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs index 175f45aa75..fe9ed2d98f 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs @@ -48,7 +48,7 @@ namespace Volo.Abp.Cli.Commands commandLineArgs.Target, password, commandLineArgs.Options.GetOrNull(Options.Organization.Short, Options.Organization.Long) - ).ConfigureAwait(false); + ); Logger.LogInformation($"Successfully logged in as '{commandLineArgs.Target}'"); } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs index 1314f058c2..9cfa702fd7 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs @@ -97,7 +97,7 @@ namespace Volo.Abp.Cli.Commands gitHubLocalRepositoryPath, commandLineArgs.Options ) - ).ConfigureAwait(false); + ); using (var templateFileStream = new MemoryStream(result.ZipContent)) { diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs index 1697489d71..a47a865617 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs @@ -36,12 +36,12 @@ namespace Volo.Abp.Cli.Commands case "install": Logger.LogInformation("Installing ABP Suite..."); - await InstallSuiteAsync().ConfigureAwait(false); + await InstallSuiteAsync(); break; case "update": Logger.LogInformation("Updating ABP Suite..."); - await UpdateSuiteAsync().ConfigureAwait(false); + await UpdateSuiteAsync(); break; case "remove": @@ -53,7 +53,7 @@ namespace Volo.Abp.Cli.Commands private async Task InstallSuiteAsync() { - var nugetIndexUrl = await GetNuGetIndexUrlAsync().ConfigureAwait(false); + var nugetIndexUrl = await GetNuGetIndexUrlAsync(); if (nugetIndexUrl == null) { @@ -71,7 +71,7 @@ namespace Volo.Abp.Cli.Commands private async Task UpdateSuiteAsync() { - var nugetIndexUrl = await GetNuGetIndexUrlAsync().ConfigureAwait(false); + var nugetIndexUrl = await GetNuGetIndexUrlAsync(); if (nugetIndexUrl == null) { @@ -106,7 +106,7 @@ namespace Volo.Abp.Cli.Commands private async Task GetNuGetIndexUrlAsync() { - var apiKeyResult = await _apiKeyService.GetApiKeyOrNullAsync().ConfigureAwait(false); + var apiKeyResult = await _apiKeyService.GetApiKeyOrNullAsync(); if (apiKeyResult == null || string.IsNullOrEmpty(apiKeyResult.ApiKey)) { diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/UpdateCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/UpdateCommand.cs index 166720c64e..d201790c94 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/UpdateCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/UpdateCommand.cs @@ -37,7 +37,7 @@ namespace Volo.Abp.Cli.Commands if (updateNuget || !updateNpm) { - await UpdateNugetPackages(commandLineArgs, directory).ConfigureAwait(false); + await UpdateNugetPackages(commandLineArgs, directory); } if (updateNpm || !updateNuget) @@ -62,7 +62,7 @@ namespace Volo.Abp.Cli.Commands { var solutionName = Path.GetFileName(solution).RemovePostFix(".sln"); - await _nugetPackagesVersionUpdater.UpdateSolutionAsync(solution, includePreviews).ConfigureAwait(false); + await _nugetPackagesVersionUpdater.UpdateSolutionAsync(solution, includePreviews); Logger.LogInformation($"Volo packages are updated in {solutionName} solution."); return; @@ -74,7 +74,7 @@ namespace Volo.Abp.Cli.Commands { var projectName = Path.GetFileName(project).RemovePostFix(".csproj"); - await _nugetPackagesVersionUpdater.UpdateProjectAsync(project, includePreviews).ConfigureAwait(false); + await _nugetPackagesVersionUpdater.UpdateProjectAsync(project, includePreviews); Logger.LogInformation($"Volo packages are updated in {projectName} project."); return; diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs index a22b6bba4a..cddead548f 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs @@ -75,16 +75,16 @@ namespace Volo.Abp.Cli.Licensing $"Waiting {timeSpan.TotalSeconds} secs for the next try..."); } }) - .ExecuteAsync(async () => await client.GetAsync(url).ConfigureAwait(false)).ConfigureAwait(false); + .ExecuteAsync(async () => await client.GetAsync(url)); if (!response.IsSuccessStatusCode) { throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'"); } - await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response).ConfigureAwait(false); + await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response); - var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + var responseContent = await response.Content.ReadAsStringAsync(); var apiKeyResult = JsonSerializer.Deserialize(responseContent); return apiKeyResult; diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs index 37d487f106..3cdd658403 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs @@ -50,12 +50,12 @@ namespace Volo.Abp.Cli.NuGet using (var client = new CliHttpClient(setBearerToken: false)) { - var responseMessage = await GetHttpResponseMessageWithRetryAsync(client, url).ConfigureAwait(false); + var responseMessage = await GetHttpResponseMessageWithRetryAsync(client, url); if (responseMessage.StatusCode == HttpStatusCode.NotFound) { - var commercialNuGetUrl = await GetNuGetUrlForCommercialPackage(packageId).ConfigureAwait(false); - responseMessage = await GetHttpResponseMessageWithRetryAsync(client, commercialNuGetUrl).ConfigureAwait(false); + var commercialNuGetUrl = await GetNuGetUrlForCommercialPackage(packageId); + responseMessage = await GetHttpResponseMessageWithRetryAsync(client, commercialNuGetUrl); } if (!responseMessage.IsSuccessStatusCode) @@ -63,9 +63,9 @@ namespace Volo.Abp.Cli.NuGet throw new Exception($"ERROR: Remote server returns '{responseMessage.StatusCode}'"); } - await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage).ConfigureAwait(false); + await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage); - var responseContent = await responseMessage.Content.ReadAsStringAsync().ConfigureAwait(false); + var responseContent = await responseMessage.Content.ReadAsStringAsync(); var versions = JsonSerializer .Deserialize(responseContent) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs index a422f0ff44..fd0a0e5246 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs @@ -49,7 +49,7 @@ namespace Volo.Abp.Cli.ProjectBuilding string version = null) { - var latestVersion = await GetLatestSourceCodeVersionAsync(name, type).ConfigureAwait(false); + var latestVersion = await GetLatestSourceCodeVersionAsync(name, type); if (version == null) { version = latestVersion; @@ -73,7 +73,7 @@ namespace Volo.Abp.Cli.ProjectBuilding Type = type, Version = version } - ).ConfigureAwait(false); + ); if (Options.CacheTemplates) { @@ -98,11 +98,11 @@ namespace Volo.Abp.Cli.ProjectBuilding MimeTypes.Application.Json ), CancellationTokenProvider.Token - ).ConfigureAwait(false); + ); - await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response).ConfigureAwait(false); + await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response); - var result = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + var result = await response.Content.ReadAsStringAsync(); return JsonSerializer.Deserialize(result).Version; } @@ -118,11 +118,11 @@ namespace Volo.Abp.Cli.ProjectBuilding $"{CliUrls.WwwAbpIo}api/download/{input.Type}/", new StringContent(postData, Encoding.UTF8, MimeTypes.Application.Json), CancellationTokenProvider.Token - ).ConfigureAwait(false); + ); - await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage).ConfigureAwait(false); + await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage); - return await responseMessage.Content.ReadAsByteArrayAsync().ConfigureAwait(false); + return await responseMessage.Content.ReadAsByteArrayAsync(); } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Analyticses/CliAnalyticsCollect.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Analyticses/CliAnalyticsCollect.cs index 79fc70cfcc..fdfbb8b5d3 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Analyticses/CliAnalyticsCollect.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Analyticses/CliAnalyticsCollect.cs @@ -38,12 +38,12 @@ namespace Volo.Abp.Cli.ProjectBuilding.Analyticses $"{CliUrls.WwwAbpIo}api/clianalytics/collect", new StringContent(postData, Encoding.UTF8, MimeTypes.Application.Json), _cancellationTokenProvider.Token - ).ConfigureAwait(false); + ); if (!responseMessage.IsSuccessStatusCode) { var exceptionMessage = "Remote server returns '" + (int)responseMessage.StatusCode + "-" + responseMessage.ReasonPhrase + "'. "; - var remoteServiceErrorMessage = await _remoteServiceExceptionHandler.GetAbpRemoteServiceErrorAsync(responseMessage).ConfigureAwait(false); + var remoteServiceErrorMessage = await _remoteServiceExceptionHandler.GetAbpRemoteServiceErrorAsync(responseMessage); if (remoteServiceErrorMessage != null) { 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 8f8310977e..10b3a07172 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().ConfigureAwait(false); + var moduleList = await GetModuleListAsync(); var module = moduleList.FirstOrDefault(m => m.Name == name); @@ -47,10 +47,10 @@ namespace Volo.Abp.Cli.ProjectBuilding var responseMessage = await client.GetAsync( $"{CliUrls.WwwAbpIo}api/download/modules/", CancellationTokenProvider.Token - ).ConfigureAwait(false); + ); - await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage).ConfigureAwait(false); - var result = await responseMessage.Content.ReadAsStringAsync().ConfigureAwait(false); + await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage); + var result = await responseMessage.Content.ReadAsStringAsync(); return JsonSerializer.Deserialize>(result); } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ModuleProjectBuilder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ModuleProjectBuilder.cs index f853a9ec15..48f109e1d3 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ModuleProjectBuilder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ModuleProjectBuilder.cs @@ -43,15 +43,15 @@ namespace Volo.Abp.Cli.ProjectBuilding public async Task BuildAsync(ProjectBuildArgs args) { - var moduleInfo = await GetModuleInfoAsync(args).ConfigureAwait(false); + var moduleInfo = await GetModuleInfoAsync(args); var templateFile = await SourceCodeStore.GetAsync( args.TemplateName, SourceCodeTypes.Module, args.Version - ).ConfigureAwait(false); + ); - var apiKeyResult = await ApiKeyService.GetApiKeyOrNullAsync().ConfigureAwait(false); + var apiKeyResult = await ApiKeyService.GetApiKeyOrNullAsync(); if (apiKeyResult?.ApiKey != null) { args.ExtraProperties["api-key"] = apiKeyResult.ApiKey; @@ -96,14 +96,14 @@ namespace Volo.Abp.Cli.ProjectBuilding ProjectName = null, TemplateName = args.TemplateName, TemplateVersion = templateFile.Version - }).ConfigureAwait(false); + }); return new ProjectBuildResult(context.Result.ZipContent, args.TemplateName); } private async Task GetModuleInfoAsync(ProjectBuildArgs args) { - return await ModuleInfoProvider.GetAsync(args.TemplateName).ConfigureAwait(false); + return await ModuleInfoProvider.GetAsync(args.TemplateName); } } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/RemoteServiceExceptionHandler.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/RemoteServiceExceptionHandler.cs index 8a1af93f23..744641bb8a 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/RemoteServiceExceptionHandler.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/RemoteServiceExceptionHandler.cs @@ -35,7 +35,7 @@ namespace Volo.Abp.Cli.ProjectBuilding var exceptionMessage = "Remote server returns '" + (int) responseMessage.StatusCode + "-" + responseMessage.ReasonPhrase + "'. "; - var remoteServiceErrorMessage = await GetAbpRemoteServiceErrorAsync(responseMessage).ConfigureAwait(false); + var remoteServiceErrorMessage = await GetAbpRemoteServiceErrorAsync(responseMessage); if (remoteServiceErrorMessage != null) { exceptionMessage += remoteServiceErrorMessage; @@ -52,7 +52,7 @@ namespace Volo.Abp.Cli.ProjectBuilding errorResult = _jsonSerializer.Deserialize ( await responseMessage.Content.ReadAsStringAsync() -.ConfigureAwait(false)); + ); } catch (JsonReaderException) { diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateProjectBuilder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateProjectBuilder.cs index 87c399181d..9d31e10200 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateProjectBuilder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateProjectBuilder.cs @@ -51,9 +51,9 @@ namespace Volo.Abp.Cli.ProjectBuilding args.TemplateName, SourceCodeTypes.Template, args.Version - ).ConfigureAwait(false); + ); - var apiKeyResult = await ApiKeyService.GetApiKeyOrNullAsync().ConfigureAwait(false); + var apiKeyResult = await ApiKeyService.GetApiKeyOrNullAsync(); if (apiKeyResult?.ApiKey != null) { args.ExtraProperties["api-key"] = apiKeyResult.ApiKey; @@ -103,7 +103,7 @@ namespace Volo.Abp.Cli.ProjectBuilding ProjectName = args.SolutionName.FullName, TemplateName = args.TemplateName, TemplateVersion = templateFile.Version - }).ConfigureAwait(false); + }); return new ProjectBuildResult(context.Result.ZipContent, args.SolutionName.ProjectName); } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs index 76b7584ae8..62dee30344 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs @@ -45,7 +45,7 @@ namespace Volo.Abp.Cli.ProjectModification await AddAsync( projectFile, await FindNugetPackageInfoAsync(packageName) -.ConfigureAwait(false)).ConfigureAwait(false); + ); } public Task AddAsync(string projectFile, NugetPackageInfo package) @@ -81,7 +81,7 @@ namespace Volo.Abp.Cli.ProjectModification { var url = $"{CliUrls.WwwAbpIo}api/app/nugetPackage/byName/?name=" + moduleName; - var response = await client.GetAsync(url).ConfigureAwait(false); + var response = await client.GetAsync(url); if (!response.IsSuccessStatusCode) { @@ -90,10 +90,10 @@ namespace Volo.Abp.Cli.ProjectModification throw new CliUsageException($"'{moduleName}' nuget package could not be found!"); } - await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response).ConfigureAwait(false); + await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response); } - var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + var responseContent = await response.Content.ReadAsStringAsync(); return JsonSerializer.Deserialize(responseContent); } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs index 012d5e7bcf..d029a21b71 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs @@ -57,7 +57,7 @@ namespace Volo.Abp.Cli.ProjectModification Check.NotNull(solutionFile, nameof(solutionFile)); Check.NotNull(moduleName, nameof(moduleName)); - var module = await FindModuleInfoAsync(moduleName).ConfigureAwait(false); + var module = await FindModuleInfoAsync(moduleName); Logger.LogInformation($"Installing module '{module.Name}' to the solution '{Path.GetFileNameWithoutExtension(solutionFile)}'"); @@ -72,7 +72,7 @@ namespace Volo.Abp.Cli.ProjectModification continue; } - await ProjectNugetPackageAdder.AddAsync(targetProjectFile, nugetPackage).ConfigureAwait(false); + await ProjectNugetPackageAdder.AddAsync(targetProjectFile, nugetPackage); } if (!module.NpmPackages.IsNullOrEmpty()) @@ -86,7 +86,7 @@ namespace Volo.Abp.Cli.ProjectModification { foreach (var npmPackage in module.NpmPackages.Where(p => p.ApplicationType.HasFlag(NpmApplicationType.Mvc))) { - await ProjectNpmPackageAdder.AddAsync(Path.GetDirectoryName(targetProject), npmPackage).ConfigureAwait(false); + await ProjectNpmPackageAdder.AddAsync(Path.GetDirectoryName(targetProject), npmPackage); } } } @@ -137,7 +137,7 @@ namespace Volo.Abp.Cli.ProjectModification { var url = $"{CliUrls.WwwAbpIo}api/app/module/byName/?name=" + moduleName; - var response = await client.GetAsync(url).ConfigureAwait(false); + var response = await client.GetAsync(url); if (!response.IsSuccessStatusCode) { @@ -146,10 +146,10 @@ namespace Volo.Abp.Cli.ProjectModification throw new CliUsageException($"ERROR: '{moduleName}' module could not be found!"); } - await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response).ConfigureAwait(false); + await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response); } - var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + var responseContent = await response.Content.ReadAsStringAsync(); return JsonSerializer.Deserialize(responseContent); } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs index 4137c7b645..d5756a4566 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs @@ -27,20 +27,20 @@ namespace Volo.Abp.Cli.ProjectModification foreach (var filePath in projectPaths) { - await UpdateInternalAsync(filePath, includePreviews).ConfigureAwait(false); + await UpdateInternalAsync(filePath, includePreviews); } } public async Task UpdateProjectAsync(string projectPath, bool includePreviews) { - await UpdateInternalAsync(projectPath, includePreviews).ConfigureAwait(false); + await UpdateInternalAsync(projectPath, includePreviews); } protected virtual async Task UpdateInternalAsync(string projectPath, bool includePreviews) { var fileContent = File.ReadAllText(projectPath); - File.WriteAllText(projectPath, await UpdateVoloPackagesAsync(fileContent, includePreviews).ConfigureAwait(false)); + File.WriteAllText(projectPath, await UpdateVoloPackagesAsync(fileContent, includePreviews)); } private async Task UpdateVoloPackagesAsync(string content, bool includePreviews) @@ -74,7 +74,7 @@ namespace Volo.Abp.Cli.ProjectModification Logger.LogDebug("Checking package: \"{0}\" - Current version: {1}", packageId, packageVersion); - var latestVersion = await _nuGetService.GetLatestVersionOrNullAsync(packageId, includePreviews).ConfigureAwait(false); + var latestVersion = await _nuGetService.GetLatestVersionOrNullAsync(packageId, includePreviews); if (latestVersion != null && packageVersion < latestVersion) { diff --git a/framework/src/Volo.Abp.Cli/FodyWeavers.xml b/framework/src/Volo.Abp.Cli/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Cli/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Cli/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/FodyWeavers.xml b/framework/src/Volo.Abp.Core/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Core/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Core/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/System/IO/AbpStreamExtensions.cs b/framework/src/Volo.Abp.Core/System/IO/AbpStreamExtensions.cs index 206de7be0d..e87ab67527 100644 --- a/framework/src/Volo.Abp.Core/System/IO/AbpStreamExtensions.cs +++ b/framework/src/Volo.Abp.Core/System/IO/AbpStreamExtensions.cs @@ -17,7 +17,7 @@ namespace System.IO { using (var memoryStream = new MemoryStream()) { - await stream.CopyToAsync(memoryStream).ConfigureAwait(false); + await stream.CopyToAsync(memoryStream); return memoryStream.ToArray(); } } 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 49a86c388a..21ca7c2086 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/IO/FileHelper.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/IO/FileHelper.cs @@ -54,7 +54,7 @@ namespace Volo.Abp.IO { using (var reader = File.OpenText(path)) { - return await reader.ReadToEndAsync().ConfigureAwait(false); + return await reader.ReadToEndAsync(); } } @@ -68,7 +68,7 @@ namespace Volo.Abp.IO using (var stream = File.Open(path, FileMode.Open)) { var result = new byte[stream.Length]; - await stream.ReadAsync(result, 0, (int)stream.Length).ConfigureAwait(false); + await stream.ReadAsync(result, 0, (int)stream.Length); return result; } } diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Threading/AsyncOneTimeRunner.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Threading/AsyncOneTimeRunner.cs index 44bd73c074..7b440ebfe6 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Threading/AsyncOneTimeRunner.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Threading/AsyncOneTimeRunner.cs @@ -21,14 +21,14 @@ namespace Volo.Abp.Threading return; } - using (await _semaphore.LockAsync().ConfigureAwait(false)) + using (await _semaphore.LockAsync()) { if (_runBefore) { return; } - await action().ConfigureAwait(false); + await action(); _runBefore = true; } diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Threading/InternalAsyncHelper.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Threading/InternalAsyncHelper.cs index ce04a02479..3697d59e3f 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Threading/InternalAsyncHelper.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Threading/InternalAsyncHelper.cs @@ -14,8 +14,8 @@ namespace Volo.Abp.Threading Exception exception = null; try - { - await actualReturnValue.ConfigureAwait(false); + { + await actualReturnValue; } catch (Exception ex) { @@ -33,9 +33,9 @@ namespace Volo.Abp.Threading Exception exception = null; try - { - await actualReturnValue.ConfigureAwait(false); - await postAction().ConfigureAwait(false); + { + await actualReturnValue; + await postAction(); } catch (Exception ex) { @@ -55,15 +55,15 @@ namespace Volo.Abp.Threading try { if (preAction != null) - { - await preAction().ConfigureAwait(false); - } - - await actualReturnValue().ConfigureAwait(false); + { + await preAction(); + } + + await actualReturnValue(); if (postAction != null) - { - await postAction().ConfigureAwait(false); + { + await postAction(); } } catch (Exception ex) @@ -86,7 +86,7 @@ namespace Volo.Abp.Threading try { - return await actualReturnValue.ConfigureAwait(false); + return await actualReturnValue; } catch (Exception ex) { @@ -114,8 +114,8 @@ namespace Volo.Abp.Threading try { - var result = await actualReturnValue.ConfigureAwait(false); - await postAction().ConfigureAwait(false); + var result = await actualReturnValue; + await postAction(); return result; } catch (Exception ex) @@ -145,15 +145,15 @@ namespace Volo.Abp.Threading try { if (preAction != null) - { - await preAction().ConfigureAwait(false); + { + await preAction(); } - var result = await actualReturnValue().ConfigureAwait(false); + var result = await actualReturnValue(); if (postAction != null) - { - await postAction().ConfigureAwait(false); + { + await postAction(); } return result; diff --git a/framework/src/Volo.Abp.Dapper/FodyWeavers.xml b/framework/src/Volo.Abp.Dapper/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Dapper/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Dapper/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Data/FodyWeavers.xml b/framework/src/Volo.Abp.Data/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Data/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Data/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeeder.cs b/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeeder.cs index a6a073b67b..c20badbeb7 100644 --- a/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeeder.cs +++ b/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeeder.cs @@ -31,7 +31,7 @@ namespace Volo.Abp.Data .ServiceProvider .GetRequiredService(contributorType); - await contributor.SeedAsync(context).ConfigureAwait(false); + await contributor.SeedAsync(context); } } } diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xml b/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xml b/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs index 038ba0cf29..0de23c826b 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs +++ b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs @@ -146,7 +146,7 @@ namespace Volo.Abp.Application.Services return; } - await AuthorizationService.CheckAsync(policyName).ConfigureAwait(false); + await AuthorizationService.CheckAsync(policyName); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/CrudAppService.cs b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/CrudAppService.cs index e5febca25b..4134b59a4c 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/CrudAppService.cs +++ b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/CrudAppService.cs @@ -93,24 +93,24 @@ namespace Volo.Abp.Application.Services public virtual async Task GetAsync(TKey id) { - await CheckGetPolicyAsync().ConfigureAwait(false); + await CheckGetPolicyAsync(); - var entity = await GetEntityByIdAsync(id).ConfigureAwait(false); + var entity = await GetEntityByIdAsync(id); return MapToGetOutputDto(entity); } public virtual async Task> GetListAsync(TGetListInput input) { - await CheckGetListPolicyAsync().ConfigureAwait(false); + await CheckGetListPolicyAsync(); var query = CreateFilteredQuery(input); - var totalCount = await AsyncQueryableExecuter.CountAsync(query).ConfigureAwait(false); + var totalCount = await AsyncQueryableExecuter.CountAsync(query); query = ApplySorting(query, input); query = ApplyPaging(query, input); - var entities = await AsyncQueryableExecuter.ToListAsync(query).ConfigureAwait(false); + var entities = await AsyncQueryableExecuter.ToListAsync(query); return new PagedResultDto( totalCount, @@ -120,34 +120,34 @@ namespace Volo.Abp.Application.Services public virtual async Task CreateAsync(TCreateInput input) { - await CheckCreatePolicyAsync().ConfigureAwait(false); + await CheckCreatePolicyAsync(); var entity = MapToEntity(input); TryToSetTenantId(entity); - await Repository.InsertAsync(entity, autoSave: true).ConfigureAwait(false); + await Repository.InsertAsync(entity, autoSave: true); return MapToGetOutputDto(entity); } public virtual async Task UpdateAsync(TKey id, TUpdateInput input) { - await CheckUpdatePolicyAsync().ConfigureAwait(false); + await CheckUpdatePolicyAsync(); - var entity = await GetEntityByIdAsync(id).ConfigureAwait(false); + var entity = await GetEntityByIdAsync(id); //TODO: Check if input has id different than given id and normalize if it's default value, throw ex otherwise MapToEntity(input, entity); - await Repository.UpdateAsync(entity, autoSave: true).ConfigureAwait(false); + await Repository.UpdateAsync(entity, autoSave: true); return MapToGetOutputDto(entity); } public virtual async Task DeleteAsync(TKey id) { - await CheckDeletePolicyAsync().ConfigureAwait(false); + await CheckDeletePolicyAsync(); - await Repository.DeleteAsync(id).ConfigureAwait(false); + await Repository.DeleteAsync(id); } protected virtual Task GetEntityByIdAsync(TKey id) @@ -157,27 +157,27 @@ namespace Volo.Abp.Application.Services protected virtual async Task CheckGetPolicyAsync() { - await CheckPolicyAsync(GetPolicyName).ConfigureAwait(false); + await CheckPolicyAsync(GetPolicyName); } protected virtual async Task CheckGetListPolicyAsync() { - await CheckPolicyAsync(GetListPolicyName).ConfigureAwait(false); + await CheckPolicyAsync(GetListPolicyName); } protected virtual async Task CheckCreatePolicyAsync() { - await CheckPolicyAsync(CreatePolicyName).ConfigureAwait(false); + await CheckPolicyAsync(CreatePolicyName); } protected virtual async Task CheckUpdatePolicyAsync() { - await CheckPolicyAsync(UpdatePolicyName).ConfigureAwait(false); + await CheckPolicyAsync(UpdatePolicyName); } protected virtual async Task CheckDeletePolicyAsync() { - await CheckPolicyAsync(DeletePolicyName).ConfigureAwait(false); + await CheckPolicyAsync(DeletePolicyName); } /// diff --git a/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xml b/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeEventHelper.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeEventHelper.cs index 47e3571ffd..c9219feffc 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeEventHelper.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeEventHelper.cs @@ -36,14 +36,14 @@ namespace Volo.Abp.Domain.Entities.Events public async Task TriggerEventsAsync(EntityChangeReport changeReport) { - await TriggerEventsInternalAsync(changeReport).ConfigureAwait(false); + await TriggerEventsInternalAsync(changeReport); if (changeReport.IsEmpty() || UnitOfWorkManager.Current == null) { return; } - await UnitOfWorkManager.Current.SaveChangesAsync().ConfigureAwait(false); + await UnitOfWorkManager.Current.SaveChangesAsync(); } public virtual async Task TriggerEntityCreatingEventAsync(object entity) @@ -53,7 +53,7 @@ namespace Volo.Abp.Domain.Entities.Events typeof(EntityCreatingEventData<>), entity, true - ).ConfigureAwait(false); + ); } public virtual async Task TriggerEntityCreatedEventOnUowCompletedAsync(object entity) @@ -63,7 +63,7 @@ namespace Volo.Abp.Domain.Entities.Events typeof(EntityCreatedEventData<>), entity, false - ).ConfigureAwait(false); + ); var eto = EntityToEtoMapper.Map(entity); if (eto != null) @@ -73,7 +73,7 @@ namespace Volo.Abp.Domain.Entities.Events typeof(EntityCreatedEto<>), eto, false - ).ConfigureAwait(false); + ); } } @@ -84,7 +84,7 @@ namespace Volo.Abp.Domain.Entities.Events typeof(EntityUpdatingEventData<>), entity, true - ).ConfigureAwait(false); + ); } public virtual async Task TriggerEntityUpdatedEventOnUowCompletedAsync(object entity) @@ -94,7 +94,7 @@ namespace Volo.Abp.Domain.Entities.Events typeof(EntityUpdatedEventData<>), entity, false - ).ConfigureAwait(false); + ); var eto = EntityToEtoMapper.Map(entity); if (eto != null) @@ -104,7 +104,7 @@ namespace Volo.Abp.Domain.Entities.Events typeof(EntityUpdatedEto<>), eto, false - ).ConfigureAwait(false); + ); } } @@ -115,7 +115,7 @@ namespace Volo.Abp.Domain.Entities.Events typeof(EntityDeletingEventData<>), entity, true - ).ConfigureAwait(false); + ); } public virtual async Task TriggerEntityDeletedEventOnUowCompletedAsync(object entity) @@ -125,7 +125,7 @@ namespace Volo.Abp.Domain.Entities.Events typeof(EntityDeletedEventData<>), entity, false - ).ConfigureAwait(false); + ); var eto = EntityToEtoMapper.Map(entity); if (eto != null) @@ -135,15 +135,15 @@ namespace Volo.Abp.Domain.Entities.Events typeof(EntityDeletedEto<>), EntityToEtoMapper.Map(entity), false - ).ConfigureAwait(false); + ); } } protected virtual async Task TriggerEventsInternalAsync(EntityChangeReport changeReport) { - await TriggerEntityChangeEvents(changeReport.ChangedEntities).ConfigureAwait(false); - await TriggerLocalEvents(changeReport.DomainEvents).ConfigureAwait(false); - await TriggerDistributedEvents(changeReport.DistributedEvents).ConfigureAwait(false); + await TriggerEntityChangeEvents(changeReport.ChangedEntities); + await TriggerLocalEvents(changeReport.DomainEvents); + await TriggerDistributedEvents(changeReport.DistributedEvents); } protected virtual async Task TriggerEntityChangeEvents(List changedEntities) @@ -153,16 +153,16 @@ namespace Volo.Abp.Domain.Entities.Events switch (changedEntity.ChangeType) { case EntityChangeType.Created: - await TriggerEntityCreatingEventAsync(changedEntity.Entity).ConfigureAwait(false); - await TriggerEntityCreatedEventOnUowCompletedAsync(changedEntity.Entity).ConfigureAwait(false); + await TriggerEntityCreatingEventAsync(changedEntity.Entity); + await TriggerEntityCreatedEventOnUowCompletedAsync(changedEntity.Entity); break; case EntityChangeType.Updated: - await TriggerEntityUpdatingEventAsync(changedEntity.Entity).ConfigureAwait(false); - await TriggerEntityUpdatedEventOnUowCompletedAsync(changedEntity.Entity).ConfigureAwait(false); + await TriggerEntityUpdatingEventAsync(changedEntity.Entity); + await TriggerEntityUpdatedEventOnUowCompletedAsync(changedEntity.Entity); break; case EntityChangeType.Deleted: - await TriggerEntityDeletingEventAsync(changedEntity.Entity).ConfigureAwait(false); - await TriggerEntityDeletedEventOnUowCompletedAsync(changedEntity.Entity).ConfigureAwait(false); + await TriggerEntityDeletingEventAsync(changedEntity.Entity); + await TriggerEntityDeletedEventOnUowCompletedAsync(changedEntity.Entity); break; default: throw new AbpException("Unknown EntityChangeType: " + changedEntity.ChangeType); @@ -174,7 +174,7 @@ namespace Volo.Abp.Domain.Entities.Events { foreach (var localEvent in localEvents) { - await LocalEventBus.PublishAsync(localEvent.EventData.GetType(), localEvent.EventData).ConfigureAwait(false); + await LocalEventBus.PublishAsync(localEvent.EventData.GetType(), localEvent.EventData); } } @@ -182,7 +182,7 @@ namespace Volo.Abp.Domain.Entities.Events { foreach (var distributedEvent in distributedEvents) { - await DistributedEventBus.PublishAsync(distributedEvent.EventData.GetType(), distributedEvent.EventData).ConfigureAwait(false); + await DistributedEventBus.PublishAsync(distributedEvent.EventData.GetType(), distributedEvent.EventData); } } @@ -193,7 +193,7 @@ namespace Volo.Abp.Domain.Entities.Events if (triggerInCurrentUnitOfWork || UnitOfWorkManager.Current == null) { - await eventPublisher.PublishAsync(eventType, Activator.CreateInstance(eventType, entity)).ConfigureAwait(false); + await eventPublisher.PublishAsync(eventType, Activator.CreateInstance(eventType, entity)); return; } diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs index ae438fdd01..d13d52ed97 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs @@ -46,7 +46,7 @@ namespace Volo.Abp.Domain.Repositories { public virtual async Task GetAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default) { - var entity = await FindAsync(id, includeDetails, cancellationToken).ConfigureAwait(false); + var entity = await FindAsync(id, includeDetails, cancellationToken); if (entity == null) { @@ -60,13 +60,13 @@ namespace Volo.Abp.Domain.Repositories public virtual async Task DeleteAsync(TKey id, bool autoSave = false, CancellationToken cancellationToken = default) { - var entity = await FindAsync(id, cancellationToken: cancellationToken).ConfigureAwait(false); + var entity = await FindAsync(id, cancellationToken: cancellationToken); if (entity == null) { return; } - await DeleteAsync(entity, autoSave, cancellationToken).ConfigureAwait(false); + await DeleteAsync(entity, autoSave, cancellationToken); } } } diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs index 358d36733e..29814f4de6 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs @@ -75,13 +75,13 @@ namespace Volo.Abp.Domain.Repositories public virtual async Task DeleteAsync(TKey id, bool autoSave = false, CancellationToken cancellationToken = default) { - var entity = await FindAsync(id, cancellationToken: cancellationToken).ConfigureAwait(false); + var entity = await FindAsync(id, cancellationToken: cancellationToken); if (entity == null) { return; } - await DeleteAsync(entity, autoSave, cancellationToken).ConfigureAwait(false); + await DeleteAsync(entity, autoSave, cancellationToken); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs index 915b97a7d4..40ebca015e 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.Domain.Repositories var repo = ProxyHelper.UnProxy(repository) as ISupportsExplicitLoading; if (repo != null) { - await repo.EnsureCollectionLoadedAsync(entity, propertyExpression, cancellationToken).ConfigureAwait(false); + await repo.EnsureCollectionLoadedAsync(entity, propertyExpression, cancellationToken); } } @@ -38,7 +38,7 @@ namespace Volo.Abp.Domain.Repositories var repo = ProxyHelper.UnProxy(repository) as ISupportsExplicitLoading; if (repo != null) { - await repo.EnsurePropertyLoadedAsync(entity, propertyExpression, cancellationToken).ConfigureAwait(false); + await repo.EnsurePropertyLoadedAsync(entity, propertyExpression, cancellationToken); } } } diff --git a/framework/src/Volo.Abp.Emailing/FodyWeavers.xml b/framework/src/Volo.Abp.Emailing/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Emailing/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Emailing/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs index aa38f874d6..f6588de9fb 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderBase.cs @@ -32,29 +32,29 @@ namespace Volo.Abp.Emailing Subject = subject, Body = body, IsBodyHtml = isBodyHtml - }).ConfigureAwait(false); + }); } public virtual async Task SendAsync(string from, string to, string subject, string body, bool isBodyHtml = true) { - await SendAsync(new MailMessage(from, to, subject, body) { IsBodyHtml = isBodyHtml }).ConfigureAwait(false); + await SendAsync(new MailMessage(from, to, subject, body) { IsBodyHtml = isBodyHtml }); } public virtual async Task SendAsync(MailMessage mail, bool normalize = true) { if (normalize) { - await NormalizeMailAsync(mail).ConfigureAwait(false); + await NormalizeMailAsync(mail); } - await SendEmailAsync(mail).ConfigureAwait(false); + await SendEmailAsync(mail); } public virtual async Task QueueAsync(string to, string subject, string body, bool isBodyHtml = true) { if (!BackgroundJobManager.IsAvailable()) { - await SendAsync(to, subject, body, isBodyHtml).ConfigureAwait(false); + await SendAsync(to, subject, body, isBodyHtml); return; } @@ -66,7 +66,7 @@ namespace Volo.Abp.Emailing Body = body, IsBodyHtml = isBodyHtml } - ).ConfigureAwait(false); + ); } /// @@ -86,8 +86,8 @@ namespace Volo.Abp.Emailing if (mail.From == null || mail.From.Address.IsNullOrEmpty()) { mail.From = new MailAddress( - await Configuration.GetDefaultFromAddressAsync().ConfigureAwait(false), - await Configuration.GetDefaultFromDisplayNameAsync().ConfigureAwait(false), + await Configuration.GetDefaultFromAddressAsync(), + await Configuration.GetDefaultFromDisplayNameAsync(), Encoding.UTF8 ); } diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderConfiguration.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderConfiguration.cs index dafd5b8a4f..e02b78badd 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderConfiguration.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/EmailSenderConfiguration.cs @@ -37,7 +37,7 @@ namespace Volo.Abp.Emailing /// Value of the setting protected async Task GetNotEmptySettingValueAsync(string name) { - var value = await SettingProvider.GetOrNullAsync(name).ConfigureAwait(false); + var value = await SettingProvider.GetOrNullAsync(name); if (value.IsNullOrEmpty()) { diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSender.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSender.cs index 84af1bf348..f97fd57b18 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSender.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Smtp/SmtpEmailSender.cs @@ -28,19 +28,19 @@ namespace Volo.Abp.Emailing.Smtp public async Task BuildClientAsync() { - var host = await SmtpConfiguration.GetHostAsync().ConfigureAwait(false); - var port = await SmtpConfiguration.GetPortAsync().ConfigureAwait(false); + var host = await SmtpConfiguration.GetHostAsync(); + var port = await SmtpConfiguration.GetPortAsync(); var smtpClient = new SmtpClient(host, port); try { - if (await SmtpConfiguration.GetEnableSslAsync().ConfigureAwait(false)) + if (await SmtpConfiguration.GetEnableSslAsync()) { smtpClient.EnableSsl = true; } - if (await SmtpConfiguration.GetUseDefaultCredentialsAsync().ConfigureAwait(false)) + if (await SmtpConfiguration.GetUseDefaultCredentialsAsync()) { smtpClient.UseDefaultCredentials = true; } @@ -48,11 +48,11 @@ namespace Volo.Abp.Emailing.Smtp { smtpClient.UseDefaultCredentials = false; - var userName = await SmtpConfiguration.GetUserNameAsync().ConfigureAwait(false); + var userName = await SmtpConfiguration.GetUserNameAsync(); if (!userName.IsNullOrEmpty()) { - var password = await SmtpConfiguration.GetPasswordAsync().ConfigureAwait(false); - var domain = await SmtpConfiguration.GetDomainAsync().ConfigureAwait(false); + var password = await SmtpConfiguration.GetPasswordAsync(); + var domain = await SmtpConfiguration.GetDomainAsync(); smtpClient.Credentials = !domain.IsNullOrEmpty() ? new NetworkCredential(userName, password, domain) : new NetworkCredential(userName, password); @@ -70,9 +70,9 @@ namespace Volo.Abp.Emailing.Smtp protected override async Task SendEmailAsync(MailMessage mail) { - using (var smtpClient = await BuildClientAsync().ConfigureAwait(false)) + using (var smtpClient = await BuildClientAsync()) { - await smtpClient.SendMailAsync(mail).ConfigureAwait(false); + await smtpClient.SendMailAsync(mail); } } } diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/EmailTemplateProvider.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/EmailTemplateProvider.cs index 61db6dec2e..29fcf08664 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/EmailTemplateProvider.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/EmailTemplateProvider.cs @@ -27,12 +27,12 @@ namespace Volo.Abp.Emailing.Templates public async Task GetAsync(string name) { - return await GetAsync(name, CultureInfo.CurrentUICulture.Name).ConfigureAwait(false); + return await GetAsync(name, CultureInfo.CurrentUICulture.Name); } public async Task GetAsync(string name, string cultureName) { - return await GetInternalAsync(name, cultureName).ConfigureAwait(false); + return await GetInternalAsync(name, cultureName); } protected virtual async Task GetInternalAsync(string name, string cultureName) @@ -59,11 +59,11 @@ namespace Volo.Abp.Emailing.Templates { var emailTemplate = new EmailTemplate(emailTemplateString, emailTemplateDefinition); - await SetLayoutAsync(emailTemplateDefinition, emailTemplate, cultureName).ConfigureAwait(false); + await SetLayoutAsync(emailTemplateDefinition, emailTemplate, cultureName); if (emailTemplateDefinition.SingleTemplateFile) { - await LocalizeAsync(emailTemplateDefinition, emailTemplate, cultureName).ConfigureAwait(false); + await LocalizeAsync(emailTemplateDefinition, emailTemplate, cultureName); } return emailTemplate; @@ -87,7 +87,7 @@ namespace Volo.Abp.Emailing.Templates layout = Options.DefaultLayout; } - var layoutTemplate = await GetInternalAsync(layout, cultureName).ConfigureAwait(false); + var layoutTemplate = await GetInternalAsync(layout, cultureName); emailTemplate.SetLayout(layoutTemplate); } diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/TemplateRender.cs b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/TemplateRender.cs index 1713cf9f3f..8c4e24017c 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/TemplateRender.cs +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/TemplateRender.cs @@ -9,7 +9,7 @@ namespace Volo.Abp.Emailing.Templates public async Task RenderAsync(string template, object model = null) { var scribanTemplate = Template.Parse(template); - return await scribanTemplate.RenderAsync(model).ConfigureAwait(false); + return await scribanTemplate.RenderAsync(model); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xml b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xml +++ b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/FodyWeavers.xml b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/FodyWeavers.xml +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/FodyWeavers.xml b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/FodyWeavers.xml +++ b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/FodyWeavers.xml b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/FodyWeavers.xml +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/FodyWeavers.xml b/framework/src/Volo.Abp.EntityFrameworkCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/FodyWeavers.xml +++ b/framework/src/Volo.Abp.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs index 7890b9b50d..6c3eb689d8 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs @@ -46,7 +46,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore if (autoSave) { - await DbContext.SaveChangesAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + await DbContext.SaveChangesAsync(GetCancellationToken(cancellationToken)); } return savedEntity; @@ -60,7 +60,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore if (autoSave) { - await DbContext.SaveChangesAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + await DbContext.SaveChangesAsync(GetCancellationToken(cancellationToken)); } return updatedEntity; @@ -72,7 +72,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore if (autoSave) { - await DbContext.SaveChangesAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + await DbContext.SaveChangesAsync(GetCancellationToken(cancellationToken)); } } @@ -80,12 +80,12 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore { return includeDetails ? await WithDetails().ToListAsync(GetCancellationToken(cancellationToken)) -.ConfigureAwait(false) : await DbSet.ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + : await DbSet.ToListAsync(GetCancellationToken(cancellationToken)); } public override async Task GetCountAsync(CancellationToken cancellationToken = default) { - return await DbSet.LongCountAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + return await DbSet.LongCountAsync(GetCancellationToken(cancellationToken)); } protected override IQueryable GetQueryable() @@ -97,7 +97,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore { var entities = await GetQueryable() .Where(predicate) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); foreach (var entity in entities) { @@ -106,7 +106,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore if (autoSave) { - await DbContext.SaveChangesAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + await DbContext.SaveChangesAsync(GetCancellationToken(cancellationToken)); } } @@ -119,7 +119,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore await DbContext .Entry(entity) .Collection(propertyExpression) - .LoadAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .LoadAsync(GetCancellationToken(cancellationToken)); } public virtual async Task EnsurePropertyLoadedAsync( @@ -131,7 +131,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore await DbContext .Entry(entity) .Reference(propertyExpression) - .LoadAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .LoadAsync(GetCancellationToken(cancellationToken)); } public override IQueryable WithDetails() @@ -187,7 +187,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore public virtual async Task GetAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default) { - var entity = await FindAsync(id, includeDetails, GetCancellationToken(cancellationToken)).ConfigureAwait(false); + var entity = await FindAsync(id, includeDetails, GetCancellationToken(cancellationToken)); if (entity == null) { @@ -208,18 +208,18 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore { return includeDetails ? await WithDetails().FirstOrDefaultAsync(e => e.Id.Equals(id), GetCancellationToken(cancellationToken)) -.ConfigureAwait(false) : await DbSet.FindAsync(new object[] { id }, GetCancellationToken(cancellationToken)).ConfigureAwait(false); + : await DbSet.FindAsync(new object[] { id }, GetCancellationToken(cancellationToken)); } public virtual async Task DeleteAsync(TKey id, bool autoSave = false, CancellationToken cancellationToken = default) { - var entity = await FindAsync(id, cancellationToken: cancellationToken).ConfigureAwait(false); + var entity = await FindAsync(id, cancellationToken: cancellationToken); if (entity == null) { return; } - await DeleteAsync(entity, autoSave, cancellationToken).ConfigureAwait(false); + await DeleteAsync(entity, autoSave, cancellationToken); } } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index 422bca7d67..16c5c38389 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -117,9 +117,9 @@ namespace Volo.Abp.EntityFrameworkCore var changeReport = ApplyAbpConcepts(); - var result = await base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken).ConfigureAwait(false); + var result = await base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken); - await EntityChangeEventHelper.TriggerEventsAsync(changeReport).ConfigureAwait(false); + await EntityChangeEventHelper.TriggerEventsAsync(changeReport); if (auditLog != null) { diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/FodyWeavers.xml b/framework/src/Volo.Abp.EventBus.RabbitMQ/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/FodyWeavers.xml +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index 9df352837a..c530437e6f 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -85,7 +85,7 @@ namespace Volo.Abp.EventBus.RabbitMq var eventData = Serializer.Deserialize(ea.Body, eventType); - await TriggerHandlersAsync(eventType, eventData).ConfigureAwait(false); + await TriggerHandlersAsync(eventType, eventData); } public IDisposable Subscribe(IDistributedEventHandler handler) where TEvent : class diff --git a/framework/src/Volo.Abp.EventBus/FodyWeavers.xml b/framework/src/Volo.Abp.EventBus/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.EventBus/FodyWeavers.xml +++ b/framework/src/Volo.Abp.EventBus/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/ActionEventHandler.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/ActionEventHandler.cs index 3594ce3c96..a8763edd89 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/ActionEventHandler.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/ActionEventHandler.cs @@ -32,7 +32,7 @@ namespace Volo.Abp.EventBus /// public async Task HandleEventAsync(TEvent eventData) { - await Action(eventData).ConfigureAwait(false); + await Action(eventData); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs index b77ed00945..a7883950d1 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs @@ -89,7 +89,7 @@ namespace Volo.Abp.EventBus { var exceptions = new List(); - await TriggerHandlersAsync(eventType, eventData, exceptions).ConfigureAwait(false); + await TriggerHandlersAsync(eventType, eventData, exceptions); if (exceptions.Any()) { @@ -110,7 +110,7 @@ namespace Volo.Abp.EventBus { foreach (var handlerFactory in handlerFactories.EventHandlerFactories) { - await TriggerHandlerAsync(handlerFactory, handlerFactories.EventType, eventData, exceptions).ConfigureAwait(false); + await TriggerHandlerAsync(handlerFactory, handlerFactories.EventType, eventData, exceptions); } } @@ -126,7 +126,7 @@ namespace Volo.Abp.EventBus var baseEventType = eventType.GetGenericTypeDefinition().MakeGenericType(baseArg); var constructorArgs = ((IEventDataWithInheritableGenericArgument)eventData).GetConstructorArgs(); var baseEventData = Activator.CreateInstance(baseEventType, constructorArgs); - await PublishAsync(baseEventType, baseEventData).ConfigureAwait(false); + await PublishAsync(baseEventType, baseEventData); } } } @@ -171,7 +171,7 @@ namespace Volo.Abp.EventBus new[] { eventType } ); - await ((Task)method.Invoke(eventHandlerWrapper.EventHandler, new[] { eventData })).ConfigureAwait(false); + await ((Task)method.Invoke(eventHandlerWrapper.EventHandler, new[] { eventData })); } else if (ReflectionHelper.IsAssignableToGenericType(handlerType, typeof(IDistributedEventHandler<>))) { @@ -182,7 +182,7 @@ namespace Volo.Abp.EventBus new[] { eventType } ); - await ((Task)method.Invoke(eventHandlerWrapper.EventHandler, new[] { eventData })).ConfigureAwait(false); + await ((Task)method.Invoke(eventHandlerWrapper.EventHandler, new[] { eventData })); } else { diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventBus.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventBus.cs index 117eeeb06f..7db5c18f01 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventBus.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventBus.cs @@ -119,7 +119,7 @@ namespace Volo.Abp.EventBus.Local { var exceptions = new List(); - await TriggerHandlersAsync(eventType, eventData, exceptions).ConfigureAwait(false); + await TriggerHandlersAsync(eventType, eventData, exceptions); if (exceptions.Any()) { diff --git a/framework/src/Volo.Abp.Features/FodyWeavers.xml b/framework/src/Volo.Abp.Features/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Features/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Features/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/EditionFeatureValueProvider.cs b/framework/src/Volo.Abp.Features/Volo/Abp/Features/EditionFeatureValueProvider.cs index 75c9c7ae5f..49ea1b3f4c 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/EditionFeatureValueProvider.cs +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/EditionFeatureValueProvider.cs @@ -26,7 +26,7 @@ namespace Volo.Abp.Features return null; } - return await FeatureStore.GetOrNullAsync(feature.Name, Name, editionId.Value.ToString()).ConfigureAwait(false); + return await FeatureStore.GetOrNullAsync(feature.Name, Name, editionId.Value.ToString()); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureChecker.cs b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureChecker.cs index 0c90ea7573..0c653c3448 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureChecker.cs +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureChecker.cs @@ -46,7 +46,7 @@ namespace Volo.Abp.Features providers = providers.Where(p => featureDefinition.AllowedProviders.Contains(p.Name)); } - return await GetOrNullValueFromProvidersAsync(providers, featureDefinition).ConfigureAwait(false); + return await GetOrNullValueFromProvidersAsync(providers, featureDefinition); } protected virtual async Task GetOrNullValueFromProvidersAsync( @@ -55,7 +55,7 @@ namespace Volo.Abp.Features { foreach (var provider in providers) { - var value = await provider.GetOrNullAsync(feature).ConfigureAwait(false); + var value = await provider.GetOrNullAsync(feature); if (value != null) { return value; diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureCheckerBase.cs b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureCheckerBase.cs index 23c5c37431..a24e0901f7 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureCheckerBase.cs +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureCheckerBase.cs @@ -10,7 +10,7 @@ namespace Volo.Abp.Features public virtual async Task IsEnabledAsync(string name) { - var value = await GetOrNullAsync(name).ConfigureAwait(false); + var value = await GetOrNullAsync(name); if (value == null) { return false; diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureCheckerExtensions.cs b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureCheckerExtensions.cs index d26f7be841..8850408df0 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureCheckerExtensions.cs +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureCheckerExtensions.cs @@ -17,7 +17,7 @@ namespace Volo.Abp.Features Check.NotNull(featureChecker, nameof(featureChecker)); Check.NotNull(name, nameof(name)); - var value = await featureChecker.GetOrNullAsync(name).ConfigureAwait(false); + var value = await featureChecker.GetOrNullAsync(name); return value?.To() ?? defaultValue; } @@ -32,7 +32,7 @@ namespace Volo.Abp.Features { foreach (var featureName in featureNames) { - if (!(await featureChecker.IsEnabledAsync(featureName).ConfigureAwait(false))) + if (!(await featureChecker.IsEnabledAsync(featureName))) { return false; } @@ -43,7 +43,7 @@ namespace Volo.Abp.Features foreach (var featureName in featureNames) { - if (await featureChecker.IsEnabledAsync(featureName).ConfigureAwait(false)) + if (await featureChecker.IsEnabledAsync(featureName)) { return true; } @@ -54,7 +54,7 @@ namespace Volo.Abp.Features public static async Task CheckEnabledAsync(this IFeatureChecker featureChecker, string featureName) { - if (!(await featureChecker.IsEnabledAsync(featureName).ConfigureAwait(false))) + if (!(await featureChecker.IsEnabledAsync(featureName))) { throw new AbpAuthorizationException("Feature is not enabled: " + featureName); } @@ -71,7 +71,7 @@ namespace Volo.Abp.Features { foreach (var featureName in featureNames) { - if (!(await featureChecker.IsEnabledAsync(featureName).ConfigureAwait(false))) + if (!(await featureChecker.IsEnabledAsync(featureName))) { throw new AbpAuthorizationException( "Required features are not enabled. All of these features must be enabled: " + @@ -84,7 +84,7 @@ namespace Volo.Abp.Features { foreach (var featureName in featureNames) { - if (await featureChecker.IsEnabledAsync(featureName).ConfigureAwait(false)) + if (await featureChecker.IsEnabledAsync(featureName)) { return; } diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureInterceptor.cs b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureInterceptor.cs index 9f3d5dc356..9986af6275 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureInterceptor.cs +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureInterceptor.cs @@ -19,12 +19,12 @@ namespace Volo.Abp.Features { if (AbpCrossCuttingConcerns.IsApplied(invocation.TargetObject, AbpCrossCuttingConcerns.FeatureChecking)) { - await invocation.ProceedAsync().ConfigureAwait(false); + await invocation.ProceedAsync(); return; } - await CheckFeaturesAsync(invocation).ConfigureAwait(false); - await invocation.ProceedAsync().ConfigureAwait(false); + await CheckFeaturesAsync(invocation); + await invocation.ProceedAsync(); } protected virtual async Task CheckFeaturesAsync(IAbpMethodInvocation invocation) @@ -33,7 +33,7 @@ namespace Volo.Abp.Features new MethodInvocationFeatureCheckerContext( invocation.Method ) - ).ConfigureAwait(false); + ); } } } diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/MethodInvocationFeatureCheckerService.cs b/framework/src/Volo.Abp.Features/Volo/Abp/Features/MethodInvocationFeatureCheckerService.cs index bff6405d57..da7becc61f 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/MethodInvocationFeatureCheckerService.cs +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/MethodInvocationFeatureCheckerService.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.Features foreach (var requiresFeatureAttribute in GetRequiredFeatureAttributes(context.Method)) { - await _featureChecker.CheckEnabledAsync(requiresFeatureAttribute.RequiresAll, requiresFeatureAttribute.Features).ConfigureAwait(false); + await _featureChecker.CheckEnabledAsync(requiresFeatureAttribute.RequiresAll, requiresFeatureAttribute.Features); } } diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/TenantFeatureValueProvider.cs b/framework/src/Volo.Abp.Features/Volo/Abp/Features/TenantFeatureValueProvider.cs index 71cdfe3f59..5ae4b5f876 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/TenantFeatureValueProvider.cs +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/TenantFeatureValueProvider.cs @@ -19,7 +19,7 @@ namespace Volo.Abp.Features public override async Task GetOrNullAsync(FeatureDefinition feature) { - return await FeatureStore.GetOrNullAsync(feature.Name, Name, CurrentTenant.Id?.ToString()).ConfigureAwait(false); + return await FeatureStore.GetOrNullAsync(feature.Name, Name, CurrentTenant.Id?.ToString()); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.FluentValidation/FodyWeavers.xml b/framework/src/Volo.Abp.FluentValidation/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.FluentValidation/FodyWeavers.xml +++ b/framework/src/Volo.Abp.FluentValidation/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Guids/FodyWeavers.xml b/framework/src/Volo.Abp.Guids/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Guids/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Guids/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.HangFire/FodyWeavers.xml b/framework/src/Volo.Abp.HangFire/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.HangFire/FodyWeavers.xml +++ b/framework/src/Volo.Abp.HangFire/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Abstractions/FodyWeavers.xml b/framework/src/Volo.Abp.Http.Abstractions/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Http.Abstractions/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Http.Abstractions/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel/FodyWeavers.xml b/framework/src/Volo.Abp.Http.Client.IdentityModel/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel/Volo/Abp/Http/Client/IdentityModel/IdentityModelRemoteServiceHttpClientAuthenticator.cs b/framework/src/Volo.Abp.Http.Client.IdentityModel/Volo/Abp/Http/Client/IdentityModel/IdentityModelRemoteServiceHttpClientAuthenticator.cs index efc61907dc..25763efbd5 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel/Volo/Abp/Http/Client/IdentityModel/IdentityModelRemoteServiceHttpClientAuthenticator.cs +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel/Volo/Abp/Http/Client/IdentityModel/IdentityModelRemoteServiceHttpClientAuthenticator.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.Http.Client.IdentityModel { if (context.RemoteService.GetUseCurrentAccessToken() != false) { - var accessToken = await GetAccessTokenFromHttpContextOrNullAsync().ConfigureAwait(false); + var accessToken = await GetAccessTokenFromHttpContextOrNullAsync(); if (accessToken != null) { context.Request.SetBearerToken(accessToken); @@ -36,7 +36,7 @@ namespace Volo.Abp.Http.Client.IdentityModel await IdentityModelAuthenticationService.TryAuthenticateAsync( context.Client, context.RemoteService.GetIdentityClient() - ).ConfigureAwait(false); + ); } protected virtual async Task GetAccessTokenFromHttpContextOrNullAsync() @@ -47,7 +47,7 @@ namespace Volo.Abp.Http.Client.IdentityModel return null; } - return await httpContext.GetTokenAsync("access_token").ConfigureAwait(false); + return await httpContext.GetTokenAsync("access_token"); } } } diff --git a/framework/src/Volo.Abp.Http.Client/FodyWeavers.xml b/framework/src/Volo.Abp.Http.Client/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Http.Client/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Http.Client/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionCache.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionCache.cs index b9932124be..9d1ea2dbbe 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionCache.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionCache.cs @@ -27,12 +27,12 @@ namespace Volo.Abp.Http.Client.DynamicProxying string baseUrl, Func> factory) { - using (await _semaphore.LockAsync(CancellationTokenProvider.Token).ConfigureAwait(false)) + using (await _semaphore.LockAsync(CancellationTokenProvider.Token)) { var model = _cache.GetOrDefault(baseUrl); if (model == null) { - _cache[baseUrl] = model = await factory().ConfigureAwait(false); + _cache[baseUrl] = model = await factory(); } return model; diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs index eb57641c28..9b9c8e804c 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs @@ -34,7 +34,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying public async Task FindActionAsync(string baseUrl, Type serviceType, MethodInfo method) { - var apiDescription = await GetApiDescriptionAsync(baseUrl).ConfigureAwait(false); + var apiDescription = await GetApiDescriptionAsync(baseUrl); //TODO: Cache finding? @@ -78,7 +78,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying public virtual async Task GetApiDescriptionAsync(string baseUrl) { - return await Cache.GetAsync(baseUrl, () => GetApiDescriptionFromServerAsync(baseUrl)).ConfigureAwait(false); + return await Cache.GetAsync(baseUrl, () => GetApiDescriptionFromServerAsync(baseUrl)); } protected virtual async Task GetApiDescriptionFromServerAsync(string baseUrl) @@ -88,14 +88,14 @@ namespace Volo.Abp.Http.Client.DynamicProxying var response = await client.GetAsync( baseUrl.EnsureEndsWith('/') + "api/abp/api-definition", CancellationTokenProvider.Token - ).ConfigureAwait(false); + ); if (!response.IsSuccessStatusCode) { throw new AbpException("Remote service returns error! StatusCode = " + response.StatusCode); } - var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + var content = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject( content, diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs index d60b79b3a5..3e0124237f 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs @@ -78,7 +78,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying { if (invocation.Method.ReturnType.GenericTypeArguments.IsNullOrEmpty()) { - await MakeRequestAsync(invocation).ConfigureAwait(false); + await MakeRequestAsync(invocation); } else { @@ -89,14 +89,14 @@ namespace Volo.Abp.Http.Client.DynamicProxying invocation.ReturnValue = await GetResultAsync( result, invocation.Method.ReturnType.GetGenericArguments()[0] - ).ConfigureAwait(false); + ); } } private async Task GetResultAsync(Task task, Type resultType) { - await task.ConfigureAwait(false); + await task; return typeof(Task<>) .MakeGenericType(resultType) .GetProperty(nameof(Task.Result), BindingFlags.Instance | BindingFlags.Public) @@ -105,7 +105,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying private async Task MakeRequestAndGetResultAsync(IAbpMethodInvocation invocation) { - var responseAsString = await MakeRequestAsync(invocation).ConfigureAwait(false); + var responseAsString = await MakeRequestAsync(invocation); //TODO: Think on that if (TypeHelper.IsPrimitiveExtended(typeof(T), true)) @@ -123,7 +123,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying var client = HttpClientFactory.Create(clientConfig.RemoteServiceName); - var action = await ApiDescriptionFinder.FindActionAsync(remoteServiceConfig.BaseUrl, typeof(TService), invocation.Method).ConfigureAwait(false); + var action = await ApiDescriptionFinder.FindActionAsync(remoteServiceConfig.BaseUrl, typeof(TService), invocation.Method); var apiVersion = GetApiVersionInfo(action); var url = remoteServiceConfig.BaseUrl.EnsureEndsWith('/') + UrlBuilder.GenerateUrlWithParameters(action, invocation.ArgumentsDictionary, apiVersion); @@ -141,16 +141,16 @@ namespace Volo.Abp.Http.Client.DynamicProxying remoteServiceConfig, clientConfig.RemoteServiceName ) - ).ConfigureAwait(false); + ); - var response = await client.SendAsync(requestMessage, GetCancellationToken()).ConfigureAwait(false); + var response = await client.SendAsync(requestMessage, GetCancellationToken()); if (!response.IsSuccessStatusCode) { - await ThrowExceptionForResponseAsync(response).ConfigureAwait(false); + await ThrowExceptionForResponseAsync(response); } - return await response.Content.ReadAsStringAsync().ConfigureAwait(false); + return await response.Content.ReadAsStringAsync(); } private ApiVersionInfo GetApiVersionInfo(ActionApiDescriptionModel action) @@ -240,7 +240,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying { var errorResponse = JsonSerializer.Deserialize( await response.Content.ReadAsStringAsync() -.ConfigureAwait(false)); + ); throw new AbpRemoteCallException(errorResponse.Error); } diff --git a/framework/src/Volo.Abp.Http/FodyWeavers.xml b/framework/src/Volo.Abp.Http/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Http/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Http/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.IdentityModel/FodyWeavers.xml b/framework/src/Volo.Abp.IdentityModel/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.IdentityModel/FodyWeavers.xml +++ b/framework/src/Volo.Abp.IdentityModel/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs index 488745836e..ca6e41d60d 100644 --- a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs +++ b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs @@ -35,7 +35,7 @@ namespace Volo.Abp.IdentityModel [NotNull] HttpClient client, string identityClientName = null) { - var accessToken = await GetAccessTokenOrNullAsync(identityClientName).ConfigureAwait(false); + var accessToken = await GetAccessTokenOrNullAsync(identityClientName); if (accessToken == null) { return false; @@ -55,18 +55,18 @@ namespace Volo.Abp.IdentityModel return null; } - return await GetAccessTokenAsync(configuration).ConfigureAwait(false); + return await GetAccessTokenAsync(configuration); } public virtual async Task GetAccessTokenAsync(IdentityClientConfiguration configuration) { - var discoveryResponse = await GetDiscoveryResponse(configuration).ConfigureAwait(false); + var discoveryResponse = await GetDiscoveryResponse(configuration); if (discoveryResponse.IsError) { throw new AbpException($"Could not retrieve the OpenId Connect discovery document! ErrorType: {discoveryResponse.ErrorType}. Error: {discoveryResponse.Error}"); } - var tokenResponse = await GetTokenResponse(discoveryResponse, configuration).ConfigureAwait(false); + var tokenResponse = await GetTokenResponse(discoveryResponse, configuration); if (tokenResponse.IsError) { throw new AbpException($"Could not get token from the OpenId Connect server! ErrorType: {tokenResponse.ErrorType}. Error: {tokenResponse.Error}. ErrorDescription: {tokenResponse.ErrorDescription}. HttpStatusCode: {tokenResponse.HttpStatusCode}"); @@ -104,7 +104,7 @@ namespace Volo.Abp.IdentityModel { RequireHttps = configuration.RequireHttps } - }).ConfigureAwait(false); + }); } } @@ -118,14 +118,14 @@ namespace Volo.Abp.IdentityModel { case OidcConstants.GrantTypes.ClientCredentials: return await httpClient.RequestClientCredentialsTokenAsync( - await CreateClientCredentialsTokenRequestAsync(discoveryResponse, configuration).ConfigureAwait(false), + await CreateClientCredentialsTokenRequestAsync(discoveryResponse, configuration), CancellationTokenProvider.Token - ).ConfigureAwait(false); + ); case OidcConstants.GrantTypes.Password: return await httpClient.RequestPasswordTokenAsync( - await CreatePasswordTokenRequestAsync(discoveryResponse, configuration).ConfigureAwait(false), + await CreatePasswordTokenRequestAsync(discoveryResponse, configuration), CancellationTokenProvider.Token - ).ConfigureAwait(false); + ); default: throw new AbpException("Grant type was not implemented: " + configuration.GrantType); } diff --git a/framework/src/Volo.Abp.Json/FodyWeavers.xml b/framework/src/Volo.Abp.Json/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Json/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Json/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ldap/FodyWeavers.xml b/framework/src/Volo.Abp.Ldap/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Ldap/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Ldap/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Localization.Abstractions/FodyWeavers.xml b/framework/src/Volo.Abp.Localization.Abstractions/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Localization.Abstractions/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Localization.Abstractions/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Localization/FodyWeavers.xml b/framework/src/Volo.Abp.Localization/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Localization/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Localization/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.MailKit/FodyWeavers.xml b/framework/src/Volo.Abp.MailKit/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.MailKit/FodyWeavers.xml +++ b/framework/src/Volo.Abp.MailKit/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs index f798ebf01e..a3cb4ea499 100644 --- a/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs +++ b/framework/src/Volo.Abp.MailKit/Volo/Abp/MailKit/MailKitSmtpEmailSender.cs @@ -30,11 +30,11 @@ namespace Volo.Abp.MailKit protected override async Task SendEmailAsync(MailMessage mail) { - using (var client = await BuildClientAsync().ConfigureAwait(false)) + using (var client = await BuildClientAsync()) { var message = MimeMessage.CreateFromMailMessage(mail); - await client.SendAsync(message).ConfigureAwait(false); - await client.DisconnectAsync(true).ConfigureAwait(false); + await client.SendAsync(message); + await client.DisconnectAsync(true); } } @@ -44,7 +44,7 @@ namespace Volo.Abp.MailKit try { - await ConfigureClient(client).ConfigureAwait(false); + await ConfigureClient(client); return client; } catch @@ -57,20 +57,20 @@ namespace Volo.Abp.MailKit protected virtual async Task ConfigureClient(SmtpClient client) { client.Connect( - await SmtpConfiguration.GetHostAsync().ConfigureAwait(false), - await SmtpConfiguration.GetPortAsync().ConfigureAwait(false), + await SmtpConfiguration.GetHostAsync(), + await SmtpConfiguration.GetPortAsync(), await GetSecureSocketOption() -.ConfigureAwait(false)); + ); - if (await SmtpConfiguration.GetUseDefaultCredentialsAsync().ConfigureAwait(false)) + if (await SmtpConfiguration.GetUseDefaultCredentialsAsync()) { return; } client.Authenticate( - await SmtpConfiguration.GetUserNameAsync().ConfigureAwait(false), + await SmtpConfiguration.GetUserNameAsync(), await SmtpConfiguration.GetPasswordAsync() -.ConfigureAwait(false)); + ); } protected virtual async Task GetSecureSocketOption() @@ -81,7 +81,7 @@ namespace Volo.Abp.MailKit } return await SmtpConfiguration.GetEnableSslAsync() -.ConfigureAwait(false) ? SecureSocketOptions.SslOnConnect + ? SecureSocketOptions.SslOnConnect : SecureSocketOptions.StartTlsWhenAvailable; } } diff --git a/framework/src/Volo.Abp.MemoryDb/FodyWeavers.xml b/framework/src/Volo.Abp.MemoryDb/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.MemoryDb/FodyWeavers.xml +++ b/framework/src/Volo.Abp.MemoryDb/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs index d554e09de1..b81aa7ae87 100644 --- a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs +++ b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs @@ -101,7 +101,7 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb public virtual async Task GetAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default) { - var entity = await FindAsync(id, includeDetails, cancellationToken).ConfigureAwait(false); + var entity = await FindAsync(id, includeDetails, cancellationToken); if (entity == null) { @@ -118,13 +118,13 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb public virtual async Task DeleteAsync(TKey id, bool autoSave = false, CancellationToken cancellationToken = default) { - var entity = await FindAsync(id, cancellationToken: cancellationToken).ConfigureAwait(false); + var entity = await FindAsync(id, cancellationToken: cancellationToken); if (entity == null) { return; } - await DeleteAsync(entity, autoSave, cancellationToken).ConfigureAwait(false); + await DeleteAsync(entity, autoSave, cancellationToken); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Minify/FodyWeavers.xml b/framework/src/Volo.Abp.Minify/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Minify/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Minify/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.MongoDB/FodyWeavers.xml b/framework/src/Volo.Abp.MongoDB/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.MongoDB/FodyWeavers.xml +++ b/framework/src/Volo.Abp.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs index 1ee3cbf80d..4e8ccaa82e 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs @@ -58,12 +58,12 @@ namespace Volo.Abp.Domain.Repositories.MongoDB bool autoSave = false, CancellationToken cancellationToken = default) { - await ApplyAbpConceptsForAddedEntityAsync(entity).ConfigureAwait(false); + await ApplyAbpConceptsForAddedEntityAsync(entity); await Collection.InsertOneAsync( entity, cancellationToken: GetCancellationToken(cancellationToken) - ).ConfigureAwait(false); + ); return entity; } @@ -78,14 +78,14 @@ namespace Volo.Abp.Domain.Repositories.MongoDB if (entity is ISoftDelete softDeleteEntity && softDeleteEntity.IsDeleted) { SetDeletionAuditProperties(entity); - await TriggerEntityDeleteEventsAsync(entity).ConfigureAwait(false); + await TriggerEntityDeleteEventsAsync(entity); } else { - await TriggerEntityUpdateEventsAsync(entity).ConfigureAwait(false); + await TriggerEntityUpdateEventsAsync(entity); } - await TriggerDomainEventsAsync(entity).ConfigureAwait(false); + await TriggerDomainEventsAsync(entity); var oldConcurrencyStamp = SetNewConcurrencyStamp(entity); @@ -93,7 +93,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB CreateEntityFilter(entity, true, oldConcurrencyStamp), entity, cancellationToken: GetCancellationToken(cancellationToken) - ).ConfigureAwait(false); + ); if (result.MatchedCount <= 0) { @@ -108,7 +108,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB bool autoSave = false, CancellationToken cancellationToken = default) { - await ApplyAbpConceptsForDeletedEntityAsync(entity).ConfigureAwait(false); + await ApplyAbpConceptsForDeletedEntityAsync(entity); var oldConcurrencyStamp = SetNewConcurrencyStamp(entity); if (entity is ISoftDelete softDeleteEntity) @@ -118,7 +118,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB CreateEntityFilter(entity, true, oldConcurrencyStamp), entity, cancellationToken: GetCancellationToken(cancellationToken) - ).ConfigureAwait(false); + ); if (result.MatchedCount <= 0) { @@ -130,7 +130,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB var result = await Collection.DeleteOneAsync( CreateEntityFilter(entity, true, oldConcurrencyStamp), GetCancellationToken(cancellationToken) - ).ConfigureAwait(false); + ); if (result.DeletedCount <= 0) { @@ -141,12 +141,12 @@ namespace Volo.Abp.Domain.Repositories.MongoDB public override async Task> GetListAsync(bool includeDetails = false, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + return await GetMongoQueryable().ToListAsync(GetCancellationToken(cancellationToken)); } public override async Task GetCountAsync(CancellationToken cancellationToken = default) { - return await GetMongoQueryable().LongCountAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + return await GetMongoQueryable().LongCountAsync(GetCancellationToken(cancellationToken)); } public override async Task DeleteAsync( @@ -156,11 +156,11 @@ namespace Volo.Abp.Domain.Repositories.MongoDB { var entities = await GetMongoQueryable() .Where(predicate) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); foreach (var entity in entities) { - await DeleteAsync(entity, autoSave, cancellationToken).ConfigureAwait(false); + await DeleteAsync(entity, autoSave, cancellationToken); } } @@ -187,33 +187,33 @@ namespace Volo.Abp.Domain.Repositories.MongoDB { CheckAndSetId(entity); SetCreationAuditProperties(entity); - await TriggerEntityCreateEvents(entity).ConfigureAwait(false); - await TriggerDomainEventsAsync(entity).ConfigureAwait(false); + await TriggerEntityCreateEvents(entity); + await TriggerDomainEventsAsync(entity); } private async Task TriggerEntityCreateEvents(TEntity entity) { - await EntityChangeEventHelper.TriggerEntityCreatedEventOnUowCompletedAsync(entity).ConfigureAwait(false); - await EntityChangeEventHelper.TriggerEntityCreatingEventAsync(entity).ConfigureAwait(false); + await EntityChangeEventHelper.TriggerEntityCreatedEventOnUowCompletedAsync(entity); + await EntityChangeEventHelper.TriggerEntityCreatingEventAsync(entity); } protected virtual async Task TriggerEntityUpdateEventsAsync(TEntity entity) { - await EntityChangeEventHelper.TriggerEntityUpdatedEventOnUowCompletedAsync(entity).ConfigureAwait(false); - await EntityChangeEventHelper.TriggerEntityUpdatingEventAsync(entity).ConfigureAwait(false); + await EntityChangeEventHelper.TriggerEntityUpdatedEventOnUowCompletedAsync(entity); + await EntityChangeEventHelper.TriggerEntityUpdatingEventAsync(entity); } protected virtual async Task ApplyAbpConceptsForDeletedEntityAsync(TEntity entity) { SetDeletionAuditProperties(entity); - await TriggerEntityDeleteEventsAsync(entity).ConfigureAwait(false); - await TriggerDomainEventsAsync(entity).ConfigureAwait(false); + await TriggerEntityDeleteEventsAsync(entity); + await TriggerDomainEventsAsync(entity); } protected virtual async Task TriggerEntityDeleteEventsAsync(TEntity entity) { - await EntityChangeEventHelper.TriggerEntityDeletedEventOnUowCompletedAsync(entity).ConfigureAwait(false); - await EntityChangeEventHelper.TriggerEntityDeletingEventAsync(entity).ConfigureAwait(false); + await EntityChangeEventHelper.TriggerEntityDeletedEventOnUowCompletedAsync(entity); + await EntityChangeEventHelper.TriggerEntityDeletingEventAsync(entity); } protected virtual void CheckAndSetId(TEntity entity) @@ -266,7 +266,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB { foreach (var localEvent in localEvents) { - await LocalEventBus.PublishAsync(localEvent.GetType(), localEvent).ConfigureAwait(false); + await LocalEventBus.PublishAsync(localEvent.GetType(), localEvent); } generatesDomainEventsEntity.ClearLocalEvents(); @@ -277,7 +277,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB { foreach (var distributedEvent in distributedEvents) { - await DistributedEventBus.PublishAsync(distributedEvent.GetType(), distributedEvent).ConfigureAwait(false); + await DistributedEventBus.PublishAsync(distributedEvent.GetType(), distributedEvent); } generatesDomainEventsEntity.ClearDistributedEvents(); @@ -324,7 +324,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB bool includeDetails = true, CancellationToken cancellationToken = default) { - var entity = await FindAsync(id, includeDetails, cancellationToken).ConfigureAwait(false); + var entity = await FindAsync(id, includeDetails, cancellationToken); if (entity == null) { @@ -341,7 +341,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB { return await Collection .Find(CreateEntityFilter(id, true)) - .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); } public virtual Task DeleteAsync( diff --git a/framework/src/Volo.Abp.MultiTenancy/FodyWeavers.xml b/framework/src/Volo.Abp.MultiTenancy/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.MultiTenancy/FodyWeavers.xml +++ b/framework/src/Volo.Abp.MultiTenancy/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.ObjectMapping/FodyWeavers.xml b/framework/src/Volo.Abp.ObjectMapping/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.ObjectMapping/FodyWeavers.xml +++ b/framework/src/Volo.Abp.ObjectMapping/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.RabbitMQ/FodyWeavers.xml b/framework/src/Volo.Abp.RabbitMQ/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.RabbitMQ/FodyWeavers.xml +++ b/framework/src/Volo.Abp.RabbitMQ/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs index 8e136fc2ac..1214a82a99 100644 --- a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs +++ b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs @@ -63,13 +63,13 @@ namespace Volo.Abp.RabbitMQ public virtual async Task BindAsync(string routingKey) { QueueBindCommands.Enqueue(new QueueBindCommand(QueueBindType.Bind, routingKey)); - await TrySendQueueBindCommandsAsync().ConfigureAwait(false); + await TrySendQueueBindCommandsAsync(); } public virtual async Task UnbindAsync(string routingKey) { QueueBindCommands.Enqueue(new QueueBindCommand(QueueBindType.Unbind, routingKey)); - await TrySendQueueBindCommandsAsync().ConfigureAwait(false); + await TrySendQueueBindCommandsAsync(); } protected virtual void TrySendQueueBindCommands() @@ -166,7 +166,7 @@ namespace Volo.Abp.RabbitMQ var consumer = new EventingBasicConsumer(channel); consumer.Received += async (model, basicDeliverEventArgs) => { - await HandleIncomingMessage(channel, basicDeliverEventArgs).ConfigureAwait(false); + await HandleIncomingMessage(channel, basicDeliverEventArgs); }; channel.BasicConsume( @@ -189,7 +189,7 @@ namespace Volo.Abp.RabbitMQ { foreach (var callback in Callbacks) { - await callback(channel, basicDeliverEventArgs).ConfigureAwait(false); + await callback(channel, basicDeliverEventArgs); } channel.BasicAck(basicDeliverEventArgs.DeliveryTag, multiple: false); diff --git a/framework/src/Volo.Abp.Security/FodyWeavers.xml b/framework/src/Volo.Abp.Security/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Security/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Security/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Serialization/FodyWeavers.xml b/framework/src/Volo.Abp.Serialization/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Serialization/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Serialization/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/FodyWeavers.xml b/framework/src/Volo.Abp.Settings/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Settings/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Settings/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs index 7694ca219f..6f5372a4cf 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs @@ -34,7 +34,7 @@ namespace Volo.Abp.Settings //TODO: How to implement setting.IsInherited? - var value = await GetOrNullValueFromProvidersAsync(providers, setting).ConfigureAwait(false); + var value = await GetOrNullValueFromProvidersAsync(providers, setting); if (setting.IsEncrypted) { value = SettingEncryptionService.Decrypt(setting, value); @@ -52,7 +52,7 @@ namespace Volo.Abp.Settings { foreach (var setting in settingDefinitions) { - var value = await provider.GetOrNullAsync(setting).ConfigureAwait(false); + var value = await provider.GetOrNullAsync(setting); if (value != null) { if (setting.IsEncrypted) @@ -74,7 +74,7 @@ namespace Volo.Abp.Settings { foreach (var provider in providers) { - var value = await provider.GetOrNullAsync(setting).ConfigureAwait(false); + var value = await provider.GetOrNullAsync(setting); if (value != null) { return value; diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProviderExtensions.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProviderExtensions.cs index eb7e3c341c..fb67c4ae77 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProviderExtensions.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProviderExtensions.cs @@ -12,7 +12,7 @@ namespace Volo.Abp.Settings Check.NotNull(name, nameof(name)); return string.Equals( - await settingProvider.GetOrNullAsync(name).ConfigureAwait(false), + await settingProvider.GetOrNullAsync(name), "true", StringComparison.OrdinalIgnoreCase ); @@ -24,7 +24,7 @@ namespace Volo.Abp.Settings Check.NotNull(settingProvider, nameof(settingProvider)); Check.NotNull(name, nameof(name)); - var value = await settingProvider.GetOrNullAsync(name).ConfigureAwait(false); + var value = await settingProvider.GetOrNullAsync(name); return value?.To() ?? defaultValue; } } diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/TenantSettingValueProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/TenantSettingValueProvider.cs index 408f70aac9..eab23b7258 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/TenantSettingValueProvider.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/TenantSettingValueProvider.cs @@ -19,7 +19,7 @@ namespace Volo.Abp.Settings public override async Task GetOrNullAsync(SettingDefinition setting) { - return await SettingStore.GetOrNullAsync(setting.Name, Name, CurrentTenant.Id?.ToString()).ConfigureAwait(false); + return await SettingStore.GetOrNullAsync(setting.Name, Name, CurrentTenant.Id?.ToString()); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/UserSettingValueProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/UserSettingValueProvider.cs index a3df714c00..01125f3201 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/UserSettingValueProvider.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/UserSettingValueProvider.cs @@ -24,7 +24,7 @@ namespace Volo.Abp.Settings return null; } - return await SettingStore.GetOrNullAsync(setting.Name, Name, CurrentUser.Id.ToString()).ConfigureAwait(false); + return await SettingStore.GetOrNullAsync(setting.Name, Name, CurrentUser.Id.ToString()); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Sms/FodyWeavers.xml b/framework/src/Volo.Abp.Sms/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Sms/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Sms/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Specifications/FodyWeavers.xml b/framework/src/Volo.Abp.Specifications/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Specifications/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Specifications/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.TestBase/FodyWeavers.xml b/framework/src/Volo.Abp.TestBase/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.TestBase/FodyWeavers.xml +++ b/framework/src/Volo.Abp.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Threading/FodyWeavers.xml b/framework/src/Volo.Abp.Threading/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Threading/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Threading/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Timing/FodyWeavers.xml b/framework/src/Volo.Abp.Timing/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Timing/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Timing/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI.Navigation/FodyWeavers.xml b/framework/src/Volo.Abp.UI.Navigation/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.UI.Navigation/FodyWeavers.xml +++ b/framework/src/Volo.Abp.UI.Navigation/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuManager.cs b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuManager.cs index 7ca2baa6b0..5c33866aa2 100644 --- a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuManager.cs +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuManager.cs @@ -30,7 +30,7 @@ namespace Volo.Abp.UI.Navigation foreach (var contributor in Options.MenuContributors) { - await contributor.ConfigureMenuAsync(context).ConfigureAwait(false); + await contributor.ConfigureMenuAsync(context); } } diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs index fed4235087..ffa31e66a2 100644 --- a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs @@ -33,7 +33,7 @@ namespace Volo.Abp.UI.Navigation.Urls appName, urlName ) -.ConfigureAwait(false)).ConfigureAwait(false); + ); } protected virtual Task GetConfiguredUrl(string appName, string urlName) @@ -89,7 +89,7 @@ namespace Volo.Abp.UI.Navigation.Urls if (CurrentTenant.Id.HasValue) { - url = url.Replace(tenantNamePlaceHolder, await GetCurrentTenantNameAsync().ConfigureAwait(false)); + url = url.Replace(tenantNamePlaceHolder, await GetCurrentTenantNameAsync()); } else { @@ -103,7 +103,7 @@ namespace Volo.Abp.UI.Navigation.Urls { if (CurrentTenant.Id.HasValue && CurrentTenant.Name.IsNullOrEmpty()) { - var tenantConfiguration = await TenantStore.FindAsync(CurrentTenant.Id.Value).ConfigureAwait(false); + var tenantConfiguration = await TenantStore.FindAsync(CurrentTenant.Id.Value); return tenantConfiguration.Name; } diff --git a/framework/src/Volo.Abp.UI/FodyWeavers.xml b/framework/src/Volo.Abp.UI/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.UI/FodyWeavers.xml +++ b/framework/src/Volo.Abp.UI/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Uow/FodyWeavers.xml b/framework/src/Volo.Abp.Uow/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Uow/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Uow/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs index 18010136b2..e7e86774b5 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs @@ -80,7 +80,7 @@ namespace Volo.Abp.Uow { if (databaseApi is ISupportsSavingChanges) { - await (databaseApi as ISupportsSavingChanges).SaveChangesAsync(cancellationToken).ConfigureAwait(false); + await (databaseApi as ISupportsSavingChanges).SaveChangesAsync(cancellationToken); } } } @@ -107,10 +107,10 @@ namespace Volo.Abp.Uow try { _isCompleting = true; - await SaveChangesAsync(cancellationToken).ConfigureAwait(false); - await CommitTransactionsAsync().ConfigureAwait(false); + await SaveChangesAsync(cancellationToken); + await CommitTransactionsAsync(); IsCompleted = true; - await OnCompletedAsync().ConfigureAwait(false); + await OnCompletedAsync(); } catch (Exception ex) { @@ -128,7 +128,7 @@ namespace Volo.Abp.Uow _isRolledback = true; - await RollbackAllAsync(cancellationToken).ConfigureAwait(false); + await RollbackAllAsync(cancellationToken); } public IDatabaseApi FindDatabaseApi(string key) @@ -194,7 +194,7 @@ namespace Volo.Abp.Uow { foreach (var handler in CompletedHandlers) { - await handler.Invoke().ConfigureAwait(false); + await handler.Invoke(); } } @@ -278,7 +278,7 @@ namespace Volo.Abp.Uow { try { - await (databaseApi as ISupportsRollback).RollbackAsync(cancellationToken).ConfigureAwait(false); + await (databaseApi as ISupportsRollback).RollbackAsync(cancellationToken); } catch { } } @@ -290,7 +290,7 @@ namespace Volo.Abp.Uow { try { - await (transactionApi as ISupportsRollback).RollbackAsync(cancellationToken).ConfigureAwait(false); + await (transactionApi as ISupportsRollback).RollbackAsync(cancellationToken); } catch { } } @@ -309,7 +309,7 @@ namespace Volo.Abp.Uow { foreach (var transaction in GetAllActiveTransactionApis()) { - await transaction.CommitAsync().ConfigureAwait(false); + await transaction.CommitAsync(); } } diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs index d08c9b943e..81bd132a5e 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs @@ -22,14 +22,14 @@ namespace Volo.Abp.Uow { if (!UnitOfWorkHelper.IsUnitOfWorkMethod(invocation.Method, out var unitOfWorkAttribute)) { - await invocation.ProceedAsync().ConfigureAwait(false); + await invocation.ProceedAsync(); return; } using (var uow = _unitOfWorkManager.Begin(CreateOptions(invocation, unitOfWorkAttribute))) { - await invocation.ProceedAsync().ConfigureAwait(false); - await uow.CompleteAsync().ConfigureAwait(false); + await invocation.ProceedAsync(); + await uow.CompleteAsync(); } } diff --git a/framework/src/Volo.Abp.Validation/FodyWeavers.xml b/framework/src/Volo.Abp.Validation/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.Validation/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Validation/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/ValidationInterceptor.cs b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/ValidationInterceptor.cs index 24581c54d9..b4ce642471 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/ValidationInterceptor.cs +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/ValidationInterceptor.cs @@ -16,7 +16,7 @@ namespace Volo.Abp.Validation public override async Task InterceptAsync(IAbpMethodInvocation invocation) { Validate(invocation); - await invocation.ProceedAsync().ConfigureAwait(false); + await invocation.ProceedAsync(); } protected virtual void Validate(IAbpMethodInvocation invocation) diff --git a/framework/src/Volo.Abp.VirtualFileSystem/FodyWeavers.xml b/framework/src/Volo.Abp.VirtualFileSystem/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp.VirtualFileSystem/FodyWeavers.xml +++ b/framework/src/Volo.Abp.VirtualFileSystem/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.VirtualFileSystem/Microsoft/Extensions/FileProviders/AbpFileInfoExtensions.cs b/framework/src/Volo.Abp.VirtualFileSystem/Microsoft/Extensions/FileProviders/AbpFileInfoExtensions.cs index 9186e4d9e2..7d3505d616 100644 --- a/framework/src/Volo.Abp.VirtualFileSystem/Microsoft/Extensions/FileProviders/AbpFileInfoExtensions.cs +++ b/framework/src/Volo.Abp.VirtualFileSystem/Microsoft/Extensions/FileProviders/AbpFileInfoExtensions.cs @@ -56,7 +56,7 @@ namespace Microsoft.Extensions.FileProviders using (var stream = fileInfo.CreateReadStream()) { - return await stream.GetAllBytesAsync().ConfigureAwait(false); + return await stream.GetAllBytesAsync(); } } diff --git a/framework/src/Volo.Abp/FodyWeavers.xml b/framework/src/Volo.Abp/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/src/Volo.Abp/FodyWeavers.xml +++ b/framework/src/Volo.Abp/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/AbpTestBase/FodyWeavers.xml b/framework/test/AbpTestBase/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/AbpTestBase/FodyWeavers.xml +++ b/framework/test/AbpTestBase/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/SimpleConsoleDemo/FodyWeavers.xml b/framework/test/SimpleConsoleDemo/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/SimpleConsoleDemo/FodyWeavers.xml +++ b/framework/test/SimpleConsoleDemo/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/App/AppModule.cs b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/App/AppModule.cs index 8ec04b23a6..44e2e38380 100644 --- a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/App/AppModule.cs +++ b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/App/AppModule.cs @@ -41,7 +41,7 @@ namespace Volo.Abp.AspNetCore.App }; var result = jsonSerializer.Serialize(dictionary, camelCase: false); - await ctx.Response.WriteAsync(result).ConfigureAwait(false); + await ctx.Response.WriteAsync(result); }); } } diff --git a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_WithDomainResolver_Tests.cs b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_WithDomainResolver_Tests.cs index 437240971d..e2ac111f5d 100644 --- a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_WithDomainResolver_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_WithDomainResolver_Tests.cs @@ -46,14 +46,14 @@ namespace Volo.Abp.AspNetCore.MultiTenancy [Fact] public async Task Should_Use_Host_If_Tenant_Is_Not_Specified() { - var result = await GetResponseAsObjectAsync>("http://abp.io").ConfigureAwait(false); + var result = await GetResponseAsObjectAsync>("http://abp.io"); result["TenantId"].ShouldBe(""); } [Fact] public async Task Should_Use_Domain_If_Specified() { - var result = await GetResponseAsObjectAsync>("http://acme.abp.io").ConfigureAwait(false); + var result = await GetResponseAsObjectAsync>("http://acme.abp.io"); result["TenantId"].ShouldBe(_testTenantId.ToString()); } @@ -62,7 +62,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy { Client.DefaultRequestHeaders.Add(_options.TenantKey, Guid.NewGuid().ToString()); - var result = await GetResponseAsObjectAsync>("http://acme.abp.io").ConfigureAwait(false); + var result = await GetResponseAsObjectAsync>("http://acme.abp.io"); result["TenantId"].ShouldBe(_testTenantId.ToString()); } } diff --git a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_Without_DomainResolver_Tests.cs b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_Without_DomainResolver_Tests.cs index 64f7ed2892..37365089af 100644 --- a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_Without_DomainResolver_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_Without_DomainResolver_Tests.cs @@ -42,7 +42,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy [Fact] public async Task Should_Use_Host_If_Tenant_Is_Not_Specified() { - var result = await GetResponseAsObjectAsync>("http://abp.io").ConfigureAwait(false); + var result = await GetResponseAsObjectAsync>("http://abp.io"); result["TenantId"].ShouldBe(""); } @@ -50,7 +50,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy public async Task Should_Use_QueryString_Tenant_Id_If_Specified() { - var result = await GetResponseAsObjectAsync>($"http://abp.io?{_options.TenantKey}={_testTenantName}").ConfigureAwait(false); + var result = await GetResponseAsObjectAsync>($"http://abp.io?{_options.TenantKey}={_testTenantName}"); result["TenantId"].ShouldBe(_testTenantId.ToString()); } @@ -59,7 +59,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy { Client.DefaultRequestHeaders.Add(_options.TenantKey, _testTenantId.ToString()); - var result = await GetResponseAsObjectAsync>("http://abp.io").ConfigureAwait(false); + var result = await GetResponseAsObjectAsync>("http://abp.io"); result["TenantId"].ShouldBe(_testTenantId.ToString()); } @@ -68,7 +68,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy { Client.DefaultRequestHeaders.Add("Cookie", new CookieHeaderValue(_options.TenantKey, _testTenantId.ToString()).ToString()); - var result = await GetResponseAsObjectAsync>("http://abp.io").ConfigureAwait(false); + var result = await GetResponseAsObjectAsync>("http://abp.io"); result["TenantId"].ShouldBe(_testTenantId.ToString()); } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ApiExploring/AbpApiDefinitionController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ApiExploring/AbpApiDefinitionController_Tests.cs index f141cf89c1..44b206e462 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ApiExploring/AbpApiDefinitionController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ApiExploring/AbpApiDefinitionController_Tests.cs @@ -10,7 +10,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ApiExploring [Fact] public async Task GetAsync() { - var model = await GetResponseAsObjectAsync("/api/abp/api-definition").ConfigureAwait(false); + var model = await GetResponseAsObjectAsync("/api/abp/api-definition"); model.ShouldNotBeNull(); } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationConfigurationBuilder_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationConfigurationBuilder_Tests.cs index 590aa1a142..c5f53e4721 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationConfigurationBuilder_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationConfigurationBuilder_Tests.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations { var applicationConfigurationBuilder = GetRequiredService(); - var config = await applicationConfigurationBuilder.GetAsync().ConfigureAwait(false); + var config = await applicationConfigurationBuilder.GetAsync(); config.Auth.ShouldNotBeNull(); config.Localization.ShouldNotBeNull(); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Authorization/AuthTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Authorization/AuthTestController_Tests.cs index 2937fd6759..8caf59d0c0 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Authorization/AuthTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Authorization/AuthTestController_Tests.cs @@ -29,7 +29,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Authorization [Fact] public async Task Should_Call_Anonymous_Method_Without_Authentication() { - var result = await GetResponseAsStringAsync("/AuthTest/AnonymousTest").ConfigureAwait(false); + var result = await GetResponseAsStringAsync("/AuthTest/AnonymousTest"); result.ShouldBe("OK"); } @@ -41,7 +41,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Authorization new Claim(AbpClaimTypes.UserId, AuthTestController.FakeUserId.ToString()) }); - var result = await GetResponseAsStringAsync("/AuthTest/SimpleAuthorizationTest").ConfigureAwait(false); + var result = await GetResponseAsStringAsync("/AuthTest/SimpleAuthorizationTest"); result.ShouldBe("OK"); } @@ -54,7 +54,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Authorization new Claim("MyCustomClaimType", "42") }); - var result = await GetResponseAsStringAsync("/AuthTest/CustomPolicyTest").ConfigureAwait(false); + var result = await GetResponseAsStringAsync("/AuthTest/CustomPolicyTest"); result.ShouldBe("OK"); } @@ -70,7 +70,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Authorization //TODO: We can get a real exception if we properly configure authentication schemas for this project await Assert.ThrowsAsync(async () => await GetResponseAsStringAsync("/AuthTest/CustomPolicyTest") -.ConfigureAwait(false)).ConfigureAwait(false); + ); } [Fact] @@ -81,7 +81,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Authorization new Claim(AbpClaimTypes.UserId, AuthTestController.FakeUserId.ToString()) }); - var result = await GetResponseAsStringAsync("/AuthTest/PermissionTest").ConfigureAwait(false); + var result = await GetResponseAsStringAsync("/AuthTest/PermissionTest"); result.ShouldBe("OK"); } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Authorization/FakeAuthenticationMiddleware.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Authorization/FakeAuthenticationMiddleware.cs index 1952ef22b9..b9caa1d7cb 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Authorization/FakeAuthenticationMiddleware.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Authorization/FakeAuthenticationMiddleware.cs @@ -26,7 +26,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Authorization }); } - await next(context).ConfigureAwait(false); + await next(context); } } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/ExceptionTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/ExceptionTestController_Tests.cs index 1d11103c6f..5243307116 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/ExceptionTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/ExceptionTestController_Tests.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ExceptionHandling [Fact] public async Task Should_Return_RemoteServiceErrorResponse_For_UserFriendlyException_For_Void_Return_Value() { - var result = await GetResponseAsObjectAsync("/api/exception-test/UserFriendlyException1", HttpStatusCode.Forbidden).ConfigureAwait(false); + var result = await GetResponseAsObjectAsync("/api/exception-test/UserFriendlyException1", HttpStatusCode.Forbidden); result.Error.ShouldNotBeNull(); result.Error.Message.ShouldBe("This is a sample exception!"); } @@ -23,7 +23,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ExceptionHandling async () => await GetResponseAsObjectAsync( "/api/exception-test/UserFriendlyException2" ) -.ConfigureAwait(false)).ConfigureAwait(false); + ); } } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Features/FeatureTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Features/FeatureTestController_Tests.cs index 52ff323be6..c017841548 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Features/FeatureTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Features/FeatureTestController_Tests.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Features { await GetResponseAsStringAsync( "/api/feature-test/allowed-feature", HttpStatusCode.NoContent - ).ConfigureAwait(false); + ); } [Fact] @@ -20,7 +20,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Features await GetResponseAsStringAsync( "/api/feature-test/not-allowed-feature", HttpStatusCode.Unauthorized - ).ConfigureAwait(false); + ); } [Fact] @@ -28,7 +28,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Features { await GetResponseAsStringAsync( "/api/feature-test/no-feature" - ).ConfigureAwait(false); + ); } } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Json/JsonResultController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Json/JsonResultController_Tests.cs index eeb47ea0a3..3e365cde3e 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Json/JsonResultController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Json/JsonResultController_Tests.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Json { var time = await GetResponseAsStringAsync( "/api/json-result-test/json-result-action" - ).ConfigureAwait(false); + ); time.ShouldContain("2019*01*01"); } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/MvcLocalization_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/MvcLocalization_Tests.cs index 2f5ad74df9..4d9a4f4624 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/MvcLocalization_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/MvcLocalization_Tests.cs @@ -27,7 +27,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Localization [Fact] public async Task Should_Get_Same_Text_If_Not_Defined_In_Razor_View() { - var result = await GetResponseAsStringAsync("/LocalizationTest/HelloJohn").ConfigureAwait(false); + var result = await GetResponseAsStringAsync("/LocalizationTest/HelloJohn"); result.ShouldBe("Hello John."); } @@ -36,13 +36,13 @@ namespace Volo.Abp.AspNetCore.Mvc.Localization { using (CultureHelper.Use("en")) { - var result = await GetResponseAsStringAsync("/LocalizationTest/PersonForm").ConfigureAwait(false); + var result = await GetResponseAsStringAsync("/LocalizationTest/PersonForm"); result.ShouldContain(""); } using (CultureHelper.Use("tr")) { - var result = await GetResponseAsStringAsync("/LocalizationTest/PersonForm").ConfigureAwait(false); + var result = await GetResponseAsStringAsync("/LocalizationTest/PersonForm"); result.ShouldContain(""); } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs index 45f8410eee..632a02194f 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs @@ -21,10 +21,10 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding [Fact] public async Task DateTimeKind_Test() { - var response = await Client.GetAsync("/api/model-Binding-test/DateTimeKind?input=2010-01-01T00:00:00Z").ConfigureAwait(false); + var response = await Client.GetAsync("/api/model-Binding-test/DateTimeKind?input=2010-01-01T00:00:00Z"); response.StatusCode.ShouldBe(HttpStatusCode.OK); - var resultAsString = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + var resultAsString = await response.Content.ReadAsStringAsync(); resultAsString.ShouldBe(DateTimeKind.ToString().ToLower()); } @@ -32,10 +32,10 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding public async Task NullableDateTimeKind_Test() { var response = - await Client.GetAsync("/api/model-Binding-test/NullableDateTimeKind?input=2010-01-01T00:00:00Z").ConfigureAwait(false); + await Client.GetAsync("/api/model-Binding-test/NullableDateTimeKind?input=2010-01-01T00:00:00Z"); response.StatusCode.ShouldBe(HttpStatusCode.OK); - var resultAsString = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + var resultAsString = await response.Content.ReadAsStringAsync(); resultAsString.ShouldBe(DateTimeKind.ToString().ToLower()); } @@ -44,10 +44,10 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding { var response = await Client.GetAsync( - "/api/model-Binding-test/DisableDateTimeNormalizationDateTimeKind?input=2010-01-01T00:00:00Z").ConfigureAwait(false); + "/api/model-Binding-test/DisableDateTimeNormalizationDateTimeKind?input=2010-01-01T00:00:00Z"); response.StatusCode.ShouldBe(HttpStatusCode.OK); - var resultAsString = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + var resultAsString = await response.Content.ReadAsStringAsync(); //Time parameter(2010-01-01T00:00:00Z) with time zone information, so the default Kind is Local. resultAsString.ShouldBe(DateTimeKind.Local.ToString().ToLower()); } @@ -57,10 +57,10 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding { var response = await Client.GetAsync( - "/api/model-Binding-test/DisableDateTimeNormalizationNullableDateTimeKind?input=2010-01-01T00:00:00Z").ConfigureAwait(false); + "/api/model-Binding-test/DisableDateTimeNormalizationNullableDateTimeKind?input=2010-01-01T00:00:00Z"); response.StatusCode.ShouldBe(HttpStatusCode.OK); - var resultAsString = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + var resultAsString = await response.Content.ReadAsStringAsync(); //Time parameter(2010-01-01T00:00:00Z) with time zone information, so the default Kind is Local. resultAsString.ShouldBe(DateTimeKind.Local.ToString().ToLower()); } @@ -72,10 +72,10 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding "Time1=2010-01-01T00:00:00Z&" + "Time2=2010-01-01T00:00:00Z&" + "Time3=2010-01-01T00:00:00Z&" + - "InnerModel.Time4=2010-01-01T00:00:00Z").ConfigureAwait(false); + "InnerModel.Time4=2010-01-01T00:00:00Z"); response.StatusCode.ShouldBe(HttpStatusCode.OK); - var resultAsString = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + var resultAsString = await response.Content.ReadAsStringAsync(); //Time parameter(2010-01-01T00:00:00Z) with time zone information, so the default Kind is Local. resultAsString.ShouldBe( $"local_{DateTimeKind.ToString().ToLower()}_{DateTimeKind.ToString().ToLower()}_local"); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/PeopleAppService_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/PeopleAppService_Tests.cs index c3c90d02f7..96a79d8971 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/PeopleAppService_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/PeopleAppService_Tests.cs @@ -35,7 +35,7 @@ namespace Volo.Abp.AspNetCore.Mvc [Fact] public async Task GetAll_Test() { - var result = await GetResponseAsObjectAsync>("/api/app/people").ConfigureAwait(false); + var result = await GetResponseAsObjectAsync>("/api/app/people"); result.Items.Count.ShouldBeGreaterThan(0); } @@ -44,7 +44,7 @@ namespace Volo.Abp.AspNetCore.Mvc { var firstPerson = (await _personRepository.GetListAsync()).First(); - var result = await GetResponseAsObjectAsync($"/api/app/people/{firstPerson.Id}").ConfigureAwait(false); + var result = await GetResponseAsObjectAsync($"/api/app/people/{firstPerson.Id}"); result.Name.ShouldBe(firstPerson.Name); } @@ -53,9 +53,9 @@ namespace Volo.Abp.AspNetCore.Mvc { var firstPerson = (await _personRepository.GetListAsync()).First(); - await Client.DeleteAsync($"/api/app/people/{firstPerson.Id}").ConfigureAwait(false); + await Client.DeleteAsync($"/api/app/people/{firstPerson.Id}"); - (await _personRepository.FindAsync(firstPerson.Id).ConfigureAwait(false)).ShouldBeNull(); + (await _personRepository.FindAsync(firstPerson.Id)).ShouldBeNull(); } [Fact] @@ -68,10 +68,10 @@ namespace Volo.Abp.AspNetCore.Mvc var response = await Client.PostAsync( "/api/app/people", new StringContent(postData, Encoding.UTF8, MimeTypes.Application.Json) - ).ConfigureAwait(false); + ); response.StatusCode.ShouldBe(HttpStatusCode.OK); - var resultAsString = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + var resultAsString = await response.Content.ReadAsStringAsync(); PersonDto resultDto = _jsonSerializer.Deserialize(resultAsString); //Assert @@ -80,7 +80,7 @@ namespace Volo.Abp.AspNetCore.Mvc resultDto.Name.ShouldBe("John"); resultDto.Age.ShouldBe(33); - (await _personRepository.FindAsync(resultDto.Id).ConfigureAwait(false)).ShouldNotBeNull(); + (await _personRepository.FindAsync(resultDto.Id)).ShouldNotBeNull(); } @@ -100,10 +100,10 @@ namespace Volo.Abp.AspNetCore.Mvc var response = await Client.PutAsync( $"/api/app/people/{updateDto.Id}", new StringContent(putData, Encoding.UTF8, MimeTypes.Application.Json) - ).ConfigureAwait(false); + ); response.StatusCode.ShouldBe(HttpStatusCode.OK); - var resultAsString = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + var resultAsString = await response.Content.ReadAsStringAsync(); PersonDto resultDto = _jsonSerializer.Deserialize(resultAsString); //Assert @@ -112,7 +112,7 @@ namespace Volo.Abp.AspNetCore.Mvc resultDto.Name.ShouldBe(firstPerson.Name); resultDto.Age.ShouldBe(firstPersonAge + 1); - var personInDb = (await _personRepository.FindAsync(resultDto.Id).ConfigureAwait(false)); + var personInDb = (await _personRepository.FindAsync(resultDto.Id)); personInDb.ShouldNotBeNull(); personInDb.Name.ShouldBe(firstPerson.Name); personInDb.Age.ShouldBe(firstPersonAge + 1); @@ -133,10 +133,10 @@ namespace Volo.Abp.AspNetCore.Mvc var response = await Client.PostAsync( $"/api/app/people/{personToAddNewPhone.Id}/phones", new StringContent(postData, Encoding.UTF8, MimeTypes.Application.Json) - ).ConfigureAwait(false); + ); response.StatusCode.ShouldBe(HttpStatusCode.OK); - var resultAsString = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + var resultAsString = await response.Content.ReadAsStringAsync(); var resultDto = _jsonSerializer.Deserialize(resultAsString); //Assert @@ -144,7 +144,7 @@ namespace Volo.Abp.AspNetCore.Mvc resultDto.Type.ShouldBe(PhoneType.Mobile); resultDto.Number.ShouldBe(phoneNumberToAdd); - var personInDb = await _personRepository.FindAsync(personToAddNewPhone.Id).ConfigureAwait(false); + var personInDb = await _personRepository.FindAsync(personToAddNewPhone.Id); personInDb.ShouldNotBeNull(); personInDb.Phones.Any(p => p.Number == phoneNumberToAdd).ShouldBeTrue(); } @@ -154,7 +154,7 @@ namespace Volo.Abp.AspNetCore.Mvc { var douglas = (await _personRepository.GetListAsync()).First(p => p.Name == "Douglas"); - var result = await GetResponseAsObjectAsync>($"/api/app/people/{douglas.Id}/phones").ConfigureAwait(false); + var result = await GetResponseAsObjectAsync>($"/api/app/people/{douglas.Id}/phones"); result.Items.Count.ShouldBe(douglas.Phones.Count); } @@ -164,7 +164,7 @@ namespace Volo.Abp.AspNetCore.Mvc var douglas = (await _personRepository.GetListAsync()).First(p => p.Name == "Douglas"); var firstPhone = douglas.Phones.First(); - await Client.DeleteAsync($"/api/app/people/{douglas.Id}/phones?number={firstPhone.Number}").ConfigureAwait(false); + await Client.DeleteAsync($"/api/app/people/{douglas.Id}/phones?number={firstPhone.Number}"); douglas = (await _personRepository.GetListAsync()).First(p => p.Name == "Douglas"); douglas.Phones.Any(p => p.Number == firstPhone.Number).ShouldBeFalse(); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ProxyScripting/AbpServiceProxiesController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ProxyScripting/AbpServiceProxiesController_Tests.cs index 2af719ae4d..c7dce93b3a 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ProxyScripting/AbpServiceProxiesController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ProxyScripting/AbpServiceProxiesController_Tests.cs @@ -10,7 +10,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ProxyScripting [Fact] public async Task GetAll() { - var script = await GetResponseAsStringAsync("/Abp/ServiceProxyScript?minify=true").ConfigureAwait(false); + var script = await GetResponseAsStringAsync("/Abp/ServiceProxyScript?minify=true"); script.Length.ShouldBeGreaterThan(0); } @@ -18,10 +18,10 @@ namespace Volo.Abp.AspNetCore.Mvc.ProxyScripting public async Task GetAllWithMinify() { GetRequiredService>().Value.MinifyGeneratedScript = false; - var script = await GetResponseAsStringAsync("/Abp/ServiceProxyScript").ConfigureAwait(false); + var script = await GetResponseAsStringAsync("/Abp/ServiceProxyScript"); GetRequiredService>().Value.MinifyGeneratedScript = true; - var minifyScript = await GetResponseAsStringAsync("/Abp/ServiceProxyScript?minify=true").ConfigureAwait(false); + var minifyScript = await GetResponseAsStringAsync("/Abp/ServiceProxyScript?minify=true"); script.Length.ShouldBeGreaterThan(0); minifyScript.Length.ShouldBeGreaterThan(0); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/NoContentTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/NoContentTestController_Tests.cs index 6c68c13f07..0002a4801b 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/NoContentTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/NoContentTestController_Tests.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Response public async Task Should_Set_No_Content_For_Void_Action() { var result = await GetResponseAsync("/api/NoContent-Test/TestMethod", HttpStatusCode.NoContent) - .ConfigureAwait(false); + ; result.StatusCode.ShouldBe(HttpStatusCode.NoContent); } @@ -19,7 +19,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Response public async Task Should_Not_Set_No_Content_For_Not_Void_Action() { var result = await GetResponseAsync("/api/NoContent-Test/TestMethodWithReturn") - .ConfigureAwait(false); + ; result.StatusCode.ShouldBe(HttpStatusCode.OK); } @@ -27,7 +27,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Response public async Task Should_Not_Set_No_Content_For_Custom_Http_Status_Code_Action() { var result = await GetResponseAsync("/api/NoContent-Test/TestCustomHttpStatusCodeMethod", HttpStatusCode.Redirect) - .ConfigureAwait(false); + ; result.StatusCode.ShouldBe(HttpStatusCode.Redirect); } @@ -35,7 +35,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Response public async Task Should_Set_No_Content_For_Task_Action() { var result = await GetResponseAsync("/api/NoContent-Test/TestAsyncMethod", HttpStatusCode.NoContent) - .ConfigureAwait(false); + ; result.StatusCode.ShouldBe(HttpStatusCode.NoContent); } @@ -43,7 +43,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Response public async Task Should_Not_Set_No_Content_For_Not_Task_Action() { var result = await GetResponseAsync("/api/NoContent-Test/TestAsyncMethodWithReturn") - .ConfigureAwait(false); + ; result.StatusCode.ShouldBe(HttpStatusCode.OK); } @@ -51,7 +51,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Response public async Task Should_Not_Set_No_Content_For_Custom_Http_Status_Code_Async_Action() { var result = await GetResponseAsync("/api/NoContent-Test/TestAsyncCustomHttpStatusCodeMethod", HttpStatusCode.Redirect) - .ConfigureAwait(false); + ; result.StatusCode.ShouldBe(HttpStatusCode.Redirect); } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/SimpleController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/SimpleController_Tests.cs index aa111be2f8..cda64b2323 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/SimpleController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/SimpleController_Tests.cs @@ -13,7 +13,7 @@ namespace Volo.Abp.AspNetCore.Mvc { var result = await GetResponseAsStringAsync( GetUrl(nameof(SimpleController.Index)) - ).ConfigureAwait(false); + ); result.ShouldBe("Index-Result"); } @@ -23,7 +23,7 @@ namespace Volo.Abp.AspNetCore.Mvc { var result = await GetResponseAsStringAsync( GetUrl(nameof(SimpleController.About)) - ).ConfigureAwait(false); + ); result.Trim().ShouldBe("

    About

    "); } @@ -35,8 +35,8 @@ namespace Volo.Abp.AspNetCore.Mvc { await GetResponseAsStringAsync( GetUrl(nameof(SimpleController.ExceptionOnRazor)) - ).ConfigureAwait(false); - }).ConfigureAwait(false); + ); + }); } } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Uow/UnitOfWorkMiddleware_Exception_Rollback_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Uow/UnitOfWorkMiddleware_Exception_Rollback_Tests.cs index 81d1c88bee..6400ecb88e 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Uow/UnitOfWorkMiddleware_Exception_Rollback_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Uow/UnitOfWorkMiddleware_Exception_Rollback_Tests.cs @@ -14,7 +14,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Uow [Fact] public async Task Should_Rollback_Transaction_For_Handled_Exceptions() { - var result = await GetResponseAsObjectAsync("/api/unitofwork-test/HandledException", HttpStatusCode.Forbidden).ConfigureAwait(false); + var result = await GetResponseAsObjectAsync("/api/unitofwork-test/HandledException", HttpStatusCode.Forbidden); result.Error.ShouldNotBeNull(); result.Error.Message.ShouldBe("This is a sample exception!"); } @@ -22,11 +22,11 @@ namespace Volo.Abp.AspNetCore.Mvc.Uow [Fact] public async Task Should_Gracefully_Handle_Exceptions_On_Complete() { - var response = await GetResponseAsync("/api/unitofwork-test/ExceptionOnComplete", HttpStatusCode.Forbidden).ConfigureAwait(false); + var response = await GetResponseAsync("/api/unitofwork-test/ExceptionOnComplete", HttpStatusCode.Forbidden); response.Headers.GetValues(AbpHttpConsts.AbpErrorFormat).FirstOrDefault().ShouldBe("true"); - var resultAsString = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + var resultAsString = await response.Content.ReadAsStringAsync(); var result = ServiceProvider.GetRequiredService().Deserialize(resultAsString); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Uow/UnitOfWorkMiddleware_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Uow/UnitOfWorkMiddleware_Tests.cs index 192d1f0e06..abd666e3f5 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Uow/UnitOfWorkMiddleware_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Uow/UnitOfWorkMiddleware_Tests.cs @@ -9,13 +9,13 @@ namespace Volo.Abp.AspNetCore.Mvc.Uow [Fact] public async Task Get_Actions_Should_Not_Be_Transactional() { - await GetResponseAsStringAsync("/api/unitofwork-test/ActionRequiresUow").ConfigureAwait(false); + await GetResponseAsStringAsync("/api/unitofwork-test/ActionRequiresUow"); } [Fact] public async Task Non_Get_Actions_Should_Be_Transactional() { - var result = await Client.PostAsync("/api/unitofwork-test/ActionRequiresUowPost", null).ConfigureAwait(false); + var result = await Client.PostAsync("/api/unitofwork-test/ActionRequiresUowPost", null); result.IsSuccessStatusCode.ShouldBeTrue(); } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Validation/ValidationTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Validation/ValidationTestController_Tests.cs index 9d5cbfa012..361db7845a 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Validation/ValidationTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Validation/ValidationTestController_Tests.cs @@ -12,14 +12,14 @@ namespace Volo.Abp.AspNetCore.Mvc.Validation [Fact] public async Task Should_Validate_Object_Result_Success() { - var result = await GetResponseAsStringAsync("/api/validation-test/object-result-action?value1=hello").ConfigureAwait(false); + var result = await GetResponseAsStringAsync("/api/validation-test/object-result-action?value1=hello"); result.ShouldBe("hello"); } [Fact] public async Task Should_Validate_Object_Result_Failing() { - var result = await GetResponseAsObjectAsync("/api/validation-test/object-result-action?value1=a", HttpStatusCode.BadRequest).ConfigureAwait(false); //value1 has min length of 2 chars. + var result = await GetResponseAsObjectAsync("/api/validation-test/object-result-action?value1=a", HttpStatusCode.BadRequest); //value1 has min length of 2 chars. result.Error.ValidationErrors.Length.ShouldBeGreaterThan(0); } @@ -28,7 +28,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Validation { using (CultureHelper.Use("tr")) { - var result = await GetResponseAsObjectAsync("/api/validation-test/object-result-action?value1=a", HttpStatusCode.BadRequest).ConfigureAwait(false); //value1 has min length of 2 chars. + var result = await GetResponseAsObjectAsync("/api/validation-test/object-result-action?value1=a", HttpStatusCode.BadRequest); //value1 has min length of 2 chars. result.Error.ValidationErrors.Length.ShouldBeGreaterThan(0); result.Error.ValidationErrors[0].Message.ShouldBe("Değer Bir alanı en az '2' uzunluğunda bir metin ya da dizi olmalıdır."); } @@ -37,14 +37,14 @@ namespace Volo.Abp.AspNetCore.Mvc.Validation [Fact] public async Task Should_Not_Validate_Action_Result_Success() { - var result = await GetResponseAsStringAsync("/api/validation-test/action-result-action?value1=hello").ConfigureAwait(false); + var result = await GetResponseAsStringAsync("/api/validation-test/action-result-action?value1=hello"); result.ShouldBe("ModelState.IsValid: true"); } [Fact] public async Task Should_Not_Validate_Action_Result_Failing() { - var result = await GetResponseAsStringAsync("/api/validation-test/action-result-action").ConfigureAwait(false); //Missed the value1 + var result = await GetResponseAsStringAsync("/api/validation-test/action-result-action"); //Missed the value1 result.ShouldBe("ModelState.IsValid: false"); } @@ -52,7 +52,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Validation public async Task Should_Return_Custom_Validate_Errors() { var result = await GetResponseAsObjectAsync( - "/api/validation-test/object-result-action-with-custom_validate?value1=abc", HttpStatusCode.BadRequest).ConfigureAwait(false); //value1 should be hello. + "/api/validation-test/object-result-action-with-custom_validate?value1=abc", HttpStatusCode.BadRequest); //value1 should be hello. result.Error.ValidationErrors.Length.ShouldBeGreaterThan(0); result.Error.ValidationErrors.ShouldContain(x => x.Message == "Value1 should be hello"); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo/Abp/AspNetCore/Mvc/UI/Bootstrap/Demo/Components/Card_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo/Abp/AspNetCore/Mvc/UI/Bootstrap/Demo/Components/Card_Tests.cs index 89d9028fc4..9fcac03459 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo/Abp/AspNetCore/Mvc/UI/Bootstrap/Demo/Components/Card_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo/Abp/AspNetCore/Mvc/UI/Bootstrap/Demo/Components/Card_Tests.cs @@ -9,7 +9,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Components [Fact(Skip = "This test project is not completed yet")] public async Task Index() { - var result = await GetResponseAsStringAsync("/Components/Cards").ConfigureAwait(false); + var result = await GetResponseAsStringAsync("/Components/Cards"); result.ShouldNotBeNullOrEmpty(); } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/FodyWeavers.xml b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/FodyWeavers.xml +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Test/HelloController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Test/HelloController_Tests.cs index a5db492a39..0dc4057bde 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Test/HelloController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Test/HelloController_Tests.cs @@ -18,19 +18,19 @@ namespace Volo.Abp.AspNetCore.Mvc.Versioning.Test [Fact] public async Task GetAsync() { - (await _helloController.GetAsync().ConfigureAwait(false)).ShouldBe("Get-2.0"); + (await _helloController.GetAsync()).ShouldBe("Get-2.0"); } [Fact] public async Task PostAsyncV1() { - (await _helloController.PostAsyncV1().ConfigureAwait(false)).ShouldBe("Post-1.0"); + (await _helloController.PostAsyncV1()).ShouldBe("Post-1.0"); } [Fact] public async Task PostAsyncV2() { - (await _helloController.PostAsyncV2().ConfigureAwait(false)).ShouldBe("Post-2.0"); + (await _helloController.PostAsyncV2()).ShouldBe("Post-2.0"); } } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Test/v1/TodoAppService_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Test/v1/TodoAppService_Tests.cs index 4db9f235be..f5b86cf7d7 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Test/v1/TodoAppService_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Test/v1/TodoAppService_Tests.cs @@ -18,7 +18,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Versioning.Test.v1 [Fact] public async Task GetAsync() { - (await _todoAppService.GetAsync(42).ConfigureAwait(false)).ShouldBe("Compat-42-1.0"); + (await _todoAppService.GetAsync(42)).ShouldBe("Compat-42-1.0"); } } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Test/v2/TodoAppService_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Test/v2/TodoAppService_Tests.cs index 2bfecc2664..d6b681aa2e 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Test/v2/TodoAppService_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Test/v2/TodoAppService_Tests.cs @@ -18,7 +18,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Versioning.Test.v2 [Fact] public async Task GetAsync() { - (await _todoAppService.GetAsync(42).ConfigureAwait(false)).ShouldBe("42-2.0"); + (await _todoAppService.GetAsync(42)).ShouldBe("42-2.0"); } } } diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs index 0a7a189a35..77de765f51 100644 --- a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs @@ -51,7 +51,7 @@ namespace Volo.Abp.AspNetCore.Serilog public async Task TenantId_Not_Set_Test() { var url = GetUrl(nameof(SerilogTestController.Index)); - var result = await GetResponseAsStringAsync(url).ConfigureAwait(false); + var result = await GetResponseAsStringAsync(url); var executedLogEvent = GetLogEvent(ExecutedEndpointLogEventText); @@ -66,7 +66,7 @@ namespace Volo.Abp.AspNetCore.Serilog var url = GetUrl(nameof(SerilogTestController.Index)) + $"?{_tenancyOptions.TenantKey}={_testTenantName}"; - var result = await GetResponseAsStringAsync(url).ConfigureAwait(false); + var result = await GetResponseAsStringAsync(url); var executedLogEvent = GetLogEvent(ExecutedEndpointLogEventText); @@ -81,7 +81,7 @@ namespace Volo.Abp.AspNetCore.Serilog public async Task CorrelationId_Enrichers_Test() { var url = GetUrl(nameof(SerilogTestController.CorrelationId)); - var result = await GetResponseAsStringAsync(url).ConfigureAwait(false); + var result = await GetResponseAsStringAsync(url); var executedLogEvent = GetLogEvent(ExecutedEndpointLogEventText); diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.AspNetCore.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.AspNetCore.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.AspNetCore.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs index 2c647d0556..dd5edff807 100644 --- a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs +++ b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs @@ -26,15 +26,15 @@ namespace Volo.Abp.AspNetCore protected virtual async Task GetResponseAsObjectAsync(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK) { - var strResponse = await GetResponseAsStringAsync(url, expectedStatusCode).ConfigureAwait(false); + var strResponse = await GetResponseAsStringAsync(url, expectedStatusCode); return JsonConvert.DeserializeObject(strResponse, SharedJsonSerializerSettings); } protected virtual async Task GetResponseAsStringAsync(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK) { - using (var response = await GetResponseAsync(url, expectedStatusCode).ConfigureAwait(false)) + using (var response = await GetResponseAsync(url, expectedStatusCode)) { - return await response.Content.ReadAsStringAsync().ConfigureAwait(false); + return await response.Content.ReadAsStringAsync(); } } @@ -43,7 +43,7 @@ namespace Volo.Abp.AspNetCore using (var requestMessage = new HttpRequestMessage(HttpMethod.Get, url)) { requestMessage.Headers.Add("Accept-Language", CultureInfo.CurrentUICulture.Name); - var response = await Client.SendAsync(requestMessage).ConfigureAwait(false); + var response = await Client.SendAsync(requestMessage); response.StatusCode.ShouldBe(expectedStatusCode); return response; } diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/VirtualFileSystem/VirtualFileSystem_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/VirtualFileSystem/VirtualFileSystem_Tests.cs index 88399bd9a7..142d44baec 100644 --- a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/VirtualFileSystem/VirtualFileSystem_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/VirtualFileSystem/VirtualFileSystem_Tests.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.AspNetCore.VirtualFileSystem { var result = await GetResponseAsStringAsync( "/SampleFiles/test1.js" - ).ConfigureAwait(false); + ); result.ShouldBe("test1.js-content"); } diff --git a/framework/test/Volo.Abp.Auditing.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Auditing.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.Auditing.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.Auditing.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditingInterceptor_Tests.cs b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditingInterceptor_Tests.cs index 516310b781..a6fd566df7 100644 --- a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditingInterceptor_Tests.cs +++ b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditingInterceptor_Tests.cs @@ -38,8 +38,8 @@ namespace Volo.Abp.Auditing using (var scope = _auditingManager.BeginScope()) { - await myAuditedObject1.DoItAsync(new InputObject { Value1 = "forty-two", Value2 = 42 }).ConfigureAwait(false); - await scope.SaveAsync().ConfigureAwait(false); + await myAuditedObject1.DoItAsync(new InputObject { Value1 = "forty-two", Value2 = 42 }); + await scope.SaveAsync(); } #pragma warning disable 4014 diff --git a/framework/test/Volo.Abp.Authorization.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Authorization.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.Authorization.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.Authorization.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/Authorization_Tests.cs b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/Authorization_Tests.cs index 2950c7c92a..104d75c11b 100644 --- a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/Authorization_Tests.cs +++ b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/Authorization_Tests.cs @@ -22,8 +22,8 @@ namespace Volo.Abp.Authorization { await Assert.ThrowsAsync(async () => { - await _myAuthorizedService1.ProtectedByClass().ConfigureAwait(false); - }).ConfigureAwait(false); + await _myAuthorizedService1.ProtectedByClass(); + }); } [Fact] @@ -31,20 +31,20 @@ namespace Volo.Abp.Authorization { await Assert.ThrowsAsync(async () => { - await _myAuthorizedService1.ProtectedByClassAsync().ConfigureAwait(false); - }).ConfigureAwait(false); + await _myAuthorizedService1.ProtectedByClassAsync(); + }); } [Fact] public async Task Should_Allow_To_Call_Anonymous_Method() { - (await _myAuthorizedService1.Anonymous().ConfigureAwait(false)).ShouldBe(42); + (await _myAuthorizedService1.Anonymous()).ShouldBe(42); } [Fact] public async Task Should_Allow_To_Call_Anonymous_Method_Async() { - (await _myAuthorizedService1.AnonymousAsync().ConfigureAwait(false)).ShouldBe(42); + (await _myAuthorizedService1.AnonymousAsync()).ShouldBe(42); } [Fact] diff --git a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/MyAuthorizedService1.cs b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/MyAuthorizedService1.cs index 6d64ed80dd..b1b2a4c43f 100644 --- a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/MyAuthorizedService1.cs +++ b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/MyAuthorizedService1.cs @@ -16,7 +16,7 @@ namespace Volo.Abp.Authorization.TestServices [AllowAnonymous] public virtual async Task AnonymousAsync() { - await Task.Delay(10).ConfigureAwait(false); + await Task.Delay(10); return 42; } @@ -27,7 +27,7 @@ namespace Volo.Abp.Authorization.TestServices public virtual async Task ProtectedByClassAsync() { - await Task.Delay(10).ConfigureAwait(false); + await Task.Delay(10); return 42; } } diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.AutoMapper.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.AutoMapper.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.AutoMapper.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Autofac.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Autofac.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.Autofac.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.Autofac.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.BackgroundJobs.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.BackgroundJobs.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.BackgroundJobs.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.BackgroundJobs.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo/Abp/BackgroundJobs/BackgroundJobManager_Tests.cs b/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo/Abp/BackgroundJobs/BackgroundJobManager_Tests.cs index 2cd76620ff..3a84e38df1 100644 --- a/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo/Abp/BackgroundJobs/BackgroundJobManager_Tests.cs +++ b/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo/Abp/BackgroundJobs/BackgroundJobManager_Tests.cs @@ -19,17 +19,17 @@ namespace Volo.Abp.BackgroundJobs [Fact] public async Task Should_Store_Jobs() { - var jobIdAsString = await _backgroundJobManager.EnqueueAsync(new MyJobArgs("42")).ConfigureAwait(false); + var jobIdAsString = await _backgroundJobManager.EnqueueAsync(new MyJobArgs("42")); jobIdAsString.ShouldNotBe(default); - (await _backgroundJobStore.FindAsync(Guid.Parse(jobIdAsString)).ConfigureAwait(false)).ShouldNotBeNull(); + (await _backgroundJobStore.FindAsync(Guid.Parse(jobIdAsString))).ShouldNotBeNull(); } [Fact] public async Task Should_Store_Async_Jobs() { - var jobIdAsString = await _backgroundJobManager.EnqueueAsync(new MyAsyncJobArgs("42")).ConfigureAwait(false); + var jobIdAsString = await _backgroundJobManager.EnqueueAsync(new MyAsyncJobArgs("42")); jobIdAsString.ShouldNotBe(default); - (await _backgroundJobStore.FindAsync(Guid.Parse(jobIdAsString)).ConfigureAwait(false)).ShouldNotBeNull(); + (await _backgroundJobStore.FindAsync(Guid.Parse(jobIdAsString))).ShouldNotBeNull(); } } } diff --git a/framework/test/Volo.Abp.Caching.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Caching.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.Caching.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.Caching.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/DistributedCache_ConfigureOptions_Test.cs b/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/DistributedCache_ConfigureOptions_Test.cs index d3afb3addf..0a0509df6c 100644 --- a/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/DistributedCache_ConfigureOptions_Test.cs +++ b/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/DistributedCache_ConfigureOptions_Test.cs @@ -26,7 +26,7 @@ namespace Volo.Abp.Caching var cacheKey = Guid.NewGuid().ToString(); //Get (not exists yet) - var cacheItem = await personCache.GetAsync(cacheKey).ConfigureAwait(false); + var cacheItem = await personCache.GetAsync(cacheKey); cacheItem.ShouldBeNull(); GetDefaultCachingOptions(personCache).SlidingExpiration.ShouldBe(TimeSpan.FromMinutes(20)); diff --git a/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/DistributedCache_Tests.cs b/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/DistributedCache_Tests.cs index 50a4a76763..14677a73bd 100644 --- a/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/DistributedCache_Tests.cs +++ b/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/DistributedCache_Tests.cs @@ -17,23 +17,23 @@ namespace Volo.Abp.Caching const string personName = "john nash"; //Get (not exists yet) - var cacheItem = await personCache.GetAsync(cacheKey).ConfigureAwait(false); + var cacheItem = await personCache.GetAsync(cacheKey); cacheItem.ShouldBeNull(); //Set cacheItem = new PersonCacheItem(personName); - await personCache.SetAsync(cacheKey, cacheItem).ConfigureAwait(false); + await personCache.SetAsync(cacheKey, cacheItem); //Get (it should be available now - cacheItem = await personCache.GetAsync(cacheKey).ConfigureAwait(false); + cacheItem = await personCache.GetAsync(cacheKey); cacheItem.ShouldNotBeNull(); cacheItem.Name.ShouldBe(personName); //Remove - await personCache.RemoveAsync(cacheKey).ConfigureAwait(false); + await personCache.RemoveAsync(cacheKey); //Get (not exists since removed) - cacheItem = await personCache.GetAsync(cacheKey).ConfigureAwait(false); + cacheItem = await personCache.GetAsync(cacheKey); cacheItem.ShouldBeNull(); } @@ -85,41 +85,41 @@ namespace Volo.Abp.Caching const string personName = "john nash"; //Get (not exists yet) - var cacheItem = await personCache.GetAsync(cacheKey).ConfigureAwait(false); + var cacheItem = await personCache.GetAsync(cacheKey); cacheItem.ShouldBeNull(); - var cacheItem1 = await otherPersonCache.GetAsync(cacheKey).ConfigureAwait(false); + var cacheItem1 = await otherPersonCache.GetAsync(cacheKey); cacheItem1.ShouldBeNull(); //Set cacheItem = new PersonCacheItem(personName); - await personCache.SetAsync(cacheKey, cacheItem).ConfigureAwait(false); + await personCache.SetAsync(cacheKey, cacheItem); //Get (it should be available now, but otherPersonCache not exists now. - cacheItem = await personCache.GetAsync(cacheKey).ConfigureAwait(false); + cacheItem = await personCache.GetAsync(cacheKey); cacheItem.ShouldNotBeNull(); cacheItem.Name.ShouldBe(personName); - cacheItem1 = await otherPersonCache.GetAsync(cacheKey).ConfigureAwait(false); + cacheItem1 = await otherPersonCache.GetAsync(cacheKey); cacheItem1.ShouldBeNull(); //set other person cache cacheItem1 = new Sail.Testing.Caching.PersonCacheItem(personName); - await otherPersonCache.SetAsync(cacheKey, cacheItem1).ConfigureAwait(false); + await otherPersonCache.SetAsync(cacheKey, cacheItem1); - cacheItem1 = await otherPersonCache.GetAsync(cacheKey).ConfigureAwait(false); + cacheItem1 = await otherPersonCache.GetAsync(cacheKey); cacheItem1.ShouldNotBeNull(); cacheItem1.Name.ShouldBe(personName); //Remove - await personCache.RemoveAsync(cacheKey).ConfigureAwait(false); + await personCache.RemoveAsync(cacheKey); //Get (not exists since removed) - cacheItem = await personCache.GetAsync(cacheKey).ConfigureAwait(false); + cacheItem = await personCache.GetAsync(cacheKey); cacheItem.ShouldBeNull(); - cacheItem1 = await otherPersonCache.GetAsync(cacheKey).ConfigureAwait(false); + cacheItem1 = await otherPersonCache.GetAsync(cacheKey); cacheItem1.ShouldNotBeNull(); } @@ -133,23 +133,23 @@ namespace Volo.Abp.Caching const string personName = "john nash"; //Get (not exists yet) - var cacheItem = await personCache.GetAsync(cacheKey).ConfigureAwait(false); + var cacheItem = await personCache.GetAsync(cacheKey); cacheItem.ShouldBeNull(); //Set cacheItem = new PersonCacheItem(personName); - await personCache.SetAsync(cacheKey, cacheItem).ConfigureAwait(false); + await personCache.SetAsync(cacheKey, cacheItem); //Get (it should be available now - cacheItem = await personCache.GetAsync(cacheKey).ConfigureAwait(false); + cacheItem = await personCache.GetAsync(cacheKey); cacheItem.ShouldNotBeNull(); cacheItem.Name.ShouldBe(personName); //Remove - await personCache.RemoveAsync(cacheKey).ConfigureAwait(false); + await personCache.RemoveAsync(cacheKey); //Get (not exists since removed) - cacheItem = await personCache.GetAsync(cacheKey).ConfigureAwait(false); + cacheItem = await personCache.GetAsync(cacheKey); cacheItem.ShouldBeNull(); } @@ -184,7 +184,7 @@ namespace Volo.Abp.Caching { factoryExecuted = true; return new PersonCacheItem(personName); - }).ConfigureAwait(false); + }); factoryExecuted.ShouldBeFalse(); cacheItem.Name.ShouldBe(personName); @@ -201,41 +201,41 @@ namespace Volo.Abp.Caching const string personName = "john nash"; //Get (not exists yet) - var cacheItem = await personCache.GetAsync(cacheKey).ConfigureAwait(false); + var cacheItem = await personCache.GetAsync(cacheKey); cacheItem.ShouldBeNull(); - var cacheItem1 = await otherPersonCache.GetAsync(cacheKey).ConfigureAwait(false); + var cacheItem1 = await otherPersonCache.GetAsync(cacheKey); cacheItem1.ShouldBeNull(); //Set cacheItem = new PersonCacheItem(personName); - await personCache.SetAsync(cacheKey, cacheItem).ConfigureAwait(false); + await personCache.SetAsync(cacheKey, cacheItem); //Get (it should be available now, but otherPersonCache not exists now. - cacheItem = await personCache.GetAsync(cacheKey).ConfigureAwait(false); + cacheItem = await personCache.GetAsync(cacheKey); cacheItem.ShouldNotBeNull(); cacheItem.Name.ShouldBe(personName); - cacheItem1 = await otherPersonCache.GetAsync(cacheKey).ConfigureAwait(false); + cacheItem1 = await otherPersonCache.GetAsync(cacheKey); cacheItem1.ShouldBeNull(); //set other person cache cacheItem1 = new Sail.Testing.Caching.PersonCacheItem(personName); - await otherPersonCache.SetAsync(cacheKey, cacheItem1).ConfigureAwait(false); + await otherPersonCache.SetAsync(cacheKey, cacheItem1); - cacheItem1 = await otherPersonCache.GetAsync(cacheKey).ConfigureAwait(false); + cacheItem1 = await otherPersonCache.GetAsync(cacheKey); cacheItem1.ShouldNotBeNull(); cacheItem1.Name.ShouldBe(personName); //Remove - await personCache.RemoveAsync(cacheKey).ConfigureAwait(false); + await personCache.RemoveAsync(cacheKey); //Get (not exists since removed) - cacheItem = await personCache.GetAsync(cacheKey).ConfigureAwait(false); + cacheItem = await personCache.GetAsync(cacheKey); cacheItem.ShouldBeNull(); - cacheItem1 = await otherPersonCache.GetAsync(cacheKey).ConfigureAwait(false); + cacheItem1 = await otherPersonCache.GetAsync(cacheKey); cacheItem1.ShouldNotBeNull(); } @@ -249,23 +249,23 @@ namespace Volo.Abp.Caching const string personName = "john nash"; //Get (not exists yet) - var cacheItem = await personCache.GetAsync(cacheKey).ConfigureAwait(false); + var cacheItem = await personCache.GetAsync(cacheKey); cacheItem.ShouldBeNull(); //Set cacheItem = new PersonCacheItem(personName); - await personCache.SetAsync(cacheKey, cacheItem).ConfigureAwait(false); + await personCache.SetAsync(cacheKey, cacheItem); //Get (it should be available now - cacheItem = await personCache.GetAsync(cacheKey).ConfigureAwait(false); + cacheItem = await personCache.GetAsync(cacheKey); cacheItem.ShouldNotBeNull(); cacheItem.Name.ShouldBe(personName); //Remove - await personCache.RemoveAsync(cacheKey).ConfigureAwait(false); + await personCache.RemoveAsync(cacheKey); //Get (not exists since removed) - cacheItem = await personCache.GetAsync(cacheKey).ConfigureAwait(false); + cacheItem = await personCache.GetAsync(cacheKey); cacheItem.ShouldBeNull(); } @@ -279,34 +279,34 @@ namespace Volo.Abp.Caching const string personName = "john nash"; //Get (not exists yet) - var cacheItem1 = await personCache.GetAsync(cache1Key).ConfigureAwait(false); - var cacheItem2 = await personCache.GetAsync(cache2Key).ConfigureAwait(false); + var cacheItem1 = await personCache.GetAsync(cache1Key); + var cacheItem2 = await personCache.GetAsync(cache2Key); cacheItem1.ShouldBeNull(); cacheItem2.ShouldBeNull(); //Set cacheItem1 = new PersonCacheItem(personName); cacheItem2 = new PersonCacheItem(personName); - await personCache.SetAsync(cache1Key, cacheItem1).ConfigureAwait(false); - await personCache.SetAsync(cache2Key, cacheItem2).ConfigureAwait(false); + await personCache.SetAsync(cache1Key, cacheItem1); + await personCache.SetAsync(cache2Key, cacheItem2); //Get (it should be available now - cacheItem1 = await personCache.GetAsync(cache1Key).ConfigureAwait(false); + cacheItem1 = await personCache.GetAsync(cache1Key); cacheItem1.ShouldNotBeNull(); cacheItem1.Name.ShouldBe(personName); - cacheItem2 = await personCache.GetAsync(cache2Key).ConfigureAwait(false); + cacheItem2 = await personCache.GetAsync(cache2Key); cacheItem2.ShouldNotBeNull(); cacheItem2.Name.ShouldBe(personName); //Remove - await personCache.RemoveAsync(cache1Key).ConfigureAwait(false); - await personCache.RemoveAsync(cache2Key).ConfigureAwait(false); + await personCache.RemoveAsync(cache1Key); + await personCache.RemoveAsync(cache2Key); //Get (not exists since removed) - cacheItem1 = await personCache.GetAsync(cache1Key).ConfigureAwait(false); + cacheItem1 = await personCache.GetAsync(cache1Key); cacheItem1.ShouldBeNull(); - cacheItem2 = await personCache.GetAsync(cache2Key).ConfigureAwait(false); + cacheItem2 = await personCache.GetAsync(cache2Key); cacheItem2.ShouldBeNull(); } diff --git a/framework/test/Volo.Abp.Castle.Core.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Castle.Core.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.Castle.Core.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.Castle.Core.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Cli.Core.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Cli.Core.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.Cli.Core.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.Cli.Core.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Core.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Core.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.Core.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.Core.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/AbpInterceptionTestBase.cs b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/AbpInterceptionTestBase.cs index 781a128191..fd57da9a3d 100644 --- a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/AbpInterceptionTestBase.cs +++ b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/AbpInterceptionTestBase.cs @@ -39,11 +39,11 @@ namespace Volo.Abp.DynamicProxy { //Arrange - var target = ServiceProvider.GetService(); - - //Act - - await target.DoItAsync().ConfigureAwait(false); + var target = ServiceProvider.GetService(); + + //Act + + await target.DoItAsync(); //Assert @@ -66,7 +66,7 @@ namespace Volo.Abp.DynamicProxy //Act - var result = await target.GetValueAsync().ConfigureAwait(false); + var result = await target.GetValueAsync(); //Assert @@ -90,9 +90,9 @@ namespace Volo.Abp.DynamicProxy //Act & Assert - (await target.GetValueAsync(42).ConfigureAwait(false)).ShouldBe(42); //First run, not cached yet - (await target.GetValueAsync(43).ConfigureAwait(false)).ShouldBe(42); //First run, cached previous value - (await target.GetValueAsync(44).ConfigureAwait(false)).ShouldBe(42); //First run, cached previous value + (await target.GetValueAsync(42)).ShouldBe(42); //First run, not cached yet + (await target.GetValueAsync(43)).ShouldBe(42); //First run, cached previous value + (await target.GetValueAsync(44)).ShouldBe(42); //First run, cached previous value } } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/CachedTestObject.cs b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/CachedTestObject.cs index 8c7a797c7b..aec9d9d596 100644 --- a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/CachedTestObject.cs +++ b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/CachedTestObject.cs @@ -12,8 +12,8 @@ namespace Volo.Abp.DynamicProxy } public virtual async Task GetValueAsync(int v) - { - await Task.Delay(5).ConfigureAwait(false); + { + await Task.Delay(5); return v; } } diff --git a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleAsyncInterceptor.cs b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleAsyncInterceptor.cs index 41438d1543..ac5f6beb16 100644 --- a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleAsyncInterceptor.cs +++ b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleAsyncInterceptor.cs @@ -6,12 +6,12 @@ namespace Volo.Abp.DynamicProxy public class SimpleAsyncInterceptor : AbpInterceptor { public override async Task InterceptAsync(IAbpMethodInvocation invocation) - { - await Task.Delay(5).ConfigureAwait(false); + { + await Task.Delay(5); (invocation.TargetObject as ICanLogOnObject)?.Logs?.Add($"{GetType().Name}_InterceptAsync_BeforeInvocation"); - await invocation.ProceedAsync().ConfigureAwait(false); + await invocation.ProceedAsync(); (invocation.TargetObject as ICanLogOnObject)?.Logs?.Add($"{GetType().Name}_InterceptAsync_AfterInvocation"); - await Task.Delay(5).ConfigureAwait(false); + await Task.Delay(5); } } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleInterceptionTargetClass.cs b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleInterceptionTargetClass.cs index e683e074d8..d1f23ea34c 100644 --- a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleInterceptionTargetClass.cs +++ b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleInterceptionTargetClass.cs @@ -22,9 +22,9 @@ namespace Volo.Abp.DynamicProxy public virtual async Task GetValueAsync() { Logs.Add("EnterGetValueAsync"); - await Task.Delay(5).ConfigureAwait(false); + await Task.Delay(5); Logs.Add("MiddleGetValueAsync"); - await Task.Delay(5).ConfigureAwait(false); + await Task.Delay(5); Logs.Add("ExitGetValueAsync"); return 42; } @@ -32,9 +32,9 @@ namespace Volo.Abp.DynamicProxy public virtual async Task DoItAsync() { Logs.Add("EnterDoItAsync"); - await Task.Delay(5).ConfigureAwait(false); + await Task.Delay(5); Logs.Add("MiddleDoItAsync"); - await Task.Delay(5).ConfigureAwait(false); + await Task.Delay(5); Logs.Add("ExitDoItAsync"); } } diff --git a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleResultCacheTestInterceptor.cs b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleResultCacheTestInterceptor.cs index 06c3d096fe..15bcf4631b 100644 --- a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleResultCacheTestInterceptor.cs +++ b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DynamicProxy/SimpleResultCacheTestInterceptor.cs @@ -19,9 +19,9 @@ namespace Volo.Abp.DynamicProxy { invocation.ReturnValue = _cache[invocation.Method]; return; - } - - await invocation.ProceedAsync().ConfigureAwait(false); + } + + await invocation.ProceedAsync(); _cache[invocation.Method] = invocation.ReturnValue; } } diff --git a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Threading/AsyncHelper_Tests.cs b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Threading/AsyncHelper_Tests.cs index 53a4516560..1b7b7eacd2 100644 --- a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Threading/AsyncHelper_Tests.cs +++ b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Threading/AsyncHelper_Tests.cs @@ -41,12 +41,12 @@ namespace Volo.Abp.Threading private static async Task MyTaskWithoutReturnValueAsync() { - await Task.Delay(1).ConfigureAwait(false); + await Task.Delay(1); } private static async Task MyTaskWithReturnValueAsync(int aNumber) { - await Task.Delay(1).ConfigureAwait(false); + await Task.Delay(1); return aNumber; } diff --git a/framework/test/Volo.Abp.Dapper.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Dapper.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.Dapper.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.Dapper.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Dapper.Tests/Volo/Abp/Dapper/Repositories/PersonDapperRepository.cs b/framework/test/Volo.Abp.Dapper.Tests/Volo/Abp/Dapper/Repositories/PersonDapperRepository.cs index f7a01649de..b5127e3d7e 100644 --- a/framework/test/Volo.Abp.Dapper.Tests/Volo/Abp/Dapper/Repositories/PersonDapperRepository.cs +++ b/framework/test/Volo.Abp.Dapper.Tests/Volo/Abp/Dapper/Repositories/PersonDapperRepository.cs @@ -17,14 +17,14 @@ namespace Volo.Abp.Dapper.Repositories public virtual async Task> GetAllPersonNames() { - return (await DbConnection.QueryAsync("select Name from People", transaction: DbTransaction).ConfigureAwait(false)) + return (await DbConnection.QueryAsync("select Name from People", transaction: DbTransaction)) .ToList(); } public virtual async Task UpdatePersonNames(string name) { return await DbConnection.ExecuteAsync("update People set Name = @NewName", new { NewName = name }, - DbTransaction).ConfigureAwait(false); + DbTransaction); } } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.Dapper.Tests/Volo/Abp/Dapper/Repositories/PersonDapperRepository_Tests.cs b/framework/test/Volo.Abp.Dapper.Tests/Volo/Abp/Dapper/Repositories/PersonDapperRepository_Tests.cs index cf085b2298..28734c1fd0 100644 --- a/framework/test/Volo.Abp.Dapper.Tests/Volo/Abp/Dapper/Repositories/PersonDapperRepository_Tests.cs +++ b/framework/test/Volo.Abp.Dapper.Tests/Volo/Abp/Dapper/Repositories/PersonDapperRepository_Tests.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.Dapper.Repositories [Fact] public async Task GetAllPersonNames_Test() { - var allNames = await GetRequiredService().GetAllPersonNames().ConfigureAwait(false); + var allNames = await GetRequiredService().GetAllPersonNames(); allNames.ShouldNotBeEmpty(); allNames.ShouldContain(x => x == "Douglas"); allNames.ShouldContain(x => x == "John-Deleted"); @@ -23,9 +23,9 @@ namespace Volo.Abp.Dapper.Repositories public async Task UpdatePersonNames_Test() { var personDapperRepository = GetRequiredService(); - await personDapperRepository.UpdatePersonNames("test").ConfigureAwait(false); + await personDapperRepository.UpdatePersonNames("test"); - var allNames = await personDapperRepository.GetAllPersonNames().ConfigureAwait(false); + var allNames = await personDapperRepository.GetAllPersonNames(); allNames.ShouldNotBeEmpty(); allNames.ShouldAllBe(x => x == "test"); } @@ -41,11 +41,11 @@ namespace Volo.Abp.Dapper.Repositories IsTransactional = true })) { - await personDapperRepository.UpdatePersonNames("test").ConfigureAwait(false); - await uow.RollbackAsync().ConfigureAwait(false); + await personDapperRepository.UpdatePersonNames("test"); + await uow.RollbackAsync(); } - var allNames = await personDapperRepository.GetAllPersonNames().ConfigureAwait(false); + var allNames = await personDapperRepository.GetAllPersonNames(); allNames.ShouldAllBe(x => x != "test"); } } diff --git a/framework/test/Volo.Abp.Data.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Data.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.Data.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.Data.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Ddd.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Ddd.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.Ddd.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.Ddd.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Emailing.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Emailing.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.Emailing.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.Emailing.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/EmailTemplateRender_Tests.cs b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/EmailTemplateRender_Tests.cs index 8c02b765e0..24d7298f6c 100644 --- a/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/EmailTemplateRender_Tests.cs +++ b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/EmailTemplateRender_Tests.cs @@ -44,7 +44,7 @@ namespace Volo.Abp.Emailing } }; - var result = await _templateRender.RenderAsync(template, model).ConfigureAwait(false); + var result = await _templateRender.RenderAsync(template, model); result.ShouldBe("Hello john@abp.io 1:iphone,2:ipad,"); } diff --git a/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/EmailTemplateStore_Tests.cs b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/EmailTemplateStore_Tests.cs index 90aa9563ea..1e4ea8c090 100644 --- a/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/EmailTemplateStore_Tests.cs +++ b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/EmailTemplateStore_Tests.cs @@ -24,21 +24,21 @@ namespace Volo.Abp.Emailing [Fact] public async Task Should_Get_Registered_Template() { - var template = await _emailTemplateProvider.GetAsync("template1", "tr").ConfigureAwait(false); + var template = await _emailTemplateProvider.GetAsync("template1", "tr"); template.Content.ShouldContain("Lütfen aşağıdaki bağlantıya tıklayarak e-posta adresinizi onaylayın."); } [Fact] public async Task Should_Get_Default_Culture_Template() { - var template = await _emailTemplateProvider.GetAsync("template1", "zh-Hans").ConfigureAwait(false); + var template = await _emailTemplateProvider.GetAsync("template1", "zh-Hans"); template.Content.ShouldContain("Please confirm your email address by clicking the link below."); } [Fact] public async Task Should_Get_Registered_Template_With_Layout() { - var template = await _emailTemplateProvider.GetAsync("template2", "en").ConfigureAwait(false); + var template = await _emailTemplateProvider.GetAsync("template2", "en"); template.Content.ShouldContain($"{Environment.NewLine} " + "Please confirm your email address by clicking the link below."); } @@ -47,7 +47,7 @@ namespace Volo.Abp.Emailing [Fact] public async Task Should_Get_Registered_Template_With_Localize() { - var template = await _emailTemplateProvider.GetAsync("template3", "tr").ConfigureAwait(false); + var template = await _emailTemplateProvider.GetAsync("template3", "tr"); template.Content.ShouldContain("Merhaba Abp"); } } diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/FodyWeavers.xml b/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/FodyWeavers.xml +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/Volo/Abp/EntityFrameworkCore/TestApp/SecondContext/SecondContextTestDataBuilder.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/Volo/Abp/EntityFrameworkCore/TestApp/SecondContext/SecondContextTestDataBuilder.cs index 1f69263f5c..3bdd15b5ae 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/Volo/Abp/EntityFrameworkCore/TestApp/SecondContext/SecondContextTestDataBuilder.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/Volo/Abp/EntityFrameworkCore/TestApp/SecondContext/SecondContextTestDataBuilder.cs @@ -19,12 +19,12 @@ namespace Volo.Abp.EntityFrameworkCore.TestApp.SecondContext public async Task BuildAsync() { - await _bookRepository.InsertAsync( + await _bookRepository.InsertAsync( new BookInSecondDbContext( _guidGenerator.Create(), "TestBook1" ) - ).ConfigureAwait(false); + ); } } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DbContext_Replace_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DbContext_Replace_Tests.cs index 5ee320742c..7bc4af2e31 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DbContext_Replace_Tests.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DbContext_Replace_Tests.cs @@ -31,7 +31,7 @@ namespace Volo.Abp.EntityFrameworkCore (_dummyRepository.GetDbContext() is IThirdDbContext).ShouldBeTrue(); (_dummyRepository.GetDbContext() is TestAppDbContext).ShouldBeTrue(); - await _unitOfWorkManager.Current.CompleteAsync().ConfigureAwait(false); + await _unitOfWorkManager.Current.CompleteAsync(); } } } diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Queryable_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Queryable_Tests.cs index d178ff7965..a5b8aa0577 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Queryable_Tests.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Queryable_Tests.cs @@ -30,7 +30,7 @@ namespace Volo.Abp.EntityFrameworkCore.Repositories { _bookRepository.Any().ShouldBeTrue(); return Task.CompletedTask; - }).ConfigureAwait(false); + }); } [Fact] @@ -40,7 +40,7 @@ namespace Volo.Abp.EntityFrameworkCore.Repositories { _phoneInSecondDbContextRepository.Any().ShouldBeTrue(); return Task.CompletedTask; - }).ConfigureAwait(false); + }); } [Fact] @@ -52,7 +52,7 @@ namespace Volo.Abp.EntityFrameworkCore.Repositories person.Name.ShouldBe("Douglas"); person.Phones.Count.ShouldBe(2); return Task.CompletedTask; - }).ConfigureAwait(false); + }); } } } diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Transactions/Transaction_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Transactions/Transaction_Tests.cs index db4a376ae4..7d89da1a08 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Transactions/Transaction_Tests.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Transactions/Transaction_Tests.cs @@ -34,16 +34,16 @@ namespace Volo.Abp.EntityFrameworkCore.Transactions { await WithUnitOfWorkAsync(new AbpUnitOfWorkOptions { IsTransactional = true }, async () => { - await _personRepository.InsertAsync(new Person(personId, "Adam", 42)).ConfigureAwait(false); + await _personRepository.InsertAsync(new Person(personId, "Adam", 42)); throw new Exception(exceptionMessage); - }).ConfigureAwait(false); + }); } catch (Exception e) when (e.Message == exceptionMessage) { } - var person = await _personRepository.FindAsync(personId).ConfigureAwait(false); + var person = await _personRepository.FindAsync(personId); person.ShouldBeNull(); } @@ -56,12 +56,12 @@ namespace Volo.Abp.EntityFrameworkCore.Transactions { _unitOfWorkManager.Current.ShouldNotBeNull(); - await _personRepository.InsertAsync(new Person(personId, "Adam", 42)).ConfigureAwait(false); + await _personRepository.InsertAsync(new Person(personId, "Adam", 42)); - await _unitOfWorkManager.Current.RollbackAsync().ConfigureAwait(false); - }).ConfigureAwait(false); + await _unitOfWorkManager.Current.RollbackAsync(); + }); - var person = await _personRepository.FindAsync(personId).ConfigureAwait(false); + var person = await _personRepository.FindAsync(personId); person.ShouldBeNull(); } @@ -79,17 +79,17 @@ namespace Volo.Abp.EntityFrameworkCore.Transactions { _unitOfWorkManager.Current.ShouldNotBeNull(); - await _personRepository.InsertAsync(new Person(personId, "Adam", 42)).ConfigureAwait(false); - await _bookRepository.InsertAsync(new BookInSecondDbContext(bookId, bookId.ToString())).ConfigureAwait(false); + await _personRepository.InsertAsync(new Person(personId, "Adam", 42)); + await _bookRepository.InsertAsync(new BookInSecondDbContext(bookId, bookId.ToString())); - await _unitOfWorkManager.Current.SaveChangesAsync().ConfigureAwait(false); + await _unitOfWorkManager.Current.SaveChangesAsync(); //Will automatically rollback since not called the Complete! } } - (await _personRepository.FindAsync(personId).ConfigureAwait(false)).ShouldBeNull(); - (await _bookRepository.FindAsync(bookId).ConfigureAwait(false)).ShouldBeNull(); + (await _personRepository.FindAsync(personId)).ShouldBeNull(); + (await _bookRepository.FindAsync(bookId)).ShouldBeNull(); } } } diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/CityRepository.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/CityRepository.cs index 05becda1d3..027f54a03a 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/CityRepository.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/CityRepository.cs @@ -18,13 +18,13 @@ namespace Volo.Abp.TestApp.EntityFrameworkCore public async Task FindByNameAsync(string name) { - return await this.FirstOrDefaultAsync(c => c.Name == name).ConfigureAwait(false); + return await this.FirstOrDefaultAsync(c => c.Name == name); } public async Task> GetPeopleInTheCityAsync(string cityName) { - var city = await FindByNameAsync(cityName).ConfigureAwait(false); - return await DbContext.People.Where(p => p.CityId == city.Id).ToListAsync().ConfigureAwait(false); + var city = await FindByNameAsync(cityName); + return await DbContext.People.Where(p => p.CityId == city.Id).ToListAsync(); } } } diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/PersonRepository.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/PersonRepository.cs index 01b949015a..ab8c1920a7 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/PersonRepository.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/PersonRepository.cs @@ -18,7 +18,7 @@ namespace Volo.Abp.TestApp.EntityFrameworkCore public async Task GetViewAsync(string name) { - return await DbContext.PersonView.Where(x => x.Name == name).FirstOrDefaultAsync().ConfigureAwait(false); + return await DbContext.PersonView.Where(x => x.Name == name).FirstOrDefaultAsync(); } } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.EventBus.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.EventBus.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.EventBus.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.EventBus.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Distributed/LocalDistributedEventBus_Test.cs b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Distributed/LocalDistributedEventBus_Test.cs index 19e61e5afb..47649ad3c3 100644 --- a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Distributed/LocalDistributedEventBus_Test.cs +++ b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Distributed/LocalDistributedEventBus_Test.cs @@ -10,9 +10,9 @@ namespace Volo.Abp.EventBus.Distributed { DistributedEventBus.Subscribe(); - await DistributedEventBus.PublishAsync(new MySimpleEventData(1)).ConfigureAwait(false); - await DistributedEventBus.PublishAsync(new MySimpleEventData(2)).ConfigureAwait(false); - await DistributedEventBus.PublishAsync(new MySimpleEventData(3)).ConfigureAwait(false); + await DistributedEventBus.PublishAsync(new MySimpleEventData(1)); + await DistributedEventBus.PublishAsync(new MySimpleEventData(2)); + await DistributedEventBus.PublishAsync(new MySimpleEventData(3)); Assert.Equal(3, MySimpleDistributedTransientEventHandler.HandleCount); Assert.Equal(3, MySimpleDistributedTransientEventHandler.DisposeCount); diff --git a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/ActionBasedEventHandlerTest.cs b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/ActionBasedEventHandlerTest.cs index 8e41a26eae..6e6bae2fae 100644 --- a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/ActionBasedEventHandlerTest.cs +++ b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/ActionBasedEventHandlerTest.cs @@ -19,10 +19,10 @@ namespace Volo.Abp.EventBus.Local return Task.CompletedTask; }); - await LocalEventBus.PublishAsync(new MySimpleEventData(1)).ConfigureAwait(false); - await LocalEventBus.PublishAsync(new MySimpleEventData(2)).ConfigureAwait(false); - await LocalEventBus.PublishAsync(new MySimpleEventData(3)).ConfigureAwait(false); - await LocalEventBus.PublishAsync(new MySimpleEventData(4)).ConfigureAwait(false); + await LocalEventBus.PublishAsync(new MySimpleEventData(1)); + await LocalEventBus.PublishAsync(new MySimpleEventData(2)); + await LocalEventBus.PublishAsync(new MySimpleEventData(3)); + await LocalEventBus.PublishAsync(new MySimpleEventData(4)); Assert.Equal(10, totalData); } @@ -39,10 +39,10 @@ namespace Volo.Abp.EventBus.Local return Task.CompletedTask; }); - await LocalEventBus.PublishAsync(typeof(MySimpleEventData), new MySimpleEventData(1)).ConfigureAwait(false); - await LocalEventBus.PublishAsync(typeof(MySimpleEventData), new MySimpleEventData(2)).ConfigureAwait(false); - await LocalEventBus.PublishAsync(typeof(MySimpleEventData), new MySimpleEventData(3)).ConfigureAwait(false); - await LocalEventBus.PublishAsync(typeof(MySimpleEventData), new MySimpleEventData(4)).ConfigureAwait(false); + await LocalEventBus.PublishAsync(typeof(MySimpleEventData), new MySimpleEventData(1)); + await LocalEventBus.PublishAsync(typeof(MySimpleEventData), new MySimpleEventData(2)); + await LocalEventBus.PublishAsync(typeof(MySimpleEventData), new MySimpleEventData(3)); + await LocalEventBus.PublishAsync(typeof(MySimpleEventData), new MySimpleEventData(4)); Assert.Equal(10, totalData); } @@ -59,13 +59,13 @@ namespace Volo.Abp.EventBus.Local return Task.CompletedTask; }); - await LocalEventBus.PublishAsync(new MySimpleEventData(1)).ConfigureAwait(false); - await LocalEventBus.PublishAsync(new MySimpleEventData(2)).ConfigureAwait(false); - await LocalEventBus.PublishAsync(new MySimpleEventData(3)).ConfigureAwait(false); + await LocalEventBus.PublishAsync(new MySimpleEventData(1)); + await LocalEventBus.PublishAsync(new MySimpleEventData(2)); + await LocalEventBus.PublishAsync(new MySimpleEventData(3)); registerDisposer.Dispose(); - await LocalEventBus.PublishAsync(new MySimpleEventData(4)).ConfigureAwait(false); + await LocalEventBus.PublishAsync(new MySimpleEventData(4)); Assert.Equal(6, totalData); } @@ -84,13 +84,13 @@ namespace Volo.Abp.EventBus.Local LocalEventBus.Subscribe(action); - await LocalEventBus.PublishAsync(new MySimpleEventData(1)).ConfigureAwait(false); - await LocalEventBus.PublishAsync(new MySimpleEventData(2)).ConfigureAwait(false); - await LocalEventBus.PublishAsync(new MySimpleEventData(3)).ConfigureAwait(false); + await LocalEventBus.PublishAsync(new MySimpleEventData(1)); + await LocalEventBus.PublishAsync(new MySimpleEventData(2)); + await LocalEventBus.PublishAsync(new MySimpleEventData(3)); LocalEventBus.Unsubscribe(action); - await LocalEventBus.PublishAsync(new MySimpleEventData(4)).ConfigureAwait(false); + await LocalEventBus.PublishAsync(new MySimpleEventData(4)); Assert.Equal(6, totalData); } @@ -103,15 +103,15 @@ namespace Volo.Abp.EventBus.Local LocalEventBus.Subscribe( async eventData => { - await Task.Delay(20).ConfigureAwait(false); + await Task.Delay(20); Interlocked.Add(ref totalData, eventData.Value); - await Task.Delay(20).ConfigureAwait(false); + await Task.Delay(20); }); - await LocalEventBus.PublishAsync(new MySimpleEventData(1)).ConfigureAwait(false); - await LocalEventBus.PublishAsync(new MySimpleEventData(2)).ConfigureAwait(false); - await LocalEventBus.PublishAsync(new MySimpleEventData(3)).ConfigureAwait(false); - await LocalEventBus.PublishAsync(new MySimpleEventData(4)).ConfigureAwait(false); + await LocalEventBus.PublishAsync(new MySimpleEventData(1)); + await LocalEventBus.PublishAsync(new MySimpleEventData(2)); + await LocalEventBus.PublishAsync(new MySimpleEventData(3)); + await LocalEventBus.PublishAsync(new MySimpleEventData(4)); Assert.Equal(10, totalData); } diff --git a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/EventBus_DI_Services_Test.cs b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/EventBus_DI_Services_Test.cs index 4ae07d8dc6..e66deb0e1c 100644 --- a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/EventBus_DI_Services_Test.cs +++ b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/EventBus_DI_Services_Test.cs @@ -9,10 +9,10 @@ namespace Volo.Abp.EventBus.Local [Fact] public async Task Should_Automatically_Register_EventHandlers_From_Services() { - await LocalEventBus.PublishAsync(new MySimpleEventData(1)).ConfigureAwait(false); - await LocalEventBus.PublishAsync(new MySimpleEventData(2)).ConfigureAwait(false); - await LocalEventBus.PublishAsync(new MySimpleEventData(3)).ConfigureAwait(false); - await LocalEventBus.PublishAsync(new MySimpleEventData(4)).ConfigureAwait(false); + await LocalEventBus.PublishAsync(new MySimpleEventData(1)); + await LocalEventBus.PublishAsync(new MySimpleEventData(2)); + await LocalEventBus.PublishAsync(new MySimpleEventData(3)); + await LocalEventBus.PublishAsync(new MySimpleEventData(4)); GetRequiredService().TotalData.ShouldBe(10); } diff --git a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/EventBus_Exception_Test.cs b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/EventBus_Exception_Test.cs index 951a9f841d..446825c697 100644 --- a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/EventBus_Exception_Test.cs +++ b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/EventBus_Exception_Test.cs @@ -14,8 +14,8 @@ namespace Volo.Abp.EventBus.Local var appException = await Assert.ThrowsAsync(async () => { - await LocalEventBus.PublishAsync(new MySimpleEventData(1)).ConfigureAwait(false); - }).ConfigureAwait(false); + await LocalEventBus.PublishAsync(new MySimpleEventData(1)); + }); appException.Message.ShouldBe("This exception is intentionally thrown!"); } @@ -31,8 +31,8 @@ namespace Volo.Abp.EventBus.Local var aggrException = await Assert.ThrowsAsync(async () => { - await LocalEventBus.PublishAsync(new MySimpleEventData(1)).ConfigureAwait(false); - }).ConfigureAwait(false); + await LocalEventBus.PublishAsync(new MySimpleEventData(1)); + }); aggrException.InnerExceptions.Count.ShouldBe(2); aggrException.InnerExceptions[0].Message.ShouldBe("This exception is intentionally thrown #1!"); diff --git a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/EventBus_MultipleHandle_Test.cs b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/EventBus_MultipleHandle_Test.cs index 5880dd3662..d20692fa01 100644 --- a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/EventBus_MultipleHandle_Test.cs +++ b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/EventBus_MultipleHandle_Test.cs @@ -16,7 +16,7 @@ namespace Volo.Abp.EventBus.Local LocalEventBus.Subscribe>(handler); LocalEventBus.Subscribe>(handler); - await LocalEventBus.PublishAsync(new EntityCreatedEventData(new MyEntity())).ConfigureAwait(false); + await LocalEventBus.PublishAsync(new EntityCreatedEventData(new MyEntity())); handler.EntityCreatedEventCount.ShouldBe(1); handler.EntityChangedEventCount.ShouldBe(1); diff --git a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/GenericInheritanceTest.cs b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/GenericInheritanceTest.cs index 316de4a396..eeec26b166 100644 --- a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/GenericInheritanceTest.cs +++ b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/GenericInheritanceTest.cs @@ -21,7 +21,7 @@ namespace Volo.Abp.EventBus.Local return Task.CompletedTask; }); - await LocalEventBus.PublishAsync(new EntityUpdatedEventData(new Person(42))).ConfigureAwait(false); + await LocalEventBus.PublishAsync(new EntityUpdatedEventData(new Person(42))); triggeredEvent.ShouldBe(true); } @@ -39,7 +39,7 @@ namespace Volo.Abp.EventBus.Local return Task.CompletedTask; }); - await LocalEventBus.PublishAsync(new EntityChangedEventData(new Student(42))).ConfigureAwait(false); + await LocalEventBus.PublishAsync(new EntityChangedEventData(new Student(42))); triggeredEvent.ShouldBe(true); } diff --git a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/InheritanceTest.cs b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/InheritanceTest.cs index 17474be1d9..c3b1dd4283 100644 --- a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/InheritanceTest.cs +++ b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/InheritanceTest.cs @@ -17,10 +17,10 @@ namespace Volo.Abp.EventBus.Local return Task.CompletedTask; }); - await LocalEventBus.PublishAsync(new MySimpleEventData(1)).ConfigureAwait(false); //Should handle directly registered class - await LocalEventBus.PublishAsync(new MySimpleEventData(2)).ConfigureAwait(false); //Should handle directly registered class - await LocalEventBus.PublishAsync(new MyDerivedEventData(3)).ConfigureAwait(false); //Should handle derived class too - await LocalEventBus.PublishAsync(new MyDerivedEventData(4)).ConfigureAwait(false); //Should handle derived class too + await LocalEventBus.PublishAsync(new MySimpleEventData(1)); //Should handle directly registered class + await LocalEventBus.PublishAsync(new MySimpleEventData(2)); //Should handle directly registered class + await LocalEventBus.PublishAsync(new MyDerivedEventData(3)); //Should handle derived class too + await LocalEventBus.PublishAsync(new MyDerivedEventData(4)); //Should handle derived class too Assert.Equal(10, totalData); } @@ -37,10 +37,10 @@ namespace Volo.Abp.EventBus.Local return Task.CompletedTask; }); - await LocalEventBus.PublishAsync(new MySimpleEventData(1)).ConfigureAwait(false); //Should not handle - await LocalEventBus.PublishAsync(new MySimpleEventData(2)).ConfigureAwait(false); //Should not handle - await LocalEventBus.PublishAsync(new MyDerivedEventData(3)).ConfigureAwait(false); //Should handle - await LocalEventBus.PublishAsync(new MyDerivedEventData(4)).ConfigureAwait(false); //Should handle + await LocalEventBus.PublishAsync(new MySimpleEventData(1)); //Should not handle + await LocalEventBus.PublishAsync(new MySimpleEventData(2)); //Should not handle + await LocalEventBus.PublishAsync(new MyDerivedEventData(3)); //Should handle + await LocalEventBus.PublishAsync(new MyDerivedEventData(4)); //Should handle Assert.Equal(7, totalData); } diff --git a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/TransientDisposableEventHandlerTest.cs b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/TransientDisposableEventHandlerTest.cs index bfc731f5bf..5ab7ed51af 100644 --- a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/TransientDisposableEventHandlerTest.cs +++ b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/TransientDisposableEventHandlerTest.cs @@ -10,9 +10,9 @@ namespace Volo.Abp.EventBus.Local { LocalEventBus.Subscribe(); - await LocalEventBus.PublishAsync(new MySimpleEventData(1)).ConfigureAwait(false); - await LocalEventBus.PublishAsync(new MySimpleEventData(2)).ConfigureAwait(false); - await LocalEventBus.PublishAsync(new MySimpleEventData(3)).ConfigureAwait(false); + await LocalEventBus.PublishAsync(new MySimpleEventData(1)); + await LocalEventBus.PublishAsync(new MySimpleEventData(2)); + await LocalEventBus.PublishAsync(new MySimpleEventData(3)); Assert.Equal(3, MySimpleTransientEventHandler.HandleCount); Assert.Equal(3, MySimpleTransientEventHandler.DisposeCount); diff --git a/framework/test/Volo.Abp.Features.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Features.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.Features.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.Features.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Features.Tests/Volo/Abp/Features/FeatureChecker_Tests.cs b/framework/test/Volo.Abp.Features.Tests/Volo/Abp/Features/FeatureChecker_Tests.cs index dc849d9b50..7ea01268a0 100644 --- a/framework/test/Volo.Abp.Features.Tests/Volo/Abp/Features/FeatureChecker_Tests.cs +++ b/framework/test/Volo.Abp.Features.Tests/Volo/Abp/Features/FeatureChecker_Tests.cs @@ -20,16 +20,16 @@ namespace Volo.Abp.Features public async Task IsEnabledAsync() { //Tenant is unknown - (await _featureChecker.IsEnabledAsync("BooleanTestFeature1").ConfigureAwait(false)).ShouldBeFalse(); + (await _featureChecker.IsEnabledAsync("BooleanTestFeature1")).ShouldBeFalse(); using (_currentTenant.Change(TestFeatureStore.Tenant1Id)) { - (await _featureChecker.IsEnabledAsync("BooleanTestFeature1").ConfigureAwait(false)).ShouldBeTrue(); + (await _featureChecker.IsEnabledAsync("BooleanTestFeature1")).ShouldBeTrue(); } using (_currentTenant.Change(TestFeatureStore.Tenant2Id)) { - (await _featureChecker.IsEnabledAsync("BooleanTestFeature1").ConfigureAwait(false)).ShouldBeFalse(); + (await _featureChecker.IsEnabledAsync("BooleanTestFeature1")).ShouldBeFalse(); } } @@ -37,16 +37,16 @@ namespace Volo.Abp.Features public async Task GetOrNullAsync() { //Tenant is unknown - (await _featureChecker.GetOrNullAsync("IntegerTestFeature1").ConfigureAwait(false)).ShouldBe("1"); + (await _featureChecker.GetOrNullAsync("IntegerTestFeature1")).ShouldBe("1"); using (_currentTenant.Change(TestFeatureStore.Tenant1Id)) { - (await _featureChecker.GetOrNullAsync("IntegerTestFeature1").ConfigureAwait(false)).ShouldBe("1"); + (await _featureChecker.GetOrNullAsync("IntegerTestFeature1")).ShouldBe("1"); } using (_currentTenant.Change(TestFeatureStore.Tenant2Id)) { - (await _featureChecker.GetOrNullAsync("IntegerTestFeature1").ConfigureAwait(false)).ShouldBe("34"); + (await _featureChecker.GetOrNullAsync("IntegerTestFeature1")).ShouldBe("34"); } } } diff --git a/framework/test/Volo.Abp.Features.Tests/Volo/Abp/Features/FeatureInterceptor_Tests.cs b/framework/test/Volo.Abp.Features.Tests/Volo/Abp/Features/FeatureInterceptor_Tests.cs index eb10664239..bdc17a1d5f 100644 --- a/framework/test/Volo.Abp.Features.Tests/Volo/Abp/Features/FeatureInterceptor_Tests.cs +++ b/framework/test/Volo.Abp.Features.Tests/Volo/Abp/Features/FeatureInterceptor_Tests.cs @@ -29,18 +29,18 @@ namespace Volo.Abp.Features { await Assert.ThrowsAsync(async () => { - await _classFeatureTestService.NoAdditionalFeatureAsync().ConfigureAwait(false); - }).ConfigureAwait(false); + await _classFeatureTestService.NoAdditionalFeatureAsync(); + }); await Assert.ThrowsAsync(async () => { - await _classFeatureTestService.Feature2Async().ConfigureAwait(false); - }).ConfigureAwait(false); + await _classFeatureTestService.Feature2Async(); + }); await Assert.ThrowsAsync(async () => { - await _methodFeatureTestService.Feature1Async().ConfigureAwait(false); - }).ConfigureAwait(false); + await _methodFeatureTestService.Feature1Async(); + }); } } @@ -50,9 +50,9 @@ namespace Volo.Abp.Features //Features were enabled for Tenant 1 using (_currentTenant.Change(TestFeatureStore.Tenant1Id)) { - await _classFeatureTestService.NoAdditionalFeatureAsync().ConfigureAwait(false); - (await _classFeatureTestService.Feature2Async().ConfigureAwait(false)).ShouldBe(42); - (await _methodFeatureTestService.Feature1Async().ConfigureAwait(false)).ShouldBe(42); + await _classFeatureTestService.NoAdditionalFeatureAsync(); + (await _classFeatureTestService.Feature2Async()).ShouldBe(42); + (await _methodFeatureTestService.Feature1Async()).ShouldBe(42); } } @@ -64,7 +64,7 @@ namespace Volo.Abp.Features { using (_currentTenant.Change(ParseNullableGuid(tenantIdValue))) { - await _methodFeatureTestService.NonFeatureAsync().ConfigureAwait(false); + await _methodFeatureTestService.NonFeatureAsync(); } } diff --git a/framework/test/Volo.Abp.FluentValidation.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.FluentValidation.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.FluentValidation.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.FluentValidation.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.FluentValidation.Tests/Volo/Abp/FluentValidation/ApplicationService_FluentValidation_Tests.cs b/framework/test/Volo.Abp.FluentValidation.Tests/Volo/Abp/FluentValidation/ApplicationService_FluentValidation_Tests.cs index ba7a424ee7..5bf11b6d5e 100644 --- a/framework/test/Volo.Abp.FluentValidation.Tests/Volo/Abp/FluentValidation/ApplicationService_FluentValidation_Tests.cs +++ b/framework/test/Volo.Abp.FluentValidation.Tests/Volo/Abp/FluentValidation/ApplicationService_FluentValidation_Tests.cs @@ -40,7 +40,7 @@ namespace Volo.Abp.FluentValidation { MyStringValue3 = "ccc" } - }).ConfigureAwait(false); + }); asyncOutput.ShouldBe("aaabbbccc"); } @@ -65,7 +65,7 @@ namespace Volo.Abp.FluentValidation } } ) -.ConfigureAwait(false)).ConfigureAwait(false); + ); exception.ValidationErrors.ShouldContain(x => x.MemberNames.Contains("MyStringValue")); exception.ValidationErrors.ShouldContain(x => x.MemberNames.Contains("MyMethodInput2.MyStringValue2")); @@ -83,7 +83,7 @@ namespace Volo.Abp.FluentValidation { MyStringValue3 = "c" } - }).ConfigureAwait(false)).ConfigureAwait(false); + })); exception.ValidationErrors.ShouldContain(x => x.MemberNames.Contains("MyStringValue")); exception.ValidationErrors.ShouldContain(x => x.MemberNames.Contains("MyMethodInput2.MyStringValue2")); exception.ValidationErrors.ShouldContain(x => x.MemberNames.Contains("MyMethodInput3.MyStringValue3")); @@ -95,7 +95,7 @@ namespace Volo.Abp.FluentValidation var output = await _myAppService.NotValidateMyMethod(new MyMethodInput4 { MyStringValue4 = "444" - }).ConfigureAwait(false); + }); output.ShouldBe("444"); } diff --git a/framework/test/Volo.Abp.Http.Client.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Http.Client.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.Http.Client.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.Http.Client.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/PersonAppServiceClientProxy_Tests.cs b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/PersonAppServiceClientProxy_Tests.cs index 4dddcd6ce8..5fa3d4ab66 100644 --- a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/PersonAppServiceClientProxy_Tests.cs +++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/PersonAppServiceClientProxy_Tests.cs @@ -31,7 +31,7 @@ namespace Volo.Abp.Http.DynamicProxying { var firstPerson = (await _personRepository.GetListAsync()).First(); - var person = await _peopleAppService.GetAsync(firstPerson.Id).ConfigureAwait(false); + var person = await _peopleAppService.GetAsync(firstPerson.Id); person.ShouldNotBeNull(); person.Id.ShouldBe(firstPerson.Id); person.Name.ShouldBe(firstPerson.Name); @@ -41,7 +41,7 @@ namespace Volo.Abp.Http.DynamicProxying public async Task GetList() { var people = await _peopleAppService.GetListAsync(new PagedAndSortedResultRequestDto()) - .ConfigureAwait(false); + ; people.TotalCount.ShouldBeGreaterThan(0); people.Items.Count.ShouldBe((int) people.TotalCount); } @@ -51,7 +51,7 @@ namespace Volo.Abp.Http.DynamicProxying { var firstPerson = (await _personRepository.GetListAsync()).First(); - await _peopleAppService.DeleteAsync(firstPerson.Id).ConfigureAwait(false); + await _peopleAppService.DeleteAsync(firstPerson.Id); firstPerson = (await _personRepository.GetListAsync()).FirstOrDefault(p => p.Id == firstPerson.Id); firstPerson.ShouldBeNull(); @@ -67,7 +67,7 @@ namespace Volo.Abp.Http.DynamicProxying Name = uniquePersonName, Age = 42 } - ).ConfigureAwait(false); + ); person.ShouldNotBeNull(); person.Id.ShouldNotBe(Guid.Empty); @@ -87,8 +87,8 @@ namespace Volo.Abp.Http.DynamicProxying { Age = 42 } - ).ConfigureAwait(false); - }).ConfigureAwait(false); + ); + }); } [Fact] @@ -105,7 +105,7 @@ namespace Volo.Abp.Http.DynamicProxying Name = uniquePersonName, Age = firstPerson.Age } - ).ConfigureAwait(false); + ); person.ShouldNotBeNull(); person.Id.ShouldBe(firstPerson.Id); @@ -124,8 +124,8 @@ namespace Volo.Abp.Http.DynamicProxying { await Assert.ThrowsAnyAsync(async () => { - await _peopleAppService.GetWithAuthorized().ConfigureAwait(false); - }).ConfigureAwait(false); + await _peopleAppService.GetWithAuthorized(); + }); } [Fact] @@ -144,7 +144,7 @@ namespace Volo.Abp.Http.DynamicProxying } } } - ).ConfigureAwait(false); + ); result.Value1.ShouldBe("value one"); result.Inner1.Value2.ShouldBe("value two"); diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/RegularTestControllerClientProxy_Tests.cs b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/RegularTestControllerClientProxy_Tests.cs index fdf422d585..28a024f68e 100644 --- a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/RegularTestControllerClientProxy_Tests.cs +++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/RegularTestControllerClientProxy_Tests.cs @@ -20,41 +20,41 @@ namespace Volo.Abp.Http.DynamicProxying [Fact] public async Task IncrementValueAsync() { - (await _controller.IncrementValueAsync(42).ConfigureAwait(false)).ShouldBe(43); + (await _controller.IncrementValueAsync(42)).ShouldBe(43); } [Fact] public async Task GetException1Async() { - var exception = await Assert.ThrowsAsync(async () => await _controller.GetException1Async().ConfigureAwait(false)).ConfigureAwait(false); + var exception = await Assert.ThrowsAsync(async () => await _controller.GetException1Async()); exception.Error.Message.ShouldBe("This is an error message!"); } [Fact] public async Task PostValueWithHeaderAndQueryStringAsync() { - var result = await _controller.PostValueWithHeaderAndQueryStringAsync("myheader", "myqs").ConfigureAwait(false); + var result = await _controller.PostValueWithHeaderAndQueryStringAsync("myheader", "myqs"); result.ShouldBe("myheader#myqs"); } [Fact] public async Task PostValueWithBodyAsync() { - var result = await _controller.PostValueWithBodyAsync("mybody").ConfigureAwait(false); + var result = await _controller.PostValueWithBodyAsync("mybody"); result.ShouldBe("mybody"); } [Fact] public async Task PutValueWithBodyAsync() { - var result = await _controller.PutValueWithBodyAsync("mybody").ConfigureAwait(false); + var result = await _controller.PutValueWithBodyAsync("mybody"); result.ShouldBe("mybody"); } [Fact] public async Task PostObjectWithBodyAsync() { - var result = await _controller.PostObjectWithBodyAsync(new Car { Year = 1976, Model = "Ford" }).ConfigureAwait(false); + var result = await _controller.PostObjectWithBodyAsync(new Car { Year = 1976, Model = "Ford" }); result.Year.ShouldBe(1976); result.Model.ShouldBe("Ford"); } @@ -62,7 +62,7 @@ namespace Volo.Abp.Http.DynamicProxying [Fact] public async Task PostObjectWithQueryAsync() { - var result = await _controller.PostObjectWithQueryAsync(new Car { Year = 1976, Model = "Ford" }).ConfigureAwait(false); + var result = await _controller.PostObjectWithQueryAsync(new Car { Year = 1976, Model = "Ford" }); result.Year.ShouldBe(1976); result.Model.ShouldBe("Ford"); } @@ -70,7 +70,7 @@ namespace Volo.Abp.Http.DynamicProxying [Fact] public async Task GetObjectWithUrlAsync() { - var result = await _controller.GetObjectWithUrlAsync(new Car { Year = 1976, Model = "Ford" }).ConfigureAwait(false); + var result = await _controller.GetObjectWithUrlAsync(new Car { Year = 1976, Model = "Ford" }); result.Year.ShouldBe(1976); result.Model.ShouldBe("Ford"); } @@ -78,7 +78,7 @@ namespace Volo.Abp.Http.DynamicProxying [Fact] public async Task GetObjectandIdAsync() { - var result = await _controller.GetObjectandIdAsync(42, new Car { Year = 1976, Model = "Ford" }).ConfigureAwait(false); + var result = await _controller.GetObjectandIdAsync(42, new Car { Year = 1976, Model = "Ford" }); result.Year.ShouldBe(42); result.Model.ShouldBe("Ford"); } @@ -86,7 +86,7 @@ namespace Volo.Abp.Http.DynamicProxying [Fact] public async Task GetObjectAndIdWithQueryAsync() { - var result = await _controller.GetObjectAndIdWithQueryAsync(42, new Car { Year = 1976, Model = "Ford" }).ConfigureAwait(false); + var result = await _controller.GetObjectAndIdWithQueryAsync(42, new Car { Year = 1976, Model = "Ford" }); result.Year.ShouldBe(42); result.Model.ShouldBe("Ford"); } @@ -94,28 +94,28 @@ namespace Volo.Abp.Http.DynamicProxying [Fact] public async Task PatchValueWithBodyAsync() { - var result = await _controller.PatchValueWithBodyAsync("mybody").ConfigureAwait(false); + var result = await _controller.PatchValueWithBodyAsync("mybody"); result.ShouldBe("mybody"); } [Fact] public async Task PutValueWithHeaderAndQueryStringAsync() { - var result = await _controller.PutValueWithHeaderAndQueryStringAsync("myheader", "myqs").ConfigureAwait(false); + var result = await _controller.PutValueWithHeaderAndQueryStringAsync("myheader", "myqs"); result.ShouldBe("myheader#myqs"); } [Fact] public async Task PatchValueWithHeaderAndQueryStringAsync() { - var result = await _controller.PatchValueWithHeaderAndQueryStringAsync("myheader", "myqs").ConfigureAwait(false); + var result = await _controller.PatchValueWithHeaderAndQueryStringAsync("myheader", "myqs"); result.ShouldBe("myheader#myqs"); } [Fact] public async Task DeleteByIdAsync() { - (await _controller.DeleteByIdAsync(42).ConfigureAwait(false)).ShouldBe(43); + (await _controller.DeleteByIdAsync(42)).ShouldBe(43); } } diff --git a/framework/test/Volo.Abp.Ldap.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Ldap.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.Ldap.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.Ldap.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Localization.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.Localization.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.Localization.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.MailKit.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.MailKit.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.MailKit.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.MailKit.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.MailKit.Tests/Volo/Abp/MailKit/MailKitSmtpEmailSender_Tests.cs b/framework/test/Volo.Abp.MailKit.Tests/Volo/Abp/MailKit/MailKitSmtpEmailSender_Tests.cs index e323b1150e..39fd4ea78f 100644 --- a/framework/test/Volo.Abp.MailKit.Tests/Volo/Abp/MailKit/MailKitSmtpEmailSender_Tests.cs +++ b/framework/test/Volo.Abp.MailKit.Tests/Volo/Abp/MailKit/MailKitSmtpEmailSender_Tests.cs @@ -18,7 +18,7 @@ namespace Volo.Abp.MailKit var mailMessage = new MailMessage("from_mail_address@asd.com", "to_mail_address@asd.com", "subject", "body") { IsBodyHtml = true }; - await mailSender.SendAsync(mailMessage).ConfigureAwait(false); + await mailSender.SendAsync(mailMessage); } //[Fact] @@ -30,7 +30,7 @@ namespace Volo.Abp.MailKit IsBodyHtml = true }; - await mailSender.SendAsync(mailMessage).ConfigureAwait(false); + await mailSender.SendAsync(mailMessage); } private static MailKitSmtpEmailSender CreateMailKitEmailSender() diff --git a/framework/test/Volo.Abp.MemoryDb.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.MemoryDb.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.MemoryDb.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.MemoryDb.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/TestApp/MemoryDb/CityRepository.cs b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/TestApp/MemoryDb/CityRepository.cs index c83a28871f..b6d43dc875 100644 --- a/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/TestApp/MemoryDb/CityRepository.cs +++ b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/TestApp/MemoryDb/CityRepository.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.TestApp.MemoryDb public async Task> GetPeopleInTheCityAsync(string cityName) { - var city = await FindByNameAsync(cityName).ConfigureAwait(false); + var city = await FindByNameAsync(cityName); return Database.Collection().Where(p => p.CityId == city.Id).ToList(); } diff --git a/framework/test/Volo.Abp.Minify.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Minify.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.Minify.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.Minify.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.MongoDB.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.MongoDB.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.MongoDB.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.MongoDB.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs index 7458f85417..efa64b3617 100644 --- a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs +++ b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs @@ -19,20 +19,20 @@ namespace Volo.Abp.MongoDB.Repositories PersonRepository.FirstOrDefault(p => p.Name == "Douglas").ShouldNotBeNull(); PersonRepository.Count().ShouldBeGreaterThan(0); return Task.CompletedTask; - }).ConfigureAwait(false); + }); } [Fact] public async Task UpdateAsync() { - var person = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId).ConfigureAwait(false); + var person = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId); person.ChangeName("Douglas-Updated"); person.Phones.Add(new Phone(person.Id, "6667778899", PhoneType.Office)); - await PersonRepository.UpdateAsync(person).ConfigureAwait(false); + await PersonRepository.UpdateAsync(person); - person = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId).ConfigureAwait(false); + person = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); person.ShouldNotBeNull(); person.Name.ShouldBe("Douglas-Updated"); person.Phones.Count.ShouldBe(3); @@ -45,9 +45,9 @@ namespace Volo.Abp.MongoDB.Repositories var person = new Person(Guid.NewGuid(), "New Person", 35); person.Phones.Add(new Phone(person.Id, "1234567890")); - await PersonRepository.InsertAsync(person).ConfigureAwait(false); + await PersonRepository.InsertAsync(person); - person = await PersonRepository.FindAsync(person.Id).ConfigureAwait(false); + person = await PersonRepository.FindAsync(person.Id); person.ShouldNotBeNull(); person.Name.ShouldBe("New Person"); person.Phones.Count.ShouldBe(1); diff --git a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/TestApp/MongoDb/CityRepository.cs b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/TestApp/MongoDb/CityRepository.cs index 27381a14da..bb31883010 100644 --- a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/TestApp/MongoDb/CityRepository.cs +++ b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/TestApp/MongoDb/CityRepository.cs @@ -19,13 +19,13 @@ namespace Volo.Abp.TestApp.MongoDB public async Task FindByNameAsync(string name) { - return await (await Collection.FindAsync(c => c.Name == name).ConfigureAwait(false)).FirstOrDefaultAsync().ConfigureAwait(false); + return await (await Collection.FindAsync(c => c.Name == name)).FirstOrDefaultAsync(); } public async Task> GetPeopleInTheCityAsync(string cityName) { - var city = await FindByNameAsync(cityName).ConfigureAwait(false); - return await DbContext.People.AsQueryable().Where(p => p.CityId == city.Id).ToListAsync().ConfigureAwait(false); + var city = await FindByNameAsync(cityName); + return await DbContext.People.AsQueryable().Where(p => p.CityId == city.Id).ToListAsync(); } } } diff --git a/framework/test/Volo.Abp.MultiTenancy.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.MultiTenancy.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.MultiTenancy.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.MultiTenancy.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.ObjectMapping.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.ObjectMapping.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.ObjectMapping.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.ObjectMapping.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Security.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Security.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.Security.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.Security.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Serialization.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Serialization.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.Serialization.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.Serialization.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Settings.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Settings.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.Settings.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.Settings.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingProvider_Tests.cs b/framework/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingProvider_Tests.cs index 47df3f6db1..8508daec12 100644 --- a/framework/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingProvider_Tests.cs +++ b/framework/test/Volo.Abp.Settings.Tests/Volo/Abp/Settings/SettingProvider_Tests.cs @@ -22,14 +22,14 @@ namespace Volo.Abp.Settings [Fact] public async Task Should_Get_Null_If_No_Value_Provided_And_No_Default_Value() { - (await _settingProvider.GetOrNullAsync(TestSettingNames.TestSettingWithoutDefaultValue).ConfigureAwait(false)) + (await _settingProvider.GetOrNullAsync(TestSettingNames.TestSettingWithoutDefaultValue)) .ShouldBeNull(); } [Fact] public async Task Should_Get_Default_Value_If_No_Value_Provided_And_There_Is_A_Default_Value() { - (await _settingProvider.GetOrNullAsync(TestSettingNames.TestSettingWithDefaultValue).ConfigureAwait(false)) + (await _settingProvider.GetOrNullAsync(TestSettingNames.TestSettingWithDefaultValue)) .ShouldBe("default-value"); } } diff --git a/framework/test/Volo.Abp.Specifications.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Specifications.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.Specifications.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.Specifications.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.TestApp.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.TestApp.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.TestApp.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.TestApp.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.TestApp.Tests/Volo/Abp/TestApp/Application/PersonAppService_Tests.cs b/framework/test/Volo.Abp.TestApp.Tests/Volo/Abp/TestApp/Application/PersonAppService_Tests.cs index 47fa69d64f..8d205df899 100644 --- a/framework/test/Volo.Abp.TestApp.Tests/Volo/Abp/TestApp/Application/PersonAppService_Tests.cs +++ b/framework/test/Volo.Abp.TestApp.Tests/Volo/Abp/TestApp/Application/PersonAppService_Tests.cs @@ -32,7 +32,7 @@ namespace Volo.Abp.TestApp.Application public async Task GetList() { var people = await _peopleAppService.GetListAsync(new PagedAndSortedResultRequestDto()) - .ConfigureAwait(false); + ; people.Items.Count.ShouldBeGreaterThan(0); } @@ -40,11 +40,10 @@ namespace Volo.Abp.TestApp.Application public async Task Create() { var uniquePersonName = Guid.NewGuid().ToString(); - var personDto = await _peopleAppService.CreateAsync(new PersonDto {Name = uniquePersonName}) - .ConfigureAwait(false); + var personDto = await _peopleAppService.CreateAsync(new PersonDto {Name = uniquePersonName}); var repository = ServiceProvider.GetService>(); - var person = await repository.FindAsync(personDto.Id).ConfigureAwait(false); + var person = await repository.FindAsync(personDto.Id); person.ShouldNotBeNull(); person.TenantId.ShouldBeNull(); @@ -56,11 +55,10 @@ namespace Volo.Abp.TestApp.Application _fakeCurrentTenant.Id.Returns(TestDataBuilder.TenantId1); var uniquePersonName = Guid.NewGuid().ToString(); - var personDto = await _peopleAppService.CreateAsync(new PersonDto {Name = uniquePersonName}) - .ConfigureAwait(false); + var personDto = await _peopleAppService.CreateAsync(new PersonDto {Name = uniquePersonName}); var repository = ServiceProvider.GetService>(); - var person = await repository.FindAsync(personDto.Id).ConfigureAwait(false); + var person = await repository.FindAsync(personDto.Id); person.ShouldNotBeNull(); person.TenantId.ShouldNotBeNull(); diff --git a/framework/test/Volo.Abp.TestApp/FodyWeavers.xml b/framework/test/Volo.Abp.TestApp/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.TestApp/FodyWeavers.xml +++ b/framework/test/Volo.Abp.TestApp/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/PeopleAppService.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/PeopleAppService.cs index 6d5c2136f3..522f8d9794 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/PeopleAppService.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/PeopleAppService.cs @@ -21,7 +21,7 @@ namespace Volo.Abp.TestApp.Application public async Task> GetPhones(Guid id, GetPersonPhonesFilter filter) { - var phones = (await GetEntityByIdAsync(id).ConfigureAwait(false)).Phones + var phones = (await GetEntityByIdAsync(id)).Phones .WhereIf(filter.Type.HasValue, p => p.Type == filter.Type) .ToList(); @@ -32,19 +32,19 @@ namespace Volo.Abp.TestApp.Application public async Task AddPhone(Guid id, PhoneDto phoneDto) { - var person = await GetEntityByIdAsync(id).ConfigureAwait(false); + var person = await GetEntityByIdAsync(id); var phone = new Phone(person.Id, phoneDto.Number, phoneDto.Type); person.Phones.Add(phone); - await Repository.UpdateAsync(person).ConfigureAwait(false); + await Repository.UpdateAsync(person); return ObjectMapper.Map(phone); } public async Task RemovePhone(Guid id, string number) { - var person = await GetEntityByIdAsync(id).ConfigureAwait(false); + var person = await GetEntityByIdAsync(id); person.Phones.RemoveAll(p => p.Number == number); - await Repository.UpdateAsync(person).ConfigureAwait(false); + await Repository.UpdateAsync(person); } [Authorize] diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestDataBuilder.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestDataBuilder.cs index 7e2be35de0..6d1be41f31 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestDataBuilder.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestDataBuilder.cs @@ -32,29 +32,29 @@ namespace Volo.Abp.TestApp public async Task BuildAsync() { - await AddCities().ConfigureAwait(false); - await AddPeople().ConfigureAwait(false); - await AddEntitiesWithPks().ConfigureAwait(false); + await AddCities(); + await AddPeople(); + await AddEntitiesWithPks(); } private async Task AddCities() { var istanbul = new City(IstanbulCityId, "Istanbul"); istanbul.Districts.Add(new District(istanbul.Id, "Bakirkoy", 1283999)); - istanbul.Districts.Add(new District(istanbul.Id, "Mecidiyeky", 2222321)); + istanbul.Districts.Add(new District(istanbul.Id, "Mecidiyek�y", 2222321)); istanbul.Districts.Add(new District(istanbul.Id, "Uskudar", 726172)); - await _cityRepository.InsertAsync(new City(Guid.NewGuid(), "Tokyo")).ConfigureAwait(false); - await _cityRepository.InsertAsync(new City(Guid.NewGuid(), "Madrid")).ConfigureAwait(false); - await _cityRepository.InsertAsync(new City(LondonCityId, "London") { ExtraProperties = { { "Population", 10_470_000 } } }).ConfigureAwait(false); - await _cityRepository.InsertAsync(istanbul).ConfigureAwait(false); - await _cityRepository.InsertAsync(new City(Guid.NewGuid(), "Paris")).ConfigureAwait(false); - await _cityRepository.InsertAsync(new City(Guid.NewGuid(), "Washington")).ConfigureAwait(false); - await _cityRepository.InsertAsync(new City(Guid.NewGuid(), "Sao Paulo")).ConfigureAwait(false); - await _cityRepository.InsertAsync(new City(Guid.NewGuid(), "Berlin")).ConfigureAwait(false); - await _cityRepository.InsertAsync(new City(Guid.NewGuid(), "Amsterdam")).ConfigureAwait(false); - await _cityRepository.InsertAsync(new City(Guid.NewGuid(), "Beijing")).ConfigureAwait(false); - await _cityRepository.InsertAsync(new City(Guid.NewGuid(), "Rome")).ConfigureAwait(false); + await _cityRepository.InsertAsync(new City(Guid.NewGuid(), "Tokyo")); + await _cityRepository.InsertAsync(new City(Guid.NewGuid(), "Madrid")); + await _cityRepository.InsertAsync(new City(LondonCityId, "London") { ExtraProperties = { { "Population", 10_470_000 } } }); + await _cityRepository.InsertAsync(istanbul); + await _cityRepository.InsertAsync(new City(Guid.NewGuid(), "Paris")); + await _cityRepository.InsertAsync(new City(Guid.NewGuid(), "Washington")); + await _cityRepository.InsertAsync(new City(Guid.NewGuid(), "Sao Paulo")); + await _cityRepository.InsertAsync(new City(Guid.NewGuid(), "Berlin")); + await _cityRepository.InsertAsync(new City(Guid.NewGuid(), "Amsterdam")); + await _cityRepository.InsertAsync(new City(Guid.NewGuid(), "Beijing")); + await _cityRepository.InsertAsync(new City(Guid.NewGuid(), "Rome")); } private async Task AddPeople() @@ -63,20 +63,20 @@ namespace Volo.Abp.TestApp douglas.Phones.Add(new Phone(douglas.Id, "123456789")); douglas.Phones.Add(new Phone(douglas.Id, "123456780", PhoneType.Home)); - await _personRepository.InsertAsync(douglas).ConfigureAwait(false); + await _personRepository.InsertAsync(douglas); - await _personRepository.InsertAsync(new Person(UserJohnDeletedId, "John-Deleted", 33) { IsDeleted = true }).ConfigureAwait(false); + await _personRepository.InsertAsync(new Person(UserJohnDeletedId, "John-Deleted", 33) { IsDeleted = true }); var tenant1Person1 = new Person(Guid.NewGuid(), TenantId1 + "-Person1", 42, TenantId1); var tenant1Person2 = new Person(Guid.NewGuid(), TenantId1 + "-Person2", 43, TenantId1); - await _personRepository.InsertAsync(tenant1Person1).ConfigureAwait(false); - await _personRepository.InsertAsync(tenant1Person2).ConfigureAwait(false); + await _personRepository.InsertAsync(tenant1Person1); + await _personRepository.InsertAsync(tenant1Person2); } private async Task AddEntitiesWithPks() { - await _entityWithIntPksRepository.InsertAsync(new EntityWithIntPk("Entity1")).ConfigureAwait(false); + await _entityWithIntPksRepository.InsertAsync(new EntityWithIntPk("Entity1")); } } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/AbpDateTimeValueConverter_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/AbpDateTimeValueConverter_Tests.cs index 782f61830a..e36225e53c 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/AbpDateTimeValueConverter_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/AbpDateTimeValueConverter_Tests.cs @@ -28,9 +28,9 @@ namespace Volo.Abp.TestApp.Testing { Birthday = DateTime.Parse("2020-01-01 00:00:00"), LastActive = DateTime.Parse("2020-01-01 00:00:00"), - }, true).ConfigureAwait(false); + }, true); - var person = await _personRepository.GetAsync(personId).ConfigureAwait(false); + var person = await _personRepository.GetAsync(personId); person.ShouldNotBeNull(); person.CreationTime.Kind.ShouldBe(DateTimeKind.Utc); @@ -53,9 +53,9 @@ namespace Volo.Abp.TestApp.Testing { Birthday = DateTime.Parse("2020-01-01 00:00:00"), LastActive = DateTime.Parse("2020-01-01 00:00:00"), - }, true).ConfigureAwait(false); + }, true); - var person = await _personRepository.GetViewAsync(personName).ConfigureAwait(false); + var person = await _personRepository.GetViewAsync(personName); person.ShouldNotBeNull(); person.CreationTime.Kind.ShouldBe(DateTimeKind.Utc); diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Auditing_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Auditing_Tests.cs index dcbfdaf045..41ef7ce076 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Auditing_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Auditing_Tests.cs @@ -49,9 +49,9 @@ namespace Volo.Abp.TestApp.Testing var personId = Guid.NewGuid(); - await PersonRepository.InsertAsync(new Person(personId, "Adam", 42)).ConfigureAwait(false); + await PersonRepository.InsertAsync(new Person(personId, "Adam", 42)); - var person = await PersonRepository.FindAsync(personId).ConfigureAwait(false); + var person = await PersonRepository.FindAsync(personId); person.ShouldNotBeNull(); person.CreationTime.ShouldBeLessThanOrEqualTo(Clock.Now); @@ -68,14 +68,14 @@ namespace Volo.Abp.TestApp.Testing CurrentUserId = Guid.Parse(currentUserId); } - var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId).ConfigureAwait(false); + var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId); douglas.LastModificationTime.ShouldBeNull(); douglas.Age++; - await PersonRepository.UpdateAsync(douglas).ConfigureAwait(false); + await PersonRepository.UpdateAsync(douglas); - douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId).ConfigureAwait(false); + douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); douglas.ShouldNotBeNull(); douglas.LastModificationTime.ShouldNotBeNull(); @@ -93,17 +93,17 @@ namespace Volo.Abp.TestApp.Testing CurrentUserId = Guid.Parse(currentUserId); } - var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId).ConfigureAwait(false); + var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId); - await PersonRepository.DeleteAsync(douglas).ConfigureAwait(false); + await PersonRepository.DeleteAsync(douglas); - douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId).ConfigureAwait(false); + douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); douglas.ShouldBeNull(); using (DataFilter.Disable()) { - douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId).ConfigureAwait(false); + douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); douglas.ShouldNotBeNull(); douglas.DeletionTime.ShouldNotBeNull(); diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/ConcurrencyStamp_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/ConcurrencyStamp_Tests.cs index 1f7c927251..2c5a5d89ab 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/ConcurrencyStamp_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/ConcurrencyStamp_Tests.cs @@ -20,37 +20,37 @@ namespace Volo.Abp.TestApp.Testing public async Task Should_Not_Allow_To_Update_If_The_Entity_Has_Changed() { //Got an entity from database, changed its value, but not updated in the database yet - var london1 = await CityRepository.FindByNameAsync("London").ConfigureAwait(false); + var london1 = await CityRepository.FindByNameAsync("London"); london1.Name = "London-1"; //Another user has changed it just before I update - var london2 = await CityRepository.FindByNameAsync("London").ConfigureAwait(false); + var london2 = await CityRepository.FindByNameAsync("London"); london2.Name = "London-2"; - await CityRepository.UpdateAsync(london2).ConfigureAwait(false); + await CityRepository.UpdateAsync(london2); //And updating my old entity throws exception! await Assert.ThrowsAsync(async () => { - await CityRepository.UpdateAsync(london1).ConfigureAwait(false); - }).ConfigureAwait(false); + await CityRepository.UpdateAsync(london1); + }); } [Fact] public async Task Should_Not_Allow_To_Delete_If_The_Entity_Has_Changed() { //Got an entity from database, but not deleted in the database yet - var london1 = await CityRepository.FindByNameAsync("London").ConfigureAwait(false); + var london1 = await CityRepository.FindByNameAsync("London"); //Another user has changed it just before I delete - var london2 = await CityRepository.FindByNameAsync("London").ConfigureAwait(false); + var london2 = await CityRepository.FindByNameAsync("London"); london2.Name = "London-updated"; - await CityRepository.UpdateAsync(london2).ConfigureAwait(false); + await CityRepository.UpdateAsync(london2); //And deleting my old entity throws exception! await Assert.ThrowsAsync(async () => { - await CityRepository.DeleteAsync(london1).ConfigureAwait(false); - }).ConfigureAwait(false); + await CityRepository.DeleteAsync(london1); + }); } } } diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DomainEvents_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DomainEvents_Tests.cs index 2c6982de6a..3ca7eaf8e4 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DomainEvents_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DomainEvents_Tests.cs @@ -55,8 +55,8 @@ namespace Volo.Abp.TestApp.Testing { var dougles = PersonRepository.Single(b => b.Name == "Douglas"); dougles.ChangeName("Douglas-Changed"); - await PersonRepository.UpdateAsync(dougles).ConfigureAwait(false); - }).ConfigureAwait(false); + await PersonRepository.UpdateAsync(dougles); + }); //Assert diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityChangeEvents_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityChangeEvents_Tests.cs index bc38257683..fe4e0862f3 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityChangeEvents_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityChangeEvents_Tests.cs @@ -75,9 +75,9 @@ namespace Volo.Abp.TestApp.Testing return Task.CompletedTask; }); - await PersonRepository.InsertAsync(new Person(Guid.NewGuid(), personName, 15)).ConfigureAwait(false); + await PersonRepository.InsertAsync(new Person(Guid.NewGuid(), personName, 15)); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } creatingEventTriggered.ShouldBeTrue(); diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/ExtraProperties_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/ExtraProperties_Tests.cs index a52ddbee3a..67eff13572 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/ExtraProperties_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/ExtraProperties_Tests.cs @@ -20,7 +20,7 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task Should_Get_An_Extra_Property() { - var london = await CityRepository.FindByNameAsync("London").ConfigureAwait(false); + var london = await CityRepository.FindByNameAsync("London"); london.HasProperty("Population").ShouldBeTrue(); london.GetProperty("Population").ShouldBe(10_470_000); } @@ -28,11 +28,11 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task Should_Add_An_Extra_Property() { - var london = await CityRepository.FindByNameAsync("London").ConfigureAwait(false); + var london = await CityRepository.FindByNameAsync("London"); london.SetProperty("AreaAsKm", 1572); - await CityRepository.UpdateAsync(london).ConfigureAwait(false); + await CityRepository.UpdateAsync(london); - var london2 = await CityRepository.FindByNameAsync("London").ConfigureAwait(false); + var london2 = await CityRepository.FindByNameAsync("London"); london2.HasProperty("AreaAsKm").ShouldBeTrue(); london2.GetProperty("AreaAsKm").ShouldBe(1572); } @@ -40,12 +40,12 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task Should_Update_An_Existing_Extra_Property() { - var london = await CityRepository.FindByNameAsync("London").ConfigureAwait(false); + var london = await CityRepository.FindByNameAsync("London"); london.ExtraProperties["Population"] = 11_000_042; - await CityRepository.UpdateAsync(london).ConfigureAwait(false); + await CityRepository.UpdateAsync(london); - var london2 = await CityRepository.FindByNameAsync("London").ConfigureAwait(false); + var london2 = await CityRepository.FindByNameAsync("London"); london2.HasProperty("Population").ShouldBeTrue(); london2.GetProperty("Population").ShouldBe(11_000_042); } diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/MultiTenant_Creation_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/MultiTenant_Creation_Tests.cs index af910aefba..b8a3e8449c 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/MultiTenant_Creation_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/MultiTenant_Creation_Tests.cs @@ -42,9 +42,9 @@ namespace Volo.Abp.TestApp.Testing Id = personId, Name = "Person1", Age = 21 - }).ConfigureAwait(false); + }); - var person = await _personRepository.FindAsync(personId).ConfigureAwait(false); + var person = await _personRepository.FindAsync(personId); person.ShouldNotBeNull(); person.TenantId.ShouldNotBeNull(); @@ -63,9 +63,9 @@ namespace Volo.Abp.TestApp.Testing Id = personId, Name = "Person1", Age = 21 - }).ConfigureAwait(false); + }); - var person = await _personRepository.FindAsync(personId).ConfigureAwait(false); + var person = await _personRepository.FindAsync(personId); person.ShouldNotBeNull(); person.TenantId.ShouldBeNull(); diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/MultiTenant_Filter_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/MultiTenant_Filter_Tests.cs index 10ce8e1605..da3e33ffea 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/MultiTenant_Filter_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/MultiTenant_Filter_Tests.cs @@ -63,7 +63,7 @@ namespace Volo.Abp.TestApp.Testing people.Count.ShouldBe(0); return Task.CompletedTask; - }).ConfigureAwait(false); + }); } [Fact] @@ -85,7 +85,7 @@ namespace Volo.Abp.TestApp.Testing people.Count.ShouldBe(1); return Task.CompletedTask; - }).ConfigureAwait(false); + }); } } } diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests.cs index 7571c4fecd..07e6211c09 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task GetAsync() { - var person = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId).ConfigureAwait(false); + var person = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId); person.Name.ShouldBe("Douglas"); person.Phones.Count.ShouldBe(2); } @@ -31,29 +31,29 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task FindAsync_Should_Return_Null_For_Not_Found_Entity() { - var person = await PersonRepository.FindAsync(Guid.NewGuid()).ConfigureAwait(false); + var person = await PersonRepository.FindAsync(Guid.NewGuid()); person.ShouldBeNull(); } [Fact] public async Task DeleteAsync() { - await PersonRepository.DeleteAsync(TestDataBuilder.UserDouglasId).ConfigureAwait(false); + await PersonRepository.DeleteAsync(TestDataBuilder.UserDouglasId); - (await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId).ConfigureAwait(false)).ShouldBeNull(); + (await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId)).ShouldBeNull(); } [Fact] public async Task Should_Access_To_Other_Collections_In_Same_Context_In_A_Custom_Method() { - var people = await CityRepository.GetPeopleInTheCityAsync("London").ConfigureAwait(false); + var people = await CityRepository.GetPeopleInTheCityAsync("London"); people.Count.ShouldBeGreaterThan(0); } [Fact] public async Task Custom_Repository_Method() { - var city = await CityRepository.FindByNameAsync("Istanbul").ConfigureAwait(false); + var city = await CityRepository.FindByNameAsync("Istanbul"); city.ShouldNotBeNull(); city.Name.ShouldBe("Istanbul"); } @@ -63,9 +63,9 @@ namespace Volo.Abp.TestApp.Testing { var personId = Guid.NewGuid(); - await PersonRepository.InsertAsync(new Person(personId, "Adam", 42)).ConfigureAwait(false); + await PersonRepository.InsertAsync(new Person(personId, "Adam", 42)); - var person = await PersonRepository.FindAsync(personId).ConfigureAwait(false); + var person = await PersonRepository.FindAsync(personId); person.ShouldNotBeNull(); } } diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests_With_Int_Pk.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests_With_Int_Pk.cs index 0c3bc5e290..f873fe4265 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests_With_Int_Pk.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests_With_Int_Pk.cs @@ -27,7 +27,7 @@ namespace Volo.Abp.TestApp.Testing entity.ShouldNotBeNull(); entity.Name.ShouldBe("Entity1"); return Task.CompletedTask; - }).ConfigureAwait(false); + }); } [Fact] @@ -35,10 +35,10 @@ namespace Volo.Abp.TestApp.Testing { await WithUnitOfWorkAsync(async () => { - var entity = await EntityWithIntPkRepository.GetAsync(1).ConfigureAwait(false); + var entity = await EntityWithIntPkRepository.GetAsync(1); entity.ShouldNotBeNull(); entity.Name.ShouldBe("Entity1"); - }).ConfigureAwait(false); + }); } } } diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Queryable_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Queryable_Tests.cs index 0e7bf2f7df..6078236380 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Queryable_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Queryable_Tests.cs @@ -27,7 +27,7 @@ namespace Volo.Abp.TestApp.Testing { PersonRepository.Any().ShouldBeTrue(); return Task.CompletedTask; - }).ConfigureAwait(false); + }); } [Fact] @@ -38,7 +38,7 @@ namespace Volo.Abp.TestApp.Testing var person = PersonRepository.Single(p => p.Id == TestDataBuilder.UserDouglasId); person.Name.ShouldBe("Douglas"); return Task.CompletedTask; - }).ConfigureAwait(false); + }); } [Fact] @@ -50,7 +50,7 @@ namespace Volo.Abp.TestApp.Testing person.Name.ShouldBe("Douglas"); person.Phones.Count.ShouldBe(2); return Task.CompletedTask; - }).ConfigureAwait(false); + }); } [Fact] @@ -62,7 +62,7 @@ namespace Volo.Abp.TestApp.Testing person.Name.ShouldBe("Douglas"); person.Phones.Count.ShouldBe(2); return Task.CompletedTask; - }).ConfigureAwait(false); + }); } } } diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Specifications_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Specifications_Tests.cs index 49880535f2..c26134b27c 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Specifications_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Specifications_Tests.cs @@ -28,7 +28,7 @@ namespace Volo.Abp.TestApp.Testing { CityRepository.Count(new CitySpecification().ToExpression()).ShouldBe(1); return Task.CompletedTask; - }).ConfigureAwait(false); + }); } } diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Filter_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Filter_Tests.cs index 6daba040a4..f3ac8c301f 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Filter_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Filter_Tests.cs @@ -30,7 +30,7 @@ namespace Volo.Abp.TestApp.Testing var person = PersonRepository.FirstOrDefault(p => p.Name == "John-Deleted"); person.ShouldBeNull(); return Task.CompletedTask; - }).ConfigureAwait(false); + }); } [Fact] @@ -38,9 +38,9 @@ namespace Volo.Abp.TestApp.Testing { await WithUnitOfWorkAsync(async () => { - var person = await PersonRepository.FindAsync(TestDataBuilder.UserJohnDeletedId).ConfigureAwait(false); + var person = await PersonRepository.FindAsync(TestDataBuilder.UserJohnDeletedId); person.ShouldBeNull(); - }).ConfigureAwait(false); + }); } [Fact] @@ -52,7 +52,7 @@ namespace Volo.Abp.TestApp.Testing people.Count.ShouldBe(1); people.Any(p => p.Name == "Douglas").ShouldBeTrue(); return Task.CompletedTask; - }).ConfigureAwait(false); + }); } [Fact] @@ -92,7 +92,7 @@ namespace Volo.Abp.TestApp.Testing people.Any(p => p.IsDeleted).ShouldBeFalse(); return Task.CompletedTask; - }).ConfigureAwait(false); + }); } } } diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Tests.cs index e1f4bc56a7..0059a39a11 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Tests.cs @@ -24,15 +24,15 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task Should_Cancel_Deletion_For_Soft_Delete_Entities() { - var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId).ConfigureAwait(false); - await PersonRepository.DeleteAsync(douglas).ConfigureAwait(false); + var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId); + await PersonRepository.DeleteAsync(douglas); - douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId).ConfigureAwait(false); + douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); douglas.ShouldBeNull(); using (DataFilter.Disable()) { - douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId).ConfigureAwait(false); + douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); douglas.ShouldNotBeNull(); douglas.IsDeleted.ShouldBeTrue(); douglas.DeletionTime.ShouldNotBeNull(); @@ -42,18 +42,18 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task Should_Handle_Deletion_On_Update_For_Soft_Delete_Entities() { - var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId).ConfigureAwait(false); + var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId); douglas.Age = 42; douglas.IsDeleted = true; - await PersonRepository.UpdateAsync(douglas).ConfigureAwait(false); + await PersonRepository.UpdateAsync(douglas); - douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId).ConfigureAwait(false); + douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); douglas.ShouldBeNull(); using (DataFilter.Disable()) { - douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId).ConfigureAwait(false); + douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); douglas.ShouldNotBeNull(); douglas.IsDeleted.ShouldBeTrue(); douglas.DeletionTime.ShouldNotBeNull(); diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/TestAppTestBase.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/TestAppTestBase.cs index 3f80bfb74b..f21cc7371b 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/TestAppTestBase.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/TestAppTestBase.cs @@ -30,9 +30,9 @@ namespace Volo.Abp.TestApp.Testing using (var uow = uowManager.Begin(options)) { - await action().ConfigureAwait(false); + await action(); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } } @@ -50,8 +50,8 @@ namespace Volo.Abp.TestApp.Testing using (var uow = uowManager.Begin(options)) { - var result = await func().ConfigureAwait(false); - await uow.CompleteAsync().ConfigureAwait(false); + var result = await func(); + await uow.CompleteAsync(); return result; } } diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Uow_Completed_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Uow_Completed_Tests.cs index a101e64ea6..1b169bbe97 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Uow_Completed_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Uow_Completed_Tests.cs @@ -25,15 +25,15 @@ namespace Volo.Abp.TestApp.Testing using (var uow = _unitOfWorkManager.Begin()) { //Perform an arbitrary database operation - await _cityRepository.InsertAsync(new City(Guid.NewGuid(), Guid.NewGuid().ToString())).ConfigureAwait(false); + await _cityRepository.InsertAsync(new City(Guid.NewGuid(), Guid.NewGuid().ToString())); uow.OnCompleted(async () => { //Perform another database operation inside the OnCompleted handler - await _cityRepository.InsertAsync(new City(Guid.NewGuid(), Guid.NewGuid().ToString())).ConfigureAwait(false); + await _cityRepository.InsertAsync(new City(Guid.NewGuid(), Guid.NewGuid().ToString())); }); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } } diff --git a/framework/test/Volo.Abp.UI.Navigation.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.UI.Navigation.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.UI.Navigation.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.UI.Navigation.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.UI.Navigation.Tests/Volo/Abp/Ui/Navigation/MenuManager_Tests.cs b/framework/test/Volo.Abp.UI.Navigation.Tests/Volo/Abp/Ui/Navigation/MenuManager_Tests.cs index 1f5190a9eb..96db1622b5 100644 --- a/framework/test/Volo.Abp.UI.Navigation.Tests/Volo/Abp/Ui/Navigation/MenuManager_Tests.cs +++ b/framework/test/Volo.Abp.UI.Navigation.Tests/Volo/Abp/Ui/Navigation/MenuManager_Tests.cs @@ -19,7 +19,7 @@ namespace Volo.Abp.UI.Navigation [Fact] public async Task Should_Get_Menu() { - var mainMenu = await _menuManager.GetAsync(StandardMenus.Main).ConfigureAwait(false); + var mainMenu = await _menuManager.GetAsync(StandardMenus.Main); mainMenu.Name.ShouldBe(StandardMenus.Main); mainMenu.DisplayName.ShouldBe("Main Menu"); diff --git a/framework/test/Volo.Abp.Uow.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Uow.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.Uow.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.Uow.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWork_Ambient_Scope_Tests.cs b/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWork_Ambient_Scope_Tests.cs index 6b1bc2f98d..e0810467b3 100644 --- a/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWork_Ambient_Scope_Tests.cs +++ b/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWork_Ambient_Scope_Tests.cs @@ -30,13 +30,13 @@ namespace Volo.Abp.Uow _unitOfWorkManager.Current.ShouldNotBeNull(); _unitOfWorkManager.Current.Id.ShouldBe(uow1.Id); - await uow2.CompleteAsync().ConfigureAwait(false); + await uow2.CompleteAsync(); } _unitOfWorkManager.Current.ShouldNotBeNull(); _unitOfWorkManager.Current.ShouldBe(uow1); - await uow1.CompleteAsync().ConfigureAwait(false); + await uow1.CompleteAsync(); } _unitOfWorkManager.Current.ShouldBeNull(); @@ -56,7 +56,7 @@ namespace Volo.Abp.Uow _unitOfWorkManager.Current.ShouldNotBeNull(); _unitOfWorkManager.Current.Id.ShouldNotBe(uow1.Id); - await uow2.CompleteAsync().ConfigureAwait(false); + await uow2.CompleteAsync(); } _unitOfWorkManager.Current.ShouldBeNull(); @@ -66,7 +66,7 @@ namespace Volo.Abp.Uow _unitOfWorkManager.Current.ShouldNotBeNull(); _unitOfWorkManager.Current.Id.ShouldBe(uow1.Id); - await uow1.CompleteAsync().ConfigureAwait(false); + await uow1.CompleteAsync(); } _unitOfWorkManager.Current.ShouldBeNull(); diff --git a/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWork_Events_Tests.cs b/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWork_Events_Tests.cs index 7d9a176076..bf120d2e33 100644 --- a/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWork_Events_Tests.cs +++ b/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWork_Events_Tests.cs @@ -32,7 +32,7 @@ namespace Volo.Abp.Uow uow.Disposed += (sender, args) => disposed = true; - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); completed.ShouldBeTrue(); } @@ -53,7 +53,7 @@ namespace Volo.Abp.Uow childUow.OnCompleted(async () => completed = true); uow.Disposed += (sender, args) => disposed = true; - await childUow.CompleteAsync().ConfigureAwait(false); + await childUow.CompleteAsync(); completed.ShouldBeFalse(); //Parent has not been completed yet! disposed.ShouldBeFalse(); @@ -62,7 +62,7 @@ namespace Volo.Abp.Uow completed.ShouldBeFalse(); //Parent has not been completed yet! disposed.ShouldBeFalse(); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); completed.ShouldBeTrue(); //It's completed now! disposed.ShouldBeFalse(); //But not disposed yet! @@ -129,11 +129,11 @@ namespace Volo.Abp.Uow uow.Failed += (sender, args) => { failed = true; args.IsRolledback.ShouldBeTrue(); }; uow.Disposed += (sender, args) => disposed = true; - await uow.RollbackAsync().ConfigureAwait(false); + await uow.RollbackAsync(); if (callComplete) { - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } diff --git a/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWork_Nested_Tests.cs b/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWork_Nested_Tests.cs index efa4a7540e..31ce688d84 100644 --- a/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWork_Nested_Tests.cs +++ b/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWork_Nested_Tests.cs @@ -30,13 +30,13 @@ namespace Volo.Abp.Uow _unitOfWorkManager.Current.ShouldNotBeNull(); _unitOfWorkManager.Current.Id.ShouldNotBe(uow1.Id); - await uow2.CompleteAsync().ConfigureAwait(false); + await uow2.CompleteAsync(); } _unitOfWorkManager.Current.ShouldNotBeNull(); _unitOfWorkManager.Current.ShouldBe(uow1); - await uow1.CompleteAsync().ConfigureAwait(false); + await uow1.CompleteAsync(); } _unitOfWorkManager.Current.ShouldBeNull(); diff --git a/framework/test/Volo.Abp.Validation.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.Validation.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.Validation.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.Validation.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Validation.Tests/Volo/Abp/Validation/ApplicationService_Validation_Tests.cs b/framework/test/Volo.Abp.Validation.Tests/Volo/Abp/Validation/ApplicationService_Validation_Tests.cs index 8b4f4a6110..0d13867819 100644 --- a/framework/test/Volo.Abp.Validation.Tests/Volo/Abp/Validation/ApplicationService_Validation_Tests.cs +++ b/framework/test/Volo.Abp.Validation.Tests/Volo/Abp/Validation/ApplicationService_Validation_Tests.cs @@ -31,15 +31,15 @@ namespace Volo.Abp.Validation [Fact] public async Task Should_Work_Proper_With_Right_Inputs() { - var output = await _myAppService.MyMethod(new MyMethodInput { MyStringValue = "test" }).ConfigureAwait(false); + var output = await _myAppService.MyMethod(new MyMethodInput { MyStringValue = "test" }); output.Result.ShouldBe(42); } [Fact] public async Task Should_Not_Work_With_Wrong_Inputs() { - await Assert.ThrowsAsync(async () => await _myAppService.MyMethod(new MyMethodInput()).ConfigureAwait(false)).ConfigureAwait(false); //MyStringValue is not supplied! - await Assert.ThrowsAsync(async () => await _myAppService.MyMethod(new MyMethodInput { MyStringValue = "a" }).ConfigureAwait(false)).ConfigureAwait(false); //MyStringValue's min length should be 3! + await Assert.ThrowsAsync(async () => await _myAppService.MyMethod(new MyMethodInput())); //MyStringValue is not supplied! + await Assert.ThrowsAsync(async () => await _myAppService.MyMethod(new MyMethodInput { MyStringValue = "a" })); //MyStringValue's min length should be 3! } [Fact] @@ -50,7 +50,7 @@ namespace Volo.Abp.Validation MyStringValue2 = "test 1", Input1 = new MyMethodInput { MyStringValue = "test 2" }, DateTimeValue = DateTime.Now - }).ConfigureAwait(false); + }); output.Result.ShouldBe(42); } @@ -63,7 +63,7 @@ namespace Volo.Abp.Validation { MyStringValue2 = "test 1", Input1 = new MyMethodInput() //MyStringValue is not set - }).ConfigureAwait(false)).ConfigureAwait(false); + })); } [Fact] @@ -73,7 +73,7 @@ namespace Volo.Abp.Validation await _myAppService.MyMethod2(new MyMethod2Input //Input1 is not set { MyStringValue2 = "test 1" - }).ConfigureAwait(false)).ConfigureAwait(false); + })); } [Fact] @@ -88,7 +88,7 @@ namespace Volo.Abp.Validation { new MyClassInList {ValueInList = null} } - }).ConfigureAwait(false)).ConfigureAwait(false); + })); } [Fact] @@ -103,27 +103,27 @@ namespace Volo.Abp.Validation { new MyClassInList {ValueInList = null} } - }).ConfigureAwait(false)).ConfigureAwait(false); + })); } [Fact] public async Task Should_Not_Work_If_Array_Is_Null() { await Assert.ThrowsAsync(async () => - await _myAppService.MyMethod4(new MyMethod4Input()) //ArrayItems is null! -.ConfigureAwait(false)).ConfigureAwait(false); + await _myAppService.MyMethod4(new MyMethod4Input()) //ArrayItems is null! + ); } [Fact] public async Task Should_Work_If_Array_Is_Null_But_DisabledValidation_For_Method() { - await _myAppService.MyMethod4_2(new MyMethod4Input()).ConfigureAwait(false); + await _myAppService.MyMethod4_2(new MyMethod4Input()); } [Fact] public async Task Should_Work_If_Array_Is_Null_But_DisabledValidation_For_Property() { - await _myAppService.MyMethod5(new MyMethod5Input()).ConfigureAwait(false); + await _myAppService.MyMethod5(new MyMethod5Input()); } [Fact] @@ -134,8 +134,8 @@ namespace Volo.Abp.Validation await _myAppService.MyMethod6(new MyMethod6Input { MyStringValue = "test value" //MyIntValue has not set! - }).ConfigureAwait(false); - }).ConfigureAwait(false); + }); + }); } //TODO: Create a Volo.Abp.Ddd.Application.Contracts.Tests project and move this to there and remove Volo.Abp.Ddd.Application.Contracts dependency from this project. @@ -147,8 +147,8 @@ namespace Volo.Abp.Validation await _myAppService.MyMethodWithLimitedResult(new LimitedResultRequestDto { MaxResultCount = LimitedResultRequestDto.MaxMaxResultCount + 1 - }).ConfigureAwait(false); - }).ConfigureAwait(false); + }); + }); exception.ValidationErrors.ShouldContain(e => e.MemberNames.Contains(nameof(LimitedResultRequestDto.MaxResultCount))); } @@ -159,19 +159,19 @@ namespace Volo.Abp.Validation await _myAppService.MyMethodWithLimitedResult(new LimitedResultRequestDto { MaxResultCount = LimitedResultRequestDto.MaxMaxResultCount - 1 - }).ConfigureAwait(false); + }); } [Fact] public async Task Should_Stop_Recursive_Validation_In_A_Constant_Depth() { - (await _myAppService.MyMethod8(new MyClassWithRecursiveReference { Value = "42" }).ConfigureAwait(false)).Result.ShouldBe(42); + (await _myAppService.MyMethod8(new MyClassWithRecursiveReference { Value = "42" })).Result.ShouldBe(42); } [Fact] public async Task Should_Allow_Null_For_Nullable_Enums() { - await _myAppService.MyMethodWithNullableEnum(null).ConfigureAwait(false); + await _myAppService.MyMethodWithNullableEnum(null); } [Fact] diff --git a/framework/test/Volo.Abp.VirtualFileSystem.Tests/FodyWeavers.xml b/framework/test/Volo.Abp.VirtualFileSystem.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/framework/test/Volo.Abp.VirtualFileSystem.Tests/FodyWeavers.xml +++ b/framework/test/Volo.Abp.VirtualFileSystem.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/FodyWeavers.xml b/modules/account/src/Volo.Abp.Account.Application.Contracts/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/FodyWeavers.xml +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application/FodyWeavers.xml b/modules/account/src/Volo.Abp.Account.Application/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/account/src/Volo.Abp.Account.Application/FodyWeavers.xml +++ b/modules/account/src/Volo.Abp.Account.Application/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/AccountAppService.cs b/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/AccountAppService.cs index 9935078fe1..62bcb2eb3d 100644 --- a/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/AccountAppService.cs +++ b/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/AccountAppService.cs @@ -19,18 +19,18 @@ namespace Volo.Abp.Account public virtual async Task RegisterAsync(RegisterDto input) { - await CheckSelfRegistrationAsync().ConfigureAwait(false); + await CheckSelfRegistrationAsync(); var user = new IdentityUser(GuidGenerator.Create(), input.UserName, input.EmailAddress, CurrentTenant.Id); - (await UserManager.CreateAsync(user, input.Password).ConfigureAwait(false)).CheckErrors(); + (await UserManager.CreateAsync(user, input.Password)).CheckErrors(); return ObjectMapper.Map(user); } protected virtual async Task CheckSelfRegistrationAsync() { - if (!await SettingProvider.IsTrueAsync(AccountSettingNames.IsSelfRegistrationEnabled).ConfigureAwait(false)) + if (!await SettingProvider.IsTrueAsync(AccountSettingNames.IsSelfRegistrationEnabled)) { throw new UserFriendlyException(L["SelfRegistrationDisabledMessage"]); } diff --git a/modules/account/src/Volo.Abp.Account.HttpApi.Client/FodyWeavers.xml b/modules/account/src/Volo.Abp.Account.HttpApi.Client/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/account/src/Volo.Abp.Account.HttpApi.Client/FodyWeavers.xml +++ b/modules/account/src/Volo.Abp.Account.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.HttpApi/FodyWeavers.xml b/modules/account/src/Volo.Abp.Account.HttpApi/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/account/src/Volo.Abp.Account.HttpApi/FodyWeavers.xml +++ b/modules/account/src/Volo.Abp.Account.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/FodyWeavers.xml b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/FodyWeavers.xml +++ b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLoginModel.cs b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLoginModel.cs index 2fa2aa5778..218baa7c60 100644 --- a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLoginModel.cs +++ b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLoginModel.cs @@ -46,7 +46,7 @@ namespace Volo.Abp.Account.Web.Pages.Account { LoginInput = new LoginInputModel(); - var context = await Interaction.GetAuthorizationContextAsync(ReturnUrl).ConfigureAwait(false); + var context = await Interaction.GetAuthorizationContextAsync(ReturnUrl); if (context != null) { @@ -68,7 +68,7 @@ namespace Volo.Abp.Account.Web.Pages.Account return Page(); } - var schemes = await _schemeProvider.GetAllSchemesAsync().ConfigureAwait(false); + var schemes = await _schemeProvider.GetAllSchemesAsync(); var providers = schemes .Where(x => x.DisplayName != null || x.Name.Equals(_accountOptions.WindowsAuthenticationSchemeName, StringComparison.OrdinalIgnoreCase)) @@ -79,10 +79,10 @@ namespace Volo.Abp.Account.Web.Pages.Account }) .ToList(); - EnableLocalLogin = await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin).ConfigureAwait(false); + EnableLocalLogin = await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin); if (context?.ClientId != null) { - var client = await ClientStore.FindEnabledClientByIdAsync(context.ClientId).ConfigureAwait(false); + var client = await ClientStore.FindEnabledClientByIdAsync(context.ClientId); if (client != null) { EnableLocalLogin = client.EnableLocalLogin; @@ -98,7 +98,7 @@ namespace Volo.Abp.Account.Web.Pages.Account if (IsExternalLoginOnly) { - return await base.OnPostExternalLogin(providers.First().AuthenticationScheme).ConfigureAwait(false); + return await base.OnPostExternalLogin(providers.First().AuthenticationScheme); } return Page(); @@ -107,31 +107,31 @@ namespace Volo.Abp.Account.Web.Pages.Account [UnitOfWork] //TODO: Will be removed when we implement action filter public override async Task OnPostAsync(string action) { - EnableLocalLogin = await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin).ConfigureAwait(false); + EnableLocalLogin = await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin); if (action == "Cancel") { - var context = await Interaction.GetAuthorizationContextAsync(ReturnUrl).ConfigureAwait(false); + var context = await Interaction.GetAuthorizationContextAsync(ReturnUrl); if (context == null) { return Redirect("~/"); } - await Interaction.GrantConsentAsync(context, ConsentResponse.Denied).ConfigureAwait(false); + await Interaction.GrantConsentAsync(context, ConsentResponse.Denied); return Redirect(ReturnUrl); } ValidateModel(); - await ReplaceEmailToUsernameOfInputIfNeeds().ConfigureAwait(false); + await ReplaceEmailToUsernameOfInputIfNeeds(); var result = await SignInManager.PasswordSignInAsync( LoginInput.UserNameOrEmailAddress, LoginInput.Password, LoginInput.RememberMe, true - ).ConfigureAwait(false); + ); if (result.RequiresTwoFactor) { @@ -162,11 +162,11 @@ namespace Volo.Abp.Account.Web.Pages.Account } //TODO: Find a way of getting user's id from the logged in user and do not query it again like that! - var user = await UserManager.FindByNameAsync(LoginInput.UserNameOrEmailAddress).ConfigureAwait(false) ?? - await UserManager.FindByEmailAsync(LoginInput.UserNameOrEmailAddress).ConfigureAwait(false); + var user = await UserManager.FindByNameAsync(LoginInput.UserNameOrEmailAddress) ?? + await UserManager.FindByEmailAsync(LoginInput.UserNameOrEmailAddress); Debug.Assert(user != null, nameof(user) + " != null"); - await IdentityServerEvents.RaiseAsync(new UserLoginSuccessEvent(user.UserName, user.Id.ToString(), user.UserName)).ConfigureAwait(false); //TODO: Use user's name once implemented + await IdentityServerEvents.RaiseAsync(new UserLoginSuccessEvent(user.UserName, user.Id.ToString(), user.UserName)); //TODO: Use user's name once implemented return RedirectSafely(ReturnUrl, ReturnUrlHash); } @@ -176,15 +176,15 @@ namespace Volo.Abp.Account.Web.Pages.Account { if (_accountOptions.WindowsAuthenticationSchemeName == provider) { - return await ProcessWindowsLoginAsync().ConfigureAwait(false); + return await ProcessWindowsLoginAsync(); } - return await base.OnPostExternalLogin(provider).ConfigureAwait(false); + return await base.OnPostExternalLogin(provider); } private async Task ProcessWindowsLoginAsync() { - var result = await HttpContext.AuthenticateAsync(_accountOptions.WindowsAuthenticationSchemeName).ConfigureAwait(false); + var result = await HttpContext.AuthenticateAsync(_accountOptions.WindowsAuthenticationSchemeName); if (!(result?.Principal is WindowsPrincipal windowsPrincipal)) { return Challenge(_accountOptions.WindowsAuthenticationSchemeName); @@ -219,7 +219,7 @@ namespace Volo.Abp.Account.Web.Pages.Account IdentityServer4.IdentityServerConstants.ExternalCookieAuthenticationScheme, new ClaimsPrincipal(identity), props - ).ConfigureAwait(false); + ); return RedirectSafely(props.RedirectUri); } diff --git a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Consent.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Consent.cshtml.cs index e34f6e98f1..3fb68feaca 100644 --- a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Consent.cshtml.cs +++ b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Consent.cshtml.cs @@ -44,19 +44,19 @@ namespace Volo.Abp.Account.Web.Pages public virtual async Task OnGet() { - var request = await _interaction.GetAuthorizationContextAsync(ReturnUrl).ConfigureAwait(false); + var request = await _interaction.GetAuthorizationContextAsync(ReturnUrl); if (request == null) { throw new ApplicationException($"No consent request matching request: {ReturnUrl}"); } - var client = await _clientStore.FindEnabledClientByIdAsync(request.ClientId).ConfigureAwait(false); + var client = await _clientStore.FindEnabledClientByIdAsync(request.ClientId); if (client == null) { throw new ApplicationException($"Invalid client id: {request.ClientId}"); } - var resources = await _resourceStore.FindEnabledResourcesByScopeAsync(request.ScopesRequested).ConfigureAwait(false); + var resources = await _resourceStore.FindEnabledResourcesByScopeAsync(request.ScopesRequested); if (resources == null || (!resources.IdentityResources.Any() && !resources.ApiResources.Any())) { throw new ApplicationException($"No scopes matching: {request.ScopesRequested.Aggregate((x, y) => x + ", " + y)}"); @@ -78,7 +78,7 @@ namespace Volo.Abp.Account.Web.Pages public virtual async Task OnPost(string userDecision) { - var result = await ProcessConsentAsync().ConfigureAwait(false); + var result = await ProcessConsentAsync(); if (result.IsRedirect) { @@ -122,13 +122,13 @@ namespace Volo.Abp.Account.Web.Pages if (grantedConsent != null) { - var request = await _interaction.GetAuthorizationContextAsync(ReturnUrl).ConfigureAwait(false); + var request = await _interaction.GetAuthorizationContextAsync(ReturnUrl); if (request == null) { return result; } - await _interaction.GrantConsentAsync(request, grantedConsent).ConfigureAwait(false); + await _interaction.GrantConsentAsync(request, grantedConsent); result.RedirectUri = ReturnUrl; //TODO: ReturnUrlHash? } diff --git a/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/AccountController.cs b/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/AccountController.cs index d1f433e343..57b35024d0 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/AccountController.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/AccountController.cs @@ -34,14 +34,14 @@ namespace Volo.Abp.Account.Web.Areas.Account.Controllers { ValidateLoginInfo(login); - await ReplaceEmailToUsernameOfInputIfNeeds(login).ConfigureAwait(false); + await ReplaceEmailToUsernameOfInputIfNeeds(login); return GetAbpLoginResult(await _signInManager.PasswordSignInAsync( login.UserNameOrEmailAddress, login.Password, login.RememberMe, true - ).ConfigureAwait(false)); + )); } [HttpPost] @@ -50,16 +50,16 @@ namespace Volo.Abp.Account.Web.Areas.Account.Controllers { ValidateLoginInfo(login); - await ReplaceEmailToUsernameOfInputIfNeeds(login).ConfigureAwait(false); + await ReplaceEmailToUsernameOfInputIfNeeds(login); - var identityUser = await _userManager.FindByNameAsync(login.UserNameOrEmailAddress).ConfigureAwait(false); + var identityUser = await _userManager.FindByNameAsync(login.UserNameOrEmailAddress); if (identityUser == null) { return new AbpLoginResult(LoginResultType.InvalidUserNameOrPassword); } - return GetAbpLoginResult(await _signInManager.CheckPasswordSignInAsync(identityUser, login.Password, true).ConfigureAwait(false)); + return GetAbpLoginResult(await _signInManager.CheckPasswordSignInAsync(identityUser, login.Password, true)); } protected virtual async Task ReplaceEmailToUsernameOfInputIfNeeds(UserLoginInfo login) @@ -69,13 +69,13 @@ namespace Volo.Abp.Account.Web.Areas.Account.Controllers return; } - var userByUsername = await _userManager.FindByNameAsync(login.UserNameOrEmailAddress).ConfigureAwait(false); + var userByUsername = await _userManager.FindByNameAsync(login.UserNameOrEmailAddress); if (userByUsername != null) { return; } - var userByEmail = await _userManager.FindByEmailAsync(login.UserNameOrEmailAddress).ConfigureAwait(false); + var userByEmail = await _userManager.FindByEmailAsync(login.UserNameOrEmailAddress); if (userByEmail == null) { return; diff --git a/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/LogoutController.cs b/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/LogoutController.cs index 878f2aa2d5..eb7d1cbc84 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/LogoutController.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/LogoutController.cs @@ -19,7 +19,7 @@ namespace Volo.Abp.Account.Web.Areas.Account.Controllers //todo@alper: this method can be moved to AccountController like "account/logout" public async Task Index(string returnUrl = null) { - await _signInManager.SignOutAsync().ConfigureAwait(false); + await _signInManager.SignOutAsync(); if (returnUrl != null) { diff --git a/modules/account/src/Volo.Abp.Account.Web/FodyWeavers.xml b/modules/account/src/Volo.Abp.Account.Web/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/account/src/Volo.Abp.Account.Web/FodyWeavers.xml +++ b/modules/account/src/Volo.Abp.Account.Web/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs index eb4ad4ad04..dbcfd77499 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs @@ -62,7 +62,7 @@ namespace Volo.Abp.Account.Web.Pages.Account { LoginInput = new LoginInputModel(); - var schemes = await _schemeProvider.GetAllSchemesAsync().ConfigureAwait(false); + var schemes = await _schemeProvider.GetAllSchemesAsync(); var providers = schemes .Where(x => x.DisplayName != null || x.Name.Equals(_accountOptions.WindowsAuthenticationSchemeName, StringComparison.OrdinalIgnoreCase)) @@ -73,7 +73,7 @@ namespace Volo.Abp.Account.Web.Pages.Account }) .ToList(); - EnableLocalLogin = await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin).ConfigureAwait(false); + EnableLocalLogin = await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin); ExternalProviders = providers.ToArray(); @@ -89,18 +89,18 @@ namespace Volo.Abp.Account.Web.Pages.Account [UnitOfWork] //TODO: Will be removed when we implement action filter public virtual async Task OnPostAsync(string action) { - EnableLocalLogin = await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin).ConfigureAwait(false); + EnableLocalLogin = await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin); ValidateModel(); - await ReplaceEmailToUsernameOfInputIfNeeds().ConfigureAwait(false); + await ReplaceEmailToUsernameOfInputIfNeeds(); var result = await SignInManager.PasswordSignInAsync( LoginInput.UserNameOrEmailAddress, LoginInput.Password, LoginInput.RememberMe, true - ).ConfigureAwait(false); + ); if (result.RequiresTwoFactor) { @@ -131,8 +131,8 @@ namespace Volo.Abp.Account.Web.Pages.Account } //TODO: Find a way of getting user's id from the logged in user and do not query it again like that! - var user = await UserManager.FindByNameAsync(LoginInput.UserNameOrEmailAddress).ConfigureAwait(false) ?? - await UserManager.FindByEmailAsync(LoginInput.UserNameOrEmailAddress).ConfigureAwait(false); + var user = await UserManager.FindByNameAsync(LoginInput.UserNameOrEmailAddress) ?? + await UserManager.FindByEmailAsync(LoginInput.UserNameOrEmailAddress); Debug.Assert(user != null, nameof(user) + " != null"); @@ -163,7 +163,7 @@ namespace Volo.Abp.Account.Web.Pages.Account return RedirectToPage("./Login"); } - var loginInfo = await SignInManager.GetExternalLoginInfoAsync().ConfigureAwait(false); + var loginInfo = await SignInManager.GetExternalLoginInfoAsync(); if (loginInfo == null) { Logger.LogWarning("External login info is not available"); @@ -175,7 +175,7 @@ namespace Volo.Abp.Account.Web.Pages.Account loginInfo.ProviderKey, isPersistent: false, bypassTwoFactor: true - ).ConfigureAwait(false); + ); if (result.IsLockedOut) { @@ -190,15 +190,15 @@ namespace Volo.Abp.Account.Web.Pages.Account //TODO: Handle other cases for result! // Get the information about the user from the external login provider - var info = await SignInManager.GetExternalLoginInfoAsync().ConfigureAwait(false); + var info = await SignInManager.GetExternalLoginInfoAsync(); if (info == null) { throw new ApplicationException("Error loading external login information during confirmation."); } - var user = await CreateExternalUserAsync(info).ConfigureAwait(false); + var user = await CreateExternalUserAsync(info); - await SignInManager.SignInAsync(user, false).ConfigureAwait(false); + await SignInManager.SignInAsync(user, false); return RedirectSafely(returnUrl, returnUrlHash); } @@ -208,9 +208,9 @@ namespace Volo.Abp.Account.Web.Pages.Account var user = new IdentityUser(GuidGenerator.Create(), emailAddress, emailAddress, CurrentTenant.Id); - CheckIdentityErrors(await UserManager.CreateAsync(user).ConfigureAwait(false)); - CheckIdentityErrors(await UserManager.SetEmailAsync(user, emailAddress).ConfigureAwait(false)); - CheckIdentityErrors(await UserManager.AddLoginAsync(user, info).ConfigureAwait(false)); + CheckIdentityErrors(await UserManager.CreateAsync(user)); + CheckIdentityErrors(await UserManager.SetEmailAsync(user, emailAddress)); + CheckIdentityErrors(await UserManager.AddLoginAsync(user, info)); return user; } @@ -222,13 +222,13 @@ namespace Volo.Abp.Account.Web.Pages.Account return; } - var userByUsername = await UserManager.FindByNameAsync(LoginInput.UserNameOrEmailAddress).ConfigureAwait(false); + var userByUsername = await UserManager.FindByNameAsync(LoginInput.UserNameOrEmailAddress); if (userByUsername != null) { return; } - var userByEmail = await UserManager.FindByEmailAsync(LoginInput.UserNameOrEmailAddress).ConfigureAwait(false); + var userByEmail = await UserManager.FindByEmailAsync(LoginInput.UserNameOrEmailAddress); if (userByEmail == null) { return; diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml.cs index 7c94f747cd..9fba470929 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml.cs @@ -19,7 +19,7 @@ namespace Volo.Abp.Account.Web.Pages.Account public async Task OnGetAsync() { - var user = await _profileAppService.GetAsync().ConfigureAwait(false); + var user = await _profileAppService.GetAsync(); PersonalSettingsInfoModel = ObjectMapper.Map(user); } diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs index 40b819e0e1..cf9cd7306c 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.Account.Web.Pages.Account public virtual async Task OnGet() { - await CheckSelfRegistrationAsync().ConfigureAwait(false); + await CheckSelfRegistrationAsync(); } [UnitOfWork] //TODO: Will be removed when we implement action filter @@ -31,23 +31,23 @@ namespace Volo.Abp.Account.Web.Pages.Account { ValidateModel(); - await CheckSelfRegistrationAsync().ConfigureAwait(false); + await CheckSelfRegistrationAsync(); var user = new IdentityUser(GuidGenerator.Create(), Input.UserName, Input.EmailAddress, CurrentTenant.Id); - (await UserManager.CreateAsync(user, Input.Password).ConfigureAwait(false)).CheckErrors(); - - await UserManager.SetEmailAsync(user, Input.EmailAddress).ConfigureAwait(false); + (await UserManager.CreateAsync(user, Input.Password)).CheckErrors(); - await SignInManager.SignInAsync(user, isPersistent: false).ConfigureAwait(false); + await UserManager.SetEmailAsync(user, Input.EmailAddress); + + await SignInManager.SignInAsync(user, isPersistent: false); return Redirect(ReturnUrl ?? "/"); //TODO: How to ensure safety? IdentityServer requires it however it should be checked somehow! } protected virtual async Task CheckSelfRegistrationAsync() { - if (!await SettingProvider.IsTrueAsync(AccountSettingNames.IsSelfRegistrationEnabled).ConfigureAwait(false) || - !await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin).ConfigureAwait(false)) + if (!await SettingProvider.IsTrueAsync(AccountSettingNames.IsSelfRegistrationEnabled) || + !await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin)) { throw new UserFriendlyException(L["SelfRegistrationDisabledMessage"]); } diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/SendSecurityCode.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/SendSecurityCode.cshtml.cs index ab8abd4853..5923d8972c 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/SendSecurityCode.cshtml.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/SendSecurityCode.cshtml.cs @@ -14,7 +14,7 @@ namespace Volo.Abp.Account.Web.Pages.Account public async Task OnGetAsync() { - var user = await SignInManager.GetTwoFactorAuthenticationUserAsync().ConfigureAwait(false); + var user = await SignInManager.GetTwoFactorAuthenticationUserAsync(); if (user == null) { return RedirectToPage("./Login"); diff --git a/modules/account/test/Volo.Abp.Account.Application.Tests/FodyWeavers.xml b/modules/account/test/Volo.Abp.Account.Application.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/account/test/Volo.Abp.Account.Application.Tests/FodyWeavers.xml +++ b/modules/account/test/Volo.Abp.Account.Application.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/account/test/Volo.Abp.Account.Application.Tests/Volo/Abp/Account/AccountAppService_Tests.cs b/modules/account/test/Volo.Abp.Account.Application.Tests/Volo/Abp/Account/AccountAppService_Tests.cs index 14d257993c..b11d19b7a6 100644 --- a/modules/account/test/Volo.Abp.Account.Application.Tests/Volo/Abp/Account/AccountAppService_Tests.cs +++ b/modules/account/test/Volo.Abp.Account.Application.Tests/Volo/Abp/Account/AccountAppService_Tests.cs @@ -32,16 +32,16 @@ namespace Volo.Abp.Account AppName = "MVC" }; - await _accountAppService.RegisterAsync(registerDto).ConfigureAwait(false); + await _accountAppService.RegisterAsync(registerDto); var user = await _identityUserRepository.FindByNormalizedUserNameAsync( - _lookupNormalizer.NormalizeName("bob.lee")).ConfigureAwait(false); + _lookupNormalizer.NormalizeName("bob.lee")); user.ShouldNotBeNull(); user.UserName.ShouldBe("bob.lee"); user.Email.ShouldBe("bob.lee@abp.io"); - (await _userManager.CheckPasswordAsync(user, "P@ssW0rd").ConfigureAwait(false)).ShouldBeTrue(); + (await _userManager.CheckPasswordAsync(user, "P@ssW0rd")).ShouldBeTrue(); } } } diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/FodyWeavers.xml b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/FodyWeavers.xml +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/FodyWeavers.xml b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/FodyWeavers.xml +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditingStore.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditingStore.cs index 6674233de6..0fc757b5e9 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditingStore.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditingStore.cs @@ -37,13 +37,13 @@ namespace Volo.Abp.AuditLogging { if (!Options.HideErrors) { - await SaveLogAsync(auditInfo).ConfigureAwait(false); + await SaveLogAsync(auditInfo); return; } try { - await SaveLogAsync(auditInfo).ConfigureAwait(false); + await SaveLogAsync(auditInfo); } catch (Exception ex) { @@ -55,8 +55,8 @@ namespace Volo.Abp.AuditLogging { using (var uow = _unitOfWorkManager.Begin(true)) { - await _auditLogRepository.InsertAsync(new AuditLog(_guidGenerator, auditInfo)).ConfigureAwait(false); - await uow.SaveChangesAsync().ConfigureAwait(false); + await _auditLogRepository.InsertAsync(new AuditLog(_guidGenerator, auditInfo)); + await uow.SaveChangesAsync(); } } } diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/FodyWeavers.xml b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs index 0b68932224..094f946777 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs @@ -54,7 +54,7 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore var auditLogs = await query.OrderBy(sorting ?? "executionTime desc") .PageBy(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); return auditLogs; } @@ -87,7 +87,7 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore httpStatusCode ); - var totalCount = await query.LongCountAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + var totalCount = await query.LongCountAsync(GetCancellationToken(cancellationToken)); return totalCount; } @@ -129,7 +129,7 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore .OrderBy(t => t.ExecutionTime) .GroupBy(t => new { t.ExecutionTime.Date }) .Select(g => new { Day = g.Min(t => t.ExecutionTime), avgExecutionTime = g.Average(t => t.ExecutionDuration) }) - .ToListAsync().ConfigureAwait(false); + .ToListAsync(); return result.ToDictionary(element => element.Day.ClearTime(), element => element.avgExecutionTime); } diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/FodyWeavers.xml b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/FodyWeavers.xml +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs index 51ae55d86a..8beeff86a3 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs @@ -55,7 +55,7 @@ namespace Volo.Abp.AuditLogging.MongoDB return await query.OrderBy(sorting ?? "executionTime desc").As>() .PageBy>(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task GetCountAsync( @@ -87,7 +87,7 @@ namespace Volo.Abp.AuditLogging.MongoDB ); var count = await query.As>() - .LongCountAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .LongCountAsync(GetCancellationToken(cancellationToken)); return count; } @@ -134,7 +134,7 @@ namespace Volo.Abp.AuditLogging.MongoDB t.ExecutionTime.Day }) .Select(g => new { Day = g.Min(t => t.ExecutionTime), avgExecutionTime = g.Average(t => t.ExecutionDuration) }) - .ToListAsync().ConfigureAwait(false); + .ToListAsync(); return result.ToDictionary(element => element.Day.ClearTime(), element => element.avgExecutionTime); } diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/FodyWeavers.xml b/modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/FodyWeavers.xml +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.MongoDB.Tests/FodyWeavers.xml b/modules/audit-logging/test/Volo.Abp.AuditLogging.MongoDB.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/audit-logging/test/Volo.Abp.AuditLogging.MongoDB.Tests/FodyWeavers.xml +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.MongoDB.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/FodyWeavers.xml b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/FodyWeavers.xml +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs index e1878bdcc8..7ea6f4e0db 100644 --- a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs @@ -117,11 +117,11 @@ namespace Volo.Abp.AuditLogging } }; - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)).ConfigureAwait(false); - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)).ConfigureAwait(false); + await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); + await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); //Assert - var logs = await AuditLogRepository.GetListAsync().ConfigureAwait(false); + var logs = await AuditLogRepository.GetListAsync(); logs.ShouldNotBeNull(); logs.ShouldContain(x => x.UserId == userId); logs.ShouldContain(x => x.UserId == userId2); @@ -221,11 +221,11 @@ namespace Volo.Abp.AuditLogging } }; - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)).ConfigureAwait(false); - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)).ConfigureAwait(false); + await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); + await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); //Assert - var logs = await AuditLogRepository.GetCountAsync().ConfigureAwait(false); + var logs = await AuditLogRepository.GetCountAsync(); logs.ShouldBe(2); } @@ -323,12 +323,12 @@ namespace Volo.Abp.AuditLogging } }; - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)).ConfigureAwait(false); - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)).ConfigureAwait(false); + await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); + await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); //Assert var date = DateTime.Parse("2020-01-01"); - var results = await AuditLogRepository.GetAverageExecutionDurationPerDayAsync(date, date).ConfigureAwait(false); + var results = await AuditLogRepository.GetAverageExecutionDurationPerDayAsync(date, date); results.Count.ShouldBe(1); results.Values.First().ShouldBe(50); // (45 + 55) / 2 } diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditStore_Basic_Tests.cs b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditStore_Basic_Tests.cs index 9744930c09..05dc829440 100644 --- a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditStore_Basic_Tests.cs +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditStore_Basic_Tests.cs @@ -64,7 +64,7 @@ namespace Volo.Abp.AuditLogging }; //Act - await _auditingStore.SaveAsync(auditLog).ConfigureAwait(false); + await _auditingStore.SaveAsync(auditLog); //Assert @@ -170,14 +170,14 @@ namespace Volo.Abp.AuditLogging } }; - await _auditingStore.SaveAsync(log1).ConfigureAwait(false); - await _auditingStore.SaveAsync(log2).ConfigureAwait(false); + await _auditingStore.SaveAsync(log1); + await _auditingStore.SaveAsync(log2); - var allLogsCount = await _auditLogRepository.GetCountAsync().ConfigureAwait(false); + var allLogsCount = await _auditLogRepository.GetCountAsync(); - var onlyLog1QueryResult = await _auditLogRepository.GetListAsync(includeDetails: true, userName: "Douglas").ConfigureAwait(false); + var onlyLog1QueryResult = await _auditLogRepository.GetListAsync(includeDetails: true, userName: "Douglas"); - var onlyLog2QueryResult = await _auditLogRepository.GetListAsync(includeDetails: true, httpStatusCode: HttpStatusCode.BadGateway).ConfigureAwait(false); + var onlyLog2QueryResult = await _auditLogRepository.GetListAsync(includeDetails: true, httpStatusCode: HttpStatusCode.BadGateway); allLogsCount.ShouldBe(2); diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/FodyWeavers.xml b/modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/FodyWeavers.xml +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/Volo/Abp/AuditLogging/MultiTenantAuditLog_Tests.cs b/modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/Volo/Abp/AuditLogging/MultiTenantAuditLog_Tests.cs index 04c885be20..6e92bc6f7f 100644 --- a/modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/Volo/Abp/AuditLogging/MultiTenantAuditLog_Tests.cs +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/Volo/Abp/AuditLogging/MultiTenantAuditLog_Tests.cs @@ -59,12 +59,12 @@ namespace Volo.Abp.AuditLogging } ); - await scope.SaveAsync().ConfigureAwait(false); + await scope.SaveAsync(); } //Assert - var auditLogs = await _auditLogRepository.GetListAsync(applicationName: applicationName, includeDetails: true).ConfigureAwait(false); + var auditLogs = await _auditLogRepository.GetListAsync(applicationName: applicationName, includeDetails: true); auditLogs.Count.ShouldBe(1); var auditLog = auditLogs.First(); auditLog.EntityChanges.ShouldNotBeNull(); diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/FodyWeavers.xml b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/FodyWeavers.xml +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/FodyWeavers.xml b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/FodyWeavers.xml +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/FodyWeavers.xml b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/FodyWeavers.xml +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/Jobs/SampleJobCreator.cs b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/Jobs/SampleJobCreator.cs index 3c05c4abd3..b131c5943d 100644 --- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/Jobs/SampleJobCreator.cs +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/Jobs/SampleJobCreator.cs @@ -20,10 +20,10 @@ namespace Volo.Abp.BackgroundJobs.DemoApp.Shared.Jobs public async Task CreateJobsAsync() { - await _backgroundJobManager.EnqueueAsync(new WriteToConsoleGreenJobArgs { Value = "test 1 (green)" }).ConfigureAwait(false); - await _backgroundJobManager.EnqueueAsync(new WriteToConsoleGreenJobArgs { Value = "test 2 (green)" }).ConfigureAwait(false); - await _backgroundJobManager.EnqueueAsync(new WriteToConsoleYellowJobArgs { Value = "test 1 (yellow)" }).ConfigureAwait(false); - await _backgroundJobManager.EnqueueAsync(new WriteToConsoleYellowJobArgs { Value = "test 2 (yellow)" }).ConfigureAwait(false); + await _backgroundJobManager.EnqueueAsync(new WriteToConsoleGreenJobArgs { Value = "test 1 (green)" }); + await _backgroundJobManager.EnqueueAsync(new WriteToConsoleGreenJobArgs { Value = "test 2 (green)" }); + await _backgroundJobManager.EnqueueAsync(new WriteToConsoleYellowJobArgs { Value = "test 1 (yellow)" }); + await _backgroundJobManager.EnqueueAsync(new WriteToConsoleYellowJobArgs { Value = "test 2 (yellow)" }); } } } diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/FodyWeavers.xml b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/FodyWeavers.xml +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/FodyWeavers.xml b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/FodyWeavers.xml +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/FodyWeavers.xml b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/FodyWeavers.xml +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/BackgroundJobStore.cs b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/BackgroundJobStore.cs index 2fe3a0fdda..b8d30b6940 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/BackgroundJobStore.cs +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/BackgroundJobStore.cs @@ -24,38 +24,38 @@ namespace Volo.Abp.BackgroundJobs { return ObjectMapper.Map( await BackgroundJobRepository.FindAsync(jobId) -.ConfigureAwait(false)); + ); } public virtual async Task InsertAsync(BackgroundJobInfo jobInfo) { await BackgroundJobRepository.InsertAsync( ObjectMapper.Map(jobInfo) - ).ConfigureAwait(false); + ); } public virtual async Task> GetWaitingJobsAsync(int maxResultCount) { return ObjectMapper.Map, List>( await BackgroundJobRepository.GetWaitingListAsync(maxResultCount) -.ConfigureAwait(false)); + ); } public virtual async Task DeleteAsync(Guid jobId) { - await BackgroundJobRepository.DeleteAsync(jobId).ConfigureAwait(false); + await BackgroundJobRepository.DeleteAsync(jobId); } public virtual async Task UpdateAsync(BackgroundJobInfo jobInfo) { - var backgroundJobRecord = await BackgroundJobRepository.FindAsync(jobInfo.Id).ConfigureAwait(false); + var backgroundJobRecord = await BackgroundJobRepository.FindAsync(jobInfo.Id); if (backgroundJobRecord == null) { return; } ObjectMapper.Map(jobInfo, backgroundJobRecord); - await BackgroundJobRepository.UpdateAsync(backgroundJobRecord).ConfigureAwait(false); + await BackgroundJobRepository.UpdateAsync(backgroundJobRecord); } } } diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/FodyWeavers.xml b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/EfCoreBackgroundJobRepository.cs b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/EfCoreBackgroundJobRepository.cs index 22b8e6ab46..8c786c9f37 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/EfCoreBackgroundJobRepository.cs +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/EfCoreBackgroundJobRepository.cs @@ -24,7 +24,7 @@ namespace Volo.Abp.BackgroundJobs.EntityFrameworkCore public async Task> GetWaitingListAsync(int maxResultCount) { return await GetWaitingListQuery(maxResultCount) - .ToListAsync().ConfigureAwait(false); + .ToListAsync(); } private IQueryable GetWaitingListQuery(int maxResultCount) diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/FodyWeavers.xml b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/FodyWeavers.xml +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo/Abp/BackgroundJobs/MongoDB/MongoBackgroundJobRepository.cs b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo/Abp/BackgroundJobs/MongoDB/MongoBackgroundJobRepository.cs index cd266eeac4..33903c1e9f 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo/Abp/BackgroundJobs/MongoDB/MongoBackgroundJobRepository.cs +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo/Abp/BackgroundJobs/MongoDB/MongoBackgroundJobRepository.cs @@ -24,7 +24,7 @@ namespace Volo.Abp.BackgroundJobs.MongoDB public async Task> GetWaitingListAsync(int maxResultCount) { return await GetWaitingListQuery(maxResultCount) - .ToListAsync().ConfigureAwait(false); + .ToListAsync(); } private IMongoQueryable GetWaitingListQuery(int maxResultCount) diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/FodyWeavers.xml b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/FodyWeavers.xml +++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/Volo/Abp/BackgroundJobs/BackgroundJobStore_Tests.cs b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/Volo/Abp/BackgroundJobs/BackgroundJobStore_Tests.cs index 94b9375d83..caa9a3c445 100644 --- a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/Volo/Abp/BackgroundJobs/BackgroundJobStore_Tests.cs +++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/Volo/Abp/BackgroundJobs/BackgroundJobStore_Tests.cs @@ -26,9 +26,9 @@ namespace Volo.Abp.BackgroundJobs await _backgroundJobStore.InsertAsync( jobInfo - ).ConfigureAwait(false); + ); - var jobInfo2 = await _backgroundJobStore.FindAsync(jobInfo.Id).ConfigureAwait(false); + var jobInfo2 = await _backgroundJobStore.FindAsync(jobInfo.Id); jobInfo2.ShouldNotBeNull(); jobInfo2.Id.ShouldBe(jobInfo.Id); jobInfo2.JobArgs.ShouldBe(jobInfo.JobArgs); diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/FodyWeavers.xml b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/FodyWeavers.xml +++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.MongoDB.Tests/FodyWeavers.xml b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.MongoDB.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.MongoDB.Tests/FodyWeavers.xml +++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.MongoDB.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/FodyWeavers.xml b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/FodyWeavers.xml +++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/Volo/Abp/BackgroundJobs/BackgroundJobRepository_Tests.cs b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/Volo/Abp/BackgroundJobs/BackgroundJobRepository_Tests.cs index 2187db533e..59a2709edd 100644 --- a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/Volo/Abp/BackgroundJobs/BackgroundJobRepository_Tests.cs +++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/Volo/Abp/BackgroundJobs/BackgroundJobRepository_Tests.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.BackgroundJobs [InlineData(5)] public async Task GetWaitingListAsync(int maxResultCount) { - var backgroundJobs = await _backgroundJobRepository.GetWaitingListAsync(maxResultCount).ConfigureAwait(false); + var backgroundJobs = await _backgroundJobRepository.GetWaitingListAsync(maxResultCount); backgroundJobs.Count.ShouldBeGreaterThan(0); backgroundJobs.Count.ShouldBeLessThanOrEqualTo(maxResultCount); diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/Volo/Abp/BackgroundJobs/BackgroundJobsTestDataBuilder.cs b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/Volo/Abp/BackgroundJobs/BackgroundJobsTestDataBuilder.cs index 90ec92ea35..16bcc667f5 100644 --- a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/Volo/Abp/BackgroundJobs/BackgroundJobsTestDataBuilder.cs +++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/Volo/Abp/BackgroundJobs/BackgroundJobsTestDataBuilder.cs @@ -35,7 +35,7 @@ namespace Volo.Abp.BackgroundJobs CreationTime = _clock.Now.Subtract(TimeSpan.FromMinutes(2)), TryCount = 0 } - ).ConfigureAwait(false); + ); await _backgroundJobRepository.InsertAsync( new BackgroundJobRecord(_testData.JobId2) @@ -49,7 +49,7 @@ namespace Volo.Abp.BackgroundJobs CreationTime = _clock.Now.Subtract(TimeSpan.FromDays(2)), TryCount = 3 } - ).ConfigureAwait(false); + ); await _backgroundJobRepository.InsertAsync( new BackgroundJobRecord(_testData.JobId3) @@ -63,7 +63,7 @@ namespace Volo.Abp.BackgroundJobs CreationTime = _clock.Now.Subtract(TimeSpan.FromMinutes(90)), TryCount = 2 } - ).ConfigureAwait(false); + ); } } } \ No newline at end of file diff --git a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/FodyWeavers.xml b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/FodyWeavers.xml b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/FodyWeavers.xml +++ b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/blogging/app/Volo.BloggingTestApp/FodyWeavers.xml b/modules/blogging/app/Volo.BloggingTestApp/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/FodyWeavers.xml +++ b/modules/blogging/app/Volo.BloggingTestApp/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.Application.Contracts/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Application/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.Application/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/blogging/src/Volo.Blogging.Application/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.Application/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.Domain.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/blogging/src/Volo.Blogging.Domain.Shared/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Domain/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.Domain/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/blogging/src/Volo.Blogging.Domain/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.HttpApi.Client/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.HttpApi.Client/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/blogging/src/Volo.Blogging.HttpApi.Client/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.HttpApi/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.HttpApi/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/blogging/src/Volo.Blogging.HttpApi/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.MongoDB/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.MongoDB/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/blogging/src/Volo.Blogging.MongoDB/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Web/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.Web/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/blogging/src/Volo.Blogging.Web/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.Web/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/blogging/test/Volo.Blogging.Application.Tests/FodyWeavers.xml b/modules/blogging/test/Volo.Blogging.Application.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/blogging/test/Volo.Blogging.Application.Tests/FodyWeavers.xml +++ b/modules/blogging/test/Volo.Blogging.Application.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/blogging/test/Volo.Blogging.Domain.Tests/FodyWeavers.xml b/modules/blogging/test/Volo.Blogging.Domain.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/blogging/test/Volo.Blogging.Domain.Tests/FodyWeavers.xml +++ b/modules/blogging/test/Volo.Blogging.Domain.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/FodyWeavers.xml b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/FodyWeavers.xml +++ b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/blogging/test/Volo.Blogging.MongoDB.Tests/FodyWeavers.xml b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/blogging/test/Volo.Blogging.MongoDB.Tests/FodyWeavers.xml +++ b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/blogging/test/Volo.Blogging.TestBase/FodyWeavers.xml b/modules/blogging/test/Volo.Blogging.TestBase/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/blogging/test/Volo.Blogging.TestBase/FodyWeavers.xml +++ b/modules/blogging/test/Volo.Blogging.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/FodyWeavers.xml b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/FodyWeavers.xml +++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/client-simulation/src/Volo.ClientSimulation.Web/FodyWeavers.xml b/modules/client-simulation/src/Volo.ClientSimulation.Web/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/client-simulation/src/Volo.ClientSimulation.Web/FodyWeavers.xml +++ b/modules/client-simulation/src/Volo.ClientSimulation.Web/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/client-simulation/src/Volo.ClientSimulation/FodyWeavers.xml b/modules/client-simulation/src/Volo.ClientSimulation/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/client-simulation/src/Volo.ClientSimulation/FodyWeavers.xml +++ b/modules/client-simulation/src/Volo.ClientSimulation/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.EntityFrameworkCore/FodyWeavers.xml b/modules/docs/app/VoloDocs.EntityFrameworkCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/app/VoloDocs.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/docs/app/VoloDocs.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Migrator/FodyWeavers.xml b/modules/docs/app/VoloDocs.Migrator/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/app/VoloDocs.Migrator/FodyWeavers.xml +++ b/modules/docs/app/VoloDocs.Migrator/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/FodyWeavers.xml b/modules/docs/app/VoloDocs.Web/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/app/VoloDocs.Web/FodyWeavers.xml +++ b/modules/docs/app/VoloDocs.Web/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Admin.Application/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.Admin.Application/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Admin.HttpApi/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/src/Volo.Docs.Admin.HttpApi/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.Admin.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Web/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Admin.Web/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.Admin.Web/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Application.Contracts/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/src/Volo.Docs.Application.Contracts/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Application/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Application/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/src/Volo.Docs.Application/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.Application/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Domain.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/src/Volo.Docs.Domain.Shared/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Domain/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/src/Volo.Docs.Domain/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/FodyWeavers.xml b/modules/docs/src/Volo.Docs.EntityFrameworkCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.HttpApi.Client/FodyWeavers.xml b/modules/docs/src/Volo.Docs.HttpApi.Client/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/src/Volo.Docs.HttpApi.Client/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.HttpApi/FodyWeavers.xml b/modules/docs/src/Volo.Docs.HttpApi/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/src/Volo.Docs.HttpApi/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.MongoDB/FodyWeavers.xml b/modules/docs/src/Volo.Docs.MongoDB/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/src/Volo.Docs.MongoDB/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Web/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/src/Volo.Docs.Web/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.Web/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/test/Volo.Docs.Admin.Application.Tests/FodyWeavers.xml b/modules/docs/test/Volo.Docs.Admin.Application.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/test/Volo.Docs.Admin.Application.Tests/FodyWeavers.xml +++ b/modules/docs/test/Volo.Docs.Admin.Application.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/test/Volo.Docs.Application.Tests/FodyWeavers.xml b/modules/docs/test/Volo.Docs.Application.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/test/Volo.Docs.Application.Tests/FodyWeavers.xml +++ b/modules/docs/test/Volo.Docs.Application.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/test/Volo.Docs.Domain.Tests/FodyWeavers.xml b/modules/docs/test/Volo.Docs.Domain.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/test/Volo.Docs.Domain.Tests/FodyWeavers.xml +++ b/modules/docs/test/Volo.Docs.Domain.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/FodyWeavers.xml b/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/FodyWeavers.xml +++ b/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/test/Volo.Docs.MongoDB.Tests/FodyWeavers.xml b/modules/docs/test/Volo.Docs.MongoDB.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/test/Volo.Docs.MongoDB.Tests/FodyWeavers.xml +++ b/modules/docs/test/Volo.Docs.MongoDB.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/docs/test/Volo.Docs.TestBase/FodyWeavers.xml b/modules/docs/test/Volo.Docs.TestBase/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/docs/test/Volo.Docs.TestBase/FodyWeavers.xml +++ b/modules/docs/test/Volo.Docs.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/FodyWeavers.xml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/FodyWeavers.xml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs index 2290e79f00..097ea7ffa0 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs @@ -34,7 +34,7 @@ namespace Volo.Abp.FeatureManagement public virtual async Task GetAsync([NotNull] string providerName, [NotNull] string providerKey) { - await CheckProviderPolicy(providerName).ConfigureAwait(false); + await CheckProviderPolicy(providerName); var featureDefinitions = _featureDefinitionManager.GetAll(); var features = new List(); @@ -48,7 +48,7 @@ namespace Volo.Abp.FeatureManagement ValueType = featureDefinition.ValueType, Description = featureDefinition.Description?.Localize(_stringLocalizerFactory), ParentName = featureDefinition.Parent?.Name, - Value = await _featureManager.GetOrNullAsync(featureDefinition.Name, providerName, providerKey).ConfigureAwait(false) + Value = await _featureManager.GetOrNullAsync(featureDefinition.Name, providerName, providerKey) }); } @@ -59,11 +59,11 @@ namespace Volo.Abp.FeatureManagement public virtual async Task UpdateAsync([NotNull] string providerName, [NotNull] string providerKey, UpdateFeaturesDto input) { - await CheckProviderPolicy(providerName).ConfigureAwait(false); + await CheckProviderPolicy(providerName); foreach (var feature in input.Features) { - await _featureManager.SetAsync(feature.Name, feature.Value, providerName, providerKey).ConfigureAwait(false); + await _featureManager.SetAsync(feature.Name, feature.Value, providerName, providerKey); } } @@ -88,7 +88,7 @@ namespace Volo.Abp.FeatureManagement throw new AbpException($"No policy defined to get/set permissions for the provider '{policyName}'. Use {nameof(FeatureManagementOptions)} to map the policy."); } - await AuthorizationService.CheckAsync(policyName).ConfigureAwait(false); + await AuthorizationService.CheckAsync(policyName); } } } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/FodyWeavers.xml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/FodyWeavers.xml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManagementProvider.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManagementProvider.cs index 58353321fa..1d0c59773b 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManagementProvider.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManagementProvider.cs @@ -16,17 +16,17 @@ namespace Volo.Abp.FeatureManagement public async Task GetOrNullAsync(FeatureDefinition feature, string providerKey) { - return await Store.GetOrNullAsync(feature.Name, Name, NormalizeProviderKey(providerKey)).ConfigureAwait(false); + return await Store.GetOrNullAsync(feature.Name, Name, NormalizeProviderKey(providerKey)); } public virtual async Task SetAsync(FeatureDefinition feature, string value, string providerKey) { - await Store.SetAsync(feature.Name, value, Name, NormalizeProviderKey(providerKey)).ConfigureAwait(false); + await Store.SetAsync(feature.Name, value, Name, NormalizeProviderKey(providerKey)); } public virtual async Task ClearAsync(FeatureDefinition feature, string providerKey) { - await Store.DeleteAsync(feature.Name, Name, NormalizeProviderKey(providerKey)).ConfigureAwait(false); + await Store.DeleteAsync(feature.Name, Name, NormalizeProviderKey(providerKey)); } protected virtual string NormalizeProviderKey(string providerKey) diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManagementStore.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManagementStore.cs index 2970296381..94c4d48067 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManagementStore.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManagementStore.cs @@ -23,52 +23,52 @@ namespace Volo.Abp.FeatureManagement public async Task GetOrNullAsync(string name, string providerName, string providerKey) { - var cacheItem = await GetCacheItemAsync(name, providerName, providerKey).ConfigureAwait(false); + var cacheItem = await GetCacheItemAsync(name, providerName, providerKey); return cacheItem.Value; } public async Task SetAsync(string name, string value, string providerName, string providerKey) { - var featureValue = await FeatureValueRepository.FindAsync(name, providerName, providerKey).ConfigureAwait(false); + var featureValue = await FeatureValueRepository.FindAsync(name, providerName, providerKey); if (featureValue == null) { featureValue = new FeatureValue(GuidGenerator.Create(), name, value, providerName, providerKey); - await FeatureValueRepository.InsertAsync(featureValue).ConfigureAwait(false); + await FeatureValueRepository.InsertAsync(featureValue); } else { featureValue.Value = value; - await FeatureValueRepository.UpdateAsync(featureValue).ConfigureAwait(false); + await FeatureValueRepository.UpdateAsync(featureValue); } } public async Task DeleteAsync(string name, string providerName, string providerKey) { - var featureValue = await FeatureValueRepository.FindAsync(name, providerName, providerKey).ConfigureAwait(false); + var featureValue = await FeatureValueRepository.FindAsync(name, providerName, providerKey); if (featureValue != null) { - await FeatureValueRepository.DeleteAsync(featureValue).ConfigureAwait(false); + await FeatureValueRepository.DeleteAsync(featureValue); } } protected virtual async Task GetCacheItemAsync(string name, string providerName, string providerKey) { var cacheKey = CalculateCacheKey(name, providerName, providerKey); - var cacheItem = await Cache.GetAsync(cacheKey).ConfigureAwait(false); + var cacheItem = await Cache.GetAsync(cacheKey); if (cacheItem != null) { return cacheItem; } - var featureValue = await FeatureValueRepository.FindAsync(name, providerName, providerKey).ConfigureAwait(false); + var featureValue = await FeatureValueRepository.FindAsync(name, providerName, providerKey); cacheItem = new FeatureValueCacheItem(featureValue?.Value); await Cache.SetAsync( cacheKey, cacheItem - ).ConfigureAwait(false); + ); return cacheItem; } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs index 8249166f20..06ca345bf6 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs @@ -82,7 +82,7 @@ namespace Volo.Abp.FeatureManagement var providerValue = await provider.GetOrNullAsync( feature, provider.Name == providerName ? providerKey : null - ).ConfigureAwait(false); + ); if (providerValue != null) { @@ -123,7 +123,7 @@ namespace Volo.Abp.FeatureManagement if (providers.Count > 1 && !forceToSet && value != null) { - var fallbackValue = await GetOrNullInternalAsync(name, providers[1].Name, null).ConfigureAwait(false); + var fallbackValue = await GetOrNullInternalAsync(name, providers[1].Name, null); if (fallbackValue == value) { //Clear the value if it's same as it's fallback value @@ -139,14 +139,14 @@ namespace Volo.Abp.FeatureManagement { foreach (var provider in providers) { - await provider.ClearAsync(feature, providerKey).ConfigureAwait(false); + await provider.ClearAsync(feature, providerKey); } } else { foreach (var provider in providers) { - await provider.SetAsync(feature, value, providerKey).ConfigureAwait(false); + await provider.SetAsync(feature, value, providerKey); } } } @@ -172,7 +172,7 @@ namespace Volo.Abp.FeatureManagement value = await provider.GetOrNullAsync( feature, provider.Name == providerName ? providerKey : null - ).ConfigureAwait(false); + ); if (value != null) { diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureValueCacheItemInvalidator.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureValueCacheItemInvalidator.cs index 1d13d46e0a..63e207b1e7 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureValueCacheItemInvalidator.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureValueCacheItemInvalidator.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.FeatureManagement eventData.Entity.ProviderKey ); - await Cache.RemoveAsync(cacheKey).ConfigureAwait(false); + await Cache.RemoveAsync(cacheKey); } protected virtual string CalculateCacheKey(string name, string providerName, string providerKey) diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/EfCoreFeatureValueRepository.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/EfCoreFeatureValueRepository.cs index 87251ff366..9545ac36b4 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/EfCoreFeatureValueRepository.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/EfCoreFeatureValueRepository.cs @@ -20,7 +20,7 @@ namespace Volo.Abp.FeatureManagement.EntityFrameworkCore return await DbSet .FirstOrDefaultAsync( s => s.Name == name && s.ProviderName == providerName && s.ProviderKey == providerKey - ).ConfigureAwait(false); + ); } public async Task> GetListAsync(string providerName, string providerKey) @@ -28,7 +28,7 @@ namespace Volo.Abp.FeatureManagement.EntityFrameworkCore return await DbSet .Where( s => s.ProviderName == providerName && s.ProviderKey == providerKey - ).ToListAsync().ConfigureAwait(false); + ).ToListAsync(); } } } \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/FodyWeavers.xml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/FodyWeavers.xml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/FodyWeavers.xml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/MongoFeatureValueRepository.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/MongoFeatureValueRepository.cs index 62e112b764..f57d125dce 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/MongoFeatureValueRepository.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/MongoFeatureValueRepository.cs @@ -19,14 +19,14 @@ namespace Volo.Abp.FeatureManagement.MongoDB public async Task FindAsync(string name, string providerName, string providerKey) { return await GetMongoQueryable() - .FirstOrDefaultAsync(s => s.Name == name && s.ProviderName == providerName && s.ProviderKey == providerKey).ConfigureAwait(false); + .FirstOrDefaultAsync(s => s.Name == name && s.ProviderName == providerName && s.ProviderKey == providerKey); } public async Task> GetListAsync(string providerName, string providerKey) { return await GetMongoQueryable() .Where(s => s.ProviderName == providerName && s.ProviderKey == providerKey) - .ToListAsync().ConfigureAwait(false); + .ToListAsync(); } } } \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/FodyWeavers.xml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml.cs index 4360e0d72c..d9e0d7b2c4 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml.cs @@ -36,7 +36,7 @@ namespace Volo.Abp.FeatureManagement.Web.Pages.FeatureManagement public async Task OnGetAsync() { - FeatureListDto = await _featureAppService.GetAsync(ProviderName, ProviderKey).ConfigureAwait(false); + FeatureListDto = await _featureAppService.GetAsync(ProviderName, ProviderKey); } public async Task OnPostAsync() @@ -50,7 +50,7 @@ namespace Volo.Abp.FeatureManagement.Web.Pages.FeatureManagement }).ToList() }; - await _featureAppService.UpdateAsync(ProviderName, ProviderKey, features).ConfigureAwait(false); + await _featureAppService.UpdateAsync(ProviderName, ProviderKey, features); return NoContent(); } diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/FodyWeavers.xml b/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/FodyWeavers.xml +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo/Abp/FeatureManagement/FeatureAppService_Tests.cs b/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo/Abp/FeatureManagement/FeatureAppService_Tests.cs index 8987a232b0..b86e6be013 100644 --- a/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo/Abp/FeatureManagement/FeatureAppService_Tests.cs +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo/Abp/FeatureManagement/FeatureAppService_Tests.cs @@ -39,7 +39,7 @@ namespace Volo.Abp.FeatureManagement Login(_testData.User1Id); var featureList = await _featureAppService.GetAsync(EditionFeatureValueProvider.ProviderName, - TestEditionIds.Regular.ToString()).ConfigureAwait(false); + TestEditionIds.Regular.ToString()); featureList.ShouldNotBeNull(); featureList.Features.ShouldContain(feature => feature.Name == TestFeatureDefinitionProvider.SocialLogins); @@ -61,10 +61,10 @@ namespace Volo.Abp.FeatureManagement Value = false.ToString().ToLowerInvariant() } } - }).ConfigureAwait(false); + }); (await _featureAppService.GetAsync(EditionFeatureValueProvider.ProviderName, - TestEditionIds.Regular.ToString()).ConfigureAwait(false)).Features.Any(x => + TestEditionIds.Regular.ToString())).Features.Any(x => x.Name == TestFeatureDefinitionProvider.SocialLogins && x.Value == false.ToString().ToLowerInvariant()) .ShouldBeTrue(); diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/FodyWeavers.xml b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/FodyWeavers.xml +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/FeatureManager_Tests.cs b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/FeatureManager_Tests.cs index ac75fdd86e..d86bcfaa48 100644 --- a/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/FeatureManager_Tests.cs +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/FeatureManager_Tests.cs @@ -27,63 +27,63 @@ namespace Volo.Abp.FeatureManagement (await _featureManager.GetOrNullDefaultAsync( TestFeatureDefinitionProvider.SocialLogins - ).ConfigureAwait(false)).ShouldBeNull(); + )).ShouldBeNull(); (await _featureManager.GetOrNullDefaultAsync( TestFeatureDefinitionProvider.DailyAnalysis - ).ConfigureAwait(false)).ShouldBe(false.ToString().ToLowerInvariant()); + )).ShouldBe(false.ToString().ToLowerInvariant()); (await _featureManager.GetOrNullDefaultAsync( TestFeatureDefinitionProvider.ProjectCount - ).ConfigureAwait(false)).ShouldBe("1"); + )).ShouldBe("1"); (await _featureManager.GetOrNullDefaultAsync( TestFeatureDefinitionProvider.BackupCount - ).ConfigureAwait(false)).ShouldBe("0"); + )).ShouldBe("0"); //"Enterprise" edition values (await _featureManager.GetOrNullForEditionAsync( TestFeatureDefinitionProvider.SocialLogins, TestEditionIds.Enterprise - ).ConfigureAwait(false)).ShouldBe(true.ToString().ToLowerInvariant()); + )).ShouldBe(true.ToString().ToLowerInvariant()); (await _featureManager.GetOrNullForEditionAsync( TestFeatureDefinitionProvider.DailyAnalysis, TestEditionIds.Enterprise - ).ConfigureAwait(false)).ShouldBe(false.ToString().ToLowerInvariant()); + )).ShouldBe(false.ToString().ToLowerInvariant()); (await _featureManager.GetOrNullForEditionAsync( TestFeatureDefinitionProvider.ProjectCount, TestEditionIds.Enterprise - ).ConfigureAwait(false)).ShouldBe("3"); + )).ShouldBe("3"); (await _featureManager.GetOrNullForEditionAsync( TestFeatureDefinitionProvider.BackupCount, TestEditionIds.Enterprise - ).ConfigureAwait(false)).ShouldBe("5"); + )).ShouldBe("5"); //"Ultimate" edition values (await _featureManager.GetOrNullForEditionAsync( TestFeatureDefinitionProvider.SocialLogins, TestEditionIds.Ultimate - ).ConfigureAwait(false)).ShouldBe(true.ToString().ToLowerInvariant()); + )).ShouldBe(true.ToString().ToLowerInvariant()); (await _featureManager.GetOrNullForEditionAsync( TestFeatureDefinitionProvider.DailyAnalysis, TestEditionIds.Ultimate - ).ConfigureAwait(false)).ShouldBe(true.ToString().ToLowerInvariant()); + )).ShouldBe(true.ToString().ToLowerInvariant()); (await _featureManager.GetOrNullForEditionAsync( TestFeatureDefinitionProvider.ProjectCount, TestEditionIds.Ultimate - ).ConfigureAwait(false)).ShouldBe("10"); + )).ShouldBe("10"); (await _featureManager.GetOrNullForEditionAsync( TestFeatureDefinitionProvider.BackupCount, TestEditionIds.Ultimate - ).ConfigureAwait(false)).ShouldBe("10"); + )).ShouldBe("10"); } [Fact] diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/FeatureValueCacheItemInvalidator_Tests.cs b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/FeatureValueCacheItemInvalidator_Tests.cs index 7b3aa9f256..890e94663b 100644 --- a/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/FeatureValueCacheItemInvalidator_Tests.cs +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/FeatureValueCacheItemInvalidator_Tests.cs @@ -30,17 +30,17 @@ namespace Volo.Abp.FeatureManagement TestFeatureDefinitionProvider.SocialLogins, EditionFeatureValueProvider.ProviderName, TestEditionIds.Regular.ToString() - ).ConfigureAwait(false) + ) ).ShouldNotBeNull(); var feature = await _featureValueRepository.FindAsync( TestFeatureDefinitionProvider.SocialLogins, EditionFeatureValueProvider.ProviderName, TestEditionIds.Regular.ToString() - ).ConfigureAwait(false); + ); // Act - await _featureValueRepository.DeleteAsync(feature).ConfigureAwait(false); + await _featureValueRepository.DeleteAsync(feature); // Assert (await _cache.GetAsync( @@ -49,7 +49,7 @@ namespace Volo.Abp.FeatureManagement EditionFeatureValueProvider.ProviderName, TestEditionIds.Regular.ToString() ) - ).ConfigureAwait(false) + ) ).ShouldBeNull(); } diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/FodyWeavers.xml b/modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/FodyWeavers.xml +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.MongoDB.Tests/FodyWeavers.xml b/modules/feature-management/test/Volo.Abp.FeatureManagement.MongoDB.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/feature-management/test/Volo.Abp.FeatureManagement.MongoDB.Tests/FodyWeavers.xml +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.MongoDB.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/FodyWeavers.xml b/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/FodyWeavers.xml +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo/Abp/FeatureManagement/FeatureManagementStore_Tests.cs b/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo/Abp/FeatureManagement/FeatureManagementStore_Tests.cs index 500e28233c..a6f040dde3 100644 --- a/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo/Abp/FeatureManagement/FeatureManagementStore_Tests.cs +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo/Abp/FeatureManagement/FeatureManagementStore_Tests.cs @@ -27,11 +27,11 @@ namespace Volo.Abp.FeatureManagement // Act (await FeatureManagementStore.GetOrNullAsync(Guid.NewGuid().ToString(), EditionFeatureValueProvider.ProviderName, - TestEditionIds.Regular.ToString()).ConfigureAwait(false)).ShouldBeNull(); + TestEditionIds.Regular.ToString())).ShouldBeNull(); (await FeatureManagementStore.GetOrNullAsync(TestFeatureDefinitionProvider.SocialLogins, EditionFeatureValueProvider.ProviderName, - TestEditionIds.Regular.ToString()).ConfigureAwait(false)).ShouldNotBeNull(); + TestEditionIds.Regular.ToString())).ShouldNotBeNull(); } [Fact] @@ -40,17 +40,17 @@ namespace Volo.Abp.FeatureManagement // Arrange (await FeatureManagementStore.GetOrNullAsync(TestFeatureDefinitionProvider.SocialLogins, EditionFeatureValueProvider.ProviderName, - TestEditionIds.Regular.ToString()).ConfigureAwait(false)).ShouldNotBeNull(); + TestEditionIds.Regular.ToString())).ShouldNotBeNull(); // Act await FeatureManagementStore.DeleteAsync(TestFeatureDefinitionProvider.SocialLogins, EditionFeatureValueProvider.ProviderName, - TestEditionIds.Regular.ToString()).ConfigureAwait(false); + TestEditionIds.Regular.ToString()); // Assert (await FeatureManagementStore.GetOrNullAsync(TestFeatureDefinitionProvider.SocialLogins, EditionFeatureValueProvider.ProviderName, - TestEditionIds.Regular.ToString()).ConfigureAwait(false)).ShouldBeNull(); + TestEditionIds.Regular.ToString())).ShouldBeNull(); } [Fact] @@ -59,18 +59,18 @@ namespace Volo.Abp.FeatureManagement // Arrange (await FeatureValueRepository.FindAsync(TestFeatureDefinitionProvider.SocialLogins, EditionFeatureValueProvider.ProviderName, - TestEditionIds.Regular.ToString()).ConfigureAwait(false)).Value.ShouldBe(true.ToString().ToLowerInvariant()); + TestEditionIds.Regular.ToString())).Value.ShouldBe(true.ToString().ToLowerInvariant()); // Act await FeatureManagementStore.SetAsync(TestFeatureDefinitionProvider.SocialLogins, false.ToString().ToUpperInvariant(), EditionFeatureValueProvider.ProviderName, - TestEditionIds.Regular.ToString()).ConfigureAwait(false); + TestEditionIds.Regular.ToString()); // Assert (await FeatureValueRepository.FindAsync(TestFeatureDefinitionProvider.SocialLogins, EditionFeatureValueProvider.ProviderName, - TestEditionIds.Regular.ToString()).ConfigureAwait(false)).Value.ShouldBe(false.ToString().ToUpperInvariant()); + TestEditionIds.Regular.ToString())).Value.ShouldBe(false.ToString().ToUpperInvariant()); } [Fact] @@ -79,18 +79,18 @@ namespace Volo.Abp.FeatureManagement // Arrange (await FeatureValueRepository.FindAsync(TestFeatureDefinitionProvider.SocialLogins, EditionFeatureValueProvider.ProviderName, - TestEditionIds.Regular.ToString()).ConfigureAwait(false)).ShouldNotBeNull(); + TestEditionIds.Regular.ToString())).ShouldNotBeNull(); // Act await FeatureManagementStore.DeleteAsync(TestFeatureDefinitionProvider.SocialLogins, EditionFeatureValueProvider.ProviderName, - TestEditionIds.Regular.ToString()).ConfigureAwait(false); + TestEditionIds.Regular.ToString()); // Assert (await FeatureValueRepository.FindAsync(TestFeatureDefinitionProvider.SocialLogins, EditionFeatureValueProvider.ProviderName, - TestEditionIds.Regular.ToString()).ConfigureAwait(false)).ShouldBeNull(); + TestEditionIds.Regular.ToString())).ShouldBeNull(); } diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo/Abp/FeatureManagement/FeatureManagementTestDataBuilder.cs b/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo/Abp/FeatureManagement/FeatureManagementTestDataBuilder.cs index dc286e6782..0629693dbd 100644 --- a/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo/Abp/FeatureManagement/FeatureManagementTestDataBuilder.cs +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo/Abp/FeatureManagement/FeatureManagementTestDataBuilder.cs @@ -34,7 +34,7 @@ namespace Volo.Abp.FeatureManagement EditionFeatureValueProvider.ProviderName, TestEditionIds.Regular.ToString() ) - ).ConfigureAwait(false); + ); //UserCount await _featureValueRepository.InsertAsync( @@ -45,7 +45,7 @@ namespace Volo.Abp.FeatureManagement EditionFeatureValueProvider.ProviderName, TestEditionIds.Regular.ToString() ) - ).ConfigureAwait(false); + ); //ProjectCount await _featureValueRepository.InsertAsync( @@ -56,7 +56,7 @@ namespace Volo.Abp.FeatureManagement EditionFeatureValueProvider.ProviderName, TestEditionIds.Regular.ToString() ) - ).ConfigureAwait(false); + ); #endregion @@ -71,7 +71,7 @@ namespace Volo.Abp.FeatureManagement EditionFeatureValueProvider.ProviderName, TestEditionIds.Enterprise.ToString() ) - ).ConfigureAwait(false); + ); //EmailSupport await _featureValueRepository.InsertAsync( @@ -82,7 +82,7 @@ namespace Volo.Abp.FeatureManagement EditionFeatureValueProvider.ProviderName, TestEditionIds.Enterprise.ToString() ) - ).ConfigureAwait(false); + ); //UserCount await _featureValueRepository.InsertAsync( @@ -93,7 +93,7 @@ namespace Volo.Abp.FeatureManagement EditionFeatureValueProvider.ProviderName, TestEditionIds.Enterprise.ToString() ) - ).ConfigureAwait(false); + ); //ProjectCount await _featureValueRepository.InsertAsync( @@ -104,7 +104,7 @@ namespace Volo.Abp.FeatureManagement EditionFeatureValueProvider.ProviderName, TestEditionIds.Enterprise.ToString() ) - ).ConfigureAwait(false); + ); //BackupCount await _featureValueRepository.InsertAsync( @@ -115,7 +115,7 @@ namespace Volo.Abp.FeatureManagement EditionFeatureValueProvider.ProviderName, TestEditionIds.Enterprise.ToString() ) - ).ConfigureAwait(false); + ); #endregion @@ -130,7 +130,7 @@ namespace Volo.Abp.FeatureManagement EditionFeatureValueProvider.ProviderName, TestEditionIds.Ultimate.ToString() ) - ).ConfigureAwait(false); + ); //EmailSupport await _featureValueRepository.InsertAsync( @@ -141,7 +141,7 @@ namespace Volo.Abp.FeatureManagement EditionFeatureValueProvider.ProviderName, TestEditionIds.Ultimate.ToString() ) - ).ConfigureAwait(false); + ); //EmailSupport await _featureValueRepository.InsertAsync( @@ -152,7 +152,7 @@ namespace Volo.Abp.FeatureManagement EditionFeatureValueProvider.ProviderName, TestEditionIds.Ultimate.ToString() ) - ).ConfigureAwait(false); + ); //UserCount await _featureValueRepository.InsertAsync( @@ -163,7 +163,7 @@ namespace Volo.Abp.FeatureManagement EditionFeatureValueProvider.ProviderName, TestEditionIds.Ultimate.ToString() ) - ).ConfigureAwait(false); + ); //ProjectCount await _featureValueRepository.InsertAsync( @@ -174,7 +174,7 @@ namespace Volo.Abp.FeatureManagement EditionFeatureValueProvider.ProviderName, TestEditionIds.Ultimate.ToString() ) - ).ConfigureAwait(false); + ); //BackupCount await _featureValueRepository.InsertAsync( @@ -185,7 +185,7 @@ namespace Volo.Abp.FeatureManagement EditionFeatureValueProvider.ProviderName, TestEditionIds.Ultimate.ToString() ) - ).ConfigureAwait(false); + ); #endregion } diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo/Abp/FeatureManagement/FeatureValueRepository_Tests.cs b/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo/Abp/FeatureManagement/FeatureValueRepository_Tests.cs index 8c3904ef24..c7cbb0d8ae 100644 --- a/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo/Abp/FeatureManagement/FeatureValueRepository_Tests.cs +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo/Abp/FeatureManagement/FeatureValueRepository_Tests.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.FeatureManagement TestFeatureDefinitionProvider.ProjectCount, EditionFeatureValueProvider.ProviderName, TestEditionIds.Enterprise.ToString() - ).ConfigureAwait(false); + ); featureValue.ShouldNotBeNull(); featureValue.Value.ShouldBe("3"); @@ -35,7 +35,7 @@ namespace Volo.Abp.FeatureManagement TestFeatureDefinitionProvider.ProjectCount, EditionFeatureValueProvider.ProviderName, "undefined-edition-id" - ).ConfigureAwait(false); + ); featureValue.ShouldBeNull(); } @@ -46,7 +46,7 @@ namespace Volo.Abp.FeatureManagement var featureValues = await Repository.GetListAsync( EditionFeatureValueProvider.ProviderName, TestEditionIds.Enterprise.ToString() - ).ConfigureAwait(false); + ); featureValues.Count.ShouldBeGreaterThan(0); diff --git a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Application/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.Application/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.Application/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs index 44b97a82ea..ffc13fdbca 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs @@ -24,13 +24,13 @@ namespace Volo.Abp.Identity public virtual async Task GetAsync(Guid id) { return ObjectMapper.Map( - await _roleManager.GetByIdAsync(id).ConfigureAwait(false)); + await _roleManager.GetByIdAsync(id)); } public virtual async Task> GetListAsync(PagedAndSortedResultRequestDto input) { - var list = await _roleRepository.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount).ConfigureAwait(false); - var totalCount = await _roleRepository.GetCountAsync().ConfigureAwait(false); + var list = await _roleRepository.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount); + var totalCount = await _roleRepository.GetCountAsync(); return new PagedResultDto( totalCount, @@ -46,8 +46,8 @@ namespace Volo.Abp.Identity role.IsDefault = input.IsDefault; role.IsPublic = input.IsPublic; - (await _roleManager.CreateAsync(role).ConfigureAwait(false)).CheckErrors(); - await CurrentUnitOfWork.SaveChangesAsync().ConfigureAwait(false); + (await _roleManager.CreateAsync(role)).CheckErrors(); + await CurrentUnitOfWork.SaveChangesAsync(); return ObjectMapper.Map(role); } @@ -55,16 +55,16 @@ namespace Volo.Abp.Identity [Authorize(IdentityPermissions.Roles.Update)] public virtual async Task UpdateAsync(Guid id, IdentityRoleUpdateDto input) { - var role = await _roleManager.GetByIdAsync(id).ConfigureAwait(false); + var role = await _roleManager.GetByIdAsync(id); role.ConcurrencyStamp = input.ConcurrencyStamp; - (await _roleManager.SetRoleNameAsync(role, input.Name).ConfigureAwait(false)).CheckErrors(); + (await _roleManager.SetRoleNameAsync(role, input.Name)).CheckErrors(); role.IsDefault = input.IsDefault; role.IsPublic = input.IsPublic; - (await _roleManager.UpdateAsync(role).ConfigureAwait(false)).CheckErrors(); - await CurrentUnitOfWork.SaveChangesAsync().ConfigureAwait(false); + (await _roleManager.UpdateAsync(role)).CheckErrors(); + await CurrentUnitOfWork.SaveChangesAsync(); return ObjectMapper.Map(role); } @@ -72,13 +72,13 @@ namespace Volo.Abp.Identity [Authorize(IdentityPermissions.Roles.Delete)] public virtual async Task DeleteAsync(Guid id) { - var role = await _roleManager.FindByIdAsync(id.ToString()).ConfigureAwait(false); + var role = await _roleManager.FindByIdAsync(id.ToString()); if (role == null) { return; } - (await _roleManager.DeleteAsync(role).ConfigureAwait(false)).CheckErrors(); + (await _roleManager.DeleteAsync(role)).CheckErrors(); } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs index 365fac604f..c1d0f8f28b 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs @@ -26,14 +26,14 @@ namespace Volo.Abp.Identity { return ObjectMapper.Map( await _userManager.GetByIdAsync(id) -.ConfigureAwait(false)); + ); } [Authorize(IdentityPermissions.Users.Default)] public virtual async Task> GetListAsync(GetIdentityUsersInput input) { - var count = await _userRepository.GetCountAsync(input.Filter).ConfigureAwait(false); - var list = await _userRepository.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter).ConfigureAwait(false); + var count = await _userRepository.GetCountAsync(input.Filter); + var list = await _userRepository.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter); return new PagedResultDto( count, @@ -44,7 +44,7 @@ namespace Volo.Abp.Identity [Authorize(IdentityPermissions.Users.Default)] public virtual async Task> GetRolesAsync(Guid id) { - var roles = await _userRepository.GetRolesAsync(id).ConfigureAwait(false); + var roles = await _userRepository.GetRolesAsync(id); return new ListResultDto( ObjectMapper.Map, List>(roles) ); @@ -55,10 +55,10 @@ namespace Volo.Abp.Identity { var user = new IdentityUser(GuidGenerator.Create(), input.UserName, input.Email, CurrentTenant.Id); - (await _userManager.CreateAsync(user, input.Password).ConfigureAwait(false)).CheckErrors(); - await UpdateUserByInput(user, input).ConfigureAwait(false); + (await _userManager.CreateAsync(user, input.Password)).CheckErrors(); + await UpdateUserByInput(user, input); - await CurrentUnitOfWork.SaveChangesAsync().ConfigureAwait(false); + await CurrentUnitOfWork.SaveChangesAsync(); return ObjectMapper.Map(user); } @@ -66,20 +66,20 @@ namespace Volo.Abp.Identity [Authorize(IdentityPermissions.Users.Update)] public virtual async Task UpdateAsync(Guid id, IdentityUserUpdateDto input) { - var user = await _userManager.GetByIdAsync(id).ConfigureAwait(false); + var user = await _userManager.GetByIdAsync(id); user.ConcurrencyStamp = input.ConcurrencyStamp; - (await _userManager.SetUserNameAsync(user, input.UserName).ConfigureAwait(false)).CheckErrors(); - await UpdateUserByInput(user, input).ConfigureAwait(false); - (await _userManager.UpdateAsync(user).ConfigureAwait(false)).CheckErrors(); + (await _userManager.SetUserNameAsync(user, input.UserName)).CheckErrors(); + await UpdateUserByInput(user, input); + (await _userManager.UpdateAsync(user)).CheckErrors(); if (!input.Password.IsNullOrEmpty()) { - (await _userManager.RemovePasswordAsync(user).ConfigureAwait(false)).CheckErrors(); - (await _userManager.AddPasswordAsync(user, input.Password).ConfigureAwait(false)).CheckErrors(); + (await _userManager.RemovePasswordAsync(user)).CheckErrors(); + (await _userManager.AddPasswordAsync(user, input.Password)).CheckErrors(); } - await CurrentUnitOfWork.SaveChangesAsync().ConfigureAwait(false); + await CurrentUnitOfWork.SaveChangesAsync(); return ObjectMapper.Map(user); } @@ -92,21 +92,21 @@ namespace Volo.Abp.Identity throw new BusinessException(code: IdentityErrorCodes.UserSelfDeletion); } - var user = await _userManager.FindByIdAsync(id.ToString()).ConfigureAwait(false); + var user = await _userManager.FindByIdAsync(id.ToString()); if (user == null) { return; } - (await _userManager.DeleteAsync(user).ConfigureAwait(false)).CheckErrors(); + (await _userManager.DeleteAsync(user)).CheckErrors(); } [Authorize(IdentityPermissions.Users.Update)] public virtual async Task UpdateRolesAsync(Guid id, IdentityUserUpdateRolesDto input) { - var user = await _userManager.GetByIdAsync(id).ConfigureAwait(false); - (await _userManager.SetRolesAsync(user, input.RoleNames).ConfigureAwait(false)).CheckErrors(); - await _userRepository.UpdateAsync(user).ConfigureAwait(false); + var user = await _userManager.GetByIdAsync(id); + (await _userManager.SetRolesAsync(user, input.RoleNames)).CheckErrors(); + await _userRepository.UpdateAsync(user); } [Authorize(IdentityPermissions.Users.Default)] @@ -114,7 +114,7 @@ namespace Volo.Abp.Identity { return ObjectMapper.Map( await _userManager.FindByNameAsync(username) -.ConfigureAwait(false)); + ); } [Authorize(IdentityPermissions.Users.Default)] @@ -122,30 +122,30 @@ namespace Volo.Abp.Identity { return ObjectMapper.Map( await _userManager.FindByEmailAsync(email) -.ConfigureAwait(false)); + ); } private async Task UpdateUserByInput(IdentityUser user, IdentityUserCreateOrUpdateDtoBase input) { if (!string.Equals(user.Email, input.Email, StringComparison.InvariantCultureIgnoreCase)) { - (await _userManager.SetEmailAsync(user, input.Email).ConfigureAwait(false)).CheckErrors(); + (await _userManager.SetEmailAsync(user, input.Email)).CheckErrors(); } if (!string.Equals(user.PhoneNumber, input.PhoneNumber, StringComparison.InvariantCultureIgnoreCase)) { - (await _userManager.SetPhoneNumberAsync(user, input.PhoneNumber).ConfigureAwait(false)).CheckErrors(); + (await _userManager.SetPhoneNumberAsync(user, input.PhoneNumber)).CheckErrors(); } - (await _userManager.SetTwoFactorEnabledAsync(user, input.TwoFactorEnabled).ConfigureAwait(false)).CheckErrors(); - (await _userManager.SetLockoutEnabledAsync(user, input.LockoutEnabled).ConfigureAwait(false)).CheckErrors(); + (await _userManager.SetTwoFactorEnabledAsync(user, input.TwoFactorEnabled)).CheckErrors(); + (await _userManager.SetLockoutEnabledAsync(user, input.LockoutEnabled)).CheckErrors(); user.Name = input.Name; user.Surname = input.Surname; if (input.RoleNames != null) { - (await _userManager.SetRolesAsync(user, input.RoleNames).ConfigureAwait(false)).CheckErrors(); + (await _userManager.SetRolesAsync(user, input.RoleNames)).CheckErrors(); } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserLookupAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserLookupAppService.cs index ca2b25f83b..48d42c4579 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserLookupAppService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserLookupAppService.cs @@ -18,7 +18,7 @@ namespace Volo.Abp.Identity public virtual async Task FindByIdAsync(Guid id) { - var userData = await UserLookupServiceProvider.FindByIdAsync(id).ConfigureAwait(false); + var userData = await UserLookupServiceProvider.FindByIdAsync(id); if (userData == null) { return null; @@ -29,7 +29,7 @@ namespace Volo.Abp.Identity public virtual async Task FindByUserNameAsync(string userName) { - var userData = await UserLookupServiceProvider.FindByUserNameAsync(userName).ConfigureAwait(false); + var userData = await UserLookupServiceProvider.FindByUserNameAsync(userName); if (userData == null) { return null; diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/ProfileAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/ProfileAppService.cs index 04d2c55a0b..0b8712b93d 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/ProfileAppService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/ProfileAppService.cs @@ -21,39 +21,39 @@ namespace Volo.Abp.Identity { return ObjectMapper.Map( await _userManager.GetByIdAsync(CurrentUser.GetId()) -.ConfigureAwait(false)); + ); } public virtual async Task UpdateAsync(UpdateProfileDto input) { - var user = await _userManager.GetByIdAsync(CurrentUser.GetId()).ConfigureAwait(false); + var user = await _userManager.GetByIdAsync(CurrentUser.GetId()); - if (await SettingProvider.IsTrueAsync(IdentitySettingNames.User.IsUserNameUpdateEnabled).ConfigureAwait(false)) + if (await SettingProvider.IsTrueAsync(IdentitySettingNames.User.IsUserNameUpdateEnabled)) { - (await _userManager.SetUserNameAsync(user, input.UserName).ConfigureAwait(false)).CheckErrors(); + (await _userManager.SetUserNameAsync(user, input.UserName)).CheckErrors(); } - if (await SettingProvider.IsTrueAsync(IdentitySettingNames.User.IsEmailUpdateEnabled).ConfigureAwait(false)) + if (await SettingProvider.IsTrueAsync(IdentitySettingNames.User.IsEmailUpdateEnabled)) { - (await _userManager.SetEmailAsync(user, input.Email).ConfigureAwait(false)).CheckErrors(); + (await _userManager.SetEmailAsync(user, input.Email)).CheckErrors(); } - (await _userManager.SetPhoneNumberAsync(user, input.PhoneNumber).ConfigureAwait(false)).CheckErrors(); + (await _userManager.SetPhoneNumberAsync(user, input.PhoneNumber)).CheckErrors(); user.Name = input.Name; user.Surname = input.Surname; - (await _userManager.UpdateAsync(user).ConfigureAwait(false)).CheckErrors(); + (await _userManager.UpdateAsync(user)).CheckErrors(); - await CurrentUnitOfWork.SaveChangesAsync().ConfigureAwait(false); + await CurrentUnitOfWork.SaveChangesAsync(); return ObjectMapper.Map(user); } public virtual async Task ChangePasswordAsync(ChangePasswordInput input) { - var currentUser = await _userManager.GetByIdAsync(CurrentUser.GetId()).ConfigureAwait(false); - (await _userManager.ChangePasswordAsync(currentUser, input.CurrentPassword, input.NewPassword).ConfigureAwait(false)).CheckErrors(); + var currentUser = await _userManager.GetByIdAsync(CurrentUser.GetId()); + (await _userManager.ChangePasswordAsync(currentUser, input.CurrentPassword, input.NewPassword)).CheckErrors(); } } } diff --git a/modules/identity/src/Volo.Abp.Identity.AspNetCore/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.AspNetCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identity/src/Volo.Abp.Identity.AspNetCore/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.AspNetCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.Domain/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityOptionsFactory.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityOptionsFactory.cs index 3836783a01..89f2b11bc2 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityOptionsFactory.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityOptionsFactory.cs @@ -39,19 +39,19 @@ namespace Volo.Abp.Identity protected virtual async Task OverrideOptionsAsync(IdentityOptions options) { - options.Password.RequiredLength = await _settingProvider.GetAsync(IdentitySettingNames.Password.RequiredLength, options.Password.RequiredLength).ConfigureAwait(false); - options.Password.RequiredUniqueChars = await _settingProvider.GetAsync(IdentitySettingNames.Password.RequiredUniqueChars, options.Password.RequiredUniqueChars).ConfigureAwait(false); - options.Password.RequireNonAlphanumeric = await _settingProvider.GetAsync(IdentitySettingNames.Password.RequireNonAlphanumeric, options.Password.RequireNonAlphanumeric).ConfigureAwait(false); - options.Password.RequireLowercase = await _settingProvider.GetAsync(IdentitySettingNames.Password.RequireLowercase, options.Password.RequireLowercase).ConfigureAwait(false); - options.Password.RequireUppercase = await _settingProvider.GetAsync(IdentitySettingNames.Password.RequireUppercase, options.Password.RequireUppercase).ConfigureAwait(false); - options.Password.RequireDigit = await _settingProvider.GetAsync(IdentitySettingNames.Password.RequireDigit, options.Password.RequireDigit).ConfigureAwait(false); - - options.Lockout.AllowedForNewUsers = await _settingProvider.GetAsync(IdentitySettingNames.Lockout.AllowedForNewUsers, options.Lockout.AllowedForNewUsers).ConfigureAwait(false); + options.Password.RequiredLength = await _settingProvider.GetAsync(IdentitySettingNames.Password.RequiredLength, options.Password.RequiredLength); + options.Password.RequiredUniqueChars = await _settingProvider.GetAsync(IdentitySettingNames.Password.RequiredUniqueChars, options.Password.RequiredUniqueChars); + options.Password.RequireNonAlphanumeric = await _settingProvider.GetAsync(IdentitySettingNames.Password.RequireNonAlphanumeric, options.Password.RequireNonAlphanumeric); + options.Password.RequireLowercase = await _settingProvider.GetAsync(IdentitySettingNames.Password.RequireLowercase, options.Password.RequireLowercase); + options.Password.RequireUppercase = await _settingProvider.GetAsync(IdentitySettingNames.Password.RequireUppercase, options.Password.RequireUppercase); + options.Password.RequireDigit = await _settingProvider.GetAsync(IdentitySettingNames.Password.RequireDigit, options.Password.RequireDigit); + + options.Lockout.AllowedForNewUsers = await _settingProvider.GetAsync(IdentitySettingNames.Lockout.AllowedForNewUsers, options.Lockout.AllowedForNewUsers); options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromSeconds(await _settingProvider.GetAsync(IdentitySettingNames.Lockout.LockoutDuration, options.Lockout.DefaultLockoutTimeSpan.TotalSeconds.To())); - options.Lockout.MaxFailedAccessAttempts = await _settingProvider.GetAsync(IdentitySettingNames.Lockout.MaxFailedAccessAttempts, options.Lockout.MaxFailedAccessAttempts).ConfigureAwait(false); + options.Lockout.MaxFailedAccessAttempts = await _settingProvider.GetAsync(IdentitySettingNames.Lockout.MaxFailedAccessAttempts, options.Lockout.MaxFailedAccessAttempts); - options.SignIn.RequireConfirmedEmail = await _settingProvider.GetAsync(IdentitySettingNames.SignIn.RequireConfirmedEmail, options.SignIn.RequireConfirmedEmail).ConfigureAwait(false); - options.SignIn.RequireConfirmedPhoneNumber = await _settingProvider.GetAsync(IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber, options.SignIn.RequireConfirmedPhoneNumber).ConfigureAwait(false); + options.SignIn.RequireConfirmedEmail = await _settingProvider.GetAsync(IdentitySettingNames.SignIn.RequireConfirmedEmail, options.SignIn.RequireConfirmedEmail); + options.SignIn.RequireConfirmedPhoneNumber = await _settingProvider.GetAsync(IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber, options.SignIn.RequireConfirmedPhoneNumber); } } diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs index 9425a91cdc..8db2b95942 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.Identity [UnitOfWork] public override async Task CreateAsync(IdentityUser user) { - var principal = await base.CreateAsync(user).ConfigureAwait(false); + var principal = await base.CreateAsync(user); if (user.TenantId.HasValue) { diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityClaimTypeManager.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityClaimTypeManager.cs index ae468d272a..6e79b29d98 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityClaimTypeManager.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityClaimTypeManager.cs @@ -15,17 +15,17 @@ namespace Volo.Abp.Identity public virtual async Task CreateAsync(IdentityClaimType claimType) { - if (await _identityClaimTypeRepository.AnyAsync(claimType.Name).ConfigureAwait(false)) + if (await _identityClaimTypeRepository.AnyAsync(claimType.Name)) { throw new AbpException($"Name Exist: {claimType.Name}"); } - return await _identityClaimTypeRepository.InsertAsync(claimType).ConfigureAwait(false); + return await _identityClaimTypeRepository.InsertAsync(claimType); } public virtual async Task UpdateAsync(IdentityClaimType claimType) { - if (await _identityClaimTypeRepository.AnyAsync(claimType.Name, claimType.Id).ConfigureAwait(false)) + if (await _identityClaimTypeRepository.AnyAsync(claimType.Name, claimType.Id)) { throw new AbpException($"Name Exist: {claimType.Name}"); } @@ -36,7 +36,7 @@ namespace Volo.Abp.Identity } - return await _identityClaimTypeRepository.UpdateAsync(claimType).ConfigureAwait(false); + return await _identityClaimTypeRepository.UpdateAsync(claimType); } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityDataSeeder.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityDataSeeder.cs index 92ebe6adfb..70945c2546 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityDataSeeder.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityDataSeeder.cs @@ -47,7 +47,7 @@ namespace Volo.Abp.Identity const string adminUserName = "admin"; var adminUser = await _userRepository.FindByNormalizedUserNameAsync( _lookupNormalizer.NormalizeName(adminUserName) - ).ConfigureAwait(false); + ); if (adminUser != null) { @@ -64,12 +64,12 @@ namespace Volo.Abp.Identity Name = adminUserName }; - (await _userManager.CreateAsync(adminUser, adminPassword).ConfigureAwait(false)).CheckErrors(); + (await _userManager.CreateAsync(adminUser, adminPassword)).CheckErrors(); result.CreatedAdminUser = true; //"admin" role const string adminRoleName = "admin"; - var adminRole = await _roleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName(adminRoleName)).ConfigureAwait(false); + var adminRole = await _roleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName(adminRoleName)); if (adminRole == null) { adminRole = new IdentityRole( @@ -82,11 +82,11 @@ namespace Volo.Abp.Identity IsPublic = true }; - (await _roleManager.CreateAsync(adminRole).ConfigureAwait(false)).CheckErrors(); + (await _roleManager.CreateAsync(adminRole)).CheckErrors(); result.CreatedAdminRole = true; } - (await _userManager.AddToRoleAsync(adminUser, adminRoleName).ConfigureAwait(false)).CheckErrors(); + (await _userManager.AddToRoleAsync(adminUser, adminRoleName)).CheckErrors(); return result; } diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleManager.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleManager.cs index 17f1b817aa..0a64d64aad 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleManager.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleManager.cs @@ -41,7 +41,7 @@ namespace Volo.Abp.Identity public virtual async Task GetByIdAsync(Guid id) { - var role = await Store.FindByIdAsync(id.ToString(), CancellationToken).ConfigureAwait(false); + var role = await Store.FindByIdAsync(id.ToString(), CancellationToken); if (role == null) { throw new EntityNotFoundException(typeof(IdentityRole), id); @@ -57,7 +57,7 @@ namespace Volo.Abp.Identity throw new BusinessException(_localizer["Identity.StaticRoleRenamingErrorMessage"]); // TODO: localize & change exception type } - return await base.SetRoleNameAsync(role, name).ConfigureAwait(false); + return await base.SetRoleNameAsync(role, name); } public override async Task DeleteAsync(IdentityRole role) @@ -67,7 +67,7 @@ namespace Volo.Abp.Identity throw new BusinessException(_localizer["Identity.StaticRoleDeletionErrorMessage"]); // TODO: localize & change exception type } - return await base.DeleteAsync(role).ConfigureAwait(false); + return await base.DeleteAsync(role); } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleStore.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleStore.cs index 004fc0c20c..ddff3ae844 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleStore.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleStore.cs @@ -67,7 +67,7 @@ namespace Volo.Abp.Identity Check.NotNull(role, nameof(role)); - await _roleRepository.InsertAsync(role, AutoSaveChanges, cancellationToken).ConfigureAwait(false); + await _roleRepository.InsertAsync(role, AutoSaveChanges, cancellationToken); return IdentityResult.Success; } @@ -86,7 +86,7 @@ namespace Volo.Abp.Identity try { - await _roleRepository.UpdateAsync(role, AutoSaveChanges, cancellationToken).ConfigureAwait(false); + await _roleRepository.UpdateAsync(role, AutoSaveChanges, cancellationToken); } catch (AbpDbConcurrencyException ex) { @@ -111,7 +111,7 @@ namespace Volo.Abp.Identity try { - await _roleRepository.DeleteAsync(role, AutoSaveChanges, cancellationToken).ConfigureAwait(false); + await _roleRepository.DeleteAsync(role, AutoSaveChanges, cancellationToken); } catch (AbpDbConcurrencyException ex) { @@ -249,7 +249,7 @@ namespace Volo.Abp.Identity Check.NotNull(role, nameof(role)); - await _roleRepository.EnsureCollectionLoadedAsync(role, r => r.Claims, cancellationToken).ConfigureAwait(false); + await _roleRepository.EnsureCollectionLoadedAsync(role, r => r.Claims, cancellationToken); return role.Claims.Select(c => c.ToClaim()).ToList(); } @@ -268,7 +268,7 @@ namespace Volo.Abp.Identity Check.NotNull(role, nameof(role)); Check.NotNull(claim, nameof(claim)); - await _roleRepository.EnsureCollectionLoadedAsync(role, r => r.Claims, cancellationToken).ConfigureAwait(false); + await _roleRepository.EnsureCollectionLoadedAsync(role, r => r.Claims, cancellationToken); role.AddClaim(_guidGenerator, claim); } @@ -285,7 +285,7 @@ namespace Volo.Abp.Identity Check.NotNull(role, nameof(role)); Check.NotNull(claim, nameof(claim)); - await _roleRepository.EnsureCollectionLoadedAsync(role, r => r.Claims, cancellationToken).ConfigureAwait(false); + await _roleRepository.EnsureCollectionLoadedAsync(role, r => r.Claims, cancellationToken); role.RemoveClaim(claim); } 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 9e66b7b824..0f732a8dd7 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 @@ -45,7 +45,7 @@ namespace Volo.Abp.Identity public virtual async Task GetByIdAsync(Guid id) { - var user = await Store.FindByIdAsync(id.ToString(), CancellationToken).ConfigureAwait(false); + var user = await Store.FindByIdAsync(id.ToString(), CancellationToken); if (user == null) { throw new EntityNotFoundException(typeof(IdentityUser), id); @@ -59,15 +59,15 @@ namespace Volo.Abp.Identity Check.NotNull(user, nameof(user)); Check.NotNull(roleNames, nameof(roleNames)); - var currentRoleNames = await GetRolesAsync(user).ConfigureAwait(false); + var currentRoleNames = await GetRolesAsync(user); - var result = await RemoveFromRolesAsync(user, currentRoleNames.Except(roleNames).Distinct()).ConfigureAwait(false); + var result = await RemoveFromRolesAsync(user, currentRoleNames.Except(roleNames).Distinct()); if (!result.Succeeded) { return result; } - result = await AddToRolesAsync(user, roleNames.Except(currentRoleNames).Distinct()).ConfigureAwait(false); + result = await AddToRolesAsync(user, roleNames.Except(currentRoleNames).Distinct()); if (!result.Succeeded) { return result; diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserRepositoryExternalUserLookupServiceProvider.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserRepositoryExternalUserLookupServiceProvider.cs index 1fdc6ff934..75c2ef53a7 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserRepositoryExternalUserLookupServiceProvider.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserRepositoryExternalUserLookupServiceProvider.cs @@ -30,7 +30,7 @@ namespace Volo.Abp.Identity includeDetails: false, cancellationToken: cancellationToken ) -.ConfigureAwait(false))?.ToAbpUserData(); +)?.ToAbpUserData(); } public virtual async Task FindByUserNameAsync( @@ -43,7 +43,7 @@ namespace Volo.Abp.Identity includeDetails: false, cancellationToken: cancellationToken ) -.ConfigureAwait(false))?.ToAbpUserData(); +)?.ToAbpUserData(); } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserStore.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserStore.cs index cb03869ae6..e92f31797d 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserStore.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserStore.cs @@ -163,7 +163,7 @@ namespace Volo.Abp.Identity Check.NotNull(user, nameof(user)); - await _userRepository.InsertAsync(user, AutoSaveChanges, cancellationToken).ConfigureAwait(false); + await _userRepository.InsertAsync(user, AutoSaveChanges, cancellationToken); return IdentityResult.Success; } @@ -182,7 +182,7 @@ namespace Volo.Abp.Identity try { - await _userRepository.UpdateAsync(user, AutoSaveChanges, cancellationToken).ConfigureAwait(false); + await _userRepository.UpdateAsync(user, AutoSaveChanges, cancellationToken); } catch (AbpDbConcurrencyException ex) { @@ -207,7 +207,7 @@ namespace Volo.Abp.Identity try { - await _userRepository.DeleteAsync(user, AutoSaveChanges, cancellationToken).ConfigureAwait(false); + await _userRepository.DeleteAsync(user, AutoSaveChanges, cancellationToken); } catch (AbpDbConcurrencyException ex) { @@ -313,14 +313,14 @@ namespace Volo.Abp.Identity Check.NotNull(user, nameof(user)); Check.NotNull(normalizedRoleName, nameof(normalizedRoleName)); - var role = await _roleRepository.FindByNormalizedNameAsync(normalizedRoleName, cancellationToken: cancellationToken).ConfigureAwait(false); + var role = await _roleRepository.FindByNormalizedNameAsync(normalizedRoleName, cancellationToken: cancellationToken); if (role == null) { throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "Role {0} does not exist!", normalizedRoleName)); } - await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Roles, cancellationToken).ConfigureAwait(false); + await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Roles, cancellationToken); user.AddRole(role.Id); } @@ -343,13 +343,13 @@ namespace Volo.Abp.Identity throw new ArgumentException(nameof(normalizedRoleName) + " can not be null or whitespace"); } - var role = await _roleRepository.FindByNormalizedNameAsync(normalizedRoleName, cancellationToken: cancellationToken).ConfigureAwait(false); + var role = await _roleRepository.FindByNormalizedNameAsync(normalizedRoleName, cancellationToken: cancellationToken); if (role == null) { return; } - await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Roles, cancellationToken).ConfigureAwait(false); + await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Roles, cancellationToken); user.RemoveRole(role.Id); } @@ -388,13 +388,13 @@ namespace Volo.Abp.Identity throw new ArgumentException(nameof(normalizedRoleName) + " can not be null or whitespace"); } - var role = await _roleRepository.FindByNormalizedNameAsync(normalizedRoleName, cancellationToken: cancellationToken).ConfigureAwait(false); + var role = await _roleRepository.FindByNormalizedNameAsync(normalizedRoleName, cancellationToken: cancellationToken); if (role == null) { return false; } - await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Roles, cancellationToken).ConfigureAwait(false); + await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Roles, cancellationToken); return user.IsInRole(role.Id); } @@ -411,7 +411,7 @@ namespace Volo.Abp.Identity Check.NotNull(user, nameof(user)); - await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Claims, cancellationToken).ConfigureAwait(false); + await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Claims, cancellationToken); return user.Claims.Select(c => c.ToClaim()).ToList(); } @@ -430,7 +430,7 @@ namespace Volo.Abp.Identity Check.NotNull(user, nameof(user)); Check.NotNull(claims, nameof(claims)); - await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Claims, cancellationToken).ConfigureAwait(false); + await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Claims, cancellationToken); user.AddClaims(_guidGenerator, claims); } @@ -451,7 +451,7 @@ namespace Volo.Abp.Identity Check.NotNull(claim, nameof(claim)); Check.NotNull(newClaim, nameof(newClaim)); - await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Claims, cancellationToken).ConfigureAwait(false); + await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Claims, cancellationToken); user.ReplaceClaim(claim, newClaim); } @@ -470,7 +470,7 @@ namespace Volo.Abp.Identity Check.NotNull(user, nameof(user)); Check.NotNull(claims, nameof(claims)); - await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Claims, cancellationToken).ConfigureAwait(false); + await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Claims, cancellationToken); user.RemoveClaims(claims); } @@ -489,7 +489,7 @@ namespace Volo.Abp.Identity Check.NotNull(user, nameof(user)); Check.NotNull(login, nameof(login)); - await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Logins, cancellationToken).ConfigureAwait(false); + await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Logins, cancellationToken); user.AddLogin(login); } @@ -510,7 +510,7 @@ namespace Volo.Abp.Identity Check.NotNull(loginProvider, nameof(loginProvider)); Check.NotNull(providerKey, nameof(providerKey)); - await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Logins, cancellationToken).ConfigureAwait(false); + await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Logins, cancellationToken); user.RemoveLogin(loginProvider, providerKey); } @@ -529,7 +529,7 @@ namespace Volo.Abp.Identity Check.NotNull(user, nameof(user)); - await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Logins, cancellationToken).ConfigureAwait(false); + await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Logins, cancellationToken); return user.Logins.Select(l => l.ToUserLoginInfo()).ToList(); } @@ -988,7 +988,7 @@ namespace Volo.Abp.Identity Check.NotNull(user, nameof(user)); - await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Tokens, cancellationToken).ConfigureAwait(false); + await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Tokens, cancellationToken); user.SetToken(loginProvider, name, value); } @@ -1007,7 +1007,7 @@ namespace Volo.Abp.Identity Check.NotNull(user, nameof(user)); - await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Tokens, cancellationToken).ConfigureAwait(false); + await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Tokens, cancellationToken); user.RemoveToken(loginProvider, name); } @@ -1026,7 +1026,7 @@ namespace Volo.Abp.Identity Check.NotNull(user, nameof(user)); - await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Tokens, cancellationToken).ConfigureAwait(false); + await _userRepository.EnsureCollectionLoadedAsync(user, u => u.Tokens, cancellationToken); return user.FindToken(loginProvider, name)?.Value; } @@ -1053,7 +1053,7 @@ namespace Volo.Abp.Identity Check.NotNull(user, nameof(user)); - var mergedCodes = await GetTokenAsync(user, InternalLoginProvider, RecoveryCodeTokenName, cancellationToken).ConfigureAwait(false) ?? ""; + var mergedCodes = await GetTokenAsync(user, InternalLoginProvider, RecoveryCodeTokenName, cancellationToken) ?? ""; if (mergedCodes.Length > 0) { return mergedCodes.Split(';').Length; @@ -1090,12 +1090,12 @@ namespace Volo.Abp.Identity Check.NotNull(user, nameof(user)); Check.NotNull(code, nameof(code)); - var mergedCodes = await GetTokenAsync(user, InternalLoginProvider, RecoveryCodeTokenName, cancellationToken).ConfigureAwait(false) ?? ""; + var mergedCodes = await GetTokenAsync(user, InternalLoginProvider, RecoveryCodeTokenName, cancellationToken) ?? ""; var splitCodes = mergedCodes.Split(';'); if (splitCodes.Contains(code)) { var updatedCodes = new List(splitCodes.Where(s => s != code)); - await ReplaceCodesAsync(user, updatedCodes, cancellationToken).ConfigureAwait(false); + await ReplaceCodesAsync(user, updatedCodes, cancellationToken); return true; } return false; diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/UserRoleFinder.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/UserRoleFinder.cs index c366591a57..d2de24a568 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/UserRoleFinder.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/UserRoleFinder.cs @@ -15,7 +15,7 @@ namespace Volo.Abp.Identity public virtual async Task GetRolesAsync(Guid userId) { - return (await _identityUserRepository.GetRoleNamesAsync(userId).ConfigureAwait(false)).ToArray(); + return (await _identityUserRepository.GetRoleNamesAsync(userId)).ToArray(); } } } diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityClaimTypeRepository.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityClaimTypeRepository.cs index d7cb57d396..95b7a7fe42 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityClaimTypeRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityClaimTypeRepository.cs @@ -21,7 +21,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore { return await DbSet .WhereIf(ignoredId != null, ct => ct.Id != ignoredId) - .CountAsync(ct => ct.Name == name).ConfigureAwait(false) > 0; + .CountAsync(ct => ct.Name == name) > 0; } public async Task> GetListAsync(string sorting, int maxResultCount, int skipCount, string filter) @@ -34,7 +34,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore ) .OrderBy(sorting ?? "name desc") .PageBy(skipCount, maxResultCount) - .ToListAsync().ConfigureAwait(false); + .ToListAsync(); return identityClaimTypes; } diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityRoleRepository.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityRoleRepository.cs index 731cc6df23..a9850164ef 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityRoleRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityRoleRepository.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore { return await DbSet .IncludeDetails(includeDetails) - .FirstOrDefaultAsync(r => r.NormalizedName == normalizedRoleName, GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .FirstOrDefaultAsync(r => r.NormalizedName == normalizedRoleName, GetCancellationToken(cancellationToken)); } public virtual async Task> GetListAsync( @@ -39,7 +39,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore .IncludeDetails(includeDetails) .OrderBy(sorting ?? nameof(IdentityRole.Name)) .PageBy(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public override IQueryable WithDetails() diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs index e3dfe6ee8c..cab891bc94 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs @@ -28,7 +28,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore .FirstOrDefaultAsync( u => u.NormalizedUserName == normalizedUserName, GetCancellationToken(cancellationToken) - ).ConfigureAwait(false); + ); } public virtual async Task> GetRoleNamesAsync( @@ -40,7 +40,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore where userRole.UserId == id select role.Name; - return await query.ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + return await query.ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task FindByLoginAsync( @@ -52,7 +52,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore return await DbSet .IncludeDetails(includeDetails) .Where(u => u.Logins.Any(login => login.LoginProvider == loginProvider && login.ProviderKey == providerKey)) - .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); } public virtual async Task FindByNormalizedEmailAsync( @@ -62,7 +62,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore { return await DbSet .IncludeDetails(includeDetails) - .FirstOrDefaultAsync(u => u.NormalizedEmail == normalizedEmail, GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .FirstOrDefaultAsync(u => u.NormalizedEmail == normalizedEmail, GetCancellationToken(cancellationToken)); } public virtual async Task> GetListByClaimAsync( @@ -73,7 +73,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore return await DbSet .IncludeDetails(includeDetails) .Where(u => u.Claims.Any(c => c.ClaimType == claim.Type && c.ClaimValue == claim.Value)) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task> GetListByNormalizedRoleNameAsync( @@ -83,7 +83,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore { var role = await DbContext.Roles .Where(x => x.NormalizedName == normalizedRoleName) - .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); if (role == null) { @@ -93,7 +93,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore return await DbSet .IncludeDetails(includeDetails) .Where(u => u.Roles.Any(r => r.RoleId == role.Id)) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task> GetListAsync( @@ -114,7 +114,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore ) .OrderBy(sorting ?? nameof(IdentityUser.UserName)) .PageBy(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task> GetRolesAsync( @@ -127,7 +127,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore where userRole.UserId == id select role; - return await query.ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + return await query.ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task GetCountAsync( @@ -140,7 +140,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore u.UserName.Contains(filter) || u.Email.Contains(filter) ) - .LongCountAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .LongCountAsync(GetCancellationToken(cancellationToken)); } public override IQueryable WithDetails() diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/HttpClientUserRoleFinder.cs b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/HttpClientUserRoleFinder.cs index 1e5934cee5..a5fffe9848 100644 --- a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/HttpClientUserRoleFinder.cs +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/HttpClientUserRoleFinder.cs @@ -17,7 +17,7 @@ namespace Volo.Abp.Identity public async Task GetRolesAsync(Guid userId) { - var output = await _userAppService.GetRolesAsync(userId).ConfigureAwait(false); + var output = await _userAppService.GetRolesAsync(userId); return output.Items.Select(r => r.Name).ToArray(); } } diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.HttpApi/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identity/src/Volo.Abp.Identity.HttpApi/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.MongoDB/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityClaimTypeRepository.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityClaimTypeRepository.cs index beed5130f1..16ba528412 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityClaimTypeRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityClaimTypeRepository.cs @@ -22,13 +22,13 @@ namespace Volo.Abp.Identity.MongoDB { return await GetMongoQueryable() .Where(ct => ct.Name == name) - .AnyAsync().ConfigureAwait(false); + .AnyAsync(); } else { return await GetMongoQueryable() .Where(ct => ct.Id != ignoredId && ct.Name == name) - .AnyAsync().ConfigureAwait(false); + .AnyAsync(); } } @@ -43,7 +43,7 @@ namespace Volo.Abp.Identity.MongoDB .OrderBy(sorting ?? nameof(IdentityClaimType.Name)) .As>() .PageBy>(skipCount, maxResultCount) - .ToListAsync().ConfigureAwait(false); + .ToListAsync(); } } } diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityRoleRepository.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityRoleRepository.cs index 4bae372c8e..50c1403a03 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityRoleRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityRoleRepository.cs @@ -27,7 +27,7 @@ namespace Volo.Abp.Identity.MongoDB bool includeDetails = true, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().FirstOrDefaultAsync(r => r.NormalizedName == normalizedRoleName, GetCancellationToken(cancellationToken)).ConfigureAwait(false); + return await GetMongoQueryable().FirstOrDefaultAsync(r => r.NormalizedName == normalizedRoleName, GetCancellationToken(cancellationToken)); } public async Task> GetListAsync( @@ -41,7 +41,7 @@ namespace Volo.Abp.Identity.MongoDB .OrderBy(sorting ?? nameof(IdentityRole.Name)) .As>() .PageBy>(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } } } \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs index 9c3b8bcd0e..218c2e59e7 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs @@ -32,16 +32,16 @@ namespace Volo.Abp.Identity.MongoDB .FirstOrDefaultAsync( u => u.NormalizedUserName == normalizedUserName, GetCancellationToken(cancellationToken) - ).ConfigureAwait(false); + ); } public async Task> GetRoleNamesAsync( Guid id, CancellationToken cancellationToken = default) { - var user = await GetAsync(id, cancellationToken: GetCancellationToken(cancellationToken)).ConfigureAwait(false); + var user = await GetAsync(id, cancellationToken: GetCancellationToken(cancellationToken)); var roleIds = user.Roles.Select(r => r.RoleId).ToArray(); - return await DbContext.Roles.AsQueryable().Where(r => roleIds.Contains(r.Id)).Select(r => r.Name).ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + return await DbContext.Roles.AsQueryable().Where(r => roleIds.Contains(r.Id)).Select(r => r.Name).ToListAsync(GetCancellationToken(cancellationToken)); } public async Task FindByLoginAsync( @@ -52,7 +52,7 @@ namespace Volo.Abp.Identity.MongoDB { return await GetMongoQueryable() .Where(u => u.Logins.Any(login => login.LoginProvider == loginProvider && login.ProviderKey == providerKey)) - .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); } public async Task FindByNormalizedEmailAsync( @@ -60,7 +60,7 @@ namespace Volo.Abp.Identity.MongoDB bool includeDetails = true, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().FirstOrDefaultAsync(u => u.NormalizedEmail == normalizedEmail, GetCancellationToken(cancellationToken)).ConfigureAwait(false); + return await GetMongoQueryable().FirstOrDefaultAsync(u => u.NormalizedEmail == normalizedEmail, GetCancellationToken(cancellationToken)); } public async Task> GetListByClaimAsync( @@ -70,7 +70,7 @@ namespace Volo.Abp.Identity.MongoDB { return await GetMongoQueryable() .Where(u => u.Claims.Any(c => c.ClaimType == claim.Type && c.ClaimValue == claim.Value)) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task> GetListByNormalizedRoleNameAsync( @@ -78,7 +78,7 @@ namespace Volo.Abp.Identity.MongoDB bool includeDetails = false, CancellationToken cancellationToken = default) { - var role = await DbContext.Roles.AsQueryable().Where(x => x.NormalizedName == normalizedRoleName).FirstOrDefaultAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + var role = await DbContext.Roles.AsQueryable().Where(x => x.NormalizedName == normalizedRoleName).FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); if (role == null) { @@ -87,7 +87,7 @@ namespace Volo.Abp.Identity.MongoDB return await GetMongoQueryable() .Where(u => u.Roles.Any(r => r.RoleId == role.Id)) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task> GetListAsync( @@ -108,7 +108,7 @@ namespace Volo.Abp.Identity.MongoDB .OrderBy(sorting ?? nameof(IdentityUser.UserName)) .As>() .PageBy>(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task> GetRolesAsync( @@ -116,9 +116,9 @@ namespace Volo.Abp.Identity.MongoDB bool includeDetails = false, CancellationToken cancellationToken = default) { - var user = await GetAsync(id, cancellationToken: GetCancellationToken(cancellationToken)).ConfigureAwait(false); + var user = await GetAsync(id, cancellationToken: GetCancellationToken(cancellationToken)); var roleIds = user.Roles.Select(r => r.RoleId).ToArray(); - return await DbContext.Roles.AsQueryable().Where(r => roleIds.Contains(r.Id)).ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + return await DbContext.Roles.AsQueryable().Where(r => roleIds.Contains(r.Id)).ToListAsync(GetCancellationToken(cancellationToken)); } public async Task GetCountAsync( @@ -132,7 +132,7 @@ namespace Volo.Abp.Identity.MongoDB u.UserName.Contains(filter) || u.Email.Contains(filter) ) - .LongCountAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .LongCountAsync(GetCancellationToken(cancellationToken)); } } } \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Web/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.Web/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.Web/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Navigation/AbpIdentityWebMainMenuContributor.cs b/modules/identity/src/Volo.Abp.Identity.Web/Navigation/AbpIdentityWebMainMenuContributor.cs index d6d61dcff4..34dc3dd4cd 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Navigation/AbpIdentityWebMainMenuContributor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Web/Navigation/AbpIdentityWebMainMenuContributor.cs @@ -18,8 +18,8 @@ namespace Volo.Abp.Identity.Web.Navigation var authorizationService = context.ServiceProvider.GetRequiredService(); - var hasRolePermission = await authorizationService.IsGrantedAsync(IdentityPermissions.Roles.Default).ConfigureAwait(false); - var hasUserPermission = await authorizationService.IsGrantedAsync(IdentityPermissions.Users.Default).ConfigureAwait(false); + var hasRolePermission = await authorizationService.IsGrantedAsync(IdentityPermissions.Roles.Default); + var hasUserPermission = await authorizationService.IsGrantedAsync(IdentityPermissions.Users.Default); if (hasRolePermission || hasUserPermission) { diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/CreateModal.cshtml.cs b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/CreateModal.cshtml.cs index 4861944c7f..b3fdad3a95 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/CreateModal.cshtml.cs +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/CreateModal.cshtml.cs @@ -21,7 +21,7 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Roles ValidateModel(); var input = ObjectMapper.Map(Role); - await _identityRoleAppService.CreateAsync(input).ConfigureAwait(false); + await _identityRoleAppService.CreateAsync(input); return NoContent(); } diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/EditModal.cshtml.cs b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/EditModal.cshtml.cs index 42f13b4bf5..8416e171b0 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/EditModal.cshtml.cs +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/EditModal.cshtml.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Roles { Role = ObjectMapper.Map( await _identityRoleAppService.GetAsync(id) -.ConfigureAwait(false)); + ); } public async Task OnPostAsync() @@ -30,7 +30,7 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Roles ValidateModel(); var input = ObjectMapper.Map(Role); - await _identityRoleAppService.UpdateAsync(Role.Id, input).ConfigureAwait(false); + await _identityRoleAppService.UpdateAsync(Role.Id, input); return NoContent(); } diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs index e2dbedc660..7b3822e64b 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs @@ -28,7 +28,7 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users { UserInfo = new UserInfoViewModel(); - var roleDtoList = await _identityRoleAppService.GetListAsync(new PagedAndSortedResultRequestDto()).ConfigureAwait(false); + var roleDtoList = await _identityRoleAppService.GetListAsync(new PagedAndSortedResultRequestDto()); Roles = ObjectMapper.Map, AssignedRoleViewModel[]>(roleDtoList.Items); @@ -45,7 +45,7 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users var input = ObjectMapper.Map(UserInfo); input.RoleNames = Roles.Where(r => r.IsAssigned).Select(r => r.Name).ToArray(); - await _identityUserAppService.CreateAsync(input).ConfigureAwait(false); + await _identityUserAppService.CreateAsync(input); return NoContent(); } diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs index 7a55711bd3..4d4adf7a70 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs @@ -28,13 +28,13 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users public async Task OnGetAsync(Guid id) { - UserInfo = ObjectMapper.Map(await _identityUserAppService.GetAsync(id).ConfigureAwait(false)); + UserInfo = ObjectMapper.Map(await _identityUserAppService.GetAsync(id)); Roles = ObjectMapper.Map, AssignedRoleViewModel[]>( - (await _identityRoleAppService.GetListAsync(new PagedAndSortedResultRequestDto()).ConfigureAwait(false)).Items + (await _identityRoleAppService.GetListAsync(new PagedAndSortedResultRequestDto())).Items ); - var userRoleNames = (await _identityUserAppService.GetRolesAsync(UserInfo.Id).ConfigureAwait(false)).Items.Select(r => r.Name).ToList(); + var userRoleNames = (await _identityUserAppService.GetRolesAsync(UserInfo.Id)).Items.Select(r => r.Name).ToList(); foreach (var role in Roles) { if (userRoleNames.Contains(role.Name)) @@ -50,7 +50,7 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users var input = ObjectMapper.Map(UserInfo); input.RoleNames = Roles.Where(r => r.IsAssigned).Select(r => r.Name).ToArray(); - await _identityUserAppService.UpdateAsync(UserInfo.Id, input).ConfigureAwait(false); + await _identityUserAppService.UpdateAsync(UserInfo.Id, input); return NoContent(); } diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/FodyWeavers.xml b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RolePermissionManagementProvider.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RolePermissionManagementProvider.cs index 2c7920539c..09fb389163 100644 --- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RolePermissionManagementProvider.cs +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RolePermissionManagementProvider.cs @@ -39,11 +39,11 @@ namespace Volo.Abp.PermissionManagement.Identity if (providerName == UserPermissionValueProvider.ProviderName) { var userId = Guid.Parse(providerKey); - var roleNames = await _userRoleFinder.GetRolesAsync(userId).ConfigureAwait(false); + var roleNames = await _userRoleFinder.GetRolesAsync(userId); foreach (var roleName in roleNames) { - var permissionGrant = await PermissionGrantRepository.FindAsync(name, Name, roleName).ConfigureAwait(false); + var permissionGrant = await PermissionGrantRepository.FindAsync(name, Name, roleName); if (permissionGrant != null) { return new PermissionValueProviderGrantInfo(true, roleName); diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs index 54e8bec3b1..ca2695aaf5 100644 --- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs @@ -27,16 +27,16 @@ namespace Volo.Abp.PermissionManagement.Identity public async Task HandleEventAsync(IdentityRoleNameChangedEvent eventData) { - var role = await RoleRepository.FindAsync(eventData.IdentityRole.Id, false).ConfigureAwait(false); + var role = await RoleRepository.FindAsync(eventData.IdentityRole.Id, false); if (role == null) { return; } - var permissionGrantsInRole = await PermissionGrantRepository.GetListAsync(RolePermissionValueProvider.ProviderName, eventData.OldName).ConfigureAwait(false); + var permissionGrantsInRole = await PermissionGrantRepository.GetListAsync(RolePermissionValueProvider.ProviderName, eventData.OldName); foreach (var permissionGrant in permissionGrantsInRole) { - await PermissionManager.UpdateProviderKeyAsync(permissionGrant, eventData.IdentityRole.Name).ConfigureAwait(false); + await PermissionManager.UpdateProviderKeyAsync(permissionGrant, eventData.IdentityRole.Name); } } } diff --git a/modules/identity/test/Volo.Abp.Identity.Application.Tests/FodyWeavers.xml b/modules/identity/test/Volo.Abp.Identity.Application.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identity/test/Volo.Abp.Identity.Application.Tests/FodyWeavers.xml +++ b/modules/identity/test/Volo.Abp.Identity.Application.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityRoleAppService_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityRoleAppService_Tests.cs index b743ee54e9..663cc07786 100644 --- a/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityRoleAppService_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityRoleAppService_Tests.cs @@ -23,11 +23,11 @@ namespace Volo.Abp.Identity { //Arrange - var moderator = await GetRoleAsync("moderator").ConfigureAwait(false); + var moderator = await GetRoleAsync("moderator"); //Act - var result = await _roleAppService.GetAsync(moderator.Id).ConfigureAwait(false); + var result = await _roleAppService.GetAsync(moderator.Id); //Assert @@ -39,7 +39,7 @@ namespace Volo.Abp.Identity { //Act - var result = await _roleAppService.GetListAsync(new PagedAndSortedResultRequestDto()).ConfigureAwait(false); + var result = await _roleAppService.GetListAsync(new PagedAndSortedResultRequestDto()); //Assert @@ -58,14 +58,14 @@ namespace Volo.Abp.Identity //Act - var result = await _roleAppService.CreateAsync(input).ConfigureAwait(false); + var result = await _roleAppService.CreateAsync(input); //Assert result.Id.ShouldNotBe(Guid.Empty); result.Name.ShouldBe(input.Name); - var role = await _roleRepository.GetAsync(result.Id).ConfigureAwait(false); + var role = await _roleRepository.GetAsync(result.Id); role.Name.ShouldBe(input.Name); } @@ -74,7 +74,7 @@ namespace Volo.Abp.Identity { //Arrange - var moderator = await GetRoleAsync("moderator").ConfigureAwait(false); + var moderator = await GetRoleAsync("moderator"); var input = new IdentityRoleUpdateDto { @@ -86,14 +86,14 @@ namespace Volo.Abp.Identity //Act - var result = await _roleAppService.UpdateAsync(moderator.Id, input).ConfigureAwait(false); + var result = await _roleAppService.UpdateAsync(moderator.Id, input); //Assert result.Id.ShouldBe(moderator.Id); result.Name.ShouldBe(input.Name); - var updatedRole = await _roleRepository.GetAsync(moderator.Id).ConfigureAwait(false); + var updatedRole = await _roleRepository.GetAsync(moderator.Id); updatedRole.Name.ShouldBe(input.Name); } @@ -102,15 +102,15 @@ namespace Volo.Abp.Identity { //Arrange - var moderator = await GetRoleAsync("moderator").ConfigureAwait(false); + var moderator = await GetRoleAsync("moderator"); //Act - await _roleAppService.DeleteAsync(moderator.Id).ConfigureAwait(false); + await _roleAppService.DeleteAsync(moderator.Id); //Assert - (await FindRoleAsync("moderator").ConfigureAwait(false)).ShouldBeNull(); + (await FindRoleAsync("moderator")).ShouldBeNull(); } private async Task GetRoleAsync(string roleName) diff --git a/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserAppService_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserAppService_Tests.cs index 19cfb705fd..6fbf23ed73 100644 --- a/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserAppService_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserAppService_Tests.cs @@ -28,7 +28,7 @@ namespace Volo.Abp.Identity //Act - var result = await _userAppService.GetAsync(johnNash.Id).ConfigureAwait(false); + var result = await _userAppService.GetAsync(johnNash.Id); //Assert @@ -44,7 +44,7 @@ namespace Volo.Abp.Identity { //Act - var result = await _userAppService.GetListAsync(new GetIdentityUsersInput()).ConfigureAwait(false); + var result = await _userAppService.GetListAsync(new GetIdentityUsersInput()); //Assert @@ -69,7 +69,7 @@ namespace Volo.Abp.Identity //Act - var result = await _userAppService.CreateAsync(input).ConfigureAwait(false); + var result = await _userAppService.CreateAsync(input); //Assert @@ -79,7 +79,7 @@ namespace Volo.Abp.Identity result.LockoutEnabled.ShouldBe(input.LockoutEnabled); result.PhoneNumber.ShouldBe(input.PhoneNumber); - var user = await _userRepository.GetAsync(result.Id).ConfigureAwait(false); + var user = await _userRepository.GetAsync(result.Id); user.Id.ShouldBe(result.Id); user.UserName.ShouldBe(input.UserName); user.Email.ShouldBe(input.Email); @@ -110,7 +110,7 @@ namespace Volo.Abp.Identity //Act - var result = await _userAppService.UpdateAsync(johnNash.Id, input).ConfigureAwait(false); + var result = await _userAppService.UpdateAsync(johnNash.Id, input); //Assert @@ -120,7 +120,7 @@ namespace Volo.Abp.Identity result.LockoutEnabled.ShouldBe(input.LockoutEnabled); result.PhoneNumber.ShouldBe(input.PhoneNumber); - var user = await _userRepository.GetAsync(result.Id).ConfigureAwait(false); + var user = await _userRepository.GetAsync(result.Id); user.Id.ShouldBe(result.Id); user.UserName.ShouldBe(input.UserName); user.Email.ShouldBe(input.Email); @@ -134,7 +134,7 @@ namespace Volo.Abp.Identity public async Task UpdateAsync_Concurrency_Exception() { //Get user - var johnNash = await _userAppService.GetAsync(_testData.UserJohnId).ConfigureAwait(false); + var johnNash = await _userAppService.GetAsync(_testData.UserJohnId); //Act @@ -151,13 +151,13 @@ namespace Volo.Abp.Identity ConcurrencyStamp = johnNash.ConcurrencyStamp }; - await _userAppService.UpdateAsync(johnNash.Id, input).ConfigureAwait(false); + await _userAppService.UpdateAsync(johnNash.Id, input); //Second update with same input will throw exception because the entity has been modified (await Assert.ThrowsAsync(async () => { - await _userAppService.UpdateAsync(johnNash.Id, input).ConfigureAwait(false); - }).ConfigureAwait(false)).Message.ShouldContain("Optimistic concurrency failure"); + await _userAppService.UpdateAsync(johnNash.Id, input); + })).Message.ShouldContain("Optimistic concurrency failure"); } [Fact] @@ -169,7 +169,7 @@ namespace Volo.Abp.Identity //Act - await _userAppService.DeleteAsync(johnNash.Id).ConfigureAwait(false); + await _userAppService.DeleteAsync(johnNash.Id); //Assert @@ -185,7 +185,7 @@ namespace Volo.Abp.Identity //Act - var result = await _userAppService.GetRolesAsync(johnNash.Id).ConfigureAwait(false); + var result = await _userAppService.GetRolesAsync(johnNash.Id); //Assert @@ -209,11 +209,11 @@ namespace Volo.Abp.Identity { RoleNames = new[] { "admin", "moderator" } } - ).ConfigureAwait(false); + ); //Assert - var roleNames = await _userRepository.GetRoleNamesAsync(johnNash.Id).ConfigureAwait(false); + var roleNames = await _userRepository.GetRoleNamesAsync(johnNash.Id); roleNames.Count.ShouldBe(2); roleNames.ShouldContain("admin"); roleNames.ShouldContain("moderator"); diff --git a/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserLookupAppService_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserLookupAppService_Tests.cs index f28c65be83..227977cf15 100644 --- a/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserLookupAppService_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserLookupAppService_Tests.cs @@ -24,32 +24,32 @@ namespace Volo.Abp.Identity [Fact] public async Task FindByIdAsync() { - var user = await _identityUserRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _identityUserRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - (await _identityUserLookupAppService.FindByIdAsync(user.Id).ConfigureAwait(false)).UserName.ShouldBe(user.UserName); + (await _identityUserLookupAppService.FindByIdAsync(user.Id)).UserName.ShouldBe(user.UserName); } [Fact] public async Task FindById_NotExist_Should_Return_Null() { - var user = await _identityUserLookupAppService.FindByIdAsync(Guid.NewGuid()).ConfigureAwait(false); + var user = await _identityUserLookupAppService.FindByIdAsync(Guid.NewGuid()); user.ShouldBeNull(); } [Fact] public async Task FindByUserNameAsync() { - var user = await _identityUserRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _identityUserRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - (await _identityUserLookupAppService.FindByUserNameAsync(user.UserName).ConfigureAwait(false)).UserName.ShouldBe(user.UserName); + (await _identityUserLookupAppService.FindByUserNameAsync(user.UserName)).UserName.ShouldBe(user.UserName); } [Fact] public async Task FindByUserName_NotExist_Should_Return_Null() { - var user = await _identityUserLookupAppService.FindByUserNameAsync(Guid.NewGuid().ToString()).ConfigureAwait(false); + var user = await _identityUserLookupAppService.FindByUserNameAsync(Guid.NewGuid().ToString()); user.ShouldBeNull(); } } diff --git a/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/ProfileAppService_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/ProfileAppService_Tests.cs index c6e2d45055..fc0334ce05 100644 --- a/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/ProfileAppService_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/ProfileAppService_Tests.cs @@ -34,7 +34,7 @@ namespace Volo.Abp.Identity _currentUser.IsAuthenticated.Returns(true); //Act - var result = await _profileAppService.GetAsync().ConfigureAwait(false); + var result = await _profileAppService.GetAsync(); //Assert var johnNash = GetUser("john.nash"); @@ -62,7 +62,7 @@ namespace Volo.Abp.Identity }; //Act - var result = await _profileAppService.UpdateAsync(input).ConfigureAwait(false); + var result = await _profileAppService.UpdateAsync(input); //Assert result.UserName.ShouldBe(input.UserName); diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/FodyWeavers.xml b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/FodyWeavers.xml +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/Distributed_User_Change_Event_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/Distributed_User_Change_Event_Tests.cs index e16228290c..95e8f925c4 100644 --- a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/Distributed_User_Change_Event_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/Distributed_User_Change_Event_Tests.cs @@ -40,11 +40,11 @@ namespace Volo.Abp.Identity { using (var uow = _unitOfWorkManager.Begin()) { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); - await _userManager.SetEmailAsync(user, "john.nash_UPDATED@abp.io").ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); + await _userManager.SetEmailAsync(user, "john.nash_UPDATED@abp.io"); _testCounter.GetValue("EntityUpdatedEto").ShouldBe(0); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } _testCounter.GetValue("EntityUpdatedEto").ShouldBe(1); diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityClaimTypeManager_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityClaimTypeManager_Tests.cs index c7622bec8b..c5c68d40c6 100644 --- a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityClaimTypeManager_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityClaimTypeManager_Tests.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.Identity { var claimType = await _claimTypeManager.CreateAsync(new IdentityClaimType(Guid.NewGuid(), "Phone", false, false, null, - null, null, IdentityClaimValueType.String)).ConfigureAwait(false); + null, null, IdentityClaimValueType.String)); claimType.ShouldNotBeNull(); claimType.Name.ShouldBe("Phone"); @@ -36,17 +36,17 @@ namespace Volo.Abp.Identity { await Assert.ThrowsAnyAsync(async () => await _claimTypeManager.CreateAsync( new IdentityClaimType( - Guid.NewGuid(), "Age")).ConfigureAwait(false)).ConfigureAwait(false); + Guid.NewGuid(), "Age"))); } [Fact] public async Task UpdateAsync() { - var ageClaim = await _identityClaimTypeRepository.FindAsync(_testData.AgeClaimId).ConfigureAwait(false); + var ageClaim = await _identityClaimTypeRepository.FindAsync(_testData.AgeClaimId); ageClaim.ShouldNotBeNull(); ageClaim.Description = "this is age"; - var updatedAgeClaimType = await _claimTypeManager.UpdateAsync(ageClaim).ConfigureAwait(false); + var updatedAgeClaimType = await _claimTypeManager.UpdateAsync(ageClaim); updatedAgeClaimType.ShouldNotBeNull(); updatedAgeClaimType.Description.ShouldBe("this is age"); } @@ -57,7 +57,7 @@ namespace Volo.Abp.Identity { await Assert.ThrowsAnyAsync(async () => await _claimTypeManager.UpdateAsync( new IdentityClaimType( - Guid.NewGuid(), "Age")).ConfigureAwait(false)).ConfigureAwait(false); + Guid.NewGuid(), "Age"))); } @@ -65,9 +65,9 @@ namespace Volo.Abp.Identity public async Task Static_IdentityClaimType_Cant_Not_Update() { var phoneClaim = new IdentityClaimType(Guid.NewGuid(), "Phone", true, true); - await _identityClaimTypeRepository.InsertAsync(phoneClaim).ConfigureAwait(false); + await _identityClaimTypeRepository.InsertAsync(phoneClaim); - await Assert.ThrowsAnyAsync(async () => await _claimTypeManager.UpdateAsync(phoneClaim).ConfigureAwait(false)).ConfigureAwait(false); + await Assert.ThrowsAnyAsync(async () => await _claimTypeManager.UpdateAsync(phoneClaim)); } } } diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityRoleManager_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityRoleManager_Tests.cs index fbb2a3c023..4314f3eac6 100644 --- a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityRoleManager_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityRoleManager_Tests.cs @@ -28,7 +28,7 @@ namespace Volo.Abp.Identity [Fact] public async Task GetByIdAsync() { - var role = await _identityRoleManager.FindByIdAsync(_testData.RoleModeratorId.ToString()).ConfigureAwait(false); + var role = await _identityRoleManager.FindByIdAsync(_testData.RoleModeratorId.ToString()); role.ShouldNotBeNull(); role.Name.ShouldBe("moderator"); @@ -37,10 +37,10 @@ namespace Volo.Abp.Identity [Fact] public async Task SetRoleNameAsync() { - var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")).ConfigureAwait(false); + var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")); role.ShouldNotBeNull(); - (await _identityRoleManager.SetRoleNameAsync(role, "teacher").ConfigureAwait(false)).Succeeded.ShouldBeTrue(); + (await _identityRoleManager.SetRoleNameAsync(role, "teacher")).Succeeded.ShouldBeTrue(); role.Name.ShouldBe("teacher"); } @@ -48,12 +48,12 @@ namespace Volo.Abp.Identity [Fact] public async Task DeleteAsync() { - var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")).ConfigureAwait(false); + var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")); role.ShouldNotBeNull(); - await _identityRoleManager.DeleteAsync(role).ConfigureAwait(false); + await _identityRoleManager.DeleteAsync(role); - (await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")).ConfigureAwait(false)).ShouldBeNull(); + (await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator"))).ShouldBeNull(); } } diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityRoleStore_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityRoleStore_Tests.cs index 9a4d9d194d..11345a4a46 100644 --- a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityRoleStore_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityRoleStore_Tests.cs @@ -32,9 +32,9 @@ namespace Volo.Abp.Identity { var roleId = Guid.NewGuid(); var role = new IdentityRole(roleId, "teacher"); - (await _identityRoleStore.CreateAsync(role).ConfigureAwait(false)).Succeeded.ShouldBeTrue(); + (await _identityRoleStore.CreateAsync(role)).Succeeded.ShouldBeTrue(); - var teacher = await _identityRoleStore.FindByIdAsync(roleId.ToString()).ConfigureAwait(false); + var teacher = await _identityRoleStore.FindByIdAsync(roleId.ToString()); teacher.ShouldNotBeNull(); teacher.Name.ShouldBe("teacher"); @@ -43,11 +43,11 @@ namespace Volo.Abp.Identity [Fact] public async Task UpdateAsync() { - var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")).ConfigureAwait(false); + var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")); role.ShouldNotBeNull(); role.IsDefault = true; - await _identityRoleStore.UpdateAsync(role).ConfigureAwait(false); + await _identityRoleStore.UpdateAsync(role); role.IsDefault.ShouldBeTrue(); } @@ -56,40 +56,40 @@ namespace Volo.Abp.Identity [Fact] public async Task DeleteAsync() { - var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")).ConfigureAwait(false); + var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")); role.ShouldNotBeNull(); - await _identityRoleStore.DeleteAsync(role).ConfigureAwait(false); + await _identityRoleStore.DeleteAsync(role); - (await _identityRoleStore.FindByIdAsync(_testData.RoleModeratorId.ToString()).ConfigureAwait(false)).ShouldBeNull(); + (await _identityRoleStore.FindByIdAsync(_testData.RoleModeratorId.ToString())).ShouldBeNull(); } [Fact] public async Task GetRoleIdAsync() { - var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")).ConfigureAwait(false); + var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")); role.ShouldNotBeNull(); - (await _identityRoleStore.GetRoleIdAsync(role).ConfigureAwait(false)).ShouldBe(_testData.RoleModeratorId.ToString()); + (await _identityRoleStore.GetRoleIdAsync(role)).ShouldBe(_testData.RoleModeratorId.ToString()); } [Fact] public async Task GetRoleNameAsync() { - var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")).ConfigureAwait(false); + var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")); role.ShouldNotBeNull(); - (await _identityRoleStore.GetRoleNameAsync(role).ConfigureAwait(false)).ShouldBe(role.Name); + (await _identityRoleStore.GetRoleNameAsync(role)).ShouldBe(role.Name); } [Fact] public async Task SetRoleNameAsync() { - var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")).ConfigureAwait(false); + var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")); role.ShouldNotBeNull(); - await _identityRoleStore.SetRoleNameAsync(role, "teacher").ConfigureAwait(false); + await _identityRoleStore.SetRoleNameAsync(role, "teacher"); role.Name.ShouldBe("teacher"); } @@ -97,7 +97,7 @@ namespace Volo.Abp.Identity [Fact] public async Task FindByIdAsync() { - var role = await _identityRoleStore.FindByIdAsync(_testData.RoleModeratorId.ToString()).ConfigureAwait(false); + var role = await _identityRoleStore.FindByIdAsync(_testData.RoleModeratorId.ToString()); role.ShouldNotBeNull(); role.Name.ShouldBe("moderator"); @@ -106,7 +106,7 @@ namespace Volo.Abp.Identity [Fact] public async Task FindByNameAsync() { - var role = await _identityRoleStore.FindByNameAsync(_lookupNormalizer.NormalizeName("moderator")).ConfigureAwait(false); + var role = await _identityRoleStore.FindByNameAsync(_lookupNormalizer.NormalizeName("moderator")); role.ShouldNotBeNull(); role.Name.ShouldBe("moderator"); @@ -115,19 +115,19 @@ namespace Volo.Abp.Identity [Fact] public async Task GetNormalizedRoleNameAsync() { - var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")).ConfigureAwait(false); + var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")); role.ShouldNotBeNull(); - (await _identityRoleStore.GetNormalizedRoleNameAsync(role).ConfigureAwait(false)).ShouldBe(role.NormalizedName); + (await _identityRoleStore.GetNormalizedRoleNameAsync(role)).ShouldBe(role.NormalizedName); } [Fact] public async Task SetNormalizedRoleNameAsync() { - var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")).ConfigureAwait(false); + var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")); role.ShouldNotBeNull(); - await _identityRoleStore.SetNormalizedRoleNameAsync(role, _lookupNormalizer.NormalizeName("teacher")).ConfigureAwait(false); + await _identityRoleStore.SetNormalizedRoleNameAsync(role, _lookupNormalizer.NormalizeName("teacher")); role.NormalizedName.ShouldBe(_lookupNormalizer.NormalizeName("teacher")); } @@ -137,15 +137,15 @@ namespace Volo.Abp.Identity { using (var uow = _unitOfWorkManager.Begin()) { - var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")).ConfigureAwait(false); + var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")); role.ShouldNotBeNull(); - var claims = await _identityRoleStore.GetClaimsAsync(role).ConfigureAwait(false); + var claims = await _identityRoleStore.GetClaimsAsync(role); claims.ShouldNotBeEmpty(); claims.ShouldContain(x => x.Type == "test-claim" && x.Value == "test-value"); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } @@ -156,7 +156,7 @@ namespace Volo.Abp.Identity { using (var uow = _unitOfWorkManager.Begin()) { - var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")).ConfigureAwait(false); + var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")); role.ShouldNotBeNull(); role.Claims.Add(new IdentityRoleClaim(Guid.NewGuid(), role.Id, "my-claim", "my-value", role.TenantId)); @@ -164,7 +164,7 @@ namespace Volo.Abp.Identity //role.Claims.ShouldContain(x => x.ClaimType == "my-claim" && x.ClaimValue == "my-value"); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } @@ -173,7 +173,7 @@ namespace Volo.Abp.Identity throw; } - var role2 = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")).ConfigureAwait(false); + var role2 = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")); role2.ShouldNotBeNull(); role2.Claims.ShouldContain(x => x.ClaimType == "my-claim" && x.ClaimValue == "my-value"); } @@ -183,14 +183,14 @@ namespace Volo.Abp.Identity { using (var uow = _unitOfWorkManager.Begin()) { - var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")).ConfigureAwait(false); + var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator")); role.ShouldNotBeNull(); - await _identityRoleStore.RemoveClaimAsync(role, new Claim("test-claim", "test-value")).ConfigureAwait(false); + await _identityRoleStore.RemoveClaimAsync(role, new Claim("test-claim", "test-value")); role.Claims.ShouldNotContain(x => x.ClaimType == "test-claim" && x.ClaimValue == "test-value"); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } } 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 bc03f35c49..761655deb2 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 @@ -31,7 +31,7 @@ namespace Volo.Abp.Identity [Fact] public async Task GetByIdAsync() { - var user = await _identityUserManager.GetByIdAsync(_testData.UserJohnId).ConfigureAwait(false); + var user = await _identityUserManager.GetByIdAsync(_testData.UserJohnId); user.ShouldNotBeNull(); user.UserName.ShouldBe("john.nash"); @@ -43,18 +43,18 @@ namespace Volo.Abp.Identity using (var uow = _unitOfWorkManager.Begin()) { var user = await _identityUserRepository.FindByNormalizedUserNameAsync( - _lookupNormalizer.NormalizeName("david")).ConfigureAwait(false); + _lookupNormalizer.NormalizeName("david")); user.ShouldNotBeNull(); var identityResult = await _identityUserManager.SetRolesAsync(user, new List() { "moderator", - }).ConfigureAwait(false); + }); identityResult.Succeeded.ShouldBeTrue(); user.Roles.ShouldContain(x => x.RoleId == _testData.RoleModeratorId); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } @@ -64,23 +64,23 @@ namespace Volo.Abp.Identity using (var uow = _unitOfWorkManager.Begin()) { var roleSupporter = - await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("supporter")).ConfigureAwait(false); + await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("supporter")); roleSupporter.ShouldNotBeNull(); var user = await _identityUserRepository.FindByNormalizedUserNameAsync( - _lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + _lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); var identityResult = await _identityUserManager.SetRolesAsync(user, new List() { "admin", - }).ConfigureAwait(false); + }); identityResult.Succeeded.ShouldBeTrue(); user.Roles.ShouldNotContain(x => x.RoleId == _testData.RoleModeratorId); user.Roles.ShouldNotContain(x => x.RoleId == roleSupporter.Id); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } } diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityUserStore_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityUserStore_Tests.cs index 6c7b6610ae..6e84a88450 100644 --- a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityUserStore_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityUserStore_Tests.cs @@ -29,29 +29,29 @@ namespace Volo.Abp.Identity [Fact] public async Task GetUserIdAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - (await _identityUserStore.GetUserIdAsync(user).ConfigureAwait(false)).ShouldBe(user.Id.ToString()); + (await _identityUserStore.GetUserIdAsync(user)).ShouldBe(user.Id.ToString()); } [Fact] public async Task GetUserNameAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - (await _identityUserStore.GetUserNameAsync(user).ConfigureAwait(false)).ShouldBe(user.UserName); + (await _identityUserStore.GetUserNameAsync(user)).ShouldBe(user.UserName); } [Fact] public async Task SetUserNameAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - await _identityUserStore.SetUserNameAsync(user, "bob.lee").ConfigureAwait(false); + await _identityUserStore.SetUserNameAsync(user, "bob.lee"); user.UserName.ShouldBe("bob.lee"); //user.NormalizedUserName.ShouldBe(_lookupNormalizer.Normalize("bob.lee")); } @@ -60,19 +60,19 @@ namespace Volo.Abp.Identity [Fact] public async Task GetNormalizedUserNameAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - (await _identityUserStore.GetNormalizedUserNameAsync(user).ConfigureAwait(false)).ShouldBe(user.NormalizedUserName); + (await _identityUserStore.GetNormalizedUserNameAsync(user)).ShouldBe(user.NormalizedUserName); } [Fact] public async Task SetNormalizedUserNameAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - await _identityUserStore.SetNormalizedUserNameAsync(user, _lookupNormalizer.NormalizeName("bob.lee")).ConfigureAwait(false); + await _identityUserStore.SetNormalizedUserNameAsync(user, _lookupNormalizer.NormalizeName("bob.lee")); user.NormalizedUserName.ShouldBe(_lookupNormalizer.NormalizeName("bob.lee")); } @@ -83,9 +83,9 @@ namespace Volo.Abp.Identity var userId = Guid.NewGuid(); var user = new IdentityUser(userId, "bob.lee", "bob.lee@abp.io"); - await _identityUserStore.CreateAsync(user).ConfigureAwait(false); + await _identityUserStore.CreateAsync(user); - var bobLee = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("bob.lee")).ConfigureAwait(false); + var bobLee = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("bob.lee")); bobLee.ShouldNotBeNull(); bobLee.UserName.ShouldBe("bob.lee"); bobLee.Email.ShouldBe("bob.lee@abp.io"); @@ -94,26 +94,26 @@ namespace Volo.Abp.Identity [Fact] public async Task UpdateAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); user.Name = "lee"; - (await _identityUserStore.UpdateAsync(user).ConfigureAwait(false)).Succeeded.ShouldBeTrue(); + (await _identityUserStore.UpdateAsync(user)).Succeeded.ShouldBeTrue(); - (await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false)).Name + (await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"))).Name .ShouldBe("lee"); } [Fact] public async Task Update_Concurrency() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - (await _identityUserStore.UpdateAsync(user).ConfigureAwait(false)).Succeeded.ShouldBeTrue(); + (await _identityUserStore.UpdateAsync(user)).Succeeded.ShouldBeTrue(); user.ConcurrencyStamp = Guid.NewGuid().ToString(); - var identityResult = await _identityUserStore.UpdateAsync(user).ConfigureAwait(false); + var identityResult = await _identityUserStore.UpdateAsync(user); identityResult.Succeeded.ShouldBeFalse(); identityResult.Errors.ShouldContain(x => @@ -126,19 +126,19 @@ namespace Volo.Abp.Identity [Fact] public async Task DeleteAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - (await _identityUserStore.DeleteAsync(user).ConfigureAwait(false)).Succeeded.ShouldBeTrue(); + (await _identityUserStore.DeleteAsync(user)).Succeeded.ShouldBeTrue(); - (await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false)).ShouldBeNull(); + (await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"))).ShouldBeNull(); } [Fact] public async Task FindByIdAsync() { - var user = await _identityUserStore.FindByIdAsync(_testData.UserJohnId.ToString()).ConfigureAwait(false); + var user = await _identityUserStore.FindByIdAsync(_testData.UserJohnId.ToString()); user.ShouldNotBeNull(); user.UserName.ShouldBe("john.nash"); @@ -148,7 +148,7 @@ namespace Volo.Abp.Identity [Fact] public async Task FindByNameAsync() { - var user = await _identityUserStore.FindByNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _identityUserStore.FindByNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); user.UserName.ShouldBe("john.nash"); @@ -158,11 +158,11 @@ namespace Volo.Abp.Identity [Fact] public async Task SetPasswordHashAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); user.PasswordHash.ShouldBeNull(); - await _identityUserStore.SetPasswordHashAsync(user, "P@ssw0rd").ConfigureAwait(false); + await _identityUserStore.SetPasswordHashAsync(user, "P@ssw0rd"); user.PasswordHash.ShouldBe("P@ssw0rd"); } @@ -170,23 +170,23 @@ namespace Volo.Abp.Identity [Fact] public async Task GetPasswordHashAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - await _identityUserStore.SetPasswordHashAsync(user, "P@ssw0rd").ConfigureAwait(false); + await _identityUserStore.SetPasswordHashAsync(user, "P@ssw0rd"); - (await _identityUserStore.GetPasswordHashAsync(user).ConfigureAwait(false)).ShouldBe("P@ssw0rd"); + (await _identityUserStore.GetPasswordHashAsync(user)).ShouldBe("P@ssw0rd"); } [Fact] public async Task HasPasswordAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - (await _identityUserStore.HasPasswordAsync(user).ConfigureAwait(false)).ShouldBeFalse(); + (await _identityUserStore.HasPasswordAsync(user)).ShouldBeFalse(); - await _identityUserStore.SetPasswordHashAsync(user, "P@ssw0rd").ConfigureAwait(false); - (await _identityUserStore.HasPasswordAsync(user).ConfigureAwait(false)).ShouldBeTrue(); + await _identityUserStore.SetPasswordHashAsync(user, "P@ssw0rd"); + (await _identityUserStore.HasPasswordAsync(user)).ShouldBeTrue(); } [Fact] @@ -194,15 +194,15 @@ namespace Volo.Abp.Identity { using (var uow = _unitOfWorkManager.Begin()) { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("david")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("david")); user.ShouldNotBeNull(); user.Roles.ShouldBeEmpty(); - await _identityUserStore.AddToRoleAsync(user, _lookupNormalizer.NormalizeName("moderator")).ConfigureAwait(false); + await _identityUserStore.AddToRoleAsync(user, _lookupNormalizer.NormalizeName("moderator")); user.Roles.ShouldContain(x => x.RoleId == _testData.RoleModeratorId); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } @@ -211,15 +211,15 @@ namespace Volo.Abp.Identity { using (var uow = _unitOfWorkManager.Begin()) { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); user.Roles.ShouldContain(x => x.RoleId == _testData.RoleModeratorId); - await _identityUserStore.RemoveFromRoleAsync(user, _lookupNormalizer.NormalizeName("moderator")).ConfigureAwait(false); + await _identityUserStore.RemoveFromRoleAsync(user, _lookupNormalizer.NormalizeName("moderator")); user.Roles.ShouldNotContain(x => x.RoleId == _testData.RoleModeratorId); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } @@ -227,10 +227,10 @@ namespace Volo.Abp.Identity [Fact] public async Task GetRolesAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - var roleNames = await _identityUserStore.GetRolesAsync(user).ConfigureAwait(false); + var roleNames = await _identityUserStore.GetRolesAsync(user); roleNames.ShouldNotBeEmpty(); roleNames.ShouldContain(x => x == "moderator"); roleNames.ShouldContain(x => x == "supporter"); @@ -241,13 +241,13 @@ namespace Volo.Abp.Identity { using (var uow = _unitOfWorkManager.Begin()) { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - (await _identityUserStore.IsInRoleAsync(user, _lookupNormalizer.NormalizeName("moderator")).ConfigureAwait(false)).ShouldBeTrue(); - (await _identityUserStore.IsInRoleAsync(user, _lookupNormalizer.NormalizeName("moderatorNotExist")).ConfigureAwait(false)).ShouldBeFalse(); + (await _identityUserStore.IsInRoleAsync(user, _lookupNormalizer.NormalizeName("moderator"))).ShouldBeTrue(); + (await _identityUserStore.IsInRoleAsync(user, _lookupNormalizer.NormalizeName("moderatorNotExist"))).ShouldBeFalse(); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } @@ -256,14 +256,14 @@ namespace Volo.Abp.Identity { using (var uow = _unitOfWorkManager.Begin()) { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - var claims = await _identityUserStore.GetClaimsAsync(user).ConfigureAwait(false); + var claims = await _identityUserStore.GetClaimsAsync(user); claims.ShouldNotBeEmpty(); claims.ShouldContain(x => x.Type == "TestClaimType" && x.Value == "42"); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } @@ -272,18 +272,18 @@ namespace Volo.Abp.Identity { using (var uow = _unitOfWorkManager.Begin()) { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); user.Claims.ShouldNotContain(x => x.ClaimType == "MyClaimType" && x.ClaimValue == "MyClaimValue"); await _identityUserStore.AddClaimsAsync(user, new List() { new Claim("MyClaimType", "MyClaimValue") - }).ConfigureAwait(false); + }); user.Claims.ShouldContain(x => x.ClaimType == "MyClaimType" && x.ClaimValue == "MyClaimValue"); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } @@ -292,15 +292,15 @@ namespace Volo.Abp.Identity { using (var uow = _unitOfWorkManager.Begin()) { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - await _identityUserStore.ReplaceClaimAsync(user, new Claim("TestClaimType", "42"), new Claim("MyClaimType", "MyClaimValue")).ConfigureAwait(false); + await _identityUserStore.ReplaceClaimAsync(user, new Claim("TestClaimType", "42"), new Claim("MyClaimType", "MyClaimValue")); user.Claims.ShouldNotContain(x => x.ClaimType == "TestClaimType" && x.ClaimValue == "42"); user.Claims.ShouldContain(x => x.ClaimType == "MyClaimType" && x.ClaimValue == "MyClaimValue"); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } @@ -309,17 +309,17 @@ namespace Volo.Abp.Identity { using (var uow = _unitOfWorkManager.Begin()) { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); await _identityUserStore.RemoveClaimsAsync(user, new List() { new Claim("TestClaimType", "42") - }).ConfigureAwait(false); + }); user.Claims.ShouldNotContain(x => x.ClaimType == "TestClaimType" && x.ClaimValue == "42"); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } @@ -328,15 +328,15 @@ namespace Volo.Abp.Identity { using (var uow = _unitOfWorkManager.Begin()) { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); user.Logins.ShouldNotContain(x => x.LoginProvider == "facebook" && x.ProviderKey == "john"); - await _identityUserStore.AddLoginAsync(user, new UserLoginInfo("facebook", "john", "John Nash")).ConfigureAwait(false); + await _identityUserStore.AddLoginAsync(user, new UserLoginInfo("facebook", "john", "John Nash")); user.Logins.ShouldContain(x => x.LoginProvider == "facebook" && x.ProviderKey == "john"); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } @@ -345,15 +345,15 @@ namespace Volo.Abp.Identity { using (var uow = _unitOfWorkManager.Begin()) { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); user.Logins.ShouldContain(x => x.LoginProvider == "github" && x.ProviderKey == "john"); - await _identityUserStore.RemoveLoginAsync(user, "github", "john").ConfigureAwait(false); + await _identityUserStore.RemoveLoginAsync(user, "github", "john"); user.Logins.ShouldNotContain(x => x.LoginProvider == "github" && x.ProviderKey == "john"); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } @@ -363,16 +363,16 @@ namespace Volo.Abp.Identity { using (var uow = _unitOfWorkManager.Begin()) { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - var logins = await _identityUserStore.GetLoginsAsync(user).ConfigureAwait(false); + var logins = await _identityUserStore.GetLoginsAsync(user); logins.ShouldNotBeNull(); logins.ShouldContain(x => x.LoginProvider == "github" && x.ProviderKey == "john"); logins.ShouldContain(x => x.LoginProvider == "twitter" && x.ProviderKey == "johnx"); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } @@ -380,7 +380,7 @@ namespace Volo.Abp.Identity [Fact] public async Task FindByLoginAsync() { - var user = await _identityUserStore.FindByLoginAsync("github", "john").ConfigureAwait(false); + var user = await _identityUserStore.FindByLoginAsync("github", "john"); user.ShouldNotBeNull(); user.UserName.ShouldBe("john.nash"); } @@ -389,21 +389,21 @@ namespace Volo.Abp.Identity [Fact] public async Task GetEmailConfirmedAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - (await _identityUserStore.GetEmailConfirmedAsync(user).ConfigureAwait(false)).ShouldBe(user.EmailConfirmed); + (await _identityUserStore.GetEmailConfirmedAsync(user)).ShouldBe(user.EmailConfirmed); } [Fact] public async Task SetEmailConfirmedAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); var emailConfirmed = user.EmailConfirmed; - await _identityUserStore.SetEmailConfirmedAsync(user, !emailConfirmed).ConfigureAwait(false); + await _identityUserStore.SetEmailConfirmedAsync(user, !emailConfirmed); user.EmailConfirmed.ShouldBe(!emailConfirmed); } @@ -411,10 +411,10 @@ namespace Volo.Abp.Identity [Fact] public async Task SetEmailAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - await _identityUserStore.SetEmailAsync(user, "john.nash.kobe@abp.io").ConfigureAwait(false); + await _identityUserStore.SetEmailAsync(user, "john.nash.kobe@abp.io"); user.Email.ShouldBe("john.nash.kobe@abp.io"); //user.NormalizedEmail.ShouldBe(_lookupNormalizer.Normalize("john.nash.kobe@abp.io")); @@ -423,28 +423,28 @@ namespace Volo.Abp.Identity [Fact] public async Task GetEmailAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - (await _identityUserStore.GetEmailAsync(user).ConfigureAwait(false)).ShouldBe(user.Email); + (await _identityUserStore.GetEmailAsync(user)).ShouldBe(user.Email); } [Fact] public async Task GetNormalizedEmailAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - (await _identityUserStore.GetNormalizedEmailAsync(user).ConfigureAwait(false)).ShouldBe(user.NormalizedEmail); + (await _identityUserStore.GetNormalizedEmailAsync(user)).ShouldBe(user.NormalizedEmail); } [Fact] public async Task SetNormalizedEmailAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - await _identityUserStore.SetNormalizedEmailAsync(user, _lookupNormalizer.NormalizeEmail("john.nash.kobe@abp.io")).ConfigureAwait(false); + await _identityUserStore.SetNormalizedEmailAsync(user, _lookupNormalizer.NormalizeEmail("john.nash.kobe@abp.io")); user.NormalizedEmail.ShouldBe(_lookupNormalizer.NormalizeEmail("john.nash.kobe@abp.io")); } @@ -452,7 +452,7 @@ namespace Volo.Abp.Identity [Fact] public async Task FindByEmailAsync() { - var user = await _identityUserStore.FindByEmailAsync(_lookupNormalizer.NormalizeEmail("john.nash@abp.io")).ConfigureAwait(false); + var user = await _identityUserStore.FindByEmailAsync(_lookupNormalizer.NormalizeEmail("john.nash@abp.io")); user.ShouldNotBeNull(); user.Email.ShouldBe("john.nash@abp.io"); @@ -461,19 +461,19 @@ namespace Volo.Abp.Identity [Fact] public async Task GetLockoutEndDateAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - (await _identityUserStore.GetLockoutEndDateAsync(user).ConfigureAwait(false)).ShouldBe(user.LockoutEnd); + (await _identityUserStore.GetLockoutEndDateAsync(user)).ShouldBe(user.LockoutEnd); } [Fact] public async Task SetLockoutEndDateAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - await _identityUserStore.SetLockoutEndDateAsync(user, DateTimeOffset.Parse("01/01/2019")).ConfigureAwait(false); + await _identityUserStore.SetLockoutEndDateAsync(user, DateTimeOffset.Parse("01/01/2019")); user.LockoutEnd.ShouldBe(DateTimeOffset.Parse("01/01/2019")); } @@ -482,11 +482,11 @@ namespace Volo.Abp.Identity [Fact] public async Task IncrementAccessFailedCountAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); var count = user.AccessFailedCount; - await _identityUserStore.IncrementAccessFailedCountAsync(user).ConfigureAwait(false); + await _identityUserStore.IncrementAccessFailedCountAsync(user); user.AccessFailedCount.ShouldBe(count + 1); } @@ -494,10 +494,10 @@ namespace Volo.Abp.Identity [Fact] public async Task ResetAccessFailedCountAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - await _identityUserStore.ResetAccessFailedCountAsync(user).ConfigureAwait(false); + await _identityUserStore.ResetAccessFailedCountAsync(user); user.AccessFailedCount.ShouldBe(0); } @@ -505,29 +505,29 @@ namespace Volo.Abp.Identity [Fact] public async Task GetAccessFailedCountAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - (await _identityUserStore.GetAccessFailedCountAsync(user).ConfigureAwait(false)).ShouldBe(user.AccessFailedCount); + (await _identityUserStore.GetAccessFailedCountAsync(user)).ShouldBe(user.AccessFailedCount); } [Fact] public async Task GetLockoutEnabledAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - (await _identityUserStore.GetLockoutEnabledAsync(user).ConfigureAwait(false)).ShouldBe(user.LockoutEnabled); + (await _identityUserStore.GetLockoutEnabledAsync(user)).ShouldBe(user.LockoutEnabled); } [Fact] public async Task SetLockoutEnabledAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); var lockoutEnabled = user.LockoutEnabled; - await _identityUserStore.SetLockoutEnabledAsync(user, !lockoutEnabled).ConfigureAwait(false); + await _identityUserStore.SetLockoutEnabledAsync(user, !lockoutEnabled); user.LockoutEnabled.ShouldBe(!lockoutEnabled); } @@ -536,10 +536,10 @@ namespace Volo.Abp.Identity [Fact] public async Task SetPhoneNumberAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - await _identityUserStore.SetPhoneNumberAsync(user, "13800138000").ConfigureAwait(false); + await _identityUserStore.SetPhoneNumberAsync(user, "13800138000"); user.PhoneNumber.ShouldBe("13800138000"); } @@ -548,30 +548,30 @@ namespace Volo.Abp.Identity [Fact] public async Task GetPhoneNumberAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - (await _identityUserStore.GetPhoneNumberAsync(user).ConfigureAwait(false)).ShouldBe(user.PhoneNumber); + (await _identityUserStore.GetPhoneNumberAsync(user)).ShouldBe(user.PhoneNumber); } [Fact] public async Task GetPhoneNumberConfirmedAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - (await _identityUserStore.GetPhoneNumberConfirmedAsync(user).ConfigureAwait(false)).ShouldBe(user.PhoneNumberConfirmed); + (await _identityUserStore.GetPhoneNumberConfirmedAsync(user)).ShouldBe(user.PhoneNumberConfirmed); } [Fact] public async Task SetPhoneNumberConfirmedAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); var phoneNumberConfirmed = user.PhoneNumberConfirmed; - await _identityUserStore.SetPhoneNumberConfirmedAsync(user, !phoneNumberConfirmed).ConfigureAwait(false); + await _identityUserStore.SetPhoneNumberConfirmedAsync(user, !phoneNumberConfirmed); user.PhoneNumberConfirmed.ShouldBe(!phoneNumberConfirmed); } @@ -580,11 +580,11 @@ namespace Volo.Abp.Identity [Fact] public async Task SetSecurityStampAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); var securityStamp = Guid.NewGuid().ToString(); - await _identityUserStore.SetSecurityStampAsync(user, securityStamp).ConfigureAwait(false); + await _identityUserStore.SetSecurityStampAsync(user, securityStamp); user.SecurityStamp.ShouldBe(securityStamp); } @@ -592,21 +592,21 @@ namespace Volo.Abp.Identity [Fact] public async Task GetSecurityStampAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - (await _identityUserStore.GetSecurityStampAsync(user).ConfigureAwait(false)).ShouldBe(user.SecurityStamp); + (await _identityUserStore.GetSecurityStampAsync(user)).ShouldBe(user.SecurityStamp); } [Fact] public async Task SetTwoFactorEnabledAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); var twoFactorEnabled = user.TwoFactorEnabled; - await _identityUserStore.SetTwoFactorEnabledAsync(user, !twoFactorEnabled).ConfigureAwait(false); + await _identityUserStore.SetTwoFactorEnabledAsync(user, !twoFactorEnabled); user.TwoFactorEnabled.ShouldBe(!twoFactorEnabled); } @@ -615,16 +615,16 @@ namespace Volo.Abp.Identity [Fact] public async Task GetTwoFactorEnabledAsync() { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - (await _identityUserStore.GetTwoFactorEnabledAsync(user).ConfigureAwait(false)).ShouldBe(user.TwoFactorEnabled); + (await _identityUserStore.GetTwoFactorEnabledAsync(user)).ShouldBe(user.TwoFactorEnabled); } [Fact] public async Task GetUsersForClaimAsync() { - var user = await _identityUserStore.GetUsersForClaimAsync(new Claim("TestClaimType", "42")).ConfigureAwait(false); + var user = await _identityUserStore.GetUsersForClaimAsync(new Claim("TestClaimType", "42")); user.ShouldNotBeNull(); user.ShouldNotBeEmpty(); user.ShouldContain(x => x.UserName == "john.nash"); @@ -633,7 +633,7 @@ namespace Volo.Abp.Identity [Fact] public async Task GetUsersInRoleAsync() { - var user = await _identityUserStore.GetUsersInRoleAsync(_lookupNormalizer.NormalizeName("moderator")).ConfigureAwait(false); + var user = await _identityUserStore.GetUsersInRoleAsync(_lookupNormalizer.NormalizeName("moderator")); user.ShouldNotBeNull(); user.ShouldContain(x => x.UserName == "john.nash"); } @@ -643,15 +643,15 @@ namespace Volo.Abp.Identity { using (var uow = _unitOfWorkManager.Begin()) { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - await _identityUserStore.SetTokenAsync(user, "test-provider", "test-name", "123123").ConfigureAwait(false); + await _identityUserStore.SetTokenAsync(user, "test-provider", "test-name", "123123"); user.Tokens.ShouldNotBeEmpty(); user.Tokens.ShouldContain(x => x.LoginProvider == "test-provider" && x.Name == "test-name" && x.Value == "123123"); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } @@ -660,14 +660,14 @@ namespace Volo.Abp.Identity { using (var uow = _unitOfWorkManager.Begin()) { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - await _identityUserStore.RemoveTokenAsync(user, "test-provider", "test-name").ConfigureAwait(false); + await _identityUserStore.RemoveTokenAsync(user, "test-provider", "test-name"); user.Tokens.ShouldNotContain(x => x.LoginProvider == "test-provider" && x.Name == "test-name" && x.Value == "123123"); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } @@ -676,12 +676,12 @@ namespace Volo.Abp.Identity { using (var uow = _unitOfWorkManager.Begin()) { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - (await _identityUserStore.GetTokenAsync(user, "test-provider", "test-name").ConfigureAwait(false)).ShouldBe("test-value"); + (await _identityUserStore.GetTokenAsync(user, "test-provider", "test-name")).ShouldBe("test-value"); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } @@ -690,14 +690,14 @@ namespace Volo.Abp.Identity { using (var uow = _unitOfWorkManager.Begin()) { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - await _identityUserStore.SetAuthenticatorKeyAsync(user, "testKey").ConfigureAwait(false); + await _identityUserStore.SetAuthenticatorKeyAsync(user, "testKey"); user.Tokens.ShouldContain(x => x.LoginProvider == "[AspNetUserStore]" && x.Name == "AuthenticatorKey" && x.Value == "testKey"); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } @@ -706,13 +706,13 @@ namespace Volo.Abp.Identity { using (var uow = _unitOfWorkManager.Begin()) { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - await _identityUserStore.SetAuthenticatorKeyAsync(user, "testKey").ConfigureAwait(false); + await _identityUserStore.SetAuthenticatorKeyAsync(user, "testKey"); - (await _identityUserStore.GetAuthenticatorKeyAsync(user).ConfigureAwait(false)).ShouldBe("testKey"); + (await _identityUserStore.GetAuthenticatorKeyAsync(user)).ShouldBe("testKey"); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } @@ -722,13 +722,13 @@ namespace Volo.Abp.Identity { using (var uow = _unitOfWorkManager.Begin()) { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - await _identityUserStore.SetTokenAsync(user, "[AspNetUserStore]", "RecoveryCodes", "testKey;testKey2").ConfigureAwait(false); + await _identityUserStore.SetTokenAsync(user, "[AspNetUserStore]", "RecoveryCodes", "testKey;testKey2"); - (await _identityUserStore.CountCodesAsync(user).ConfigureAwait(false)).ShouldBe(2); + (await _identityUserStore.CountCodesAsync(user)).ShouldBe(2); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } @@ -737,18 +737,18 @@ namespace Volo.Abp.Identity { using (var uow = _unitOfWorkManager.Begin()) { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); await _identityUserStore.ReplaceCodesAsync(user, new List() { "testKey", "testKey2" - }).ConfigureAwait(false); + }); user.Tokens.ShouldContain(x => x.LoginProvider == "[AspNetUserStore]" && x.Name == "RecoveryCodes" && x.Value == "testKey;testKey2"); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } @@ -757,13 +757,13 @@ namespace Volo.Abp.Identity { using (var uow = _unitOfWorkManager.Begin()) { - var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash")); user.ShouldNotBeNull(); - await _identityUserStore.SetTokenAsync(user, "[AspNetUserStore]", "RecoveryCodes", "testKey;testKey2").ConfigureAwait(false); + await _identityUserStore.SetTokenAsync(user, "[AspNetUserStore]", "RecoveryCodes", "testKey;testKey2"); - (await _identityUserStore.RedeemCodeAsync(user, "testKey").ConfigureAwait(false)).ShouldBeTrue(); + (await _identityUserStore.RedeemCodeAsync(user, "testKey")).ShouldBeTrue(); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } } diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/PermissionManager_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/PermissionManager_Tests.cs index a098ba92c6..621cb4621f 100644 --- a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/PermissionManager_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/PermissionManager_Tests.cs @@ -24,19 +24,19 @@ namespace Volo.Abp.Identity public async Task Roles_Should_Have_Configured_Permissions() { //admin - var grantInfos = await _permissionManager.GetAllForRoleAsync("admin").ConfigureAwait(false); + var grantInfos = await _permissionManager.GetAllForRoleAsync("admin"); RoleShouldHavePermission(grantInfos, "admin", TestPermissionNames.MyPermission1); RoleShouldHavePermission(grantInfos, "admin", TestPermissionNames.MyPermission2); RoleShouldHavePermission(grantInfos, "admin", TestPermissionNames.MyPermission2_ChildPermission1); //moderator - grantInfos = await _permissionManager.GetAllForRoleAsync("moderator").ConfigureAwait(false); + grantInfos = await _permissionManager.GetAllForRoleAsync("moderator"); RoleShouldHavePermission(grantInfos, "moderator", TestPermissionNames.MyPermission1); RoleShouldHavePermission(grantInfos, "moderator", TestPermissionNames.MyPermission2); ShouldNotHavePermission(grantInfos, TestPermissionNames.MyPermission2_ChildPermission1); //supporter - grantInfos = await _permissionManager.GetAllForRoleAsync("supporter").ConfigureAwait(false); + grantInfos = await _permissionManager.GetAllForRoleAsync("supporter"); RoleShouldHavePermission(grantInfos, "supporter", TestPermissionNames.MyPermission1); ShouldNotHavePermission(grantInfos, TestPermissionNames.MyPermission2); ShouldNotHavePermission(grantInfos, TestPermissionNames.MyPermission2_ChildPermission1); @@ -45,21 +45,21 @@ namespace Volo.Abp.Identity [Fact] public async Task Should_Grant_Permission_To_Role() { - (await _permissionManager.GetForRoleAsync("supporter", TestPermissionNames.MyPermission2).ConfigureAwait(false)).IsGranted.ShouldBeFalse(); - (await _permissionStore.IsGrantedAsync(TestPermissionNames.MyPermission2, RolePermissionValueProvider.ProviderName, "supporter").ConfigureAwait(false)).ShouldBeFalse(); + (await _permissionManager.GetForRoleAsync("supporter", TestPermissionNames.MyPermission2)).IsGranted.ShouldBeFalse(); + (await _permissionStore.IsGrantedAsync(TestPermissionNames.MyPermission2, RolePermissionValueProvider.ProviderName, "supporter")).ShouldBeFalse(); - await _permissionManager.SetForRoleAsync("supporter", TestPermissionNames.MyPermission2, true).ConfigureAwait(false); + await _permissionManager.SetForRoleAsync("supporter", TestPermissionNames.MyPermission2, true); - (await _permissionManager.GetForRoleAsync("supporter", TestPermissionNames.MyPermission2).ConfigureAwait(false)).IsGranted.ShouldBeTrue(); - (await _permissionStore.IsGrantedAsync(TestPermissionNames.MyPermission2, RolePermissionValueProvider.ProviderName, "supporter").ConfigureAwait(false)).ShouldBeTrue(); + (await _permissionManager.GetForRoleAsync("supporter", TestPermissionNames.MyPermission2)).IsGranted.ShouldBeTrue(); + (await _permissionStore.IsGrantedAsync(TestPermissionNames.MyPermission2, RolePermissionValueProvider.ProviderName, "supporter")).ShouldBeTrue(); } [Fact] public async Task Should_Revoke_Permission_From_Role() { - (await _permissionManager.GetForRoleAsync("moderator", TestPermissionNames.MyPermission1).ConfigureAwait(false)).IsGranted.ShouldBeTrue(); - await _permissionManager.SetForRoleAsync("moderator", TestPermissionNames.MyPermission1, false).ConfigureAwait(false); - (await _permissionManager.GetForRoleAsync("moderator", TestPermissionNames.MyPermission1).ConfigureAwait(false)).IsGranted.ShouldBeFalse(); + (await _permissionManager.GetForRoleAsync("moderator", TestPermissionNames.MyPermission1)).IsGranted.ShouldBeTrue(); + await _permissionManager.SetForRoleAsync("moderator", TestPermissionNames.MyPermission1, false); + (await _permissionManager.GetForRoleAsync("moderator", TestPermissionNames.MyPermission1)).IsGranted.ShouldBeFalse(); } [Fact] @@ -67,21 +67,21 @@ namespace Volo.Abp.Identity { //administrator var user = GetUser("administrator"); - var grantInfos = await _permissionManager.GetAllForUserAsync(user.Id).ConfigureAwait(false); + var grantInfos = await _permissionManager.GetAllForUserAsync(user.Id); UserShouldHavePermission(grantInfos, user.Id, TestPermissionNames.MyPermission1, "admin"); UserShouldHavePermission(grantInfos, user.Id, TestPermissionNames.MyPermission2, "admin"); UserShouldHavePermission(grantInfos, user.Id, TestPermissionNames.MyPermission2_ChildPermission1, "admin"); //john.nash user = GetUser("john.nash"); - grantInfos = await _permissionManager.GetAllForUserAsync(user.Id).ConfigureAwait(false); + grantInfos = await _permissionManager.GetAllForUserAsync(user.Id); UserShouldHavePermission(grantInfos, user.Id, TestPermissionNames.MyPermission1, "moderator", "supporter"); UserShouldHavePermission(grantInfos, user.Id, TestPermissionNames.MyPermission2, "moderator"); ShouldNotHavePermission(grantInfos, TestPermissionNames.MyPermission2_ChildPermission1); //john.nash user = GetUser("david"); - grantInfos = await _permissionManager.GetAllForUserAsync(user.Id).ConfigureAwait(false); + grantInfos = await _permissionManager.GetAllForUserAsync(user.Id); UserShouldHavePermission(grantInfos, user.Id, TestPermissionNames.MyPermission1); ShouldNotHavePermission(grantInfos, TestPermissionNames.MyPermission2); ShouldNotHavePermission(grantInfos, TestPermissionNames.MyPermission2_ChildPermission1); diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/RoleChangingEvents_Test.cs b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/RoleChangingEvents_Test.cs index 1a4405c9e4..c3c24a29cc 100644 --- a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/RoleChangingEvents_Test.cs +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/RoleChangingEvents_Test.cs @@ -33,25 +33,25 @@ namespace Volo.Abp.Identity { var role = await RoleRepository .FindByNormalizedNameAsync(LookupNormalizer.NormalizeName("moderator")) - .ConfigureAwait(false); + ; - var permissionGrantsInRole = await PermissionGrantRepository.GetListAsync("R", role.Name).ConfigureAwait(false); + var permissionGrantsInRole = await PermissionGrantRepository.GetListAsync("R", role.Name); permissionGrantsInRole.ShouldNotBeNull(); permissionGrantsInRole.Count.ShouldBeGreaterThan(0); var count = permissionGrantsInRole.Count; using (var uow = UowManager.Begin()) { - var identityResult = await RoleManager.SetRoleNameAsync(role, "TestModerator").ConfigureAwait(false); + var identityResult = await RoleManager.SetRoleNameAsync(role, "TestModerator"); identityResult.Succeeded.ShouldBeTrue(); - var xx = await RoleRepository.UpdateAsync(role).ConfigureAwait(false); - await uow.CompleteAsync().ConfigureAwait(false); + var xx = await RoleRepository.UpdateAsync(role); + await uow.CompleteAsync(); } - role = await RoleRepository.GetAsync(role.Id).ConfigureAwait(false); + role = await RoleRepository.GetAsync(role.Id); role.Name.ShouldBe("TestModerator"); - permissionGrantsInRole = await PermissionGrantRepository.GetListAsync("R", role.Name).ConfigureAwait(false); + permissionGrantsInRole = await PermissionGrantRepository.GetListAsync("R", role.Name); permissionGrantsInRole.Count.ShouldBe(count); } } diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/TestPermissionDataBuilder.cs b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/TestPermissionDataBuilder.cs index c53592d567..ad94e914b5 100644 --- a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/TestPermissionDataBuilder.cs +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/TestPermissionDataBuilder.cs @@ -29,26 +29,26 @@ namespace Volo.Abp.Identity public async Task Build() { - await AddRolePermissions().ConfigureAwait(false); - await AddUserPermissions().ConfigureAwait(false); + await AddRolePermissions(); + await AddUserPermissions(); } private async Task AddRolePermissions() { - await AddPermission(TestPermissionNames.MyPermission1, RolePermissionValueProvider.ProviderName, "admin").ConfigureAwait(false); - await AddPermission(TestPermissionNames.MyPermission2, RolePermissionValueProvider.ProviderName, "admin").ConfigureAwait(false); - await AddPermission(TestPermissionNames.MyPermission2_ChildPermission1, RolePermissionValueProvider.ProviderName, "admin").ConfigureAwait(false); + await AddPermission(TestPermissionNames.MyPermission1, RolePermissionValueProvider.ProviderName, "admin"); + await AddPermission(TestPermissionNames.MyPermission2, RolePermissionValueProvider.ProviderName, "admin"); + await AddPermission(TestPermissionNames.MyPermission2_ChildPermission1, RolePermissionValueProvider.ProviderName, "admin"); - await AddPermission(TestPermissionNames.MyPermission1, RolePermissionValueProvider.ProviderName, "moderator").ConfigureAwait(false); - await AddPermission(TestPermissionNames.MyPermission2, RolePermissionValueProvider.ProviderName, "moderator").ConfigureAwait(false); + await AddPermission(TestPermissionNames.MyPermission1, RolePermissionValueProvider.ProviderName, "moderator"); + await AddPermission(TestPermissionNames.MyPermission2, RolePermissionValueProvider.ProviderName, "moderator"); - await AddPermission(TestPermissionNames.MyPermission1, RolePermissionValueProvider.ProviderName, "supporter").ConfigureAwait(false); + await AddPermission(TestPermissionNames.MyPermission1, RolePermissionValueProvider.ProviderName, "supporter"); } private async Task AddUserPermissions() { var david = AsyncHelper.RunSync(() => _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("david"))); - await AddPermission(TestPermissionNames.MyPermission1, UserPermissionValueProvider.ProviderName, david.Id.ToString()).ConfigureAwait(false); + await AddPermission(TestPermissionNames.MyPermission1, UserPermissionValueProvider.ProviderName, david.Id.ToString()); } private async Task AddPermission(string permissionName, string providerName, string providerKey) @@ -60,7 +60,7 @@ namespace Volo.Abp.Identity providerName, providerKey ) - ).ConfigureAwait(false); + ); } } } diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/UserRoleFinder_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/UserRoleFinder_Tests.cs index a8f2159fc2..ef06949500 100644 --- a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/UserRoleFinder_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/UserRoleFinder_Tests.cs @@ -21,7 +21,7 @@ namespace Volo.Abp.Identity [Fact] public async Task GetRolesAsync() { - var roleNames = await _userRoleFinder.GetRolesAsync(_testData.UserJohnId).ConfigureAwait(false); + var roleNames = await _userRoleFinder.GetRolesAsync(_testData.UserJohnId); roleNames.ShouldNotBeEmpty(); roleNames.ShouldContain(x => x == "moderator"); roleNames.ShouldContain(x => x == "supporter"); diff --git a/modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/FodyWeavers.xml b/modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/FodyWeavers.xml +++ b/modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identity/test/Volo.Abp.Identity.MongoDB.Tests/FodyWeavers.xml b/modules/identity/test/Volo.Abp.Identity.MongoDB.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identity/test/Volo.Abp.Identity.MongoDB.Tests/FodyWeavers.xml +++ b/modules/identity/test/Volo.Abp.Identity.MongoDB.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identity/test/Volo.Abp.Identity.TestBase/FodyWeavers.xml b/modules/identity/test/Volo.Abp.Identity.TestBase/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identity/test/Volo.Abp.Identity.TestBase/FodyWeavers.xml +++ b/modules/identity/test/Volo.Abp.Identity.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/AbpIdentityTestBaseModule.cs b/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/AbpIdentityTestBaseModule.cs index 0c8c545b8c..4b956ab16d 100644 --- a/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/AbpIdentityTestBaseModule.cs +++ b/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/AbpIdentityTestBaseModule.cs @@ -32,10 +32,10 @@ namespace Volo.Abp.Identity var dataSeeder = scope.ServiceProvider.GetRequiredService(); AsyncHelper.RunSync(async () => { - await dataSeeder.SeedAsync().ConfigureAwait(false); + await dataSeeder.SeedAsync(); await scope.ServiceProvider .GetRequiredService() - .Build().ConfigureAwait(false); + .Build(); }); } } diff --git a/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/AbpIdentityTestDataBuilder.cs b/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/AbpIdentityTestDataBuilder.cs index ad36fe69a7..69361ff5a8 100644 --- a/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/AbpIdentityTestDataBuilder.cs +++ b/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/AbpIdentityTestDataBuilder.cs @@ -37,21 +37,21 @@ namespace Volo.Abp.Identity public async Task Build() { - await AddRoles().ConfigureAwait(false); - await AddUsers().ConfigureAwait(false); - await AddClaimTypes().ConfigureAwait(false); + await AddRoles(); + await AddUsers(); + await AddClaimTypes(); } private async Task AddRoles() { - _adminRole = await _roleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("admin")).ConfigureAwait(false); + _adminRole = await _roleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("admin")); _moderator = new IdentityRole(_testData.RoleModeratorId, "moderator"); _moderator.AddClaim(_guidGenerator, new Claim("test-claim", "test-value")); - await _roleRepository.InsertAsync(_moderator).ConfigureAwait(false); + await _roleRepository.InsertAsync(_moderator); _supporterRole = new IdentityRole(_guidGenerator.Create(), "supporter"); - await _roleRepository.InsertAsync(_supporterRole).ConfigureAwait(false); + await _roleRepository.InsertAsync(_supporterRole); } private async Task AddUsers() @@ -59,7 +59,7 @@ namespace Volo.Abp.Identity var adminUser = new IdentityUser(_guidGenerator.Create(), "administrator", "admin@abp.io"); adminUser.AddRole(_adminRole.Id); adminUser.AddClaim(_guidGenerator, new Claim("TestClaimType", "42")); - await _userRepository.InsertAsync(adminUser).ConfigureAwait(false); + await _userRepository.InsertAsync(adminUser); var john = new IdentityUser(_testData.UserJohnId, "john.nash", "john.nash@abp.io"); john.AddRole(_moderator.Id); @@ -68,23 +68,23 @@ namespace Volo.Abp.Identity john.AddLogin(new UserLoginInfo("twitter", "johnx", "John Nash")); john.AddClaim(_guidGenerator, new Claim("TestClaimType", "42")); john.SetToken("test-provider", "test-name", "test-value"); - await _userRepository.InsertAsync(john).ConfigureAwait(false); + await _userRepository.InsertAsync(john); var david = new IdentityUser(_testData.UserDavidId, "david", "david@abp.io"); - await _userRepository.InsertAsync(david).ConfigureAwait(false); + await _userRepository.InsertAsync(david); var neo = new IdentityUser(_testData.UserNeoId, "neo", "neo@abp.io"); neo.AddRole(_supporterRole.Id); neo.AddClaim(_guidGenerator, new Claim("TestClaimType", "43")); - await _userRepository.InsertAsync(neo).ConfigureAwait(false); + await _userRepository.InsertAsync(neo); } private async Task AddClaimTypes() { var ageClaim = new IdentityClaimType(_testData.AgeClaimId, "Age", false, false, null, null, null,IdentityClaimValueType.Int); - await _identityClaimTypeRepository.InsertAsync(ageClaim).ConfigureAwait(false); + await _identityClaimTypeRepository.InsertAsync(ageClaim); var educationClaim = new IdentityClaimType(_testData.EducationClaimId, "Education", true, false, null, null, null); - await _identityClaimTypeRepository.InsertAsync(educationClaim).ConfigureAwait(false); + await _identityClaimTypeRepository.InsertAsync(educationClaim); } } } \ No newline at end of file diff --git a/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityClaimTypeRepository_Tests.cs b/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityClaimTypeRepository_Tests.cs index afe117d421..3250c0b04a 100644 --- a/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityClaimTypeRepository_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityClaimTypeRepository_Tests.cs @@ -28,11 +28,11 @@ namespace Volo.Abp.Identity { var claim = (await ClaimTypeRepository.GetListAsync()).FirstOrDefault(); - var result1 = await ClaimTypeRepository.AnyAsync(claim.Name).ConfigureAwait(false); + var result1 = await ClaimTypeRepository.AnyAsync(claim.Name); result1.ShouldBe(true); - var result2 = await ClaimTypeRepository.AnyAsync(Guid.NewGuid().ToString()).ConfigureAwait(false); + var result2 = await ClaimTypeRepository.AnyAsync(Guid.NewGuid().ToString()); result2.ShouldBe(false); } diff --git a/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityDataSeeder_Tests.cs b/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityDataSeeder_Tests.cs index 0b6692f419..65eac5bc9d 100644 --- a/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityDataSeeder_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityDataSeeder_Tests.cs @@ -25,11 +25,11 @@ namespace Volo.Abp.Identity [Fact] public async Task Should_Create_Admin_User_And_Role() { - await _identityDataSeeder.SeedAsync("admin@abp.io", "1q2w3E*").ConfigureAwait(false); + await _identityDataSeeder.SeedAsync("admin@abp.io", "1q2w3E*"); - (await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("admin")).ConfigureAwait(false)).ShouldNotBeNull(); - (await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("admin")).ConfigureAwait(false)).Name.ShouldBe("admin"); - (await _roleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("admin")).ConfigureAwait(false)).ShouldNotBeNull(); + (await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("admin"))).ShouldNotBeNull(); + (await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("admin"))).Name.ShouldBe("admin"); + (await _roleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("admin"))).ShouldNotBeNull(); } } } diff --git a/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityRoleRepository_Tests.cs b/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityRoleRepository_Tests.cs index cd7ee1eb32..e4a15d15f1 100644 --- a/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityRoleRepository_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityRoleRepository_Tests.cs @@ -23,14 +23,14 @@ namespace Volo.Abp.Identity [Fact] public async Task FindByNormalizedNameAsync() { - (await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.NormalizeName("admin")).ConfigureAwait(false)).ShouldNotBeNull(); - (await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.NormalizeName("undefined-role")).ConfigureAwait(false)).ShouldBeNull(); + (await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.NormalizeName("admin"))).ShouldNotBeNull(); + (await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.NormalizeName("undefined-role"))).ShouldBeNull(); } [Fact] public async Task GetListAsync() { - var roles = await RoleRepository.GetListAsync().ConfigureAwait(false); + var roles = await RoleRepository.GetListAsync(); roles.ShouldContain(r => r.Name == "admin"); roles.ShouldContain(r => r.Name == "moderator"); roles.ShouldContain(r => r.Name == "supporter"); @@ -39,13 +39,13 @@ namespace Volo.Abp.Identity [Fact] public async Task GetCountAsync() { - (await RoleRepository.GetCountAsync().ConfigureAwait(false)).ShouldBeGreaterThan(0); + (await RoleRepository.GetCountAsync()).ShouldBeGreaterThan(0); } [Fact] public async Task Should_Eager_Load_Role_Collections() { - var role = await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.NormalizeName("moderator")).ConfigureAwait(false); + var role = await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.NormalizeName("moderator")); role.Claims.ShouldNotBeNull(); role.Claims.Any().ShouldBeTrue(); } diff --git a/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityUserRepository_Tests.cs b/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityUserRepository_Tests.cs index 98f25f6aee..4fa407a512 100644 --- a/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityUserRepository_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityUserRepository_Tests.cs @@ -25,23 +25,23 @@ namespace Volo.Abp.Identity [Fact] public async Task FindByNormalizedUserNameAsync() { - (await UserRepository.FindByNormalizedUserNameAsync(LookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false)).ShouldNotBeNull(); - (await UserRepository.FindByNormalizedUserNameAsync(LookupNormalizer.NormalizeName("undefined-user")).ConfigureAwait(false)).ShouldBeNull(); + (await UserRepository.FindByNormalizedUserNameAsync(LookupNormalizer.NormalizeName("john.nash"))).ShouldNotBeNull(); + (await UserRepository.FindByNormalizedUserNameAsync(LookupNormalizer.NormalizeName("undefined-user"))).ShouldBeNull(); } [Fact] public async Task FindByNormalizedEmailAsync() { - (await UserRepository.FindByNormalizedEmailAsync(LookupNormalizer.NormalizeEmail("john.nash@abp.io")).ConfigureAwait(false)).ShouldNotBeNull(); - (await UserRepository.FindByNormalizedEmailAsync(LookupNormalizer.NormalizeEmail("david@abp.io")).ConfigureAwait(false)).ShouldNotBeNull(); - (await UserRepository.FindByNormalizedEmailAsync(LookupNormalizer.NormalizeEmail("undefined-user@abp.io")).ConfigureAwait(false)).ShouldBeNull(); + (await UserRepository.FindByNormalizedEmailAsync(LookupNormalizer.NormalizeEmail("john.nash@abp.io"))).ShouldNotBeNull(); + (await UserRepository.FindByNormalizedEmailAsync(LookupNormalizer.NormalizeEmail("david@abp.io"))).ShouldNotBeNull(); + (await UserRepository.FindByNormalizedEmailAsync(LookupNormalizer.NormalizeEmail("undefined-user@abp.io"))).ShouldBeNull(); } [Fact] public async Task GetRoleNamesAsync() { - var john = await UserRepository.FindByNormalizedUserNameAsync(LookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); - var roles = await UserRepository.GetRoleNamesAsync(john.Id).ConfigureAwait(false); + var john = await UserRepository.FindByNormalizedUserNameAsync(LookupNormalizer.NormalizeName("john.nash")); + var roles = await UserRepository.GetRoleNamesAsync(john.Id); roles.Count.ShouldBe(2); roles.ShouldContain("moderator"); roles.ShouldContain("supporter"); @@ -50,37 +50,37 @@ namespace Volo.Abp.Identity [Fact] public async Task FindByLoginAsync() { - var user = await UserRepository.FindByLoginAsync("github", "john").ConfigureAwait(false); + var user = await UserRepository.FindByLoginAsync("github", "john"); user.ShouldNotBeNull(); user.UserName.ShouldBe("john.nash"); - user = await UserRepository.FindByLoginAsync("twitter", "johnx").ConfigureAwait(false); + user = await UserRepository.FindByLoginAsync("twitter", "johnx"); user.ShouldNotBeNull(); user.UserName.ShouldBe("john.nash"); - (await UserRepository.FindByLoginAsync("github", "undefinedid").ConfigureAwait(false)).ShouldBeNull(); + (await UserRepository.FindByLoginAsync("github", "undefinedid")).ShouldBeNull(); } [Fact] public async Task GetListByClaimAsync() { - var users = await UserRepository.GetListByClaimAsync(new Claim("TestClaimType", "42")).ConfigureAwait(false); + var users = await UserRepository.GetListByClaimAsync(new Claim("TestClaimType", "42")); users.Count.ShouldBe(2); users.ShouldContain(u => u.UserName == "administrator"); users.ShouldContain(u => u.UserName == "john.nash"); - users = await UserRepository.GetListByClaimAsync(new Claim("TestClaimType", "43")).ConfigureAwait(false); + users = await UserRepository.GetListByClaimAsync(new Claim("TestClaimType", "43")); users.Count.ShouldBe(1); users.ShouldContain(u => u.UserName == "neo"); - users = await UserRepository.GetListByClaimAsync(new Claim("TestClaimType", "undefined")).ConfigureAwait(false); + users = await UserRepository.GetListByClaimAsync(new Claim("TestClaimType", "undefined")); users.Count.ShouldBe(0); } [Fact] public async Task GetListByNormalizedRoleNameAsync() { - var users = await UserRepository.GetListByNormalizedRoleNameAsync(LookupNormalizer.NormalizeName("supporter")).ConfigureAwait(false); + var users = await UserRepository.GetListByNormalizedRoleNameAsync(LookupNormalizer.NormalizeName("supporter")); users.Count.ShouldBe(2); users.ShouldContain(u => u.UserName == "john.nash"); users.ShouldContain(u => u.UserName == "neo"); @@ -89,7 +89,7 @@ namespace Volo.Abp.Identity [Fact] public async Task GetListAsync() { - var users = await UserRepository.GetListAsync("UserName DESC", 5, 0, "n").ConfigureAwait(false); + var users = await UserRepository.GetListAsync("UserName DESC", 5, 0, "n"); users.Count.ShouldBeGreaterThan(1); users.Count.ShouldBeLessThanOrEqualTo(5); @@ -107,15 +107,15 @@ namespace Volo.Abp.Identity ).ShouldBeGreaterThan(0); } - users = await UserRepository.GetListAsync(null, 999, 0, "undefined-username").ConfigureAwait(false); + users = await UserRepository.GetListAsync(null, 999, 0, "undefined-username"); users.Count.ShouldBe(0); } [Fact] public async Task GetRolesAsync() { - var john = await UserRepository.FindByNormalizedUserNameAsync(LookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); - var roles = await UserRepository.GetRolesAsync(john.Id).ConfigureAwait(false); + var john = await UserRepository.FindByNormalizedUserNameAsync(LookupNormalizer.NormalizeName("john.nash")); + var roles = await UserRepository.GetRolesAsync(john.Id); roles.Count.ShouldBe(2); roles.ShouldContain(r => r.Name == "moderator"); roles.ShouldContain(r => r.Name == "supporter"); @@ -124,14 +124,14 @@ namespace Volo.Abp.Identity [Fact] public async Task GetCountAsync() { - (await UserRepository.GetCountAsync("n").ConfigureAwait(false)).ShouldBeGreaterThan(1); - (await UserRepository.GetCountAsync("undefined-username").ConfigureAwait(false)).ShouldBe(0); + (await UserRepository.GetCountAsync("n")).ShouldBeGreaterThan(1); + (await UserRepository.GetCountAsync("undefined-username")).ShouldBe(0); } [Fact] public async Task Should_Eager_Load_User_Collections() { - var john = await UserRepository.FindByNormalizedUserNameAsync(LookupNormalizer.NormalizeName("john.nash")).ConfigureAwait(false); + var john = await UserRepository.FindByNormalizedUserNameAsync(LookupNormalizer.NormalizeName("john.nash")); john.Roles.ShouldNotBeNull(); john.Roles.Any().ShouldBeTrue(); diff --git a/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/LazyLoading_Tests.cs b/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/LazyLoading_Tests.cs index 3313803436..1ae671dd4f 100644 --- a/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/LazyLoading_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/LazyLoading_Tests.cs @@ -28,11 +28,11 @@ namespace Volo.Abp.Identity { using (var uow = GetRequiredService().Begin()) { - var role = await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.NormalizeName("moderator"), includeDetails: false).ConfigureAwait(false); + var role = await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.NormalizeName("moderator"), includeDetails: false); role.Claims.ShouldNotBeNull(); role.Claims.Any().ShouldBeTrue(); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } @@ -41,7 +41,7 @@ namespace Volo.Abp.Identity { using (var uow = GetRequiredService().Begin()) { - var john = await UserRepository.FindByNormalizedUserNameAsync(LookupNormalizer.NormalizeName("john.nash"), includeDetails: false).ConfigureAwait(false); + var john = await UserRepository.FindByNormalizedUserNameAsync(LookupNormalizer.NormalizeName("john.nash"), includeDetails: false); john.Roles.ShouldNotBeNull(); john.Roles.Any().ShouldBeTrue(); @@ -55,7 +55,7 @@ namespace Volo.Abp.Identity john.Tokens.ShouldNotBeNull(); john.Tokens.Any().ShouldBeTrue(); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/FodyWeavers.xml b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/FodyWeavers.xml +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/FodyWeavers.xml b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/FodyWeavers.xml +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpCorsPolicyService.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpCorsPolicyService.cs index c445b7e90e..9113051a4a 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpCorsPolicyService.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpCorsPolicyService.cs @@ -28,7 +28,7 @@ namespace Volo.Abp.IdentityServer public async Task IsOriginAllowedAsync(string origin) { - var cacheItem = await Cache.GetOrAddAsync(AllowedCorsOriginsCacheItem.AllOrigins, CreateCacheItemAsync).ConfigureAwait(false); + var cacheItem = await Cache.GetOrAddAsync(AllowedCorsOriginsCacheItem.AllOrigins, CreateCacheItemAsync); var isAllowed = cacheItem.AllowedOrigins.Contains(origin, StringComparer.OrdinalIgnoreCase); @@ -49,7 +49,7 @@ namespace Volo.Abp.IdentityServer return new AllowedCorsOriginsCacheItem { - AllowedOrigins = (await clientRepository.GetAllDistinctAllowedCorsOriginsAsync().ConfigureAwait(false)).ToArray() + AllowedOrigins = (await clientRepository.GetAllDistinctAllowedCorsOriginsAsync()).ToArray() }; } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AllowedCorsOriginsCacheItemInvalidator.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AllowedCorsOriginsCacheItemInvalidator.cs index 0a05e1781e..80bc425d5c 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AllowedCorsOriginsCacheItemInvalidator.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AllowedCorsOriginsCacheItemInvalidator.cs @@ -21,12 +21,12 @@ namespace Volo.Abp.IdentityServer public async Task HandleEventAsync(EntityChangedEventData eventData) { - await Cache.RemoveAsync(AllowedCorsOriginsCacheItem.AllOrigins).ConfigureAwait(false); + await Cache.RemoveAsync(AllowedCorsOriginsCacheItem.AllOrigins); } public async Task HandleEventAsync(EntityChangedEventData eventData) { - await Cache.RemoveAsync(AllowedCorsOriginsCacheItem.AllOrigins).ConfigureAwait(false); + await Cache.RemoveAsync(AllowedCorsOriginsCacheItem.AllOrigins); } } } \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpProfileService.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpProfileService.cs index 93a1fb5bbe..f3bca6dba9 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpProfileService.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpProfileService.cs @@ -28,7 +28,7 @@ namespace Volo.Abp.IdentityServer.AspNetIdentity { using (_currentTenant.Change(context.Subject.FindTenantId())) { - await base.GetProfileDataAsync(context).ConfigureAwait(false); + await base.GetProfileDataAsync(context); } } @@ -37,7 +37,7 @@ namespace Volo.Abp.IdentityServer.AspNetIdentity { using (_currentTenant.Change(context.Subject.FindTenantId())) { - await base.IsActiveAsync(context).ConfigureAwait(false); + await base.IsActiveAsync(context); } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpResourceOwnerPasswordValidator.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpResourceOwnerPasswordValidator.cs index 86f704c27a..68489a1bdb 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpResourceOwnerPasswordValidator.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpResourceOwnerPasswordValidator.cs @@ -43,22 +43,22 @@ namespace Volo.Abp.IdentityServer.AspNetIdentity [UnitOfWork] public virtual async Task ValidateAsync(ResourceOwnerPasswordValidationContext context) { - await ReplaceEmailToUsernameOfInputIfNeeds(context).ConfigureAwait(false); + await ReplaceEmailToUsernameOfInputIfNeeds(context); - var user = await _userManager.FindByNameAsync(context.UserName).ConfigureAwait(false); + var user = await _userManager.FindByNameAsync(context.UserName); if (user != null) { - var result = await _signInManager.CheckPasswordSignInAsync(user, context.Password, true).ConfigureAwait(false); + var result = await _signInManager.CheckPasswordSignInAsync(user, context.Password, true); if (result.Succeeded) { - var sub = await _userManager.GetUserIdAsync(user).ConfigureAwait(false); + var sub = await _userManager.GetUserIdAsync(user); _logger.LogInformation("Credentials validated for username: {username}", context.UserName); - await _events.RaiseAsync(new UserLoginSuccessEvent(context.UserName, sub, context.UserName, interactive: false)).ConfigureAwait(false); + await _events.RaiseAsync(new UserLoginSuccessEvent(context.UserName, sub, context.UserName, interactive: false)); var additionalClaims = new List(); - await AddCustomClaimsAsync(additionalClaims, user, context).ConfigureAwait(false); + await AddCustomClaimsAsync(additionalClaims, user, context); context.Result = new GrantValidationResult( sub, @@ -71,23 +71,23 @@ namespace Volo.Abp.IdentityServer.AspNetIdentity else if (result.IsLockedOut) { _logger.LogInformation("Authentication failed for username: {username}, reason: locked out", context.UserName); - await _events.RaiseAsync(new UserLoginFailureEvent(context.UserName, "locked out", interactive: false)).ConfigureAwait(false); + await _events.RaiseAsync(new UserLoginFailureEvent(context.UserName, "locked out", interactive: false)); } else if (result.IsNotAllowed) { _logger.LogInformation("Authentication failed for username: {username}, reason: not allowed", context.UserName); - await _events.RaiseAsync(new UserLoginFailureEvent(context.UserName, "not allowed", interactive: false)).ConfigureAwait(false); + await _events.RaiseAsync(new UserLoginFailureEvent(context.UserName, "not allowed", interactive: false)); } else { _logger.LogInformation("Authentication failed for username: {username}, reason: invalid credentials", context.UserName); - await _events.RaiseAsync(new UserLoginFailureEvent(context.UserName, "invalid credentials", interactive: false)).ConfigureAwait(false); + await _events.RaiseAsync(new UserLoginFailureEvent(context.UserName, "invalid credentials", interactive: false)); } } else { _logger.LogInformation("No user found matching username: {username}", context.UserName); - await _events.RaiseAsync(new UserLoginFailureEvent(context.UserName, "invalid username", interactive: false)).ConfigureAwait(false); + await _events.RaiseAsync(new UserLoginFailureEvent(context.UserName, "invalid username", interactive: false)); } context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant); @@ -100,13 +100,13 @@ namespace Volo.Abp.IdentityServer.AspNetIdentity return; } - var userByUsername = await _userManager.FindByNameAsync(context.UserName).ConfigureAwait(false); + var userByUsername = await _userManager.FindByNameAsync(context.UserName); if (userByUsername != null) { return; } - var userByEmail = await _userManager.FindByEmailAsync(context.UserName).ConfigureAwait(false); + var userByEmail = await _userManager.FindByEmailAsync(context.UserName); if (userByEmail == null) { return; diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientStore.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientStore.cs index 8ba8aea7e3..0e88b658cd 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientStore.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientStore.cs @@ -17,7 +17,7 @@ namespace Volo.Abp.IdentityServer.Clients public virtual async Task FindClientByIdAsync(string clientId) { - var client = await _clientRepository.FindByCliendIdAsync(clientId).ConfigureAwait(false); + var client = await _clientRepository.FindByCliendIdAsync(clientId); return _objectMapper.Map(client); } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowStore.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowStore.cs index 4bd55ab2c6..0f0021f9a4 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowStore.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowStore.cs @@ -44,7 +44,7 @@ namespace Volo.Abp.IdentityServer.Devices Expiration = data.CreationTime.AddSeconds(data.Lifetime), Data = Serialize(data) } - ).ConfigureAwait(false); + ); } public async Task FindByUserCodeAsync(string userCode) @@ -53,7 +53,7 @@ namespace Volo.Abp.IdentityServer.Devices var deviceCodes = await DeviceFlowCodesRepository .FindByUserCodeAsync(userCode) - .ConfigureAwait(false); + ; if (deviceCodes == null) { @@ -69,7 +69,7 @@ namespace Volo.Abp.IdentityServer.Devices var deviceCodes = await DeviceFlowCodesRepository .FindByDeviceCodeAsync(deviceCode) - .ConfigureAwait(false); + ; if (deviceCodes == null) { @@ -87,7 +87,7 @@ namespace Volo.Abp.IdentityServer.Devices var deviceCodes = await DeviceFlowCodesRepository .FindByUserCodeAsync(userCode) - .ConfigureAwait(false); + ; if (deviceCodes == null) { @@ -99,7 +99,7 @@ namespace Volo.Abp.IdentityServer.Devices await DeviceFlowCodesRepository .UpdateAsync(deviceCodes, autoSave: true) - .ConfigureAwait(false); + ; } public async Task RemoveByDeviceCodeAsync(string deviceCode) @@ -108,7 +108,7 @@ namespace Volo.Abp.IdentityServer.Devices var deviceCodes = await DeviceFlowCodesRepository .FindByDeviceCodeAsync(deviceCode) - .ConfigureAwait(false); + ; if (deviceCodes == null) { @@ -117,7 +117,7 @@ namespace Volo.Abp.IdentityServer.Devices await DeviceFlowCodesRepository .DeleteAsync(deviceCodes, autoSave: true) - .ConfigureAwait(false); + ; } private string Serialize([CanBeNull] DeviceCode deviceCode) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/PersistedGrantStore.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/PersistedGrantStore.cs index 9cf855e105..e58dae6daf 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/PersistedGrantStore.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/PersistedGrantStore.cs @@ -24,51 +24,51 @@ namespace Volo.Abp.IdentityServer.Grants public virtual async Task StoreAsync(IdentityServer4.Models.PersistedGrant grant) { - var entity = await _persistentGrantRepository.FindByKeyAsync(grant.Key).ConfigureAwait(false); + var entity = await _persistentGrantRepository.FindByKeyAsync(grant.Key); if (entity == null) { entity = _objectMapper.Map(grant); EntityHelper.TrySetId(entity, () => _guidGenerator.Create()); - await _persistentGrantRepository.InsertAsync(entity).ConfigureAwait(false); + await _persistentGrantRepository.InsertAsync(entity); } else { _objectMapper.Map(grant, entity); - await _persistentGrantRepository.UpdateAsync(entity).ConfigureAwait(false); + await _persistentGrantRepository.UpdateAsync(entity); } } public virtual async Task GetAsync(string key) { - var persistedGrant = await _persistentGrantRepository.FindByKeyAsync(key).ConfigureAwait(false); + var persistedGrant = await _persistentGrantRepository.FindByKeyAsync(key); return _objectMapper.Map(persistedGrant); } public virtual async Task> GetAllAsync(string subjectId) { - var persistedGrants = await _persistentGrantRepository.GetListBySubjectIdAsync(subjectId).ConfigureAwait(false); + var persistedGrants = await _persistentGrantRepository.GetListBySubjectIdAsync(subjectId); return persistedGrants.Select(x => _objectMapper.Map(x)); } public virtual async Task RemoveAsync(string key) { - var persistedGrant = await _persistentGrantRepository.FindByKeyAsync(key).ConfigureAwait(false); + var persistedGrant = await _persistentGrantRepository.FindByKeyAsync(key); if (persistedGrant == null) { return; } - await _persistentGrantRepository.DeleteAsync(persistedGrant).ConfigureAwait(false); + await _persistentGrantRepository.DeleteAsync(persistedGrant); } public virtual async Task RemoveAllAsync(string subjectId, string clientId) { - await _persistentGrantRepository.DeleteAsync(subjectId, clientId).ConfigureAwait(false); + await _persistentGrantRepository.DeleteAsync(subjectId, clientId); } public virtual async Task RemoveAllAsync(string subjectId, string clientId, string type) { - await _persistentGrantRepository.DeleteAsync(subjectId, clientId, type).ConfigureAwait(false); + await _persistentGrantRepository.DeleteAsync(subjectId, clientId, type); } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceDataSeeder.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceDataSeeder.cs index 8c828b970c..024f8bea13 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceDataSeeder.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceDataSeeder.cs @@ -37,16 +37,16 @@ namespace Volo.Abp.IdentityServer.IdentityResources { foreach (var claimType in resource.UserClaims) { - await AddClaimTypeIfNotExistsAsync(claimType).ConfigureAwait(false); + await AddClaimTypeIfNotExistsAsync(claimType); } - await AddIdentityResourceIfNotExistsAsync(resource).ConfigureAwait(false); + await AddIdentityResourceIfNotExistsAsync(resource); } } protected virtual async Task AddIdentityResourceIfNotExistsAsync(IdentityServer4.Models.IdentityResource resource) { - if (await IdentityResourceRepository.CheckNameExistAsync(resource.Name).ConfigureAwait(false)) + if (await IdentityResourceRepository.CheckNameExistAsync(resource.Name)) { return; } @@ -56,12 +56,12 @@ namespace Volo.Abp.IdentityServer.IdentityResources GuidGenerator.Create(), resource ) - ).ConfigureAwait(false); + ); } protected virtual async Task AddClaimTypeIfNotExistsAsync(string claimType) { - if (await ClaimTypeRepository.AnyAsync(claimType).ConfigureAwait(false)) + if (await ClaimTypeRepository.AnyAsync(claimType)) { return; } @@ -72,7 +72,7 @@ namespace Volo.Abp.IdentityServer.IdentityResources claimType, isStatic: true ) - ).ConfigureAwait(false); + ); } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Jwt/JwtTokenMiddleware.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Jwt/JwtTokenMiddleware.cs index 58d3205dc2..57ca9cc4c2 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Jwt/JwtTokenMiddleware.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Jwt/JwtTokenMiddleware.cs @@ -13,14 +13,14 @@ namespace Volo.Abp.IdentityServer.Jwt { if (ctx.User.Identity?.IsAuthenticated != true) { - var result = await ctx.AuthenticateAsync(schema).ConfigureAwait(false); + var result = await ctx.AuthenticateAsync(schema); if (result.Succeeded && result.Principal != null) { ctx.User = result.Principal; } } - await next().ConfigureAwait(false); + await next(); }); } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ResourceStore.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ResourceStore.cs index 0b8b5016a7..56275bb386 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ResourceStore.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ResourceStore.cs @@ -29,26 +29,26 @@ namespace Volo.Abp.IdentityServer public virtual async Task> FindIdentityResourcesByScopeAsync(IEnumerable scopeNames) { - var resource = await _identityResourceRepository.GetListByScopesAsync(scopeNames.ToArray(), includeDetails: true).ConfigureAwait(false); + var resource = await _identityResourceRepository.GetListByScopesAsync(scopeNames.ToArray(), includeDetails: true); return _objectMapper.Map, List>(resource); } public virtual async Task> FindApiResourcesByScopeAsync(IEnumerable scopeNames) { - var resources = await _apiResourceRepository.GetListByScopesAsync(scopeNames.ToArray(), includeDetails: true).ConfigureAwait(false); + var resources = await _apiResourceRepository.GetListByScopesAsync(scopeNames.ToArray(), includeDetails: true); return resources.Select(x => _objectMapper.Map(x)); } public virtual async Task FindApiResourceAsync(string name) { - var resource = await _apiResourceRepository.FindByNameAsync(name).ConfigureAwait(false); + var resource = await _apiResourceRepository.FindByNameAsync(name); return _objectMapper.Map(resource); } public virtual async Task GetAllResourcesAsync() { - var identityResources = await _identityResourceRepository.GetListAsync(includeDetails: true).ConfigureAwait(false); - var apiResources = await _apiResourceRepository.GetListAsync(includeDetails: true).ConfigureAwait(false); + var identityResources = await _identityResourceRepository.GetListAsync(includeDetails: true); + var apiResources = await _apiResourceRepository.GetListAsync(includeDetails: true); return new Resources( _objectMapper.Map, IdentityServer4.Models.IdentityResource[]>(identityResources), diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupBackgroundWorker.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupBackgroundWorker.cs index 4bec8318eb..e910a3b30f 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupBackgroundWorker.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupBackgroundWorker.cs @@ -28,7 +28,7 @@ namespace Volo.Abp.IdentityServer.Tokens .ServiceProvider .GetRequiredService() .CleanAsync() - .ConfigureAwait(false); + ; } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupService.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupService.cs index ac38f792c1..dfa66b9e88 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupService.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Tokens/TokenCleanupService.cs @@ -30,10 +30,9 @@ namespace Volo.Abp.IdentityServer.Tokens public virtual async Task CleanAsync() { await RemoveGrantsAsync() - .ConfigureAwait(false); + ; - await RemoveDeviceCodesAsync() - .ConfigureAwait(false); + await RemoveDeviceCodesAsync(); } [UnitOfWork] @@ -42,15 +41,13 @@ namespace Volo.Abp.IdentityServer.Tokens for (int i = 0; i < Options.CleanupLoopCount; i++) { var persistentGrants = await PersistentGrantRepository - .GetListByExpirationAsync(Clock.Now, Options.CleanupBatchSize) - .ConfigureAwait(false); + .GetListByExpirationAsync(Clock.Now, Options.CleanupBatchSize); //TODO: Can be optimized if the repository implements the batch deletion foreach (var persistentGrant in persistentGrants) { await PersistentGrantRepository - .DeleteAsync(persistentGrant) - .ConfigureAwait(false); + .DeleteAsync(persistentGrant); } //No need to continue to query if it gets more than max items. @@ -66,15 +63,13 @@ namespace Volo.Abp.IdentityServer.Tokens for (int i = 0; i < Options.CleanupLoopCount; i++) { var deviceFlowCodeses = await DeviceFlowCodesRepository - .GetListByExpirationAsync(Clock.Now, Options.CleanupBatchSize) - .ConfigureAwait(false); + .GetListByExpirationAsync(Clock.Now, Options.CleanupBatchSize); //TODO: Can be optimized if the repository implements the batch deletion foreach (var deviceFlowCodes in deviceFlowCodeses) { await DeviceFlowCodesRepository - .DeleteAsync(deviceFlowCodes) - .ConfigureAwait(false); + .DeleteAsync(deviceFlowCodes); } //No need to continue to query if it gets more than max items. diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/FodyWeavers.xml b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs index ec038afac6..5f7d6369af 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs @@ -28,7 +28,7 @@ namespace Volo.Abp.IdentityServer.ApiResources select apiResource; return await query - .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); } public virtual async Task> GetListByScopesAsync( @@ -40,7 +40,7 @@ namespace Volo.Abp.IdentityServer.ApiResources where api.Scopes.Any(x => scopeNames.Contains(x.Name)) select api; - return await query.ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + return await query.ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task> GetListAsync(string sorting, int skipCount, int maxResultCount, bool includeDetails = false, @@ -49,7 +49,7 @@ namespace Volo.Abp.IdentityServer.ApiResources return await DbSet .IncludeDetails(includeDetails).OrderBy(sorting ?? "name desc") .PageBy(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task> GetListAsync( @@ -58,12 +58,12 @@ namespace Volo.Abp.IdentityServer.ApiResources { return await DbSet .IncludeDetails(includeDetails) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task CheckNameExistAsync(string name, Guid? expectedId = null, CancellationToken cancellationToken = default) { - return await DbSet.AnyAsync(ar => ar.Id != expectedId && ar.Name == name, cancellationToken: cancellationToken).ConfigureAwait(false); + return await DbSet.AnyAsync(ar => ar.Id != expectedId && ar.Name == name, cancellationToken: cancellationToken); } public override async Task DeleteAsync(Guid id, bool autoSave = false, CancellationToken cancellationToken = default) @@ -82,7 +82,7 @@ namespace Volo.Abp.IdentityServer.ApiResources DbContext.Set().Remove(scope); } - await base.DeleteAsync(id, autoSave, cancellationToken).ConfigureAwait(false); + await base.DeleteAsync(id, autoSave, cancellationToken); } public override IQueryable WithDetails() diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs index 4dc5134ff6..44218470fd 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.IdentityServer.Clients { return await DbSet .IncludeDetails(includeDetails) - .FirstOrDefaultAsync(x => x.ClientId == clientId, GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .FirstOrDefaultAsync(x => x.ClientId == clientId, GetCancellationToken(cancellationToken)); } public virtual async Task> GetListAsync(string sorting, int skipCount, int maxResultCount, bool includeDetails = false, @@ -34,7 +34,7 @@ namespace Volo.Abp.IdentityServer.Clients return await DbSet .IncludeDetails(includeDetails).OrderBy(sorting ?? nameof(Client.ClientName) + " desc") .PageBy(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task> GetAllDistinctAllowedCorsOriginsAsync(CancellationToken cancellationToken = default) @@ -42,12 +42,12 @@ namespace Volo.Abp.IdentityServer.Clients return await DbContext.ClientCorsOrigins .Select(x => x.Origin) .Distinct() - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task CheckClientIdExistAsync(string clientId, Guid? expectedId = null, CancellationToken cancellationToken = default) { - return await DbSet.AnyAsync(c => c.Id != expectedId && c.ClientId == clientId, cancellationToken: cancellationToken).ConfigureAwait(false); + return await DbSet.AnyAsync(c => c.Id != expectedId && c.ClientId == clientId, cancellationToken: cancellationToken); } public override IQueryable WithDetails() diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs index a8d2bce3ce..3a10d21046 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.IdentityServer.Devices { return await DbSet .FirstOrDefaultAsync(d => d.UserCode == userCode, GetCancellationToken(cancellationToken)) - .ConfigureAwait(false); + ; } public async Task FindByDeviceCodeAsync( @@ -33,8 +33,7 @@ namespace Volo.Abp.IdentityServer.Devices CancellationToken cancellationToken = default) { return await DbSet - .FirstOrDefaultAsync(d => d.DeviceCode == deviceCode, GetCancellationToken(cancellationToken)) - .ConfigureAwait(false); + .FirstOrDefaultAsync(d => d.DeviceCode == deviceCode, GetCancellationToken(cancellationToken)); } public async Task> GetListByExpirationAsync(DateTime maxExpirationDate, int maxResultCount, @@ -44,8 +43,7 @@ namespace Volo.Abp.IdentityServer.Devices .Where(x => x.Expiration != null && x.Expiration < maxExpirationDate) .OrderBy(x => x.ClientId) .Take(maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)) - .ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistedGrantRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistedGrantRepository.cs index cf208c7875..76c02d1122 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistedGrantRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistedGrantRepository.cs @@ -24,7 +24,7 @@ namespace Volo.Abp.IdentityServer.Grants { return await DbSet .FirstOrDefaultAsync(x => x.Key == key, GetCancellationToken(cancellationToken)) - .ConfigureAwait(false); + ; } public async Task> GetListBySubjectIdAsync( @@ -33,8 +33,7 @@ namespace Volo.Abp.IdentityServer.Grants { return await DbSet .Where(x => x.SubjectId == subjectId) - .ToListAsync(GetCancellationToken(cancellationToken)) - .ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task> GetListByExpirationAsync( @@ -46,8 +45,7 @@ namespace Volo.Abp.IdentityServer.Grants .Where(x => x.Expiration != null && x.Expiration < maxExpirationDate) .OrderBy(x => x.ClientId) .Take(maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)) - .ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task DeleteAsync( @@ -58,7 +56,7 @@ namespace Volo.Abp.IdentityServer.Grants await DeleteAsync( x => x.SubjectId == subjectId && x.ClientId == clientId, cancellationToken: GetCancellationToken(cancellationToken) - ).ConfigureAwait(false); + ); } public async Task DeleteAsync( @@ -70,7 +68,7 @@ namespace Volo.Abp.IdentityServer.Grants await DeleteAsync( x => x.SubjectId == subjectId && x.ClientId == clientId && x.Type == type, cancellationToken: GetCancellationToken(cancellationToken) - ).ConfigureAwait(false); + ); } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceRepository.cs index d5d05c5e9a..20789ecca8 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceRepository.cs @@ -28,7 +28,7 @@ namespace Volo.Abp.IdentityServer.IdentityResources where scopeNames.Contains(identityResource.Name) select identityResource; - return await query.ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + return await query.ToListAsync(GetCancellationToken(cancellationToken)); } public override IQueryable WithDetails() @@ -43,7 +43,7 @@ namespace Volo.Abp.IdentityServer.IdentityResources .IncludeDetails(includeDetails) .OrderBy(sorting ?? "name desc") .PageBy(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task FindByNameAsync( @@ -54,12 +54,12 @@ namespace Volo.Abp.IdentityServer.IdentityResources return await DbSet .IncludeDetails(includeDetails) .Where(x => x.Name == name) - .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); } public async Task CheckNameExistAsync(string name, Guid? expectedId = null, CancellationToken cancellationToken = default) { - return await DbSet.AnyAsync(ir => ir.Id != expectedId && ir.Name == name, cancellationToken: cancellationToken).ConfigureAwait(false); + return await DbSet.AnyAsync(ir => ir.Id != expectedId && ir.Name == name, cancellationToken: cancellationToken); } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/FodyWeavers.xml b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/FodyWeavers.xml +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiResourceRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiResourceRepository.cs index 008d34f322..45b69c82f7 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiResourceRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiResourceRepository.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.IdentityServer.MongoDB { return await GetMongoQueryable() .Where(ar => ar.Name == name) - .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); } public virtual async Task> GetListByScopesAsync(string[] scopeNames, bool includeDetails = false, @@ -30,7 +30,7 @@ namespace Volo.Abp.IdentityServer.MongoDB { return await GetMongoQueryable() .Where(ar => ar.Scopes.Any(x => scopeNames.Contains(x.Name))) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task> GetListAsync(string sorting, int skipCount, int maxResultCount, bool includeDetails = false, @@ -40,17 +40,17 @@ namespace Volo.Abp.IdentityServer.MongoDB .OrderBy(sorting ?? nameof(ApiResource.Name)) .As>() .PageBy>(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task GetTotalCount() { - return await GetCountAsync().ConfigureAwait(false); + return await GetCountAsync(); } public async Task CheckNameExistAsync(string name, Guid? expectedId = null, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().AnyAsync(ar => ar.Id != expectedId && ar.Name == name, cancellationToken: cancellationToken).ConfigureAwait(false); + return await GetMongoQueryable().AnyAsync(ar => ar.Id != expectedId && ar.Name == name, cancellationToken: cancellationToken); } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs index 6e371717ba..61488edc3d 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs @@ -26,7 +26,7 @@ namespace Volo.Abp.IdentityServer.MongoDB bool includeDetails = true, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().FirstOrDefaultAsync(x => x.ClientId == clientId, GetCancellationToken(cancellationToken)).ConfigureAwait(false); + return await GetMongoQueryable().FirstOrDefaultAsync(x => x.ClientId == clientId, GetCancellationToken(cancellationToken)); } public virtual async Task> GetListAsync( @@ -40,7 +40,7 @@ namespace Volo.Abp.IdentityServer.MongoDB .OrderBy(sorting ?? nameof(Client.ClientName)) .As>() .PageBy>(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task> GetAllDistinctAllowedCorsOriginsAsync( @@ -50,17 +50,17 @@ namespace Volo.Abp.IdentityServer.MongoDB .SelectMany(x => x.AllowedCorsOrigins) .Select(y => y.Origin) .Distinct() - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task CheckClientIdExistAsync(string clientId, Guid? expectedId = null, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().AnyAsync(c => c.Id != expectedId && c.ClientId == clientId, cancellationToken: cancellationToken).ConfigureAwait(false); + return await GetMongoQueryable().AnyAsync(c => c.Id != expectedId && c.ClientId == clientId, cancellationToken: cancellationToken); } public virtual async Task GetTotalCount() { - return await GetCountAsync().ConfigureAwait(false); + return await GetCountAsync(); } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs index 86daac80a9..44cb86a744 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs @@ -25,14 +25,13 @@ namespace Volo.Abp.IdentityServer.MongoDB { return await GetMongoQueryable() .FirstOrDefaultAsync(d => d.UserCode == userCode, GetCancellationToken(cancellationToken)) - .ConfigureAwait(false); + ; } public async Task FindByDeviceCodeAsync(string deviceCode, CancellationToken cancellationToken = default) { return await GetMongoQueryable() - .FirstOrDefaultAsync(d => d.DeviceCode == deviceCode, GetCancellationToken(cancellationToken)) - .ConfigureAwait(false); + .FirstOrDefaultAsync(d => d.DeviceCode == deviceCode, GetCancellationToken(cancellationToken)); } public async Task> GetListByExpirationAsync( @@ -44,8 +43,7 @@ namespace Volo.Abp.IdentityServer.MongoDB .Where(x => x.Expiration != null && x.Expiration < maxExpirationDate) .OrderBy(x => x.ClientId) .Take(maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)) - .ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } } } \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs index eefd4d325c..d25faa9622 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs @@ -24,7 +24,7 @@ namespace Volo.Abp.IdentityServer.MongoDB .OrderBy(sorting ?? nameof(IdentityResource.Name)) .As>() .PageBy>(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task FindByNameAsync( @@ -34,7 +34,7 @@ namespace Volo.Abp.IdentityServer.MongoDB { return await GetMongoQueryable() .Where(x => x.Name == name) - .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); } public async Task> GetListByScopesAsync(string[] scopeNames, bool includeDetails = false, @@ -42,17 +42,17 @@ namespace Volo.Abp.IdentityServer.MongoDB { return await GetMongoQueryable() .Where(ar => scopeNames.Contains(ar.Name)) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task GetTotalCountAsync() { - return await GetCountAsync().ConfigureAwait(false); + return await GetCountAsync(); } public async Task CheckNameExistAsync(string name, Guid? expectedId = null, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().AnyAsync(ir => ir.Id != expectedId && ir.Name == name, cancellationToken: cancellationToken).ConfigureAwait(false); + return await GetMongoQueryable().AnyAsync(ir => ir.Id != expectedId && ir.Name == name, cancellationToken: cancellationToken); } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoPersistedGrantRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoPersistedGrantRepository.cs index 4b414482db..e63bc27805 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoPersistedGrantRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoPersistedGrantRepository.cs @@ -20,7 +20,7 @@ namespace Volo.Abp.IdentityServer.MongoDB { return await GetMongoQueryable() - .FirstOrDefaultAsync(x => x.Key == key, GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .FirstOrDefaultAsync(x => x.Key == key, GetCancellationToken(cancellationToken)); } public async Task> GetListBySubjectIdAsync(string subjectId, CancellationToken cancellationToken = default) @@ -28,7 +28,7 @@ namespace Volo.Abp.IdentityServer.MongoDB return await GetMongoQueryable() .Where(x => x.SubjectId == subjectId) .ToListAsync(GetCancellationToken(cancellationToken)) - .ConfigureAwait(false); + ; } public async Task> GetListByExpirationAsync(DateTime maxExpirationDate, int maxResultCount, @@ -38,8 +38,7 @@ namespace Volo.Abp.IdentityServer.MongoDB .Where(x => x.Expiration != null && x.Expiration < maxExpirationDate) .OrderBy(x => x.ClientId) .Take(maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)) - .ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task DeleteAsync(string subjectId, string clientId, CancellationToken cancellationToken = default) @@ -47,7 +46,7 @@ namespace Volo.Abp.IdentityServer.MongoDB await DeleteAsync( x => x.SubjectId == subjectId && x.ClientId == clientId, cancellationToken: GetCancellationToken(cancellationToken) - ).ConfigureAwait(false); + ); } public async Task DeleteAsync(string subjectId, string clientId, string type, CancellationToken cancellationToken = default) @@ -55,7 +54,7 @@ namespace Volo.Abp.IdentityServer.MongoDB await DeleteAsync( x => x.SubjectId == subjectId && x.ClientId == clientId && x.Type == type, cancellationToken: GetCancellationToken(cancellationToken) - ).ConfigureAwait(false); + ); } } } diff --git a/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/FodyWeavers.xml b/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/FodyWeavers.xml +++ b/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/FodyWeavers.xml b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/FodyWeavers.xml +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Clients/ClientStore_Tests.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Clients/ClientStore_Tests.cs index a5b1540a1b..e89f385b57 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Clients/ClientStore_Tests.cs +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Clients/ClientStore_Tests.cs @@ -18,7 +18,7 @@ namespace Volo.Abp.IdentityServer.Clients [Fact] public async Task FindClientByIdAsync_Should_Return_Null_If_Not_Found() { - var client = await _clientStore.FindClientByIdAsync("non-existing-id").ConfigureAwait(false); + var client = await _clientStore.FindClientByIdAsync("non-existing-id"); client.ShouldBeNull(); } @@ -26,7 +26,7 @@ namespace Volo.Abp.IdentityServer.Clients public async Task FindClientByIdAsync_Should_Return_The_Client_If_Found() { //Act - var client = await _clientStore.FindClientByIdAsync("42").ConfigureAwait(false); + var client = await _clientStore.FindClientByIdAsync("42"); //Assert client.ShouldNotBeNull(); diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs index 9e7bdfc99a..a313c2717f 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.IdentityServer.Clients public async Task FindApiResourceAsync_Should_Return_Null_If_Not_Found() { //Act - var resource = await _resourceStore.FindApiResourceAsync("non-existing-name").ConfigureAwait(false); + var resource = await _resourceStore.FindApiResourceAsync("non-existing-name"); //Assert resource.ShouldBeNull(); @@ -32,7 +32,7 @@ namespace Volo.Abp.IdentityServer.Clients public async Task FindApiResourceAsync_Should_Return_If_Found() { //Act - var apiResource = await _resourceStore.FindApiResourceAsync("Test-ApiResource-Name-1").ConfigureAwait(false); + var apiResource = await _resourceStore.FindApiResourceAsync("Test-ApiResource-Name-1"); //Assert apiResource.ShouldNotBe(null); @@ -48,7 +48,7 @@ namespace Volo.Abp.IdentityServer.Clients var apiResources = (await _resourceStore.FindApiResourcesByScopeAsync(new List { "Test-ApiResource-ApiScope-Name-1" - }).ConfigureAwait(false)).ToList(); + })).ToList(); //Assert apiResources.ShouldNotBe(null); @@ -63,7 +63,7 @@ namespace Volo.Abp.IdentityServer.Clients var identityResourcesByScope = await _resourceStore.FindIdentityResourcesByScopeAsync(new List { "Test-Identity-Resource-Name-1" - }).ConfigureAwait(false); + }); //Assert var resourcesByScope = identityResourcesByScope as IdentityResource[] ?? identityResourcesByScope.ToArray(); @@ -77,7 +77,7 @@ namespace Volo.Abp.IdentityServer.Clients public async Task GetAllResourcesAsync_Should_Return() { //Act - var resources = await _resourceStore.GetAllResourcesAsync().ConfigureAwait(false); + var resources = await _resourceStore.GetAllResourcesAsync(); //Assert resources.ShouldNotBe(null); diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs index 7df9936183..8e83f57c51 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs @@ -21,7 +21,7 @@ namespace Volo.Abp.IdentityServer.Clients [Fact] public async Task FindClientByIdAsync_Should_Return_Null_If_Not_Found() { - var persistentGrant = await _persistedGrantStore.GetAsync("not-existing-id").ConfigureAwait(false); + var persistentGrant = await _persistedGrantStore.GetAsync("not-existing-id"); persistentGrant.ShouldBeNull(); } @@ -29,7 +29,7 @@ namespace Volo.Abp.IdentityServer.Clients public async Task FindPersistentGrantByIdAsync_Should_Return_The_PersistentGrant_If_Found() { //Act - var client = await _persistedGrantStore.GetAsync("38").ConfigureAwait(false); + var client = await _persistedGrantStore.GetAsync("38"); //Assert client.ShouldNotBeNull(); @@ -52,10 +52,10 @@ namespace Volo.Abp.IdentityServer.Clients Data = "TestData-39", Expiration = new DateTime(2018, 1, 6, 21, 22, 23), CreationTime = new DateTime(2018, 1, 5, 19, 20, 21) - }).ConfigureAwait(false); + }); //Assert - var persistedGrant = await _persistedGrantStore.GetAsync("39").ConfigureAwait(false); + var persistedGrant = await _persistedGrantStore.GetAsync("39"); persistedGrant.Key.ShouldBe("39"); persistedGrant.ClientId.ShouldBe("TestClientId-39"); persistedGrant.Type.ShouldBe("TestType-39"); @@ -92,10 +92,10 @@ namespace Volo.Abp.IdentityServer.Clients Data = "TestData-PersistedGrantKey1", Expiration = new DateTime(2018, 1, 6, 21, 22, 23), CreationTime = new DateTime(2018, 1, 5, 19, 20, 21) - }).ConfigureAwait(false); + }); //Assert - var persistedGrant = await _persistedGrantStore.GetAsync("PersistedGrantKey1").ConfigureAwait(false); + var persistedGrant = await _persistedGrantStore.GetAsync("PersistedGrantKey1"); persistedGrant.Key.ShouldBe("PersistedGrantKey1"); persistedGrant.ClientId.ShouldBe("TestClientId-PersistedGrantKey1"); persistedGrant.Type.ShouldBe("TestType-PersistedGrantKey1"); @@ -122,7 +122,7 @@ namespace Volo.Abp.IdentityServer.Clients public async Task GetAllAsync_Should_Get_All_PersistedGrants_For_A_Given_SubjectId() { //Act - var persistentGrants = await _persistedGrantStore.GetAllAsync("TestSubject").ConfigureAwait(false); + var persistentGrants = await _persistedGrantStore.GetAllAsync("TestSubject"); //Assert var persistedGrants = persistentGrants as PersistedGrant[] ?? persistentGrants.ToArray(); @@ -142,13 +142,13 @@ namespace Volo.Abp.IdentityServer.Clients Type = "Type", ClientId = "ClientId", Data = "" - }).ConfigureAwait(false); + }); //Act - await _persistedGrantStore.RemoveAsync("#1P3R").ConfigureAwait(false); + await _persistedGrantStore.RemoveAsync("#1P3R"); //Assert - var persistedGrant = await _persistedGrantStore.GetAsync("#1P3R").ConfigureAwait(false); + var persistedGrant = await _persistedGrantStore.GetAsync("#1P3R"); persistedGrant.ShouldBe(null); } @@ -156,16 +156,16 @@ namespace Volo.Abp.IdentityServer.Clients public async Task RemoveAllAsync_Should_RemoveAll_PeristedGrants_For_A_Given_Subject_And_ClientId() { //Arrange - var persistedGrantsWithTestSubjectX = await _persistedGrantStore.GetAllAsync("TestSubject-X").ConfigureAwait(false); + var persistedGrantsWithTestSubjectX = await _persistedGrantStore.GetAllAsync("TestSubject-X"); var persistedGrantsWithTestSubjectXBeforeLength = persistedGrantsWithTestSubjectX.ToArray().Length; //Act - await _persistedGrantStore.RemoveAllAsync("TestSubject-X", "TestClientId-X").ConfigureAwait(false); + await _persistedGrantStore.RemoveAllAsync("TestSubject-X", "TestClientId-X"); //Assert persistedGrantsWithTestSubjectXBeforeLength.ShouldBe(2); - var persistedGrants = (await _persistedGrantStore.GetAllAsync("TestClientId-37").ConfigureAwait(false)).ToArray(); + var persistedGrants = (await _persistedGrantStore.GetAllAsync("TestClientId-37")).ToArray(); persistedGrants.ShouldNotBe(null); persistedGrants.Length.ShouldBe(0); } diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/CorsPolicyService_Tests.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/CorsPolicyService_Tests.cs index cdbea763c6..af701cfc69 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/CorsPolicyService_Tests.cs +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.Domain.Tests/Volo/Abp/IdentityServer/CorsPolicyService_Tests.cs @@ -23,27 +23,27 @@ namespace Volo.Abp.IdentityServer [Fact] public async Task IsOriginAllowedAsync() { - (await _corsPolicyService.IsOriginAllowedAsync("https://client1-origin.com").ConfigureAwait(false)).ShouldBeTrue(); - (await _corsPolicyService.IsOriginAllowedAsync("https://unknown-origin.com").ConfigureAwait(false)).ShouldBeFalse(); + (await _corsPolicyService.IsOriginAllowedAsync("https://client1-origin.com")).ShouldBeTrue(); + (await _corsPolicyService.IsOriginAllowedAsync("https://unknown-origin.com")).ShouldBeFalse(); } [Fact] public async Task IsOriginAllowedAsync_Should_Invalidate_Cache_On_Update() { //It does not exists before - (await _corsPolicyService.IsOriginAllowedAsync("https://new-origin.com").ConfigureAwait(false)).ShouldBeFalse(); + (await _corsPolicyService.IsOriginAllowedAsync("https://new-origin.com")).ShouldBeFalse(); using (var uow = _unitOfWorkManager.Begin()) { - var client1 = await _clientRepository.FindByCliendIdAsync("ClientId1").ConfigureAwait(false); + var client1 = await _clientRepository.FindByCliendIdAsync("ClientId1"); client1.AddCorsOrigin("https://new-origin.com"); - await _clientRepository.UpdateAsync(client1).ConfigureAwait(false); + await _clientRepository.UpdateAsync(client1); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } //It does exists now - (await _corsPolicyService.IsOriginAllowedAsync("https://new-origin.com").ConfigureAwait(false)).ShouldBeTrue(); + (await _corsPolicyService.IsOriginAllowedAsync("https://new-origin.com")).ShouldBeTrue(); } } } diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/FodyWeavers.xml b/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/FodyWeavers.xml +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs index d7e0716151..0d87a2fd19 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs @@ -39,10 +39,10 @@ namespace Volo.Abp.IdentityServer public async Task BuildAsync() { - await AddClients().ConfigureAwait(false); - await AddPersistentGrants().ConfigureAwait(false); - await AddApiResources().ConfigureAwait(false); - await AddIdentityResources().ConfigureAwait(false); + await AddClients(); + await AddPersistentGrants(); + await AddApiResources(); + await AddIdentityResources(); } private async Task AddClients() @@ -56,7 +56,7 @@ namespace Volo.Abp.IdentityServer client42.AddScope("api1"); - await _clientRepository.InsertAsync(client42).ConfigureAwait(false); + await _clientRepository.InsertAsync(client42); } private async Task AddPersistentGrants() @@ -68,7 +68,7 @@ namespace Volo.Abp.IdentityServer Type = "TestType-38", SubjectId = "TestSubject", Data = "TestData-38" - }).ConfigureAwait(false); + }); await _persistentGrantRepository.InsertAsync(new PersistedGrant(_guidGenerator.Create()) { @@ -77,7 +77,7 @@ namespace Volo.Abp.IdentityServer Type = "TestType-37", SubjectId = "TestSubject", Data = "TestData-37" - }).ConfigureAwait(false); + }); await _persistentGrantRepository.InsertAsync(new PersistedGrant(_guidGenerator.Create()) { @@ -86,7 +86,7 @@ namespace Volo.Abp.IdentityServer Type = "TestType-36", SubjectId = "TestSubject-X", Data = "TestData-36" - }).ConfigureAwait(false); + }); await _persistentGrantRepository.InsertAsync(new PersistedGrant(_guidGenerator.Create()) { @@ -95,7 +95,7 @@ namespace Volo.Abp.IdentityServer Type = "TestType-35", SubjectId = "TestSubject-X", Data = "TestData-35" - }).ConfigureAwait(false); + }); } private async Task AddApiResources() @@ -111,7 +111,7 @@ namespace Volo.Abp.IdentityServer apiResource.AddScope("Test-ApiResource-ApiScope-Name-1", "Test-ApiResource-ApiScope-DisplayName-1"); apiResource.AddUserClaim("Test-ApiResource-Claim-Type-1"); - await _apiResourceRepository.InsertAsync(apiResource).ConfigureAwait(false); + await _apiResourceRepository.InsertAsync(apiResource); } private async Task AddIdentityResources() @@ -126,7 +126,7 @@ namespace Volo.Abp.IdentityServer identityResource.AddUserClaim("Test-Identity-Resource-1-IdentityClaim-Type-1"); - await _identityResourceRepository.InsertAsync(identityResource).ConfigureAwait(false); + await _identityResourceRepository.InsertAsync(identityResource); } } } diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/FodyWeavers.xml b/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/FodyWeavers.xml +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/FodyWeavers.xml b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/FodyWeavers.xml +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs index ee6c8c59b6..c36fef2d58 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs @@ -49,12 +49,12 @@ namespace Volo.Abp.IdentityServer public async Task BuildAsync() { - await AddDeviceFlowCodes().ConfigureAwait(false); - await AddPersistedGrants().ConfigureAwait(false); - await AddIdentityResources().ConfigureAwait(false); - await AddApiResources().ConfigureAwait(false); - await AddClients().ConfigureAwait(false); - await AddClaimTypes().ConfigureAwait(false); + await AddDeviceFlowCodes(); + await AddPersistedGrants(); + await AddIdentityResources(); + await AddApiResources(); + await AddClients(); + await AddClaimTypes(); } private async Task AddDeviceFlowCodes() @@ -94,7 +94,7 @@ namespace Volo.Abp.IdentityServer ClientId = "PersistedGrantClientId1", Type = "PersistedGrantType1", Data = "" - }).ConfigureAwait(false); + }); await _persistentGrantRepository.InsertAsync(new PersistedGrant(_guidGenerator.Create()) { @@ -103,7 +103,7 @@ namespace Volo.Abp.IdentityServer ClientId = "c1", Type = "c1type", Data = "" - }).ConfigureAwait(false); + }); await _persistentGrantRepository.InsertAsync(new PersistedGrant(_guidGenerator.Create()) { @@ -113,7 +113,7 @@ namespace Volo.Abp.IdentityServer Type = "c1type", Data = "", Expiration = _clock.Now.AddDays(1), - }).ConfigureAwait(false); + }); await _persistentGrantRepository.InsertAsync(new PersistedGrant(_guidGenerator.Create()) { @@ -123,7 +123,7 @@ namespace Volo.Abp.IdentityServer Type = "c1type", Data = "", Expiration = _clock.Now.AddDays(-1) - }).ConfigureAwait(false); + }); } private async Task AddIdentityResources() @@ -136,9 +136,9 @@ namespace Volo.Abp.IdentityServer identityResource.AddUserClaim(nameof(ApiResourceClaim.Type)); - await _identityResourceRepository.InsertAsync(identityResource).ConfigureAwait(false); - await _identityResourceRepository.InsertAsync(new IdentityResource(_guidGenerator.Create(), "NewIdentityResource2")).ConfigureAwait(false); - await _identityResourceRepository.InsertAsync(new IdentityResource(_guidGenerator.Create(), "NewIdentityResource3")).ConfigureAwait(false); + await _identityResourceRepository.InsertAsync(identityResource); + await _identityResourceRepository.InsertAsync(new IdentityResource(_guidGenerator.Create(), "NewIdentityResource2")); + await _identityResourceRepository.InsertAsync(new IdentityResource(_guidGenerator.Create(), "NewIdentityResource3")); } private async Task AddApiResources() @@ -151,9 +151,9 @@ namespace Volo.Abp.IdentityServer apiResource.AddUserClaim(nameof(ApiResourceClaim.Type)); apiResource.AddSecret(nameof(ApiSecret.Value)); - await _apiResourceRepository.InsertAsync(apiResource).ConfigureAwait(false); - await _apiResourceRepository.InsertAsync(new ApiResource(_guidGenerator.Create(), "NewApiResource2")).ConfigureAwait(false); - await _apiResourceRepository.InsertAsync(new ApiResource(_guidGenerator.Create(), "NewApiResource3")).ConfigureAwait(false); + await _apiResourceRepository.InsertAsync(apiResource); + await _apiResourceRepository.InsertAsync(new ApiResource(_guidGenerator.Create(), "NewApiResource2")); + await _apiResourceRepository.InsertAsync(new ApiResource(_guidGenerator.Create(), "NewApiResource3")); } private async Task AddClients() @@ -178,17 +178,17 @@ namespace Volo.Abp.IdentityServer client.AddScope(nameof(ClientScope.Scope)); client.AddSecret(nameof(ClientSecret.Value)); - await _clientRepository.InsertAsync(client).ConfigureAwait(false); + await _clientRepository.InsertAsync(client); - await _clientRepository.InsertAsync(new Client(_guidGenerator.Create(), "ClientId2")).ConfigureAwait(false); - await _clientRepository.InsertAsync(new Client(_guidGenerator.Create(), "ClientId3")).ConfigureAwait(false); + await _clientRepository.InsertAsync(new Client(_guidGenerator.Create(), "ClientId2")); + await _clientRepository.InsertAsync(new Client(_guidGenerator.Create(), "ClientId3")); } private async Task AddClaimTypes() { var ageClaim = new IdentityClaimType(Guid.NewGuid(), "Age", false, false, null, null, null, IdentityClaimValueType.Int); - await _identityClaimTypeRepository.InsertAsync(ageClaim).ConfigureAwait(false); + await _identityClaimTypeRepository.InsertAsync(ageClaim); } } } diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/ApiResourceRepository_Tests.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/ApiResourceRepository_Tests.cs index 43b4e9d8f2..b79114c59a 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/ApiResourceRepository_Tests.cs +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/ApiResourceRepository_Tests.cs @@ -20,13 +20,13 @@ namespace Volo.Abp.IdentityServer [Fact] public async Task FindByNormalizedNameAsync() { - (await apiResourceRepository.FindByNameAsync("NewApiResource2").ConfigureAwait(false)).ShouldNotBeNull(); + (await apiResourceRepository.FindByNameAsync("NewApiResource2")).ShouldNotBeNull(); } [Fact] public async Task GetListByScopesAsync() { - (await apiResourceRepository.GetListByScopesAsync(new[] { "NewApiResource2", "NewApiResource3" }).ConfigureAwait(false)).Count.ShouldBe(2); + (await apiResourceRepository.GetListByScopesAsync(new[] { "NewApiResource2", "NewApiResource3" })).Count.ShouldBe(2); } } } diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/ClientRepository_Tests.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/ClientRepository_Tests.cs index 300c1620ff..86f69610f5 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/ClientRepository_Tests.cs +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/ClientRepository_Tests.cs @@ -21,13 +21,13 @@ namespace Volo.Abp.IdentityServer [Fact] public async Task FindByCliendIdAsync() { - (await clientRepository.FindByCliendIdAsync("ClientId2").ConfigureAwait(false)).ShouldNotBeNull(); + (await clientRepository.FindByCliendIdAsync("ClientId2")).ShouldNotBeNull(); } [Fact] public async Task GetAllDistinctAllowedCorsOriginsAsync() { - var origins = await clientRepository.GetAllDistinctAllowedCorsOriginsAsync().ConfigureAwait(false); + var origins = await clientRepository.GetAllDistinctAllowedCorsOriginsAsync(); origins.Any().ShouldBeTrue(); } } diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/IdentityResourceRepository_Tests.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/IdentityResourceRepository_Tests.cs index 2d98fff2a3..3ab47dd7ce 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/IdentityResourceRepository_Tests.cs +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/IdentityResourceRepository_Tests.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.IdentityServer [Fact] public async Task GetListByScopesAsync() { - (await identityResourceRepository.GetListByScopesAsync(new[] { "", "NewIdentityResource2" }).ConfigureAwait(false)).Count.ShouldBe(1); + (await identityResourceRepository.GetListByScopesAsync(new[] { "", "NewIdentityResource2" })).Count.ShouldBe(1); } } } diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/PersistentGrantRepository_Tests.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/PersistentGrantRepository_Tests.cs index 0786af42bc..20f6674515 100644 --- a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/PersistentGrantRepository_Tests.cs +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/PersistentGrantRepository_Tests.cs @@ -22,13 +22,13 @@ namespace Volo.Abp.IdentityServer [Fact] public async Task FindByKeyAsync() { - (await _persistentGrantRepository.FindByKeyAsync("PersistedGrantKey1").ConfigureAwait(false)).ShouldNotBeNull(); + (await _persistentGrantRepository.FindByKeyAsync("PersistedGrantKey1")).ShouldNotBeNull(); } [Fact] public async Task GetListBySubjectIdAsync() { - var persistedGrants = await _persistentGrantRepository.GetListBySubjectIdAsync("PersistedGrantSubjectId1").ConfigureAwait(false); + var persistedGrants = await _persistentGrantRepository.GetListBySubjectIdAsync("PersistedGrantSubjectId1"); persistedGrants.ShouldNotBeEmpty(); persistedGrants.ShouldContain(x => x.Key == "PersistedGrantKey1"); } @@ -36,9 +36,9 @@ namespace Volo.Abp.IdentityServer [Fact] public async Task DeleteBySubjectIdAndClientId() { - await _persistentGrantRepository.DeleteAsync("PersistedGrantSubjectId1", "PersistedGrantClientId1").ConfigureAwait(false); + await _persistentGrantRepository.DeleteAsync("PersistedGrantSubjectId1", "PersistedGrantClientId1"); - var persistedGrants = await _persistentGrantRepository.GetListAsync().ConfigureAwait(false); + var persistedGrants = await _persistentGrantRepository.GetListAsync(); persistedGrants.ShouldNotBeEmpty(); persistedGrants.ShouldNotContain(x => x.Key == "PersistedGrantKey1" && x.SubjectId == "PersistedGrantSubjectId1" && @@ -49,9 +49,9 @@ namespace Volo.Abp.IdentityServer public async Task DeleteBySubjectIdAndClientIdAndType() { await _persistentGrantRepository.DeleteAsync("PersistedGrantSubjectId1", "PersistedGrantClientId1", - "PersistedGrantClientId1").ConfigureAwait(false); + "PersistedGrantClientId1"); - var persistedGrants = await _persistentGrantRepository.GetListAsync().ConfigureAwait(false); + var persistedGrants = await _persistentGrantRepository.GetListAsync(); persistedGrants.ShouldNotBeEmpty(); persistedGrants.ShouldNotContain(x => x.Key == "PersistedGrantKey1" && x.SubjectId == "PersistedGrantSubjectId1" && diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/FodyWeavers.xml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/FodyWeavers.xml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs index b9f504b4f1..63065fd688 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs @@ -34,7 +34,7 @@ namespace Volo.Abp.PermissionManagement public virtual async Task GetAsync(string providerName, string providerKey) { - await CheckProviderPolicy(providerName).ConfigureAwait(false); + await CheckProviderPolicy(providerName); var result = new GetPermissionListResultDto { @@ -74,7 +74,7 @@ namespace Volo.Abp.PermissionManagement GrantedProviders = new List() }; - var grantInfo = await _permissionManager.GetAsync(permission.Name, providerName, providerKey).ConfigureAwait(false); + var grantInfo = await _permissionManager.GetAsync(permission.Name, providerName, providerKey); grantInfoDto.IsGranted = grantInfo.IsGranted; @@ -101,11 +101,11 @@ namespace Volo.Abp.PermissionManagement public virtual async Task UpdateAsync(string providerName, string providerKey, UpdatePermissionsDto input) { - await CheckProviderPolicy(providerName).ConfigureAwait(false); + await CheckProviderPolicy(providerName); foreach (var permissionDto in input.Permissions) { - await _permissionManager.SetAsync(permissionDto.Name, providerName, providerKey, permissionDto.IsGranted).ConfigureAwait(false); + await _permissionManager.SetAsync(permissionDto.Name, providerName, providerKey, permissionDto.IsGranted); } } @@ -117,7 +117,7 @@ namespace Volo.Abp.PermissionManagement throw new AbpException($"No policy defined to get/set permissions for the provider '{policyName}'. Use {nameof(PermissionManagementOptions)} to map the policy."); } - await AuthorizationService.CheckAsync(policyName).ConfigureAwait(false); + await AuthorizationService.CheckAsync(policyName); } } } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/FodyWeavers.xml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/FodyWeavers.xml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionDataSeeder.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionDataSeeder.cs index 451b9fadbf..80062f528d 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionDataSeeder.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionDataSeeder.cs @@ -40,7 +40,7 @@ namespace Volo.Abp.PermissionManagement providerKey, tenantId ) - ).ConfigureAwait(false); + ); } } } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionGrantCacheItemInvalidator.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionGrantCacheItemInvalidator.cs index 46badf093a..9e73e59b79 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionGrantCacheItemInvalidator.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionGrantCacheItemInvalidator.cs @@ -29,7 +29,7 @@ namespace Volo.Abp.PermissionManagement using (CurrentTenant.Change(eventData.Entity.TenantId)) { - await Cache.RemoveAsync(cacheKey).ConfigureAwait(false); + await Cache.RemoveAsync(cacheKey); } } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManagementProvider.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManagementProvider.cs index 9cca1277d5..0b83f37fd1 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManagementProvider.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManagementProvider.cs @@ -46,7 +46,7 @@ namespace Volo.Abp.PermissionManagement protected virtual async Task GrantAsync(string name, string providerKey) { - var permissionGrant = await PermissionGrantRepository.FindAsync(name, Name, providerKey).ConfigureAwait(false); + var permissionGrant = await PermissionGrantRepository.FindAsync(name, Name, providerKey); if (permissionGrant != null) { return; @@ -60,18 +60,18 @@ namespace Volo.Abp.PermissionManagement providerKey, CurrentTenant.Id ) - ).ConfigureAwait(false); + ); } protected virtual async Task RevokeAsync(string name, string providerKey) { - var permissionGrant = await PermissionGrantRepository.FindAsync(name, Name, providerKey).ConfigureAwait(false); + var permissionGrant = await PermissionGrantRepository.FindAsync(name, Name, providerKey); if (permissionGrant == null) { return; } - await PermissionGrantRepository.DeleteAsync(permissionGrant).ConfigureAwait(false); + await PermissionGrantRepository.DeleteAsync(permissionGrant); } } } \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs index 4f7d177802..3607a57f4b 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs @@ -52,7 +52,7 @@ namespace Volo.Abp.PermissionManagement public async Task GetAsync(string permissionName, string providerName, string providerKey) { - return await GetInternalAsync(PermissionDefinitionManager.Get(permissionName), providerName, providerKey).ConfigureAwait(false); + return await GetInternalAsync(PermissionDefinitionManager.Get(permissionName), providerName, providerKey); } public async Task> GetAllAsync(string providerName, string providerKey) @@ -61,7 +61,7 @@ namespace Volo.Abp.PermissionManagement foreach (var permissionDefinition in PermissionDefinitionManager.GetPermissions()) { - results.Add(await GetInternalAsync(permissionDefinition, providerName, providerKey).ConfigureAwait(false)); + results.Add(await GetInternalAsync(permissionDefinition, providerName, providerKey)); } return results; @@ -83,7 +83,7 @@ namespace Volo.Abp.PermissionManagement throw new ApplicationException($"The permission named '{permission.Name}' has multitenancy side '{permission.MultiTenancySide}' which is not compatible with the current multitenancy side '{CurrentTenant.GetMultiTenancySide()}'"); } - var currentGrantInfo = await GetInternalAsync(permission, providerName, providerKey).ConfigureAwait(false); + var currentGrantInfo = await GetInternalAsync(permission, providerName, providerKey); if (currentGrantInfo.IsGranted == isGranted) { return; @@ -96,13 +96,13 @@ namespace Volo.Abp.PermissionManagement throw new AbpException("Unknown permission management provider: " + providerName); } - await provider.SetAsync(permissionName, providerKey, isGranted).ConfigureAwait(false); + await provider.SetAsync(permissionName, providerKey, isGranted); } public async Task UpdateProviderKeyAsync(PermissionGrant permissionGrant, string providerKey) { permissionGrant.ProviderKey = providerKey; - return await PermissionGrantRepository.UpdateAsync(permissionGrant).ConfigureAwait(false); + return await PermissionGrantRepository.UpdateAsync(permissionGrant); } protected virtual async Task GetInternalAsync(PermissionDefinition permission, string providerName, string providerKey) @@ -121,7 +121,7 @@ namespace Volo.Abp.PermissionManagement foreach (var provider in ManagementProviders) { - var providerResult = await provider.CheckAsync(permission.Name, providerName, providerKey).ConfigureAwait(false); + var providerResult = await provider.CheckAsync(permission.Name, providerName, providerKey); if (providerResult.IsGranted) { result.IsGranted = true; diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionStore.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionStore.cs index 0d594007e8..744dc19c8e 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionStore.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionStore.cs @@ -26,7 +26,7 @@ namespace Volo.Abp.PermissionManagement public async Task IsGrantedAsync(string name, string providerName, string providerKey) { - return (await GetCacheItemAsync(name, providerName, providerKey).ConfigureAwait(false)).IsGranted; + return (await GetCacheItemAsync(name, providerName, providerKey)).IsGranted; } protected virtual async Task GetCacheItemAsync(string name, string providerName, string providerKey) @@ -35,7 +35,7 @@ namespace Volo.Abp.PermissionManagement Logger.LogDebug($"PermissionStore.GetCacheItemAsync: {cacheKey}"); - var cacheItem = await Cache.GetAsync(cacheKey).ConfigureAwait(false); + var cacheItem = await Cache.GetAsync(cacheKey); if (cacheItem != null) { @@ -55,7 +55,7 @@ namespace Volo.Abp.PermissionManagement await Cache.SetAsync( cacheKey, cacheItem - ).ConfigureAwait(false); + ); Logger.LogDebug($"Finished setting the cache item: {cacheKey}"); diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo/Abp/PermissionManagement/EntityFrameworkCore/EfCorePermissionGrantRepository.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo/Abp/PermissionManagement/EntityFrameworkCore/EfCorePermissionGrantRepository.cs index 8663e8026a..d8241d6f8f 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo/Abp/PermissionManagement/EntityFrameworkCore/EfCorePermissionGrantRepository.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo/Abp/PermissionManagement/EntityFrameworkCore/EfCorePermissionGrantRepository.cs @@ -30,7 +30,7 @@ namespace Volo.Abp.PermissionManagement.EntityFrameworkCore s.ProviderName == providerName && s.ProviderKey == providerKey, GetCancellationToken(cancellationToken) - ).ConfigureAwait(false); + ); } public async Task> GetListAsync( @@ -42,7 +42,7 @@ namespace Volo.Abp.PermissionManagement.EntityFrameworkCore .Where(s => s.ProviderName == providerName && s.ProviderKey == providerKey - ).ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + ).ToListAsync(GetCancellationToken(cancellationToken)); } } } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/FodyWeavers.xml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/FodyWeavers.xml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/FodyWeavers.xml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/Volo/Abp/PermissionManagement/MongoDb/MongoPermissionGrantRepository.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/Volo/Abp/PermissionManagement/MongoDb/MongoPermissionGrantRepository.cs index bc2f5ef5d9..67befaa717 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/Volo/Abp/PermissionManagement/MongoDb/MongoPermissionGrantRepository.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/Volo/Abp/PermissionManagement/MongoDb/MongoPermissionGrantRepository.cs @@ -29,7 +29,7 @@ namespace Volo.Abp.PermissionManagement.MongoDB s.ProviderName == providerName && s.ProviderKey == providerKey, GetCancellationToken(cancellationToken) - ).ConfigureAwait(false); + ); } public async Task> GetListAsync( @@ -41,7 +41,7 @@ namespace Volo.Abp.PermissionManagement.MongoDB .Where(s => s.ProviderName == providerName && s.ProviderKey == providerKey - ).ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + ).ToListAsync(GetCancellationToken(cancellationToken)); } } } \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/FodyWeavers.xml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml.cs index fe01aa6618..70ec393455 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml.cs @@ -42,7 +42,7 @@ namespace Volo.Abp.PermissionManagement.Web.Pages.AbpPermissionManagement { ValidateModel(); - var result = await _permissionAppService.GetAsync(ProviderName, ProviderKey).ConfigureAwait(false); + var result = await _permissionAppService.GetAsync(ProviderName, ProviderKey); EntityDisplayName = result.EntityDisplayName; @@ -84,7 +84,7 @@ namespace Volo.Abp.PermissionManagement.Web.Pages.AbpPermissionManagement { Permissions = updatePermissionDtos } - ).ConfigureAwait(false); + ); return NoContent(); } diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/FodyWeavers.xml b/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/FodyWeavers.xml +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/Volo/Abp/PermissionManagement/PermissionAppService_Tests.cs b/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/Volo/Abp/PermissionManagement/PermissionAppService_Tests.cs index d610eede6e..e6240a34b2 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/Volo/Abp/PermissionManagement/PermissionAppService_Tests.cs +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/Volo/Abp/PermissionManagement/PermissionAppService_Tests.cs @@ -24,7 +24,7 @@ namespace Volo.Abp.PermissionManagement.Application.Tests.Volo.Abp.PermissionMan public async Task GetAsync() { var permissionListResultDto = await _permissionAppService.GetAsync(UserPermissionValueProvider.ProviderName, - PermissionTestDataBuilder.User1Id.ToString()).ConfigureAwait(false); + PermissionTestDataBuilder.User1Id.ToString()); permissionListResultDto.ShouldNotBeNull(); permissionListResultDto.EntityDisplayName.ShouldBe(PermissionTestDataBuilder.User1Id.ToString()); @@ -43,7 +43,7 @@ namespace Volo.Abp.PermissionManagement.Application.Tests.Volo.Abp.PermissionMan public async Task UpdateAsync() { (await _permissionGrantRepository.FindAsync("MyPermission1", "Test", - "Test").ConfigureAwait(false)).ShouldBeNull(); + "Test")).ShouldBeNull(); await _permissionAppService.UpdateAsync("Test", "Test", new UpdatePermissionsDto() @@ -56,10 +56,10 @@ namespace Volo.Abp.PermissionManagement.Application.Tests.Volo.Abp.PermissionMan Name = "MyPermission1" } } - }).ConfigureAwait(false); + }); (await _permissionGrantRepository.FindAsync("MyPermission1", "Test", - "Test").ConfigureAwait(false)).ShouldNotBeNull(); + "Test")).ShouldNotBeNull(); } [Fact] @@ -67,14 +67,14 @@ namespace Volo.Abp.PermissionManagement.Application.Tests.Volo.Abp.PermissionMan { await _permissionGrantRepository.InsertAsync( new PermissionGrant( - Guid.NewGuid(), + Guid.NewGuid(), "MyPermission1", "Test", "Test" ) - ).ConfigureAwait(false); + ); (await _permissionGrantRepository.FindAsync("MyPermission1", "Test", - "Test").ConfigureAwait(false)).ShouldNotBeNull(); + "Test")).ShouldNotBeNull(); await _permissionAppService.UpdateAsync("Test", "Test", new UpdatePermissionsDto() @@ -87,10 +87,10 @@ namespace Volo.Abp.PermissionManagement.Application.Tests.Volo.Abp.PermissionMan Name = "MyPermission1" } } - }).ConfigureAwait(false); + }); (await _permissionGrantRepository.FindAsync("MyPermission1", "Test", - "Test").ConfigureAwait(false)).ShouldBeNull(); + "Test")).ShouldBeNull(); } } } diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.EntityFrameworkCore.Tests/FodyWeavers.xml b/modules/permission-management/test/Volo.Abp.PermissionManagement.EntityFrameworkCore.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.EntityFrameworkCore.Tests/FodyWeavers.xml +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.MongoDB.Tests/FodyWeavers.xml b/modules/permission-management/test/Volo.Abp.PermissionManagement.MongoDB.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.MongoDB.Tests/FodyWeavers.xml +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.MongoDB.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/FodyWeavers.xml b/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/FodyWeavers.xml +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/Volo/Abp/PermissionManagement/PermissionGrantRepository_Tests.cs b/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/Volo/Abp/PermissionManagement/PermissionGrantRepository_Tests.cs index 217b81361b..e27be7e426 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/Volo/Abp/PermissionManagement/PermissionGrantRepository_Tests.cs +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/Volo/Abp/PermissionManagement/PermissionGrantRepository_Tests.cs @@ -19,16 +19,16 @@ namespace Volo.Abp.PermissionManagement [Fact] public async Task FindAsync() { - (await PermissionGrantRepository.FindAsync("MyPermission1", UserPermissionValueProvider.ProviderName, PermissionTestDataBuilder.User1Id.ToString()).ConfigureAwait(false)).ShouldNotBeNull(); + (await PermissionGrantRepository.FindAsync("MyPermission1", UserPermissionValueProvider.ProviderName, PermissionTestDataBuilder.User1Id.ToString())).ShouldNotBeNull(); - (await PermissionGrantRepository.FindAsync("Undefined-Permission", UserPermissionValueProvider.ProviderName, PermissionTestDataBuilder.User1Id.ToString()).ConfigureAwait(false)).ShouldBeNull(); - (await PermissionGrantRepository.FindAsync("MyPermission1", "Undefined-Provider", "Unknown-Id").ConfigureAwait(false)).ShouldBeNull(); + (await PermissionGrantRepository.FindAsync("Undefined-Permission", UserPermissionValueProvider.ProviderName, PermissionTestDataBuilder.User1Id.ToString())).ShouldBeNull(); + (await PermissionGrantRepository.FindAsync("MyPermission1", "Undefined-Provider", "Unknown-Id")).ShouldBeNull(); } [Fact] public async Task GetListAsync() { - var permissionGrants = await PermissionGrantRepository.GetListAsync(UserPermissionValueProvider.ProviderName, PermissionTestDataBuilder.User1Id.ToString()).ConfigureAwait(false); + var permissionGrants = await PermissionGrantRepository.GetListAsync(UserPermissionValueProvider.ProviderName, PermissionTestDataBuilder.User1Id.ToString()); permissionGrants.ShouldContain(p => p.Name == "MyPermission1"); } diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/Volo/Abp/PermissionManagement/PermissionTestDataBuilder.cs b/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/Volo/Abp/PermissionManagement/PermissionTestDataBuilder.cs index d6e89741c4..662d0b17c8 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/Volo/Abp/PermissionManagement/PermissionTestDataBuilder.cs +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.TestBase/Volo/Abp/PermissionManagement/PermissionTestDataBuilder.cs @@ -29,7 +29,7 @@ namespace Volo.Abp.PermissionManagement UserPermissionValueProvider.ProviderName, User1Id.ToString() ) - ).ConfigureAwait(false); + ); await _permissionGrantRepository.InsertAsync( new PermissionGrant( @@ -38,7 +38,7 @@ namespace Volo.Abp.PermissionManagement UserPermissionValueProvider.ProviderName, User1Id.ToString() ) - ).ConfigureAwait(false); + ); } } } \ No newline at end of file diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/FodyWeavers.xml b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/FodyWeavers.xml +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionChecker_Basic_Tests.cs b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionChecker_Basic_Tests.cs index b2125dbf02..1fb52c13a1 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionChecker_Basic_Tests.cs +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionChecker_Basic_Tests.cs @@ -19,13 +19,13 @@ namespace Volo.Abp.PermissionManagement { await Assert.ThrowsAsync(async () => await _permissionChecker.IsGrantedAsync("UndefinedPermissionName") -.ConfigureAwait(false)).ConfigureAwait(false); + ); } [Fact] public async Task Should_Return_False_As_Default_For_Any_Permission() { - (await _permissionChecker.IsGrantedAsync("MyPermission1").ConfigureAwait(false)).ShouldBeFalse(); + (await _permissionChecker.IsGrantedAsync("MyPermission1")).ShouldBeFalse(); } } } diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionChecker_User_Tests.cs b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionChecker_User_Tests.cs index 2a6f59af82..b49ff94f90 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionChecker_User_Tests.cs +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionChecker_User_Tests.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.PermissionManagement (await _permissionChecker.IsGrantedAsync( CreatePrincipal(PermissionTestDataBuilder.User1Id), "MyPermission1" - ).ConfigureAwait(false)).ShouldBeTrue(); + )).ShouldBeTrue(); } [Fact] @@ -32,7 +32,7 @@ namespace Volo.Abp.PermissionManagement (await _permissionChecker.IsGrantedAsync( CreatePrincipal(PermissionTestDataBuilder.User2Id), "MyPermission1" - ).ConfigureAwait(false)).ShouldBeFalse(); + )).ShouldBeFalse(); } [Fact] @@ -41,7 +41,7 @@ namespace Volo.Abp.PermissionManagement (await _permissionChecker.IsGrantedAsync( CreatePrincipal(null), "MyPermission1" - ).ConfigureAwait(false)).ShouldBeFalse(); + )).ShouldBeFalse(); } [Fact] @@ -50,7 +50,7 @@ namespace Volo.Abp.PermissionManagement (await _permissionChecker.IsGrantedAsync( CreatePrincipal(PermissionTestDataBuilder.User1Id, Guid.NewGuid()), "MyPermission3" - ).ConfigureAwait(false)).ShouldBeFalse(); + )).ShouldBeFalse(); } private static ClaimsPrincipal CreatePrincipal(Guid? userId, Guid? tenantId = null) diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionDataSeeder_Tests.cs b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionDataSeeder_Tests.cs index 32ee6ff1cf..6868421a8a 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionDataSeeder_Tests.cs +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionDataSeeder_Tests.cs @@ -21,17 +21,17 @@ namespace Volo.Abp.PermissionManagement [Fact] public async Task SeedAsync() { - (await _grantpermissionGrantRepository.FindAsync("MyPermission1", "Test", "Test").ConfigureAwait(false)).ShouldBeNull(); - (await _grantpermissionGrantRepository.FindAsync("MyPermission2", "Test", "Test").ConfigureAwait(false)).ShouldBeNull(); + (await _grantpermissionGrantRepository.FindAsync("MyPermission1", "Test", "Test")).ShouldBeNull(); + (await _grantpermissionGrantRepository.FindAsync("MyPermission2", "Test", "Test")).ShouldBeNull(); await _permissionDataSeeder.SeedAsync("Test", "Test", new List() { "MyPermission1", "MyPermission2" - }).ConfigureAwait(false); + }); - (await _grantpermissionGrantRepository.FindAsync("MyPermission1", "Test", "Test").ConfigureAwait(false)).ShouldNotBeNull(); - (await _grantpermissionGrantRepository.FindAsync("MyPermission2", "Test", "Test").ConfigureAwait(false)).ShouldNotBeNull(); + (await _grantpermissionGrantRepository.FindAsync("MyPermission1", "Test", "Test")).ShouldNotBeNull(); + (await _grantpermissionGrantRepository.FindAsync("MyPermission2", "Test", "Test")).ShouldNotBeNull(); } } diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionGrantCacheItemInvalidator_Tests.cs b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionGrantCacheItemInvalidator_Tests.cs index 7148fe9191..9d4248bb5a 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionGrantCacheItemInvalidator_Tests.cs +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionGrantCacheItemInvalidator_Tests.cs @@ -28,17 +28,17 @@ namespace Volo.Abp.PermissionManagement { (await _cache.GetAsync(PermissionGrantCacheItem.CalculateCacheKey("MyPermission1", UserPermissionValueProvider.ProviderName, - PermissionTestDataBuilder.User1Id.ToString())).ConfigureAwait(false)).ShouldBeNull(); + PermissionTestDataBuilder.User1Id.ToString()))).ShouldBeNull(); await _permissionStore.IsGrantedAsync("MyPermission1", UserPermissionValueProvider.ProviderName, - PermissionTestDataBuilder.User1Id.ToString()).ConfigureAwait(false); + PermissionTestDataBuilder.User1Id.ToString()); (await _cache.GetAsync(PermissionGrantCacheItem.CalculateCacheKey("MyPermission1", UserPermissionValueProvider.ProviderName, - PermissionTestDataBuilder.User1Id.ToString())).ConfigureAwait(false)).ShouldNotBeNull(); + PermissionTestDataBuilder.User1Id.ToString()))).ShouldNotBeNull(); } [Fact] @@ -47,17 +47,17 @@ namespace Volo.Abp.PermissionManagement // IsGrantedAsync will cache PermissionGrant await _permissionStore.IsGrantedAsync("MyPermission1", UserPermissionValueProvider.ProviderName, - PermissionTestDataBuilder.User1Id.ToString()).ConfigureAwait(false); + PermissionTestDataBuilder.User1Id.ToString()); var permissionGrant = await _permissionGrantRepository.FindAsync("MyPermission1", UserPermissionValueProvider.ProviderName, - PermissionTestDataBuilder.User1Id.ToString()).ConfigureAwait(false); + PermissionTestDataBuilder.User1Id.ToString()); permissionGrant.ShouldNotBeNull(); - await _permissionGrantRepository.DeleteAsync(permissionGrant).ConfigureAwait(false); + await _permissionGrantRepository.DeleteAsync(permissionGrant); (await _cache.GetAsync(PermissionGrantCacheItem.CalculateCacheKey("MyPermission1", UserPermissionValueProvider.ProviderName, - PermissionTestDataBuilder.User1Id.ToString())).ConfigureAwait(false)).ShouldBeNull(); + PermissionTestDataBuilder.User1Id.ToString()))).ShouldBeNull(); } } } diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionManagementProvider_Tests.cs b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionManagementProvider_Tests.cs index 1cbab007e3..aac1272ccd 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionManagementProvider_Tests.cs +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionManagementProvider_Tests.cs @@ -29,11 +29,11 @@ namespace Volo.Abp.PermissionManagement "Test", "Test" ) - ).ConfigureAwait(false); + ); var permissionValueProviderGrantInfo = await _permissionManagementProvider.CheckAsync("MyPermission1", "Test", - "Test").ConfigureAwait(false); + "Test"); permissionValueProviderGrantInfo.IsGranted.ShouldBeTrue(); permissionValueProviderGrantInfo.ProviderKey.ShouldBe("Test"); @@ -44,7 +44,7 @@ namespace Volo.Abp.PermissionManagement { var permissionValueProviderGrantInfo = await _permissionManagementProvider.CheckAsync("MyPermission1", "TestNotExist", - "Test").ConfigureAwait(false); + "Test"); permissionValueProviderGrantInfo.IsGranted.ShouldBeFalse(); permissionValueProviderGrantInfo.ProviderKey.ShouldBeNull(); @@ -61,18 +61,18 @@ namespace Volo.Abp.PermissionManagement "Test", "Test" ) - ).ConfigureAwait(false); + ); (await _permissionGrantRepository.FindAsync("MyPermission1", "Test", - "Test").ConfigureAwait(false)).ShouldNotBeNull(); + "Test")).ShouldNotBeNull(); await _permissionManagementProvider.SetAsync("MyPermission1", "Test", - false).ConfigureAwait(false); + false); (await _permissionGrantRepository.FindAsync("MyPermission1", "Test", - "Test").ConfigureAwait(false)).ShouldBeNull(); + "Test")).ShouldBeNull(); } } diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionManager_Tests.cs b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionManager_Tests.cs index 66f0de1755..07d279ec9d 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionManager_Tests.cs +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionManager_Tests.cs @@ -28,11 +28,11 @@ namespace Volo.Abp.PermissionManagement "MyPermission1", "Test", "Test") - ).ConfigureAwait(false); + ); var grantedProviders = await _permissionManager.GetAsync("MyPermission1", "Test", - "Test").ConfigureAwait(false); + "Test"); grantedProviders.ShouldNotBeNull(); grantedProviders.IsGranted.ShouldBeTrue(); @@ -46,7 +46,7 @@ namespace Volo.Abp.PermissionManagement await Assert.ThrowsAsync(async () => await _permissionManager.GetAsync( "MyPermission1NotExist", "Test", - "Test").ConfigureAwait(false)).ConfigureAwait(false); + "Test")); } [Fact] @@ -57,18 +57,18 @@ namespace Volo.Abp.PermissionManagement "MyPermission1", "Test", "Test") - ).ConfigureAwait(false); + ); await _permissionGrantRepository.InsertAsync(new PermissionGrant( Guid.NewGuid(), "MyPermission2", "Test", "Test") - ).ConfigureAwait(false); + ); var permissionWithGrantedProviders = await _permissionManager.GetAllAsync( "Test", - "Test").ConfigureAwait(false); + "Test"); permissionWithGrantedProviders.ShouldNotBeNull(); permissionWithGrantedProviders.ShouldContain(x => @@ -82,16 +82,16 @@ namespace Volo.Abp.PermissionManagement { (await _permissionGrantRepository.FindAsync("MyPermission2", "Test", - "Test").ConfigureAwait(false)).ShouldBeNull(); + "Test")).ShouldBeNull(); await _permissionManager.SetAsync( "MyPermission2", "Test", - "Test", true).ConfigureAwait(false); + "Test", true); (await _permissionGrantRepository.FindAsync("MyPermission2", "Test", - "Test").ConfigureAwait(false)).ShouldNotBeNull(); + "Test")).ShouldNotBeNull(); } [Fact] @@ -101,7 +101,7 @@ namespace Volo.Abp.PermissionManagement "MyPermission1NotExist", "Test", "Test", - true).ConfigureAwait(false)).ConfigureAwait(false); + true)); } [Fact] @@ -112,12 +112,12 @@ namespace Volo.Abp.PermissionManagement "MyPermission1", "Test", "Test") - ).ConfigureAwait(false); - var permissionGrant = await _permissionGrantRepository.FindAsync("MyPermission1", "Test", "Test").ConfigureAwait(false); + ); + var permissionGrant = await _permissionGrantRepository.FindAsync("MyPermission1", "Test", "Test"); permissionGrant.ProviderKey.ShouldBe("Test"); - await _permissionManager.UpdateProviderKeyAsync(permissionGrant, "NewProviderKey").ConfigureAwait(false); - (await _permissionGrantRepository.FindAsync("MyPermission1", "Test", "NewProviderKey").ConfigureAwait(false)).ShouldNotBeNull(); + await _permissionManager.UpdateProviderKeyAsync(permissionGrant, "NewProviderKey"); + (await _permissionGrantRepository.FindAsync("MyPermission1", "Test", "NewProviderKey")).ShouldNotBeNull(); } } } diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionStore_Tests.cs b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionStore_Tests.cs index f82b541e27..965899ede9 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionStore_Tests.cs +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionStore_Tests.cs @@ -22,12 +22,12 @@ namespace Volo.Abp.PermissionManagement { (await _permissionStore.IsGrantedAsync("MyPermission1", UserPermissionValueProvider.ProviderName, - PermissionTestDataBuilder.User1Id.ToString()).ConfigureAwait(false)).ShouldBeTrue(); + PermissionTestDataBuilder.User1Id.ToString())).ShouldBeTrue(); (await _permissionStore.IsGrantedAsync("MyPermission1NotExist", UserPermissionValueProvider.ProviderName, - PermissionTestDataBuilder.User1Id.ToString()).ConfigureAwait(false)).ShouldBeFalse(); + PermissionTestDataBuilder.User1Id.ToString())).ShouldBeFalse(); } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/FodyWeavers.xml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/FodyWeavers.xml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingCacheItemInvalidator.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingCacheItemInvalidator.cs index 419d0febcd..35d358a67d 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingCacheItemInvalidator.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingCacheItemInvalidator.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.SettingManagement eventData.Entity.ProviderKey ); - await Cache.RemoveAsync(cacheKey).ConfigureAwait(false); + await Cache.RemoveAsync(cacheKey); } protected virtual string CalculateCacheKey(string name, string providerName, string providerKey) diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementProvider.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementProvider.cs index b7410490f5..2859b2e7f4 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementProvider.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementProvider.cs @@ -17,17 +17,17 @@ namespace Volo.Abp.SettingManagement public async Task GetOrNullAsync(SettingDefinition setting, string providerKey) { - return await SettingManagementStore.GetOrNullAsync(setting.Name, Name, NormalizeProviderKey(providerKey)).ConfigureAwait(false); + return await SettingManagementStore.GetOrNullAsync(setting.Name, Name, NormalizeProviderKey(providerKey)); } public virtual async Task SetAsync(SettingDefinition setting, string value, string providerKey) { - await SettingManagementStore.SetAsync(setting.Name, value, Name, NormalizeProviderKey(providerKey)).ConfigureAwait(false); + await SettingManagementStore.SetAsync(setting.Name, value, Name, NormalizeProviderKey(providerKey)); } public virtual async Task ClearAsync(SettingDefinition setting, string providerKey) { - await SettingManagementStore.DeleteAsync(setting.Name, Name, NormalizeProviderKey(providerKey)).ConfigureAwait(false); + await SettingManagementStore.DeleteAsync(setting.Name, Name, NormalizeProviderKey(providerKey)); } protected virtual string NormalizeProviderKey(string providerKey) diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementStore.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementStore.cs index 622ea4a705..8c9cfc8684 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementStore.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementStore.cs @@ -26,58 +26,58 @@ namespace Volo.Abp.SettingManagement public async Task GetOrNullAsync(string name, string providerName, string providerKey) { - var cacheItem = await GetCacheItemAsync(name, providerName, providerKey).ConfigureAwait(false); + var cacheItem = await GetCacheItemAsync(name, providerName, providerKey); return cacheItem.Value; } public async Task SetAsync(string name, string value, string providerName, string providerKey) { - var setting = await SettingRepository.FindAsync(name, providerName, providerKey).ConfigureAwait(false); + var setting = await SettingRepository.FindAsync(name, providerName, providerKey); if (setting == null) { setting = new Setting(GuidGenerator.Create(), name, value, providerName, providerKey); - await SettingRepository.InsertAsync(setting).ConfigureAwait(false); + await SettingRepository.InsertAsync(setting); } else { setting.Value = value; - await SettingRepository.UpdateAsync(setting).ConfigureAwait(false); + await SettingRepository.UpdateAsync(setting); } } public async Task> GetListAsync(string providerName, string providerKey) { - var settings = await SettingRepository.GetListAsync(providerName, providerKey).ConfigureAwait(false); + var settings = await SettingRepository.GetListAsync(providerName, providerKey); return settings.Select(s => new SettingValue(s.Name, s.Value)).ToList(); } public async Task DeleteAsync(string name, string providerName, string providerKey) { - var setting = await SettingRepository.FindAsync(name, providerName, providerKey).ConfigureAwait(false); + var setting = await SettingRepository.FindAsync(name, providerName, providerKey); if (setting != null) { - await SettingRepository.DeleteAsync(setting).ConfigureAwait(false); + await SettingRepository.DeleteAsync(setting); } } protected virtual async Task GetCacheItemAsync(string name, string providerName, string providerKey) { var cacheKey = CalculateCacheKey(name, providerName, providerKey); - var cacheItem = await Cache.GetAsync(cacheKey).ConfigureAwait(false); + var cacheItem = await Cache.GetAsync(cacheKey); if (cacheItem != null) { return cacheItem; } - var setting = await SettingRepository.FindAsync(name, providerName, providerKey).ConfigureAwait(false); + var setting = await SettingRepository.FindAsync(name, providerName, providerKey); cacheItem = new SettingCacheItem(setting?.Value); await Cache.SetAsync( cacheKey, cacheItem - ).ConfigureAwait(false); + ); return cacheItem; } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs index e5cdcb4466..cfb4cccbe3 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs @@ -79,7 +79,7 @@ namespace Volo.Abp.SettingManagement var providerValue = await provider.GetOrNullAsync( setting, provider.Name == providerName ? providerKey : null - ).ConfigureAwait(false); + ); if (providerValue != null) { value = providerValue; @@ -91,7 +91,7 @@ namespace Volo.Abp.SettingManagement value = await providerList[0].GetOrNullAsync( setting, providerKey - ).ConfigureAwait(false); + ); } if (setting.IsEncrypted) @@ -132,7 +132,7 @@ namespace Volo.Abp.SettingManagement if (providers.Count > 1 && !forceToSet && setting.IsInherited && value != null) { - var fallbackValue = await GetOrNullInternalAsync(name, providers[1].Name, null).ConfigureAwait(false); + var fallbackValue = await GetOrNullInternalAsync(name, providers[1].Name, null); if (fallbackValue == value) { //Clear the value if it's same as it's fallback value @@ -148,14 +148,14 @@ namespace Volo.Abp.SettingManagement { foreach (var provider in providers) { - await provider.ClearAsync(setting, providerKey).ConfigureAwait(false); + await provider.ClearAsync(setting, providerKey); } } else { foreach (var provider in providers) { - await provider.SetAsync(setting, value, providerKey).ConfigureAwait(false); + await provider.SetAsync(setting, value, providerKey); } } } @@ -182,7 +182,7 @@ namespace Volo.Abp.SettingManagement value = await provider.GetOrNullAsync( setting, provider.Name == providerName ? providerKey : null - ).ConfigureAwait(false); + ); if (value != null) { diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo/Abp/SettingManagement/EntityFrameworkCore/EfCoreSettingRepository.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo/Abp/SettingManagement/EntityFrameworkCore/EfCoreSettingRepository.cs index bd848ce076..86b31036d1 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo/Abp/SettingManagement/EntityFrameworkCore/EfCoreSettingRepository.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo/Abp/SettingManagement/EntityFrameworkCore/EfCoreSettingRepository.cs @@ -20,7 +20,7 @@ namespace Volo.Abp.SettingManagement.EntityFrameworkCore return await DbSet .FirstOrDefaultAsync( s => s.Name == name && s.ProviderName == providerName && s.ProviderKey == providerKey - ).ConfigureAwait(false); + ); } public async Task> GetListAsync(string providerName, string providerKey) @@ -28,7 +28,7 @@ namespace Volo.Abp.SettingManagement.EntityFrameworkCore return await DbSet .Where( s => s.ProviderName == providerName && s.ProviderKey == providerKey - ).ToListAsync().ConfigureAwait(false); + ).ToListAsync(); } } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/FodyWeavers.xml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/Volo/Abp/SettingManagement/MongoDB/MongoSettingRepository.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/Volo/Abp/SettingManagement/MongoDB/MongoSettingRepository.cs index e08c099eaa..56516dcbd0 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/Volo/Abp/SettingManagement/MongoDB/MongoSettingRepository.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/Volo/Abp/SettingManagement/MongoDB/MongoSettingRepository.cs @@ -18,12 +18,12 @@ namespace Volo.Abp.SettingManagement.MongoDB public async Task FindAsync(string name, string providerName, string providerKey) { - return await GetMongoQueryable().FirstOrDefaultAsync(s => s.Name == name && s.ProviderName == providerName && s.ProviderKey == providerKey).ConfigureAwait(false); + return await GetMongoQueryable().FirstOrDefaultAsync(s => s.Name == name && s.ProviderName == providerName && s.ProviderKey == providerKey); } public async Task> GetListAsync(string providerName, string providerKey) { - return await GetMongoQueryable().Where(s => s.ProviderName == providerName && s.ProviderKey == providerKey).ToListAsync().ConfigureAwait(false); + return await GetMongoQueryable().Where(s => s.ProviderName == providerName && s.ProviderKey == providerKey).ToListAsync(); } } } \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/FodyWeavers.xml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Navigation/SettingManagementMainMenuContributor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Navigation/SettingManagementMainMenuContributor.cs index 1dc8030bd8..8aee74c56c 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Navigation/SettingManagementMainMenuContributor.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Navigation/SettingManagementMainMenuContributor.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.SettingManagement.Web.Navigation var settingPageCreationContext = new SettingPageCreationContext(context.ServiceProvider); if ( !settingManagementPageOptions.Contributors.Any() || - !(await CheckAnyOfPagePermissionsGranted(settingManagementPageOptions, settingPageCreationContext).ConfigureAwait(false)) + !(await CheckAnyOfPagePermissionsGranted(settingManagementPageOptions, settingPageCreationContext)) ) { return; @@ -49,7 +49,7 @@ namespace Volo.Abp.SettingManagement.Web.Navigation { foreach (var contributor in settingManagementPageOptions.Contributors) { - if (await contributor.CheckPermissionsAsync(settingPageCreationContext).ConfigureAwait(false)) + if (await contributor.CheckPermissionsAsync(settingPageCreationContext)) { return true; } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml.cs index 401d845039..1fdba05707 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml.cs @@ -26,7 +26,7 @@ namespace Volo.Abp.SettingManagement.Web.Pages.SettingManagement foreach (var contributor in _options.Contributors) { - await contributor.ConfigureAsync(SettingPageCreationContext).ConfigureAwait(false); + await contributor.ConfigureAsync(SettingPageCreationContext); } } } diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests/FodyWeavers.xml b/modules/setting-management/test/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests/FodyWeavers.xml +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.MongoDB.Tests/FodyWeavers.xml b/modules/setting-management/test/Volo.Abp.SettingManagement.MongoDB.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.MongoDB.Tests/FodyWeavers.xml +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.MongoDB.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/FodyWeavers.xml b/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/FodyWeavers.xml +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/Volo/Abp/SettingManagement/SettingRepository_Tests.cs b/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/Volo/Abp/SettingManagement/SettingRepository_Tests.cs index 6d8be6fe8a..5dad99a0ca 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/Volo/Abp/SettingManagement/SettingRepository_Tests.cs +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/Volo/Abp/SettingManagement/SettingRepository_Tests.cs @@ -26,25 +26,25 @@ namespace Volo.Abp.SettingManagement "MySetting1", GlobalSettingValueProvider.ProviderName, null - ).ConfigureAwait(false)).Value.ShouldBe("42"); + )).Value.ShouldBe("42"); (await SettingRepository.FindAsync( "MySetting2", UserSettingValueProvider.ProviderName, TestData.User1Id.ToString() - ).ConfigureAwait(false)).Value.ShouldBe("user1-store-value"); + )).Value.ShouldBe("user1-store-value"); (await SettingRepository.FindAsync( "Undefined-Setting", GlobalSettingValueProvider.ProviderName, null - ).ConfigureAwait(false)).ShouldBeNull(); + )).ShouldBeNull(); } [Fact] public async Task GetListAsync() { - var settings = await SettingRepository.GetListAsync(GlobalSettingValueProvider.ProviderName, null).ConfigureAwait(false); + var settings = await SettingRepository.GetListAsync(GlobalSettingValueProvider.ProviderName, null); settings.Any().ShouldBeTrue(); settings.ShouldContain(s => s.Name == "MySetting1" && s.Value == "42"); settings.ShouldContain(s => s.Name == "MySetting2" && s.Value == "default-store-value"); diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/Volo/Abp/SettingManagement/SettingTestDataBuilder.cs b/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/Volo/Abp/SettingManagement/SettingTestDataBuilder.cs index d89111bd82..a4a0b32a03 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/Volo/Abp/SettingManagement/SettingTestDataBuilder.cs +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.TestBase/Volo/Abp/SettingManagement/SettingTestDataBuilder.cs @@ -30,7 +30,7 @@ namespace Volo.Abp.SettingManagement "42", GlobalSettingValueProvider.ProviderName ) - ).ConfigureAwait(false); + ); await _settingRepository.InsertAsync( new Setting( @@ -39,7 +39,7 @@ namespace Volo.Abp.SettingManagement "default-store-value", GlobalSettingValueProvider.ProviderName ) - ).ConfigureAwait(false); + ); await _settingRepository.InsertAsync( new Setting( @@ -49,7 +49,7 @@ namespace Volo.Abp.SettingManagement UserSettingValueProvider.ProviderName, _testData.User1Id.ToString() ) - ).ConfigureAwait(false); + ); await _settingRepository.InsertAsync( new Setting( @@ -59,7 +59,7 @@ namespace Volo.Abp.SettingManagement UserSettingValueProvider.ProviderName, _testData.User2Id.ToString() ) - ).ConfigureAwait(false); + ); await _settingRepository.InsertAsync( new Setting( @@ -68,7 +68,7 @@ namespace Volo.Abp.SettingManagement "default-store-value", GlobalSettingValueProvider.ProviderName ) - ).ConfigureAwait(false); + ); await _settingRepository.InsertAsync( new Setting( @@ -78,7 +78,7 @@ namespace Volo.Abp.SettingManagement UserSettingValueProvider.ProviderName, _testData.User1Id.ToString() ) - ).ConfigureAwait(false); + ); } } } \ No newline at end of file diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/FodyWeavers.xml b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/FodyWeavers.xml +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/DefaultValueSettingManagementProvider_Tests.cs b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/DefaultValueSettingManagementProvider_Tests.cs index 216ebf6283..20263a73c9 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/DefaultValueSettingManagementProvider_Tests.cs +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/DefaultValueSettingManagementProvider_Tests.cs @@ -21,7 +21,7 @@ namespace Volo.Abp.SettingManagement var defaultValueSettingManagementProvider = new DefaultValueSettingManagementProvider(); (await defaultValueSettingManagementProvider - .GetOrNullAsync(mySetting3, DefaultValueSettingValueProvider.ProviderName).ConfigureAwait(false)).ShouldBe("123"); + .GetOrNullAsync(mySetting3, DefaultValueSettingValueProvider.ProviderName)).ShouldBe("123"); } [Fact] @@ -30,7 +30,7 @@ namespace Volo.Abp.SettingManagement var mySetting3 = _settingDefinitionManager.Get("MySetting3"); await Assert.ThrowsAsync(async () => await new DefaultValueSettingManagementProvider().SetAsync(mySetting3, "123", - DefaultValueSettingValueProvider.ProviderName).ConfigureAwait(false)).ConfigureAwait(false); + DefaultValueSettingValueProvider.ProviderName)); } [Fact] @@ -40,7 +40,7 @@ namespace Volo.Abp.SettingManagement await Assert.ThrowsAsync(async () => await new DefaultValueSettingManagementProvider().ClearAsync(mySetting3, - DefaultValueSettingValueProvider.ProviderName).ConfigureAwait(false)).ConfigureAwait(false); + DefaultValueSettingValueProvider.ProviderName)); } } } diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingCacheItemInvalidator_Tests.cs b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingCacheItemInvalidator_Tests.cs index cf2c610b79..4a501f58e8 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingCacheItemInvalidator_Tests.cs +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingCacheItemInvalidator_Tests.cs @@ -29,9 +29,9 @@ namespace Volo.Abp.SettingManagement public async Task GetOrNullAsync_Should_Cached() { // Act - (await _cache.GetAsync(SettingCacheItem.CalculateCacheKey("MySetting2", UserSettingValueProvider.ProviderName, _testData.User1Id.ToString())).ConfigureAwait(false)).ShouldBeNull(); - await _settingManagementStore.GetOrNullAsync("MySetting2", UserSettingValueProvider.ProviderName, _testData.User1Id.ToString()).ConfigureAwait(false); - (await _cache.GetAsync(SettingCacheItem.CalculateCacheKey("MySetting2", UserSettingValueProvider.ProviderName, _testData.User1Id.ToString())).ConfigureAwait(false)).ShouldNotBeNull(); + (await _cache.GetAsync(SettingCacheItem.CalculateCacheKey("MySetting2", UserSettingValueProvider.ProviderName, _testData.User1Id.ToString()))).ShouldBeNull(); + await _settingManagementStore.GetOrNullAsync("MySetting2", UserSettingValueProvider.ProviderName, _testData.User1Id.ToString()); + (await _cache.GetAsync(SettingCacheItem.CalculateCacheKey("MySetting2", UserSettingValueProvider.ProviderName, _testData.User1Id.ToString()))).ShouldNotBeNull(); } [Fact] @@ -39,15 +39,15 @@ namespace Volo.Abp.SettingManagement { // Arrange // GetOrNullAsync will cache language. - await _settingManagementStore.GetOrNullAsync("MySetting2", UserSettingValueProvider.ProviderName, _testData.User1Id.ToString()).ConfigureAwait(false); + await _settingManagementStore.GetOrNullAsync("MySetting2", UserSettingValueProvider.ProviderName, _testData.User1Id.ToString()); // Act - var lang = await _settingRepository.FindAsync("MySetting2", UserSettingValueProvider.ProviderName, _testData.User1Id.ToString()).ConfigureAwait(false); - await _settingRepository.DeleteAsync(lang).ConfigureAwait(false); + var lang = await _settingRepository.FindAsync("MySetting2", UserSettingValueProvider.ProviderName, _testData.User1Id.ToString()); + await _settingRepository.DeleteAsync(lang); // Assert (await _cache.GetAsync( - SettingCacheItem.CalculateCacheKey("MySetting2", UserSettingValueProvider.ProviderName, _testData.User1Id.ToString())).ConfigureAwait(false)).ShouldBeNull(); + SettingCacheItem.CalculateCacheKey("MySetting2", UserSettingValueProvider.ProviderName, _testData.User1Id.ToString()))).ShouldBeNull(); } [Fact] @@ -60,15 +60,14 @@ namespace Volo.Abp.SettingManagement // GetOrNullAsync will cache language. await _settingManagementStore .GetOrNullAsync("MySetting2", GlobalSettingValueProvider.ProviderName, null) - .ConfigureAwait(false); + ; } using (_currentTenant.Change(null)) { // SetAsync will make cache invalid. await _settingManagementStore - .SetAsync("MySetting2", "MySetting2Value", GlobalSettingValueProvider.ProviderName, null) - .ConfigureAwait(false); + .SetAsync("MySetting2", "MySetting2Value", GlobalSettingValueProvider.ProviderName, null); } using (_currentTenant.Change(tenantId)) @@ -76,7 +75,7 @@ namespace Volo.Abp.SettingManagement // Assert (await _cache.GetAsync( SettingCacheItem.CalculateCacheKey("MySetting2", GlobalSettingValueProvider.ProviderName, null)) - .ConfigureAwait(false)).ShouldBeNull(); + ).ShouldBeNull(); } } } diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManagementStore_Tests.cs b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManagementStore_Tests.cs index 99ca9e70da..753ba15054 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManagementStore_Tests.cs +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManagementStore_Tests.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.SettingManagement public async Task GetOrNull_NotExist_Should_Be_Null() { var value = await _settingManagementStore.GetOrNullAsync("notExistName", "notExistProviderName", - "notExistProviderKey").ConfigureAwait(false); + "notExistProviderKey"); value.ShouldBeNull(); } @@ -33,7 +33,7 @@ namespace Volo.Abp.SettingManagement [Fact] public async Task GetOrNullAsync() { - var value = await _settingManagementStore.GetOrNullAsync("MySetting1", GlobalSettingValueProvider.ProviderName, null).ConfigureAwait(false); + var value = await _settingManagementStore.GetOrNullAsync("MySetting1", GlobalSettingValueProvider.ProviderName, null); value.ShouldNotBeNull(); value.ShouldBe("42"); @@ -42,22 +42,22 @@ namespace Volo.Abp.SettingManagement [Fact] public async Task SetAsync() { - var setting = await _settingRepository.FindAsync(_testData.SettingId).ConfigureAwait(false); + var setting = await _settingRepository.FindAsync(_testData.SettingId); setting.Value.ShouldBe("42"); - await _settingManagementStore.SetAsync("MySetting1", "43", GlobalSettingValueProvider.ProviderName, null).ConfigureAwait(false); + await _settingManagementStore.SetAsync("MySetting1", "43", GlobalSettingValueProvider.ProviderName, null); - (await _settingRepository.FindAsync(_testData.SettingId).ConfigureAwait(false)).Value.ShouldBe("43"); + (await _settingRepository.FindAsync(_testData.SettingId)).Value.ShouldBe("43"); } [Fact] public async Task DeleteAsync() { - (await _settingRepository.FindAsync(_testData.SettingId).ConfigureAwait(false)).ShouldNotBeNull(); + (await _settingRepository.FindAsync(_testData.SettingId)).ShouldNotBeNull(); - await _settingManagementStore.DeleteAsync("MySetting1", GlobalSettingValueProvider.ProviderName, null).ConfigureAwait(false); + await _settingManagementStore.DeleteAsync("MySetting1", GlobalSettingValueProvider.ProviderName, null); - (await _settingRepository.FindAsync(_testData.SettingId).ConfigureAwait(false)).ShouldBeNull(); + (await _settingRepository.FindAsync(_testData.SettingId)).ShouldBeNull(); } } diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_Basic_Tests.cs b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_Basic_Tests.cs index b9efa5640f..1dafc31570 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_Basic_Tests.cs +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_Basic_Tests.cs @@ -21,26 +21,26 @@ namespace Volo.Abp.SettingManagement { await Assert.ThrowsAsync( async () => await _settingProvider.GetOrNullAsync("UndefinedSetting") -.ConfigureAwait(false)).ConfigureAwait(false); + ); } [Fact] public async Task Should_Get_Default_Value_If_Not_Set_In_Store() { - var value = await _settingProvider.GetOrNullAsync("SettingNotSetInStore").ConfigureAwait(false); + var value = await _settingProvider.GetOrNullAsync("SettingNotSetInStore"); value.ShouldBe("default-value"); } [Fact] public async Task Should_Get_Base_Store_Value() { - (await _settingProvider.GetOrNullAsync("MySetting1").ConfigureAwait(false)).ShouldBe("42"); + (await _settingProvider.GetOrNullAsync("MySetting1")).ShouldBe("42"); } [Fact] public async Task Should_Get_All_Base_Store_Values() { - var settingValues = await _settingProvider.GetAllAsync().ConfigureAwait(false); + var settingValues = await _settingProvider.GetAllAsync(); settingValues.ShouldContain(sv => sv.Name == "MySetting1" && sv.Value == "42"); settingValues.ShouldContain(sv => sv.Name == "MySetting2" && sv.Value == "default-store-value"); settingValues.ShouldContain(sv => sv.Name == "SettingNotSetInStore" && sv.Value == "default-value"); @@ -49,10 +49,10 @@ namespace Volo.Abp.SettingManagement [Fact] public async Task Should_Set_Global_Value() { - await _settingManager.SetGlobalAsync("MySetting1", "43").ConfigureAwait(false); + await _settingManager.SetGlobalAsync("MySetting1", "43"); - (await _settingManager.GetOrNullGlobalAsync("MySetting1").ConfigureAwait(false)).ShouldBe("43"); - (await _settingProvider.GetOrNullAsync("MySetting1").ConfigureAwait(false)).ShouldBe("43"); + (await _settingManager.GetOrNullGlobalAsync("MySetting1")).ShouldBe("43"); + (await _settingProvider.GetOrNullAsync("MySetting1")).ShouldBe("43"); } } } diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs index d49ca823f1..4b42572f0a 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs @@ -35,67 +35,67 @@ namespace Volo.Abp.SettingManagement [Fact] public async Task Should_Get_From_Store_For_Given_User() { - (await _settingManager.GetOrNullForUserAsync("MySetting2", _testData.User1Id).ConfigureAwait(false)).ShouldBe("user1-store-value"); - (await _settingManager.GetOrNullForUserAsync("MySetting2", _testData.User2Id).ConfigureAwait(false)).ShouldBe("user2-store-value"); + (await _settingManager.GetOrNullForUserAsync("MySetting2", _testData.User1Id)).ShouldBe("user1-store-value"); + (await _settingManager.GetOrNullForUserAsync("MySetting2", _testData.User2Id)).ShouldBe("user2-store-value"); } [Fact] public async Task Should_Fallback_To_Default_Store_Value_When_No_Value_For_Given_User() { - (await _settingManager.GetOrNullForUserAsync("MySetting2", Guid.NewGuid()).ConfigureAwait(false)).ShouldBe("default-store-value"); + (await _settingManager.GetOrNullForUserAsync("MySetting2", Guid.NewGuid())).ShouldBe("default-store-value"); } [Fact] public async Task Should_Not_Fallback_To_Default_Store_Value_When_No_Value_For_Given_User_But_Specified_Fallback_As_False() { - (await _settingManager.GetOrNullForUserAsync("MySetting2", Guid.NewGuid(), fallback: false).ConfigureAwait(false)).ShouldBeNull(); + (await _settingManager.GetOrNullForUserAsync("MySetting2", Guid.NewGuid(), fallback: false)).ShouldBeNull(); } [Fact] public async Task Should_Get_From_Store_For_Current_User() { _currentUserId = _testData.User1Id; - (await _settingProvider.GetOrNullAsync("MySetting2").ConfigureAwait(false)).ShouldBe("user1-store-value"); + (await _settingProvider.GetOrNullAsync("MySetting2")).ShouldBe("user1-store-value"); _currentUserId = _testData.User2Id; - (await _settingProvider.GetOrNullAsync("MySetting2").ConfigureAwait(false)).ShouldBe("user2-store-value"); + (await _settingProvider.GetOrNullAsync("MySetting2")).ShouldBe("user2-store-value"); } [Fact] public async Task Should_Fallback_To_Default_Store_Value_When_No_Value_For_Current_User() { _currentUserId = Guid.NewGuid(); - (await _settingProvider.GetOrNullAsync("MySetting2").ConfigureAwait(false)).ShouldBe("default-store-value"); + (await _settingProvider.GetOrNullAsync("MySetting2")).ShouldBe("default-store-value"); } [Fact] public async Task Should_Get_From_Store_For_Current_User_With_GetOrNullForCurrentUserAsync() { _currentUserId = _testData.User1Id; - (await _settingManager.GetOrNullForCurrentUserAsync("MySetting2").ConfigureAwait(false)).ShouldBe("user1-store-value"); + (await _settingManager.GetOrNullForCurrentUserAsync("MySetting2")).ShouldBe("user1-store-value"); _currentUserId = _testData.User2Id; - (await _settingManager.GetOrNullForCurrentUserAsync("MySetting2").ConfigureAwait(false)).ShouldBe("user2-store-value"); + (await _settingManager.GetOrNullForCurrentUserAsync("MySetting2")).ShouldBe("user2-store-value"); } [Fact] public async Task Should_Fallback_To_Default_Store_Value_When_No_Value_For_Current_User_With_GetOrNullForCurrentUserAsync() { _currentUserId = Guid.NewGuid(); - (await _settingProvider.GetOrNullAsync("MySetting2").ConfigureAwait(false)).ShouldBe("default-store-value"); + (await _settingProvider.GetOrNullAsync("MySetting2")).ShouldBe("default-store-value"); } [Fact] public async Task Should_Not_Fallback_To_Default_Store_Value_When_No_Value_For_Current_User_But_Specified_Fallback_As_False() { _currentUserId = Guid.NewGuid(); - (await _settingManager.GetOrNullForCurrentUserAsync("MySetting2", fallback: false).ConfigureAwait(false)).ShouldBeNull(); + (await _settingManager.GetOrNullForCurrentUserAsync("MySetting2", fallback: false)).ShouldBeNull(); } [Fact] public async Task Should_Get_All_From_Store_For_Given_User() { - var settingValues = await _settingManager.GetAllForUserAsync(_testData.User1Id).ConfigureAwait(false); + var settingValues = await _settingManager.GetAllForUserAsync(_testData.User1Id); settingValues.ShouldContain(sv => sv.Name == "MySetting1" && sv.Value == "42"); settingValues.ShouldContain(sv => sv.Name == "MySetting2" && sv.Value == "user1-store-value"); settingValues.ShouldContain(sv => sv.Name == "SettingNotSetInStore" && sv.Value == "default-value"); @@ -104,7 +104,7 @@ namespace Volo.Abp.SettingManagement [Fact] public async Task Should_Get_All_From_Store_For_Given_User_Without_Fallback() { - var settingValues = await _settingManager.GetAllForUserAsync(_testData.User1Id, fallback: false).ConfigureAwait(false); + var settingValues = await _settingManager.GetAllForUserAsync(_testData.User1Id, fallback: false); settingValues.ShouldContain(sv => sv.Name == "MySetting2" && sv.Value == "user1-store-value"); settingValues.ShouldContain(sv => sv.Name == "MySettingWithoutInherit" && sv.Value == "user1-store-value"); settingValues.ShouldNotContain(sv => sv.Name == "MySetting1"); @@ -113,7 +113,7 @@ namespace Volo.Abp.SettingManagement [Fact] public async Task Should_Delete_Setting_Record_When_Set_To_Null() { - await _settingManager.SetForUserAsync(_testData.User1Id, "MySetting2", null).ConfigureAwait(false); + await _settingManager.SetForUserAsync(_testData.User1Id, "MySetting2", null); GetSettingsFromDbContext( UserSettingValueProvider.ProviderName, @@ -125,12 +125,12 @@ namespace Volo.Abp.SettingManagement [Fact] public async Task Should_Change_User_Setting() { - (await _settingManager.GetOrNullForUserAsync("MySetting2", _testData.User1Id).ConfigureAwait(false)) + (await _settingManager.GetOrNullForUserAsync("MySetting2", _testData.User1Id)) .ShouldBe("user1-store-value"); - await _settingManager.SetForUserAsync(_testData.User1Id, "MySetting2", "user1-new-store-value").ConfigureAwait(false); + await _settingManager.SetForUserAsync(_testData.User1Id, "MySetting2", "user1-new-store-value"); - (await _settingManager.GetOrNullForUserAsync("MySetting2", _testData.User1Id).ConfigureAwait(false)) + (await _settingManager.GetOrNullForUserAsync("MySetting2", _testData.User1Id)) .ShouldBe("user1-new-store-value"); GetSettingsFromDbContext( @@ -147,7 +147,7 @@ namespace Volo.Abp.SettingManagement _testData.User1Id, "MySetting2", "default-store-value" - ).ConfigureAwait(false); + ); GetSettingsFromDbContext( UserSettingValueProvider.ProviderName, @@ -155,7 +155,7 @@ namespace Volo.Abp.SettingManagement "MySetting2" ).Count.ShouldBe(0); - (await _settingManager.GetOrNullForUserAsync("MySetting2", _testData.User1Id).ConfigureAwait(false)) + (await _settingManager.GetOrNullForUserAsync("MySetting2", _testData.User1Id)) .ShouldBe("default-store-value"); } @@ -167,7 +167,7 @@ namespace Volo.Abp.SettingManagement "MySetting2", "default-store-value", forceToSet: true - ).ConfigureAwait(false); + ); GetSettingsFromDbContext( UserSettingValueProvider.ProviderName, @@ -175,16 +175,16 @@ namespace Volo.Abp.SettingManagement "MySetting2" ).Single().Value.ShouldBe("default-store-value"); - (await _settingManager.GetOrNullForUserAsync("MySetting2", _testData.User1Id).ConfigureAwait(false)) + (await _settingManager.GetOrNullForUserAsync("MySetting2", _testData.User1Id)) .ShouldBe("default-store-value"); } [Fact] public async Task Should_Get_For_Given_User_For_Non_Inherited_Setting() { - (await _settingManager.GetOrNullForUserAsync("MySettingWithoutInherit", _testData.User1Id).ConfigureAwait(false)).ShouldBe("user1-store-value"); - (await _settingManager.GetOrNullForUserAsync("MySettingWithoutInherit", _testData.User2Id).ConfigureAwait(false)).ShouldBeNull(); //Does not inherit! - (await _settingManager.GetOrNullGlobalAsync("MySettingWithoutInherit").ConfigureAwait(false)).ShouldBe("default-store-value"); + (await _settingManager.GetOrNullForUserAsync("MySettingWithoutInherit", _testData.User1Id)).ShouldBe("user1-store-value"); + (await _settingManager.GetOrNullForUserAsync("MySettingWithoutInherit", _testData.User2Id)).ShouldBeNull(); //Does not inherit! + (await _settingManager.GetOrNullGlobalAsync("MySettingWithoutInherit")).ShouldBe("default-store-value"); } } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/FodyWeavers.xml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/FodyWeavers.xml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs index 084c6c1920..3dabc569bd 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs @@ -27,13 +27,13 @@ namespace Volo.Abp.TenantManagement public virtual async Task GetAsync(Guid id) { return ObjectMapper.Map( - await TenantRepository.GetAsync(id).ConfigureAwait(false)); + await TenantRepository.GetAsync(id)); } public virtual async Task> GetListAsync(GetTenantsInput input) { - var count = await TenantRepository.GetCountAsync(input.Filter).ConfigureAwait(false); - var list = await TenantRepository.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter).ConfigureAwait(false); + var count = await TenantRepository.GetCountAsync(input.Filter); + var list = await TenantRepository.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter); return new PagedResultDto( count, @@ -44,15 +44,15 @@ namespace Volo.Abp.TenantManagement [Authorize(TenantManagementPermissions.Tenants.Create)] public virtual async Task CreateAsync(TenantCreateDto input) { - var tenant = await TenantManager.CreateAsync(input.Name).ConfigureAwait(false); - await TenantRepository.InsertAsync(tenant).ConfigureAwait(false); + var tenant = await TenantManager.CreateAsync(input.Name); + await TenantRepository.InsertAsync(tenant); using (CurrentTenant.Change(tenant.Id, tenant.Name)) { //TODO: Handle database creation? //TODO: Set admin email & password..? - await DataSeeder.SeedAsync(tenant.Id).ConfigureAwait(false); + await DataSeeder.SeedAsync(tenant.Id); } return ObjectMapper.Map(tenant); @@ -61,45 +61,45 @@ namespace Volo.Abp.TenantManagement [Authorize(TenantManagementPermissions.Tenants.Update)] public virtual async Task UpdateAsync(Guid id, TenantUpdateDto input) { - var tenant = await TenantRepository.GetAsync(id).ConfigureAwait(false); - await TenantManager.ChangeNameAsync(tenant, input.Name).ConfigureAwait(false); - await TenantRepository.UpdateAsync(tenant).ConfigureAwait(false); + var tenant = await TenantRepository.GetAsync(id); + await TenantManager.ChangeNameAsync(tenant, input.Name); + await TenantRepository.UpdateAsync(tenant); return ObjectMapper.Map(tenant); } [Authorize(TenantManagementPermissions.Tenants.Delete)] public virtual async Task DeleteAsync(Guid id) { - var tenant = await TenantRepository.FindAsync(id).ConfigureAwait(false); + var tenant = await TenantRepository.FindAsync(id); if (tenant == null) { return; } - await TenantRepository.DeleteAsync(tenant).ConfigureAwait(false); + await TenantRepository.DeleteAsync(tenant); } [Authorize(TenantManagementPermissions.Tenants.ManageConnectionStrings)] public virtual async Task GetDefaultConnectionStringAsync(Guid id) { - var tenant = await TenantRepository.GetAsync(id).ConfigureAwait(false); + var tenant = await TenantRepository.GetAsync(id); return tenant?.FindDefaultConnectionString(); } [Authorize(TenantManagementPermissions.Tenants.ManageConnectionStrings)] public virtual async Task UpdateDefaultConnectionStringAsync(Guid id, string defaultConnectionString) { - var tenant = await TenantRepository.GetAsync(id).ConfigureAwait(false); + var tenant = await TenantRepository.GetAsync(id); tenant.SetDefaultConnectionString(defaultConnectionString); - await TenantRepository.UpdateAsync(tenant).ConfigureAwait(false); + await TenantRepository.UpdateAsync(tenant); } [Authorize(TenantManagementPermissions.Tenants.ManageConnectionStrings)] public virtual async Task DeleteDefaultConnectionStringAsync(Guid id) { - var tenant = await TenantRepository.GetAsync(id).ConfigureAwait(false); + var tenant = await TenantRepository.GetAsync(id); tenant.RemoveDefaultConnectionString(); - await TenantRepository.UpdateAsync(tenant).ConfigureAwait(false); + await TenantRepository.UpdateAsync(tenant); } } } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/FodyWeavers.xml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/FodyWeavers.xml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/TenantManager.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/TenantManager.cs index fbc422c31a..79d7cf891e 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/TenantManager.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/TenantManager.cs @@ -19,7 +19,7 @@ namespace Volo.Abp.TenantManagement { Check.NotNull(name, nameof(name)); - await ValidateNameAsync(name).ConfigureAwait(false); + await ValidateNameAsync(name); return new Tenant(GuidGenerator.Create(), name); } @@ -28,13 +28,13 @@ namespace Volo.Abp.TenantManagement Check.NotNull(tenant, nameof(tenant)); Check.NotNull(name, nameof(name)); - await ValidateNameAsync(name, tenant.Id).ConfigureAwait(false); + await ValidateNameAsync(name, tenant.Id); tenant.SetName(name); } protected virtual async Task ValidateNameAsync(string name, Guid? expectedId = null) { - var tenant = await _tenantRepository.FindByNameAsync(name).ConfigureAwait(false); + var tenant = await _tenantRepository.FindByNameAsync(name); if (tenant != null && tenant.Id != expectedId) { throw new UserFriendlyException("Duplicate tenancy name: " + name); //TODO: A domain exception would be better..? diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/TenantStore.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/TenantStore.cs index 234f23959a..afa9af0cf2 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/TenantStore.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/TenantStore.cs @@ -28,7 +28,7 @@ namespace Volo.Abp.TenantManagement { using (_currentTenant.Change(null)) //TODO: No need this if we can implement to define host side (or tenant-independent) entities! { - var tenant = await _tenantRepository.FindByNameAsync(name).ConfigureAwait(false); + var tenant = await _tenantRepository.FindByNameAsync(name); if (tenant == null) { return null; @@ -42,7 +42,7 @@ namespace Volo.Abp.TenantManagement { using (_currentTenant.Change(null)) //TODO: No need this if we can implement to define host side (or tenant-independent) entities! { - var tenant = await _tenantRepository.FindAsync(id).ConfigureAwait(false); + var tenant = await _tenantRepository.FindAsync(id); if (tenant == null) { return null; diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs index a6deb69f4c..e211f81abf 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.TenantManagement.EntityFrameworkCore { return await DbSet .IncludeDetails(includeDetails) - .FirstOrDefaultAsync(t => t.Name == name, GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .FirstOrDefaultAsync(t => t.Name == name, GetCancellationToken(cancellationToken)); } public Tenant FindByName(string name, bool includeDetails = true) @@ -59,7 +59,7 @@ namespace Volo.Abp.TenantManagement.EntityFrameworkCore ) .OrderBy(sorting ?? nameof(Tenant.Name)) .PageBy(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task GetCountAsync(string filter = null, CancellationToken cancellationToken = default) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/FodyWeavers.xml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/FodyWeavers.xml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/FodyWeavers.xml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs index 21e5ab9b1d..1d57652833 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.TenantManagement.MongoDB CancellationToken cancellationToken = default) { return await GetMongoQueryable() - .FirstOrDefaultAsync(t => t.Name == name, GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .FirstOrDefaultAsync(t => t.Name == name, GetCancellationToken(cancellationToken)); } public Tenant FindByName(string name, bool includeDetails = true) @@ -57,7 +57,7 @@ namespace Volo.Abp.TenantManagement.MongoDB .OrderBy(sorting ?? nameof(Tenant.Name)) .As>() .PageBy>(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task GetCountAsync(string filter = null, CancellationToken cancellationToken = default) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/FodyWeavers.xml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Navigation/AbpTenantManagementWebMainMenuContributor.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Navigation/AbpTenantManagementWebMainMenuContributor.cs index 2ca66c1485..b7ef9f277e 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Navigation/AbpTenantManagementWebMainMenuContributor.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Navigation/AbpTenantManagementWebMainMenuContributor.cs @@ -24,7 +24,7 @@ namespace Volo.Abp.TenantManagement.Web.Navigation var tenantManagementMenuItem = new ApplicationMenuItem(TenantManagementMenuNames.GroupName, l["Menu:TenantManagement"], icon: "fa fa-users"); administrationMenu.AddItem(tenantManagementMenuItem); - if (await authorizationService.IsGrantedAsync(TenantManagementPermissions.Tenants.Default).ConfigureAwait(false)) + if (await authorizationService.IsGrantedAsync(TenantManagementPermissions.Tenants.Default)) { tenantManagementMenuItem.AddItem(new ApplicationMenuItem(TenantManagementMenuNames.Tenants, l["Tenants"], url: "/TenantManagement/Tenants")); } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs index 7814d7c018..481cc6b7ca 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs @@ -20,7 +20,7 @@ namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants public async Task OnGetAsync(Guid id) { - var defaultConnectionString = await _tenantAppService.GetDefaultConnectionStringAsync(id).ConfigureAwait(false); + var defaultConnectionString = await _tenantAppService.GetDefaultConnectionStringAsync(id); Tenant = new TenantInfoModel { Id = id, @@ -35,11 +35,11 @@ namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants if (Tenant.UseSharedDatabase || Tenant.DefaultConnectionString.IsNullOrWhiteSpace()) { - await _tenantAppService.DeleteDefaultConnectionStringAsync(Tenant.Id).ConfigureAwait(false); + await _tenantAppService.DeleteDefaultConnectionStringAsync(Tenant.Id); } else { - await _tenantAppService.UpdateDefaultConnectionStringAsync(Tenant.Id, Tenant.DefaultConnectionString).ConfigureAwait(false); + await _tenantAppService.UpdateDefaultConnectionStringAsync(Tenant.Id, Tenant.DefaultConnectionString); } return NoContent(); diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml.cs index 1ac1e7b97d..a602b12a65 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants ValidateModel(); var input = ObjectMapper.Map(Tenant); - await _tenantAppService.CreateAsync(input).ConfigureAwait(false); + await _tenantAppService.CreateAsync(input); return NoContent(); } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml.cs index f3bdb8f95f..58516e8ff7 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants { Tenant = ObjectMapper.Map( await _tenantAppService.GetAsync(id) -.ConfigureAwait(false)); + ); } public async Task OnPostAsync() @@ -30,7 +30,7 @@ namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants ValidateModel(); var input = ObjectMapper.Map(Tenant); - await _tenantAppService.UpdateAsync(Tenant.Id, input).ConfigureAwait(false); + await _tenantAppService.UpdateAsync(Tenant.Id, input); return NoContent(); } diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/FodyWeavers.xml b/modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/FodyWeavers.xml +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/Volo/Abp/TenantManagement/TenantAppService_Tests.cs b/modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/Volo/Abp/TenantManagement/TenantAppService_Tests.cs index 99318e52e4..3e44e7c8ea 100644 --- a/modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/Volo/Abp/TenantManagement/TenantAppService_Tests.cs +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.Application.Tests/Volo/Abp/TenantManagement/TenantAppService_Tests.cs @@ -20,14 +20,14 @@ namespace Volo.Abp.TenantManagement public async Task GetAsync() { var tenantInDb = UsingDbContext(dbContext => dbContext.Tenants.First()); - var tenant = await _tenantAppService.GetAsync(tenantInDb.Id).ConfigureAwait(false); + var tenant = await _tenantAppService.GetAsync(tenantInDb.Id); tenant.Name.ShouldBe(tenantInDb.Name); } [Fact] public async Task GetListAsync() { - var result = await _tenantAppService.GetListAsync(new GetTenantsInput()).ConfigureAwait(false); + var result = await _tenantAppService.GetListAsync(new GetTenantsInput()); result.TotalCount.ShouldBeGreaterThan(0); result.Items.ShouldContain(t => t.Name == "acme"); result.Items.ShouldContain(t => t.Name == "volosoft"); @@ -36,7 +36,7 @@ namespace Volo.Abp.TenantManagement [Fact] public async Task GetListAsync_Filtered() { - var result = await _tenantAppService.GetListAsync(new GetTenantsInput { Filter = "volo" }).ConfigureAwait(false); + var result = await _tenantAppService.GetListAsync(new GetTenantsInput { Filter = "volo" }); result.TotalCount.ShouldBeGreaterThan(0); result.Items.ShouldNotContain(t => t.Name == "acme"); result.Items.ShouldContain(t => t.Name == "volosoft"); @@ -45,7 +45,7 @@ namespace Volo.Abp.TenantManagement [Fact] public async Task GetListAsync_Sorted_Descending_By_Name() { - var result = await _tenantAppService.GetListAsync(new GetTenantsInput { Sorting = "Name DESC" }).ConfigureAwait(false); + var result = await _tenantAppService.GetListAsync(new GetTenantsInput { Sorting = "Name DESC" }); result.TotalCount.ShouldBeGreaterThan(0); var tenants = result.Items.ToList(); @@ -59,7 +59,7 @@ namespace Volo.Abp.TenantManagement public async Task CreateAsync() { var tenancyName = Guid.NewGuid().ToString("N").ToLowerInvariant(); - var tenant = await _tenantAppService.CreateAsync(new TenantCreateDto { Name = tenancyName }).ConfigureAwait(false); + var tenant = await _tenantAppService.CreateAsync(new TenantCreateDto { Name = tenancyName }); tenant.Name.ShouldBe(tenancyName); tenant.Id.ShouldNotBe(default(Guid)); } @@ -69,8 +69,8 @@ namespace Volo.Abp.TenantManagement { await Assert.ThrowsAsync(async () => { - await _tenantAppService.CreateAsync(new TenantCreateDto { Name = "acme" }).ConfigureAwait(false); - }).ConfigureAwait(false); + await _tenantAppService.CreateAsync(new TenantCreateDto { Name = "acme" }); + }); } [Fact] @@ -78,7 +78,7 @@ namespace Volo.Abp.TenantManagement { var acme = UsingDbContext(dbContext => dbContext.Tenants.Single(t => t.Name == "acme")); - var result = await _tenantAppService.UpdateAsync(acme.Id, new TenantUpdateDto { Name = "acme-renamed" }).ConfigureAwait(false); + var result = await _tenantAppService.UpdateAsync(acme.Id, new TenantUpdateDto { Name = "acme-renamed" }); result.Id.ShouldBe(acme.Id); result.Name.ShouldBe("acme-renamed"); @@ -93,8 +93,8 @@ namespace Volo.Abp.TenantManagement await Assert.ThrowsAsync(async () => { - await _tenantAppService.UpdateAsync(acme.Id, new TenantUpdateDto { Name = "volosoft" }).ConfigureAwait(false); - }).ConfigureAwait(false); + await _tenantAppService.UpdateAsync(acme.Id, new TenantUpdateDto { Name = "volosoft" }); + }); } [Fact] @@ -102,7 +102,7 @@ namespace Volo.Abp.TenantManagement { var acme = UsingDbContext(dbContext => dbContext.Tenants.Single(t => t.Name == "acme")); - await _tenantAppService.DeleteAsync(acme.Id).ConfigureAwait(false); + await _tenantAppService.DeleteAsync(acme.Id); UsingDbContext(dbContext => { diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/FodyWeavers.xml b/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/FodyWeavers.xml +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo/Abp/TenantManagement/TenantManager_Tests.cs b/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo/Abp/TenantManagement/TenantManager_Tests.cs index 0e5eba4136..8605047bbb 100644 --- a/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo/Abp/TenantManagement/TenantManager_Tests.cs +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo/Abp/TenantManagement/TenantManager_Tests.cs @@ -19,23 +19,23 @@ namespace Volo.Abp.TenantManagement [Fact] public async Task CreateAsync() { - var tenant = await _tenantManager.CreateAsync("Test").ConfigureAwait(false); + var tenant = await _tenantManager.CreateAsync("Test"); tenant.Name.ShouldBe("Test"); } [Fact] public async Task Create_Tenant_Name_Can_Not_Duplicate() { - await Assert.ThrowsAsync(async () => await _tenantManager.CreateAsync("volosoft").ConfigureAwait(false)).ConfigureAwait(false); + await Assert.ThrowsAsync(async () => await _tenantManager.CreateAsync("volosoft")); } [Fact] public async Task ChangeNameAsync() { - var tenant = await _tenantRepository.FindByNameAsync("volosoft").ConfigureAwait(false); + var tenant = await _tenantRepository.FindByNameAsync("volosoft"); tenant.ShouldNotBeNull(); - await _tenantManager.ChangeNameAsync(tenant, "newVolosoft").ConfigureAwait(false); + await _tenantManager.ChangeNameAsync(tenant, "newVolosoft"); tenant.Name.ShouldBe("newVolosoft"); } @@ -43,10 +43,10 @@ namespace Volo.Abp.TenantManagement [Fact] public async Task ChangeName_Tenant_Name_Can_Not_Duplicate() { - var tenant = await _tenantRepository.FindByNameAsync("acme").ConfigureAwait(false); + var tenant = await _tenantRepository.FindByNameAsync("acme"); tenant.ShouldNotBeNull(); - await Assert.ThrowsAsync(async () => await _tenantManager.ChangeNameAsync(tenant, "volosoft").ConfigureAwait(false)).ConfigureAwait(false); + await Assert.ThrowsAsync(async () => await _tenantManager.ChangeNameAsync(tenant, "volosoft")); } } } diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo/Abp/TenantManagement/TenantStore_Tests.cs b/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo/Abp/TenantManagement/TenantStore_Tests.cs index eb6f44068f..f199124bca 100644 --- a/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo/Abp/TenantManagement/TenantStore_Tests.cs +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo/Abp/TenantManagement/TenantStore_Tests.cs @@ -19,7 +19,7 @@ namespace Volo.Abp.TenantManagement [Fact] public async Task FindAsyncByName() { - var acme = await _tenantStore.FindAsync("acme").ConfigureAwait(false); + var acme = await _tenantStore.FindAsync("acme"); acme.ShouldNotBeNull(); acme.Name.ShouldBe("acme"); } @@ -27,10 +27,10 @@ namespace Volo.Abp.TenantManagement [Fact] public async Task FindAsyncById() { - var acme = await _tenantRepository.FindByNameAsync("acme").ConfigureAwait(false); + var acme = await _tenantRepository.FindByNameAsync("acme"); acme.ShouldNotBeNull(); - (await _tenantStore.FindAsync(acme.Id).ConfigureAwait(false)).ShouldNotBeNull(); + (await _tenantStore.FindAsync(acme.Id)).ShouldNotBeNull(); } } } diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo/Abp/TenantManagement/Tenant_Tests.cs b/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo/Abp/TenantManagement/Tenant_Tests.cs index 6256007e57..5107d1a06d 100644 --- a/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo/Abp/TenantManagement/Tenant_Tests.cs +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo/Abp/TenantManagement/Tenant_Tests.cs @@ -16,7 +16,7 @@ namespace Volo.Abp.TenantManagement [Fact] public async Task FindDefaultConnectionString() { - var acme = await _tenantRepository.FindByNameAsync("acme").ConfigureAwait(false); + var acme = await _tenantRepository.FindByNameAsync("acme"); acme.ShouldNotBeNull(); acme.FindDefaultConnectionString().ShouldBe("DefaultConnString-Value"); @@ -25,7 +25,7 @@ namespace Volo.Abp.TenantManagement [Fact] public async Task FindConnectionString() { - var acme = await _tenantRepository.FindByNameAsync("acme").ConfigureAwait(false); + var acme = await _tenantRepository.FindByNameAsync("acme"); acme.ShouldNotBeNull(); acme.FindConnectionString(Data.ConnectionStrings.DefaultConnectionStringName).ShouldBe("DefaultConnString-Value"); diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/FodyWeavers.xml b/modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/FodyWeavers.xml +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.MongoDB.Tests/FodyWeavers.xml b/modules/tenant-management/test/Volo.Abp.TenantManagement.MongoDB.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/tenant-management/test/Volo.Abp.TenantManagement.MongoDB.Tests/FodyWeavers.xml +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.MongoDB.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/FodyWeavers.xml b/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/FodyWeavers.xml +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/Volo/Abp/TenantManagement/AbpTenantManagementTestDataBuilder.cs b/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/Volo/Abp/TenantManagement/AbpTenantManagementTestDataBuilder.cs index 7127d902f5..45acc070d8 100644 --- a/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/Volo/Abp/TenantManagement/AbpTenantManagementTestDataBuilder.cs +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/Volo/Abp/TenantManagement/AbpTenantManagementTestDataBuilder.cs @@ -25,13 +25,13 @@ namespace Volo.Abp.TenantManagement private async Task AddTenantsAsync() { - var acme = await _tenantManager.CreateAsync("acme").ConfigureAwait(false); + var acme = await _tenantManager.CreateAsync("acme"); acme.ConnectionStrings.Add(new TenantConnectionString(acme.Id, ConnectionStrings.DefaultConnectionStringName, "DefaultConnString-Value")); acme.ConnectionStrings.Add(new TenantConnectionString(acme.Id, "MyConnString", "MyConnString-Value")); - await _tenantRepository.InsertAsync(acme).ConfigureAwait(false); + await _tenantRepository.InsertAsync(acme); - var volosoft = await _tenantManager.CreateAsync("volosoft").ConfigureAwait(false); - await _tenantRepository.InsertAsync(volosoft).ConfigureAwait(false); + var volosoft = await _tenantManager.CreateAsync("volosoft"); + await _tenantRepository.InsertAsync(volosoft); } } } \ No newline at end of file diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/Volo/Abp/TenantManagement/LazyLoad_Tests.cs b/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/Volo/Abp/TenantManagement/LazyLoad_Tests.cs index f055e8e9b5..4ece524e0f 100644 --- a/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/Volo/Abp/TenantManagement/LazyLoad_Tests.cs +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/Volo/Abp/TenantManagement/LazyLoad_Tests.cs @@ -22,11 +22,11 @@ namespace Volo.Abp.TenantManagement { using (var uow = GetRequiredService().Begin()) { - var role = await TenantRepository.FindByNameAsync("acme", includeDetails: false).ConfigureAwait(false); + var role = await TenantRepository.FindByNameAsync("acme", includeDetails: false); role.ConnectionStrings.ShouldNotBeNull(); role.ConnectionStrings.Any().ShouldBeTrue(); - await uow.CompleteAsync().ConfigureAwait(false); + await uow.CompleteAsync(); } } } diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/Volo/Abp/TenantManagement/TenantRepository_Tests.cs b/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/Volo/Abp/TenantManagement/TenantRepository_Tests.cs index 92ebf57353..06c75317fa 100644 --- a/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/Volo/Abp/TenantManagement/TenantRepository_Tests.cs +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.TestBase/Volo/Abp/TenantManagement/TenantRepository_Tests.cs @@ -20,13 +20,13 @@ namespace Volo.Abp.TenantManagement [Fact] public async Task FindByNameAsync() { - var tenant = await TenantRepository.FindByNameAsync("acme").ConfigureAwait(false); + var tenant = await TenantRepository.FindByNameAsync("acme"); tenant.ShouldNotBeNull(); - tenant = await TenantRepository.FindByNameAsync("undefined-tenant").ConfigureAwait(false); + tenant = await TenantRepository.FindByNameAsync("undefined-tenant"); tenant.ShouldBeNull(); - tenant = await TenantRepository.FindByNameAsync("acme", includeDetails: true).ConfigureAwait(false); + tenant = await TenantRepository.FindByNameAsync("acme", includeDetails: true); tenant.ShouldNotBeNull(); tenant.ConnectionStrings.Count.ShouldBeGreaterThanOrEqualTo(2); } @@ -34,15 +34,15 @@ namespace Volo.Abp.TenantManagement [Fact] public async Task FindAsync() { - var tenantId = (await TenantRepository.FindByNameAsync("acme").ConfigureAwait(false)).Id; + var tenantId = (await TenantRepository.FindByNameAsync("acme")).Id; - var tenant = await TenantRepository.FindAsync(tenantId).ConfigureAwait(false); + var tenant = await TenantRepository.FindAsync(tenantId); tenant.ShouldNotBeNull(); - tenant = await TenantRepository.FindAsync(Guid.NewGuid()).ConfigureAwait(false); + tenant = await TenantRepository.FindAsync(Guid.NewGuid()); tenant.ShouldBeNull(); - tenant = await TenantRepository.FindAsync(tenantId, includeDetails: true).ConfigureAwait(false); + tenant = await TenantRepository.FindAsync(tenantId, includeDetails: true); tenant.ShouldNotBeNull(); tenant.ConnectionStrings.Count.ShouldBeGreaterThanOrEqualTo(2); } @@ -50,7 +50,7 @@ namespace Volo.Abp.TenantManagement [Fact] public async Task GetListAsync() { - var tenants = await TenantRepository.GetListAsync().ConfigureAwait(false); + var tenants = await TenantRepository.GetListAsync(); tenants.ShouldContain(t => t.Name == "acme"); tenants.ShouldContain(t => t.Name == "volosoft"); } @@ -58,7 +58,7 @@ namespace Volo.Abp.TenantManagement [Fact] public async Task Should_Eager_Load_Tenant_Collections() { - var role = await TenantRepository.FindByNameAsync("acme").ConfigureAwait(false); + var role = await TenantRepository.FindByNameAsync("acme"); role.ConnectionStrings.ShouldNotBeNull(); role.ConnectionStrings.Any().ShouldBeTrue(); } diff --git a/modules/users/src/Volo.Abp.Users.Abstractions/FodyWeavers.xml b/modules/users/src/Volo.Abp.Users.Abstractions/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/users/src/Volo.Abp.Users.Abstractions/FodyWeavers.xml +++ b/modules/users/src/Volo.Abp.Users.Abstractions/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.Domain.Shared/FodyWeavers.xml b/modules/users/src/Volo.Abp.Users.Domain.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/users/src/Volo.Abp.Users.Domain.Shared/FodyWeavers.xml +++ b/modules/users/src/Volo.Abp.Users.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.Domain/FodyWeavers.xml b/modules/users/src/Volo.Abp.Users.Domain/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/users/src/Volo.Abp.Users.Domain/FodyWeavers.xml +++ b/modules/users/src/Volo.Abp.Users.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.Domain/Volo/Abp/Users/UserLookupService.cs b/modules/users/src/Volo.Abp.Users.Domain/Volo/Abp/Users/UserLookupService.cs index a45bcec7ce..09979f00e1 100644 --- a/modules/users/src/Volo.Abp.Users.Domain/Volo/Abp/Users/UserLookupService.cs +++ b/modules/users/src/Volo.Abp.Users.Domain/Volo/Abp/Users/UserLookupService.cs @@ -32,7 +32,7 @@ namespace Volo.Abp.Users public async Task FindByIdAsync(Guid id, CancellationToken cancellationToken = default) { - var localUser = await _userRepository.FindAsync(id, cancellationToken: cancellationToken).ConfigureAwait(false); + var localUser = await _userRepository.FindAsync(id, cancellationToken: cancellationToken); if (ExternalUserLookupServiceProvider == null) { @@ -48,13 +48,13 @@ namespace Volo.Abp.Users try { - externalUser = await ExternalUserLookupServiceProvider.FindByIdAsync(id, cancellationToken).ConfigureAwait(false); + externalUser = await ExternalUserLookupServiceProvider.FindByIdAsync(id, cancellationToken); if (externalUser == null) { if (localUser != null) { //TODO: Instead of deleting, should be make it inactive or something like that? - await WithNewUowAsync(() => _userRepository.DeleteAsync(localUser, cancellationToken: cancellationToken)).ConfigureAwait(false); + await WithNewUowAsync(() => _userRepository.DeleteAsync(localUser, cancellationToken: cancellationToken)); } return null; @@ -68,25 +68,25 @@ namespace Volo.Abp.Users if (localUser == null) { - await WithNewUowAsync(() => _userRepository.InsertAsync(CreateUser(externalUser), cancellationToken: cancellationToken)).ConfigureAwait(false); - return await _userRepository.FindAsync(id, cancellationToken: cancellationToken).ConfigureAwait(false); + await WithNewUowAsync(() => _userRepository.InsertAsync(CreateUser(externalUser), cancellationToken: cancellationToken)); + return await _userRepository.FindAsync(id, cancellationToken: cancellationToken); } if (localUser is IUpdateUserData && ((IUpdateUserData)localUser).Update(externalUser)) { - await WithNewUowAsync(() => _userRepository.UpdateAsync(localUser, cancellationToken: cancellationToken)).ConfigureAwait(false); + await WithNewUowAsync(() => _userRepository.UpdateAsync(localUser, cancellationToken: cancellationToken)); } else { return localUser; } - return await _userRepository.FindAsync(id, cancellationToken: cancellationToken).ConfigureAwait(false); + return await _userRepository.FindAsync(id, cancellationToken: cancellationToken); } public async Task FindByUserNameAsync(string userName, CancellationToken cancellationToken = default) { - var localUser = await _userRepository.FindByUserNameAsync(userName, cancellationToken).ConfigureAwait(false); + var localUser = await _userRepository.FindByUserNameAsync(userName, cancellationToken); if (ExternalUserLookupServiceProvider == null) { @@ -102,13 +102,13 @@ namespace Volo.Abp.Users try { - externalUser = await ExternalUserLookupServiceProvider.FindByUserNameAsync(userName, cancellationToken).ConfigureAwait(false); + externalUser = await ExternalUserLookupServiceProvider.FindByUserNameAsync(userName, cancellationToken); if (externalUser == null) { if (localUser != null) { //TODO: Instead of deleting, should be make it passive or something like that? - await WithNewUowAsync(() => _userRepository.DeleteAsync(localUser, cancellationToken: cancellationToken)).ConfigureAwait(false); + await WithNewUowAsync(() => _userRepository.DeleteAsync(localUser, cancellationToken: cancellationToken)); } return null; @@ -122,20 +122,20 @@ namespace Volo.Abp.Users if (localUser == null) { - await WithNewUowAsync(() => _userRepository.InsertAsync(CreateUser(externalUser), cancellationToken: cancellationToken)).ConfigureAwait(false); - return await _userRepository.FindAsync(externalUser.Id, cancellationToken: cancellationToken).ConfigureAwait(false); + await WithNewUowAsync(() => _userRepository.InsertAsync(CreateUser(externalUser), cancellationToken: cancellationToken)); + return await _userRepository.FindAsync(externalUser.Id, cancellationToken: cancellationToken); } if (localUser is IUpdateUserData && ((IUpdateUserData)localUser).Update(externalUser)) { - await WithNewUowAsync(() => _userRepository.UpdateAsync(localUser, cancellationToken: cancellationToken)).ConfigureAwait(false); + await WithNewUowAsync(() => _userRepository.UpdateAsync(localUser, cancellationToken: cancellationToken)); } else { return localUser; } - return await _userRepository.FindAsync(externalUser.Id, cancellationToken: cancellationToken).ConfigureAwait(false); + return await _userRepository.FindAsync(externalUser.Id, cancellationToken: cancellationToken); } protected abstract TUser CreateUser(IUserData externalUser); @@ -144,8 +144,8 @@ namespace Volo.Abp.Users { using (var uow = _unitOfWorkManager.Begin(requiresNew: true)) { - await func().ConfigureAwait(false); - await uow.SaveChangesAsync().ConfigureAwait(false); + await func(); + await uow.SaveChangesAsync(); } } } diff --git a/modules/users/src/Volo.Abp.Users.Domain/Volo/Abp/Users/UserLookupServiceExtensions.cs b/modules/users/src/Volo.Abp.Users.Domain/Volo/Abp/Users/UserLookupServiceExtensions.cs index a605db88bc..88781ea026 100644 --- a/modules/users/src/Volo.Abp.Users.Domain/Volo/Abp/Users/UserLookupServiceExtensions.cs +++ b/modules/users/src/Volo.Abp.Users.Domain/Volo/Abp/Users/UserLookupServiceExtensions.cs @@ -10,7 +10,7 @@ namespace Volo.Abp.Users public static async Task GetByIdAsync(this IUserLookupService userLookupService, Guid id, CancellationToken cancellationToken = default) where TUser : class, IUser { - var user = await userLookupService.FindByIdAsync(id, cancellationToken).ConfigureAwait(false); + var user = await userLookupService.FindByIdAsync(id, cancellationToken); if (user == null) { throw new EntityNotFoundException(typeof(TUser), id); @@ -22,7 +22,7 @@ namespace Volo.Abp.Users public static async Task GetByUserNameAsync(this IUserLookupService userLookupService, string userName, CancellationToken cancellationToken = default) where TUser : class, IUser { - var user = await userLookupService.FindByUserNameAsync(userName, cancellationToken).ConfigureAwait(false); + var user = await userLookupService.FindByUserNameAsync(userName, cancellationToken); if (user == null) { throw new EntityNotFoundException(typeof(TUser), userName); diff --git a/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/FodyWeavers.xml b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo/Abp/Users/EntityFrameworkCore/EfCoreAbpUserRepositoryBase.cs b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo/Abp/Users/EntityFrameworkCore/EfCoreAbpUserRepositoryBase.cs index 6dbc5b7d0c..5d0958101c 100644 --- a/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo/Abp/Users/EntityFrameworkCore/EfCoreAbpUserRepositoryBase.cs +++ b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo/Abp/Users/EntityFrameworkCore/EfCoreAbpUserRepositoryBase.cs @@ -21,12 +21,12 @@ namespace Volo.Abp.Users.EntityFrameworkCore public async Task FindByUserNameAsync(string userName, CancellationToken cancellationToken = default) { - return await this.FirstOrDefaultAsync(u => u.UserName == userName, GetCancellationToken(cancellationToken)).ConfigureAwait(false); + return await this.FirstOrDefaultAsync(u => u.UserName == userName, GetCancellationToken(cancellationToken)); } public virtual async Task> GetListAsync(IEnumerable ids, CancellationToken cancellationToken = default) { - return await DbSet.Where(u => ids.Contains(u.Id)).ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + return await DbSet.Where(u => ids.Contains(u.Id)).ToListAsync(GetCancellationToken(cancellationToken)); } } } \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.MongoDB/FodyWeavers.xml b/modules/users/src/Volo.Abp.Users.MongoDB/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/users/src/Volo.Abp.Users.MongoDB/FodyWeavers.xml +++ b/modules/users/src/Volo.Abp.Users.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.MongoDB/Volo/Abp/Users/MongoDB/MongoUserRepositoryBase.cs b/modules/users/src/Volo.Abp.Users.MongoDB/Volo/Abp/Users/MongoDB/MongoUserRepositoryBase.cs index a176db97b4..50d892d8dd 100644 --- a/modules/users/src/Volo.Abp.Users.MongoDB/Volo/Abp/Users/MongoDB/MongoUserRepositoryBase.cs +++ b/modules/users/src/Volo.Abp.Users.MongoDB/Volo/Abp/Users/MongoDB/MongoUserRepositoryBase.cs @@ -22,12 +22,12 @@ namespace Volo.Abp.Users.MongoDB public virtual async Task FindByUserNameAsync(string userName, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().FirstOrDefaultAsync(u => u.UserName == userName, GetCancellationToken(cancellationToken)).ConfigureAwait(false); + return await GetMongoQueryable().FirstOrDefaultAsync(u => u.UserName == userName, GetCancellationToken(cancellationToken)); } public virtual async Task> GetListAsync(IEnumerable ids, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().Where(u => ids.Contains(u.Id)).ToListAsync(GetCancellationToken(cancellationToken)).ConfigureAwait(false); + return await GetMongoQueryable().Where(u => ids.Contains(u.Id)).ToListAsync(GetCancellationToken(cancellationToken)); } } } \ No newline at end of file diff --git a/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/FodyWeavers.xml b/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/FodyWeavers.xml +++ b/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BasicConsoleApplication/AbpConsoleDemo/FodyWeavers.xml b/samples/BasicConsoleApplication/AbpConsoleDemo/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BasicConsoleApplication/AbpConsoleDemo/FodyWeavers.xml +++ b/samples/BasicConsoleApplication/AbpConsoleDemo/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/FodyWeavers.xml +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/FodyWeavers.xml +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/FodyWeavers.xml +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/FodyWeavers.xml +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/FodyWeavers.xml +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/FodyWeavers.xml +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/FodyWeavers.xml +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/FodyWeavers.xml +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/FodyWeavers.xml +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Application/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.Application/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Application/FodyWeavers.xml +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Application/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/FodyWeavers.xml +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/FodyWeavers.xml +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/FodyWeavers.xml +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Web/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.Web/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Web/FodyWeavers.xml +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Web/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/FodyWeavers.xml b/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/FodyWeavers.xml +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml b/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml b/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml b/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/FodyWeavers.xml b/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/FodyWeavers.xml +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/FodyWeavers.xml b/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/FodyWeavers.xml +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/FodyWeavers.xml +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/FodyWeavers.xml +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/FodyWeavers.xml +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/FodyWeavers.xml +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/FodyWeavers.xml +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/FodyWeavers.xml +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/FodyWeavers.xml +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/FodyWeavers.xml +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/FodyWeavers.xml +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/FodyWeavers.xml +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/FodyWeavers.xml +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/FodyWeavers.xml +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/FodyWeavers.xml +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/FodyWeavers.xml +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/FodyWeavers.xml +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/FodyWeavers.xml +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/FodyWeavers.xml +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/FodyWeavers.xml +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/FodyWeavers.xml +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml +++ b/samples/BookStore/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Application/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.Application/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore/src/Acme.BookStore.Application/FodyWeavers.xml +++ b/samples/BookStore/src/Acme.BookStore.Application/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.DbMigrator/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.DbMigrator/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore/src/Acme.BookStore.DbMigrator/FodyWeavers.xml +++ b/samples/BookStore/src/Acme.BookStore.DbMigrator/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml +++ b/samples/BookStore/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Domain/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.Domain/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore/src/Acme.BookStore.Domain/FodyWeavers.xml +++ b/samples/BookStore/src/Acme.BookStore.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml +++ b/samples/BookStore/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.HttpApi/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.HttpApi/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore/src/Acme.BookStore.HttpApi/FodyWeavers.xml +++ b/samples/BookStore/src/Acme.BookStore.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Web/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.Web/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore/src/Acme.BookStore.Web/FodyWeavers.xml +++ b/samples/BookStore/src/Acme.BookStore.Web/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.Application.Tests/FodyWeavers.xml b/samples/BookStore/test/Acme.BookStore.Application.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore/test/Acme.BookStore.Application.Tests/FodyWeavers.xml +++ b/samples/BookStore/test/Acme.BookStore.Application.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml b/samples/BookStore/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml +++ b/samples/BookStore/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml b/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml +++ b/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml b/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml +++ b/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.TestBase/FodyWeavers.xml b/samples/BookStore/test/Acme.BookStore.TestBase/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore/test/Acme.BookStore.TestBase/FodyWeavers.xml +++ b/samples/BookStore/test/Acme.BookStore.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.Web.Tests/FodyWeavers.xml b/samples/BookStore/test/Acme.BookStore.Web.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/BookStore/test/Acme.BookStore.Web.Tests/FodyWeavers.xml +++ b/samples/BookStore/test/Acme.BookStore.Web.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/FodyWeavers.xml +++ b/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Application/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.Application/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Application/FodyWeavers.xml +++ b/samples/DashboardDemo/src/DashboardDemo.Application/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.DbMigrator/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.DbMigrator/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/DashboardDemo/src/DashboardDemo.DbMigrator/FodyWeavers.xml +++ b/samples/DashboardDemo/src/DashboardDemo.DbMigrator/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/FodyWeavers.xml +++ b/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Domain/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.Domain/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Domain/FodyWeavers.xml +++ b/samples/DashboardDemo/src/DashboardDemo.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/FodyWeavers.xml +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/FodyWeavers.xml +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/FodyWeavers.xml +++ b/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.HttpApi/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.HttpApi/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/DashboardDemo/src/DashboardDemo.HttpApi/FodyWeavers.xml +++ b/samples/DashboardDemo/src/DashboardDemo.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Web/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.Web/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Web/FodyWeavers.xml +++ b/samples/DashboardDemo/src/DashboardDemo.Web/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.Application.Tests/FodyWeavers.xml b/samples/DashboardDemo/test/DashboardDemo.Application.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/DashboardDemo/test/DashboardDemo.Application.Tests/FodyWeavers.xml +++ b/samples/DashboardDemo/test/DashboardDemo.Application.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/FodyWeavers.xml b/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/FodyWeavers.xml +++ b/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/FodyWeavers.xml b/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/FodyWeavers.xml +++ b/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml b/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml +++ b/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.TestBase/FodyWeavers.xml b/samples/DashboardDemo/test/DashboardDemo.TestBase/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/DashboardDemo/test/DashboardDemo.TestBase/FodyWeavers.xml +++ b/samples/DashboardDemo/test/DashboardDemo.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.Web.Tests/FodyWeavers.xml b/samples/DashboardDemo/test/DashboardDemo.Web.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/DashboardDemo/test/DashboardDemo.Web.Tests/FodyWeavers.xml +++ b/samples/DashboardDemo/test/DashboardDemo.Web.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/FodyWeavers.xml b/samples/MicroserviceDemo/applications/AuthServer.Host/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/FodyWeavers.xml +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/FodyWeavers.xml b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/FodyWeavers.xml +++ b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/MicroserviceDemo/applications/ConsoleClientDemo/FodyWeavers.xml b/samples/MicroserviceDemo/applications/ConsoleClientDemo/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/MicroserviceDemo/applications/ConsoleClientDemo/FodyWeavers.xml +++ b/samples/MicroserviceDemo/applications/ConsoleClientDemo/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/MicroserviceDemo/applications/PublicWebSite.Host/FodyWeavers.xml b/samples/MicroserviceDemo/applications/PublicWebSite.Host/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/MicroserviceDemo/applications/PublicWebSite.Host/FodyWeavers.xml +++ b/samples/MicroserviceDemo/applications/PublicWebSite.Host/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/FodyWeavers.xml b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/FodyWeavers.xml +++ b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/MicroserviceDemo/gateways/InternalGateway.Host/FodyWeavers.xml b/samples/MicroserviceDemo/gateways/InternalGateway.Host/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/MicroserviceDemo/gateways/InternalGateway.Host/FodyWeavers.xml +++ b/samples/MicroserviceDemo/gateways/InternalGateway.Host/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/FodyWeavers.xml b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/FodyWeavers.xml +++ b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/MicroserviceDemo/microservices/BloggingService.Host/FodyWeavers.xml b/samples/MicroserviceDemo/microservices/BloggingService.Host/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/MicroserviceDemo/microservices/BloggingService.Host/FodyWeavers.xml +++ b/samples/MicroserviceDemo/microservices/BloggingService.Host/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/MicroserviceDemo/microservices/IdentityService.Host/FodyWeavers.xml b/samples/MicroserviceDemo/microservices/IdentityService.Host/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/MicroserviceDemo/microservices/IdentityService.Host/FodyWeavers.xml +++ b/samples/MicroserviceDemo/microservices/IdentityService.Host/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/MicroserviceDemo/microservices/ProductService.Host/FodyWeavers.xml b/samples/MicroserviceDemo/microservices/ProductService.Host/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/MicroserviceDemo/microservices/ProductService.Host/FodyWeavers.xml +++ b/samples/MicroserviceDemo/microservices/ProductService.Host/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/FodyWeavers.xml +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/FodyWeavers.xml +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/FodyWeavers.xml +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/FodyWeavers.xml +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/FodyWeavers.xml +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/FodyWeavers.xml +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/FodyWeavers.xml +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/FodyWeavers.xml +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/FodyWeavers.xml +++ b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/FodyWeavers.xml +++ b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/FodyWeavers.xml +++ b/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/FodyWeavers.xml +++ b/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/RabbitMqEventBus/App1/FodyWeavers.xml b/samples/RabbitMqEventBus/App1/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/RabbitMqEventBus/App1/FodyWeavers.xml +++ b/samples/RabbitMqEventBus/App1/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/RabbitMqEventBus/App2/FodyWeavers.xml b/samples/RabbitMqEventBus/App2/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/RabbitMqEventBus/App2/FodyWeavers.xml +++ b/samples/RabbitMqEventBus/App2/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/samples/RabbitMqEventBus/SharedModule/FodyWeavers.xml b/samples/RabbitMqEventBus/SharedModule/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/samples/RabbitMqEventBus/SharedModule/FodyWeavers.xml +++ b/samples/RabbitMqEventBus/SharedModule/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/FodyWeavers.xml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/FodyWeavers.xml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/FodyWeavers.xml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/FodyWeavers.xml b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/FodyWeavers.xml +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xml b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xml +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xml b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xml +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file From 9c226e6db3ca0c6b1e0485f3c78f443e7beb4e41 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 15 Jan 2020 17:58:17 +0800 Subject: [PATCH 203/411] Exclude templates & samples & abp_io projects. --- .../AbpIoLocalization.csproj | 2 -- .../AbpIoLocalization/FodyWeavers.xml | 3 -- .../AbpIoLocalization/FodyWeavers.xsd | 30 ------------------- .../BasicAspNetCoreApplication.csproj | 2 -- .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../AbpConsoleDemo/AbpConsoleDemo.csproj | 2 -- .../AbpConsoleDemo/FodyWeavers.xml | 3 -- .../AbpConsoleDemo/FodyWeavers.xsd | 30 ------------------- ...cme.BookStore.Application.Contracts.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.Application.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.DbMigrator.csproj | 1 - .../Acme.BookStore.DbMigrator/FodyWeavers.xml | 3 -- .../Acme.BookStore.DbMigrator/FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.Domain.Shared.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.Domain.csproj | 1 - .../src/Acme.BookStore.Domain/FodyWeavers.xml | 3 -- .../src/Acme.BookStore.Domain/FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.HttpApi.Client.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.HttpApi.Host.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.HttpApi.csproj | 1 - .../Acme.BookStore.HttpApi/FodyWeavers.xml | 3 -- .../Acme.BookStore.HttpApi/FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.MongoDB.csproj | 1 - .../Acme.BookStore.MongoDB/FodyWeavers.xml | 3 -- .../Acme.BookStore.MongoDB/FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.Application.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.Domain.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...Store.HttpApi.Client.ConsoleTestApp.csproj | 2 -- .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.MongoDB.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.TestBase.csproj | 1 - .../Acme.BookStore.TestBase/FodyWeavers.xml | 3 -- .../Acme.BookStore.TestBase/FodyWeavers.xsd | 30 ------------------- ...cme.BookStore.Application.Contracts.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.Application.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.DbMigrator.csproj | 1 - .../Acme.BookStore.DbMigrator/FodyWeavers.xml | 3 -- .../Acme.BookStore.DbMigrator/FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.Domain.Shared.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.Domain.csproj | 1 - .../src/Acme.BookStore.Domain/FodyWeavers.xml | 3 -- .../src/Acme.BookStore.Domain/FodyWeavers.xsd | 30 ------------------- ...re.EntityFrameworkCore.DbMigrations.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.EntityFrameworkCore.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.HttpApi.Client.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.HttpApi.csproj | 1 - .../Acme.BookStore.HttpApi/FodyWeavers.xml | 3 -- .../Acme.BookStore.HttpApi/FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.Web.csproj | 1 - .../src/Acme.BookStore.Web/FodyWeavers.xml | 3 -- .../src/Acme.BookStore.Web/FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.Application.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.Domain.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...BookStore.EntityFrameworkCore.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...Store.HttpApi.Client.ConsoleTestApp.csproj | 2 -- .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.TestBase.csproj | 1 - .../Acme.BookStore.TestBase/FodyWeavers.xml | 3 -- .../Acme.BookStore.TestBase/FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.Web.Tests.csproj | 1 - .../Acme.BookStore.Web.Tests/FodyWeavers.xml | 3 -- .../Acme.BookStore.Web.Tests/FodyWeavers.xsd | 30 ------------------- ...ookStore.BookManagement.Host.Shared.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...okStore.BookManagement.HttpApi.Host.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...Store.BookManagement.IdentityServer.csproj | 2 -- .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...e.BookStore.BookManagement.Web.Host.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...ookStore.BookManagement.Web.Unified.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...ookManagement.Application.Contracts.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...ookStore.BookManagement.Application.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...kStore.BookManagement.Domain.Shared.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...cme.BookStore.BookManagement.Domain.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ....BookManagement.EntityFrameworkCore.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...Store.BookManagement.HttpApi.Client.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...me.BookStore.BookManagement.HttpApi.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...me.BookStore.BookManagement.MongoDB.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.BookManagement.Web.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...re.BookManagement.Application.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...okStore.BookManagement.Domain.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...anagement.EntityFrameworkCore.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...ement.HttpApi.Client.ConsoleTestApp.csproj | 2 -- .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...kStore.BookManagement.MongoDB.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...e.BookStore.BookManagement.TestBase.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...cme.BookStore.Application.Contracts.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.Application.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.DbMigrator.csproj | 1 - .../Acme.BookStore.DbMigrator/FodyWeavers.xml | 3 -- .../Acme.BookStore.DbMigrator/FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.Domain.Shared.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.Domain.csproj | 1 - .../src/Acme.BookStore.Domain/FodyWeavers.xml | 3 -- .../src/Acme.BookStore.Domain/FodyWeavers.xsd | 30 ------------------- ...re.EntityFrameworkCore.DbMigrations.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.EntityFrameworkCore.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.HttpApi.Client.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.HttpApi.csproj | 1 - .../Acme.BookStore.HttpApi/FodyWeavers.xml | 3 -- .../Acme.BookStore.HttpApi/FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.Web.csproj | 1 - .../src/Acme.BookStore.Web/FodyWeavers.xml | 3 -- .../src/Acme.BookStore.Web/FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.Application.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.Domain.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...BookStore.EntityFrameworkCore.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...Store.HttpApi.Client.ConsoleTestApp.csproj | 2 -- .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.TestBase.csproj | 1 - .../Acme.BookStore.TestBase/FodyWeavers.xml | 3 -- .../Acme.BookStore.TestBase/FodyWeavers.xsd | 30 ------------------- .../Acme.BookStore.Web.Tests.csproj | 1 - .../Acme.BookStore.Web.Tests/FodyWeavers.xml | 3 -- .../Acme.BookStore.Web.Tests/FodyWeavers.xsd | 30 ------------------- ...DashboardDemo.Application.Contracts.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../DashboardDemo.Application.csproj | 1 - .../DashboardDemo.Application/FodyWeavers.xml | 3 -- .../DashboardDemo.Application/FodyWeavers.xsd | 30 ------------------- .../DashboardDemo.DbMigrator.csproj | 1 - .../DashboardDemo.DbMigrator/FodyWeavers.xml | 3 -- .../DashboardDemo.DbMigrator/FodyWeavers.xsd | 30 ------------------- .../DashboardDemo.Domain.Shared.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../DashboardDemo.Domain.csproj | 1 - .../src/DashboardDemo.Domain/FodyWeavers.xml | 3 -- .../src/DashboardDemo.Domain/FodyWeavers.xsd | 30 ------------------- ...mo.EntityFrameworkCore.DbMigrations.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../DashboardDemo.EntityFrameworkCore.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../DashboardDemo.HttpApi.Client.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../DashboardDemo.HttpApi.csproj | 1 - .../src/DashboardDemo.HttpApi/FodyWeavers.xml | 3 -- .../src/DashboardDemo.HttpApi/FodyWeavers.xsd | 30 ------------------- .../DashboardDemo.Web.csproj | 1 - .../src/DashboardDemo.Web/FodyWeavers.xml | 3 -- .../src/DashboardDemo.Web/FodyWeavers.xsd | 30 ------------------- .../DashboardDemo.Application.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../DashboardDemo.Domain.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...boardDemo.EntityFrameworkCore.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...dDemo.HttpApi.Client.ConsoleTestApp.csproj | 2 -- .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../DashboardDemo.TestBase.csproj | 1 - .../DashboardDemo.TestBase/FodyWeavers.xml | 3 -- .../DashboardDemo.TestBase/FodyWeavers.xsd | 30 ------------------- .../DashboardDemo.Web.Tests.csproj | 1 - .../DashboardDemo.Web.Tests/FodyWeavers.xml | 3 -- .../DashboardDemo.Web.Tests/FodyWeavers.xsd | 30 ------------------- .../AuthServer.Host/AuthServer.Host.csproj | 2 -- .../AuthServer.Host/FodyWeavers.xml | 3 -- .../AuthServer.Host/FodyWeavers.xsd | 30 ------------------- .../BackendAdminApp.Host.csproj | 2 -- .../BackendAdminApp.Host/FodyWeavers.xml | 3 -- .../BackendAdminApp.Host/FodyWeavers.xsd | 30 ------------------- .../ConsoleClientDemo.csproj | 2 -- .../ConsoleClientDemo/FodyWeavers.xml | 3 -- .../ConsoleClientDemo/FodyWeavers.xsd | 30 ------------------- .../PublicWebSite.Host/FodyWeavers.xml | 3 -- .../PublicWebSite.Host/FodyWeavers.xsd | 30 ------------------- .../PublicWebSite.Host.csproj | 2 -- .../BackendAdminAppGateway.Host.csproj | 2 -- .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../InternalGateway.Host/FodyWeavers.xml | 3 -- .../InternalGateway.Host/FodyWeavers.xsd | 30 ------------------- .../InternalGateway.Host.csproj | 2 -- .../PublicWebSiteGateway.Host/FodyWeavers.xml | 3 -- .../PublicWebSiteGateway.Host/FodyWeavers.xsd | 30 ------------------- .../PublicWebSiteGateway.Host.csproj | 2 -- .../BloggingService.Host.csproj | 2 -- .../BloggingService.Host/FodyWeavers.xml | 3 -- .../BloggingService.Host/FodyWeavers.xsd | 30 ------------------- .../IdentityService.Host/FodyWeavers.xml | 3 -- .../IdentityService.Host/FodyWeavers.xsd | 30 ------------------- .../IdentityService.Host.csproj | 2 -- .../ProductService.Host/FodyWeavers.xml | 3 -- .../ProductService.Host/FodyWeavers.xsd | 30 ------------------- .../ProductService.Host.csproj | 2 -- .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...uctManagement.Application.Contracts.csproj | 2 -- .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../ProductManagement.Application.csproj | 2 -- .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../ProductManagement.Domain.Shared.csproj | 2 -- .../ProductManagement.Domain/FodyWeavers.xml | 3 -- .../ProductManagement.Domain/FodyWeavers.xsd | 30 ------------------- .../ProductManagement.Domain.csproj | 2 -- .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...oductManagement.EntityFrameworkCore.csproj | 2 -- .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../ProductManagement.HttpApi.Client.csproj | 2 -- .../ProductManagement.HttpApi/FodyWeavers.xml | 3 -- .../ProductManagement.HttpApi/FodyWeavers.xsd | 30 ------------------- .../ProductManagement.HttpApi.csproj | 2 -- .../src/ProductManagement.Web/FodyWeavers.xml | 3 -- .../src/ProductManagement.Web/FodyWeavers.xsd | 30 ------------------- .../ProductManagement.Web.csproj | 2 -- .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...ProductManagement.Application.Tests.csproj | 2 -- .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../ProductManagement.Domain.Tests.csproj | 2 -- .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...anagement.EntityFrameworkCore.Tests.csproj | 2 -- .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../ProductManagement.TestBase.csproj | 2 -- samples/RabbitMqEventBus/App1/App1.csproj | 2 -- samples/RabbitMqEventBus/App1/FodyWeavers.xml | 3 -- samples/RabbitMqEventBus/App1/FodyWeavers.xsd | 30 ------------------- samples/RabbitMqEventBus/App2/App2.csproj | 2 -- samples/RabbitMqEventBus/App2/FodyWeavers.xml | 3 -- samples/RabbitMqEventBus/App2/FodyWeavers.xsd | 30 ------------------- .../SharedModule/FodyWeavers.xml | 3 -- .../SharedModule/FodyWeavers.xsd | 30 ------------------- .../SharedModule/SharedModule.csproj | 2 -- .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...MyProjectName.Application.Contracts.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...mpanyName.MyProjectName.Application.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...ompanyName.MyProjectName.DbMigrator.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...anyName.MyProjectName.Domain.Shared.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../MyCompanyName.MyProjectName.Domain.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...me.EntityFrameworkCore.DbMigrations.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...e.MyProjectName.EntityFrameworkCore.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...nyName.MyProjectName.HttpApi.Client.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...panyName.MyProjectName.HttpApi.Host.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...e.MyProjectName.HttpApi.HostWithIds.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...MyCompanyName.MyProjectName.HttpApi.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...nyName.MyProjectName.IdentityServer.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...MyCompanyName.MyProjectName.MongoDB.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...yCompanyName.MyProjectName.Web.Host.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../MyCompanyName.MyProjectName.Web.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...ame.MyProjectName.Application.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...panyName.MyProjectName.Domain.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...ojectName.EntityFrameworkCore.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...tName.HttpApi.Client.ConsoleTestApp.csproj | 2 -- .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...anyName.MyProjectName.MongoDB.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...yCompanyName.MyProjectName.TestBase.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...CompanyName.MyProjectName.Web.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...mpanyName.MyProjectName.Host.Shared.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...panyName.MyProjectName.HttpApi.Host.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...nyName.MyProjectName.IdentityServer.csproj | 2 -- .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...yCompanyName.MyProjectName.Web.Host.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...mpanyName.MyProjectName.Web.Unified.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...MyProjectName.Application.Contracts.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...mpanyName.MyProjectName.Application.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...anyName.MyProjectName.Domain.Shared.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../MyCompanyName.MyProjectName.Domain.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...e.MyProjectName.EntityFrameworkCore.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...nyName.MyProjectName.HttpApi.Client.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...MyCompanyName.MyProjectName.HttpApi.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...MyCompanyName.MyProjectName.MongoDB.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- .../MyCompanyName.MyProjectName.Web.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...ame.MyProjectName.Application.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...panyName.MyProjectName.Domain.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...ojectName.EntityFrameworkCore.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...tName.HttpApi.Client.ConsoleTestApp.csproj | 2 -- .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...anyName.MyProjectName.MongoDB.Tests.csproj | 1 - .../FodyWeavers.xml | 3 -- .../FodyWeavers.xsd | 30 ------------------- ...yCompanyName.MyProjectName.TestBase.csproj | 1 - 456 files changed, 5205 deletions(-) delete mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/FodyWeavers.xml delete mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/FodyWeavers.xsd delete mode 100644 samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/FodyWeavers.xml delete mode 100644 samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/FodyWeavers.xsd delete mode 100644 samples/BasicConsoleApplication/AbpConsoleDemo/FodyWeavers.xml delete mode 100644 samples/BasicConsoleApplication/AbpConsoleDemo/FodyWeavers.xsd delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/FodyWeavers.xml delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/FodyWeavers.xsd delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/FodyWeavers.xml delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/FodyWeavers.xml delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/FodyWeavers.xsd delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/FodyWeavers.xml delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/FodyWeavers.xsd delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/FodyWeavers.xml delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/FodyWeavers.xsd delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/FodyWeavers.xml delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/FodyWeavers.xsd delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/FodyWeavers.xml delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/FodyWeavers.xml delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/FodyWeavers.xsd delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/FodyWeavers.xml delete mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.Application/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.Application/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.Domain/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.Domain/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.Web/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.Web/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/FodyWeavers.xsd delete mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/FodyWeavers.xml delete mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/FodyWeavers.xsd delete mode 100644 samples/BookStore/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml delete mode 100644 samples/BookStore/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd delete mode 100644 samples/BookStore/src/Acme.BookStore.Application/FodyWeavers.xml delete mode 100644 samples/BookStore/src/Acme.BookStore.Application/FodyWeavers.xsd delete mode 100644 samples/BookStore/src/Acme.BookStore.DbMigrator/FodyWeavers.xml delete mode 100644 samples/BookStore/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd delete mode 100644 samples/BookStore/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml delete mode 100644 samples/BookStore/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd delete mode 100644 samples/BookStore/src/Acme.BookStore.Domain/FodyWeavers.xml delete mode 100644 samples/BookStore/src/Acme.BookStore.Domain/FodyWeavers.xsd delete mode 100644 samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml delete mode 100644 samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd delete mode 100644 samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml delete mode 100644 samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xsd delete mode 100644 samples/BookStore/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml delete mode 100644 samples/BookStore/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd delete mode 100644 samples/BookStore/src/Acme.BookStore.HttpApi/FodyWeavers.xml delete mode 100644 samples/BookStore/src/Acme.BookStore.HttpApi/FodyWeavers.xsd delete mode 100644 samples/BookStore/src/Acme.BookStore.Web/FodyWeavers.xml delete mode 100644 samples/BookStore/src/Acme.BookStore.Web/FodyWeavers.xsd delete mode 100644 samples/BookStore/test/Acme.BookStore.Application.Tests/FodyWeavers.xml delete mode 100644 samples/BookStore/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd delete mode 100644 samples/BookStore/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml delete mode 100644 samples/BookStore/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd delete mode 100644 samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml delete mode 100644 samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xsd delete mode 100644 samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml delete mode 100644 samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd delete mode 100644 samples/BookStore/test/Acme.BookStore.TestBase/FodyWeavers.xml delete mode 100644 samples/BookStore/test/Acme.BookStore.TestBase/FodyWeavers.xsd delete mode 100644 samples/BookStore/test/Acme.BookStore.Web.Tests/FodyWeavers.xml delete mode 100644 samples/BookStore/test/Acme.BookStore.Web.Tests/FodyWeavers.xsd delete mode 100644 samples/DashboardDemo/src/DashboardDemo.Application.Contracts/FodyWeavers.xml delete mode 100644 samples/DashboardDemo/src/DashboardDemo.Application.Contracts/FodyWeavers.xsd delete mode 100644 samples/DashboardDemo/src/DashboardDemo.Application/FodyWeavers.xml delete mode 100644 samples/DashboardDemo/src/DashboardDemo.Application/FodyWeavers.xsd delete mode 100644 samples/DashboardDemo/src/DashboardDemo.DbMigrator/FodyWeavers.xml delete mode 100644 samples/DashboardDemo/src/DashboardDemo.DbMigrator/FodyWeavers.xsd delete mode 100644 samples/DashboardDemo/src/DashboardDemo.Domain.Shared/FodyWeavers.xml delete mode 100644 samples/DashboardDemo/src/DashboardDemo.Domain.Shared/FodyWeavers.xsd delete mode 100644 samples/DashboardDemo/src/DashboardDemo.Domain/FodyWeavers.xml delete mode 100644 samples/DashboardDemo/src/DashboardDemo.Domain/FodyWeavers.xsd delete mode 100644 samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/FodyWeavers.xml delete mode 100644 samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd delete mode 100644 samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/FodyWeavers.xml delete mode 100644 samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/FodyWeavers.xsd delete mode 100644 samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/FodyWeavers.xml delete mode 100644 samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/FodyWeavers.xsd delete mode 100644 samples/DashboardDemo/src/DashboardDemo.HttpApi/FodyWeavers.xml delete mode 100644 samples/DashboardDemo/src/DashboardDemo.HttpApi/FodyWeavers.xsd delete mode 100644 samples/DashboardDemo/src/DashboardDemo.Web/FodyWeavers.xml delete mode 100644 samples/DashboardDemo/src/DashboardDemo.Web/FodyWeavers.xsd delete mode 100644 samples/DashboardDemo/test/DashboardDemo.Application.Tests/FodyWeavers.xml delete mode 100644 samples/DashboardDemo/test/DashboardDemo.Application.Tests/FodyWeavers.xsd delete mode 100644 samples/DashboardDemo/test/DashboardDemo.Domain.Tests/FodyWeavers.xml delete mode 100644 samples/DashboardDemo/test/DashboardDemo.Domain.Tests/FodyWeavers.xsd delete mode 100644 samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/FodyWeavers.xml delete mode 100644 samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/FodyWeavers.xsd delete mode 100644 samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml delete mode 100644 samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd delete mode 100644 samples/DashboardDemo/test/DashboardDemo.TestBase/FodyWeavers.xml delete mode 100644 samples/DashboardDemo/test/DashboardDemo.TestBase/FodyWeavers.xsd delete mode 100644 samples/DashboardDemo/test/DashboardDemo.Web.Tests/FodyWeavers.xml delete mode 100644 samples/DashboardDemo/test/DashboardDemo.Web.Tests/FodyWeavers.xsd delete mode 100644 samples/MicroserviceDemo/applications/AuthServer.Host/FodyWeavers.xml delete mode 100644 samples/MicroserviceDemo/applications/AuthServer.Host/FodyWeavers.xsd delete mode 100644 samples/MicroserviceDemo/applications/BackendAdminApp.Host/FodyWeavers.xml delete mode 100644 samples/MicroserviceDemo/applications/BackendAdminApp.Host/FodyWeavers.xsd delete mode 100644 samples/MicroserviceDemo/applications/ConsoleClientDemo/FodyWeavers.xml delete mode 100644 samples/MicroserviceDemo/applications/ConsoleClientDemo/FodyWeavers.xsd delete mode 100644 samples/MicroserviceDemo/applications/PublicWebSite.Host/FodyWeavers.xml delete mode 100644 samples/MicroserviceDemo/applications/PublicWebSite.Host/FodyWeavers.xsd delete mode 100644 samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/FodyWeavers.xml delete mode 100644 samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/FodyWeavers.xsd delete mode 100644 samples/MicroserviceDemo/gateways/InternalGateway.Host/FodyWeavers.xml delete mode 100644 samples/MicroserviceDemo/gateways/InternalGateway.Host/FodyWeavers.xsd delete mode 100644 samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/FodyWeavers.xml delete mode 100644 samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/FodyWeavers.xsd delete mode 100644 samples/MicroserviceDemo/microservices/BloggingService.Host/FodyWeavers.xml delete mode 100644 samples/MicroserviceDemo/microservices/BloggingService.Host/FodyWeavers.xsd delete mode 100644 samples/MicroserviceDemo/microservices/IdentityService.Host/FodyWeavers.xml delete mode 100644 samples/MicroserviceDemo/microservices/IdentityService.Host/FodyWeavers.xsd delete mode 100644 samples/MicroserviceDemo/microservices/ProductService.Host/FodyWeavers.xml delete mode 100644 samples/MicroserviceDemo/microservices/ProductService.Host/FodyWeavers.xsd delete mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/FodyWeavers.xml delete mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/FodyWeavers.xsd delete mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/FodyWeavers.xml delete mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/FodyWeavers.xsd delete mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/FodyWeavers.xml delete mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/FodyWeavers.xsd delete mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/FodyWeavers.xml delete mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/FodyWeavers.xsd delete mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/FodyWeavers.xml delete mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/FodyWeavers.xsd delete mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/FodyWeavers.xml delete mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/FodyWeavers.xsd delete mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/FodyWeavers.xml delete mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/FodyWeavers.xsd delete mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/FodyWeavers.xml delete mode 100644 samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/FodyWeavers.xsd delete mode 100644 samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/FodyWeavers.xml delete mode 100644 samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/FodyWeavers.xsd delete mode 100644 samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/FodyWeavers.xml delete mode 100644 samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/FodyWeavers.xsd delete mode 100644 samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/FodyWeavers.xml delete mode 100644 samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd delete mode 100644 samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/FodyWeavers.xml delete mode 100644 samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/FodyWeavers.xsd delete mode 100644 samples/RabbitMqEventBus/App1/FodyWeavers.xml delete mode 100644 samples/RabbitMqEventBus/App1/FodyWeavers.xsd delete mode 100644 samples/RabbitMqEventBus/App2/FodyWeavers.xml delete mode 100644 samples/RabbitMqEventBus/App2/FodyWeavers.xsd delete mode 100644 samples/RabbitMqEventBus/SharedModule/FodyWeavers.xml delete mode 100644 samples/RabbitMqEventBus/SharedModule/FodyWeavers.xsd delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xsd delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xsd delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/FodyWeavers.xml delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/FodyWeavers.xsd delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xsd delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xsd delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/FodyWeavers.xml delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xsd delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xsd delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xsd delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/FodyWeavers.xml delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/FodyWeavers.xsd delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xsd delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xsd delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xsd delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xsd delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml delete mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xsd delete mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml delete mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xsd delete mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml delete mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xsd delete mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml delete mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xsd delete mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml delete mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd delete mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml delete mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xsd delete mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml delete mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xsd delete mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/FodyWeavers.xml delete mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/FodyWeavers.xsd delete mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xml delete mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xsd delete mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml delete mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xsd delete mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml delete mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xsd delete mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml delete mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xsd delete mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xml delete mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xsd delete mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml delete mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xsd delete mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml delete mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xsd delete mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml delete mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xsd delete mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml delete mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xsd delete mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml delete mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xsd delete mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml delete mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xsd delete mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml delete mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xsd delete mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml delete mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xsd delete mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml delete mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xsd delete mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml delete mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xsd delete mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml delete mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xsd delete mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml delete mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xsd delete mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml delete mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd delete mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml delete mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xsd delete mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml delete mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xsd diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj b/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj index 015357cdee..7b26f13919 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj @@ -1,7 +1,5 @@ - - netstandard2.0 diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/FodyWeavers.xml b/abp_io/AbpIoLocalization/AbpIoLocalization/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/FodyWeavers.xsd b/abp_io/AbpIoLocalization/AbpIoLocalization/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/BasicAspNetCoreApplication.csproj b/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/BasicAspNetCoreApplication.csproj index 7c2f141f63..6c67e821bc 100644 --- a/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/BasicAspNetCoreApplication.csproj +++ b/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/BasicAspNetCoreApplication.csproj @@ -1,7 +1,5 @@ - - netcoreapp3.1 diff --git a/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/FodyWeavers.xml b/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/FodyWeavers.xsd b/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BasicAspNetCoreApplication/BasicAspNetCoreApplication/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BasicConsoleApplication/AbpConsoleDemo/AbpConsoleDemo.csproj b/samples/BasicConsoleApplication/AbpConsoleDemo/AbpConsoleDemo.csproj index 51a237c1d3..1eb6949649 100644 --- a/samples/BasicConsoleApplication/AbpConsoleDemo/AbpConsoleDemo.csproj +++ b/samples/BasicConsoleApplication/AbpConsoleDemo/AbpConsoleDemo.csproj @@ -1,7 +1,5 @@ - - Exe netcoreapp3.1 diff --git a/samples/BasicConsoleApplication/AbpConsoleDemo/FodyWeavers.xml b/samples/BasicConsoleApplication/AbpConsoleDemo/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BasicConsoleApplication/AbpConsoleDemo/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BasicConsoleApplication/AbpConsoleDemo/FodyWeavers.xsd b/samples/BasicConsoleApplication/AbpConsoleDemo/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BasicConsoleApplication/AbpConsoleDemo/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj index c9929bc268..5f891705ab 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj index bed9fb9b01..d5c461a4ec 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Application/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj index 544cc9aea4..9b7543cf7f 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj index f2a1a15c6b..432792f1b0 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj index e91ce47353..0d4f4786b9 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj index 5f099e6f59..92f405974e 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/Acme.BookStore.HttpApi.Host.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/Acme.BookStore.HttpApi.Host.csproj index 5ce0c2e318..2e8bbb86a4 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/Acme.BookStore.HttpApi.Host.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/Acme.BookStore.HttpApi.Host.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj index b0a778d284..d9ddc1b9f5 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/Acme.BookStore.MongoDB.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/Acme.BookStore.MongoDB.csproj index 8158d6dcf2..2bca7ac168 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/Acme.BookStore.MongoDB.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/Acme.BookStore.MongoDB.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.MongoDB/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj index fbacb8ac6c..ae2a3df88f 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj index 3c58f22367..f8845ac4dd 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj index e6a758a5ee..af90ca7a55 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj @@ -1,7 +1,5 @@ - - Exe netcoreapp3.1 diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/Acme.BookStore.MongoDB.Tests.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/Acme.BookStore.MongoDB.Tests.csproj index 1d847e3d94..df57cc47c2 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/Acme.BookStore.MongoDB.Tests.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/Acme.BookStore.MongoDB.Tests.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj index a30df18c0e..7493c31929 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/FodyWeavers.xml b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/FodyWeavers.xsd b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.TestBase/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj index d86baf264c..190f9a7d1a 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd b/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj index 5369d8a536..a013275101 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Application/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.Application/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Application/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Application/FodyWeavers.xsd b/samples/BookStore-Modular/application/src/Acme.BookStore.Application/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Application/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj index 96b2635682..7b08e55bda 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj index a67e7ef8c9..cd65444d65 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj index 977df2784d..e60a8b41fc 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/FodyWeavers.xsd b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj index 3bc80f3b52..b38c71d1d4 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/Acme.BookStore.EntityFrameworkCore.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/Acme.BookStore.EntityFrameworkCore.csproj index 02f13f8005..3ffa519de6 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/Acme.BookStore.EntityFrameworkCore.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/Acme.BookStore.EntityFrameworkCore.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xsd b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj index 9e67bd6564..80934a8e71 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj index d70fd6a24c..9814743a3a 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/FodyWeavers.xsd b/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.HttpApi/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj index 02e66458a1..c7320630e2 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Web/FodyWeavers.xml b/samples/BookStore-Modular/application/src/Acme.BookStore.Web/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Web/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Web/FodyWeavers.xsd b/samples/BookStore-Modular/application/src/Acme.BookStore.Web/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Web/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj b/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj index fbacb8ac6c..ae2a3df88f 100644 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/FodyWeavers.xml b/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd b/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj b/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj index abb65f4e60..1f9b387058 100644 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml b/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd b/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/Acme.BookStore.EntityFrameworkCore.Tests.csproj b/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/Acme.BookStore.EntityFrameworkCore.Tests.csproj index d14c887e96..dd2137ad06 100644 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/Acme.BookStore.EntityFrameworkCore.Tests.csproj +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/Acme.BookStore.EntityFrameworkCore.Tests.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml b/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xsd b/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj b/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj index e6a758a5ee..af90ca7a55 100644 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj @@ -1,7 +1,5 @@ - - Exe netcoreapp3.1 diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml b/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd b/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj b/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj index a30df18c0e..7493c31929 100644 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/FodyWeavers.xml b/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/FodyWeavers.xsd b/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.TestBase/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/Acme.BookStore.Web.Tests.csproj b/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/Acme.BookStore.Web.Tests.csproj index 0ad37386d5..df1197d3b2 100644 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/Acme.BookStore.Web.Tests.csproj +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/Acme.BookStore.Web.Tests.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/FodyWeavers.xml b/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/FodyWeavers.xsd b/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.Web.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/Acme.BookStore.BookManagement.Host.Shared.csproj b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/Acme.BookStore.BookManagement.Host.Shared.csproj index ba27c9ed67..50352a1d1c 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/Acme.BookStore.BookManagement.Host.Shared.csproj +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/Acme.BookStore.BookManagement.Host.Shared.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Host.Shared/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/Acme.BookStore.BookManagement.HttpApi.Host.csproj b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/Acme.BookStore.BookManagement.HttpApi.Host.csproj index 677c0b64fc..ae0d4280d6 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/Acme.BookStore.BookManagement.HttpApi.Host.csproj +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/Acme.BookStore.BookManagement.HttpApi.Host.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Acme.BookStore.BookManagement.IdentityServer.csproj b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Acme.BookStore.BookManagement.IdentityServer.csproj index fa91a2889f..f9aa1a54f3 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Acme.BookStore.BookManagement.IdentityServer.csproj +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Acme.BookStore.BookManagement.IdentityServer.csproj @@ -1,7 +1,5 @@ - - netcoreapp3.1 InProcess diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/Acme.BookStore.BookManagement.Web.Host.csproj b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/Acme.BookStore.BookManagement.Web.Host.csproj index 95ea1f51ea..f288fcc90e 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/Acme.BookStore.BookManagement.Web.Host.csproj +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/Acme.BookStore.BookManagement.Web.Host.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Acme.BookStore.BookManagement.Web.Unified.csproj b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Acme.BookStore.BookManagement.Web.Unified.csproj index fbe4ee99da..e23d68d2a3 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Acme.BookStore.BookManagement.Web.Unified.csproj +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Acme.BookStore.BookManagement.Web.Unified.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/Acme.BookStore.BookManagement.Application.Contracts.csproj b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/Acme.BookStore.BookManagement.Application.Contracts.csproj index 6da883d0e7..d653e6da26 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/Acme.BookStore.BookManagement.Application.Contracts.csproj +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/Acme.BookStore.BookManagement.Application.Contracts.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application.Contracts/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/Acme.BookStore.BookManagement.Application.csproj b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/Acme.BookStore.BookManagement.Application.csproj index 9178e306aa..83ebec65c8 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/Acme.BookStore.BookManagement.Application.csproj +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/Acme.BookStore.BookManagement.Application.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Application/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/Acme.BookStore.BookManagement.Domain.Shared.csproj b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/Acme.BookStore.BookManagement.Domain.Shared.csproj index 657dbc383a..0c81261452 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/Acme.BookStore.BookManagement.Domain.Shared.csproj +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/Acme.BookStore.BookManagement.Domain.Shared.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain.Shared/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/Acme.BookStore.BookManagement.Domain.csproj b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/Acme.BookStore.BookManagement.Domain.csproj index c572e909fa..eac420d7f3 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/Acme.BookStore.BookManagement.Domain.csproj +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/Acme.BookStore.BookManagement.Domain.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Domain/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/Acme.BookStore.BookManagement.EntityFrameworkCore.csproj b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/Acme.BookStore.BookManagement.EntityFrameworkCore.csproj index 5979830799..292a7ac7a2 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/Acme.BookStore.BookManagement.EntityFrameworkCore.csproj +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/Acme.BookStore.BookManagement.EntityFrameworkCore.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/Acme.BookStore.BookManagement.HttpApi.Client.csproj b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/Acme.BookStore.BookManagement.HttpApi.Client.csproj index 123be5d956..a2fdfdf62d 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/Acme.BookStore.BookManagement.HttpApi.Client.csproj +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/Acme.BookStore.BookManagement.HttpApi.Client.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi.Client/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/Acme.BookStore.BookManagement.HttpApi.csproj b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/Acme.BookStore.BookManagement.HttpApi.csproj index 7f448ab7c4..246074bbdf 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/Acme.BookStore.BookManagement.HttpApi.csproj +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/Acme.BookStore.BookManagement.HttpApi.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.HttpApi/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/Acme.BookStore.BookManagement.MongoDB.csproj b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/Acme.BookStore.BookManagement.MongoDB.csproj index c88a63733b..68f65a2c1a 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/Acme.BookStore.BookManagement.MongoDB.csproj +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/Acme.BookStore.BookManagement.MongoDB.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.MongoDB/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/Acme.BookStore.BookManagement.Web.csproj b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/Acme.BookStore.BookManagement.Web.csproj index 2479b21d70..c598fd0932 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/Acme.BookStore.BookManagement.Web.csproj +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/Acme.BookStore.BookManagement.Web.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.Web/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/Acme.BookStore.BookManagement.Application.Tests.csproj b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/Acme.BookStore.BookManagement.Application.Tests.csproj index d51290a30d..c0441db54c 100644 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/Acme.BookStore.BookManagement.Application.Tests.csproj +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/Acme.BookStore.BookManagement.Application.Tests.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Application.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/Acme.BookStore.BookManagement.Domain.Tests.csproj b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/Acme.BookStore.BookManagement.Domain.Tests.csproj index c769e873e1..de67d2e56e 100644 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/Acme.BookStore.BookManagement.Domain.Tests.csproj +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/Acme.BookStore.BookManagement.Domain.Tests.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.Domain.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests.csproj b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests.csproj index fefb2b2dfb..a262f7fe57 100644 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests.csproj +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp.csproj b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp.csproj index 1d095f1564..463c12d939 100644 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp.csproj +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp.csproj @@ -1,7 +1,5 @@ - - Exe netcoreapp3.1 diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/Acme.BookStore.BookManagement.MongoDB.Tests.csproj b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/Acme.BookStore.BookManagement.MongoDB.Tests.csproj index 9889fa2d9a..6bface97bf 100644 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/Acme.BookStore.BookManagement.MongoDB.Tests.csproj +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/Acme.BookStore.BookManagement.MongoDB.Tests.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.MongoDB.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/Acme.BookStore.BookManagement.TestBase.csproj b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/Acme.BookStore.BookManagement.TestBase.csproj index 3fc0ad29d8..81698d278f 100644 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/Acme.BookStore.BookManagement.TestBase.csproj +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/Acme.BookStore.BookManagement.TestBase.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/FodyWeavers.xml b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/FodyWeavers.xsd b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.TestBase/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj b/samples/BookStore/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj index 5e00fba216..f84f643d0a 100644 --- a/samples/BookStore/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj +++ b/samples/BookStore/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore/src/Acme.BookStore.Application.Contracts/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd b/samples/BookStore/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore/src/Acme.BookStore.Application.Contracts/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj b/samples/BookStore/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj index db07da9451..ba6fe2cf12 100644 --- a/samples/BookStore/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj +++ b/samples/BookStore/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore/src/Acme.BookStore.Application/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.Application/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore/src/Acme.BookStore.Application/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Application/FodyWeavers.xsd b/samples/BookStore/src/Acme.BookStore.Application/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore/src/Acme.BookStore.Application/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj b/samples/BookStore/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj index 350a92d76f..c77b3ae1eb 100644 --- a/samples/BookStore/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj +++ b/samples/BookStore/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore/src/Acme.BookStore.DbMigrator/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.DbMigrator/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore/src/Acme.BookStore.DbMigrator/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd b/samples/BookStore/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore/src/Acme.BookStore.DbMigrator/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj b/samples/BookStore/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj index ace979d540..2d65790558 100644 --- a/samples/BookStore/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj +++ b/samples/BookStore/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore/src/Acme.BookStore.Domain.Shared/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd b/samples/BookStore/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore/src/Acme.BookStore.Domain.Shared/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj b/samples/BookStore/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj index 91edc68463..583d62d90f 100644 --- a/samples/BookStore/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj +++ b/samples/BookStore/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore/src/Acme.BookStore.Domain/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.Domain/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore/src/Acme.BookStore.Domain/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Domain/FodyWeavers.xsd b/samples/BookStore/src/Acme.BookStore.Domain/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore/src/Acme.BookStore.Domain/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj index 019df5c96f..f8594c4ef9 100644 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Acme.BookStore.EntityFrameworkCore.csproj b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Acme.BookStore.EntityFrameworkCore.csproj index bff38865e2..f26ef0b75c 100644 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Acme.BookStore.EntityFrameworkCore.csproj +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Acme.BookStore.EntityFrameworkCore.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xsd b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj b/samples/BookStore/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj index 206e743dc1..c7f51afe34 100644 --- a/samples/BookStore/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj +++ b/samples/BookStore/src/Acme.BookStore.HttpApi.Client/Acme.BookStore.HttpApi.Client.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd b/samples/BookStore/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore/src/Acme.BookStore.HttpApi.Client/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj b/samples/BookStore/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj index 91c3520976..c9b3502524 100644 --- a/samples/BookStore/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj +++ b/samples/BookStore/src/Acme.BookStore.HttpApi/Acme.BookStore.HttpApi.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore/src/Acme.BookStore.HttpApi/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.HttpApi/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore/src/Acme.BookStore.HttpApi/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.HttpApi/FodyWeavers.xsd b/samples/BookStore/src/Acme.BookStore.HttpApi/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore/src/Acme.BookStore.HttpApi/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj b/samples/BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj index eac35c1085..a0fcb082b4 100644 --- a/samples/BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj +++ b/samples/BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore/src/Acme.BookStore.Web/FodyWeavers.xml b/samples/BookStore/src/Acme.BookStore.Web/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore/src/Acme.BookStore.Web/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Web/FodyWeavers.xsd b/samples/BookStore/src/Acme.BookStore.Web/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore/src/Acme.BookStore.Web/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj b/samples/BookStore/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj index 3d8961db86..ae2a3df88f 100644 --- a/samples/BookStore/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj +++ b/samples/BookStore/test/Acme.BookStore.Application.Tests/Acme.BookStore.Application.Tests.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore/test/Acme.BookStore.Application.Tests/FodyWeavers.xml b/samples/BookStore/test/Acme.BookStore.Application.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore/test/Acme.BookStore.Application.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd b/samples/BookStore/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore/test/Acme.BookStore.Application.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj b/samples/BookStore/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj index 2635164c31..1f9b387058 100644 --- a/samples/BookStore/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj +++ b/samples/BookStore/test/Acme.BookStore.Domain.Tests/Acme.BookStore.Domain.Tests.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml b/samples/BookStore/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore/test/Acme.BookStore.Domain.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd b/samples/BookStore/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore/test/Acme.BookStore.Domain.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/Acme.BookStore.EntityFrameworkCore.Tests.csproj b/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/Acme.BookStore.EntityFrameworkCore.Tests.csproj index 3092807849..dd2137ad06 100644 --- a/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/Acme.BookStore.EntityFrameworkCore.Tests.csproj +++ b/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/Acme.BookStore.EntityFrameworkCore.Tests.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml b/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xsd b/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore/test/Acme.BookStore.EntityFrameworkCore.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj b/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj index 25e114c271..c4387a063f 100644 --- a/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj +++ b/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj @@ -1,7 +1,5 @@ - - Exe netcoreapp3.1 diff --git a/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml b/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd b/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj b/samples/BookStore/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj index 72d0326e70..48bcc4510d 100644 --- a/samples/BookStore/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj +++ b/samples/BookStore/test/Acme.BookStore.TestBase/Acme.BookStore.TestBase.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore/test/Acme.BookStore.TestBase/FodyWeavers.xml b/samples/BookStore/test/Acme.BookStore.TestBase/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore/test/Acme.BookStore.TestBase/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.TestBase/FodyWeavers.xsd b/samples/BookStore/test/Acme.BookStore.TestBase/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore/test/Acme.BookStore.TestBase/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.Web.Tests/Acme.BookStore.Web.Tests.csproj b/samples/BookStore/test/Acme.BookStore.Web.Tests/Acme.BookStore.Web.Tests.csproj index a74205d54c..bcf4331704 100644 --- a/samples/BookStore/test/Acme.BookStore.Web.Tests/Acme.BookStore.Web.Tests.csproj +++ b/samples/BookStore/test/Acme.BookStore.Web.Tests/Acme.BookStore.Web.Tests.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/BookStore/test/Acme.BookStore.Web.Tests/FodyWeavers.xml b/samples/BookStore/test/Acme.BookStore.Web.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/BookStore/test/Acme.BookStore.Web.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/BookStore/test/Acme.BookStore.Web.Tests/FodyWeavers.xsd b/samples/BookStore/test/Acme.BookStore.Web.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/BookStore/test/Acme.BookStore.Web.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/DashboardDemo.Application.Contracts.csproj b/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/DashboardDemo.Application.Contracts.csproj index f6062235f3..bcbbde642b 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/DashboardDemo.Application.Contracts.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/DashboardDemo.Application.Contracts.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/FodyWeavers.xsd b/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/DashboardDemo/src/DashboardDemo.Application.Contracts/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Application/DashboardDemo.Application.csproj b/samples/DashboardDemo/src/DashboardDemo.Application/DashboardDemo.Application.csproj index 9d23613656..f47f8bac12 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Application/DashboardDemo.Application.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.Application/DashboardDemo.Application.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/DashboardDemo/src/DashboardDemo.Application/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.Application/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/DashboardDemo/src/DashboardDemo.Application/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Application/FodyWeavers.xsd b/samples/DashboardDemo/src/DashboardDemo.Application/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/DashboardDemo/src/DashboardDemo.Application/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.DbMigrator/DashboardDemo.DbMigrator.csproj b/samples/DashboardDemo/src/DashboardDemo.DbMigrator/DashboardDemo.DbMigrator.csproj index d4ac9b709e..469d5a2773 100644 --- a/samples/DashboardDemo/src/DashboardDemo.DbMigrator/DashboardDemo.DbMigrator.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.DbMigrator/DashboardDemo.DbMigrator.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/DashboardDemo/src/DashboardDemo.DbMigrator/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.DbMigrator/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/DashboardDemo/src/DashboardDemo.DbMigrator/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.DbMigrator/FodyWeavers.xsd b/samples/DashboardDemo/src/DashboardDemo.DbMigrator/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/DashboardDemo/src/DashboardDemo.DbMigrator/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/DashboardDemo.Domain.Shared.csproj b/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/DashboardDemo.Domain.Shared.csproj index 2cb35edb80..287fa93f57 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/DashboardDemo.Domain.Shared.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/DashboardDemo.Domain.Shared.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/FodyWeavers.xsd b/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Domain/DashboardDemo.Domain.csproj b/samples/DashboardDemo/src/DashboardDemo.Domain/DashboardDemo.Domain.csproj index f23f858019..efc5e29899 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Domain/DashboardDemo.Domain.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.Domain/DashboardDemo.Domain.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/DashboardDemo/src/DashboardDemo.Domain/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.Domain/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/DashboardDemo/src/DashboardDemo.Domain/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Domain/FodyWeavers.xsd b/samples/DashboardDemo/src/DashboardDemo.Domain/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/DashboardDemo/src/DashboardDemo.Domain/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/DashboardDemo.EntityFrameworkCore.DbMigrations.csproj b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/DashboardDemo.EntityFrameworkCore.DbMigrations.csproj index 45948431a6..c43e011cba 100644 --- a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/DashboardDemo.EntityFrameworkCore.DbMigrations.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/DashboardDemo.EntityFrameworkCore.DbMigrations.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/DashboardDemo.EntityFrameworkCore.csproj b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/DashboardDemo.EntityFrameworkCore.csproj index 6d2c1a307a..4bf2843c3c 100644 --- a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/DashboardDemo.EntityFrameworkCore.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/DashboardDemo.EntityFrameworkCore.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/FodyWeavers.xsd b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/DashboardDemo.HttpApi.Client.csproj b/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/DashboardDemo.HttpApi.Client.csproj index fd760fbcdb..4e61bfd981 100644 --- a/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/DashboardDemo.HttpApi.Client.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/DashboardDemo.HttpApi.Client.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/FodyWeavers.xsd b/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/DashboardDemo/src/DashboardDemo.HttpApi.Client/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.HttpApi/DashboardDemo.HttpApi.csproj b/samples/DashboardDemo/src/DashboardDemo.HttpApi/DashboardDemo.HttpApi.csproj index 30fbe5eb6c..b4887240c1 100644 --- a/samples/DashboardDemo/src/DashboardDemo.HttpApi/DashboardDemo.HttpApi.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.HttpApi/DashboardDemo.HttpApi.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/DashboardDemo/src/DashboardDemo.HttpApi/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.HttpApi/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/DashboardDemo/src/DashboardDemo.HttpApi/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.HttpApi/FodyWeavers.xsd b/samples/DashboardDemo/src/DashboardDemo.HttpApi/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/DashboardDemo/src/DashboardDemo.HttpApi/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemo.Web.csproj b/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemo.Web.csproj index 50d1561329..20834b96d3 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemo.Web.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemo.Web.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/DashboardDemo/src/DashboardDemo.Web/FodyWeavers.xml b/samples/DashboardDemo/src/DashboardDemo.Web/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/DashboardDemo/src/DashboardDemo.Web/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Web/FodyWeavers.xsd b/samples/DashboardDemo/src/DashboardDemo.Web/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/DashboardDemo/src/DashboardDemo.Web/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.Application.Tests/DashboardDemo.Application.Tests.csproj b/samples/DashboardDemo/test/DashboardDemo.Application.Tests/DashboardDemo.Application.Tests.csproj index be589f5a4f..06eddb4a01 100644 --- a/samples/DashboardDemo/test/DashboardDemo.Application.Tests/DashboardDemo.Application.Tests.csproj +++ b/samples/DashboardDemo/test/DashboardDemo.Application.Tests/DashboardDemo.Application.Tests.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/DashboardDemo/test/DashboardDemo.Application.Tests/FodyWeavers.xml b/samples/DashboardDemo/test/DashboardDemo.Application.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/DashboardDemo/test/DashboardDemo.Application.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.Application.Tests/FodyWeavers.xsd b/samples/DashboardDemo/test/DashboardDemo.Application.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/DashboardDemo/test/DashboardDemo.Application.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/DashboardDemo.Domain.Tests.csproj b/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/DashboardDemo.Domain.Tests.csproj index f23a82121b..ad14581a96 100644 --- a/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/DashboardDemo.Domain.Tests.csproj +++ b/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/DashboardDemo.Domain.Tests.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/FodyWeavers.xml b/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/FodyWeavers.xsd b/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/DashboardDemo/test/DashboardDemo.Domain.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/DashboardDemo.EntityFrameworkCore.Tests.csproj b/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/DashboardDemo.EntityFrameworkCore.Tests.csproj index e8360be71c..3ee3d1e46f 100644 --- a/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/DashboardDemo.EntityFrameworkCore.Tests.csproj +++ b/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/DashboardDemo.EntityFrameworkCore.Tests.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/FodyWeavers.xml b/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/FodyWeavers.xsd b/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/DashboardDemo/test/DashboardDemo.EntityFrameworkCore.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/DashboardDemo.HttpApi.Client.ConsoleTestApp.csproj b/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/DashboardDemo.HttpApi.Client.ConsoleTestApp.csproj index b9eeffa311..ea3b5f2a53 100644 --- a/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/DashboardDemo.HttpApi.Client.ConsoleTestApp.csproj +++ b/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/DashboardDemo.HttpApi.Client.ConsoleTestApp.csproj @@ -1,7 +1,5 @@ - - Exe netcoreapp3.1 diff --git a/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml b/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd b/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.TestBase/DashboardDemo.TestBase.csproj b/samples/DashboardDemo/test/DashboardDemo.TestBase/DashboardDemo.TestBase.csproj index 257730eec1..7f010a8d7b 100644 --- a/samples/DashboardDemo/test/DashboardDemo.TestBase/DashboardDemo.TestBase.csproj +++ b/samples/DashboardDemo/test/DashboardDemo.TestBase/DashboardDemo.TestBase.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/DashboardDemo/test/DashboardDemo.TestBase/FodyWeavers.xml b/samples/DashboardDemo/test/DashboardDemo.TestBase/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/DashboardDemo/test/DashboardDemo.TestBase/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.TestBase/FodyWeavers.xsd b/samples/DashboardDemo/test/DashboardDemo.TestBase/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/DashboardDemo/test/DashboardDemo.TestBase/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.Web.Tests/DashboardDemo.Web.Tests.csproj b/samples/DashboardDemo/test/DashboardDemo.Web.Tests/DashboardDemo.Web.Tests.csproj index f2f160eb7c..0ef41fe9c9 100644 --- a/samples/DashboardDemo/test/DashboardDemo.Web.Tests/DashboardDemo.Web.Tests.csproj +++ b/samples/DashboardDemo/test/DashboardDemo.Web.Tests/DashboardDemo.Web.Tests.csproj @@ -1,6 +1,5 @@ - diff --git a/samples/DashboardDemo/test/DashboardDemo.Web.Tests/FodyWeavers.xml b/samples/DashboardDemo/test/DashboardDemo.Web.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/DashboardDemo/test/DashboardDemo.Web.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/DashboardDemo/test/DashboardDemo.Web.Tests/FodyWeavers.xsd b/samples/DashboardDemo/test/DashboardDemo.Web.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/DashboardDemo/test/DashboardDemo.Web.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj index d1500bee44..158c9360ed 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj @@ -1,7 +1,5 @@ - - netcoreapp3.1 $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/FodyWeavers.xml b/samples/MicroserviceDemo/applications/AuthServer.Host/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/FodyWeavers.xsd b/samples/MicroserviceDemo/applications/AuthServer.Host/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj index 59160881b3..9dec8365fd 100644 --- a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj +++ b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj @@ -1,7 +1,5 @@ - - netcoreapp3.1 $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/FodyWeavers.xml b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/FodyWeavers.xsd b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/applications/ConsoleClientDemo/ConsoleClientDemo.csproj b/samples/MicroserviceDemo/applications/ConsoleClientDemo/ConsoleClientDemo.csproj index c3c4793bb2..7ee4c756aa 100644 --- a/samples/MicroserviceDemo/applications/ConsoleClientDemo/ConsoleClientDemo.csproj +++ b/samples/MicroserviceDemo/applications/ConsoleClientDemo/ConsoleClientDemo.csproj @@ -1,7 +1,5 @@ - - netcoreapp3.1 Exe diff --git a/samples/MicroserviceDemo/applications/ConsoleClientDemo/FodyWeavers.xml b/samples/MicroserviceDemo/applications/ConsoleClientDemo/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/MicroserviceDemo/applications/ConsoleClientDemo/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/applications/ConsoleClientDemo/FodyWeavers.xsd b/samples/MicroserviceDemo/applications/ConsoleClientDemo/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/MicroserviceDemo/applications/ConsoleClientDemo/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/applications/PublicWebSite.Host/FodyWeavers.xml b/samples/MicroserviceDemo/applications/PublicWebSite.Host/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/MicroserviceDemo/applications/PublicWebSite.Host/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/applications/PublicWebSite.Host/FodyWeavers.xsd b/samples/MicroserviceDemo/applications/PublicWebSite.Host/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/MicroserviceDemo/applications/PublicWebSite.Host/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj b/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj index b3c44ea955..2370ae2a7a 100644 --- a/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj +++ b/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj @@ -1,7 +1,5 @@ - - netcoreapp3.1 $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj index 83c3ccf439..5e608e199a 100644 --- a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj @@ -1,7 +1,5 @@ - - netcoreapp3.1 $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/FodyWeavers.xml b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/FodyWeavers.xsd b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/gateways/InternalGateway.Host/FodyWeavers.xml b/samples/MicroserviceDemo/gateways/InternalGateway.Host/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/MicroserviceDemo/gateways/InternalGateway.Host/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/gateways/InternalGateway.Host/FodyWeavers.xsd b/samples/MicroserviceDemo/gateways/InternalGateway.Host/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/MicroserviceDemo/gateways/InternalGateway.Host/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj b/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj index 668b1dcba1..46a91ef0fb 100644 --- a/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj @@ -1,7 +1,5 @@ - - netcoreapp3.1 $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/FodyWeavers.xml b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/FodyWeavers.xsd b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj index 26d7be9c94..aab4cd5900 100644 --- a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj @@ -1,7 +1,5 @@ - - netcoreapp3.1 $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj b/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj index ac5c740612..fcd2b0f78e 100644 --- a/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj @@ -1,7 +1,5 @@ - - netcoreapp3.1 $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/samples/MicroserviceDemo/microservices/BloggingService.Host/FodyWeavers.xml b/samples/MicroserviceDemo/microservices/BloggingService.Host/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/MicroserviceDemo/microservices/BloggingService.Host/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/microservices/BloggingService.Host/FodyWeavers.xsd b/samples/MicroserviceDemo/microservices/BloggingService.Host/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/MicroserviceDemo/microservices/BloggingService.Host/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/microservices/IdentityService.Host/FodyWeavers.xml b/samples/MicroserviceDemo/microservices/IdentityService.Host/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/MicroserviceDemo/microservices/IdentityService.Host/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/microservices/IdentityService.Host/FodyWeavers.xsd b/samples/MicroserviceDemo/microservices/IdentityService.Host/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/MicroserviceDemo/microservices/IdentityService.Host/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj b/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj index b8a5ecc0f6..86b3558604 100644 --- a/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj @@ -1,7 +1,5 @@ - - netcoreapp3.1 $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/samples/MicroserviceDemo/microservices/ProductService.Host/FodyWeavers.xml b/samples/MicroserviceDemo/microservices/ProductService.Host/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/MicroserviceDemo/microservices/ProductService.Host/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/microservices/ProductService.Host/FodyWeavers.xsd b/samples/MicroserviceDemo/microservices/ProductService.Host/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/MicroserviceDemo/microservices/ProductService.Host/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj b/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj index 94ebd66263..d7f7b6f68b 100644 --- a/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj @@ -1,7 +1,5 @@ - - netcoreapp3.1 $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/ProductManagement.Application.Contracts.csproj b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/ProductManagement.Application.Contracts.csproj index e6f989a4f3..0274d88e7f 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/ProductManagement.Application.Contracts.csproj +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/ProductManagement.Application.Contracts.csproj @@ -1,7 +1,5 @@ - - netstandard2.0 diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/ProductManagement.Application.csproj b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/ProductManagement.Application.csproj index 42e1d719ff..3ff28200ce 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/ProductManagement.Application.csproj +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application/ProductManagement.Application.csproj @@ -1,7 +1,5 @@ - - netcoreapp3.1 diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/ProductManagement.Domain.Shared.csproj b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/ProductManagement.Domain.Shared.csproj index f546787c17..d39dd59d83 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/ProductManagement.Domain.Shared.csproj +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain.Shared/ProductManagement.Domain.Shared.csproj @@ -1,7 +1,5 @@ - - netstandard2.0 diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/ProductManagement.Domain.csproj b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/ProductManagement.Domain.csproj index e06b471709..f739951b4e 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/ProductManagement.Domain.csproj +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/ProductManagement.Domain.csproj @@ -1,7 +1,5 @@ - - netcoreapp3.1 diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/ProductManagement.EntityFrameworkCore.csproj b/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/ProductManagement.EntityFrameworkCore.csproj index 2528ae00f8..1e7d3e5cfe 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/ProductManagement.EntityFrameworkCore.csproj +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.EntityFrameworkCore/ProductManagement.EntityFrameworkCore.csproj @@ -1,7 +1,5 @@ - - netcoreapp3.1 diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/ProductManagement.HttpApi.Client.csproj b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/ProductManagement.HttpApi.Client.csproj index 2b0f5b7dfd..ddc1e0a023 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/ProductManagement.HttpApi.Client.csproj +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi.Client/ProductManagement.HttpApi.Client.csproj @@ -1,7 +1,5 @@ - - netcoreapp3.1 diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/ProductManagement.HttpApi.csproj b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/ProductManagement.HttpApi.csproj index edb54a751f..a24813ac32 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/ProductManagement.HttpApi.csproj +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.HttpApi/ProductManagement.HttpApi.csproj @@ -1,7 +1,5 @@ - - netcoreapp3.1 diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/ProductManagement.Web.csproj b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/ProductManagement.Web.csproj index 047d5857c6..d6e31e865c 100644 --- a/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/ProductManagement.Web.csproj +++ b/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/ProductManagement.Web.csproj @@ -1,7 +1,5 @@ - - netcoreapp3.1 $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/ProductManagement.Application.Tests.csproj b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/ProductManagement.Application.Tests.csproj index 6a267ebc29..87a2c15d52 100644 --- a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/ProductManagement.Application.Tests.csproj +++ b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Application.Tests/ProductManagement.Application.Tests.csproj @@ -1,7 +1,5 @@ - - netcoreapp3.1 diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/ProductManagement.Domain.Tests.csproj b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/ProductManagement.Domain.Tests.csproj index e8afef14ef..c09b228d30 100644 --- a/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/ProductManagement.Domain.Tests.csproj +++ b/samples/MicroserviceDemo/modules/product/test/ProductManagement.Domain.Tests/ProductManagement.Domain.Tests.csproj @@ -1,7 +1,5 @@ - - netcoreapp3.1 diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/ProductManagement.EntityFrameworkCore.Tests.csproj b/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/ProductManagement.EntityFrameworkCore.Tests.csproj index d67843c440..9efdef58cf 100644 --- a/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/ProductManagement.EntityFrameworkCore.Tests.csproj +++ b/samples/MicroserviceDemo/modules/product/test/ProductManagement.EntityFrameworkCore.Tests/ProductManagement.EntityFrameworkCore.Tests.csproj @@ -1,7 +1,5 @@ - - netcoreapp3.1 diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/FodyWeavers.xml b/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/FodyWeavers.xsd b/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/ProductManagement.TestBase.csproj b/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/ProductManagement.TestBase.csproj index b609d05686..a23148b147 100644 --- a/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/ProductManagement.TestBase.csproj +++ b/samples/MicroserviceDemo/modules/product/test/ProductManagement.TestBase/ProductManagement.TestBase.csproj @@ -1,7 +1,5 @@ - - netcoreapp3.1 diff --git a/samples/RabbitMqEventBus/App1/App1.csproj b/samples/RabbitMqEventBus/App1/App1.csproj index a87bb5c4f6..c6fede0a2c 100644 --- a/samples/RabbitMqEventBus/App1/App1.csproj +++ b/samples/RabbitMqEventBus/App1/App1.csproj @@ -1,7 +1,5 @@ - - Exe netcoreapp3.1 diff --git a/samples/RabbitMqEventBus/App1/FodyWeavers.xml b/samples/RabbitMqEventBus/App1/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/RabbitMqEventBus/App1/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/RabbitMqEventBus/App1/FodyWeavers.xsd b/samples/RabbitMqEventBus/App1/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/RabbitMqEventBus/App1/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/RabbitMqEventBus/App2/App2.csproj b/samples/RabbitMqEventBus/App2/App2.csproj index a87bb5c4f6..c6fede0a2c 100644 --- a/samples/RabbitMqEventBus/App2/App2.csproj +++ b/samples/RabbitMqEventBus/App2/App2.csproj @@ -1,7 +1,5 @@ - - Exe netcoreapp3.1 diff --git a/samples/RabbitMqEventBus/App2/FodyWeavers.xml b/samples/RabbitMqEventBus/App2/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/RabbitMqEventBus/App2/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/RabbitMqEventBus/App2/FodyWeavers.xsd b/samples/RabbitMqEventBus/App2/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/RabbitMqEventBus/App2/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/RabbitMqEventBus/SharedModule/FodyWeavers.xml b/samples/RabbitMqEventBus/SharedModule/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/samples/RabbitMqEventBus/SharedModule/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/samples/RabbitMqEventBus/SharedModule/FodyWeavers.xsd b/samples/RabbitMqEventBus/SharedModule/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/samples/RabbitMqEventBus/SharedModule/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/samples/RabbitMqEventBus/SharedModule/SharedModule.csproj b/samples/RabbitMqEventBus/SharedModule/SharedModule.csproj index 3ea7e235e3..df09f473f1 100644 --- a/samples/RabbitMqEventBus/SharedModule/SharedModule.csproj +++ b/samples/RabbitMqEventBus/SharedModule/SharedModule.csproj @@ -1,7 +1,5 @@ - - netstandard2.0 diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj index aa060abe28..818b7059de 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj @@ -1,6 +1,5 @@ - diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj index e6b1d8dbde..583492c8b1 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj @@ -1,6 +1,5 @@ - diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj index e51a52d639..a4e6b5adb1 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj @@ -1,6 +1,5 @@ - diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj index 68b085474e..f0b3cc8b33 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj @@ -1,6 +1,5 @@ - diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj index 3b1a12e970..2078a20b56 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj @@ -1,6 +1,5 @@ - diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations.csproj index 6a34cde59e..cc8c7876ee 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations.csproj @@ -1,6 +1,5 @@ - diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj index 957eed2c52..f6bb500e62 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj @@ -1,6 +1,5 @@ - diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj index 294f3d4b94..4c70886aaa 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj @@ -1,6 +1,5 @@ - diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file 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 cb189073cc..8f9b068a46 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 @@ -1,6 +1,5 @@ - diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file 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 80524511c1..67f0e4d8f5 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 @@ -1,6 +1,5 @@ - diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj index d74451627e..00f7d4477f 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj @@ -1,6 +1,5 @@ - diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file 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 877133a1e0..984821fafc 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 @@ -1,6 +1,5 @@ - diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MyCompanyName.MyProjectName.MongoDB.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MyCompanyName.MyProjectName.MongoDB.csproj index 9666c3ab3e..d17f40e727 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MyCompanyName.MyProjectName.MongoDB.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MyCompanyName.MyProjectName.MongoDB.csproj @@ -1,6 +1,5 @@ - diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file 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 2c93249ac0..a55b0a23d7 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 @@ -1,6 +1,5 @@ - diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xsd b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file 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 d75d0d3440..cf24ce2843 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 @@ -1,6 +1,5 @@ - diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xsd b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyCompanyName.MyProjectName.Application.Tests.csproj b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyCompanyName.MyProjectName.Application.Tests.csproj index ccf676da60..05ccfc13de 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyCompanyName.MyProjectName.Application.Tests.csproj +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyCompanyName.MyProjectName.Application.Tests.csproj @@ -1,6 +1,5 @@ - diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xsd b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file 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 ceb620a82f..72183bd433 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 @@ -1,6 +1,5 @@ - diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xsd b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file 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 3ba736b2be..96034c840f 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 @@ -1,6 +1,5 @@ - diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj index 746034b5b5..a70855393d 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj @@ -1,7 +1,5 @@ - - Exe netcoreapp3.1 diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xsd b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file 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 c682f81f98..db0433cdae 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 @@ -1,6 +1,5 @@ - diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xsd b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file 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 fecb50250c..15eebd7f35 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 @@ -1,6 +1,5 @@ - diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/FodyWeavers.xml b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/FodyWeavers.xsd b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file 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 488329906e..0805fabd29 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 @@ -1,6 +1,5 @@ - diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xml b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xsd b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/MyCompanyName.MyProjectName.Host.Shared.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/MyCompanyName.MyProjectName.Host.Shared.csproj index 4a92618672..8cb063a10b 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/MyCompanyName.MyProjectName.Host.Shared.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/MyCompanyName.MyProjectName.Host.Shared.csproj @@ -1,6 +1,5 @@ - diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xsd b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file 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 1e44f063ce..06778e7931 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 @@ -1,6 +1,5 @@ - diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xsd b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file 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 0b0ec75956..d9295ace09 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 @@ -1,7 +1,5 @@ - - netcoreapp3.1 MyCompanyName.MyProjectName diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xsd b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file 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 cb979e484e..9a4a589770 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 @@ -1,6 +1,5 @@ - diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xml b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xsd b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file 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 12fd167aaf..e42a84c986 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 @@ -1,6 +1,5 @@ - diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj index 55b4f76402..c572d2bee1 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj @@ -1,6 +1,5 @@ - diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj index 54db88b84e..c24b0db2a5 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj @@ -1,6 +1,5 @@ - diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj index a042aac112..3483fb41cd 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj @@ -1,6 +1,5 @@ - diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj index 0b662331e2..2902edbe3d 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj @@ -1,6 +1,5 @@ - diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj index 0b904baa37..53b1dddd26 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj @@ -1,6 +1,5 @@ - diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj index 04eaa733d4..1466849524 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj @@ -1,6 +1,5 @@ - diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj index 0196e1c796..df14ec39e9 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj @@ -1,6 +1,5 @@ - diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MyCompanyName.MyProjectName.MongoDB.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MyCompanyName.MyProjectName.MongoDB.csproj index 8f6910e178..0d2c58c6a4 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MyCompanyName.MyProjectName.MongoDB.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MyCompanyName.MyProjectName.MongoDB.csproj @@ -1,6 +1,5 @@ - diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj index 3de9aff2cb..41e6fc059d 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj @@ -1,6 +1,5 @@ - diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xsd b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyCompanyName.MyProjectName.Application.Tests.csproj b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyCompanyName.MyProjectName.Application.Tests.csproj index c7d1057588..d3561b3d90 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyCompanyName.MyProjectName.Application.Tests.csproj +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyCompanyName.MyProjectName.Application.Tests.csproj @@ -1,6 +1,5 @@ - diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xsd b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file 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 b8f4564c20..968f46f080 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 @@ -1,6 +1,5 @@ - diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xsd b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file 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 41e5524b1c..4448a56b41 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 @@ -1,6 +1,5 @@ - diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj index ee215ca3c1..35f7e7344c 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj @@ -1,7 +1,5 @@ - - Exe netcoreapp3.1 diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xsd b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file 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 c46022a164..e2e63120e2 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 @@ -1,6 +1,5 @@ - diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml deleted file mode 100644 index be0de3a908..0000000000 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xsd b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file 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 62c4556427..33361c5f89 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 @@ -1,6 +1,5 @@ - From b352fa5aafe75ed2156ded93d7cbe817b85f5d73 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 15 Jan 2020 18:47:59 +0800 Subject: [PATCH 204/411] Translate fluentValidation document --- docs/zh-Hans/FluentValidation.md | 58 +++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/docs/zh-Hans/FluentValidation.md b/docs/zh-Hans/FluentValidation.md index 2254e896d4..265a2cc2ca 100644 --- a/docs/zh-Hans/FluentValidation.md +++ b/docs/zh-Hans/FluentValidation.md @@ -1,3 +1,59 @@ # FluentValidation 集成 -TODO \ No newline at end of file +ABP[验证](Validation.md)基础设施是可扩展的. [Volo.Abp.FluentValidation](https://www.nuget.org/packages/Volo.Abp.FluentValidation) NuGet 包扩展了验证系统使其与[FluentValidation](https://fluentvalidation.net/)库一起工作. + +## 安装 + +建议使用[ABP CLI](CLI.md)安装包. + +### 使用ABP CLI + +在项目(.csproj文件)的文件夹中打开命令行窗口并输入以下命令: + +````bash +abp add-package Volo.Abp.FluentValidation +```` + +### 手动安装 + +如果你想手动安装; + +1. 添加 [Volo.Abp.FluentValidation](https://www.nuget.org/packages/Volo.Abp.FluentValidation) NuGet包到你的项目: + + ```` + Install-Package Volo.Abp.FluentValidation + ```` + +2. 添加 `AbpFluentValidationModule` 到你的模块的依赖列表: + +````csharp +[DependsOn( + //...other dependencies + typeof(AbpFluentValidationModule) //Add the FluentValidation module + )] +public class YourModule : AbpModule +{ +} +```` + +## 使用 FluentValidation + +按照 [FluentValidation文档](https://fluentvalidation.net/) 创建验证器类. +例如: + +````csharp +public class CreateUpdateBookDtoValidator : AbstractValidator +{ + public CreateUpdateBookDtoValidator() + { + RuleFor(x => x.Name).Length(3, 10); + RuleFor(x => x.Price).ExclusiveBetween(0.0f, 999.0f); + } +} +```` + +ABP会自动找到这个类并在对象验证时与 `CreateUpdateBookDto` 关联. + +## 另请参阅 + +* [验证系统](Validation.md) \ No newline at end of file From 27e2461581497ccdff857daafeac01a0f9d0b24c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 15 Jan 2020 19:15:07 +0300 Subject: [PATCH 205/411] Created initial audit logging document. --- docs/en/Audit-Logging.md | 62 +++++++++++++++++- docs/en/Modules/Audit-Logging.md | 3 + docs/en/images/auditlog-object-diagram.png | Bin 0 -> 29134 bytes .../Auditing/AuditingInterceptorRegistrar.cs | 2 + 4 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 docs/en/Modules/Audit-Logging.md create mode 100644 docs/en/images/auditlog-object-diagram.png diff --git a/docs/en/Audit-Logging.md b/docs/en/Audit-Logging.md index f11a3f19e3..f2bbfafe52 100644 --- a/docs/en/Audit-Logging.md +++ b/docs/en/Audit-Logging.md @@ -1,3 +1,63 @@ # Audit Logging -TODO \ No newline at end of file +[Wikipedia](https://en.wikipedia.org/wiki/Audit_trail): "*An audit trail (also called **audit log**) is a security-relevant chronological record, set of records, and/or destination and source of records that provide documentary evidence of the sequence of activities that have affected at any time a specific operation, procedure, or event*". + +ABP Framework automates the audit logging by convention and provides configuration points to control the level of the audit logs. + +## IAuditingStore + +`IAuditingStore` is an interface that is used to save the audit log objects (explained below) by the ABP Framework. + +`SimpleLogAuditingStore` is used if no audit store was registered. It simply writes the audit object to the standard [logging system](Logging.md). + +However, [the audit logging module](Modules/Audit-Logging.md) has been configured in [the startup templates](Startup-Templates/Index.md) which writes audit log objects to a database (it supports multiple database providers). So, most of the times you don't care about how `IAuditingStore` was implemented and used. + +If you need to save the audit log objects to a custom data store, you can implement the `IAuditingStore` in your own application and replace using the [dependency injection system](Dependency-Injection.md). + +## Audit Log Object + +An **audit log object** is created for each **web request** is by default. An audit log object can be represented by the following relation diagram: + +![**auditlog-object-diagram**](D:\Github\abp\docs\en\images\auditlog-object-diagram.png) + +* **AuditLogInfo**: The root object with the following properties: + * `ApplicationName`: When you save audit logs of different applications to the same database, this property is used to distinguish the logs of the applications. + * `UserId`: Id of the current user, if the user has logged in. + * `UserName`: User name of the current user, if the user has logged in (this value is here to not depend on the identity module/system for lookup). + * `TenantId`: Id of the current tenant, for a multi-tenant application. + * `TenantName`: Name of the current tenant, for a multi-tenant application. + * `ExecutionTime`: The time when this audit log object has been created. + * `ExecutionDuration`: Total execution duration of the request, in milliseconds. This can be used to observe the performance of the application. + * `ClientId`: Id of the current client, if the client has been authenticated. A client is generally a 3rd-party application using the system over an HTTP API. + * `ClientName`: Name of the current client, if available. + * `ClientIpAddress`: IP address of the client/user device. + * `CorrelationId`: Current [Correlation Id]((CorrelationId.md)). Correlation Id is used to relate the audit logs written by different applications (or microservices) in a single logical operation. + * `BrowserInfo`: Browser name/version info of the current user, if available. + * `HttpMethod`: HTTP method of the current request (GET, POST, PUT, DELETE... etc.). + * `HttpStatusCode`: HTTP response status code for this request. + * `Url`: URL of the request. +* **AuditLogActionInfo**: An audit log action is typically a controller action or an [application service](Application-Services.md) method call during the web request. One audit log may contain multiple actions. An action object has the following properties: + * `ServiceName`: Name of the executed controller/service. + * `MethodName`: Name of the executed method of the controller/service. + * `Parameters`: A JSON formatted text representing the parameters passed to the method. + * `ExecutionTime`: The time when this method was executed. + * `ExecutionDuration`: Duration of the method execution, in milliseconds. This can be used to observe the performance of the method. +* **EntityChangeInfo**: Represents a change of an entity in this web request. An audit log may contain zero or more entity changes. An entity change has the following properties: + * `ChangeTime`: The time when the entity was changed. + * `ChangeType`: An enum with the following fields: `Created` (0), `Updated` (1) and `Deleted` (2). + * `EntityId`: Id of the entity that was changed. + * `EntityTenantId`: Id of the tenant this entity belongs to. + * `EntityTypeFullName`: Type (class) name of the entity with full namespace (like *Acme.BookStore.Book* for the Book entity). +* **EntityPropertyChangeInfo**: Represents a change of a property of an entity. An entity change info (explained above) may contain one or more property change with the following properties: + * `NewValue`: New value of the property. It is `null` if the entity was deleted. + * `OriginalValue`: Old/original value before the change. It is `null` if the entity was newly created. + * `PropertyName`: The name of the property on the entity class. + * `PropertyTypeFullName`: Type (class) name of the property with full namespace. +* **Exception**: An audit log object may contain zero or more exception. In this way, you can get a report of the failed requests. +* **Comment**: An arbitrary string value to add custom messages to the audit log entry. An audit log object may contain zero or more comments. + +In addition to the standard properties explained above, `AuditLogInfo`, `AuditLogActionInfo` and `EntityChangeInfo` objects implement the `IHasExtraProperties` interface, so you can add custom properties to these objects. + +## Audit Logging Module + +... \ No newline at end of file diff --git a/docs/en/Modules/Audit-Logging.md b/docs/en/Modules/Audit-Logging.md new file mode 100644 index 0000000000..a0c32699a5 --- /dev/null +++ b/docs/en/Modules/Audit-Logging.md @@ -0,0 +1,3 @@ +# Audit Logging Module + +TODO \ No newline at end of file diff --git a/docs/en/images/auditlog-object-diagram.png b/docs/en/images/auditlog-object-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..a7e86a2bb214f27b93032292f78d8d24eedf2fca GIT binary patch literal 29134 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 Date: Wed, 15 Jan 2020 21:47:51 +0300 Subject: [PATCH 206/411] Added more sections to the audit log document. --- docs/en/Audit-Logging.md | 201 +++++++++++++++++- .../Volo/Abp/AuditLogging/AuditingStore.cs | 1 + 2 files changed, 196 insertions(+), 6 deletions(-) diff --git a/docs/en/Audit-Logging.md b/docs/en/Audit-Logging.md index f2bbfafe52..7429eff8e4 100644 --- a/docs/en/Audit-Logging.md +++ b/docs/en/Audit-Logging.md @@ -4,15 +4,198 @@ ABP Framework automates the audit logging by convention and provides configuration points to control the level of the audit logs. +An audit log object (see the Audit Log Object section below) is typically created & saved per web request. It includes; + +* **Request & response details** (like URL, Http method, Browser info, HTTP status code... etc.). +* **Performed actions** (controller actions and application service method calls with their parameters). +* **Entity changes** occurred in the web request. +* **Exception** information (if there was an error while executing the request). +* **Request duration** (to measure the performance of the application). + +> [Startup templates](Startup-Templates/Index.md) are configured for the audit logging system which is suitable for most of the applications. Use this document for a detailed control over the audit log system. + +## UseAuditing() + +`UseAuditing()` middleware should be added to the ASP.NET Core request pipeline in order to create and save the audit logs. If you've created your applications using [the startup templates](Startup-Templates/Index.md), it is already added. + +## AbpAuditingOptions + +`AbpAuditingOptions` is the main [options object](Options.md) to configure the audit log system. You can configure it in the `ConfigureServices` method of your [module](Module-Development-Basics.md): + +````csharp +Configure(options => +{ + options.IsEnabled = false; //Disables the auditing system +}); +```` + +Here, a list of the options you can configure: + +* `IsEnabled` (default: `true`): A root switch to enable or disable the auditing system. Other options is not used if this value is `false`. +* `HideErrors` (default: `true`): Audit log system hides and write regular [logs](Logging.md) if any error occurs while saving the audit log objects. If saving the audit logs is critical for your system, set this to `false` to throw exception in case of hiding the errors. +* `IsEnabledForAnonymousUsers` (default: `true`): If you want to write audit logs only for the authenticated users, set this to `false`. If you save audit logs for anonymous users, you will see `null` for `UserId` values for these users. +* `IsEnabledForGetRequests` (default: `false`): HTTP GET requests should not make any change in the database normally and audit log system doesn't save audit log objects for GET request. Set this to `true` to enable it also for the GET requests. +* `ApplicationName`: If multiple applications saving audit logs into a single database, set this property to your application name, so you can distinguish the logs of different applications. +* `IgnoredTypes`: A list of `Type`s to be ignored for audit logging. If this is an entity type, changes for this type of entities will not be saved. This list is also used while serializing the action parameters. +* `EntityHistorySelectors`: A list of selectors those are used to determine if an entity type is selected for saving the entity change. See the section below for details. +* `Contributors`: A list of `AuditLogContributor` implementations. The only pre-built contributor is the `AspNetCoreAuditLogContributor` class which sets the related properties for an HTTP request. You can build your own contributors. See the Audit Log Contributors section below for details. + +### Entity History Selectors + +Saving all changes of all your entities would require a lot of database space. For this reason, **audit log system doesn't save any change for the entities unless you explicitly configure it**. + +To save all changes of all entities, simply use the `AddAllEntities()` extension method. + +````csharp +Configure(options => +{ + options.EntityHistorySelectors.AddAllEntities(); +}); +```` + +`options.EntityHistorySelectors` actually a list of type predicate. You can write a lambda expression to define your filter. + +The example selector below does the same of the `AddAllEntities()` extension method defined above: + +````csharp +Configure(options => +{ + options.EntityHistorySelectors.Add( + new NamedTypeSelector( + "MySelectorName", + type => + { + if (typeof(IEntity).IsAssignableFrom(type)) + { + return true; + } + else + { + return false; + } + } + ) + ); +}); +```` + +The condition `typeof(IEntity).IsAssignableFrom(type)` will be `true` for any class implements the `IEntity` interface (this is technically all the entities in your application). You can conditionally check and return `true` or `false` based on your preference. + +`options.EntityHistorySelectors` is a flexible and dynamic way of selecting the entities for audit logging. Another way is to use the `Audited` and `DisableAuditing` attributes per entity. + +## Enabling/Disabling Audit Logging for Objects + +### Enable/Disable for Controllers & Their Actions + +All the controller actions are logged by default (see `IsEnabledForGetRequests` above for GET requests). + +You can use the `[DisableAuditing]` to disable it for a specific controller type: + +````csharp +[DisableAuditing] +public class HomeController : AbpController +{ + //... +} +```` + +Use `[DisableAuditing]` for any action to control it in the action level: + +````csharp +public class HomeController : AbpController +{ + [DisableAuditing] + public async Task Home() + { + //... + } + + public async Task OtherActionLogged() + { + //... + } +} +```` + +### Enable/Disable for Application Services & Their Methods + +[Application service](Application-Services.md) method calls also included into the audit log by default. You can use the `[DisableAuditing]` in service or method level. + +#### Enable/Disable for Other Services + +Action audit logging can be enabled for any type of services (registered to and resolved from the [dependency injection](Dependency-Injection.md)) while it is only enabled for the controllers and the application services by default. + +Use `[Audited]` and `[DisableAuditing]` for any class or method that need to be audit logged. In addition, your class can (directly or inherently) implement the `IAuditingEnabled` interface to enable the audit logging for that class by default. + +### Enable/Disable for Entities & Their Properties + +An entity is ignored on entity change audit logging in the following cases; + +* If you add an entity type to the `AbpAuditingOptions.IgnoredTypes` (as explained before), it is completely ignored in the audit logging system. +* If the object is not an [entity](Entities.md) (not implements `IEntity` directly or inherently - All entities implement this interface by default). +* If entity type is not public. + +Otherwise, you can use `Audited` to enable entity change audit logging for an entity: + +````csharp +[Audited] +public class MyEntity : Entity +{ + //... +} +```` + +Or disable it for an entity: + +````csharp +[DisableAuditing] +public class MyEntity : Entity +{ + //... +} +```` + +Disabling audit logging can be necessary only if the entity is being selected by the `AbpAuditingOptions.EntityHistorySelectors` that explained before. + +You can disable auditing only some properties of your entities for a detailed control over the audit logging: + +````csharp +[Audited] +public class MyUser : Entity +{ + public string Name { get; set; } + + public string Email { get; set; } + + [DisableAuditing] //Ignore the Passoword on audit logging + public string Password { get; set; } +} +```` + +Audit log system will save changes for the `MyUser` entity while it ignores the `Password` property which can be dangerous to save for security purposes. + +In some cases, you may want to save a few properties but ignore all others. Writing `[DisableAuditing]` for all the other properties would be tedious. In such cases, use `[Audited]` only for the desired properties and mark the entity with the `[DisableAuditing]` attribute: + +````csharp +[DisableAuditing] +public class MyUser : Entity +{ + [Audited] //Only log the Name change + public string Name { get; set; } + + public string Email { get; set; } + + public string Password { get; set; } +} +```` + ## IAuditingStore -`IAuditingStore` is an interface that is used to save the audit log objects (explained below) by the ABP Framework. +`IAuditingStore` is an interface that is used to save the audit log objects (explained below) by the ABP Framework. If you need to save the audit log objects to a custom data store, you can implement the `IAuditingStore` in your own application and replace using the [dependency injection system](Dependency-Injection.md). `SimpleLogAuditingStore` is used if no audit store was registered. It simply writes the audit object to the standard [logging system](Logging.md). -However, [the audit logging module](Modules/Audit-Logging.md) has been configured in [the startup templates](Startup-Templates/Index.md) which writes audit log objects to a database (it supports multiple database providers). So, most of the times you don't care about how `IAuditingStore` was implemented and used. - -If you need to save the audit log objects to a custom data store, you can implement the `IAuditingStore` in your own application and replace using the [dependency injection system](Dependency-Injection.md). +[The Audit Logging Module](Modules/Audit-Logging.md) has been configured in [the startup templates](Startup-Templates/Index.md) saves audit log objects to a database (it supports multiple database providers). So, most of the times you don't care about how `IAuditingStore` was implemented and used. ## Audit Log Object @@ -58,6 +241,12 @@ An **audit log object** is created for each **web request** is by default. An au In addition to the standard properties explained above, `AuditLogInfo`, `AuditLogActionInfo` and `EntityChangeInfo` objects implement the `IHasExtraProperties` interface, so you can add custom properties to these objects. -## Audit Logging Module +## Audit Log Contributors + +... + +## The Audit Logging Module + +The Audit Logging Module basically implements the `IAuditingStore` to save the audit log objects to a database. It supports multiple database providers. This module is added to the startup templates by default. -... \ No newline at end of file +See [the Audit Logging Module document](Modules/Audit-Logging.md) for more about it. \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditingStore.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditingStore.cs index 6674233de6..50380549dc 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditingStore.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditingStore.cs @@ -47,6 +47,7 @@ namespace Volo.Abp.AuditLogging } catch (Exception ex) { + Logger.LogWarning("Could not save the audit log object: " + Environment.NewLine + auditInfo.ToString()); Logger.LogException(ex, LogLevel.Error); } } From d4e5fec77de762f76597b1d36f8e323991598042 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 15 Jan 2020 22:49:54 +0300 Subject: [PATCH 207/411] Update Audit-Logging.md --- docs/en/Audit-Logging.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Audit-Logging.md b/docs/en/Audit-Logging.md index 7429eff8e4..e029587b02 100644 --- a/docs/en/Audit-Logging.md +++ b/docs/en/Audit-Logging.md @@ -243,7 +243,7 @@ In addition to the standard properties explained above, `AuditLogInfo`, `AuditLo ## Audit Log Contributors -... +TODO ## The Audit Logging Module From b487b3d21826e76a3c627f46698874edbe3e21fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 15 Jan 2020 22:59:45 +0300 Subject: [PATCH 208/411] Add Audit Logging link to the menu. --- docs/en/docs-nav.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index cf636ca182..6657ac629a 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -105,7 +105,8 @@ "path": "Caching.md" }, { - "text": "Auditing" + "text": "Audit Logging", + "path": "Audit-Logging.md" }, { "text": "Settings", From 7117aac29212e093d263b59b6ea2753fcf39f1c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 15 Jan 2020 23:00:54 +0300 Subject: [PATCH 209/411] Fix image link. --- docs/en/Audit-Logging.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Audit-Logging.md b/docs/en/Audit-Logging.md index e029587b02..b623867160 100644 --- a/docs/en/Audit-Logging.md +++ b/docs/en/Audit-Logging.md @@ -201,7 +201,7 @@ public class MyUser : Entity An **audit log object** is created for each **web request** is by default. An audit log object can be represented by the following relation diagram: -![**auditlog-object-diagram**](D:\Github\abp\docs\en\images\auditlog-object-diagram.png) +![**auditlog-object-diagram**](images/auditlog-object-diagram.png) * **AuditLogInfo**: The root object with the following properties: * `ApplicationName`: When you save audit logs of different applications to the same database, this property is used to distinguish the logs of the applications. From 15e375d2fba844349bd50642a43487705ea976fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 15 Jan 2020 23:31:13 +0300 Subject: [PATCH 210/411] Added Audit Log Contributors section. --- docs/en/Audit-Logging.md | 55 +++++++++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/docs/en/Audit-Logging.md b/docs/en/Audit-Logging.md index b623867160..f3ce1fb3a0 100644 --- a/docs/en/Audit-Logging.md +++ b/docs/en/Audit-Logging.md @@ -2,9 +2,9 @@ [Wikipedia](https://en.wikipedia.org/wiki/Audit_trail): "*An audit trail (also called **audit log**) is a security-relevant chronological record, set of records, and/or destination and source of records that provide documentary evidence of the sequence of activities that have affected at any time a specific operation, procedure, or event*". -ABP Framework automates the audit logging by convention and provides configuration points to control the level of the audit logs. +ABP Framework provides an **extensible audit logging system** that automates the audit logging by **convention** and provides **configuration** points to control the level of the audit logs. -An audit log object (see the Audit Log Object section below) is typically created & saved per web request. It includes; +An **audit log object** (see the Audit Log Object section below) is typically created & saved per web request. It includes; * **Request & response details** (like URL, Http method, Browser info, HTTP status code... etc.). * **Performed actions** (controller actions and application service method calls with their parameters). @@ -38,7 +38,7 @@ Here, a list of the options you can configure: * `ApplicationName`: If multiple applications saving audit logs into a single database, set this property to your application name, so you can distinguish the logs of different applications. * `IgnoredTypes`: A list of `Type`s to be ignored for audit logging. If this is an entity type, changes for this type of entities will not be saved. This list is also used while serializing the action parameters. * `EntityHistorySelectors`: A list of selectors those are used to determine if an entity type is selected for saving the entity change. See the section below for details. -* `Contributors`: A list of `AuditLogContributor` implementations. The only pre-built contributor is the `AspNetCoreAuditLogContributor` class which sets the related properties for an HTTP request. You can build your own contributors. See the Audit Log Contributors section below for details. +* `Contributors`: A list of `AuditLogContributor` implementations. A contributor is a way of extending the audit log system. See the "Audit Log Contributors" section below. ### Entity History Selectors @@ -83,9 +83,9 @@ The condition `typeof(IEntity).IsAssignableFrom(type)` will be `true` for any cl `options.EntityHistorySelectors` is a flexible and dynamic way of selecting the entities for audit logging. Another way is to use the `Audited` and `DisableAuditing` attributes per entity. -## Enabling/Disabling Audit Logging for Objects +## Enabling/Disabling Audit Logging for Services -### Enable/Disable for Controllers & Their Actions +### Enable/Disable for Controllers & Actions All the controller actions are logged by default (see `IsEnabledForGetRequests` above for GET requests). @@ -117,17 +117,17 @@ public class HomeController : AbpController } ```` -### Enable/Disable for Application Services & Their Methods +### Enable/Disable for Application Services & Methods [Application service](Application-Services.md) method calls also included into the audit log by default. You can use the `[DisableAuditing]` in service or method level. #### Enable/Disable for Other Services -Action audit logging can be enabled for any type of services (registered to and resolved from the [dependency injection](Dependency-Injection.md)) while it is only enabled for the controllers and the application services by default. +Action audit logging can be enabled for any type of class (registered to and resolved from the [dependency injection](Dependency-Injection.md)) while it is only enabled for the controllers and the application services by default. Use `[Audited]` and `[DisableAuditing]` for any class or method that need to be audit logged. In addition, your class can (directly or inherently) implement the `IAuditingEnabled` interface to enable the audit logging for that class by default. -### Enable/Disable for Entities & Their Properties +### Enable/Disable for Entities & Properties An entity is ignored on entity change audit logging in the following cases; @@ -243,7 +243,44 @@ In addition to the standard properties explained above, `AuditLogInfo`, `AuditLo ## Audit Log Contributors -TODO +You can extend the auditing system by creating a class that is derived from the `AuditLogContributor` class which defines the `PreContribute` and the `PostContribute` methods. + +The only pre-built contributor is the `AspNetCoreAuditLogContributor` class which sets the related properties for an HTTP request. + +A contributor can set properties and collections of the `AuditLogInfo` class to add more information. + +Example: + +````csharp +public class MyAuditLogContributor : AuditLogContributor +{ + public override void PreContribute(AuditLogContributionContext context) + { + var currentUser = context.ServiceProvider.GetRequiredService(); + context.AuditInfo.SetProperty( + "MyCustomClaimValue", + currentUser.FindClaimValue("MyCustomClaim") + ); + } + + public override void PostContribute(AuditLogContributionContext context) + { + context.AuditInfo.Comments.Add("Some comment..."); + } +} +```` + +* `context.ServiceProvider` can be used to resolve services from the [dependency injection](Dependency-Injection.md). +* `context.AuditInfo` can be used to access to the current audit log object to manipulate it. + +After creating such a contributor, you must add it to the `AbpAuditingOptions.Contributors` list: + +````csharp +Configure(options => +{ + options.Contributors.Add(new MyAuditLogContributor()); +}); +```` ## The Audit Logging Module From 4e6f26f9d50cd3f3a5ae9b4c8eb9d7802bb13fe9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 16 Jan 2020 08:10:22 +0300 Subject: [PATCH 211/411] Update Audit-Logging.md --- docs/en/Audit-Logging.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Audit-Logging.md b/docs/en/Audit-Logging.md index f3ce1fb3a0..6b171a6c7e 100644 --- a/docs/en/Audit-Logging.md +++ b/docs/en/Audit-Logging.md @@ -199,7 +199,7 @@ public class MyUser : Entity ## Audit Log Object -An **audit log object** is created for each **web request** is by default. An audit log object can be represented by the following relation diagram: +An **audit log object** is created for each **web request** by default. An audit log object can be represented by the following relation diagram: ![**auditlog-object-diagram**](images/auditlog-object-diagram.png) From 8b8dd8249e59f26b3359729a0a9dab04bc8c9d95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 16 Jan 2020 09:45:32 +0300 Subject: [PATCH 212/411] Update post --- .../2020-01-15 v2_0_Release/Post.md | 56 ++++++++++++++---- .../abp-commercial-demo.png | Bin 0 -> 137699 bytes .../lepton-theme-material.png | Bin 0 -> 151222 bytes .../ndc-2020-volosoft-booth-wall.png | Bin 0 -> 241683 bytes .../ndc-london-volosoft.png | Bin 0 -> 2821040 bytes 5 files changed, 44 insertions(+), 12 deletions(-) create mode 100644 docs/en/Blog-Posts/2020-01-15 v2_0_Release/abp-commercial-demo.png create mode 100644 docs/en/Blog-Posts/2020-01-15 v2_0_Release/lepton-theme-material.png create mode 100644 docs/en/Blog-Posts/2020-01-15 v2_0_Release/ndc-2020-volosoft-booth-wall.png create mode 100644 docs/en/Blog-Posts/2020-01-15 v2_0_Release/ndc-london-volosoft.png diff --git a/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md index c4646e66d1..77e6fbb0f6 100644 --- a/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md +++ b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md @@ -2,7 +2,7 @@ ABP Framework v2.0 has been released this week. This post explains why we have released an **early major version** and what is changed with version 2.0. -In addition to the v2.0 release, we have also announced **ABP Commercial** which is a set of professional modules, tools, themes, and services built on top of the open-source ABP framework. +In addition to the v2.0 release, we are excited to announce the **ABP Commercial**, which is a set of professional modules, tools, themes, and services built on top of the open-source ABP framework. ## ABP Framework v2.0 @@ -12,7 +12,7 @@ It was planned to release v1.2 after the [v1.1.2](https://github.com/abpframewor We have investigated the problem deeply and have seen that the root cause of the problem was related to the implementation of **intercepting `async` methods**. Besides, there were some **`async` over `sync`** usages that effected the thread pool optimization. -Finally, we **solved all the problems** with the great help of the **community**. But we also had some important **design decisions** which cause some **breaking changes** and we had to change the major version number of the framework because of the **semantic versioning**. +Finally, we **solved all the problems** with the great help of the **community**. But we also had some important **design decisions** which cause some **breaking changes** and we had to change the major version number of the framework because of the [semantic versioning](https://semver.org/). Most of the applications won't be affected by [the breaking changes](https://github.com/abpframework/abp/releases), or it will be trivial to make these necessary changes. @@ -74,15 +74,15 @@ See [the release notes](https://github.com/abpframework/abp/releases/tag/2.0.0) ### Documentation -We have completed some missing documentation with the v2.0 release. In the following weeks, we will mostly focus on the basic documentation and tutorials. +We have completed some missing documentation with the v2.0 release. In the following weeks, we will mostly focus on the documentation and tutorials. ## ABP Commercial [ABP Commercial](https://commercial.abp.io/) is a set of professional **modules, tools, themes, and services** built on top of the open-source ABP framework. - It provides [professional modules](https://commercial.abp.io/modules) in addition to the ABP Framework's free & [open source modules](https://docs.abp.io/en/abp/latest/Modules/Index). -- It includes a beautiful a [UI theme](https://commercial.abp.io/themes). -- It provides [ABP Suite](https://commercial.abp.io/tools/suite); A tool to assist your development to make you more productive. It currently can create full-stack CRUD pages in a few seconds by configuring your entity properties. More functionalities will be added over time. +- It includes a beautiful a [UI theme](https://commercial.abp.io/themes) with 5 different styles. +- It provides the [ABP Suite](https://commercial.abp.io/tools/suite); A tool to assist your development to make you more productive. It currently can create full-stack CRUD pages in a few seconds by configuring your entity properties. More functionalities will be added over time. - [Premium support](https://commercial.abp.io/support) for enterprise companies. In addition to these standard set of features, we will provide customer basis services. See the [commercial.abp.io](https://commercial.abp.io/) web site for other details. @@ -91,11 +91,25 @@ In addition to these standard set of features, we will provide customer basis se The ABP Commercial **is not a paid version** of the ABP Framework. You can consider it as **set of additional benefits** for professional companies. You can use it to save your time and develop your product faster. -ABP Framework is open source & free and will always be free! +ABP Framework is **open source & free** and will always be like that! As a principle, we build the main infrastructure as open-source and sell additional pre-built application features, themes, and tools. The main idea similar to the [ASP.NET Boilerplate](https://aspnetboilerplate.com/) & the [ASP.NET Zero](https://aspnetzero.com/) products. -Buying a commercial license saves you significant time and effort and you can focus on your own business, besides you get dedicated and high priority support. Also, you will be supporting the ABP core team since we are spending most of our time to develop, maintain and support the open-source ABP Framework. +Buying a commercial license saves your significant time and effort and you can focus on your own business, besides you get dedicated and high priority support. Also, you will be supporting the ABP core team since we are spending most of our time to develop, maintain and support the open-source ABP Framework. + +With the introduction of the ABP Commercial, now ABP becomes a platform. We call it as the **ABP.IO Platform** which consists of the open source ABP Framework and the ABP Commercial. + +### Demo + +If you are wondering how exactly looks like the ABP Commercial application startup template, you can easily [create a demo](https://commercial.abp.io/demo) and see it in action. The demo includes all the pre-built modules and the theme. + +Here, a screenshot from the IdentityServer management module UI: + +![abp-commercial-demo](abp-commercial-demo.png) + +This is another screenshot from a demo application using the material design style of the theme: + +![lepton-theme-material](lepton-theme-material.png) ### Pricing @@ -105,7 +119,7 @@ You can build **unlimited projects/products**, sell to **unlimited customers**, - **Business license**: Allows downloading the source code of all the modules and the themes. Also, it includes 5 developer licenses by default. You can buy additional developer licenses. - **Enterprise license**: Provides unlimited and private support in addition to the benefits of the business license. -See the [pricing page](https://commercial.abp.io/pricing) for details. In addition to the standard packages, we are also providing custom services and custom licensing. [Contact us](https://commercial.abp.io/contact) if you have further questions. +See the [pricing page](https://commercial.abp.io/pricing) for details. In addition to the standard packages, we are also providing custom services and custom licensing. [Contact us](https://commercial.abp.io/contact) if you have any questions. #### License Comparison @@ -113,11 +127,11 @@ The license price changes based on your developer count, support level and sourc ##### The Source-Code -Team license doesn't include the source-code of the pre-built modules & themes. It uses all these modules as `NuGet` & `NPM` packages. In this way, you can easily get new features and bug fixes by just updating the package dependencies. But you can't access their source-code. So you don't have the possibility to embed a module's source code into your application and freely change the source-code. +Team license doesn't include the source-code of the pre-built modules & themes. It uses all these modules as **NuGet & NPM packages**. In this way, you can easily **get new features and bug fixes** by just updating the package dependencies. But you can't access their source-code. So you don't have the possibility to embed a module's source code into your application and freely change the source-code. -Pre-built modules provide some level of customization and extensibility and allow you to override services, UI parts and so on. We are working on to make them much more customizable and extensible. If you don't need to make major changes in the pre-built modules, the team license will be ideal for you, because it is cheaper and allows you to easily get new features and bug fixes. +Pre-built modules provide some level of **customization** and **extensibility** and allow you to override services, UI parts and so on. We are working on to make them much more customizable and extensible. If you don't need to make major changes in the pre-built modules, the team license will be ideal for you, because it is cheaper and allows you to easily get new features and bug fixes. -Business and Enterprise licenses allow you to download the source-code of any module or the theme when you need it. They also use the same startup template with the team license, so all modules are used as `NuGet` & `NPM` packages. But in case of need, you can remove the package dependencies for a module and embed its source-code into your own solution to completely customize it. In this case, upgrading the module will not be as easy as before when a new version is available. You don't have to upgrade it, surely! But if you want, you should do it yourself using some merge tool or `Git` branch system. +Business and Enterprise licenses allow you to **download the source-code** of any module or the theme when you need it. They also use the same startup template with the team license, so all modules are used as `NuGet` & `NPM` packages by default. But in case of need, you can remove the package dependencies for a module and embed its source-code into your own solution to completely customize it. In this case, upgrading the module will not be as easy as before when a new version is available. You don't have to upgrade it, surely! But if you want, you should do it yourself using some merge tool or Git branch system. #### License Lifetime @@ -129,4 +143,22 @@ However, the following services are covered for one year: - You can not get **updates** of the modules & the themes after one year. You can continue to use the last obtained version. You can even get bug fixes and enhancements for your current major version. - You can use the **ABP Suite** tool for one year. -If you want to continue to get these benefits, you can extend your license period. Renewing price is 20% less than the regular price. \ No newline at end of file +If you want to continue to get these benefits, you can extend your license period. Renewing price is 20% less than the regular price. + +## NDC London 2020 + +Just like the [previous year](https://medium.com/volosoft/impressions-of-ndc-london-2019-f8f391bb7a9c), we are a partner of the famous software development conference: [NDC London](https://ndc-london.com/)! In the previous year, we were there with the [ASP.NET Boilerplate](https://aspnetboilerplate.com/) & [ASP.NET Zero](https://aspnetzero.com/) theme: + +![ndc-london-volosoft](ndc-london-volosoft.png) + +This year, we will be focusing on the **ABP.IO Platform** (The Open Source ABP Framework and the ABP Commercial). Our booth wall will be like that: + +![ndc-london-volosoft](ndc-2020-volosoft-booth-wall.png) + +If you attend to the conference, remember to visit our booth. We would be glad to talk about the ABP platform features, goals and software development in general. + +### Would you like to meet the ABP Team? + +If you are in London and want to have a coffee with us, we will be available at February 1st afternoon. [@hibrahimkalkan](https://twitter.com/hibrahimkalkan) and [@ismcagdas](https://twitter.com/ismcagdas) will be there. + +Just write to info@abp.io if you want to meet :) \ No newline at end of file diff --git a/docs/en/Blog-Posts/2020-01-15 v2_0_Release/abp-commercial-demo.png b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/abp-commercial-demo.png new file mode 100644 index 0000000000000000000000000000000000000000..caddce27abfd4810a9c513048785f150a10d72eb GIT binary patch literal 137699 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 z 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%0Ak(%S>I$%izKi-GBR>-#=6_2!$L2iTTywr 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 literal 0 HcmV?d00001 diff --git a/docs/en/Blog-Posts/2020-01-15 v2_0_Release/ndc-2020-volosoft-booth-wall.png b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/ndc-2020-volosoft-booth-wall.png new file mode 100644 index 0000000000000000000000000000000000000000..70fb9d54f76cb487e031288101100a807ed7af03 GIT binary patch literal 241683 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�q`(%SU- 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

    ^28w6X(-~VmGW!{DrPrP(&qfDO4 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%0DgV~ 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%0D<}F`HPe1&%5(Q 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

    WPWSiQ!I8)|quY z+Bx4zvA8>+0cSI_nFi`t8o=uA#N-3I8ka6^s$2Dy48^yJ-(}J0EUc9!Hnm)xHwRTjV#-!;33vBpS$e65wPL=w&r-@RO}&b4 z+@97;CV|);!Tb=&$w;0&W|_A|h^i8}yXfz&vhdGSo5jWBP{O-23*$ zE)V^Ax7%n${Ns6CYnaf1yN+MS^dJDyUe=zD&0XD?CrM&va}r5{M!b}BAqw}*+yVDu zquT#VK0lyhbU@i!D$m`i<6LIlAyrk>Cm|*yb1Ei=3*u|T>^>9E#80oUwXC@;_jh;f zvbvrUiii_Q6xO+cx3?7=r$?~kE2qIdZP0hs+Cpp$a}O?C0A1$L9;5%D!>HN5QA;V3 zh={H(FUvxwhg+ruDnw%D9?b4$FlT`k04l;%N9ck{++h?0yX$U@X%&yqQXk-$(JZ-d zbWZ)R&Go=)dUt>S!S&VU{^I^_@o2E&ZI+9-gjJPn!m+H!vL5JiKhM)5q=gzgI}PwW z&=K!5I#+5=N=U^tO<(-t7w_)gF3V|I*0SX8Qn$Eb+Zb`qeu>R4s(C~J01U0QkN^sB z_H;UZ?Q4JSv)3R0qu=^J{`sH!iBCWK*0fufKl|qIfBo-&^+kRS~q z{oos)PABGpk}6ix%-mSuX0Kkp{H0&|JHPuo|M-(nK1tIw?J1jCi6)%3e_S2HM7tE@ z2-(aaa(OuHck^<8w=T=Yl!VBEbh(1hI(aY9E6~t!s2Kqb{|Fz>|OpP+K#ml-zwcPidZ$8%e4T znyIPsIdw}H4bvTe46G>vF2qVbgOV*EHzW(#i-rPDAVeQWJ zb+}e>8#ymc4%}-wM%}5{AhxY+O^Dr5+$Lcbo+cLZBy2fPk}l@m{qccf1f9*##fZw`TX(?#TNy|KooDZTgX`RL~UfKNP!2p3obAI?%z6WAwsbR!>TCxA37aH{hz~8p;!eK6)zPbtPXSAdePhp zQwx4fN(s(scY*A-tbSVb{(+7Ue7Gdu^@S%gciS=sF+9eo^0N|y2*KuAX%W07+7hV| zJTWg`kyZ}>%$&fkN?K3~N+EZ0^MKyXsTu$nL7j*h^99e7Niv_Dg?VaDNi+9#{c90| zxe~d!6FkUj0&DcjP%E_!5pD>CzZd&#`id&eZBuju+kVel^}ROQlrA}aFKCsAtqd^2 z?T90I=z$GUr^a@_X;*H-LtqBExQ7n6P}cxrX1YhKV!orUT)BTm8Cd< zFfkK5IA|Q>vH(GgEjb6P1Pf=al~|QQ)!l=#%-zAe-NoVZdb)Z#?VtGkWPfotGIX<{OnPm;KXYK2Rdyvnl3L?Cd2YBn`3i|JbOl1~q1J!vk1#WF$7 zi>d3jm>V_?51>3Hj+RhiI4nj_X{oeDBC;hmnYEJ$B_X4tDyUPnAL$%b^-5+FQWT9@ z#4Kf5Mp&Z*nj|8^Ok@goXW=fc?yjgInpuphBtkHoxz`;k1Wdw)>WFq>!?{WfpLX=0 zn+>n28j;lHTBH}?JK(CORLc~!jVg*-E;QVku|nwA1klGMVlL4JN<*!ul}(FTTwX&{in)iXo5$75lpD$HvFf^+a7CzLtsbD0hV zb~~hLe{qmR7Z*>Dw{J!LcG7#ZLJVRefm1OT5)CpJW`z<64k9u4G{nYZ4Re2a0HU3o zm{>T9*<5wE+XXH*O_Qn-r206KGHPK}Z+VO5hJuBeX?Jy*mj_{SncdcS0R(mu;@ZMt znu$2ET<)gXvF1{8v6>5Ub{1wMUUgAK<)AWAt*o(XJLyq9TBGgv$TKvvqQw`IJI~K@ zzE1NkO{*b)#a1tmp8Ys?{ALxcMoM<*CogMfjgNoI~r4!w`MCM>S;{@0mME zXR` zlUrt*g=t;Zs#&}Ml*squa+v5&kGWu)v&l`?%iVs4nX3?pX#!M>6On+OYrNH3u_9A$ zgkoOIN$8Yw64_tOJkM9hWM--1n{ld5^Fk4(fwj>!0{x+x~o4Y##xjK1FXm`_M#5>ukuI%ND z&#o_0)tGGI(`t_!iOr_~K;q`k-!BotoXp`4HJUd59XX#uKtvwIVc`f2 zc`Vte%4=xUxC$b8@a_>397aX^xNvcG20K@u-Up7MQi_WNxBM(U?1a0O=8jk?>AcsQ zh_bp&J5_Z+P2Fwcxyz?{?rrkn%5>&XH1CHwZ7vZJP#q;*b3CtkF*9PyWnt!#rOWg& ziXDtmK48#^C!%0uKzMaj7uh!-QyAv#21jX~GVTu40%27HXw0Q|I7U?;fwt8Vlsb8v zT3>Ll`X?ev614=rb#7MS={Zy#*hRgyexu>J6`meGResDh34qlJyNLQAuDDoB133d~DAC(Yh&s$tR*=EStN_GO?6~(kYCJPrfjKG*%m%)P@@NM% zaOAOVWo09HN}RJ1z@Wn7^NwapEH!6p-k z7&G={YOV{fcX+tPWSqsA<1QI6+^G0S=+$~oemPD|!IZXzT33y5%Ho(cEd&^AQ7I3DZMS|A> zV+>Fw)nX+WJHtWHI)Td>#&9N!xgrkoprG$LNOvbS>C`KTL9iqA9E!9;oQm4f0;1wB zFlGkHK+eDdq2z)vrZ6vDYp9893dBW(q7cdAW~@>zP3fX3>s{ zmh!2ySz6N;JI%=q!PhQnNxFUyo7@sb3x%wFn4yu&`U5GqZ%FpF_%8w-o3Zq5s|?= zBMnGuB8J4=2_(c0FV-mzeYkCRHLA5A#=(^vUL(tc>RO7yi>jN!AtC|uL}Ej=n3;!e zbW>GMZYJzvX2L|ljL!}xbth(xW=Cc?l~sGLomtd0uA9rkE-XTlTxQG%-e3B3VI0YO zPH8enO1ns5Y_xK{2|DZ@5l_&fYDSWTsg#n}7>3SiV$U#B#NE?8oQ}2B=h%i4%(iYlchZ$fIBC5Kft*d%ydD-#v4{i>=4M_iD zp*E{O;pvjoOg5!yO6lt2;{M^`&CR{J=PA9_WfAd|h*Kg7GG=un2NQAg&dp5MEFygf zDfMhsgk)yX;3P!e+lzo{np8C^1TQZx&;uv4PT(8~1di6iBvGeUz3S*!G8DIG&tI_H zryqYi-u$|*5Eh1usiCob8#6Jp z%op?h{e4OaTSHPNAO6yhe)%VV_3!`k$De-Z;dtk#hu!5~-h2MlpZv+2&)?p> zeSq4<{$gC>m5zq%oi85&d_YpB6gm9^9fP8#5_8zdTCi+d9O;DZl- z;TL}4*Z=Q-bpP>pN$7C6Sl6|zrN*1W=6-oNJbilo`t@rwFF9X7xpLEo`};}*HsqSz zO$|a6KK=wz)z4pkez~7YE~;u}&1E&M5vN8PO5kR5ny)W*j&jrjvxPvu*d!BS0wlO3 ziC_v65n_m%X>`@Q%aq7rUW)sYvw0Fmj6%~=KKkgRx8M9$0o-g|S3(5TrmDhRO4&{6 zv(G;Ji*JAX+0!S7!#;EzLR`$zN`~F5Xn0M`*1Qj*NuPtzAP81WgqCGtzJBrI+1>Fj z+!xSffWg?XPiZ+F$(PH$eE8mBCpJgiETkZ?sPotV;@jVO`MStdI60A;1s6RH_*9pF zA}Xp>SVW4OtD#r648x;{Q1>H~8%V-yH-b%+_EUnDd7guM!cp4+DQ(|e zH##fssJ{oPYrJ|nC-;maJBKM6U^)^Zb&$^8g}d6QkK=8y#)ye{Yqjp@kH-8spc7Vh zqtlbRJQOg}c~6ZsuA&Y7OsTJb_5Jg4W_AR@N4F0xBOUDI+W7lvXteJuGs-|?ua3EtnOeC-uUYN~ zd&7(Sd$c;-!+QYhKoq|<>o`AmtX{!6lT^RqzTo36b;Do>ww=hVY6eS_L`z%^v44DKrlQk5jzd0t(GNh>)Xi9n`42lU1?Co=fzcM zMsj?Xe#ll|-(O#636y~_x8Hdar!v0f?QN=d2dw&~ZRtiCXnxU|U1&dzOTFE52jz!X zFaSXBytVqj?k<4CBEDsEb9Hm!wBPMga`)r$=)Rg;$%RW{O5_T2(gH1>7l#Q;^u@9_ zQWz1WnI;n$G+R08y2^6&;~niUAVTPvb&NeFoR=Y+wUocBc+5QovB2vTqlu*kU+u%p zR@7X{#LPS{NAPJO{nVD& z;NJnwE_v0IdZw@ot(g%-qE;B>!s8+Rr@?2d8UGYzq7*TemuefY$m!XfeIid4XO>vE`5C_13yjd^B!3(aY#Rtn}0Vj>O) zpc?4j$<*w!5kzDnnV2P|Dz==Wp2C>nL1<$|wGbn^e4#{%C6_`JlyG2Ro)g0{ zF*%%Och5O%aigs}K7J^raLi62jC4|=L&BwrdP89`Gp#Hi48UV*2#}^pRjn0Hb`B5> ztu}qrjRN5AQ=2dxZ`n~tY*qi?jhj=)tsmmursU3pL@mYM8M-8;+L(pv%k}4~do!rI ziiYsbl2kPw)>L=zNpqs+8;oTHX!>?t*I3>~5s)$XczY`pd>Vn#sfzFK44{q-6=3rB+o#%n{OjTLX-+1_*ym@G$W0Q#N_Pdlg zQKjJqjFUK`<%_{mP5Te=`JtxLhmx_OhoY{*2*zWYm!WGLqNlnn7C0iwKH#}I_(p;GzJfpBu41;Xt^(aXuZ3KhwIBr?~U_K zfclx4*|oTPpN$pN2?Vf14NsrH@KRpC{LJzyLaM611pox}VrB*jd=iEyz}Sh1mZI)1 zpaw)r@ToVSck2=8Mzp^^ZLUwxu@~5>tjBeIa(TIbnB{m%EE;7z!$|;uYHE_;r@Y+U z-@o_b#S^{ye7P^*M?iwK@Y%Cx%zS@;KhN`izkhgm=6#u>GhL~L(0eH_V#u? ztyAK4DaU1fdwaK*?ArE+J4fkYtsZq5C;|W|oMSj0Ja~(1bp;WTzW+t}`G5Oozy0Yq z{`GERI`z4pG zDV<6#S`PDM36nD*kSP%rHFI*;QnYWe;A3VIvvOQlb>B^s!(zhc)%6ZFK&^^?%~>n; zjPG_65xsi#>U28Z5U#H;dj-=egs^OmnztUJkk$bo9Je{TFqcxUuCDge{9q?yUZEVF zO7N?Bp7eBaIsfF3fApizulB;_{=S?F5uB6q{GHEVe|C4wk_rgS-M zn4)`iMxY@SuTX`fmSq48+9kP|C-O2So~9HGkIQl*0tpp0X3{nxls8gKbMItH4VfZD zRa64Gdp1=wpJD=@J43aQJCO^)nNpf;UBmekA_JKkK%nOJR<#gWp=cff5nmoI4~GL0 zo9gkH@9rMLB_5-F42TQ`-H*ui)x{(NvpP2QFZ-Ce!D4io6=yOcNhz6??qM?$hR}Na zjIl^8V4#QHg%y#Y%RuWC>q0et-J3tnt;ec9qeg`bI>0we@}ah_FUaT(1f!F!k0=ZX?bjp`(Lf$4PK!1b^dSv(|E=4f5-2R z(g>h7bXu@8H;N<>qI%ja>M3eXqdNgY)P`%fjg0N0<9q*}dgIZj>9g^RX9x5@jcXg4 z0nM%Ne*zHL7&j|s4fOA=%3aI?e;KGR$9TW5-gqb5Y7>n>>i9+imf8T3eu};enljve zIX*8lhuW+)0}a&kffmrb4$iigF&br{{_CC3(OaW#gznqK&M0feBObuB#i!bS>K2(W zst6lVN;HELt18ba@(d~R&uTDdEu@)qam{7ry5RFHb|J3h<}q=b6Ycj&OF61)F2{vW z52>t>nLv*3A2(GNQfD`4fjVokQV0%V7!lQUSFoHmGK0G5pcF1KM^(!-xg-Ywb}i1? z;0*UtsW^iM0B*XjJX28qkvnP8lF>{FDitj#%~1ypGbd$>qMLxFLJOh9>>!60H4o;% zAX~3gR`9WI8C}(kdI{ayRt;GLz)^OYIc>vio0x^r(pDPQDfZCNWDGIU88{VEfB-CF z_SDF4)5`F<4w8DL&qoy$^$lFJhVE@nQ`HQah;$NKa*plV_#CQ##b zGpMH4+^SNe26B1>39I^zdgTUOo^R?iUD4NRdnshK>CPR9V!a+w8V0(LJ{XtI`GQ6y zqN|RI1~x{xAFO8EhOS#1gPz>155Dijlm6D;J^9Gob*>frk!LomA32)x(JE1EI!3Bs z88heQBqGve@?BdT+2xUi0N`joqm~lxhBCsOHD@+Tsc6YKoy?gQ?aeniXESACYlB8q zEA#`v-AbteW8_PSpaD?2o5Ot@Fy*dWskJ+tUDY)+8IcBU*Sf5hX<3g}iYrQ1GB6^q z_fvj}<7Qj9s8%Y$1amX0jO3M5i@vX~7Z zt`?2GB2nBX9UudU6ART6Z=jAoYsR8N~%)BGaM>vroA(^@hSVFs93Bw`{JpC-}PG*Dy3)-YH3 zvj+(eAs-8A`>y1ncfKFo_h5Vxn^6Ez-J2e9STCC+7LlTL0(KBDpmx{@p_YlLs>p7h z<|*04Oq?cR0K{&NGKqsg5iR}@!RikQjK;0InF}#Xi?N|YxLC{?4mjt$GrCG??<8hK zI9y&j6B(B^o702)TgEXZYfLK~L~H~w+(zn|YL&aC8CSnXN*n~;m0{i8Yp)yut?rtL z9!{sL!y!=f{!w>;-Hph=ReQ?-bKx1#jo{V!bX=fC*Yx1bOqGIDnaw^9@Z zu&(PQX-do%mX_9HYcU4|)Mh`17%>p_Xxo!MG6_|-x?zrE&7J9XIo++x`_Ero?)K^a zhP--6P3(pg9Kqd%`IOgF$*bmhnkT1|xd%*eKF&DO8t(q&$&-}Qd+)t>cXxMpche1X zHzXH_i%Xu%#qnY{5y_i3Z%?Q7cw8>8FWQa(n3ff&{XqFRVl zJgVaT$<@^^9sb_m`ORs<7e2a@`7}NG_}~0@KfHSJ`XBt>fAQ?{ul&@%^4I^jU;jUU z?{|Oi3-A5-Kl{^9?rtBZ%lUG?I%zq*zRin${@qu4>kqd_k>oH*4E%qTy<4wrNs=b? znVI{F%ijB3GP5%4()4s!HPad-UU=aVfdsrD4HAD3AvA9={DAod2zUZCGthPEuIkFn z&dbTnbI!g*tmSTIJea$O$39hEO*|a!jEr^jYWVLyI(xLuuVt(;o&Csu-b2xqz% z7s-cZSyF!U{SQw?E0HIDSj%E`-0c#7KX@dl z-n}cO8uvv94dV+6Q8-f7_wV1U>izvYqMxqo`tm{B^R|p8~nJcGkY}5V`5%}k2xm>EB3qHRw@yNBb9Pi zP)c03GPe2AH_&_432)xv~lYB^vs@mA9aTVeb zk+t)ON<;YOwk&CvlDit{>o;$tq6jjd7~ug|Mf~=hRBJ{QUEAF$KtvyL3t!o;@dx1w zhMMji?oRC24+y_390V3?2J4K}F%^BuIgE!Sii`6T!gDB5FB90IZQD|2cPHy*<8J*R9zgKCjvP&`2))_YSeVZ&b{k2@ zSp4Hw?PA~N#A>q^fDedsvLYj@G)$nXaPM41WTqjp>fX4$?rv6z(0R2Ex@=+d8mB4k zXIs6OOf>T)U2y%GH^DK@ynoQ^>zP^Io*n4!b5QBcPpf159(Ndj z2sMOdI7R49Y}$i_QH^4GpdD)lV3BkpcCP{ctCq`6_Fg6}Q%(Y{0L-m!+vEFtT5UNL z$5XUcCknD&X<2G-^C#l*NYac-6jKdqfmO{ZqXXY@|D~+%p7SEY<|af0R#k$799Ef$ zgw3gxDoCNsYY6DD>5l~clNsa=H#H?w5TL|v%)AJ>!4OU|FN+MlF9PQz-efM_3`<(f z%;7>w2+j_5D40YYiNzeImeLYwTXiE)0>>QecH`pQ4$5={;~w2-#~f?K$%_XU3sK{;mKK(sn_5guA4tx~?>`-1^I((?_u;|%Y;gPd~ObrwP)B3BC}S46C| zHs;EQa0Z@Mo|n;8uDi8BRU62S&jL{APL%{*vQuAE=7_o|Qs|FI`zI_q3 zwr3zL%M!JC@9ysphXc?WQrBoi6VCxhwQ63O)NL84IgwXaVj)_+9$viu$F(qRw}yyrZ*PysFMXFuUxBuy%|Ln~dZ%)N**=)7BP#O zs!}&6bN5Af+g1_dw7c2wPLC@u&;R`6!`=ON-`1!1yPKCsLh(|a zBrUH#e)Vv#k43(Fczm~&0^*bg+)pqNRoCcl*{*nfb$2(_;d^#eG~eCbt?PQy)7;P3 zy$U6^dPw`5-Qsm!mTa9D*4pU|-`Q=%x4{_gcA$~*iAeo|eGrj3Ku}@NVu@)$=|U4Ju*FX6oW>>GKoNeoc9^z+Pagqdki@6X6@vy^>^=6cV8dCi5@W+qEU$Ih&uJThtnry!zQ+pz!` z1n(u-wNiJsV!}r*bnr$8J~eK#6%aL2Cyha9DH1k|jvq_}@m}dB`O-{jEH3I0SOB%d zl^KoT=Nag|ndW%*d8LePYj*F#p(&;Kw4HUQGmtV5^-UrI7{aP$+!c{TeNE4vSgmz* zFN_<07ORhA!xf9gj&7s8$1U&{)0R>)%Us;#AMglxYI!u?KK07?aVIpPMdOh0w#WTo zVll_h2BUV|Jgx)jm?xMtQuSK&cARtYi^sHy6+=WJxk%AE!;P*X+8I!LW|_x3o$qR1 zmGknP51At53+6==tjw(lzr`L|QdQ%qjdFLhL`_tf0H2yfGbjYtMlN~&cU+St7vo;$5uVLai>Te@`f@W;Oc&|Z$s}IeO`9mpBAPpl?hJa1 ztYC z>7WKLDaexC5(y2Mr4ZyDD~36Qf7?7H_C%~&LXm)p0b^lzm(~tQ`a~rH<&-J$s6XXs zG~cGWc(6Eu#0=qD$=$?4X*4Ez*LMRb2r6#zhP}}_UHEyELjbPU6Fd+CdNBkh5n*=^ zxmaq?d*$}fgz2EUokQd&s!*>`l?F2Ofen{K8cCIjxN7U2Lf2dzAJn-i_KbUQyR^C< zre-#S1O5&`zO7mJc5mFXCf;xfnPeizV~!d1Y%>}*?Ze^aOFpvE;^t=|qEQe%c2(-z z$NW8joU@gxsszqC52(7G9KPfRSCpQiN#&1TRaGc4MW>?$!G0%=fM?l7iGs?Gh;UlZ1WugQYb4ZFmFR*7201}{l~VjWl;2CK z04TNIo9nu!mJw>+k#$x?czuiHks6N;E*z~o2}un%I7*s`T8pZfHfowA!D=WWNZ-1aVSHHO?3N^1lSQUlYixX~K6LqKe-%?1O<3K=#qP0ltRNfe`IGFx za3R_NUN>0^EVaoObSc(aYf3Ro!;pG^b&{ExeSg^9+#L4%J(0VbS}`-N#lR`^wWril zP548fe-bb{KJHC5sTr?MEdd}5ac9*9bO0~$e{CM+)>2{)id&7pC863JPa|+VgVYl0;lv=wq!xhWP2sD*8 zxc`A&Cw?2gHG$xyph~=Id4GTZ>h9&cb$wS>lA+msX&HQZZ6Jj|Z09?zS<*gdsWg&r z?yerqGd-o8Qbt!keR_I|Rmx1IRFHwp#J~Oa+w=K+JS6jSb2t*ox~{jkHx38+ZlAZq zR!ZG1`SIzrZQJ?0p3f@?YLOImpg9BpsvA3+a(MUzP-YO6NC{6r{>knA{qO$u|MEZ5 za{BzMcfb8eKl<^_$z{_JP_yo&cLE0!t58YQa+t?MzB7M3Z$@rTfS*e7N9=b?=9G3>*E1(r ztwOF2YdjJ2kfmGpwbtU6m|60}!{gSpPQXNUE0PIAKb`>CwygtJ_~C~imSx$hp3mpw zt5?jy3LNcZM)t|WwY<1y5yOj+2%=FBnM2je?akrU%ex=G|2~`l{Lg;+>Fw?PH*fsu zL|a)OPW4o2AqSn#>q3jL=e*oMysOcDwN?U53)8?IE^;vQ(i@JKnZb-xGL0Y!hr?m) zIw2z&^<1Gmw|3_kX*U+l~z>(YVNFllDi@Q5_1^NBM zVv?|M;lRvJ z`LoxAYuPetN?uL=62ceb>6hQo1X2tf5Iy#|s-7YeVs=C|lhFj)6{v1x~JSJ@sP09J@s{wAt!5fSwX8r0zSrvF*p)=siKqSXl z#UW!$r71o)Gr`4yi!*Fm#~Zgv7wp-c$JKdi^N6XEeN31cJROIOk+I$u=@|e@ff5p& z5XiW625!V5!v{c*U@=ooC%Mx2&+u5JD=?T@RRxHtSO2!b0pW`JHwBh>w$|prb)IP> zbus5_{aSTlOsX*&?#^HhLZ%~pE)nUwpA!)baBp#YByFrlsUOhdyS9EWt>LEdReHA^ zGyr1U+vLs1Hvr&Wst?4~e7K84s9p84BM^}d#$||^#Azp{Bn>WBY$ZfaBv)=2#>m9& zZTD!$TZ`o27BUgQV64MjLK8*+BA%HAz#5cUkH4 zAYWy4+P}kM_XX(Q1zydphrFGe%ogRPju7nuK{`SdW#AVI*p(gVVzYniF24@~I?`$n^Z2e}$!s9ZtZQCN#Tx$(Y zOll}$o%gAcbc|940O9*d1cLyWik4DJtrd}#0U0j4%>3>GStGglFd__h*UA9Ak|%Z} zCx#PK$^k2qAXpGC4JlGrjiiCQXGtsq7?Z(D)Y1p>cp<=*L-fEPBIK6H0b?)|nVYM| z1<6A+CA=Uvx8YpDT(Tr45f~*VHq)vaZEr&|E7+#wASYplQzBv#B1Z$|iHQ^KNFb7u z>{WH!woFM<(hvtAVlHm3u23+8BzbjrH4jcsxHWwQ^tB5dy zH1NELWcE)+0arO$D9lhGf>xMS=M#! zlf=+#fMTN`D=z%2#={7p-<^nZm-3I?*qkKbMj0*!UL?(_ju@Gkn(_Vdcmxolc|s{k z&dV}TQFmuXl0-xTC|&$I?-?oXOs0;sUM#@)V_5sK9z*zRc-_og>&ByNpH}bX3!~#G zsMn0Pni!frUNv1LNr%9RT@s~4H#djF&GC49b2uKN8;)z$TFNF)T#f2KO<)xNbYL`W zo~gNAWyRZ|m?l+n&t|urQ!ybj_;R>C?hg#df6A^Q;&dy~krNDicbKdfX%Vsmbpz-n)SZg_L+wDiU$Mu-X!&WvHR&Qm7 z>iu4xG$xi z&gc94$8}wc`nGL~%T^cplaRffW}Ja&$yrNT@?l%cmtVZ`v?^>ZyT`Zo55IkS@yTv~ z`}F-cfB)mVJ1z>-pZ@vFZ@zrDyV)~nd#~<94o_^(C~l_P=C`*85n7fdVj5yg5?hba z6ornRZkmS(J?$9L*jGBNiDh>~wAF1Dq9r8&Km72WxpE>zOKh`Z3gB?q9ddqrtRl?B z=xvLm-{Nt%m)4!RF{Z&uy(-dgKmY2J*SEVQR?QnCz}^MaYcez}aS_7uP}B+4 z*i27eL9CLOC8g!4equ9)LlvzpFDzPi8f4kQtk#;C_s7HO-F>*!!lJ6`XLm1UjWJSH zHC>iPtuSytpKot(!!Jq8(hI{W_#b12hwqXmvEX4+;}^ZUxkXmDx3}-#zWwC(#m9HI z-+b|TQhjxM`|a27zWMeoXZg#Y|9ClMVn@Y#e|k8b*T*NT&A>1*Gc7rtS1tCOO8;y- ziJhC6gNW}0XVTu$FQsIqWf7Sna6x@_cef-d=QG2Js2JR9?6L+BSV3ehozBb-^3I|H zKpYXzRLRM0{;3cx3Ht?tDyRYyad#nhg6+9FSeNp!zI`ezy8}zknb*>V6_r{OfXnkX zGh+Js^=s1#b_1SHr&1KOgejdPZ|jV?!+!trcwD`H^rKHUsN`f(wQYYa@pd^w^oXoc zyTce1mH9%<2_FQ{9q*eRXqrvjh%vYiX-dh;l`hZtj6Gt^y0K@Ei+Ym^ZF@~H1ZNL^ z{Qg8F3Uhm!whS=h--W*zp}1RrbNB zXRqD8Rcen(d%5iiQ5`37ckt!Qc^-Ptj<-kbJ4^gB8U?p|rssEcZIdrg2V6{unbF83 zyVE2p`oYuv0jT8<~=T0P&C)$2AVIVSi$MJbQ!l*)9Xy z(OLj4T?VG;vLhyv3!K!W_LZ1>>=vXuB5tCbvGKS6*#JC-Wb79tzzx+5Waey@hFX=G znkA8VLjxEltEiiw&nRbDl&%LQB%#2CdlJ$6v-dFs%q@C{JAsmrBxkWmUYHrVGb^!^ zvoLjo@9sp2`V0?qCL$w|?q(dK?Exr9(z8~#+5{f5K{803!7OI(1|f;g*hH;elDFo< zLOsFeQ}aW#`FY6+Nf&aNgR)_W=Jh|FAx3cu>-v}dCsDob*60n!aihe)FNbb#TVSCfS)ixX5GO}D_^O%;-uJB4-_-r0~|E;rIb(2kJD zv!f>=2m~{CGZs+O$Y~m*V?0Oh!6yJhgc?=mYDtcva9jwfAa=6OUJ`MqIbC-(OP|$z zjCDP21oI(d{CPq!&CHvcgEc|c@DnKJa0@X1pnaYTR_5CqJEl(`>fK7sjHvVArrKWW zvB_vKWnJ{yCgxKNODp}kR;p=30mL(Q>~lh>gX83s2dYsJ5ow9FM_FUB}!A&OTnA2Fp^l zIF#JT;RH8waxIlX4019>fkO;L(5lWzl2y0vOfcZ_Sd4^5M<6q2Bz6XfJ+Vu)ss%vG z0x(H?lU5zHq@`%lZDWF}I|bLG>8nO2gD5IlEy}LVGz7`f`=Q4)NGUDL!W~gr)!bY_ z{LO&JnM*AWL~&<| zssc6;s+o0`x3VW*#!Tjs*=ug3KrW$rw{llLa!v*}Pj4F#@u&Tw zKM9NuN5>uB_N;i3KxAo{8K&8tYu%IVnKC(p_QylY%MbVOZg#u#`J{;-NKcsy2WUvd z!t4gmNtlQrS@@9}#xSK3+Wz5)=oCcN?P)vLS`WMZ zPV!od_18OQ3ir~^@4x@Poq^$o+uNI)o8z}Xd|Ng(($nem_19moFK-U}9T5y*mMpw~ zv9GOa$6vm~ZjA`yq=3z@A_Wu4sd8Ig3L)nJ}RX}I1%et zU)}GH%UZoC%DWjxT=klfU}A|ND2} z{{6R!(%T;%NSVxqB&VI(_Sug=CBYY8e13a-EJc@PSGIaShggh7HN>zffQ72LcjYWb zVu4XFes?dWqS|5ErL-{k^~>9`t@rQVp3mpJ2)gpj zt@h=Y-{0()*Ppz4db)r5;r{gQyx~}$YBEO>b0gs8-QDSQ8am#yjcZE6QzYph0BW_A z=o}qCYYUSgzHM+#&3w zNNfx&$r;9A36cO&Vr8oCmT*ir*q66Y8!K{Nc01K|rHi5~Qxxfk!igEdMfjtSUJ(a} z1#jQJZ{cGz@9kK0$2Y#Or4+9}`s~y5wvsgchktyd@y>!YuR&Ld$JZ!%w#&)QjQoNz z;e+&8?4u(fq3J!2eK+u zw5k`lbGRu?1a8S;3Q_t=`O$hMcufAtjtsfa{(>%GS>$8;Zq*`_;jBCxMw${oGrT)K z^EU&ypF!1dC5dRa+r>Q(QYv=_A~T1>r&B341A6zr)S--lS1`>r(VB6}V)}aZS0Uj=+u)9#fGf zZ*ojX>wT`~@u{_9g63!bj&&yQSPSD+K|L6hgaACu8K3uY8&h9OtnPJdG1YNH$++wjPd)DTv8zJpdS!&_4*FKm3de3ZKWkGe&Wd zBfNmB0hPvQ2DRONJReOl%pV*XYSqf^m}jpq9`wU|o?Y~LSjIO!$Sl(cT+NU%ZD#!4 zBNqh*P@|lXh@xE}6O&xZ*4*F*Cu^uW=iM$Pi8$3=8yYbtCkRYPf`vhQs+CWx7Ik&6 zN^pa+T1;pJ7<-um-c>UIH**CG36ms9qUb>s;7M?%MD(IW*?L^Ga}qJJNe3&0tyB<^ zuxbU|;z1d%D#ESYtg|S!v1mw;oD>!+Ra36f6l#gc)F6N=@;DIo$v=XP$Cjy_oj&%vz)kT ze8r`y10QV?3YZg`v27zdCTF{@&$aW+%?vt?*GmxM$Z8w8gLBUjnr#5gG^IRmG1RkP z^B(aGzXQNsm1y3K%#3?rXPE38fZli-eHUo&l%me0(`BtGk3F+{G$rk3do}WNK<^Xa ze*J@X-LV)k?RxI>GqnuOSi-|t#iCISRi7(oKFmS%cC!!4=i9?hPc#?g(zQ_<8>nBT z&o8_1<)V|EMcA*%90wC6jC05n^_s{4y}M8)27~nq{b}=m)0EPt>ukhkhYFVg3|!Pf z7QzQ^0EK@a0V%kL zqksnOS1KZ|tXg~Tz&3w^R2W6~!RsLaPBkDC0OkYAXChZ)?oF-LA(AKo#Gz`bntGa6 z&D9NX289$fBm{g#wE{?z9F|h5b&FdHCygfQ_Blh}W-_qke0zH%%w}4)LV%@2LvARB z2#xU?9%k@TTSpn9oRarRyx;9p5@Ff*Ae6e;ZYkw>I8?phgW;~Xf3u{-EJ3GWRh1Ce zMdr!|SMALMg23T*thKT5_xt^}t~QB=jfg;|zD6VWV`h=(8u==^IQb&cUMUzAW^N{_ zwIOQD$1l$6ypK!o!b%j=z^D0hS%4RxAE4e&b}U|Zk0#HfIEk5uVB;JX&3-F*%A9mHsVM&jVPaDe*X74j^Ik|aeD3hC! z6EmB_$%&LEXZ>O$`U{9x8zG^pF%y^)v80w(NI3^aNklN+>{8-4iuK3|uGl4a*KGyh zY&qw=Tf!nxRBxG?c|Zn)R%Y(*CUPoXP4_Q9{_Jr4_8&ekPp56&v{n+PB;YENh{&2s zVQ}(gTQ><4W>7dgm>6&!Aw7?m<}otVlXYP_+x}r26AV!1C$A56Jsgj_ALMM+0cEnt z+Nia{(dWn0mSt2#~+2{=wrQiuUp;z z?f>)t{?#x3^3#uBCXui&DWz2P_IOw7w(^>G%O{8Z{rx==?RLw4zdIiH=ej*S(7NV_ zr^oYov$hhPEdwS3Luo+|;dFXp5wBEMdVHr*q668M%)9;a^!EMl-@m!NTii%Xd3ij( z|N5Ix|N18n>-U?#-@PVT_(z|-{_OV8{@wrnOZBp?zFX>l^3=1E5HzO#h2f{eRX$p zcibB`-BwD8nG=#LTuI3}y4_1j#K$aDA&zscRzskGBeMv%T1`lZY{{~jSF>n5Wu3fA-Oa5xj~@U4AOJ~3K~&9>W|jaF#F4uqr=I$-Xc6PO)jhMY4~X4$!ssveJr!%sfr^Es(*=3BLg zZB+$Z+MfLDFCV}D=IQD5xC1Somc1-qj)Z$S09gcC9^RfUx+Rjh*QomG*&T83^&+8q z+0qG!8Z4{DZCAk#1}Czb$b|4>x4XT$*|zO`I^~=O}*CS$Ys!=KpIOjV&qR#ho4A!Zu9_>n5tP>TkpUIC&S_(B8Ub<%1i3gWGi zT-=4`zcVQu!ZGg5Y}6S$9nzY&n1(w=4Y{zlV4=;@&VALP8xyVp67miL!N>O%q zT~cRi!b}9S-j0BUh=n*&3IQEclPnU=HxH>LQXPMI6#N8UUgB>ns!=DiKA)3L+PwC{2p*lPvD8)d6xN;ilvTXE*b%z!tQ3 zA|hh%8>ld8M@(3_n08l-I&KxI1Pe%XWC}-+b0G!y&kRrw!Oie7DVVB_WJJ4^qMANx zcC2bnX*uj`tqvFFAT0ucr%*9&m45=@a4~SLACYgmJ2INDxON zS=*8?L>>W2hxX!0b6(KO0GkIKza(NIfZeKlOeE8$NJhd!1Jxb32cWtIrP17C)krJU zyDa2cmLb{@5H1Ma{PF8=!;`U20SE|~m<_&ZfdOvJUaYLT)o7PZ%uWSQxtorK8DJkVjE_z~8l5AGVidmwnq7Jq2qV~5(N|~9hY^AQT zM9peYJ3s}TnG!fVi-~wuhLZPcXtt1_G0zbIgr!HcLJBp04$qv0GdKgHrrrv{Sz^y3 zrq*hPp?wYnd&!}yoU)sNTCqQ-bO;d{xxzrMeo+rIRWfIXn^RYjro`^rRU~}O!`c-G z&6%AEYz`tZR|qj@he~2n@)`j&LifJZ9oh9#vG zyEY>89%NbO+@L3pJt!*ZBOef60DxE!EG!*7ZAV3Y8z_1+g!|TcuYsIXKf(i^Vs0hM zG}XDskpMEa2?-$5#$Zkf%vPXUEOC#&-~m0fRm<*B76QB@2o|2kY#5)#v$1fPx%JCM zv}%)KNeIT|=&-OGh9U|^=9Qw#u~N4W>Z4VQg~k&-<1D+k7Ztm?(!Q z>9(agz@yEJjr8pxFvY?iPa4~0An<9>ocj>8Ngl7itt$-hg{dijAyhNG(XRw#W}(f% zPTpK)BXkZLIVMOYCQ@PuxmmBuB4MVg3i7~bVXCT3LF7cZaqjNyK#)V685-!eMLwXI znZruiYHPekBZ2C@p*8^wV@?FHh`O6;k`RdC4rl}de*$< zU){Oa54GBOcOs}62`!QV+tw|KXf09M`Ic1aG0Lr#=LwyhYOS0gvqI=*V@XK@F6?ajB*G%wwxKf~gc`^WVU8bwRE;67uc+;uM>42n)3G3SSW zIL_AnA43QWfZUBERceKnWx;?4Vz6#>@Ml^JxH8%w2P8U@JYT6_znr$7bfP%d$upO^Xz0N=b_WD5Z=`G-JQ^ z784-q@fBJ!jLeMCI%?HYO-V)fdH?BWKmGmR{l+kI%OMl%a3Sim->6n42Mc8+-^?vU zxnoGLLi)?-_r=3KVS)ZKqRFNK_vh1#_5AA9tGnBqhx@|NNG!H3FcR<0%QFDxwr=ZM zOLjgU_Od>jg^Cw5dFZ1KaffLpv>SVPco=in%s&6(%U7>ndD(JGx3@RTvg9S*+}xbc z=adr*FSIbxVZRqjk$`&h-FInALiChQ?#4{2z9lM~hM|ca(%p!IQ46)w{01k0ZtsrA z+r@0l%lUA4{PV{>|TI-#?wV*RNmay#Mz1-x8A> zN2vA1mtX$N|Moxo)!+W&i!Xl2>F#fS{dZ3f>o0!(7r*`6&sVFi)xEITRtiNHtGiIc zt!Yk!!Qj0|AIi2>M`kJKQz?arQzF1bgp)*&FAMLNC8cClLuwLcl2XoDQm55$c6SnP z5v^(z;0MZJ#AN>N{R0u*ECL|`2}?CMrm8_E;GiS`Ff9yXrX^D~R1NO|%;|J`QmeZx zStMixN;x<2Oc2zZAk6G|@#4kn*ROu_+uuH&Tk{ju!f5p=wN_$RRZ6lP4)pX8>x(A! zYc)+>Vr*DXzf>>!_%eP!6^)9!0x6Of_4HUzr!cg&lnD5lh1K4_eK0l_05NQcsx>kP=jhZo}Q`)(0t^HJCD7~Y2OhmIR08NA!>RLi^hrbhQ&`s#G^)(;^GmZHbo-qUKx@s>H-n1rRGbK(ABX63O8s+K@ zNkS)m5o-W@F_jShPuNE7t#jR@y?48lXMPu5NKZ6`nHt2{{lxLh**l%rCMM9Z{n!D3 zJ!*;oVINaH@^GN&dkeq`qY^NBrkJ%mk3_Xi!#Tf&={*jfrm5FH-)feH`seER*CrPq z{O9~7w@PG;LFi7q&t03w8Db>IH)FWQ;E!P(BWCUd!%*Zz^eakc#R$#e>^CM+3j-24Y89dT2bm@TDs^C4!y*wK1OoQVc#$_0@GrLI+ zkx)>ShoRRDw&(8C06rJaNULWs~ZT_?QKN|Vzxwnv5!gIPjEm}N?Yx1E&D6rUgJN8 zYvkiYKX(*#2937X8cn_9H?>yxOYlO|Vlgvwb1xtfL<6+AAN7#BA|ZmAwz=RgWI!ap z-BgK^nVGt}(xf&5&)5%6>99ioRWl|eoF3M zO6lmEr*MJT)ynWKmz*UL5hadJwv>`E$P5rNvy{mU=H#+>agf8DoFoxb zVj@cCvJ!bpDJ6Dtw+$e7lKq~UC26pSftjPcZ-^Bb8Hd`D)*f8 z(1MSX#I-h68U%%g1rf8rwW@+z$K#-$dF*z5vlzJ$a|^Y0ChEggqqsTh3oQZxa0_IJ zxUt!Cl9VI~bMz1!Mshek!xUIgxs8<1STeI$IoAHXE-uS$^0VLhK~*{tfeu5~@@7FnN)!yKw|fJ%Sx^H0?n zrQuaO%v6ZX$-+%_UmUl@HzKG-SoXVRzhnWQw)0l(ME)SOW$6KjIJF{iqS@BRg?jTZ z)%hh|Mm%!05ef8}9lsCcZdsO_o14g04rnF>n9VE_UDEq!1002XkAxz>~=eJ zf&g{!dw3ynL4%yD9gnwv@mGKS+h706w5ZlvRh(SF(m;1YtKm;cL=HvO?5x|^{Ah&S zAMRLV%-ubn_~K^~V6Nn=)}r$Yuhj&$zZw{O4v@~fx!$5*djKAuiDH^-b)RU-lyEXzWP&gb)C zw@+M%s1&?<`O>Ve>-zOKZ_2hYbL=c@tqH>PLlZQ3?>nBE47rO zpZw_Vzy5Fj)4%`qcb|RoFaG=g;a`2Z{lj-({hl4DhNSB2?vUKQY*j=w;wrM)9H5n+ z0f-i4tYss>qo1Zb2+YhW2aKiWAUEiCUSGao5z@MH80nODSyVN0lvTBqQc7Jzkk!2{ zU=GMcja;ifJU%hqFpS7@%1g>-YVOsvnx?!I_g&^)Nb(n}#oWo6)L^E1K9yQS_SkdU z?-s4muLEj*k9WX)e>kk``q4+PKmF0CzyIQ^oDWInRQ{ukZ$(hYf$(dQL^;-bIg3O7v60z30J04zt^7{LC z_q2%I>_t$C9-r=Czj~c>Dy0I7;JkCII~cctDasvxwB^L9YVdh|5l+y3US8fE>$*Li z&TeK-r4-rk%}P|kSGQW#nb=bgu{cuvV;iw<)@rSY5`!d`#Dr`SUy|$yyQR9C6)&4@ z)gpKgKR$^Ir6qGp4p))KSBE8wJlFv@_1(R$RmsfB&6rwg3Aus%<;xe5mNfJG`}W1KWsV5y&A>3hSb2$;u2#vjzg%mmKA7$NrH%{52`5aS#`fxy`sdg>-^j6a0enlZ7%sd6z=|PWX8;y2g?0gq@`B{ zjaNJlwCQK#%tj6Ipl)sOfulGUCiAq;!qT$in_JtYuB*!uKStEYy1~IB&JY6E zP)T9Cyrvlgax(?TIGA7fq(CQp(7=_Z7yaR=#=00_eivwGA+QLg6cs7V;^Z3Ogc%%J z(poezaUxZPU&12lipC>FG$MjI_rpCXiq|C)ew_mpy-3U~+}CJW#7r67myUB{cTdvh zzev#D8wmgdV60 zPwNf@N}VSE|B?1CztSyBe$X!>GS{lwdw-8}&V6^^HVx`-t1TfRFfuJH8<52eCQJ+h z$@t&Fa}d);2+0E`meukAVHzXA1_=gkECknm-}jvJJ@%uj*2;_s29cSSdw=)dZi%g< zqy5#cTD4X_A|rnBi(ibrPZJDL%N1;$%?LfahZgXLJi>LicGcY%ZypPhxhX>QufA?x zRgL1Gc^}O=NT6l5@Z5sY8O&8Z=MG`d3KU1%gjthAutmq^OzV9B4U%PKWw|Z=e#nDo2#0d z5vAc4MvyXsbaem0yMA_vcMW4Qf{U0P?nO~^EQaUdNxUIQ71BDOUgPdzD_$6!zA@Ru zANHo1wk*rd&GE3VDJ25!r_1^LbU8if<$S)s_x<8k!HM%i>$Q`Ofj-SAjh{akFggx( zGlLsBidndk>?ZC9k~`vLnpi~m?(S~iw#4c2>2z^C37wN{Ow5VZK&%9Ub?KRS=4+Tb z2609VhXrgNW>`HUBHFeMfQY<){o2e*DNj#N!!*Z22OyGjZZaa{f+0I{x}5#&B9fLx zCg#z$ZIqXkQZz3c&VhrR*xb*XAD82A{Pw@}vmgEQ^7M$PLva>BgsYpIMnfDoYw=0P zDx>lvzH5$E#v&L8nD=6vaRZUmE~cmb^6>OT?rTctx>Jh+yorZK9YnVvVcO4Szg<^X zq+ISP#eL@YPq#vfSO>9**mh z^13eVOs%>|N;kZ18w20`<`=JC-<`J&MCWb0Y?uA=bSVWy?qrcmeWH_xZHzxdhv%ul%LIBKlju`02;L`*;8ApZ?@4(IxR>s3A#| zk}%7@)$nJ=y#XJiXJJ@X62o{ugV~KVgY_&n2j;nG%IEERu+Dv=OmrfUB+* zxKzD3ndzF6tA;hEUbGSSPYyUSM~S+I#8U)d94t>lfLx;2XYeS0^Qo@CL!Z~XZ3@98 zV~u_CMDyAk%YY`L#Qaw?i_W1jPlRWC)2BL#Hii_ZYr7QnhU$1u7o8Wt`2YMOGkb4j z$IS8J@z-gOPfq3ww%Rn^(>-6U;%p(?;`L{iVZ816nv74qtOn=jjFH9=)> z*;pZVGAA{VLk;G{g0y&AJg=S@PE@Mbok6ThT2OXBJEa5$+)y`Y4G`VE)p`RKbkv4* z0ue*Snd2$*@hD3MpJBlQjm9O0ex3)&FfA=(P-)FcoTBuJ*_m6sKt#;i*HRm(7{=>} zy`0}?(LzYy^q$4eL=H(=QgR_#)*$?|uqiQfWUq5}IGYhFT9p795$EM^I1Zl0bbLK8Rw)Bs8;NfL4kyb=_j z3dk{b(6x0Zri2`#CpbJH*V%Np(?^;db1ZEU?l}}Pa}#po;Mzvj9)p5@99=C!g2~BD zeLUvaL1spbPR92bIq$dEd|@vpI)5)-qjD= z7lAYmCV;8^KCr)b19r{u&8u!cmu8gQg$OmToXpPIT$WP6ilgQS>i|)@ksGbHvE@lccOXJK$=QX zz8c$>6m0h(-Qp#Ljs6mNoZNDG>Gm!frc49!g*c7xpH@f=d{4x%$8+w_t3jqQWoNM zT~xK!ni5C(zroE(nyxUSHxUaFQMCdGGZ|GggOZsgO0{KaDJ8WU>inag z44`mR$Kr{Me(gx#{linr;ro$+YSkdw6A@E_Gp9sOW?pNUl#B+TN0U+oLPgC%%p$~I zRdwHnYE#r158!XidrHZ>zZY6n>;wv`J_BHBS8%YJde_;ks;SWdI}Y1t()V??6+!t)n*#fw`>Pzh`^hj#BSXa9=$?=7-SYpwtTJ-V5gOz$Y zpH2@S%IWd+;e%c-WV#$~H6?xv{?%aU{PX8yjP{!Vgoe;Q;K0JN)_OyHaEOzW9+so- z<#2Oz-uGST48Ab!%q9YN0ryYOK>~&un!Tt|mep|Ln1)tQLCk#F_hJ^9aSYk{d=3z- z?k%VQ03ZNKL_t(D)@yX^8qYB%Qo1O9P*ifxPE<;{TrM#~hr=PW063q|K~0J&Y_?UH zDdjBCdMTFj`o*`uclpr|yi{?^Op8eLs0@8Sa&k42EEGL>L$k?)LH4O9Iv-0s0kv^l zSTqK4DAA>sr}OE}?cJJ|L}!RpEk2@=*5%1!+yGQlO}4ucaY{)lF|mc#6QM~ePWKaE zEv;YBvqFzr>t);A{qb};9G1Jgo4azf+v8UDt?b9s`uW?>wr!7u$=YS_Zf|aux-g3{ zuj^9OZf+X-xbE(LI4rfEZE{RMjYDFxOzX|MKJL4=h`Pin z?!-AaZTMZaQKHaNVa%+mr_&`YzQL>7UaLk)Vc_N#4K$kT1`-liv&&YWF53|VcrxUi zOW9&SnS-58l{quu=C|uwjqK^X0j926otRT*Ce?Dj?7|^HPqEvZ5P72W`D|uHxV_7- zUfsE=S&dG?YK4VVT~$ljBM85_x!JZ&L@t-h&CLz<=BnssE{@O1cU1Gpc@fCXboj5# zBB`>7LrsmCLDbluPD{?W$5mAcCJw8Y;mbu*z7yWe zG@7UzKq&4Jsu=kY^(P{X8uUiTpp=rDiZGKeiEq|JVw7#$YXt~h6GKUE)`gk(YDHB< z)C`8&6oR6jt`lv7l^b3#sKS*9!Yt&8Y02k(Ghn&9xmZ2CeG}yvJA(Js&|3mz$wFKn zp0@Y*cjd=VZVr+Jsx0a9blJ9@XwX^_!G>KIe0MHE zo`_WQY1`kOe`dc()xc!*>zdLx%b9aUVP-1|xe`yjLB-eFXPX4MM|d+1*YP4v0FzC; zV}CBw9)|1cOiyR?_#$@)lXgB`{4u&lj>^`#6x!XxMfM5wjO#=t3+61^bG{W#oxZ(w zrzHl}5Z5HvQbYuHJq<^k5Lvz1Uq|;5sSiTfTkV4AWnm!Q(*pjkN1Fz8JAFR@CvSflJQE;=EL@o3}5a`K%wq zCB1*By9bn;M8@)P>(@j(^?YL9eLAOu=^X#(zO}~#TJJ0By`bLA!l$?1+KW0r3qZsJ zWA298q@GENQKjcGa5%o>B4b(d)XF0qO8848v^^9Mi$tGub*~G4N^5=k^Wt^xA_HT- zsyFsA6TzK9Zt7-n(h*S2O0}o5e=Pf2>j8XrcaL&f8rzV}+bhi6sqM_d4SFPVjl7w= z6R|@O8!MhLu+gZk?wOd@^vMua(M>VQt!b~feaiGajQ@0BkKe}|#^B3jvgSF$pgVDU zMt3*Z$X%e7eY;J?RfZM|bsI954^Lz(f0o{!Z_I~N{d|fsbRJmdhmDVq_sm;({EQKp z-!>5KPpo5SO3R9@Y(1QqGL;KI2APZPzMcs-cS}7|5y*fIO z>^22~LKZ8bFiQXs`aEv#Zc1PgwtCH5v?1yzqeKfby0S;9qoP+kLvBsYvkxgT1ro{> zYPsGp!=~+OYUB`Ra&V$RU;q|rN9v1pB@=seYy@VCroirCZdIr$Nle(t1%|~98zU@H zbV$rmD{p4Zl#qgMW->4)cT-6s!Yo*pF6_!dL-Sy$QIw0)SpV?eC2Qcf0HT>wH>%gr zk_dv4Icn9@?hZ3%xU+lGL|hPqLj-2w>Tnzw(tlBet?Rxk!0WjD|cTn#h z+(SPLw3_DbVSVH$7os1v&`5vxgZL%Y#v8_A=rqkPOcLnGb*{}PWOK4GfdUU-3*Gks zKRb-N)v|fPgqH63=jGA$RrUEjX4O$4GEz4r6t!q{zy@tCIiV`F3 z-Sjerq`RQeua)Yg+B62rEZQ;AVOgwKM+JM7gCY31INR2d> zn0VI22bhzpR@21Ux`*KI#gxdM0VB0u-o&n6T}?zv*KT6w0Jxc1-Bouqflk}&&P?jI zm3{cVYE4Ed?$8{}9M$OEwext@01&Eb-EC4zXjv*EMpNO(vaCTdBO>h^zP2nrVw9p- zsr6dqP&OwsS9Ope3MGliNX>+r>8oZbXGNqmyjJT4YD7e}8ejvO91JrN358agf-L5w zTB)^%GMRL%m>K3~mUAvziI~_2P)LE8wYCk{da|(v#w)72ZI^A!$5q^o8u-?h)${JtAeXXj=hNfEyZ7h&_fPNN*Yi0MVO^BvcYp7%zOahF>gUe|jD{6e)sPDJaN~%D zXi+bD&~`_kEvki~v^k>PFS-sa*E$@#$&#n7(-X_U=x$^W(PF!(lxv zOG;vgHG18=y1QGFIMdzhHFGj}YTa)R zw<5``ZrjD+Pfx19s3z-&4^+1OcD;Fcc-pI1tEb0O3yQkK*qL3X$#;|LH&Z@BY?*_^;g@4u9|mfAA0f=BeR7PFSjeHS8;yq5iZ|L~OVZUNf0<|H|OP0^y zy!!g#bhbi7<|-mgOtjQmz2OCImx<7lWz?83)6?m3U2kq*zxLKy(Z9g0be&cX=dvkkO7B|~Vt>y|+$7Z&vp0@h4_wT{N zxcXj!0FM3W9vR)raCTyHf)Q-r%H@0tUgdH)hN2cTOJ28atEB);y>!@}_ErGWvMeIv zgjy}6TNI8gl7*Km*!;#BhUXJAZbb_S+a}OLTP@idAMt6E4hC z70lQmV>IG^lC;wMfz6FKgx?%)7HJwqPtRtm|IqV@E1oyeHP<-C z$0ibMpOn7myC5=i_rfN8d}Ow5g4)Ml1N7txh>y7o5Fe$p*4Lhw6L+@!Mqe(9e3gc>9+Ahk20aJvcUtf8uM}C%dLw6hsOv!gSS2 zAsylFOcnmHZ6CKim+e3~!JDVqFu|~O8fEXy+>jk&amxl_5|-#nC&WTTjKUoJJ+;~# zMzVK$4UeiaDgNO zS%FvD&C9u-nU=&bvP#uF9YIt1vm-G(bHlyRT6cw4;6z{n7|Bu9&0|4=I#1M{gv5w? z!(0N|ESWi9wOIS1bxnH^HC_TUTL(a6%g%#u)6$BcX=4tFV1Oz9BW^2=nbZJxVooB3 zN2q+AYjUNQMH|IEZLf8$v-pnzBeCDY7fQ;YDp zVQOKs1ME%~igHXTNn%REBE%9sWw{CIw{3Vm<>A(=QqY$@0pJw8(UIQpK){9=th>{- zgglO4QdO2v`i_#n_QNvQn!sI|vro>$*dX46P3c9u;U=OVF2nQ;41$@%<7yJ3lK{($ z4NgSt>aC!VBINOQ#`k)sgN=h=?DTQvv7CsWWq>@` z2hTs!M&_5fMlA^%1sT1{$EO}s>_C^DiKB!d!v>mxAaJhQVwo(wyEA*OPVOu`2yPRo zdmR?DAT9JXK)2{>3Q%M>iKx~RvU0>!-9!Za851q;&XlUwrqCN@Qe6U@h^Pbf0A$JW zSk$Bm!Wv(ZBlHX?+5z2ZQnhkVgo}tk+P>&WNLyMY(cQN#yzqRY#Tf;f2$38}Y5?fn z?^->SzJOZmhKpEFqVIJ;&+v8+@so4j_MMp2pk_j?o%--$h#?|-t)V<7&Z?!9I)=Of zi=b^U%tRukDhSRL#SaE|)3IQPNYzw313Da3VT^(d;b9ubxv4|_iNxKtx;qH%0hzn9 zXWuCz62v>BD6~()T+IRp&{~-|veYxr13(nYj9owCg`ztVUDadYBoyiSfUvY{VZ}XH zZM^A0Tb5q5?z?ho><7O#!Q<9~f{2Cylt|C-|z134u?a4gDIsX0=St& z5=7X1uiN3~?(OHF*N-0#iH>VtGK=tGNngMFpsIu3m4wzT`(EbZoe!${WW}g@a{y2? zc8cy*&ZK6QY_BE3h$*w6RtOn2IqIvc*+uPeEr^8{nxjC-;w&WaA5^vtTVe!-X zOhm`SF-h7>amRPQ^X>2c<{OvIsXm@AKmF;~my5fbBr>mctJd2Pi6pi}#KnzeRd;oJ zIGsSO&`O3(Feha<7h+O^@lSvJ?zevXUoidChllNd`0xMEpZw|hKlt~b-oAQ!Jm%vq z-@eKZPi3#0=$hrgOev?!MRQKwO^Gm)csk%=j^4wu(eNWFl&FS9*f>b_kr7xP+cg)|CMoAE`@TCPS`s*dB^Smn#o?M#N!|7Qfob5&Q*C?mg8Ze#IKI84~M+mti|=~kMD{3H@@@jRhiVWUCe+|8Q9eT9G1K+ z8IA;Z;$j-^OKID!*F_>uSvM`2f`mg%BE)-3vy-7$>DKD*?vJ%rG8d3=B7$2BXDrmw zK-#t@h#F*|G z^M3mIyXCVtX;~lk%lhWV-`C=XhIOLW`s&r42ornR>*?v_9crc4BqUT4(*zEHMhlP%lyLugODCH_hJ)Rwa^A)@sH%vriO-l$p<3&jrBuwb- z1jo5Bzzcp}emgu)d0u%vo+a`V^D#I79(Nl=?_d**F|jTNYCcN^(RkjgXZ%TSZ}@Y= zxp8;lXF=Dv&oNm(fo@~;(9gkv-Hg{~Ko%3Ha!giiOv%eMcg<<*B3~Hykow1i`RmPf zmhp!1jN?hsMV;dJSk*J&9z!uZ7{lYFYmNEK^!`|N97}X|K*z!e)@N$fIWO1$ zc$P5{^RhHEOj~JO*`F(@`twWEd?rr&W%_G8k-3>L6G51ll=iKT_ZVS!dvaaPH}_~* z1eiN40xE|DH_M!igrX}hv(ri>&SFlc3`#5l7K4*Dpamh{gm8_8_-aL`ypB7f2TNOx zlM6jh%KZ4BS{_VWZ=S*U%ZrbUq3ggjG52`{a4q!i?nP{Te=(KM^gZXb@#)Wt*T=2S zj^F&tcw21K7Y^#L`j&Q)=_}^Tj?cbaOGFe3;KbBRh}+_1Ho(A~Gi&jhU5kN1u0kZ) zgpnD-me`n>B`Vw^=?O1x(Crd6XKIxlvK}cPNEqCXM-a>vBg@t5x~P@Df$Ba9S9WMsf=o4jlTyQpM*JM`vnFRARcBb6YbES!?0)PYfeIoe1y5c4{oM7?+KHCYv0PR`Lz=b1U} ze|$Eceb@uf^~mKvlU9?&>XCvLSt`tcDNm-xNdGgf{l+j;n31J)#p z;==2p^Ky$piGKB0-Kq1xMzu=2=Z+kyD)Td0?H3p6WAbv9 ze!6IRB3IfcmVutf2(yXcK@W-qYHQX@B7zF-f)a^R>E2HG7$Oqt?}^z=J=jl1s_M}s znG;QkQs7!v5=$(2er|52!v|w#RgV(j84P0KYSv_MqDKr-ih>Mn&Hz&ykH&35w}A~~ zA6E<4Vqj$9D&(AlH5*n@`yd34oJ9~22UFzBi5M(Sq4vw{C{{qIhRgydgM(1bmz1h$ zs}v$Cr9jo4)W9sY)@r*qFOI>MSX`yD~ULDu%L5CrkeFjJOM<*Rh5Cu5{Z-MDdE6svEPYo0g8)PQ5po z*+A+JNp4nEjoev?IsA~o>*N2$uH1;6bLbNE3-Z7&h-mLxrSZ-_>5j>@BV{O&Gnp@v z+vatn6svU3h&LCPh{nld0Y;1LwZfX9Cwk9PB4S2LoEKrCZY&M3=uBBe;{lnRr zyx7y@NvhL_h5u1u1R@ z-fOvCG7zr9q)r`Ii;Hykfyk@rUMmqD4~OG=IBl0c%hv;JEZO*{b!pcZGveO3;}i|k z)r+dCZrgr7Z;y|sWy!a<$J_HcXLggDp3iSn#mx*}S?lFUvtoQIYdw zdHd$G$H({o;~)R;-~aCK?`3nc%f2x?aamTBty-l*h1jdsl;m>W@{&!xR#jCNiPZNv zp#cX)8MsR*4?*EQ-4QH+=!|Iwa}hb@<@3+KQPgUw_os6bxon#n_Ns1!kv?1oVs1&L zQG1w^5HU-7x?GsCCf;jZk`R%>tD!p1rIuQwGr33SiG2ey2q{X{Gytz~%Z!Pb_;9#^ zscMNeVd?}=S@u%4ZC{QeL=FXUWaox`^r}{>k*w>Q^P;6{Z++$tgXa{@w0Q8^0HD{d zj#AL}_N@45E~CHoz|KN+gFRE$jO6^uR|t-rcQtw?F^tOJc5<%YNBBG)duP zUTfWoK9${oazZ73yi_4_#(KQn_FY4)$Ba6IhLhB)$K&zy&p&(r^_NS|hb+;=b=yLK zR*0p#S*byTlqAFq2DIjAp+n}{(Sg2^C8fO@UnjT`R#N*TG?zL=eeTFv1EP>#T3 z#y!UkW76Uo#vHh+(YbrA4QH&SilmWc9bsM&3CHseYaH0Ucdp|2lXh93@o3!Hh-TU% zwLYqm5t+?>IYN^0xdV%gpaIdBjXqy|u z)r}NUhAPc;H0(?gr6d9(CjkXfM8H`f!UBRjy9+20Ws!qQB4#E5Ga;lA%`BQibTU%_ z4OhcRL|sD>&4KMeK%)ZoKKApo_k@&Fh^}BPcnm7&_=vh$brBzneEfevW86#XW|K9} z;y~}*-7tYKpCFPiCiK&(96Ne`eO}e$&dqF=nSOEEajEI!S5$>MK@4c7Fz%m-gjqyV zPAuFcx0r|oP)=EHZrEzoCP*Pm#=1~mJh4$Ucura*ghELu3LHfXxmm4bs*ao%B3w~X z01d$e;Ak7lVFBrzcn~HNQe|d!zcx}QARyhL(mWaY9@n&LfYw32Z3r?mCiYGdjpPJ9 z-}}}ffN`M2o-%-<>%m0y^Tuv2U%M~U!v7qTbz0nOlzVBJ4Qo!W|H8Z z21FZ-V`d=w$+)Czv1DVbH)tvBNtA>GfX@Ydy$XRFBQ*}wZdx}01SS!Y6u|<7nZ<{> ziemF=i8}YzooMQ!Z9CBTPHM9D4MV{!ibs9j5)eRPgsqY@jNQz+9s5z#*^bl~`{Kp< z6*Ji#m|g<+z8k-fgcgn0-A6SHCQ#VS zY*GW9@6ha*lV&i{dg8^Q*ch!tnpN!O?K7y#vyU_(L>QukeZjqiYHg`8X+Q8rNA<`+G_99$7wxVZD0yv$N$$uwcha0q#i;}|mtZ^> zHRT189PE<4AYyNhGVPlRCgjh@z|$%wq6XTCNsru$l@HGoNiG;%I4gjRb)8cW4~M3=XeAJCXfih&1&CLEoLdDO61sF zBO4YQg#bW8?l$VWg7ZN{U>|olmVHcItyOX&5p%a%Q#VN>QcZ&%70QWwDLQptMUNm- zN+~BbHB~0WAIEAP=D{aGGi<+hB`EHMYxieztFs-L12OM%Pcz)fQ^kpQLb^YfY?^=Z zXEx1htvSiA6-7Th-m6-5-?xit2r80J^X%bCgjN07)#y4lI(6%evKaI-Mdx1d_+6)8TMfR_B}~ElRw(-G1X+_5OWA zT@nlXvaWAl-96nu-ftHoq%8gXirlQv)lBG~kcceHvTfUdkZMchI$29@n^k6Zql?DcsVI`!zB;m9}Q#MahO1ZhYA$A6C*Tc5KEN_?f z@#CZTo9}$b9;V#+@JQm zEGeygliy$NA*7D2C@~e?fBd5_0kT5n(eBoVfB46L{4f9BZ~r%c_}{+!xqj=L-}%?hwgjf<8nS<03$Pj5Ftu+`ikWy4i*(xUODS-qVRL9&tXLz@%QCnG=^p`DWRy-rwIRPRnw*X!V<8x;s`=S0jZO zT$KR>w1e~T=)T&-Mq$y2!mLz%c(ScP)_jvdq^ENTr`?3Cw_(rni}&}tIw(gLvWIxw zc?Aqu>w5^ZvaxB}_p__3nF}~OLNMajoH7Vu3UUyGKq;jwmB=+5@sJ&ixTpshj#edy zrf|}euCvoQpTr~cHNJX8EY{T?N07k1wP4VG4j#?hI z0+Opc0I)!{5IIYd6z-{8C{L-4!9kDMsUc8e3iHa$ED=7nOx19qFoiwM|1~9MH-a<5 z^${IlDEDYkRRcPl9l_zh0-(VI?I#d-FPW$T5%C`BVd{XPn-5JC33cu&at+9yi4{F9?asZ@Ih;lxP$pWMdIp`x*uL0h<4@yG z<}lvO2;2ziOe_*LZcao7Whwi4FA1*1nZO}U&X ztm_x-%D)(*mhcdD?Nc+r2s~qK)d=t+pmm@jeAE_mpUUgxqJ_TAg&oTvTU{ma{}0us(B=j0Z1aRa5qy?rIe%g4Mbg54<1{ViJ9TOyR;)Jg=4yv;b!Va?n2~R z<08h*KE#f&c1pU_+6WQmB&~V{2&yBDgNrTP=xg2PfI_k`T3bXT6@+gTjilS@407g3 z!L;(;hNS{XDa7Db#2Q$NcuewLRo835~%8pzBFf>Yg+k6C51-Fgi zZs?f0nYlwCsw!||ve4ynxKo7@wTbem%n&j&5{UF|DPacveK!mK3Cpbj04IR)%|pl1EHB!a$lBrW6W{V1-AHYFwu+VAYwGJo{JI zi$qtYUZiZ@%)7_DH(gqen;~*Qp$v0&n3>gZvf&WooD#f5n$MCb!PSVnGbTCea$?xY zO&|_+O4j8{5{tQ)u#j+oSj3&{wu4Ag7Kx_kH8V>}Ze5!mE<$Fe)r`R6UI>6&VP=4> zci*bf_^Y?5H8Zn4fORHvHE$de>-&@$6g<0Y(0 z0Xd+h25FiA*BJklniM&wB$1zjMJaA$4=}T%Wh^)0!|KCGzf3V zz+g@=Gd1~+#vTO`QsU-6TN~%F2BsPT4y-wffv0gh84zAQPtEQFd}rnn+EL{7&8!{o zAVRIBRXMi|M8m#<#t~y13JGK|McM0Cwd|!yDVPaMB65W@F(o56BKK8LKottC|KM6rtmXtqx`{wcC^!W8A0+`oQ z%uRZBG=6AeBgZR;!(sG08ZXA%v??`*0s+`dt&1k%lrmQ#551M@eszn7&5E&CGjrc- zO_GE&jncgC8}`|G*6Lxb1Wf6>mg{f~@v@d-V75XPy6^jTI-d^f`Fwu;`t{x2T`3iW zWl3h$%x>?FZ{NO!v#FgfTT1!n@an)fuV20S);G`p{D(h0|LiBkyd=SHOGjKw2DL4b&kfsmZQhvV_}t5+ZIA48>qIjVJh-*;8@2*yUt(^oIL z{9KIu;L3rxm?cm9zH2=zpibt-lD*YuwbL}Ev@FY3c2lpln%c4~x3{;KecShaj%M3x z34IJEb22kBJ{*qb?A2%qeAvhxrtF@X+3o!F1SgRMA~30Ht#w`3%jF`Ha$ej`OSNA5 z#LTe9N*i8gOOCa+q}6 zFNvE=7wC~22qNk8x36#U>bPG3xj;t0ZVtz9fBU=N{O)(2s{XSd{P5}N$*AR3V~;Si znKRRm|MZ7BXR~UiayTR=Q%}N`x(r3nkCn2Eh%;wy&Vj0zQqMXN{*=K0TU&m zB`r(7d-dvPU;g59x!k>aT^Z_jxH&ke73Pa**?r(RIYkN*%_dX?jq#8(s8$7F#V*@k zlOC7D@_JSAdOpGM=FOW-;s#3c@!>(;nWdk8FOGqx0Y_-vLALFZ>t0a-G9BstKLZ$z z%ZiATni@$<|5#O3!$gkjre!u+{Z@LSdtgc4d4HphY4!z&nVJ{&*g-UTa*?f#{)ygk ztLE;QPfu~JXd8&3naMnA+!Fgy6$zjr3tb*-7}9Q6n@x5Lp#?nuYbRiKdLwno#c`eH z`jl(AB2Ns>(8?S`q^jKerG~zn2nMq|IGqC)qZv!Jo^qnygjU`EX5 zZXR9T+ZJpVBOZU+p7S0VV>|vtQ%6yoNJitGpIVJyIx=Ion)k|0CI(yG-My5$*IG;~ zNQKW#XU7Ju?gR?Sw@3+qI@lD=>smsB$Q+<>MAXgPmAt|N)&d~#g*X>aj)QNRB@r!- zW6G;YCeDO|QBEQbaU^0f2*5;4#13&HK#Z7)4267KNX-O922rFo&RnC=10Zv9Cr1K- za25vOLTlhdJws(ze7ViwP$eUx00P=Z!`1Z7Q)$zjhPT{JcXu<$ zr+Ihj3G&%$y_npwgLtBTU~*ZB0)UFQ&De)o4`}BLw&x-mqHE@^;X(-qrfTlOEQieQ zFbyn&IT0sH!b|ob@`(sJ9}bJqVa;+_T^OFt*iqo*oH!+4S6UA^99kl)-++i9YVf=8 zX*fJ^a^*vawT>1B2O^xAe0~7U zn0Jv}CMd?)smf6 zE+8Tz-7GK&-0M=WnX|EYgalo3G5iN+&Y7ciN$8V0kuXwXNzx?TC?pn|G4Td-^b<3T zUFUMfpD;y&^QIWD{4xvH`d|qngR=s#Qn}aB(>yFwfJ=R=&gq2y7jhqW62|;`F2F$y zY21Kdt!vCDb5m*HUZFA`Cth!xukX>xn}RhHaphXRc+RVd_+{1c_6a|9te7}h4kOCdDTxH*PitjP{f1kYG3kxk z<1}}7t<|#(W9E}4drQePiHL4HL~>fJ(_l3e-dIe-@t|-RRLfMj1N3F-owhWnXKR)Q+uiO6SEBFOEfm zzQNl+>5AzOr_{`{q}f*)>#$CZCQuC`^~JL9{??=dyqwX@le9qv%jME2kxby`E! zD&8m{VDc^)FxGtO+D$1X>k;(GSd8iRVB|Ka)Ty`LiL*H6)Lnq6iXmp{uh1}G<9oZM zy^>4Dj-LNNp54r%aDFy2DRf2b8WhB3wdx4==S}Sh)oL{c z6;%hVIR#;lh&WB{#JXztuL)UyH8A>1KSY2qyD!SOPIsWiEeqe?+$=e5wQNFYQDe7M3$}snwlE&p|vtFlJ`cJU(&Hsw$F$dgjj6^wnoyEXTw77iHTj z%(%&lKO0zPjuXt?&->-$$9ooDQaf@HVL;Ve z`ov91YpvV1KRlg|$K$J4uTtW5UDh?9E?YH~w3rq%OOgRkltD{Tx?7hozIeQQ^$MP~ z)_OjD`I8_2zkm9JpZ)mf|Mw4nypy9^XzA*bi+1>4OIhRFJsY=AET6aZf z01^0d*}weqYt_1nu-9*V{^oXl{d>Rr`^heeeliUIj^Bq4IqS^!&?p6M4u$y z=K;r5#v8*t&gs2q*-tIfBJyCm_;p5@IlRpG@Bcr>-nB=TB)JkhX66x*nN@Xf-|21+ zmot2?=5P|%XQ z)XtMV-F;tmD>Eb9%}gK6-NUoGXO@XUPu;4_$OwO!n;koL>`eqf3J3UnKF`zj;o;%9 z97-txkH!X>rl}B>%e5ULq^eM3;y16~{LIh%tZHEvhG{W^Pe~5T{PeV4uIIzy5F}a> ze!5(j<3Y|(2D+{#)lxVnGAARS{7LGhs++RI@9R&5C254g?7Kn#*)|f4w|? z_V(TPKl>~JhvRXXXMr&RPD(@xr8vQa@o;xMzIgEq%=Zs3-aS74tH1cmzxctAzIZxE z`$Q15V+Tf&7k&Hs%PH|P@qztxSQy6cY|d^;QdDMj^jSoxmSthvwx}xdn*9XK5-|u? z3=T}%Og$9<0)o#L$DJmUXP!f=Tc=uslSNH0gbPLnXPCXQf9B%MZN-jCWGL(p%YG)ES z|5RKwuIV=(%I<|&YTgN8UC*%@lHK7R&Ex34bPM0#Kn;NF@x$nMj+gZTr=uFuIJFY* zlu~ESV{jKb98lLM?QM3(VWgq<5IQJX+w=IO{;8dM)hBCJ>fLYlUIx(yq$g%Nves3E z!Z(_iRQ=EPitR?^W-#07w{RYxD-NJOK3+ZSn+NZY8QyAl%SNEY8}3O1y|h1a_q`(J z+5g%Noi)~H4>h$lDjnBJpOpA-*wq-fUTofv&hCMAJ}FuVgm%`4N82ynf}9$zTg&P8 z{WzY95z>rn4+EWf3}gDob?DkO?vC-}!#~IStb^k%du>so#!Oa0mqu|gu401d_uRs@ z_RoDM?kltZw>z?a+mwU8;=lRe#DB#O06-}%x1q(nfC@Rgy;?|pqc2vvJfwz ziD?E;ZnMY?NoGe*v(i+1d<(fI0~-#BH-x(jBMHJLHy+kR&edj;2OSke9xYi=*qlNT z!xGgz0TU|>06P?@`V=ve0{{whRM|0C*Z%u)@QJ9~=+OY;C%ne>+!G$-JbDd{zXloa zmyN|GwFih%knV2{ayMn;tw!LY%?D+X@JwT`TJ0l9U{Z4C#Q{#Uh(JP0kAkF`Bu$59 zo+d0aB@rTDHqRUKMo^z-dGV57yu|SYZgf^Nhnv|XGZF0ww3%=ccY*){>RP<9HXTgn zimiyS6~nfASy3{RFtZ_wa0@A$nU_K`wQh$|O2R(G8bqyO7iugP+Z^o|4)prfC`KKQ z)HcFqAmtSBN97@hI0S%Tt4U>-*C&x%MY4Wou>e6!t&wxr=&Wcds_;%TuSutt7Yy6n)&`hagoUf3aK~8NNfgIW{ipNIa@xOlK#oQ~;j626ScbJ& z!OTREQYvr?SDer&wp2;ne&eh6G3{+ixB3PbGcz}4 zDdru=SC67ABN9ir0chm{>|Tu`vC|OE^*iauUpMR{wlW?={Zpge=tn?*2eqVNcggx+ zbikO#QGWInVlR+hRFr*mVV6<-L z%zU|Af`%!rJ$iE$G=fb4t`_Cz)x6W5nU3oSY94~a<_6bKRh#={sQMBZe4E|%8a7&Z zCVdwAfzk_f!thgrbTK4mLKxcJr)essgyY&h-f^Y%1arS;_h8+<$CcFdJ$;0pn}^e# z%x=L@Pxj{63@Q`-!Q-FW`UVH9pn0~Hm(aO@@qS6ESgjwbTdxUF$h1%8Zd)88;;5Rl z0D^ymJ{=7-Q`Mpx^#@vebG2ZEG0$_7w9NCEsj?=S*f*38U8K+m7UMRL9)0~jsfA9~ ze%UYHmpu=fW7-7tM&l{W)<_AVMHm~=%qAAgo6o|KDK?}xRo0qLZPG_kY`{rsxp=nP z%=IVwJmc$MqcQ3OKw8Q9@MLsnc;S37OOCtcaCbVA;`KQiE?J(WuzbXOXG)Mlb_OB+1DUL1Q#Fi^`K{k=}S@qM4iOpi_;( zyz#N?4(To90d%Uf`{6WCle~NPE~WJ1<%5|$JzehZP7V|+EK}JElUdemI!$ss%;)Q6 zV!tjulp+Rcn6*ju33n0ISPKTGT*_tL(s52{qAL-YUCnC)E{~M^tsi{N z+p2lSl%|w2M{B02!|M0YS8e<e_$3=gzqzmeC@uiV+=N&`nseUrw&oxloleK& zaaq@VJTBL3P6^XAm#w^d^=g?Hb0sh{e*WQ?ikXsM^ZBxU`0(`jkN@b8w^cQfaUy`! zOIBj};e!7Yz<`k7rQ$(936n}V`XCYeGHEU+#>uQNP7yj`VZ~o{H{_y_g z%isGi{>xwaH-A-?{`}AWpWpt?-~8V9|Lnv0EQ}W?~^p0&p5&3XAfArBuPF#v@+x7l*m?Sv=>=t?Qz1K>IHn@xb_Ec)D zUV;+wVcCcc?pD^z^>SV3SL>JW-oJf(ujZ1HI=Cv+xPif3poi0mfxF}B({KLF+jozj zfA-_Y!||_Qzq$M5Q+F>#K?xxr5$-Ys1dx%LkS~H{_Hci9n3AhP)k`_dQ-KsMMU{z! zWuE77JBY*^zXQx(ig}fI7nV|r2fJYsI!tt0c$t6r{qLLGe3(~Kn>d{g5VkF&D4E-~ zRq?LS@3*E^C&Ugz)lG2q;<_x80WyhSuD))rWa~#L-DLGin7{ah+!R z`V;KxpW&+Zq6ccV|I`xB{hq_q?a$Iry?)KMeo`L|8eV-8srhtz+n`BDrPMY@*Bs_mqyMcSQq(br+;t9H@>HKuCJLVs#+JP4MtD=3Z66*D6u zKpogVYrAJ(aWrx>K+FOh*%9Zj?%Z)I$EDi?)V|L9&GZKuKhg0d`) zaEF;2I~XRY#5`fZO$;;9B%rmA0Vk{?=>?NBk(j+e)aQA@b)P<@pIAL;- zfCM%9h=wOdg9`=;hz*SBJyQ7@#kR8=N>M$ZechnO6DJXs()K>5q=v$xE^yL`rIMh{ z;6{{c-KfIC?6iEqejYWm(+a1Vh+1S77pol`*o@(727`gz1F9f)Bo@t?_huuz^&V|k zhl&uqY^DhETOk8PCNq=9<%~~tO;0p*(nG7X7UhT7XtfE39k75i3psmsBVpC}6xV8g z;V8ru3N{>KuW+NO`f%Isdz0m_wRPCfvKz>ch@wu$-JM+O;YIFjWKk>{E-n~U3)62} z{`Qk1sDI<$X(wibiio`IRICwF)naY?``7@myD_RNLMhGe9=!)pBmchf!PKd;W@a=% z1Ko=lpZ#lxrCOM_i=T}Zni(e|Z-PY~@{XlQ19;Ta@crx) zKjQ986y6?rrD4}KY~~HT4uOd9DCT+YjF7mFna#D0GXrF;@3x2lIi)mBo)vIeuURV= z!@=!naaqYZM;%i47=z~+&fDn3cE@J)`ucw(^b4OM!|7gw001BWNklCEfH216MZV$uh&aHF04S551*HChb z)72fq;e5nN-itIbR6}^f1jnHW(D0*=K3doH^_Oo>r_2kRqkBbsYn!H>|;g>5C zi(pQ?5)#}I9nGAH3Xu;i3~x9+5v^+`B6o^2Wk1Z|rD!77Ez7)2DQQ-NU)S}{9`5h% z-+p)$Gv5L2(8w8hF~o2;!sWWkQI=^Io)o#5MW;6m+39{_#ULCGhu5!P_hlU?P7K8u zRO2R{!lkKb7qe_@aTDS5^?EuTm*uh?mb<&VySru1S~himdpaDZWt!(HZ+Q}#=R_0u zd^O{oH(7jUn`wUe@bQNam+P9JHrtAt=?{PS18~YY=e#l09pn&^Wm&Xb%}Oc8*h=M9 zsWSl1THZZ=czpcu^!V=mAQ0lCfNMQ!DFbBdT>7%*2vD`Q)4CPp@Zv|GfBF9LgF89ZWRtlQ#2Fm&R^k)W zLVkBV9#SIr^>WSYIwf&%E{bTn1u(g3cK5`bgp*J%rsn2e%v+$(*)*FLVw)u09sMxf zzk2!h@$r(^<#ePescz}+B+G1WwiQzIT;SE|M3;v!15u=WDdC|{UP+g@4z7RzT$l&bWG{WvHzZ<0y=b*6XE4 z`+-f=y@2PJvKlwUYK`KwP3H zO*h)YJvUxGSE`xbKJ~3KWB1YH9;~^%F>!qt_smV7qdp7$sWE_qv{xYR1^E3v{VT%r z?guV6{rmA)@8i(C9`pd?nY$lX?zJQF!#KbFPWn5UcP{Wao8wArE#vlElGfCVb}85$ zviHV%@Bz^8i)x%%e1!r=1Hv1rf{s5@doi=^UGLgzG#8PODnm;G)LCeKa{DvVkg>*& zGVHSYUtQtP7XKIswMQFk+#r(nJs9$8jd#Dps4#~{QrDs(FxLbx0#8IR*~#2X=s^-0 zC^JQai6Zpqx+Pb4jU&Y^;Ef$lgptFd0foC7Mb{cw5qEZ{fRdTmjop*uu%+Z+_l4zw z>7^_$D81tJ!ud#?2nUgch}A<1TMQGiY+GVZ2qYzXu9qk|6_TVO)d(hwxs7q8#-KkM#IbkqR^ zVn~ezPedGb{rM}dkCaz8}VlWYyMH~W7NK8qb$s7eVOTsim z1j~YXrc^61qpp$WiSF+(O|7muRul6)fyo2+ied;7Fnh$k!XSo-vlxgdBCh08K&)Hd z*6X&G>*cZ)qck(IlRyfXOjW(8=yWo`|H?DEcLo6*hmQwz)BfXL_Ac4g!n}m<&c327|WVE?BKUkjqKW)E*`S2 z0iE<*sU+#%ku~ZlhGWz{c)+1d(F*OA#y#aB&M+XeeoK(-e2A}}=4hEt>u~37e)pN( zFf(q+xqx`;mZv?Y?mx76zrv=mu&pg=Yj+!3x5Zl{N~$77b;p`b!lhJsu6~$uRa3Y* z)PRZdnsP)Tkd0ej!Dx!_2 z2OXqk2XoG570csR^WMX{Np>1tUpBqiWuM&JL%F}1h9x(?ZP=>SRwR}nPS$T}(<)8f zh^*?K)FsqDI89S;mfJ6Gjju3%5t{2Y+AG`RJL^%_1$GMBw|{FtaKW z;v$U%nwsOv#HArfR9&wg42|Ui!-{RX=Y0cWs7XSDx%dV~ob2ZHHv>l9DQfye(q;#p3AIiD*e~3Q;2n{uLC8A(ElaH6GKc7w~5qWxg z0UEl9k2ib>d!Atd7z}|o7B>JgV<&(% zEo@IU^;zx>``yJr%9`{A8m-cOWLN*;2K zPG0=_bUvK!4~N6k`$u=nk?v+NCo^+$W||MvJ=A>1Bp71wYxg9=hOu zun#7}(2l$>a&xa0VMBZ#>%5eLfzae%>C)3prPYIK1Mz5Lf6Y z^ms6JoU21-KH#(NPDxCo5euk^l*a}48y-oiT{JL8sgyWn`Vr|vR*!0MQggiB&v5r_ zI@N5m5tFKMr5$Ae!c$yIL>zk$bT|`H(VEy>>XnUXBoz?ERm8p=uNG8qazjiUj*aKU*+;eyJt-x`W$C zdo(`dZTA~PtDcjchr6=_`jkE8NP;+VUoFj1K81&H_U99+LEh4CZ zqZ_P>+c9%wDf%KDcm1s|>$jm-A7|!-2GT{$K-FX3Hy4KEtZ&l3Dw?an#bzEW5rFK~^r9%2~GtvJPRvSZt{u&JpzIoQo(x0w;`$>u18 z7W2+m5AT(&N+*Z6=WvD&xPu(bkHizpaY}cI#jyZKo{ml@k^|A5 zOb5p#G>If9fr}Z#1v=4`Kmud4M4Uv3SiLYycv0#_t6N9FKJ z27Q6WLl3hCG(9^SqSN*+JiF|(-;4{mUYvGpwEgKhXxp}@gX@Y_Ghz;sOQi`Dym9~| z*TyxrAz|4CE14OR00zXtL;?~g1_`AoTqA*l6H*FggHWa+C&1-!;%I8eQcpM{XF(Fp zNL2TjBik(A=wx~|vN1L_7zN)rwxl~u1=a<(T|OD6{mB5rP0T+NGC zg@jQw&>VzFTGq9w!_JM21);cA#%Kr-C*jZrPZa))IVe&lg&b(o=s?pfb`SWVW;LSN zsDDwzTD<=p2q`KNMRzMgF11l|e74#f0MSUMpUy-yXpD~Lq6HUTm{Jl-EX;`hOGF?B zCFYyssU4T#XwVeb;#O-f*sAOv#MT8s2=kLxw(%-l6P`A}RSZ8~#wl(&A$pB8F ze__ui_Q$cI++^I~U)}O($D)Yn&|#@PNPUey)mLBDc?dVL#g7CqQGsLlI=jtT?gwAH zc&F>4*_`SXccCq_(%PR{NwdouuYLg0@?6qV8AkjBr% z`%q}}sNLPP8x4zx?Q6S3qWx|IC!OaxrY7Fpi+iZi-Fh;h$M{qowo!4b5({YH#*PPN zw*YNS%2z{p@7!U6nMR2c08ZjTtahkdxQwo*UB0D#oSA7SY=m;Ogj??JAzD%i(M`al z`jG8rIz}9V326GTeMQv;){>xHd!p2zpPl}L7jd&O_i^@S464R z^?F_I?>wb1-@JS0_JNTPha&8TRPk@`6pwDQ`}FkL?Z5299ZSudU@$YU>l!P2uzLUi zs}(^2xb_Z>U*4n#_ix8dv$pjhRoU)8TM<`}Qp}1M+lT zZT8bN`6i@AoP;qYo>DR(5eqvgs$=#AjbS@+h=G3P)QMLNRxC9zCE}u*wQMCPnU{Il z%0|1i>vQKdhFZ|XT24T`&6#}@$R!~N-`s#{4ce!8D!#^Lzxmwt`@)-QaP(z~la z{^!5P1*Ndi<2y{Fiw(Gha7IqQH`RNMqdbuFN z9x~=+R+y*L>0pHS@873+;)MB_?j8=``OdF?_T!HY`J<2TL3n)s{`1d2bN9=6h1uQR z>3Ety`|%ge`RFJfxmB^zD58%_4vto{?rx^Q@pv-xZQIs$?V&rh49vJtxsjfR_2xm# z9V6$uEZb6_rfFR-L9(c!@u27oRBmA0Pdq{*Hn(lt=EErtr)61k&IT|Mr}XO8t1rIz z;(EO!h;b~ioh@9>YkB|9u zf4n>eW!6z&7{<+VdnLkyA%2Byy$*ve{gA)_2XRA zAgIp+O5QUfqw~=Hu)*%_erJC`YOrQy-wa=b+sdZ?6<@pj;u}Y%0|s{jjc9-#IuiFe z4FH!0WVz4av(UFAhU0P2s^e*2X~cFjl9K6F*tHYXdH`u@%ODXPW?Dvqb==g za=3W?3Vh}D%;9u*BTxsS$U9K=)vq=)M<^*p1BYOOwASNZeMyRh9uqZeo5>OVlE_1l z5-cnNp~^`kKnOx$M#Wee@fQj(!U2b{OX6CE5d&*9B}@V$6+&WmgCvN+**Osac9z9? zapOPeZSIB1b9{vx|_{jV}_QXJyR~o&BiW z!*)Bt1FGGe(STh5%;c`!WsRPti1resH5O(jCJ{pP+it6l`vlhS*jIJjXY0B=wChC>^FNk-ZqSU=tYhn zi66Q%pkwkl+#w>WC3QZ`4)7II6Jv|Dz&vCG;+IhZT%X-s2I+PTN!dOlof`k_Sz6{* znQPCqzRoc)f_bm8=weOqTb}Y)T}^aBQnmh#yMr`jPy3hpfF7WUOZG!KrPNr8z426a zjjD^%Sh_JFYsuaHtM}RLK!t0~VJ>rH$a)n?=noaEI=-|UkdzX`w{43dA`xy>T=yCt zSz{%SqDjvtckniwlvZv2zDtgxtu!7A#rh=jZT|ZioQ;O4_5tkk7~_M6m8|LlqIc%ss}C%HQ%A@`J0%u6vvV+^QUDaEN01&An@8ny)9JpiNi#<(p5 zi(Fc>Mbk6|5N~EhZAyYxZ#}S)_JN|?#TNNCt&Iov%!>OC@pVRXCk^y(x309HyW=rJ zaMl=y2mx=@feKI*O%^a!os}Ms)RA=eIJtk#^ zz}*+;Np%J-DVf`w_wP*7xs>aiwn;Kk0Yu2$h&d$=_g$lfYeND7@NKLTe2{UJ(fV{x z)3oJHRqyZb+i32kxDl`tQ798rYmYw8ZclMo3reZ+IJ!l%W`@RO2nXw8uc@zaB+)K* z-o8ja{`k|Ur>DGS2pl#oG$n=$Gl(!vQ(|nzIE7kkB!O>&igB-g?P(grTklnqq)Aft@|6?LdMp<=_T`sf_M4#^@{yT& zr?fN&NHu${4<*3hjS=i1;%Lpp%yDj(tY*Gmw)6RNILO`IVOplm<;5%e<-h&Czw;~0 zbo{|I({KOoFMfFc>h1QI|L9Nu`_nf+emqa#O+R{kSW8+sB@{{y^=z(YN(6PJIa#R( z60r*>cbn%Kf=$ceu-xC@&52*Ud^nztm-X_0{pmk_`~GeA{Ez& z@-;waMT@7Oi72HhO5?r75w@83hXYT{J6dbErl zq8toRw+^3qj(6luSvg}l9GN+QhoAl;Vj@<{&T#jlz4*n=Y>qUqb zFY9(S9G%F{aWl$h7CrO2pE~+dT!}m>wr}$ht6Lv8faWuCLycvSr>u_;SiHZ%phRTm z4SFlx+W0MNl88b)q+hU)UiXHBYC3wT-lzv-%-P+|XDy7pb%*C&H{gbbfT6E(H(x#K z@aFW#bw;7j0inAAgRC`H>d!mgdDx{YXg-|OUu&-WQ^arLnqPIY-F>{DK7hUUzmJ}` zFm;q6i)*HoN>wQ#8W8Y0_>~t^%|%1ny~oCpSw-V7kEhJnKFc_6{jYs&`(05(U~%iZ z^yT!dq^`Y>iAYPaQpD`Y@-R)ud0MSpVFi@oSv|uPv?j`?>e$?~xe;eruAS(-xKqe2 zGdZ~nZSG2p&;sN*oLd>jQK<-WEIZ||PUI998%x`is za?^`5YEStBGpdwiCSi6gz#YpANe?6sGTn=O4BV5v6#0ndp5;h#AQ2WR*=v<av`zf;>&MS(Mu}>pm=MQ|wOScu1T%0D@P%LiF>zuTlqeL3P=l#hq0AmV6cGTb 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�EkzYyPy8_z5o5ztv6nK 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%0D=B5ANpIp8dn8Zl35qI=w67hldB*`F4BX_YTk; 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

    _J*kyC!nJTv}`Ex_tQb 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
  • j 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

    $3BQXxmOX@! zTCtzn?L-yC+XPDkXdt2EF0Z~m?MhvLX`wgSdry%bqJ-g(s;fGhe(TVW-%U%?OHygb z`<=~3*s!f2p`x{lK&L?Br|>e6%4nSEshYzohj7tX+Ks!;=A>3T?r&mtDHSL`_GX{$ z)_i7}JqfsOx0;I_0@z~23uoAEh=|9Z9c)cA*U|%7wVyLfhZd_(RKd_i-Pg%>v2Z4TCBxuAs|07y?jkRJ;!f5V zKC6lBQ<`1Y$242>whk&f9NdON7i=9B<+0XSSI1Rr?+?ao)IOKufvFYxZI;PCC^1(# znNfOhQ@=s8LVrOiyWY`6VKa|Rc0giUlG5*>}Lm#{>r#p zAg_I9j=L!r&48=!uE5&=QRM)9E1L_u{g_Hw_y;F~)^ou^t6oJKL~d+echc^k>v1yb zc?H$U_#;(cuIgphZS3vnIGXcEGC);FS2FNsMA@`|!<^2@!Wyw-mkH>GQ6>3X)-E%? z3S3~K2gkG7$)lN}SB?8fh{Yb^y?9X}CH@dBc9Z&cEA`<)Y0~xq!~j*o>}mG}FceT9 z7Srj>LJKE>Fw#Qv=NFoDZZuj-ibdKyhIR<~CfY2WSRH#7gb_y9yJ|)n0UJ_Q$m`+n z#?4K$(O-9u@>yr~#trgknj5P;ufxq6buQid`Nx?v3KHsHG{6yQNLdfwVlLoul(NEdnAV!l4+ z%^44fHim$ZHITQvasd8;aeW)%1-F8V!mUv@-j~>8aK|&6bS`S^{O*FJe2kXBRXk3($=Z8fui@@F!y zfcjY0GzmYQF}ZOT)Tg{LW|VbIQ7!E4KhFuTmmF&PL0oSUWMlH5+(rT*;LgX}1EQ|$ z%`d1-5{ji|tBcab_+|3yk45UssXn}HN**%NGB?e9honQVfA#!qo8c}L)m}u60G`%S zeG>zERf#tLEAG@NdjMb>#TuY~ikpq>ce&Wv8Ni(IP(Z=P$;ru&3^Gw|RYD$A6X5T< z^iz5#=|Pq9)~<|28&6}DH%6vJiDKti@vamCv(ya7tBi$N|nI7*a3sdL%; zzAA=#neD8$!0y_VB*1Cc_foQu`_a&>m$&s|LyYfmTf*@7R-=G|7ea4Z7{X6`c`$ZK z^z=vS2mb@l)4|i{onGF`;K>)TvIGu58JA1z#jf;CdBR0E zsMu#{&_m7Bti(~^lYH0R^>A8++Z#9|Mp?+w#NFZIMd)v0#UDbm&UghUUoY%@()C40O1%<(~@)gprME53L5eLw(V z1lulgk5h{eieI#&xU1M~L^)`IXJH(-1=3d;RwhscPxZaSfgS{kNOk$$-0%OsKtYFF z)@TW%ixI6ez1-N%uT+EnX0h4Py-E0NGcX;3Vz#5JyMqG< zAIuWF%;K;igk^z&CJqqP*LUEkFnobb501{)q}bd`9{f>YXWEBet~Uo7NJ+B$gE(eo zvQe?i+=X)KJTu3FFNDXMj5g3WW;Z0D{?$NaTl^CZ3YLhIxA-Plv~d);>R?e^mftG} zeqI5sZ8@5m9W@OZl$^KaKfK#)N_5Jzu>y3Kn)I$!uxh_mbv6M19W7Yu)q6mqC)?-) zaMs6tYrHJ}Sy#?4zoX$0>MNsUEj4kwWBTQ3CBFVbEqJAy?~vv?S;ZyI>8TITsA<{R zCSR}1lw`@yvBFII@WUH9>dr|+gKq`9X{RZOps^p5URBpZ&!smuD3RkHui-?d?x`R& zKVKuSRyoYRZm6~K>#smqs`lAtfA-DAL1>nJbr321ub(zEdIP9qQu2B7yivtVVo-st zdzYS$oDc>-0ETHh`zC1c;Dqnfs)g={fp0(nsbXYt=CIM*ip)j(rlcR#C8>k*X9ZGP z=>G#uL9@OUAOa}j9*GUTAP>!!j=3obqE<5xwNJdEL2f&0;^q9k%~J(BHc0JMINwCT zP>#}E?fCV61|nAa_mc6z&ckaW)eOLiPH*Bna4>c73(Sn5j4E~s?#)T>8TXexalfE; zBCFp;W=IqyWi!B9lveov=mo~+vmL}4vP=e$vZkC3$&f?=u(Z$cCD31ke)KU|zl_kD zd39^pJBwz9xcu^1#*Pead(uvs9tB-ieZi(F%uJ;;NF_ifWH19kgot)$6MpdB?|lC| z-wco_-?C{CynXuU<j$Xq@RBJ*^_h_@7_I&!_||gAw*sc*VF!^mrv|7{NC&D+~F7% z0~kAg0Dwed%0Nxk!lJDZx;5z+r0hkTVD5!sWavGwfDG{Q)%C;2FMs+sAH2Li2#*42 z-e!Ri%moNaw+uvQ%~+QcR_`No0<_f@wav%@Gnn-}@wWSjh_yXdemxV~n1t$T{zBHKzoK zgvh9jFmhOpyxokF1=I*E5CSkGA(G|nvD#`Jrg>iw8zM6shCy@IS4!iTgM&x^q+i8@ z?#*_8;@WBI0h)fZ+MC%t0GjiakHae0f!?9! za5#A1gN4#!{k3WrAp{ECZco6d4acj8#c7r9x-DmiNNegSIEBZQ0%sNR0X5F1K>~Aq zh+u$BfS4o$f?3I9c=AyJkl7c@h)fmh)LK&w#IBE-NTrgI3Hwrj27|`-`fIOr^4pkqnVhE66RX z&hRZ7n=3=JIi2oFH+{||A}WSV$P9jQq+*+(I6>YW%pp{Tf*Sw=hXIg8g*liiAc1>< zq;pD6oJpFAh?%?(R7(I^>GI*}aziEsQ}eOy{$)OSIuR2fSvFM(A&9DBt3NFc0~Hd@ z!YPJM(P_m-?Ra8Rb2?9}NBH80v{y~p4n#@>-1>kWA?fec`p-yI5tyZop z{M+x}zfU!PvtF+Yao$W-*Xwnt^TBh@ZvFrurS$00qt$A4_wHR+8tn$!S2tVV|1Cq3d7SFH0*4WM0&JRxPW@tcpMg3a;2 zvTLf)-g$9xadC0ch2vLScK@fZRf`DB%yo!6ML7!q9H!l!v+=+F z!+$i-=|B93pQMy9MnA$trCBoo5SXjA7K5~-v{;!}7=pb9gVy*$RaH|;o9*iDx4-_E zfBBd1|LuSIcmM9+o}FL(>7V}DlP6CRk*PHK7Be(lt;cVC{jJN(%iG;e&iTtPzcdvJ z(aZ=i=lsbhpQMz2<6GalcX9cDJpYeS(o5jl{%dc2?dxBED}?arrw-*WEp7p*hQ!MP z`p=v7Y8>M^*;7);7h=Mb_g08G>L?Ag^YtZr_0egjzr z0G>X5ipX&sLI}jcK}pv!Q0gT0KiALA);&~_q?CKW>tIRDmH6?&?wHeo& zjQHsJ%VE8W!yuB0fzSY1b82WwZx`G}A%;dQ=#?Z90W2h#rb7_Xj*VR}22k-3x{?&l8!!(t>j_&DsrkY-vKMF-NN1OS!|(2R`?ym7%XUlkZ7BIrb~3yXn>8bOcPB)W5N-~)yTk3p*;%Au$ZEhCCT6<49Nv8Elk43_kH1Wamv>(Sv=>(| z@15O=>(v)8o=qwk>Eo*>X7F2Ye{)T|Ax1GkWF!a(q6&h5hQ**QtMjW!J^0GmQQsT| z!vKJ@+M{PLKK}I4Pk;9D&0dg3MYGy9q6paWMUN-|0NJF>OFGU3ED~sjxa=Ky$Cd)L z*7ERnYP#_0GcgLm(bkal75l(>?}@f#xZ@HX{Z? z4k3gXV&o8L7(yT%hGC3D&iO@nar5#z=gf%AI)*qzyxeZFpkqdigcwQ%gs5at08#=P zhheur5TO~87kUpvO37++6@HcRURI;SL;LOS5$Apd+HbHP1XqTyE_i$Yul(vo-d=ev zE=b#>{`CG`FC>gHq9_<}4VatmYD&BP9&6l4wK52oLJ1p&!Tl`}aR?Ov1gz23H%O+VQ_S#-63M>q*IQD zwOD+)8K-qOJ@4UYD~(6QHlrL74N8FBY=m}<&W6XSYUDZ>kqNuRUVi}Fo?6xRWs9lA zADi2&nklM!%Y)2GqD$@dc{;$DM+g*sAoSBfuS(8P*seI)tKj*DYmcnmIbW^ zIT00(2@oK13}#lEEtI*UXa*dEssf>x*)W&xeN^eRE=XB2s4t@-WfeghbP$98`ok+Z!GWQGnN-n5^mhY06x^iG2$a7qoTx2T+3pB8XsKpQMp;s2DOH(F|R#4!aiFWAcSyv z_c9KgbCxW$CPXD#(roP!u*N^Px3>=-JlJeDH#axaH1+r(R{Az}7@5EP_YQsbgVCDb zXf=Ll>G}4lS5G$p48s7m{Y5|HsEI-Qc9A9M^%73!A@+NHc6R0;aaL(x(0Av~9jx3X zRo!m4jp7O&S+W-rmrtz>17Epjef;CiEk6;w_Ux@mD^^@Jt4bDwTEKz`hCpCmhD{Jd zR5J=Z=agio!-U3)2&Sum7vnhKM5V_Lc@6|ideu4phUkTAnia5AdJ>osFrp!VXkpHn z84^LwxAn{39>@RGw#;e(+!`YJ;}65|?AbH#PLOk^xI|=*yi=t)yIrtK1u`?y0;abM zdXof$qx%ubFbnZ;|L&bX{G)%o+Z}%Llb@+3qY~Dd=Q%*Eq^_tP9IJ%EcB1nwfcJ zp{m3fzyJO3-@m;3(Z?S?e)KqCb#V-Qu*~^p`|WSN`}FF0N=XHrCStYAXCIMKmywMz znh1go1K+vWGJ>cD2tW)3suqWV#v!YKsb-6rK>(RnJP@E{u}IEU#FEF2RTF}NVaNME z(WPxYn<}V&0um8|5fg@Co)f?T3}Px`YB(#&td^6iIBe%KMI2&`hVXJXz1*ib#2Di+ zggC_2YH+&Jz{6^_QdJ+H=z9%dGS7$oVM=K~%~?AXt=2b~na>-vV+Xr`ie}@=$z5Xk zWh%XU3vC79IFRgre-iFB^U>#umV2w4n^Zx(uNA5RDS{yy1`0+N2~mLu{|Gj2hKeBi zTqc_5**U^x<4Vneg%CpsCJLgrFR#BS^Xs@&I1!oRJm(nWFpfY0oGl&#BKR<5Kmc>3 z0)0A@w;~l)_G}Ef3qxkAqE@xUG#wC-L!emZ&*Y>;#DM@612P9-p~#>zjQ$)Jfn5)o zK@#KA0@zqJ=UG)l3`2;`sUQv_0s_p05mHi7IZQk8-uIA+aa@f#&1fQ$J&tespSoJ| zR)VcvLbq+AR;q0Ktaac||IhZRev5mlYkm>da>J98)eBWaV4BFaUp6euI?u}OHc_wl z$d-8<#b7l)bxT*bOIf8@wmY|u?A4Slyn>uG&!Jqci?g(AMr74O}H!{ds6v68+1PoLWIdBlm4g#9_I3mJY3DWMcKW05i zjXDxF)!w6pPv@)5!At-!1VT^)BSuH@L6+VPy=qt_rXGfR6tx{lA_}#fvk71ORP8`a zg$e@z0GU8loOy$22B=2Fp&7QmUpN^clma;q(R(Y^j&4(1(3yYhB8q+i+u~SfSrMtx zn_pFJ{SVqvpHA)poJ)o7vI--T$;fv9;_S!2_YdBD<34Gow2PKU#^+yt@$}JSN$Isa z7n<_(XOFkrE%W&D<;&Z{{^HJE5WT*>-L5y0`1<j6#)t$ZKDBO`Qn@QNMOUfKtueDBBJhccYWvv!-_v=TggE-vi`nx2 zE}4eay7r>w+OXXKF|5ZGR(U&HZzh_|5I~qi2*HEQd7d-@Xi%cnFaqjo2;uI<-SchE z2@x1=6$e5C(LB!tCMp~UtcN#G35;qcLRMoCiHA8MM#5lbfXa+gnPn$0>weqsJN%ko zwu8_P%gNP_QMh06>ZJ%yg$iAdX~z@*STLbx=f9$v@t3MHK+egS^c5GONd+Rh6OUb9 zHy~v@?Mw%Rfx|q{Jj6w75$Q2IqrU-%5A+iUMg;8YMu8}H?{xX@+W41(j&F@9x83cP*F<=f$9$n zmVJ6aM`xSoxftkBl^E70_gEk>BJx6#CIjt0J$J39=6I?(smsJFUzLz?iNN)^K)big zC%a!glR~0YRU`uOL==E`UojF@KonEtC`gyU(q(D-LNl(D`D(-;Z_?!_YRmZ)DR*giRPB7uS>e zadC{)R-63|bdKEONVhouM0)#k4PASsemzx{smQkHY3dF1!U9&gHfDxcW`Z^N()A%I zGP48ge)HSyR%$DN^?LozJMVbM%obbHF*Mw6tSmE;^FFYvWj?yCiityKdYV{Tt1Gu< zsAC90p$t27a4g13LMM-o+`}{jR6tZ1Vu+-uBI2!q>d|8=qE@1qD!l+;07&NE5+WF= zi6MqDG6#Q;kB{_oSz-J_wC6I8)srG~|A3A~w#W3v@%Der?4>_vXJZ2N8#1Fa)j58N3ZNA*mTGexT)?f9tn?@Vh_!?O}*N z{_!7#u=@A^{r~Xv>2p;ntw>LCKTE~^LC)dEkT_6So zBBqKLw_QF)jj1Wsc6?OT3tbr%-N+3wtX3JA0%SB5Q85ExFec1k!Mn^D2CZo7@XX*XXbZD|tX z_tQ?azg*4IF)G?PYPp$h_{yab^WG8^=-Ua_YsrNd#qdU3nE zxsg0G@h}XM4y78izM4mY%iKI70-q|66}4>sQrju2Efkuc)1%&2{ljKAk9Y%}S$8ow zIa9qQg)V6FFG?wK*T)9BZswgxv)N*g%*$>o>A`6he&=Nv)UN{feZiYMB(+yh^KBXd zww(gAB|#1VNaYy~6baRw+=E_^t+g<&Zia#_b)VEtZfL8m>gbS}2@$B)Sd75ThLUWM z!XNVP3bl)xX_=W}rpytSqJHt6@deSE3~m-G=d7qr29S(^&8&3_hUzc*a}bf5S~i5z zFNF$Ng5d6MEm9{U@qvo98yk7882AK*6exr;TN1v?>+exY?^@l-VA@C}qPh$x0RRCg zP~9*vqNO>t;|Nel9L;4Mm~*`p0Em=fo&y&V@sfQkb@8>~nyF`W%?wnKC`tLJn5Y5} zaEJZZOVys@w)|353ne(5WLb~e=l7RtHr0O+5w%Wz*KtzqE2HaZ>imt3zNGwg`3R*YJ+D)uUT~K;*b}5(EybGN(!(5TTM6hl7PpO zMID2+X|!e<`{(Kxvq3Fb!X)g!q^YwLM_IcJe7{+J#hIBfFc328$nc$Sz5Nfq`>ng@ z8`IqY$SRo9<1ZdwKYzN7yuEX0+V55MwFj^55BsaDm%|Xo5cQBU=*9V+l+xAJm4L-z z7{-BPGy}~dbG~zaVL+JzUtHXM=k1SgcOQNH$&KXAo%7YWxqf+NlDC`9?SB7q+8t15 zubKx!z#QoDbZeh|{Jq!T4#Oq_q7`1-FbvZ)X-DiY3-W6asJcGB&WNR!p092WAAkDA z=U+Vk;FB-ZSOL1UQ{%50daEIzWTMExtAQB9?06PHwfX>H*p7pZW1O=zHkB3f;}KHaFOl^p z?v-qOd(!su-#3T*WKHat^WJO1UV*f4?3K@nbRGTX)!qHdFV~hXLsUV8He9mZ9su}0 zVok;XfcXUK+QWOArZBiGfC84Msr8DQQ^HnIUv+--*RzTtpg{~_J&c<$Y=#v99P)v> zB&QkZ=3G_4?S;Y2GZ+lRkU7pN5eG$P=9DrNoKC?Ys}Yl!im9qH5jV=S8JJCnLyRK; zNJ_o}jR449=fT21)uXflIV-b^7MdTKRb$5<;+imPYug_mhg5S{lB~7EX%mK~!<*wM z6^sUe$Po}##2cKc%c%$e6f!S@BDnilYGjDO44utygs4?%bARfwraApSHRYPWF*9Q% z2GkBB@5NYEMZA#H7s1^-10$f)(iJ^!2lHmBKGE9+BdZcZWKNPzkOO#ahvyds%qLS> z4FcP#afJGW2MQJR>HUZ15cfCV_7MO$bo8Q5TXNTF%k7>2roq;2!dvx8%-d_Gd7kIl zvK=IQot{H5P4Jq8xOeUtO&hA7W^u&Ld4(OajIF6?<#)47LVwTg8GFsqd?z#W+zV8F zB@J#ym?H05HlwL`YvG8cvgf|BFEKg_4TiR{ppJIrsO2#$$lH#yf3S7@w2ocd z-h85;`xD(R+ZyCq4Ko)}Y6U#>UNWQC!odR>P_jr@B20RIjz^-tIPz zaNhp-oV>Glv!VY(bzgE8CNzkhQ(9j262 zFfbzmC?QEXP4@Zc57Ru2GW{`x0%G+a@403aq!KQCGWV7u9lVP$4&GUwS40ZFnQ4!bz8p+0%~ zl-J|kH(zr%;`ZsYo7)K#*QzRliU>wvULqw8tuv|_n2L@)v1 zVO-N{4Hf_yH8TLKnVFa>SOnk@tZ)dx%t9S)M?^`oGazeoEl$NpH6luLCZepCG@Drf z^}ZDbn8n;ZsA%iry|>~m>58D+4^0X5$W*g~HD88^rC7Tct)^<)q3HESFNY22X@=PU zFJL}rq&kgYW@Las2)rI+2q;PnY-Y@!g@u%B89{K05ixVH(7x2+WEVE}Y_bAyDMcC- z3=PeQ0-Ee@cl-U}kdlbSxN>5wuSU|+dp!~}bBsd>9An&U*W1lD4pGreH4a0J(OIJ* z1VEgpG|kgIPr*z5$+a{w@G!=4jNGPaArlb+GLfi&fq^;TRpyHlF*gnwJ7pD^RrU5} zx4XH$x!L8E$2f>6GQ}Z~*_`H_^yYTAyWYKg_HuVS^^}X=)?lqI=xo*zF43$89>+Be zIP+iiBGKO5yIZ~RP@Uo4M5Q<1?XH^UY>rm{|9+}LivsE$Y8m5JUP`s)RJ&{s0`{u1 zF2aJ_w$*?x4bY%f=w30#mPbEPS?!wb9ss~ht%IRjiDz5eW?1_(YsX#h+EX{{PnDzX z<=R%0f99q2%wD12+UyXas{7%N`vDPDf`#9?h$wR`U!l@SkX9p??x9NOT*S67&~~cb zr$hb~d8gL5r#&ems(Cxqlek-dUBA(NG86}~=_uW5~=PZ1(`OUS_kbE|4we@f``w2xwqLK!k5Txc}oH{??oK&jy<#Wz12^O3!`XU${o-X-A;i@?tmAD0jO$>(MKM89PSkLe$D#@X^@&324Vps<1ZdP{_ydW_kZ!} z)r*7JV88}SCV+y*#aD5L90IiV5u(=6kfoiOc3al&VX=MncWP!(F!u6}-ahpwqCZ^y z&NdlFMAZZc&f9h&HFIYTyZ0#I;+B<6fCn>RM6_9NR;$rero;aA2lrn}PAR$Atj6K& z>}+?tpQee4kOQKP;}Dq%ah~Sq^I@|ZnbG+n2(TKWWRRTaX+or77(|5v6VYLsMFfdJ z)J&1tLf$=0G&ps*B`>0YeCZiq%A>rr7<4i*=}4 z&fhi+Lwis03<&3WW~A-;`DR>SZqClf6$8%mRD0TrWLa(20HC5igst(KrPk*Plnx=@ zg;u3Z|C>QL#NBjAnjNHz9CMmWB%TuifEpuWh-L<*aW=YRuA&B(i;WLMh-zkP0LD&g z15{i5JQd+e-^gxLs(aVWmR8>4iTpHk(9CPwaqV{BY8!##`E`?Fh)5Ac#I$e$0+puX z-Y2N%kNDE{a4s*(t+w2_?7(%j>Y&LZa0NW*|wvu zxKM%bsNW8NzAd{8;SoW#?VA6S0TE!%v$al?pjpHl8nj1iTZzb?I3y-SQ14=Z=(Sx< z^@+CnwPINsW5vvf_;7Rk%MU)7OjfJmv(G+#>%kjgy;TR%yWzI}?HmF!#Ta+H9RR%f z=9}X%_=0#6T90XuElt~SPOotSDwH{_Cy5D@YvN? z_3rZJg3T*F+5PtW9-1tNv}ReLT8dKE-DwZ%ay;!YV&}L@t*?L8IfP?Rpg+{hx|QN? zLh&tT1+nFr`#aGC27u1y*6Q_A8skC;=`o~x>NKQOC)ly>4#O;U{UgAYD< z@4ff_(2wb8 z;<4?2W)R{?RQAOHJvxnXh#W-Z#ful; z01z>tr4^H^K6&y)MD~Xr7plP$0(I<7!Lo=pZNZ)-+WQd9>7^J3^H{B>)ggTXUZcV>!z(48t&}l=4XhH#LPEJ;oSA z^y>%WBw0jbh=65CbaC(19M8!)GcUdV5Fv!f97Xo~-89eH;Gk+mYzTv0^Atl8^vSP`O`5^>H+ z$`DRtX7-L@A%s{waPPDL2y;ri+x>hv++6SWhdn5o8W0C2CInLv+wZ66S1DO8Gc#2~C_SU8BA5;NYL=o0Ui=TutYAlVY+}}wXOo0xn;OK{d!FqK zHh-ykyjC;H+$9xyfpj8T88PB$5f+cy6(d#7@`+tzX6bmK+T}Q#>1_XW&j()NOEx9k zOe)m;rBz@`YR#F5SOvb!Oa%~8ExRG4(lE64{fEU3YbwYJN3Bj+>PYT|k@^avS`Ez- zW>&vzxpI5_woOpcJVFrh=PJ&B{bzan7$Q~pTcc+xxO=`Xz z7aa><@%7aiqo$(3XrhQ1L#^3S^=w4W*$OvgkzG{*0%j7CEJhRnPz?zYKn)EU06@V9 z*OD0`JAL2KN_j_}err_twZGTn`3#y2nKTYXaO9Qj!XCJN8uC z;Km;U|rg!>IQOwGW9_Rv&7)3Zf^0=iR3l>_1&T0t|w009lbEFdBpkpkvB z+w~8={mt)x`9E^jpm7{I4(sh^nx+>oUZk7`gw+`eCxH3^DI6J#@ zyWc0(vpbi!d4Idxj}|cFYPDL8Q6!6Ew!k3FW_F9l1PmAr0s$MO5Ydz*GYArA#3U9F zeP}8;VX7oE0RV--3=|;DGkpH&*+-v0`QYKB=T{REE2vZ41ptAO*;K)kso?G5i~vjp z&5Hj`;0v!_X?AXA_aBQZ_$oJ|l76j%W%swe>{;Mp)~z&03qa@JRKElW3^UgVoPSlJKsC%ngiJh5)5UsyHpaV~^#FjIji>;6cU&c6HE(NQoHpMM zb&eZ=vZ6V0W=|}>N93d2#fF7)7}eo0&1XM-3A1} z=Ghn~1O*WZNX-Of73ARFvj1`!(ccYXuGUCB;Ip?afwenL%_^rO3bTqJx0uEY>UDPj6w^!LqHnt=Bbi$s+kBe=j<-E zs}&?dRna60W`?a?9T13GGr0z+X~#-P$pg0HcDv_uI2?An-TC?XFbqDAD7gAJL!hQ$ zm>EOxJ26vJ^cn>OFfW^~X_YQY@me$WLBs}1Oa_VomzS64_wEqUiX(!}IVF`wnQjm3 zdx-$kH2s(N{${(~e)7pD_wV2T-uJ$TwqWH=ef1#_In<_RswpSzQVz__fCGnlfABsb zP4zVarmk(7yZ#QR=A0w3ubU~Hot;&CK)6We0&f8_|F7} z6yvxaOtWba(~`+IB}M>Kg^^c)YzQJ5-2(?SzcL3y0Gx|=0^pVnz(B2zLG{`X08}iT zpqi)m*_fXDF$Gj)Q&Dwj)u6lE7MFR?7d*|(^Pap5+>E6Y?>+2nWDtEnx`6v_bVRi^%o+pZ6CZd9f zDP@s7i=JOz{EL6{uYUH^zxkj4$Nwn+r<>{LKY8!n-~9H2*X{?5Xbd?=Vn9{Snjod@ z$BQ|FnkWLQi85g8|I_Pj00>B+Hn5kLm#P#5XGbuZ0dn9#9KB(jpaHRuFhW2C%Oa#Y za50x5psE_yu|8&mC?X@zz6U`YHltl71zd#-$ATwXnTXNo)$;$D1}e;hXQND zveZtB%Bhs$`yv$lqG)s=aNHKu6zG)3RNh!~8m`OSvtD zQ0FXTqWLi6pfLti1fr~Js=%n(7#M*=48#?V;ea`Nj8v0k1V(^>Yz|2aXws}1Fc7AR z5Ro!7MrH`85Ja7ITT0wLqY1!BKt6-iEX_$J<$MDGB3`|2L{wV_Aey9uJP)lk_EAJ)Mk#YZmgHYGxT2;2=D7+p zGq6hZUqr&%3u-K6rMZeUE>4vqbvV8ylNycB|5UjbMIec+047*_K>#cPlq#5c=ea89 zp0M?g_?!G;ip&FO1uNUpXvk)pPuNa}BYGm{-42TC05-_Yd21_x3w+sw?*!o0_t5%S zYL^i=bKIq47&yXBXr>Cnk;)`ebvCX^%gi}S)AfTgvk*!jd0#GO^k(s9=H{%)8wfD4 z_va&X=Jl+q%+a3-5mVtqu$r=F1Bi@@VCG;WV0A(&{n@JuJUv<3Qnk>dI2fwM&+Vr0 z{r|kaDliIA>Tv)xa%lHN@n}G5%d|J`rUmZd+uBL9Pm?9CWWQPlK&ViT#6_pSr zXY@uGl3N_o9f#t%YK5%bSMbim&^P<9JQVBNH#iV^;)&LvV9D^;S-{?u)74f`RRU7Y zW~EYtD!$mWNc>}MLE1HY57>duo|M|(PxBYsHdM5v2K<#C(BtK*el-NbKuZ?}sL`5L zA^_LkGp>L1m~PNcU^9fh3)r5bf1CfcgCS1Q(o?DGM5W(?_HnF5N*W0Q`0=^?E&S z){mY&9mnzY*I)bM@uQplo&uqXq9Mie?ZqaH1BTBYes&i0cYfo|Azkloo~+}YINVcM z0gM1>CVY~sjr*-~*RR)>>H{pR+h6%;BZ69scNW1>- zF3;J^MjX^YSdHVw`5m%srXsMvxm`cFzZ%DRJ~(6ju-_wMAo42gl#*saGa?K`F)$%g z>9bMDU0^_tn24rn+74&qYIT?z@J6?X=EOFW&=g3&BmJ@M-}dWXN4HU&y(3}x3a?`IlWHKgdZ?YX*I)(e zilm^cf+wQ(RaKmd+0&LQ2B6Azf!e*OU8K7cH3Jce$Yc-@H^VR@qOqA}$)17ClC`v# z!%|}iMo1~8K#YVLOjJ}95nI7~7RhKghrQ%%qG1S|)p|9o1|lLB5kgEkxormnQT5}O zMSM8koHJOFAOJ8h$(ExxF-0-WIj7yU8iJ}0fhh*ZN@@wPiijYXfqME6aztPR=d>dE z21;=gaY4Qv`{QP<#CsJNxQ76UgQp0cj#2UW(#qS345p!BQwEvr$5%P&Y}C5`T83%#sJ7fK3b&L!{+sAF6XK@H#e`p{`&p9_Z|(8Zf|d;4t%$+^z1~`wdPFP z4_GtwDWyn-3!HQIewSRQ)Ap`l@07~%@cNwd%NN%d7Z>daxDNCaq^joDDjhX>aC`3y zC0%O{zwK5s^{Nq9Rb*}a#tAdX95dZ)n07*naR1rF~>rC22*Sdni zS2wOO78Txn?Tyv=;q~>bOiY8Jnkk5fpy=ubR2dBs3_}(pVuS2erR`j|i(^-aqY8@Z ziH7z>{TVSc0}%x8(XU-q2X$qYy_mU!z37u;x=s555zo%fn*8{g@+^_ou~*A7b|$x- zci)=zdhKqEPX%;Tz4ECSZZZ+&ocD*_G#%b}<3YH(`TXHSq!sg81zc&B4XUJCv!zU- zi3A+?(K0ivq%bqnERMIi9{9z1yP+rRyTpZ)FM zeDj;{fWXz&m9==#k54yWt{xM@(uRVYFX8)@4|A6E+JpP||Equa=+n>N``OP-ZFhb1 z`16O`VW1?eK%op>6aX^Nl%bx-=sPk?b^$goNY8nG85u^(k5o!r`q01m35(A5t zS%`p$fDC0O1TM`zi||25L?9wxC^t6*N0iK_FngQQ@Qz+(wU4y-^alzXPr2H=-d?w3 z(k|FPdy^=un%3&g_Xnyww%9AcT2lhDG||#>^w3IA7!fnCBY}XyL93jz804Jil!!To z$i!xIfAIUSUKRl{=j?tLg3j|?Maa<6TO#zV1cLXbBLGJ*vCii5ON9^tAZH;!6)`MO zqj^@o>V)-rD@Je5d}dbRt4`6T{Wb(lJh{Miu0V2JmN#xh?JKDhMn{3894!Sq5?TYX&}eNP3`?Br)AlIJ|gO~z71~Z%>yEUws<}uVFeWN z)S;v%dHvUQ|IhB&h-hukdIXF3;cwiQN(3mD2CD1sWd{DiMk7Z=sqVfW&#ymm+S>0M z+}2yQSI^|H5RYGje)i9DvfAzcy_L1&?202L#o_|gmJmn~&`FJe0|VH6_w4L@-~GXN z-hBs2K_*6xkn+uo&p!Pe57V7-l?l_NgesE3)T~w=))yfVAt1#V<9c&(_u|FP)$ZnM zni2yJo3quh*3IVZwR=|#|IaVpyEY5k)xEQe{cfLAI@@lil%{lh@3jZ>VfyT|&j{%( zZ1#B%Y>1ZAL^(wbHXVNR-r4JS106oi(-Shu^9$8!T)n1dh-^j%syK0E%p@8-TrK%i zGcQL`Go_#g$g3w;Hy?lY_!l34{`uo)$qZ>>vb1a)01)xXUZ|>>!Z9jm6|8r=UIp08 z>P@xWfcY%33anSO<*9Y>2HtYR?9 zYKe)|fB<*bH_W(>gA>z*g9oVdJbPXXR1IkySCIhnobwC=Bj75o(0CTrBm(FP00H;= zy&>7dW)Q(B z3;;kxUJwTWDJNlE#Zj}EC?TH5)#drcW*EszXOadRS*dbW@Jf6HL_DOK+=7vb2pEb; z${7h2;AXemO>;mB>DyM*%qKFZZ2!pS*j6~`K| z1`jpl2)$o^;^tD0p*(o-Qm(qKp*g56Rvqw+$A4jwPCsoyI<#WzK zQNhF(fb~QVtARHJ>{kF0i7@B<^5sjPNZ$TL#DYXIMzeI74u?aC(XSe6tIGe6vNvmz zBuUQ1^e}gih>Xn2tfQxIPWQ}o&jAcTV!>T37T8@8f_z-z3q>dt3i+$Je_%!Uun&CU z@jz0rLO>w01KC{y1ZEaJJ<~^ZS07bbl}B9eW~#~uH8Z!!>RC2JW~#HYB0Sv9)b#jN z_0x9Oyji&K`^93>b=~vl&wVMpJ`@V6mT#{6GEydS`;^tb?@vxnsOxTSuIuLFTnn5h zCf^B=TJ2ip*;G@CpM3Q3SI@rcyZ++r>_7SG@18795Wo-wzCi~%3&G>Zk3WC>*=Dox z5!+xk&E)1*AGR{Iw$5ZNw5%i7Q%T+vQ9T~*(QDOL-Bv#4#Avm27TP8S?#sf>NNz2R zB32^0dJ$$8sORN~MzAg{HlUapv|C(tavPYr5SdvB;c%F!aX~BaF&m3x%jG9Jr9@_3 zNcYdrmx~T>4g?Ay*{M;_Fp!EUA~RCp#bTJmY?P#iriNPUd+u1Pc^Lr+zz`5PSAVNP zCIrVKH7Y{lB%=tWIL-=sIM+A$WoyYuTR308*Ciw+xp(j0`T4muuFiJ5T`U%^TM%(S zjRDDhVb2QecDwa@4P`Q$U(E}|{Q5POQkU9)?{|_?a_-Z;yOkx zrCW%|X7TeczWC~Y{o>K12S54APp+=6L~FyJn&LD~BDPws+*L@X;DK;CasS}=|I;tN z_9q2V2sVf;mh((Wu5V|f; zmp1ht5>oFo&2op7*{!owGqW5gGs=EZDDk~BQG^EKuU68Zq9UqyYUxHX%tt)9uqQZ@&DZ6Fun%3?Krl^^zI4n_C2qaRfA?u6}hrON(Jx ztX8)#uG6>+rhu%=4!WhT?)7iI`uO_lSD!x_yAV#6fqA#vq1e#%yWJiGt?!-QY&W~@ zrsoh4my3RY{`p}uNkU^x8pju}tyd4vaoT-_@{DZ&EpV) zLBTKti=-+<25636m>D7?k^%yUFTcL})hAzm^!UrCS2scgm|I#b!>n^;1*LSNoQ2H( z;~UwANq3NRMD%N90S2hW3wNaAj=*OD$bFH30A4@t1kp^hYHMX6-(hil5$Ew!S<)aQ z5#t!a^ED3C0FY`QI510`0-6~FVg#HHdjL3DugM@D#=~xxN{6ErW^@d_sFDGxbPNPG zgdWYvwCnnm)RIL}Kr$p#+iZ6RfM`TyYDC6n1}117g(%7hfniJ$F{l|J*MQJhyONEz zf3~Tnd3hThRXmk>O}_E0-APfldsJ5&8)qGwSL-)J^RaK-@!#}90N=#GA;JUz#3W`@ zjP+a0EXGVL8B;3L1Cg1b;A=pLMBV^e`a1v+Qn^lbiOll!44-w_7NRn55!CBywr?t^*DEVg4Wak#=wn)WhItL5_kYW3jWMc?%) zr8LEqQr~w;gbbstP(~4WLS5Bz802qlY_SAS$57l#OE&Q6!|?sP4*)y#EeMz>`r<6>&NZsv^o| zZh(0S)3JYv8Kp%LOL21kEHy)>RN9JbfJ$XVVG{r}eMaTaYK|Fmx!kOdnnP4^hk6n# z5?W^>X?f-MkY|{bnGL)TO_0bM&he%M=7=7v9$0`p-m1t(|?}FV`oWnd#;?X(S|>?bC(qj>uF5yv8_G=!45V!>k`-j44h4>4!gj7g7G~|N4uY>jUrr41_2#yC1HNRh1g0 z=jXQt=&5w(Ng2z7hyX}|`@TO}twiMV^78rR^GT+UK6>oXb0*>d^Zej?z5d?!-|0I3 z>Z`9dn@z5oH$=o3<7RvF_SJCbwEnG&u9xhI2mq!jN=ifD6H*7jhOa(+^k4q7e|Gw(|LSM|_TMn_?!^Yo zyqGtFMpIKmr5K~9y_p#`hbXFwn#s^br0@GG5`Nx&$16Nk&l(Yl=wh)rIXOvD5pqhs z#;|oGhzM;yo`^HRN)7(vUsrWhE1cD=kk9xk9#ne_t3{}a&YBpu#dew5!J7IN^-J58 zZx74SmloYs|7_JuU8VY}|LU$nMP8~-CSnsIWK$6FPN&p!$XzojAz+eh7hGh?d3H-g zZkEF>5h3qXb1o6IWbU+Qe83BM5kM3T#S9T7 zJF(0}rcQrEUgNK#1WwwQyh6_X(wGt>8Cams%yK7_(;jjU0A|YABl`R(Bp?F_0nL}j z>H>ft2bI`j7j?T;H3V<2QbtlS1kxPRAtHhMeT7i93Snza+5%N^tC^`2|@PZi)+w5kkORoSXCD^2dMduv6oz69d?rJN?do&{e=*O2WOL9Nzo z1h}q@HO!v%De~#CM5VwkgfLB$KmMKEGdAHK=V9j3ens5^^Qq%an5m_v)n8rLIS^O1 z1oPd_u+tB|&MANzK85(D(mbum~Y15>ZQ$zEHsWaCC zstOSh5$0MNV`c$$7e`BReuq?9lV%}ia-ts}G)$gaDOo{)*_N~dU72nxi%`|1&>YeH zX9f`SQ$TKXgl6gU`iKaiGcL`SsvBbsynSTbawm5NB?*v_Oq9axz;R$H^wlo7eq|A1 zm>;3ti#l_2$?QfBD6ySKDp3 zT--lB-|lxhrIV9Yn&N&M`=Rd^!{zhmF;0PaeX>4Xtth~5l5UD*eXqJi`|ca(3*C*I zFD-7Fk|CL4(s+o^vC}B~^%4jk04~)?EF!6rsVe)dE&#+%5P*Uxj7dLz{Q2i!zWDIt zC!2#P^-egBxsV~uzKCVRQ@xy8WmCnY-SIn4$sGd&$9c2k{hD|4X&M487egQ(_th812pWC#Hgm001$|fEIS1A3`$K&I}V1RfCe`7Y=z@B z%F+68!~YGXxU4Sw-ILY)rljd+FCPKSyz>;QnS@5$+|hOQ7`74VoiDAYxc z_!ciBVq$Pkl_Y)Nrx>epcE8-3HstC|IB<*vHU7sY&OFWro0kk&sp)IwGh1{J0wM$^ zRy9oqh8h!xKn5lW9V7A~8(xwEq^fC(vsMR6mN_)*SNLB!NlM9*kQjmn!zG0Q1A>VP zI=L8=s`@-%MfO}&=T$mpNu=iv0~2CcaEd8$*Y&-Cc7~vEdvl}I^%zdN#l>{wwY%78 z_OW6iId##EF}keQ60KR^0yr2^5d^m~ZO#J#6wK$syy-BO;sEFFR8dC zRJ+v*McOn?0XTGB7cz8GU2v#e-o;mGtKQ5E6`1+{z4PbKpIed;f~a!fsJU>=!`j2) z;6+J9vrT8_zVA~?j&J%Z?RLA}Zs&z9wXhVMzDU3M)oSGssyg>0A^;o?2LX$&fX$pX z^o|+2qjuVm9vX*`nSc1hAHDk4Yy18Fu-U4rks%>5shKoUjo+I_IXOA`@sEGJ-EP17 z^2?i>o2oYJS6e9qtlAZdGv>edxTx#8Z?uf7|VpEgyf9RQ~DEs}WW)epP3k2lznN@3V zcsYPG_-p7gpK%B?6EOhr83E|^A4mW|NGT<-qmZFS*R23x;qQ`yq0gqU#P$Jc9LK}q zfTjGLh%PQJI%3ZaR7}kfW2VB4MAYR1Z4{BsW^;RcyV-2~i?m5;`-$7{_h)BkZ7-@O z8OOtRbMx@g#ZP|xgYE6j&wlpT<6#d8Ltvy_=2OdSTFq9)5=!#*jodM0TBZ+(>y1wt&*$XSPw!Kq-q5H?4^{@sJ+sa@=n!fmFL!K`?)|wQ6*-#LA7M2>Ln|YRNXbV zde{K6?b*L`ptQ_-^?J|hr+J2^qDJ-fX{}~$LOCm*sw-O&DMY1MRb_o%GvnY)?=XUCesc>f#qK;s~2=u_-Rov5uEW&BQ!kXhw{H zXeQYv5+SPT?3sfpfaVa#2eg7W;1{H_3EU8|?}MLu_X>!>`}GY?HJOR~=RS8qBof`- zj_To9Gv>5vFfRuIfNvMAep_JFH4}&k8=@M53Eb6mTw2wveIeus&G`q^#Y}bG0KnPlyBQcN|S<+C2TQc-;S9uTY%VoEB&UiG29W zCGDlCzz+|V9*Xuo?Ln&lRDZ75srH~)XuI>ldcpSN?K5KIbJuI$`AGYodV6)nF#E5? zo`3-=lXby{K79A>*MIus_f7_~c-vcI6V&+p$!GhoFS}`40GL8VT;5xsoSavO* zR8Q9H&3-q=>Fn%GRG&V-R24>gc>n(C$qErRhudeDSFB;h;q{C4dvBgk*N+c}=Q`bL znqo}r^{Hsu?Dt8H_-g3mW+SVmh3=tg&(w(~Cn`Z?A_OBbPz+3q{o(MzN1uK1_2n-= z`ZQTkVg&#-FoVV&F*C@VOD5`_CP!d2psL&jH}fv|2f@7rtHN7`fHheP11NQ%_>%g$ zBLh}qGdd=vu0LmDjrI{-(Kp34-a(I;lM01T8i%3px<1+ugX?9SosgEV?c*BNMj5Ohn9Po`?n` zv>^lo*-gnSR$6JtLMGKRAh#NzJ&aIwDk2yGDuBCvcMI0;Y)!j>_2PG&l9$iv%jX&q zTPO8pHS&$G%J0U^WC#MG3&cdm<20FB-}e9*n`Yh$q+f@`_Uub zrM3`5h!7c2QOb+FBCV;hyPlDd6@&t)5g-8szz%4junN6T0|5XCfJ75B zAu+Rek+LIzL{XB6P+&8dG##dCjN`+Tv#Z_a`DSx7?zYn?&d_6KswuOn0~i1)01~q% zK{WS3P%S7<^yYHl7pvA1S$w@JdUHw zstUESW^o}ZuRHCIg{l9Gt*Za1}_w3Y|@ebzdu z)pEI7t+w0k;c!qVBt;zh9?TB=eF(wtK2DPdc{PTQF-o$&@AIi=ig65qQxbr0uqkyH ztcm}t%A!KHwO+5keD>A9{@K62e0KTv>u;Q&o&f-dFiwZibwhC-tGnpo$1n`ePJVN9 z)5hWTd)w_pL}`3JMqi5uKf#1@6pj97kqG zWG^zX5+j*q>WSTMw_GlLHTL_xB6zd*G(|_rv-P1YT~a6l+7%`uF8KR6j<>hh7Z(?; za|n$Q&!WL=MMo#My;(-!)mAeba@z4_|^;nOu^8c z-No~;t{q!bNQFxd3wY-g9MBleYMZ*Q+a5-3T14v)E~4=;%6e6fe4akX%+6~eWy!)8ynwU9GHqm> zqoAq|9Y%iyobTKkg2+1pUu1F)5L9v)_}OQl{SW{ApTG0=8~^l=|LC`W@>`#L_V~$@ zFGQ3%fJeUwPGa=r$rqo0{yA~B>HGb@>jvMWVHj4c)z@Et{p86LW}K!eP=^KtC;(>m zAHDO=+i$+U-QK=f`{<_g~ME|I;w^hz4LO#r=K2q`{A&km^&g;P!EKA?g((2BFjvhIIjlezzsOZ>UHUgcw`;kaw#IBS7B3W0hSb1 zO;x1RjdHj+yJOazO}zs<%!=PU&HmmqN{`^R_+sHm`35j9SJ; z&2q^eA|jMBpBN)h9&TQrrwWRLlGv0l)sp}YO%gzvoYi%~lk31#)ian8&Vz2-gM^5n zg#jo_KPFQH>u^qyc@=||YKWJ0dWBG(=&Hpri^i`G5IJ#%YO*-XI14gG_Y0N z_1pr0S|TDO0@TovdJ80xSwrYvE(icbAff;`6RDV~8gp0w>I$KCsq2IIOI4|4#;ma- zh%?E0{j+{GH08AI6TxplTB$+w+f}NH5`M#xh9i;}MP$qbbU>u0aWV9d?k)b_@BQxi z`MSpxY+{*umAKnJ`RGF%r(o)5wqFkC_b#q(udklJ@SOSO+^s6T?p7$rK*Do$^Zf>@l+vUkx!Jgf|7#53@vwPe9 zwA*gja5XF*J$SHO3@N2&mzTHu&FNy%OZ@S7Upt}0;n@el_J_ms+w1-5>B+tGv)kL- z?e=hfe!4nYZZ|hkZWl}2k8wc<3=as_%-tkY-v`cvh0u&bck-*pUp{^I;)9PKKYji@ zA(`uLr|KH%y2|h=^k5 zhTOH5sd}J@flV|J*ZRKteC}-%6C%4nBYN@}6~xCRxi$352Idd~s<8nhQ=g~YAR>2# zIEiwrJ9P*?V7y0BMT8Z0sq14}OeviV%SAt|cFPyr+naQlVzeYcGe+sMoss}30rbcN z@}uSHB6O=^b+TA4mWzOBNzh>EyeQ0oyo4mFSyD08F~-Hd-%aB_O$SMv!g6r@z(Y`5Dv8RG5j?Un_RQh^;>%p&TA*FPEeeLgrnzAZ|y~VA|1DC9M9j)*&s8=>xQRZ~n=vsJr*h|E;P#-%IYz;d~) zl_1cRnfPiu%8!^sXe=u0vcPN)ojJlid4WH zb;I5F6e9>tg)fwFH*-N^Akui)-diny|95_{UWH$O^5kYW-Wady$ah^K`jFE+TnID{2OaZram?^kNe#? zjwwbJP?cdAe&?q@{OZdu{`MCi9}ZLW>k!q7(K}{$UcoyQljX%g&Ym7PJbLAo|Ljlx z9F@CA|iT3<7Yoc0f1M(^ZLVw4{vU6 zKKtx32#QEDL&Ve5)3@Gw>+;33Cr>`>xlbwi9#zju;b?%BU*7{m=bb{bl&1ZDYbI`5 zZf|#xL?!JGQ&(sWC-s7L)}`*SOqRj#t9*OXwlS{;j+xh1M*t6q8Lz$q`O%o4@j zE{~9z3bVe18AJ;dm;(p)FM=l8g$hSDVsA|kby@#eb9xtxYStc-`D8OQkgtQEeSa1) zC!0qANO{tubzKKK_eZzOf?Dy`4Q|{9oKh#^RY%QEOF%=omED($meE6*MD~6*0_?9B>;M*|Al% z;!9LrSM|~zVY{Qgs>-d3w|+(SNvv@rTX|^ry*^!iXZyYNyP&{}1(=$dWboKsaSqse z5s{f*v)&GLoc}8y~Hk zzZx_%1BR*!=t9Dx5y*$$J0??Va&0C;k>ef(YDoM&j>aZZ_H)WaUJ`$Nj(_9pTL7bF zvO#7DE*w}`n#&Z-d(T=WTPar!j~ty@$N-@Dom{jVLaiCenq8YD7&A}P$wGE+ukl)$t;JALo_?|lEQN6STrI&~l&B#h&;C!cSgT`n{dSTcbw zELZE$_uK6@P&hq3IUEj~o9%kFX2hEp*BZy*=`{c|t>5o%S^~t=lm0ueyy*BBpMHF^ z-`>CfU^NW87gv4P@!9fbzuS)cLmU^uZmxEq#Dsl6Ji7m2+V54;X0w^%xa?LBPgieV zbSu5I&1Fa%k;Ay#-9NwJE?i&VOw)M(!RewOuAW^n@#2I-h)UO!SWm#*neh;oNbWii zaF-JN@>idH{^j$JKKblw7u5m~7=l+#`lJDm_)DlfLr!4kF|4zTmM1<+JhtW}Z*H?W z4$j~m(kX)?Ge@en{yPV@@5b;`>zU#~^rU)UU z!$f2S(EucocsPs02muTP(GZjXk-(7pjz!HxiP#!M56g?2zU=mxKsC=zQGhRX`{oLZ zw4bVZ&^J`UKuv3to=4qYu&m7pMQJ*Y&CHv`Rn=37 zR&uSisLI8_2T%~R6O2-!=f}DAk4*DHNFr03ZnxVGs1tT+8;0Je7@JpE1P;V%N{EYL z!KKMy;LiI4Bqnpr5y?aaWsK7_P2QWCJby++K<-Qs5g;T}GICFZhzQxhM5TjZ-h=1d z4aBAift+?qMbM0Mo0Xyqr@GVX5uh#o~7$LVhS7( zOh!b&C`rIdN>&|RMNvdshJHOPE|w=3C+qdF==(kppDb2^2+RTz0-%DH^9w_+B2Ow& zWYG@?nXdQy7uyX3ZVvlHO6ou%KyjErz1@Myj$6xpH$_Bbp45rh92qB{_PY=z%Rp&VSrp&$y0wTH@RWLQJdbNg6(0IKzx6T2+l%8y2Ew?z9dua?pwx@S_ zy6bhSR|8F#+?+H$p4sRJ*F)$>j~)$*3DomgDgsUR5dcip$U-I~vuWIKH!=H{kcU}0 zSgEQ$&taVQ)uSM2VroB6Di`)$ zN}eHyg-v3kkYrU!Yh}Q%(AFWgPF+gL35{E4uOgfNp2cDjRm?2LBqBbn!`DsAOtU*K zB_hTcce~vR*Uo_uV|*EjyJJnOQHKjyzNFf)Dg%{TwM|Ng&y<2#S8 zpFLBNx88dDcC&wRb*&=Qb%-!YXaLrqlGPzz(pM<4zAv(F!QUDtITgVW05 zqzMrWY_VLNtWU088Q{xLKRe*`&JW);B33{H@6zyOiD9m!(INvi;>$Q!6URZ5 zECHO~^XjXws@k+0)j-XrX;KAs_U+m=T-q8C5rEjcR#g>q7<=#DSqL2ZF2i*}PKt(h!3PfV& zX%ql7hy5GFjYeRgqK4XWuc~OI$-H~DWYXExMAR72^6{@GtmDLBOD;1`zT=gaQW zUTXtQ2vH@vqEktT$b|K&0(bIc`=cm1eR|HZ+ z>`=eARsM+RkdSC>j{`PQHZ}>ux;R#trnTUwq$Adn*1pb))iP5X z0%R*>V3_+&iog+o5g3uFWU40s2*hO85wWF#^p%Ha|L7n6e&2zqlBEuGVKQF5c=pLh zw%;%PaS%H0&M)q7w%gnN_33&Y`r-MD=c@4F{31=`cDp6OF0fk}wWQ#)`dEzwNT}<- z^Llvw(a#=#_{HWHD7^8V*Cg51_3d)K;Gw^~zPjFTfzUeIO=I8p+?gWmAzn=zgOqMZ z5Lpoa=;4Fc?hm`oCmNrTjY!&u?!lw`;~`yL-SmC;=+Q$FdH&*hu^3L)Ya;`Ozy!=l zquMP|Z_ojl0ts|C8~O0#FTTEf@xd>DEeb{f1Dj>+!^{*35yUfn#F=GTosYu2KFiHh z*(vhEqt-*Jn#F%KYkdwx1XC&OxBviBj#7IC&hJ3TjTTUj5&GZ)??%Szb2~MUHxz3g z{SH~t7?J@}G)v~=n{#S0IK#I=2uOq-1A-xA=z1a~CJh&x0m zR0`QfdVLgkodQS>+dx(0oN6XX5}m3k^kC}!>{R*qvRdX4h`<FN(@KXiSXA`yoWL5D%DQ2tu;H81^ZiF7{{raJAiB5?#e{ zC&?lhKeNmkBqAru$k}*vyPRuN979%B3bkfru6Ui5q|7{Ms)|H2 zwA)lh)B{*U!RlVmrxoV#raFrNB%;jS_07#kAOCtKnAkv^OU0Sf!5nJ$7yyjDy{?ov z<%Ml(b(!G$>Um*2Y?Ou*+an?(0TOc;LdiJh(g1G{tQyG*y@1n4l=#-C@tQ}Z#H=Es zrLYWhth?K7-F4*LF>qAYgbhYn@7!P6DlvoE>3a41zxN+sZ*D(*{P@#PKYiu?gVWVX ziqk>TS2r&v)O47T>CM$rRhh`d#{HP0+}zwQmeXsmy*5b_5CBD_lw#Q(N5GYoOugo# z1n|xtXs8Nqg(U}jWQLH;R9{>^U!5#hs}&NV8bH#Laje%VHA<*rrr?e^0I6pBoF=7& zh)%8}2F8H^bF9LEmc&xS7;X}f1Ng}^1t6l+(^F^=v0)e(3?v~Ess#)T9FQ!N*bo2$ z5(E1G%nX4{6%Cvy%=|5o3tFq3Ta)r{W!sPHG);%Yh)7^PF`Uhuc+`TeQ zk-3A6QQ~17M^i~jQi3=xO-_mMuxCk_qNGWZfTlE#hjCO(wM&cuHIuock6A$qfIG~i3;U72xNJJoj zgaAec<2YVlUpoy#mGnBg1csD&Z6TO*j_Tu?wyY0Js zi`B^=|Ir`*{b}0nc4{D!rWg;qLrQX(qNt{rQk1Lf>%aZ^zyJL6FH^GTpL~6rBVGX*7cwhV8r^wAfsR7363MRg6}pi+_)Fc<Q2<2@USNpoz9k~}A@rf=jsZLBOu?yy zx}MyK2$-sL!~g`u{yzotDmmBXBAMimDX4-KUkuSy=RS#Qq^ch92@n}h1VcndM#Id0 zj3g?Ol$ll3O&9`6a&u3JnBq)itXi=-G6geGFWA7~`F<5qHD*FHG$bSfHUc&Gc7+Md z)XNd1v@LtI1qSStNtWqr4cuK&1I31=je*Vd8=Rj;LaGA6f)85hWofG^5#~ffH5^dj z(fs=Yt!MKAVvz4236o3!V9l@wEE$VR>H<(m8jBDjnbY@$&NaLm7?BU|=2p*_ws#{2 zGX(?%DfJ&m*#%I`fsX^{P^yhGKl_Y_R-0IJIf&5Se~Se}!42z@`gbvsikc{vMJ7bx zOw33`wM)2#uz^tAsRJ}H%E=?d3?J8T;cBU&fTt-X&XrS{krvBH)k@V`33IJE{`HAw zJQ|dkh-pe?E6dnA&z99^$EFM)@6L-;g$cO>Wds+h!ixDDUf-^jKL5upRt`kH3la(# z--WJL?fNeZ`)sOyKy`Pp6fIlR9$ORIOk{w`G93pqYZ9kPCMJg@JmU>mpDdeZCy4c( zX#EvxYKdD(s!GZT4M0snv)P|L+TzO8_q(Lmba!2zs_fvUGh844&ZP)EtLSes%$<}N zi{#bEt0HTnM&;->XSi$;*qo70Ox=uf=eHRmwKJF6`)Mdp=0ef-%21j>{nFhok_A)DHoP0-C82!2V_vR0rg<#p&Cxe&>v? zZ?2!1zF-&?g(wJMN-_y9R_Cje6(S?(E3ZC4MCRV8LvSHjAT5!W2B?+y~Noy0;H%&jtzdnDDwR^OuTOS_Nl5B@VYMZv8Mw~4G)bOG+#cx*hLDhAaV z1uGot4GF0y7V4d3Rp8%fP$Z;id601&#SybS76+MGlOj4NDR=@i1n!tlPEJmiE77>$ z?PQGOIQl%9#bPl{6H-79B&tafjKCOyOiz~m`N;_rfI?LD+`j>;%${I-Dghvw#>2QD z$K^0AhsC1r8NqAThzJl=Ow|I|vSSq+Q$ip!z-$!>3Tl%g!PEYm@onI(}tB@arVMda{DMmv6x63`R-Np`aH49eUFg6>ObKC3F~yOcQHf~3-y`C3xwL|i#%Ti8 zlWs^!7Q^7FRA#m^w6RvC`r<@MoBi(g_I4LXhZRIbP@LS!1>4M$B(LS%ANDCp=sF;9 zd|~LKdF91~#2f-o(?o>ab^B>NOo#luh#c54I8DOLwK%0Zmx$=%f!-7;9vm8%eKfN` zEMOh;>FNX#tqWivo7>$usv3ZK0YK!DWsGTkbyHP z@!Zs-h*|Q8m=QupJ@JCVK!FH#1EzLB1uPL1Lp>c**16RZE`TBe1)iglq`{Yp?6es- zQFp49`MOs1m|*;fVKe{$AOJ~3K~&?ux7Mw?1XSuNL<9^7c{Z-a&vQ4aZAyaULs~QN zFI(aIGZj*K|42(n=O3xRsh9;69qV^(W~Q2wB~>zD?y_fS7E0`ai0&g+4O4roT~6wF z)@RS2onJgytyZlwQ+Fhv_6#d$(~wMwi1NgST#?}=IUxk@JAh0#SxZHTDSu-e$8mIc z$iIOAL3JF*loD}Qx3AttUH_^R?)Xsva2Ut!?)Jlve*ONBe$;)h|GQuO!r=r{T`U&w z|KJA??>~?!u2&}}ioTl^7K_FC`FV^nrpfQQloub-q3=Y4GN=}>b_SuhYx3||tkXR(svaeRl`xh4<{N3MO+`o9`(W8$({+P-vyRvkeHP;b~XpHIn{NDfmfBfmy%{E1O^6BSj zfK46r9f!I7xs`2Sz}f>o`!kw62R97;yYGG%A;rTaBBnM?lVsv=kST$gL{GD;B&pJ+ znNBoxT^BfTKqgKp#T3VJzrWc%e|{6=czZieQA8$nkBeAD428*+Dp*EmP)yYXi^JyM zV~ulO91<&_15{;OWusm5sw?VY;W{q(SR42PR;-|^g(`&D(m2lVxpNH7yFC3D?G`u- zasEa?4&3)$*L5kW6yd9SvO-R-d#Zw>qR$aQ$V4L%fe&^P^^{dLl@%cc$jXp8m?`== z8zd1i&|0(U$hv4ECNoeIB#dc7M4Rc$NK{<;`%}7e?)})=9_7XH+_01=#yn?c07;bC z>-)uLhMA!^Y*?vaV`hZbtW*cUh&e_f^5Lru=9RX%z=XAA(m zdeL7VEU0Q7b(p{I*wSGstE?h)gvR1bJY9hxL^M-ECYnQC5kZ>WjA{$oAF51hsgPAw z=GO13tSMfrG(T^>Y-?Uyty?crb|m{hHDa>Trd+FQ?^tALT!lNw4H3Pvs{M^NrL1+) z{06$NBPeqh8XSy>4DWgi{=t|1G%ajY{+mD`x0({St+Cw?Pldi%T0h4&HVp( zeaqoXP#3Q5hZFhFW>_>&NEZdwKsk?4pA(KZxNd6RjNB|+zNOSuGqY!bu(ZOpYwCSx zPzGJK3fFXoLE9U!<7j6VG6X1akC{T|Ed;deiMFct&S%@xerLJbPqiPc?@_HqUYPrX zGbEHh1pw+ik50SL0FF=|slKz;JlBIEnwYx!)czSP0Z+Ri^?Fd``;MgMr)Ut>cFWqQ zhU3#!FHYnwrPZ9yKBB4sqK{}d14am_jM|Y6f!}%iwV(X(d-v8$&~fNc5(G{A+pA}v zeoBX3Z^{4)27$~FnYV}0OJf1ZF&QRAl@J0^9ruNV7}WsT002q3A09sJUVY_Pmrp;s ze!c|-=E1Os5X^$;;reDej6Fh6oe!hzyWU61d4ihM7NJ{WI34=8Uwgx*F^vMa=))t^ zM94$|iTi=iPFGAF=5%6S6Q&-S0Z@eiIx{wfWCEn4be}x_>Win(fBo_2&#rceM4?aW zlP}E?03ymM*VbWaLYFFgt(k#F&9%E$b$WfLHuwsmPz4evzyiTy*J0Ts|qg}kE#Rf8`?c>|B86zowV=2cnoC2)_ z>-@=lRwe*M)$KHbMgjsx<{+rVbQpJPiryfv&=V~dL+HCYU7Dd~XrT&c?8otDzkP9g zvmFnbf#8bdl4Ggt&9h)hrrXW!)2rtkn3$&+2{ESBdrsAmeNrm3=K>7ia5!uZhcU*e zbJ0ZK_W>!{kzH{8FRIA1r4w(^pY4UZ;Uy+O>X>+WLd+nLRJZ&6E{y<22uLs>pAD;% zZa80_oG;g_(6J}I36e-4=tE}$CWZh+5E!%L-56gcVl^@C!eVtgth!;*^?|}-zxisj z*{8`I-!vouL%@cx51WD!RYhNRrT~~y5-$SkJ5a2HcdTJBtO8Fj0iE^SNy8yiy}-VN>v>WqB&TpF*;>FGy8jL zOvMNR37C?|^Xsd_;jmt>Jqd9~Zd=zvRbz~O->=teRo(CRhr?mHTzW5L-Obii)p%)^ zma?bbcA8Rp`s~@KpM3J>TW^V~GoS8uJ0e>4!?Q2{U&`L~S+XRl6Z1#JIhlE1Rn^_q z^uRO>vkR<-K?`D8&>x^r(%*_?`l4M!50i-%+C`G>E)p^Xh)2J>x*qr5e4G>E?)u;n zo{_g^h9S+mE$iOAC(nuS@W;>HfBwzsVSlyRW}tL+WoEwD%q&`e^qc?5XPFf!DC;Yu<#(Y^QZ_Qyaj&RVFl z(E!14pi)Xws)+3O`)Qh7W*ST*Qfh7do9(Xv0TZDbU?K%O)ru;_$egNyQt}iP8c-`u z&>77i{|=A{(Lk!0X|1cOm`Pn%6}6OkcO^uqtqNuo+IXlZ?pFLT3@#1XP3;q${R&+M zTInBMQg+mg`bZr;|&Uzns=!T~Exse|W@?KlZ9F z6FnV{+a109=*L=NktYTWF7iEbPRFYe(J%hu_ujmD^Z5Aq>8GFm?Ps5@ z%bEOYyWLLH=Fk89&$rv{&CLxcQtGsWVAQnYxmVY$#m|Y;!{gy!{da%#)n{M+_J8_Y zSKG}z%_%Wch6xdY41sK#lGoNxIq$aHKlqow$CUr|AN>#Cy?F})-+uKi8S!v^xb%>p z1i$0!TnrSmQW3y3GcnmmAKVdJU27ncYEG_iDq?D;D*i)t{nH8#5fKej=EMw$V79I& zQC&{U!`sIx^RgUremLycwH6T()wNbJC1e8uLosg$1*^rwc%?K-d)q7@bZ)I%4ag8u zxU4b|WsG=A07LFh!{Cd$Z#k}&>IEV{YK+lTg@zOn!YEprdRr&<1A5`&x-D=rYi8ce zTcSs9UH`q|wZ~G!DQ@zqF{cq-)hmFel*+nxlf)qurPNrNn2_eRZvdcLm{}xFZtdR) zV?#7Es|tWJC$q?G3AS1z@l@z|-^^rQ2jB`8TP*<+h!&@j002Z2Er^)&RLUyV09-k; zpVXEG0pCHdxo%|EzMKwX)FS@dke2YBLRWC_f{&9D;?XM92Sd;ePAv6#*8CH#3qysn z4OIf#d*MevCoZm+@Zxx8RTb$eS5p5vfMKw^fyCS)7)-#Z1mbT;pZ1B#gP#9}-q9P^ z8SgMI68?h+P}-|N!Y7G?)1|sak6jT|3&{T!MLLs*uAuOUW5dHn^ z*Ut-#`o{RgUSu`^Ozd$iF$1EO8tW2&g1tb-17m3n#OLt^Aqp_aoNpHs5jzs!QsT}( z9p|A7N}sLVQ5a?hIQwdGgz%>qjCj*rR6XOc0p7pm9r0aE5da0+7-GL;U_xrhrnO@O z06^^K-+R~rnwYljVW(6Nxv_>0sFJdgU_}28H7xC4JP=N$UeU6USM7qoT z@`L9;`e(oP$;&&Ch3rHKR)K*IhyBBwce~9tF`)qcKmxy1kH{6&6cD-b12dV~oU@sl zG?p1N^Xgz`tX0&2r%4Pb&(A*mc%7#I@9S3&D$lQ<-y+bIGx3%vBN4M9_{bY0=n*3_ zk`|eA0tH69+3sda6OgSX(=7A%0E7|103jo?ScTT3gw)c}4rr40K2CMGA5jfBZC<~- z|C_H~fBE&RzxPATm+o4T$K z%aSwufQZB6{$D%&?vE%yzTMb7nJ9cL&WJrdPuvMb!O2KtuvBXh-mV zC;;;gi7Jo#!|{09Za4Eh&zaDS2>mn{uzBJtxK=YJt!6+yM|zR9bK9nuXlCpSjJgXh z%>1}nPh5xC(AecCwt4*I_>aW(ooqv1&Y)&io1Zs|C?Wz$p(j)y|$=&|mJ5)l&_u}EReh*ql_3K3RQ5d$eXPuj?%)l{w8 zW|}us7BC~+Y&P>WXHM8*@i4ko^;FB_>F{>{aKC?4XgsIqv)SN%H#Z0XYbnQNSya~j zsYu0?z*I!p-43F}>|AeYnhd}b)Tebh)zzi2*6O*3wl7W@6)pu?t@ZeLGBD$?xHuWzR9j&oKoiLeSt zz^Z@_0=l$R@#MGqs5rNbUfLicswvUL3~7Sxbtwf@R|G!pAC3nk2B-5g6EG7EhD6`Q zM$2fLy<^lMyk0XK>F~lK@gWJpwRHBo0}USLgHgI9MCDJMM}BaY|X@ik{+4(oT3iD zW%R0bC@@JW?Y7(R|KcyrDOc0ychBaOQ%ci3C8Te^`uZEyIZr?S@sD@gtyMARwJu+L z@x`-e&z?Vj{_54MFTVKVd*AyW1REU@h^p#(Jk9g01~`B_;~pjSL)vQ0LMoV(Kls)4 z&PhMbVNF8-^Un7sHfpNvEN~*gLHLQztXExik6ig7V}m1oJ_r%8*}ye#eU3*6e_Wq> z)#s?{$HNjg_9PVaR~*Ap=0~J;gjC`n_+TQxLe4qi2#H1j=}gupt78)eW>p0UjSwh% z18-9o2mlOCmWI(2*-KNix1vn|KE}~(Dd$UUsArsP(P!p*rM@ z)n+zKAZ!7=K_-q3a*INQf*xd@*=d{n5NvmwPrmmHo9ztPoD^pM{-?k6{Kd0%U321C zVKZCTBXj=v<%@s$d;k33{po*v_1#;m^0Mz2Z2dU~j&j4^Z z9KQek?{7Anzy0iURjpO0sTH3Bnd#H2D1Vlmv!Q(UvDY`dL~$0F5E%V~c&9@nz0r4+5DikJ~raSP~yi3XbN>}u}GSnGy2r^rOaGeui} z-X~>TaETqGd*h`zR-#>NMUv8n5FR2eq&nI`>#x4QXE#_Ce15uAFCGMP+RN0)%FP1>l9x00bPfSmU^aULNX7%-}f})55tyG=Z=e&i4zeSg7N1zIH;or zi^q>M{zS?6AxguH8SM1aQ3O32*?1pk$IrsLu0%vYacotUnA|0Max<|7(4D}D+FF@o zZy2?~TZ`?`VTx%}l5nPGAW(&~>WDjxZwz6G2Z8WL43VBDU4F*v=LJUnzL}GYzT?d> zs4(uLAKQQS)dt+x%v6nj$}PtEv04SxaabZ!@S!CX?5fZUXbGto;lsEz5n9Khj|X71 z-~P=CEv8acywt_gNpN8>tDzd6hRd$o$-uN9} z)c78IVn2$le69NVKi{@$OBux(fKgLWAMy)^OyWsAx=DD7;k&R;=9 z;13wr@ymiTVIm;2OmLm>*Z;{c|L|8ny}jL;oEY0=TLc2YtD9%n^VXKrb?FKj73b=@^)$X2sxC7us&Sr~% z^>i?`&1P4mE~PH(>i+ApENGBZmRhfOxh(75?d=R16ws788vq&sm>QUo6DIiXvK-K+bzZ;p@m%K?by#MlQZ zhzPZz;Yn42$xy}gRF=2AYx`-63>ssF3zk9cTG{kAj&TKt#BBbl9t10I>Z;%nCJMU;!H7V_Ke!jc9zq(%6 zN5`6OTk zLsbHt^Yrrh2YEZ!ci(|lS(lTjni!C~!hAWHC9D+^RuyMyX;t&=E(eU3XjEt(z<7CM z2>;pT7);d|{D;Rm`nZVbjjPmxyYsogp(rfQ+NiJI$9=G)3^2H`{$>>BQ7s1+9A5;N z{(zaO8Zy;dPp13-d}(H)`ddHx&6E-oy?F8B z_y5K3Sx*AZ)09#YL^4Q7*Vnsg+T@&Hym&!GUaA>>7plE^^X99szWVil`fIA{*rkYQ zOZ1<++v1-vSl%JhKF5lY+M(9}809(Y%Nr`fb)%~CWn*1vZ|ecx_@-UUkAq&M)#JA| zy!<|Et%%?Zm|fD^2_40Fv7*ax0Gl8a>&`ec;nbec8*nDLl@CE>8gozx3Lt;cCOsNt2wU7jQ zna>!3hmm?>RjIc}_}TZf)~8ET>|^Y&b|@d3>m75$dzjrmud2qJ?Xrav5kLO;UY;qza;lEjTj;17srxZXB_$z2o2j00TPUfM%K4jEt;6nR5E@#ogV_ z^;+z-tSY)JWxwCQzJGlC?y;15I+e8)Q*h1@DYXx#HBb~)WE2xJiu*_KY1FC;)EkOJ zPD1I8>L@G=52QCyRyAG$00_>Y>Ii~BFD?dvvp?2j6g3l7)yC7(jXt@RK}sSgmxog1 zcs%yxdb>#?f<_+^YRpM{D5SI>VaLBxDK)+*rAcal5RN0a>~M#M5L+X>1DL4NocTV$ z%6ys=B7%X`bLPggCT<67X)7bKET&-SbCSTkB8U8Hh^S)yTNn_u)uMPo3e-}aRI2Y( zYw+WNY8(-%Q;wP$qM;8^Gcr&BbWq+r3p4Cg=tD##1`*L_qkZg{3-?79fjS>0IVqVL z0z=FHw=%W3GV~7A@o&Q(H8Hc^LZRvfH%#1Waj>5sL~8{cihcZgL}8B|I?RcXODET;l^&fowT)=32rEg{Jq<(Hfq%jt?eZnEkh(GTtpcx71Hp4e8rKF`% z%#4pm)-R}P*s6h=8CF0}002fF_R7$q7M3q0DFnLqp8eQ^uDhiX|HG)75%gRcG@dbl zivtYjNX!9jcVb$3X)nmTKnaPciZFmS&jhp|};+FYz{5K)Bvx;ZhrA(QaQvs@_oYuvNILVY~Ih7sd zwE)(F$bk9n4mP&yrK$} zz-bf>J$nI$$O>wruixBH%z5I?yqV_7bx>yBY^Jhb5P<>2F46}6-h;iIv*R!Efp9mU z1d#EE?=NN?!1ECv{`o%Y^yE5EzN`OtAuvDtW$y74)w(dChypU@2KO<8)s3=xkFC z68K>+RZi>b)lA4-OJO2ru504~Bq0MJPJp$R0$|{oLPS+9rNC_9k8hx2oDhk$=;LAk z`u^S9!(PGM17_w;%9}JTTCeA=?O?mvBE|$QV?a(^aoXv8cYSp@?sZ=n)6KNG-CjN0 z-Q3K@*}nt;03ZNKL_t*BU7D=aMlyjUS`iVLiAh9?RH@!TT>x~RwnPL4bI#79MMjE1 z2t;gaVZhClKb)Rbw1mh8uO1(cTDetno!f$V==+B5>hVAuXFc5)C2TeTe?@9aNx{UF znGw)^V#dK~!_GI~kAuc=Rif4l2H@4K{zGE+xxhF$nqidL>CyX#@OSOIb>lPF3O8pQdS=ro-Xz@bGXt9i6$)@g@MM zOIeoX_V#vjdz(2uzr9-y$Nl}o&9l4k&O>FHH8!^f3{|PMPSdo>ld8gIyPG$m+474I z0(5?&pq@Q@hM=dzaWlCM&QSB~H|WUKusalfxVL z9KQ;%(hWfzF(Ps=#kV!E=FoWl^S)UKAfqsxSGAP~dRhW|^wESQZo@AwBB_x8H{^v7 z8_ljUA>Q3wr#$`AFMgt>{L%mPKY#b?ox(ItbKtO{k)RXpg{JbCs+uTsW;Db^%pSfm zWxg!$N+}tL={azSwem+cfX#OL!Kc5RQu^kbZ;rkATaFn}TOG%=WYj}_%fMTnr$Wg@5w8A^d_@~|FXy?PD6gtXc1 zh!PMbV#C3Y8s`}=o~ z@9rNChr{W3GV`N=2w3Xst&xQ6I|jXt1_s|O9t}HRb~MkPt@&kUF{~%{qATq=_{e{c z$F0fRg>T&IfoiQ_sA{5>6RX-ZO;hG6wG=5up6psz4nw)sd#@rkH$RrV zuSgN9iAq`53K(FWKb-<5?2R2n1l9&lq9Alebs`FCb$_H5`#Wu}XebcT0sytPidO)T zRb-%|>ScO-K5Ij^##*+NkhoUChMcMqdh7k*ct5GwbsKbcX?$3^S);IWaR$2p>!G{B zW(K{gw^`40o=YCeButfS`w@Pj-YY|N5&nd-#oi?by`a)pZ`5EBFN}g366jFlPt@ny zanh6<87Mj#AXqOq1|9nMLtLrX3!Y8SxoHG(xV`t~ZTyKpP85E|hI$pJ|JK{2-am%^ z|M>H`vGGZv)q7qzoZ}*l$DH}xrV#f(erfy@hR~7*hZzw?YN${jKSeDLYMuiQRgY|f zy%IJ&0spQi_%(G7s1Au>2TuNh*UvY6>0I5T%&j_rJEKQa`VC8VZw3{?+vfq!BHQKu z!sCg@gQ3vUu_Geq|MB2N5L<56%vxi3Gop;B4A>2xnq3f+#d-5r5II5M0@Tu`rsk@M zVrXI~ZKR>(iilL3t`FJjZ-&cWf)sI7LO9NC`&~eaI@^FuspVv#Pc85ePS2&tLoEqY zP=AgxK}0IrrRUtzXqJG;GT(l< z@%5jsl_{wzA(?4TxdNgABcTB^;%*Cs#8GR9hEzr7l&|MqPI+C|t8Ej-nW)c#H)st| z07iYfCIPY!jK|h5kE9uZky0DmiV*xAW@uCm(IhX`{_1bOeD!Akmw)r+!~UdBr^^H& zV2A)6aBaX-3_bMqKFe6&EEu%XC&=W(02DekiE}jz02nT1tyO`L2$?|D2)w++d|;YKRfB7&=A{ON)oeYkOOa_U zDW!QcA=8xeG#L~T`w3RihHz_|rm@ED$vVg38aH&j+Ngz|Yy^+<94}GP@d{72jF52f zfPbFXS;;3(NCZ$iSCQ)|2PMtU8Z`p!_-g5-Im~Q5EgAh*XQK;eqdPj#eg#qCDP!V< zNvkk|n2HD`Ry0#Z!YZm}qQb!2wArNm{OacU_3bw03=Ex;k9zW4O&6&T$Nj^4I9WYO zO;h$Ph*?W(L(7r&x;AfB21_|JlOX`2nq?w~3JlQzsz_DIOlByxDgq!7VX0M$swyEe zllzopK*Zv6>Qxl%Sk{Nr{;`}CthVX5kcf79-mj-+du0gIJg3GLV*qF-MJf^H#M_+b ziFYM$Hrv~)tLwbEnl_|XmzAA)8&Sb>%4P;=VsctfkB0|8Whbo$Hl;(RoO7P)w4Jxp zG_f!Nh>B=sA_P!I0Q+!v1yV)iurB3f>a31*ZV++2sX1h(trnQTMEo_;#ZL98KGkb7TVtlYcJ`vv(uSE+W*q8l{h>4CCnKtD$(|oLj}QlG=uX zBM20@zldo3#{S?4=%EazlyCLVP-r}IVU2lwfNA6 zoYUL4Z+5#adDFeGDnLR+BJ~McqUQMt=32_Tw{Ia5PD28lh@=;?MPj2Je-roYeWyY% zwfbuUV&+6uZH0BMl{v)%yl?D6p~dxy8d5@DR?}(eKv6~TvL_1&r4~epBkZN$L^RKH z+m0$|FwgUHJl0Ya&apH_*E5)`Rr@$DcZAwrYh#*nn9O~@h+gcn{zcoX#+qz4n>TO1 zF@<^a;XKbz{LJ`RfHF~1r_z8k8>VE$ABNTq5WHn;h&;CUyNwkN7%oJ548ljt^2Ef% zPDQXf?i#>TY$8IwD6zyg;JP(pvk?e@ny3~n2ues$i!JQcr9?ysDKUW3X#qmSHZ9Fe ziHw=R&~!EKO;l_tXBZeZ1B#x85=9_PNbF}o{ z|Fsm^Y&O5~8^3`u&X`CW@(W_MJB)43&*^nDFONZUPAmjam_SU?sMbo%6Hn0b{G>SZ zwV4-}VO3>BmpYFJpPW0o%zK5{%h3BWf(U?sMrKL|P|AA$2G+fl1r*kGai+7P0C}G7 zp7Xqg`CMmUm;NEBfk{hwn$@x{r<1B)?XIt`uHvh`r?8Z|R;fj6l~SatipsjI$K!r~ zINsmiANI%l$A_}YX*n%xt))t>>rzUsU?^hF0)$9`4?hViLv+JEwN`I_AF)>ebXYlNd4*03 z4OwfQ=9a%-s3HOpsFXYb0M)9@WTtA$h*eGiI8AJTgpLUak}_vPB%an~F;h+?B8fRs z8>#1$F$}=00bx^SY0dzNh_7`@1VFwzs+tl37_p%m8;C5-oDv~|8i;64sY+F?qB3!E zrWRA>l*|OsJy>!@5^lMH7cE-2XVwB9G&tvt25bA&ArBpngWomg^K=-^=ldQ$L+Ba2 z3|k!Xih2llX5vr66o%wPX=L1CXdW5>%NS8`fy^?PjSR~d4u%ck6%SN1;~>pZfaCrn ztcaC~JB&vdm5i@aWEz5vdc1)V_VHF%7h1oiC_5Mx2()ypMJt0=9fMGOFIy1%=-gf`GSFmc1!P#gt4BZ;YlfpUStfQkH8Mm49SCmAK?7$mn~qv z)Z>vD_?;hr_+qD8Pz4m6{~UqE2!H_1 zPyxKJ%FHxxCsjkFl*m-s1NELUZ-~Q`1xm^&BH8T~85#kivoItBsz6{>g%c_vDfmz< zF;&1BnX65}Yn7BIb$8J7(S#}jDY=vfV(~{!ccFy`6ZJ$}gxYhw z52k=v3P?l>28bz|h}3|*pt7Y#0kITW%Ml6lk><@N&AWM;)K;IgSGxs?CGARv5Suac z($VpFJ~?7f_Up;6JvoLy%{+`^^WKhQn5g#f|Ckpd60ypesVX!Kb>2olZU8`u0l@i= ztGZKWXBT1gDtf3t=A4W0O%2pDj0YXE>{U61AT?c49Ze)HY^dR$G?oB^?x!i3VRnTUu0Re_w~ z3UK17XxVNzAH4W*b39g4PtkAYt%`EuB5NsS=9!2~5o_a}!BE^)1)mLtB;KB2gkX%Q z00>AaDQYn})MA8&fW!v2)>1`JrFbX%Zr)yPucMpFREgM7yh(qPrj^%io_Evy?B;g2 zndP*CTW6OECPD8?&L3 zG^Z5tApm%$J>)zLVi;^ru_oG4deUGb+g%5#r;AMTE^**WiYX9>9Bf{w# zt?iSdFjWPzga`)9vfMvBYziuqiPV9mT}6V^%|PPo;_2KM8elnXATzai4!EOwcg&|61P&9Wm%Tx7^oTa<}#NA?+;~0B95YXp9mtI`YFPycy=2w z1^>*$!{h7MuV1`)vAf!i2gKjRPHC^)(U#3huU@^XwSMry2ixuJR~`jBc!3eo6MNnb zhCL#6m;Ooo`6TFlax-vgo|>GSdwG7fWFg}`ZC=PK`JUb0Ys|#e{ z1^zzJY7t57z)d8TBfM($_23{!ui+9iGz2`CstT# z-~5M%{izi6Tt(b)gtF2ZY2(?!AT_2`0PiM-2K)hl`sgbJ5gnEMxYqzsYBkkg{^ehN z`SRt97cV~fC{-KkdB+17yBSf{6A4H3djNH+Zqs@? zayi0!T$feqDzzL>i&4J%;G@l)r|eY{(gRl4rY=-qCaq$_q?EGX?@y=GZnsU-Ja2by zJH1b}nL-6M5H&FL_Fh$8>gjOY@Av!TVR=04Ytd3`sa2}fB2x8qT29C1bXwoMdHC+T zH>cBDYqMYH1sSSh#}d5uy@PU&UyXuIL_S_>JX}vSgKFcx?`Ha}Lx_N|&15$NRU_h% zHADnp5m}bSyXnVa8gc#6VNg?mGkgPJ(=>hb(MQ|u_INygm)_=l*ll-LSG((*TSQuy zGGJtglmLN=Q*Pr%!9Y})GXeraEoa0E5D3Xs+k9pO6-7cPwq|BM(}_aN`5ZAmsj{wX zp0Yy(u5GHc`qNsfdwnS-Q6U2dG^MIBshFxB4yU(o?~limlh4+=GE>Tlh}PBT{;`>% zDWa*OdKl%SWe~$-@jZ1s&etuJ+Y{Aic7dJ6nGL8^hvpB2GtLNIbGo#I?7=YaDA3sW z#xV4wtZFASp@HHi6iCQ(xHO^s%rcF85Ys0Q;_stUAy(MT z)^#Ol#jVZF?ngJE>d|V9YZaQLA3Z8Ex)uMx>!$*v*3bxmK7QCEMicX&w$hE>8=_j7 z699;KT+tmeX7mu3qjeor#n6zbN_7%40oP)LpkB1%9EsXN*l`pdQ3^Q*G++>s7HJ!z zA|fhWkjRb#J?;|&nwohnfSD-}p%JMlBH=*v5NjPG6#%PQL#@rMPj7VJShx|NNeg9% zv~5!gh|-BmbV#iz^c-$tQEkHlJBBMFKCH!K+B5vB<};c=lsOroCN{%r%1wg=0k&_J zG`-fM-80|?gTex6HE<3$i#b864+gkEQDc?d1xjKDMAGgS zJ>$?o9;cNAG+%!}pw^m&oXJfpm?0q~P-{&0{+9-XOm+qf4WaiypdtXUx4-&^6CeU9 zm={%>8532f-~%+8Kl|$4=U;yJ^|x>T;;;Wsk&O~`0s#PUt_C0yLp23bQ7?B>Gj(nc z1PA3BirQt~uon`Y3mF2510f8N1m`gmnn{hP=8Ln%j*RTKftl>GRqdcnS# zNmtQMC#s-xp08$maShv)MMcd3(XQ0b1Tj^qOBF&~%eso~%W08X*Hz6hQx#cF#Sv8l zMiBLpO@yjaHF3tAtM7N4nku4N5EcSjPt5uG;rMKOt+j|5=0u4}l!&)^-sR0UZH};9 zO}o3@-SxZyv6PY(aoTABKqFntYI>CN&D%G}b$RpfaH#82OG-|u48$ik*rd6r0Gn>E zZ+M$35@Iz41~W@UhSM(Viygk%-mg;kr{hv9PZLyUhV5y2Z(0O&tPKDtJCsR?m=G1! z{Ny150+1JxwgQT9q}+B#zPh=&rcppD)zn(gGJvW2bUPxbYbh?D&|SlDk()CbvTdN) zvUG;vj*T~ccYtZ20vPx@t;f;W~_Q~oT(xZh-Tt#&I{_YuJL*71q;DZJ8C2% z@}g|*CB`O7$XeaGg^0oY6eA#DYntmwC6%%e5lBVEvaC{ytYTtftppVa&AleX0MJnY z02s0KP#+Bts9NQ8;pKNM;G#4GgWMK)JMWk|O_>>)`Qwj2s-`(7Bm@Qn6E#5KDW7kf zQ^b~v08Aose}Dht#fzM#h>;Mv*0q!}jf0nAeDJ)K;;7>2A-l3e0|FFnGrSz^-4;R;}h?sNEdG%Ft{FmrlAksZ;G61DBeZgj$ zTb{rS(R>1)3ugRPj0Yeh#MUF}aAL>V3A)EdM2f1a^PK!5adw6S{Cc9hF`Sszb42Z14hW4# zuoq>4h?oBlg_D;ztY-WD{{Q?B|Nh;(cL`~`y)vnyg_((w6IQF=eD~^4{^U=7?_d1B zp&F?f5Rx~PC(4e*wv+Dq_#A_vsu7`k_yC{+WJX3{I4A*sEc3zN%mjcf*fTH@a%#w- z9xAlDbf#c`_48s;B;jh)wS<<{Peo>fb&KXYkl+j{;RLwfY}$He-i>0RyC|-yb0sg>~Bv8S})r-GXbOMaio?< zH#7HI1G1ssWHXA51E7fDkWnLdK}3T&WkLpI=xxHPYJkgH(^9zl?f3zy1PXohh@U$T z>^y_%HAdHYcYD2ietUO)eZ5|-40yGj&FtB;=eM_aOzeB%#CIvBlqO_KoV+}c&!cHV z-Kj`zsHkf>VqZsBP*SU^iUKoxBRMlSV@@PyDWzHpm`O9DZY~W0rfCva{3#)H=6z-_ zii8GScuZ%`Q?Z=Z$HV^NVShXv-@SW09ZsdR%yG_>s-={rRstbHMFhrDR{$VVGXYg3 zL!fY4)GE?>%-v|(LTsR;iepMU{Qn3^JQibS1W;`dP`u(};Z5OK2{Zr~@jkr4xU0Y) zMd+aJ{gBS@_+50KKRSdzY0$;&Q40*OsjOC#K(I!?H;SwL0Gr68h6^h ztNY3B>^U&)hYKB8Q8%XQd0$5~$fJIRL~W!e08nqH#Lm}A07P7CMWU3_x-Kat6C-9d zF*G0$k)WC-YTTfDX3}U#C;>{T03fAuPVscy2eP$Igf>TLG$L?KwaFkLK zsfjruz&Oe2XTE-piqU2|&05roPD`Y!%;*K=06sT}hSKGpYKBJHruB>;vxn{mna=@6 zmoT$nYz-~jpL|Ry`%kRrqFXNF5F_ zxC=BYbi_u9r)CD{#dLh%KShzE@t_n8z%gGF0|PdoW!2BW{`T`PzW)5nZ@>EbwE|ne z6qqTVgu^O~O%Yr|jl z_an+Snj9PAAJtZy6Mr&DtY>|R39W)k#YBkC`mdJQ2x^tX>2O-tDisxx2t4oVMZyMi zPFFKsZRYE%Et7$Wc^()np^2!dm?0ol(OT4iM9xIiRPHi0ukp-m=baAc?pAPcO~`eRB9=;-jC^?B}3Ii zT=1!o(?4KN-hW~L^OTZi!YXViB4g`Z7!eTxw-?&FDnx{s5D~?EJR)8uMYR{sn3?Fg zZZ4jM`)owlLW#Ng_aXqHD#_Hu#LLH+Y0lH#?)rA#-EMcgY1S$|_W+*j0>rhhZ}$&x z5BoR!$NjplCRHWp+{Ok0R1q~@mSvY`I`4}?3(R58`5Je-%?1Gd=37a)88a=VD1xZg zS{IRgJiNMpyLMbpdfL2O=5r;HKVT6Nm33W>h;!<#g(zTkU6bhD<_dfq77;Wyy51OW zIC0+2o2zZvZ8qC9F%lD*^z=@1$4$-lr{lZR;r0Eycl*bO!@i&y&iCHg^4OcCZ1A$c6I$wmdvTBl(kHW;xXg@zPV%PhxT%lNrO2603ZNK zL_t(P>ZC%}wNP|IjXEa`CA`vZbgN*@(i8m0cd79d)l$4iB(B%&g15uD>S5L-@+2&Oj8)9vl;R>?9$6<|U{GMJ{x ziG4XGfs5+?(Fb_q2>DO;`~A0HfBo_oKDmANtg2LPwWWTCe$UIY93S`AYdt(4DN<8P znfP!xnAtQ<>$HQI*lq=Y@zd zHV1|VqmYfh;Ah;H`V>$iLbdUh&WhI$`ta)V;GuZzvtuF`N#%G$og@*u5%g=TY9iij zHYp`ajA-7`FVHxz{0?(|j~!21B}*xV6VLOUfUmEwr)iou6ZFDle~{7M#i3JeGdJQ0 zXw<{DEtZi{G|Wm{MvsCx3PsPN75@m^H11m5)u`U%hy5q#iDBRYp@ZX`Vy!)I8z*wyaM2c7@|z>-hf?RH8@%$O3M zn`Xf4=mES#0z3_gjg=l4lc2;xh14;#H@709$l3oNR~|0?@Ls^-b!TUq3nGkqJ?*c% z+nfLV4}SOccW?gu|M_bdfabsx(NM7!b?Z+w9ySyZM^WrI2B9Lx=Nh*a5kLO;0xNo4LOXJOW+;ph(f}T>fA;O9W z0dPaC>2ggW+Y}Y1E$g@)LmwVwyOCsgxD8vVRw2o~LwsH|=&jZGf^0 zz&R2z=xi8f)?hTVD5ssK$)%0~84%DET3x;jaVU&R3;+P8X`1IbmaCl|005|Ut!ufz zKWukj+&>&%zj?cy0%E%eEyu@qp$f1VFC9z&LoszArY})P4~FUXqbi7fbg7Hl_P(Fh zEFq$*J&`oMEAY!SjA0O}H58pmc&=`;V|2LbBj}vqVVzYVNY&IW$`11Pt+MlKN z1@V!p(`G(92`%g*Ffs$r#rCp3#}*n}s8=x5TFbJUnPDT}u%3HpoycHL1K5fKN*xN*G)h8?X(W=lz%Lxw3cEp zDt#RJ2+r1hI369pzevMEcb&(*kJAW)*o~fa2%p*cZW&1iR{QvK8{)%JSVvRgZ+d|V z5g|BvkQp)qvH~KUvl$~$0>e6tuPEpkj~`;ES^fzgPvnXL23_`aHCz#xef8>_&0q1a zeE*YO-Ut|zcZQ1@k`jh*2!Ln^=AAj{qo`WuJ77!&cp4JmrEMNxqq=fXr|77@HjAHYFZG>7C z?S(9buQS+yr(sgNH!xx}kH^p$k(mf=cfB*Is#;anTHZbE0kzbcc_skPYycva(594b zuC})udwzSxARuZg=;#=9Q*A^@s<|oGlHLgd6(xoWdx{e0Z|^OV2P|!A5X`x-@JNz+8^p7nUJxX9%OZWO^6_XW~Hb-yk$tY zH&;8JCT8^c(QZSD=A4D$db7LEk2l+$o=%4mUjw4&CdDkV_XDY!Wn#LzGBZzm6m_aKA4~{lwm&>LJQ^ezv4$Y7NiS@f z-}kbd0T@TE^P@pL8?VK1V( zzP{e=c4p?eUcUimoTl60l+Zqg!gr}rb$3C6k|9d~GvKFF*h)gXDSZjTF zcvzO@!w*0F{PWKb`;#ji*E|5NCOy;H=Ls0Jf98S!>Iq5$J-Zfibr!tg5#r$65HiF% z!|>{&h@-=Gz9t$n0cg&tEUPXHm@+0rSV?KSneT4r>s!QRfXt0t8yc}*>l*_w1Q4nB z?;iI1JsNE1-SzHfH}5u?CniKNWLZ}==`?H&uZ&yrXX&NN=b#(AlG@H0U@oO9&}KVd z-E4m0laIdn`t8I0V~~5a3N?{268!%ud$(Rmk|aIMF76R|IhX3Ho|@avaAyea3Ro?n zeb9p-2@nB64+8W%1?WLPKu-h+?F$8PwIawRXE{5U?w;!IsycP*oV-MYo0%TW-NG}g zXW2|N8mG?5jErzMx65Z{pM?^Ou)VGoTv%Rc$XY2SCQ?wNvxA1~#c_a3+ik6sQdF3e zRiN=AkPm(0z^Iw2l~@F37Fk__K2(Whyj%R7^Ei&1&E|YQBVx{Zzu(^8?!l+(we~n7 zV#>p2jE-rA5F58L(lbZT^I60YZD<(iJcD;rBx3i0E6R*8Bt}H!v|13Y2P7oi5A`2g zvHs+?)>1Ot?)Lj-ScKdVYTX`0@Gi@#*k;MM^0$iJ6V#IL%_FNU0R3 zopmmqX4%^T^v93W(H}tQ0>*xuLQWiT47DGd7)QH5kMWIhqT`z3eQB55vxZAv-Cq1P zzBe8u#K~IvHe|k6BVE-X#68DXAYy7q!w;HufUjS_&pdffJ(e*Pm&-#b0*!m89wHUO zH5I{))+w6hxlM$NXYmT$5Zzue_PSJ6k$raJ8cT{+{sdK3Tcd_r|Iwo9pziI}zP0Q{ z_-5D$LNSdd)u=0+>AnIT?af)RKi){#vi%^~r<66}9Tekn7m zP_8$=uF@Qj+*f@=*X!Z`6z^@fT7sorS~C9M-*BAFI7_7zueI0j%3~C$3Yvkfwxq0~ ziy68i!!Che4*+1L)i;2KK~OVOvAl69=+dND7QKqXWffuEZR}26A71w;bR2ZKnkqka zf#93B??mL|$HVKFFYb1mSFi4dfm9X-R0ARaaYx@9vXzKc%>dk=_9JO(#w{dqB(b}* z0OhN;suiZ*KAwDwqBOr^roVJSTn;_kSaRZTaIEHwFA^~En^pc1Jr?3*kKmcjJe_i zFjMyaSSdW_VaUhhBC7A+y_=Q=iRPs^yG9;|+uPfDKAjGNTJ}S_*^T#G$e>^gB9g$6xtI~s08c@%zQ810&MC72bsn1+{rU5% zsG4%lQcBGr5pqtL2C>?5g3MwD$Vf1Z!!QnTq_aXKBe%xH^=8cJ>L0W~Wge=?iu(|jHeA77sChnuuXBQjYF1K1GM zlHy3b&*O-R6cQqI*$C^vL2R!!q&r40LR1#JGv}L5ZCp%$YT9v-)Q#_KLQ+LNFoGue z7erBOuVn`*#>>niLw@DK$K&))d_y!Y!nUhx`lGo!>oQ;0#A<0?h4#Qi)nS^sEKpPg zRHT%$*=$hla5&_gfoXqplT|(iM*F*k7E=W@u-)(8y?b{$pEujB%k$}UTISiEW6!I3 z8e_lPiO5tIPU(C&&hw09ZVPit<8}i8=kr;#tcbG#@EVrHIz%ARn>H6k&YV)(0!&2H zGy&8edAX#Q?Mpm*>t@}At4}QEWoErO@llmffkKhm4(XgxP}@Jb@xJ-}FY|)v39l%5 zPG$gVSgYuLZOq)41gM>8h-h^rF*7?~0TEFfCeyocakl^(DMqh@j^L_lp~?Yct!mZV zeh~nD(#}=TLT!9}d}Hqzt7^^}4MfC~TZ}c0>^Lc<7_h*d|8U{%b~nFbA70%bid|I^ zNfpo{=oRldRaHQRHc1Hpd{&QdaX2=rN@QJ|V+C&9n#5wZ{_8bR574I(imR86rX*+pJ5P!%t?0i~tp|b}*Hh zi*C*AN*Ol!CqMb&zxbd2hq=gq{QKXQd2)7dY-h8V!0_%M zH~}y;_FAYFx}}t2O?|B^PgF`Vu%#^T-@mW$oZ4oyGc)fX^AI|vbbNaL^{;>Z=YRg^ z9_stIm*TvK7uBG>jK!_?ZbPqI`aeOZx}mxg5^L25q1q7?#ut71gL|EEV}A6_Y$*j1 zH{;;_M~H;PYCtLH+dJIdz_>M68V0}@fp9eQl~PWp)AQj;ijL#B-*0!j%{UHYN@HRL z6D`o!tJaTuTR5NnQIJRV{kq7~>;{TA#Z zVl!wsK!0O>5;4x;)xL!H*hJm=!;CM9r}_t6Lp+Mo-3uTrwl!|a|0!iz<_W>Tl!%9% zPGE^?9EY4!DFwI|52>mX`!0(+Xxi#QNmW375VM(qsi?>@&rV?g0K468yWIjfDq2b@ zm=dX1da0<00+JCCqf35qa&Z3$Xq|;72*V$#k>6P$@_;Gh* z{Y9>v9BYgm*bttO!~UHC&8;-h?PSHLu0)zHbMVnF5KG-ZNUVVS%!mk$qJ5q#$$Kb@ zi_bQ9n!3SIaa0kp=QcrFJ(lWY+luUCQ$c=(XcH6>fT~pcTg8Cmq@oe)dx|pc*$SR;m->uvh3IcF|Q)@Afh=(t9K!7N6Sb zcpPpMLRD+R(64h<;EkkcBqF9LreJ6ah=2&C%q=juIMNq;f9Z2;tHp@*tayag6B6zh zHZL|7zgH9WSi0&3P^GWGefaj9$6u#>f46)6>IJd>>Cb=q`m+~A3V;X(s>BGQQEsE^ z)EI73D#yxtZ=Fwb^*Fu$jXjFnuCgH(QTO>g&-1*gO%N>N6O-+9I*;R^2~6g39I$&` zU3~ots_oK1*@#8(SHJ$^?Ze@>zx(>zcaMT>m_167xE}{p4G_tBAl56_Zj5;9b!tTa z)Z7sp_qWtP?}d=JPZOdSr4m3(>jMDTrJVGarM?0eE?{Nr_kz$Vz^vgcv1Re{m5g>g zjJcm62%cIhz$|7TK0a!x^IHL+_*^e0&Z&l_W(jS($v4})OE5B`E!w5v%oNo`%-gBw zsi*>TQc*(e<*KdQntlKPK%a??=B!C;6+lf3J34MqiAQ7XG$KA9KEAxYzuE3S9-fIv zQ~|J72xD~%%Chv*6~+U)f(1kulJAi1RU5RZ8(J}WsFWU;=|9Nbytw}C^tqou_VT~E z%Ckxk3CIj;(=-KLx3yBfs=Jsl#(A3(k*PVR!oKwog z{`d^&dWj5-(98_<`F#BF{PcKyKIpQj0)i?o$}DD4?Q2~^K8#UsQ_NPL&3Lm5iR+LMhF;ZQY5o;LWGhGCJAa!5}7R zYNwt-FaX%?cH=nOsw(a2=}DeG5^?w&4!U_mw14CId?upLKKpFD-TJq`eEIUjhYzRI zY20jTfU0^rowPD7R;WcvIUSFsl+AX#-O}N3D5U^u=H%^}j$&vdL|T@`%o?f98YzY2 z6hk&+p{ffchCn$D2qZ=1If$)70D0@nh=>80uZ2@1^c=Cq}`5ynfl<7Hmnwd9^YL~fb|0Dq5u3?{vN)cj2quS-zsHjy{OqVi2H?1Cw z=DEnUtdegU?X-UL-dFA*Z*NcQW-%e4h$K!%eQkIRR#g?%Dk5T@HmpW=p3d3um%sSg z|MtKBFaP`h@qhm2w_hzYz%V3A{l0|cUwIJ_nJq9PQ1xn<`fIH8ODj?t3uvk$vXt`r z_3P8=G;lhf=U8pmx(R*EtZp`=uU^jCZ1sT=87ktx!l2X*jEZgQY1#Ud82ZN=j)q=S zaS4KW4@ZAw;4(GashS$X1TfK_oe+Q%-QMmHm6;H6F%#spzfHII>E=!;A+qN(nwWx_ z#Zb^?Sx(2})6B*a-weY5$P8w7o&hVt0{}qqGsgP&Kg5QHY^&3BM;wF;gUYKOij0K3{9W(Gnj#hnck^#&#dQ-pNMqY{EN z41;t%;Gv>J3tbhWsx1bf3Zh0x0!SU253zG*03OG5bF(W&=2=e1^XH$xJRVQS8u6u0|GC-}WBOroMN_{*MCfKFOrllWck>r_y*}7b(f*iVm#q)XG`=Oiy%!-l@uShPSh#;?3wCkofbyR=fbTYIefPOEU$6LMJ*fQ^>PCg-q z$b+>~3U*C?@r`k`31}h#|^~6!!7~|sqO7nr5`YW*2^C<5ogjr?pG7DL@`%R%`7?gP`YI1UL=60+JN;@B5?WrdkZS053N@SQ(jJ!UL#7&a-|>)=^mHa- zH6$YKB;2)t02l~Ziwgm~o1Ov5KL9-%<~h1W<*pj6DHWztHXscSkbh2qRZqh z^jo<~2;vH=5P%~&C7Yexw(D$ z;^F<{GEIw!iXuWD1^}4n>HXUiqmIdLHtBZc{Xh&-MEZIn(;~$X*Z@UA6^L1i0yH|? z3OB^PUC0u)y=}`mufFf4Y|WUTt2z%vKJHE4lsji>@yFofrJ{Ac}emGm9%mm=M@kK>dDW|CvMD`4(0XTzge08P@G?!8qtpOVu zFjt%!+QIbk2*6(aZtPX$X2hgw?r;#%QVJs@B6umTSt3S&A?5wBB_MTT5(G0Fhdd6$ zE)RE`?QYy;u3-Q+Tof9_RuzFW{z!FA7|^HR0GNoJrs*upqy-YA0$~ky!9ukIA~Izu zMZuKm@%VfTVNBOZZ9e;{ZM;~ zPwNQQew1d+ddJik-)aK9=66dei3h-14dj;!iy2>PUCBH&L=`^OW>)X^>KxHJRp5fN z!VuIH37u4wnd_rRtwh6IAo38ZKv-1DvJ6H`S**0a*GBZ=!n4`$UfkZFPA6|CB%<4! zTQi#)zsGhM&8$rG$MXaL!!W$KyMOiS)ra>F`~7|#M+6vChTVRe&H))?a|g$9-0gNm zbaT5~mZi*f602${Q_KEVh@_@Vq4Oqth2R!7^pbTYC;mh!rQNt;=D7K*#jkmh)<}z; z3xw?jpQuf3DYppns}~oM6|;3=QpjFZrZf;|Wrd^4M5euy5H}n@V3(MuR=4YnA^>%? z!m4a**IO!OUR|t9rEM+73o{P@UP%mE%-r21fmN9-?hL3)=7Fk3QU#EY?(#1W+_spXeQIHTB4qycFfI8b!{Es zgl2|H*aAQ9d-k#VRtCbHn8{3|HP5;zuE|5!^mmE5djRRMm#V6d6_h$j&Onh6YF85_ zSc5uMAK2!V2i8AJBg+P_s9lzt&ItMO8}sh+h=!OM6Uy2#y7paS3+!XB*Hn{A;`}E+ z{n7vYFaF1W`LF)^H^2Kzi%APMse`dXGsh!9h)~x98*lzpJQl8k001BWNklaYIhZ~g{EU%c3T`0zmu&2eGGob!)f|M2w>UVZuHSBRL>&@eOvaOMi@ zhp_nx3I;%IFpVdKx>}RUr_rCC*lwsDR~Kfb*H^vr>4BB@Hd)VL_i|}qqA@2^0W>ia zBN)bfb4U9d$Q#7L+fA%xH97$|0GOufa6F3YcE8#0clV#&-re79x0}RFi-L*(kQcH$ zpxTLR4_{uDr1d|$K|CDJZ@+!`-S7YK{{6@2&XZR%a?tK#IwQ^&YVL;+e!x4qFSr92F}*^JxWcs@_( z(=>m!oTu~4!~N^0&pv#3c>C?wUw;j!(}A17gh7Oc_Jk7atx})2j!y+4CU)LbFHSw6 z7RR%f%6a(BP6V5J0Zcl8c4g2|(xz;8lTJp+2n4Bhb!Cub|O! zq9}j6tV6UW8PwIELaP)|)o!{sA|hNCPMeu7#mix?PHgk15fwzxeicxBc-CU;UGx z{mJJq?|t$RIZwG75vVD66VQK7m_t$aS`RKwwW@k0iZAF+=m>&b!LT{;*WbYKmrrV1z{`20ow9uV263{%Cyj<{MfT5m7*0 zbg@}o-cNF5UGL&hoG`m5E8 zfB81{0#JYG^0)rFiXnT8-h<}f`G$Y|6`xU60ZE996z0rK3D!CSYD}PRO{~>oFtckm z6%8nXTB0>Z_qq}bYZ}t-Sy}1=-FQR)bgG(%yc>tlcDFyee|ev_+dOVL&+`n3oLj~& z@p(Q!Pp7x<-@kqS_*|x0iZKzP&u%i+xN{&tLNT4@`DWNMu336(wogPv#XV_7%tY=4 z6OkrHCIe-pJPc=@iBVdeF%h;xA~rK75+^7yBf?UOscy&3ZWvx6+0D&7&vPkeN`Q>C z-E4nwd;i(Z{VtC=ikJwPs7UeP+*(-3%xbEt35lsv_EeTwEz>;BWucT5M9r9xiORB+ zhW#U<87?M@hB>LhS(d|eKAz7ElrnRjvA|$PhKYDHj6+HUt9bcS_bKbphtT;<(XaxY zIqPLCL}iteKAA_61_x$_8YotjM??gK({+_WC`qrf#MZIl(p4L)yZEZAO} zuV?C$QU%xgMd%T|cwUV5U?N3GId8VxtrBPk(Qz1-`9IRP%HnTVW@%RHTr$KyBOek*0!Y&Ncp+@e(9tf9$%Z%@z92IAJiuX#8;sj6Y^ zF3Oy?+ifj}L@KtfK<_+61%&_UDvomZatA(iqh|+>3?2sCV zgu1o5(A8!JfGH)A6#xx6_b9u6f1pM2<{s{cuB2|7rt|T{t=XRurJY<6F#r)6h9Oa2 z)fY38Id^0{csmPjHvus<)z@0z9c;?<{QNx6bIzH#(hE2(Ri_*yo(OiJp@2RvWC_fsDhJhU~p}dQ%uzR zY{7t^wy4-ZI4lmRs5{Pgtn|Nia2+3)vgC`E|-liNGg z07$XN$EP=M-oE|z;p5}!@$q~-&vvf*Fy`RJ2V)VSgGihg-j|(m)j4V!V=dy*{FGhk z>JXK%xpB_`prSxbC}OIrMP=;rWHC3-KkgOWy(R7MHr6DzHL!)#>7)&@C8Bv*JYx}p z;U7$#hBPRwhFc}TI}|BF-<)%0U?kwBIDm$T%$c(Rb51D@Q7B=DK}AIE@}{j8vYL2lrNPwEB4c}mJ}V$1l-9XVt1{^tmk|-I zrcuqz@x=c9*0osq2f0(2*r<*AmG7jY#==CzsXE4?K-@9zzepMxMZBktA6$1id}*`b zYd!RWr7M zOMWv~>f5^5W>prdr4+B945_siPsU*gp5{1>ec02Vz5cZVQdot65;GDKT2~05D@nwK zmDRN_6KWE~0-K52@F&P>9kK7u|t>D`*kr?XETg2wP^rUs&D z#B6GSWQGceKvR)&l*8%i&ASi(=HLF^i@UqmuU`J?&wu#h?)LuvmKlo{L8poiW=0Gq*C1wF3WYT{0Br}wjNlUL>b3cm0Ap7a{HYkXI|Nmw zb{*+tfKw%Qxw=UI>VGe)e3?>X;>>JXq^MKqmLk9Z-S3B-yrgCr1`%CKF%?A1%y+xZ ze$2ZeGk{ttYPA-dyetq*4Gjpns4*u~^a&n`Ni5Bas46*iOU){Ge(>eds1n}iQCg)h zVe&*45p`>RCxnYY^=BA(CFvMgYxTE{zvQddt8!bM?tw{90feu%wvlpP+WRC%!e zvwtLeaS5;g7riRT4aUSn9#N#trt#?WE9WdC(wf@L3=nh9OPO4?j^h}U5PA_! zDOrx&-E=ANC8`@@jX{tDXEg}N$Hk%iEzbnPnh=KX7Wagan-S%dm$86QhadcmtAlr0a z=JWY1B1UY4DGv$A>q&_S(3ltybh2rliqD}YP}NDM%*j+Sk<+`7XB7a9Nkx=+DP@|c zx(;oEFcX1_ie~1V(stM|5wRDC*Ygsw7Ib~PP0pbQ!J`sc8dGgJ6=C4QQG?aTqIJkA zqE?>);#)%RapORbKUwoMRJG`8NkinMb+Lt8e08{>d3fPfM@@>VLYt}LpLLKfLQq5m zwSG-R1kC_(p6Ao?sEZXwQk%WUyaC_ZssIQKFK?zwmemGiKZ#X_-4+n;w&UUWG%sfY z%)~{-TECLd@-8B#nwSkytt`vJRIyLQv>(Q$_4nnJJZWcUVp@k0HNpXFRG!dbaL~D1 zHOy$fdrE1y+acn-Ow0)p;OIsZi zAc}y2Sku7F3BVXooU%~cV9DCUWL_n%rR1EED5umnriAw!{ug%DK<)nB@lqmhC6&T9!ks{rE~AdTWA?ct&8We4!I(N0_J0=%nX4w@&sMNSh_r) z*7^q0wGyZ1POTjZi#P=_Mz=>nhE>+T8Vj7y=clKqbxkM@c^GrrZg>0JyPy5+C;$C_ z_uu}@fAxPq9cC{g%R@E;QK5QvE($FPN!5suI)02$XnHx40b1ncuFh_^1AxE%+rPcL zxlPQ!`OR-twZ)sdySe#i|MZuf5Y2o@SGVbis91||6xxUd>oOl<7aXs5uzsFre?#>~ zninz8vxqqV1|mu+5!}J$6qnw)4Y}=~7eF0kXqYmDRF`=fNOrrenJlFk(zw6b+~yxOeVbbm-yq!n7~1uVWOma#nu5-}5&A~3F1hpy@)WfcZRiqMdnb679f z3#WC_tEvK+E@e8N$~41fJEnXB1l6UKWhu<81}bLe?96%GY>;?`<}s|pB8$$`GS6oK zfX!yN+d;-FW>%=+vIrCafKoFQ;pTo-$N{ak^>*wD%xt^g>~@>!b~kRaiX4x})9Li|_yCQ_CFCls26T?l zm3r?j%N3+!ozahj#vNN|f7Y&q8N0kST+YL^%bYs3)MGqy9Numep~lgG+Vxu@g%H9J zd!m)f+5bNb!!k`Fx2o!RE;S-fX+^})GNV2$EpDv$d;$oL%~e&!3bg@%wpmz2WPc>k zi(g`=sQcBkAZx0GUHv9nsIvHo3$5R$n3}HrTe0#d_Gz zK+F#T@*%@$s>tMFBsx7gc6?G@$`O#=mX}gu=@HQZsam6IUA*K+QGL({F{b(nFatvj zY7+3!6)7{If%(|hs)GO>sg0YV0BB4B6^vXTnYrO-FmXS{YRb5se={HHt60w3W^TpFh-jh+0BV4S$j+vWL?(g&&gJAq z_ENNUJ+wpzSi%YfJ82`e02Kf#rqfL~3(-VG08%vvv7z-SLg(gQox{2g?%@#vu$fv* zNwscFz)YSx0boFS`!v0M{PI8i!|(RH@duy3`qArG_qR8%UfylTF()!O5s|eCKWK^o zL~P1n9*iJ>lRZ}C4$aUz_1|OwUN(!3RSkRcO#Ba#rluj8PeBzs)(Zlvx*4 zOr?kbmRY8yj6>Swe0zI;I2@jz<{2oF-EB87cf&s8hQY)Me-JClBN>`VSp<++MFEUB z%_;`U%!`T%0HP5BYJYL0IMtPoG-+s2q8MN0}_L&I4_2Y%bNlau(l>j?~!|c zerD#|+Z(4mE2W?rn77%nngOaJ5`$PBVG@xfwAi>e$<0<_;{Y&#ZZHV3NRQ{nZX&=1 zi&GqPCsG9f1_T4D0`ZU9kH&OiswzvOjLcdD5o&oOn5uaHNJ9HNdXX(K{2pW3T5`Wpo!Sriy~GvMKY*FF{)~41?04x zkEipbO923aOq_^|2oe$kA+bYX!>~x1N?{`?mXMeTiHr~#7g-8G#ssy}oPZ%wwgq19 z?z||~i3v-aKr)PDLO`=(O5&ak8c-<RimB_Bz@7LSAq_5ZgqlF_!N zDJ2q>r4W(hrr}&xrAjEOp1oI7gi6pXrsj3=Sex#35m$kTK!}Wl2HYInl#;eKd8=v& z7?Fs|vK$TvQxZZ3U?5c~;cL3#!p48(?Rf1v)Qm{PFpeGgzlms?rfh=?yyV&=?tL>p~xv*&^FjWu*hdC~M zi5lB;^E}Va0SBVwnJ=kqP9G}8Gf>I%iQw(S``vb*^X5lCc=d~) z{mE~B_w{*R6p3^oCJ&3q%#3SR#oXsZ15iOTO;jNaUo+3KiLPZUKnR2y74c-ZyZtYJ z@lRg8dZns=_`@IO*`yVopH7E&5AQ$w>@yL0eE8r_22mnPh~PA)%d%8QHL-aeuU3am zn-7eLiol7b6oIt`A@C71^ReSjj$BGfNFeK~lGW0omSOU#lc;7O3WzDV4iN#?=@bYE zm7$Ks01`3Mem@eaqTzN=`xm&m#k3)00~7*PsgzZ<_yE9cDdluJoli4i+HQAu`~Cgx z?&fxvGN{g22#bNJmEwk64McTOQCocIaTvALl=u(>tX+)FqS|zx9v&axzJGZCbb5R~ zp3YNQ7BU5-rPZ1cbK?y&TnTM2kWB+vmZc`hYYlhoc9+r^wLFbUEp+5^t{Ydna<1k9&SYx z(NwfdOPLC8P*ojLKqeqG0#1mWqll7O0YEt+!L*#GWk!Sj&34>mVw~sA;dExM1jk^4 zXli9yfEhQN4I<^tW>U(cnh7$2q8Xz*-b9oTO<>U?m=N7aRvn^EnbZbqL=R1LE`^9P zWsKRe==x->BvsW?%)7R8&Wyx~Q%a0>J|7<*-rd}6Plu;@o;k6IR^LWeN~=(1;b6p} z3oGBm5{OWwU^iJPKHkHr*p&@l70F&%{3=}`)7@A1dmY~uzl;m^rSbKjYV5%rLY1rH zFsr*0j>4}XX;78eJ(GWKO+j9($CCiHMB~NWYltE<5#H1vC3u zKJM78+vnbqtJccy+2yBwgl}C0tPj2-40hq_{3EaL-%4*qO7L&0YE&qA2MS$bB}8T* zWlfA5fQJeq0%j73esCXD5MgC%z{Z6yBG|-{x@-UVJ*hO=47jColfq>G8cx=M104U1 zlNlcmQS1LyO7W^*1udoYMTOWh&uzXfHb79I4fk~4t6Cs1zHE>Q<=E{z_2S+wdxP{Y zvu*uWQU&|h)#z8X0ef{ToQ7Zi(?4}KnNnsK zA|hhG7}d&ksGvZI|y{xgGo8$G-b-*0!~# zC8^HXS`oeVn-ENun9u~l62Xx3kZIhF(|iW7vXp5mr_&h#g%R>Fj>Dh**+2W&|N8$a z$7wqbxBKmoVYe9wR4V-nFsE2yXHF3_B+5jKsHgz3$DPCoWtCoLt_2)zyW`wNXH&&1 zeFd~2F(ImHX8<=V_AoL8gCnvfp1MINrICTAH z_3px_dv_%&R#OOY^?u)rmfV9+MdFXW%(O^>OerNT#)PitgGHgLL}qToBEsZ*(yK4@ z2o;ob)~>nIM>a#X5e?bt&XKo-ETv>(1yi%km^pv8zj<|Y^Xl%!i~ZgQpAjLZlnobI z%xsyLT1r_;c|1IQ zI6hA%MwpP;zyMNCi3yPya4HKD8sQ>xJfB+VfPm=neBSO&1kJf?009+&5g}(*g_Kn_ z4;cWKc_Ah>V?ZDG;Y{YBu3i)X6m?ma^E5pj4~2&-L1b%dwrIvfCi+~uvp1~{ZV zG}(~Lj!0E?f$z_Vb#2An5nD@6LO#2F0kbur^&&67`0@GRJQ!NU>3+OW2r9!GyM_@F zZTHsSWIF}xSuhK_gQ|9npy8sVZadV#Ag2y4@y$hqR*mK2kz50S5m7L>rIbL;=R`@z zuNrkg)=DDAal8sWti|^6PA_W+L{%$z3&SultffgB<)yIRVUH0IkvX#CiS4@Xpr$^n zAVQ>7DRmSO9ma9(66o5(ylR{HlQkkB0LVGt+}se+>2v}BN3P8*F;CM}7ENjMmw)jW zdD#8ifA@DPWGcYES!js0hS6<`3XuaWrYee9tYGtee3fD z(NKx!^Vu&V9b?9oA-G!eevd*_LTuvj*56>w2@%n5yC)v<{*G^7=9~L8Yyk){8KBh+ zn^oZeKtyM{Je^KnEPu1V*=;vByWN;F#AII%001BWNklSNj4 z;#9?@sy@O6TVN9xjCBhG0iFJDU$Q#b%&c0}97nDcr2yCMCfXLlDN`^xhr?==p=(3w zcNq~+r;|5$6;n>kL#An7%2H&(g2gn78C}wdh&dy0g{7RCa6`y2&-2sMQ&B-m05Fcj zG0y=zpts89JTFrzWuE6@7<}HEm%f%#ge7cNtOF5oO6H*llNM<;G#GwP|8uA&X^q~! zjj%2-k9!M`2oYU%?DzZKZl6-}`s*;My?FGJMxTJ8aVOYZyIA?}JbLlAP^4EM>BS?= zUzmHl^d5VWb4d#oVIAW~xCiypop0vWr0VK6z#I_)E`Zl7ysK7EU*fY3;HwKL-CU6V z4c0k7@znio$41015Rpe%y@Kk^Q>;e!j25?NW{&EjXZ9`;Droku67P0^K!5t;Hz5Yl zSt|gr_Ithj0TFu&UGx%xm_0yic?1#GNwD9KX7qajqYaPlAiwr~RcJa_NmURrRdeeN z!OgX5%=c!M8UULO3p7yF8jOvq;Qz&F=8#TXUuzk>B2Zg%Pg%p7$#qi#KJR#4M`q8K zR3H)|ZiWmD!G~VO-eU{kBh6lAv>Rj;+EW@ARUb92n{5UL9xD^Bv0Uxa$*C>=#qqvU zDBT`)RhbRc2=^BZ2vJ%cpZ8RTK|(}T3z3r6VG7{bVKrdVm`XnV-g;T+9q1LL=#Oi> zKmH2c!NATnjNfBJnXyA~43ny$v5_gjyQk^>)7Pf@t6%-$?soUnpZxIde)ppvzIt)D z1x!VYLa8DL25kZ(Ld)=)cc6ku;lyeRA^_&4*V8mTK0Xe^a6BGFZ@1fR*N>1qlrlBq zP^n6Fs5CC(&7>%ne)GkfhY!d9^qa5VeEn9;kQo4p34DMi5rKJ_(krIA>A3c5n^|zF z_I^Mw8?n^iDKP7i{I1{hBG>Ox|1JGz;|lT3y{z{C^fe<~&nz?y;_@P3QN-HRg)a`F z?YA37K-F>B78n0e4UTsQ$tiI#6KJiZe_@1usUsdY&=CN+?b{$6m&V01^ zNc!+jeAp;6S5|V>D{rX>p0ulfAtIleZMf#HL@J&YV5?N_umuf(2}D3~lg9nHd9mBS zzJ2le{$?OffF?x@6C$RZfR|;NN_jdwfBoU%{l~{=nHMWQ^}zub*Lx`?CYDk>=dg%b zG60*Us44@xSHjF5$%yHBo<5vU?~lg?ReiRS0TE`+%RDi2_9+1XNVt^cJkQ37QX*zC z^_E*E0z_5>1K04_X3M9Xq4T|l)`44=Ld-)-TGU;(O2tSx%QTni>3ljZ(=wNF*w#J@ zV+VA?Mwpo?dSM_DEh3n*s<#%bVW;nDopP>12vEo6RYxt3zsqoG=F;nki4zmM{SB4U zdv(3x>)q&h@GH-?N8W?f-0p;~*`F(}s+-?D>CTRei z57*49&)|<~25r0;BAS|tAkk*OfAi+e>mUEvyo%YJLBUSv(@GxQ%8`ul`T5z*UcY{= zU=I%u+i??BsNZQj!X&w70L~&8ZP)&O{zM(sg);CDF3VK!$B>W#SIn*#fcWZOTFh)Y zpB$7y#AQDFd2hZem#OGl(~+1MnWAAosu5$;?UNXcJKBU;got5?DCazEHi77QL9Id% zkijslV~dE$wQDRz$XIv6k~C;D~Yi00_Cr)WGqe?EHiVat5|<+41j)xo(?abp_H=QZU6aS{8utB z|MA!Va5_H^wk1mHMW6&yZLWWp)zmvGk`aSdz{tG22yBh>V~#@XzUNN<`mg^Q5gjw4 zREI<@s-?&`-+c4M7hk9drJ)5kUVT>l27HI(AgqFf=x2Et21I;%ddfNP_xt&Dj)UX7 z<4npTaz3AX&*WK}0TML- z837PP2mxRz<@t0xolZ!&+3$8YH~Zagzuk;^L<5^^T?DW(Ee8!?%{RJ|dL2*eH2Mg1BPMQ=Ma zV|qHBr)er8X~>39v@9xOnh_BYn7lZ1o@cFzv+7MTv!7%I7>3QTIqz?8e9<@!o_!pK zp*Cp{CQbm5I4^aoOyAdGcMHC$^;u|I&+ zb=3Kb+Z?1&EU|j=|L_5@GnaAwD|w6iFQw2W2X4GAx=39ahUSq5O8VD%%z~fTXlp~F z`aSB4J+F>Q+?#c75_gUK_1n9xrw)IS-+J3so zA%s`Y0#NA`tWpmFLV$Q{KRyv7g0`kH=5%q97MOgW*MGrOdgj{r=^WtxJl@-a6g)fP zX2u_!h^#}$Re;*wI5bMcjvtwZ`K(6*FXv!7O0r_0v3v-~X(1|^V{2j84(Okn9(~>>exRstL-R=U|={TE-kwP0Nd@j-M;oPH5vh!nWzh^ z5+fLT-tq_+AL}iTtEX+_5UG&x4OWp?x733?b5zNr?6swuM|Zbx*p4DS3>}+yeR@y z+w$5KI*aaAnN?itc`1xGX3mKcISu17ZidXXEK35)#D~M-G%YHH*}j?H>Rk5QVUuw? zro`SCBaGNhJgCkSA_5|(gp^P7(&M1kKi?0SzGnLdGgfrIe2!Kcc~Yw;Kk2eEc{q(#XF++{D(H$N&g{q|FxS3GDk< zFBtun^)d!sQ0FseLO+BUAVw+K_bnHVD;t1FAxauumW?MdeCVrrO4u5&niZ^H8e>nP zISnGhX{Drz{7vt}A!6bLx<*Hvym@(Z`}xh?UEb^{v3J?k10}XtX^%K9%Unv%`EEO$ zwMd;Nv2|+8_^yJ4h?S28Xj#hXc)Z{2ymS;=++I|Q$f8ovCM!ay0E?D7TxM1kNr(xh zva$#uq7s{_KrNhdRvA%EwcSQg4Y(G-yG*(t&w%I?yO0PerEFNqP8d~94N=tQWqv*% z9-g1xe*Ez8{6vWP{Ji*lb|z3zYk5sVMBHpPn_*0x5~l*{{kfbH5NcUN$H=s~7%4&# z;gl#bIyWi+w5o(QUl2TIi)2eP{m7i8H6};JS)~1`F~?tisv>LB(XnF-|N2wV!s&~s zBQ74}cS5tp`{V1dbH}|n&dU-JagjQdQrhen?eas_p88Yp3jLQ3^s!573+U`=SOI8? z1=I+s%**+7V&j6QBFnPezj$$TbK?&+mBr_q7azi71^}}bLHI>mA|Jh3kLkS*>6njc@Cdj(NZ)nOPIX<3#bZww^Y#u_L~ z34Mado(911{TlvN{XI2@n0*WyG##tm7%uDJ8*cDx$Us$nKBTeP%D8??1GO3ufPS!s zR&LCOefTo=7)?7JnJQ<+bsp5rUF0eNe%`gc5OJPo=z=H_NjxCcnh`T|s#YQ@>W7~D zi*xI}B{D>ex#4DpjR&@duOgY)iWC4f10rBvr1TXAe!+1Zx2-C9nkEEh%4SH!4FgT3 zcth1iVmN-rRz(Px*iBzH9{b3=R4X7bbGbWAzg1Whq`js%ij8gu*ySD_Z~AH%p;OiW1>y($bnamUDa z@OV5e%bHT&?RNY9ewuc}kjFeCAQV9(PX)BqOhC*84BXN&)n

    prVgMQxilYZ8^mTfVIumlB37WQnR@o#x!SnLjbESRFI&z2LjC@LdM1OCxnEs z8j`9ad7lU1#I3^_fWkoj6M%?Jpr(Y7b0U}0HDDlSmJo}WXbDPiAO-8oh=>8j)T4I$ z?QR%`0tyLS(wfq7{h9+cpcBr-s;t8D=Q)w%U4uXfKo&zz7l1EP;H1txM^ z3IK_Usq10q$61BDfhs=x8^Qx@dxwZXG|nC#^XQe8*>gqN5T~Z*xaGhGXc%GMsN)Xn zD(sR<>JbeF^k1*G=8)@m=g>Q@>Ci(3SOHlm<|Qtg2SyY~ zi1fW!L+gG6@m$n$7J`04@IL;sW*YgJ^0p7>=U?NYi5$|24|^?H7hD7c6*WWyINEG( z-n_XkFiJrH14%g(;Mv(35p6b`OD7jfDZ6R*aR)?%{uD4>y>@+lbQEgBMBJeBa6Q;X&@4x%ApQn^AJ#qPkFTS|hZ1&q-H5dRrZf2#7 zW1V*BRg=Y(DF-C#+vPkp3`1r_WJ6@mA%e_Itab+U*DN}YBLIL(RA06(mag##5r$PJ zoxc6;KNz)$!;K0l<>QkR^d8=3iLlJ`B!!Sb)zkn9LH53^*gVY%$&#M!@#&j4Uwr0;t0$MS07{kR zX6EKgjL9*S_{u#5&I24lQ{&^nj`w=$weS`EUHnIey2^@eWCT z?n>*t{YB1n7ssz-*AB0`8*MbRUtC=nP-hU=#++DHhrG^dH4Fo%7MfxzMNTdp|Brw1 zA7B2`7v6aDC;#w||9tz-eL})K0HC&sb3GOi5*|8zRHY5pG|hOxXlow2IH-bJZ6$O) zSaQxPf&f>qJVAa#Q9xt_15mZIM`u}Vb@8Hy2rCQ^0ARzAB_)wrwID2}cNT&piE|KmW7;;r;hM_|cDEf9=O_e)id|{r=IcX>)W$NK8rU z`~YQQgIaYPhXP&Ic~3vq0&IAgn-*W`F|Y8E6Co6%1XAYh*}jxg!}OLmtK3Sm48TFL z>L-h6%g68$wI(LAU+y-w$WJ8j39`1QF4K*w9+! zmD)Vp`}glZeDLt&4?n*1`Ms&YG^>AUyrn;k3|(mWqvy|J4Y5lvUBl)HtsUJJ|Fq9{Wah|J>rK9Jg5qSQ zYhn7uSW%OaOf>np7b`2wF|XU<@;3P7t03fVGx< z*zt@Dcc|e<7c^qvCF;)1wYFPCB5zSu3CL7Ug|NbZgedN=Q_YKlHd<<-$gU?^D6_g| z2a&Y)NcT$KxU#O0miAbc2RictT9oFTm4=9=%OLB8PFxVHI!Cc^7&#$^Qi^w(1gvTj z092P+ROqyID+OKB@@o?Y@`9$C^m&x`YgC78Hu#p(f%*a3&hl{N`oDB6pS` z$z!UbzRvAN|6l0xug{%G|0`zR+NEZAx}l?pKIA0~zEX-d!E#=>SLC-MrlD72RW45- zkHtAj&-3VX*gXiT3N}Jg1;5#LHx)4i#Zs6o5nkA=6YBp@*_(aMaUFMpvE0n8`Zj#n z34r@fEi_3>wj`@%yX|)O>9)@FoPL<+`S*HW=AqAw+l$7MY)O<%k)lX&1xbJ)h!6X> z)slH5Vjkk&o3{#-POHu#4^YU;ym^;cfAI@2L!`C~{W8X7@3%)BE45Q-vdo)zuPcg8 zN{=!z?epWrs)S7l!Gl?A*B5Y>gGaoOKT(~E zi-M7QsYr%l7$^h-KyO)tAm%_M6cu(=f~*8ciET=~Z3T_1W}4#uM5Jc9K!hN5%u6W9 zG%XovrMXFC*%f6z5uHP}t508<2mi)bA%qY`B(rcrmU|DY6{do$9J7+O+3J~?qW);) zHcH~u`!e|j&OE?X2_aTSc2U__(ZWDwRzbz&Bl)>*!;Is}MyI3pR27*B(Zg!xZh7!V zZ}kZ<=P>g6}ws5|A_me>GM01{Omc01;e^<#GWus3V*8 zAIcl8o!>IINnhtZU+eT*m9H&a`M#`s{msLgbj?(#%?!WW-tAl0u3h`=$|u*ZUq5;B zZP-foH}_*2X$(XVt~5vNrPmzTq`x1PMfxs3}RB%AS2apLY4YE+6o$F^v7(ZB(utc z@&rK$?cw3^zy9mb-+1HK)9K^~Kls73FTS`~EZ%tIO%OeC;>45BJl%xm-h&4pynA`M zTn1+I9j=A(toC>bq^*zVC0}zTI%}qO`VcGe!*Cwhi165|a@D2UerWq!rQF zFQWKs8V5uKX5tXo2$-TtG=(;7hY0~%)F`^OxwE~qLmbS^#K5FqE-`=^XpE{V5i~Wy zGh|YcrsWvp#?HoIcJt1yW$X!PXKTBeG&{T7`^QHIhsPF^bGyBN^Y+N3?HG@YdI=zKmOh5-S*j)D+1MsSz{lOjaZC!cxxc)q-G z?}pZ(&I3m3X> z>e!GHDAl)aCJO>eb;r9>1NY3NHz?^ z;n5KQY-~&>)5*rh*5=mqkxS<;UV7xsH-G!y`yb6_$ALR;TfY@&Z}E2toH8d!1SWpK zDd+Xky&-jmqr~*mG{F=9_53h1BADsMbQ*{W5kU>u@xa5fUn~Y(E>E>>m~4PEd6|J3 z3?K0;M{r0)?h+Cf#JS-Q3>TY&f)`aWkOAm&bjZ z8SlohT~!jE&Y;z{&`5~n6n*H`)QHpRbZ2Mh?76e^<0TT`-=D#J5P{VHtqB068k?q3 zYk(2FnSq+fkUefNCL#jFsLHG0p%Q9HaZgNUQV0Qvrky`uqWiQD$aBumrns zk1i0SnnkfyrYFB9N(2T%8cY!}xVvIzDnO0969DR{+Q2OlMIGzeEkSTdL_G8xywk3T zB6x8DYC6(XMY5S0%)6|nE(fZSnVq&kRa1A`3T;;eU)hfSHlm6+7Lk?HLRFZ*Y;gdH z){lD&3<%Xj6lzeIMypCgs8m-uCzfG`MyO_>>coKJeJZNKSW+Cpq!pHBK z{TTEfe=&rBIDi2vm{$N%IS$M$qGn)}DsT({{f&~NYemlb!j}zDhEYo;O&#o0GqQ}A zGG5JRmYDqm;p!ljB`cpIZpy8S=8LA5^6-Ee&4lK?(x5~F0L(n0 zmR4UuQ(lG0ArD|6-r_IwocbeHrl>wO^&44sr^{dKx2~mR`4V!ePA&b*&DVZg9;X@P zXgI>CA+2?SHANj$$IOwq001BWNklyb2@2*NpGfI*NF3ZL*fFc4=Ey6Wfth5PBPFk ztD1OIY0RB^R5a^p5HL1VKr(PZRuWKtDy7U1r3?drn*nB^h|Fo57%({8j1bL>)&a|I ztac`VLLhM5z@%xsOCu8^SnfP;U=qCA9RbORkdw$lBx5i_7ArAO^!IXASLBb|@{~TF z+E4>!X0&nV0DweOj0_fsvE2A~eNwy}Q*^ayTToo;P|}ZW+gg=}^p8h8OE8_84WMK@ zOJvP2)+)_d_FI%*qBTtuLTg#a7ieCQ^W|<_mDrSjb?x9v-Gi!LzMT$!zKk;IxS6>M zFDXz}^@@*T;aL)ss8xou7D{!b(p44aPJ<<^1G(s_27?#Nsay=;y}wp!x(jf!$Q+;W z(iRr7&|U{fLZY4V<3rqtMgZd`0DvS3nZ<85$jX>gOpV7xu{v@sjl&Zp1CKn3<6$h) ztO&YtM#?;=2vNlo`j9HLV!)N3Q>DDHiUL5E9tB72*A%n0EK{vSDzP~#o!UCLF=m}a zM;iGmfj|SHQOZyRw>;d#{vT^pz`R%O}Pd@$Z=hv@Jrrpl==48?i zaryD5SKfT*H+S#e+S%Coi+}fnT{v}k|KQ4%j|uUS^A|2&x)|DacKge{y}g6O{hi6q zbI&}xy|ryd(IOx+v4YtupLH3(qN#}INt?E{oEj__bkm79weaw$6Bz*{(iO9$7TuyF zBLGm5XsU^kn}`AezyA8K-h2PUML)dytv~+$pZ|F;!%zR^XaD?9KSH%1{_uxq&YU|q zI{N?q`Ntpr_VRqW_~8$KIO#Tsf&qFzZMRi@s@>^&{q@&>^rIgUHC@+Dnzn7*>2$iY zv%9miv$eHJgl*eSy3jP-G|j0qr<+MP3?e4Q4k@-=2%%}3$Z+M;t2b`nY(n$c`HPR8 zJFk75OuNm^DG|jX0-~xALTFo0y;H*m&`!|fIA&mA!D(n1+KtKQdtdy^uYNJ_m)zJr*D{moO?FvcyjBV9NHunHgRj$ zY`I+S@9z)8K)6m<;-dKM`7{6i!e7p3%frLtM=oAynkKXyRTu-71~mn6O9o)5VuW|^ z-o1MD>TJ1u>glILXy=E=&%f}z?`LlS;FegSQxK8Gy#L~hFHUT4pFVl|JKy;;#PI2- zpSJB$2;qYdK78SY=eM>u%lXQ}HpfkLMK6@21l2CZnzAM*X6iHk@bNFgu)bkAn^u)L zjIj3{i1GjXFH-FdrgXIdfKf8jvr%0vsG_-;nLI5)bpQVSqobppot@=!Xqvw3csgwq zHva7UfAZ>UfAr?B-~Rjm`A=7`-2f(nP>7X_UbfMg9KobTUKL}Y2%It}C25+36{L)a zH?L^ z6ccn5F%^%Aszn3Bc)XzF<)oWVCX+w?_P4+N$A5h9-u-tjzxU>wzxnWkkMG>RuY#(G z+(Bp%YnNo*LxIY=&Z;d_eB^m{-`uL0QJF~*F;o-38>^T?JUo~qFf##g?5H77jWG_U zs9=noHUK$mms*BQVij?-5?sq&WSO}OO$Y%Oo_HQBlK@7&tO6dy_C$pW1STSmG0tZ5 z{ey$8jm>(pmhZ&|06%R? z1YOtc?(Q^A*qm;jIC=8g^;=i3-7q83C>k|d)3BNv8Z#MyMkPyaOtKA@Qb=hPasaLl zft78HF!E6rgRq#^wanqw>hcn}EVcwxmMv8o$C~DjGO|0F6S0I+VO*k5YcO-j_4RdVOEa-@IZXgi7cMY2#S4JkFRPrOBD?DG_!!E>+G@=i zGn=i*^D;$aU`Ol7>F9Czqn#52a#BH60g!3bBZ=5W4OwKYtiv6bwL(iNH(Y0MQ^2izW0**uyZ9b zW-yDYf@9#&5LOHww*+C3m_nUy4LkGfYpnoMla(l@`5K(eY3YJh=&y;xg`? zmKCX^X5e`+%kLgSNT!lo9wmhDAbD`Q9FNzKNOZrHn7p(X094bu=iR>&S%XzOsSLa9 z8C>y*Mvuiy}{+uH1vze43h{;tv0D_9D+(w7hY z!YcRDWwGJ9WG@3?X1_sPP0Q3a*+WK>g}{MA-!Fj>6o5=c2ee=oa%d^-VFV!0_L>`S_e%9dfk2#5$3@ltc4|444%T=O*Tb zVaL1J7rUp3{c<{zbzb#9;app4W&lPN5j#}@Tpy30TpzH9qKYgk3ft{*hS8*}vae+0uEZA@eX$W)-0mb(>6RTW#Xr5+E(s??~KBv>U5HK!iMEL7bR z0E~Q7VIoyD&#q;Zbl>+Of4qFy@9&ZvnF$g))yGyOOtFl!C9sm_S(~B~e#I(yU5v{j zPDizyjT$eROgrApN|rt~nN6+g$NN}{td(Ud61a$Eb=+BHrmqE7T(D%zPnp>bj9Pgy za|t>`iL@FoC|QK^L|Ea^a{m`ab+K3s{m^)yOaM~=Lj+nZ<`$IMQ}HQ!)lE7MG@H$0 zjGNmVO$eXgxY0K4>C>nEdG(7_LUL5HYbvXnAWx1RmxRyVaF_TKZ9cCx$`1ttf=;-9hQ;S94FNfuPDI&{dg2+y~2@s$unjq=U$({fDU;p>> z7cUwJ5kUY~RpkYV$pT#8yK(vI$M+BS&zwH<)JE5~ldcP48rrrKGa!--MF%iVRUDv- z62*_KpCU0NM&>YEF77n{;{WC zc>LLzTC)25bB>MXlFYn?%2uyev#i&~#s(rDA0IE~vm$wzxoH|C^jbwC-PzgR+}gN! z@xo#;cd6yg1}*12vfPeH*0vpUST2W~dpAG)_{wx+TRgkOtp7n1jC8EI07R%-S!NFp= zymaZ38uqbAg!%j!45yRL?|t`A9=&+!jW^zU{f*z=`0{4kPTH=`_63*BnO5=8l5DG` z6Xr;0@n_5UlY4Kext5uAUDtJ;zYd7(Y;TW90!X+(LTW=3x+x**Vj-#=I1Vw+4rS;~ zBdADbwGRKTeEP|?w}12Ql`EeeA1#*41!~8{!~qjvfQDh<5&k^JO(5xLf^3_)qfzI2i`C&% zYGw$ir~rt-A%F-P=>Ea6h@b&jC&5tFK!+g#sF=BJTjs(h=@w@4YldO4s#k>j-63$( zw8J27OGu1JL>Qu~0~(kb5pT1)ij)F($s0xnh2?DFWT~cRUN^~vL}U>AVbbz2M2)&U z>aAA+!@x9QY|%CXY<9RXm@H*u%1qsKB2i-;01{u@a=BDQ5RFYd*=@z8_I->Y#t=cx zL_Kj-Q{uvCDvzav^-d`3Le)NbSO}l_Go!cWOC?W#<Z#eB8Ox#moiRQ&zgYAQRk$P@nwGsoCNhV)79 zG*FA>5;UxjJXFSp2iTUL{sg98R)pPMFuEb2H5DxZSPhrB7j$|hh#rV3Jf7? zv>am0RT3&6iZdi{0{zWKQL-W zz$W0BWRNs^L{u;&>TO^m0aU=mEuQgZpr{^fcEV%df2z6F%a~&sw`p#A14dZVwt$$? z=FAM{UYTJojpr1?RtN0(m{k=NfT^U;5xws>)`nUE)U3r3{QBrxD!-DMZ!WA&nG%=) z05qUvf@f$FSX8y#S ziVbI@Gz3x3-o8}txMtjx_>P#Sf|!c4tTq$No!0~(A~K~8DqyCloQ}DwK@<~F1Io}~ zFH2u3K=6kW5#tD6v+Co9i%$^%5GbHd+Lj6XrBHTB9C!{@0>I&!gc{=#7z~)$g6V|d z?1}A-wozFU697s-pei6Bls-im2N4xW0c#kdt6Kzvz#LUI7ae;U8gXlh4l|)C%~WJC zRa7GaLliSL@0sf*UFdjl0zhD30)HFRhFH*Ij6kSpL&6Y7jC+Bv7xQ zCom%bWMIa&2@N5kUtx%51mw%A8VExmP$Q?z@Ro_DOpIWNplZQ?2w>i5E?PhaL<2!e zCzuFIQ&&^(&pMj0zBv`uaXg@E7yt;<9{*~sVd+2Uhk+;TnH~jIi3nI4TSrrLGf0p) zFf)jNAt9?6Qvi+Lz)EC=*FO*&y6iy(FjX=nAS7ZM`8xcVa0tCDJ;Nm4b`}A^1Rx-J zyIxFzPDA9T2?!(jF|`m=0|3bon-Cfo%$&MI_&IV8mf{MIz0}*#I370T1q%Upj0wfe z*%Sch`!H9#QIj7I`O#V7vY8^Xr?~v&l@Jx>S}G_x`6O`0+C?ZZ#OXNxbJno9fWLApMIb&MEHLw~YsT!gut6ei@ zumF0hIrSiRq8JxqZH{-VspNxGURjb!fF2P`wyKMF!r+u0zR#Jgz$v1Iz$ySnwOKZ( zL{s$|mx|Zba}UM#RdL$5FvKNSapcP6Wgl`D%c^D)MA=m=;h`PFgMTV>2)lCQ=B|2p&kvX0#NSqf$4NN%ZO_f$5c#H;x90 z+!_%>T2>G7tdJotF!Ik8LB+_-t;7nk4uV*f5Q{QTEmxcJOdiy*&z@2yX-f1-^(_x0z`KX!hp z{hOD6bLHxlCz z5E^0{5tkaJ;k4Do+MFLxEhgN)Xj=aA`rc1}_OE-lZuNbfFZ;LNdFTBrAN}^NcMgsg zP1A0jIeqtdcH^Uu{{A0-bpPPs(F>3K)qnYq7ao7~@aQo1i$%ZehlQD;QrC4|(*Q6B z<`BN~o$r17+uxZlWijuMkB<)z58u0d`Mvkv8-`)FhynwV1?DqnPQLi{mv?qgOZ21( zfI(CxzyQ{S00zi-ILzPu^rO4OY#wBH%15}kFNafZ!i;#yj0^~b42EVHxFJnRQ353@ zO$|W_!IY7h?aRFz?|u5=Q9s)~b?Vg@zj^NT8Bkj+7N($J^Z8=2ShB?VV$l!7VzIn< z{vr?qL^L%>aM5gy2lMC~t@x-_n9t<~ikR2vb=@?CwrQK=qhl3on2nGdx_SH7&Aq*8 z+cs@O#HUW3+C6cy?Se`$0jnr>us#KlRjON@gf- zVIMN^E3UY#S2*W{PRqNqm8{~`EP@?6S0|4Zb zp33zQH?0xTKs-wg;LwsW8f%UuK_ukBEdrXTnk^TL6FWQ0<&rTlGN>W)@!@-sZ+qB3R|=ufCUk$3(!ZBD6zLh(!{R6 z6vWH+3DIeQ)2t#;@`Qj zeeLCU-g)=8Z~ykgk3QOeFxSWyTjCCw%?4s5Hs{JoumJEV6)=+kG9YuK3SibYP2cwj zsj|iZq6b_oiB=UT+*6nksSsm)us;JtK-=1Em<$zdP#sjD=MVsNI-N2Hzu5IJ0K^#k zKBih-U}7QzR7KDxAQ5+gyFeNlKn+3Anm}S2V+3?kJ`YnwRRb^zK~>`rLo-n$AXWe* zvH->$qk$->^$F<1p%?~82u4Q3VXtWMfQL>(7jPo|M&C>)vH=)SQ~*$7jQt?FBi}I{ zHw)g>%^;0!=%Sl-9K72B1?H|nBmzQ15I-!Us@~}#DbS1)2XM|O(6k2tGwJ7eJVg_v z2%!lKCK9P>Len$=VxTehsnMla69^DRkdVaE&lC+(+ojZF$Gg=Lkz2eT_~_j=L(6nB zxo%aInFA0a4l3lJQ!~ugl*hYE5~bJ!sw$9L^mw8@gy3~XAgO;qNnPM7<0m5O5M8e` zpjTq)R}p&p$E)m9K*S8IV1g};MZ__WAvi27npuoO)Iybt=70c( zz%C*EYs$sY z#kw{{N=19W55-e`{;;m}qsd;8wx*gsFiU|sRa3~Dl@LLVn4$-UnUP7OaD}HxfAEdM zSc(K=#tC}+)U*#2G1CpeYUtg}sLF(tol$g>nE{yh8j=`QBLzlgQ}v!DR+vyQ&0&mE zR5Ip54`=f+ut*Rxailw)esU~VOuN~EDS$E}pX<8Oa&AkyLp6Dx?sQ=;m?1z>b;2*e zL|9{Ho>;_`xS*B00hT^ahM8jv#y7P@VG4ONSyT{F&AeDQ`Rx^=R#&pSE0Bz$Xdak&KA#~FvZn>Ez?!cSUnFZ zb5Jd1QY6s|#;~4ztQgbFKdCCx_@H`Y`?`P`BgGhzpzGQY*ve_O)I^1uLluw987dVK z0yIK03k+QsHm4Jjp&@EQ7#7Pq7R;IZS#st)ALrP%Eit2LtV*{scPeTIUYD6HM!6ay zKth-1i6A0K0kf14fF!EKDWK4l7}S)Qt4)%Qq!*DOB8SGzG-?|fLr98RECi)Wio7(SX5>NevRB8bXig{O8OTfNH%!qg)0}Dl z{mqvQ3=x>g2$4afBBP`G3++8|sW=Ao=Boy(LQG}}`>(mMeH4=Z`pkn06d1UufJ9!%)+Q;8{`fWqURqLAgt002?K+Y*uG)~ls(rkrK0K<;G^uSdr!(0VDg zu1|dpQ^jneRlOz%GXVtv4nt1_p1l_lucsZSs7jufTS3)<)GCJVA_4r>%3&87QIK5q zlHz>aQnc1RA7+pQ_i*)H^mP?k7)4W=mMXM27E+m6VHJ1zAQd%jkzMJp=C0Q$Jwnrz zF&F0kQX^Tvlv!GZVHk4CbESHyjK9X7K*BMBYRbTS$A&U6GxMc!?x12$l&u1l0AJG- z{!p#BqP#lCixvnI!*|m(G4`61e`*p!05vjOE*5)xdz;3z(KX2JM%dlinY8WJ)~08F zPoCN}GZm*HRt4MMInfV`W}}f{1IhK9pSRQQ*{7fF+6fFPt*zCOw@kcHE1L3B!z$s% zn!a;VL>SQ->9_T1LPV=#oe$rwR&8tAM-`A8KYbs6^vU1<-QS%*eddvK=YRE^HzVkU zOBc_bJF5hOdgsC2fBVgwA6)$i0!*iq`v(tRf8+I|qobQ&?hVqPzxc@Xb!Cs^2uK z$KuUp7yvLeTU*;E`pHLEcTSwR@F+%+*?j)d#~(7WMBUjrF<%`2_$NR8)xW*5TrO|j zx)nnB4}bF?UVQOIVhl|X8HQnq(tDT{y&?hFcUfn4Je%zw9bUb9_4>8X_xASo_a8JZ zpMT`+rAv=K`Q#H9E}Y-ooVH!Fu`yxhVGtQ2BZLqFVW1`;gb>ye{e9R5P%Y_!x;tz1M)_<@$xsm`RJJosl+$;w{%OA6q~@I;f2XNAHBb~fA?7W z=P#V!-QMh&iK(MpQ@OkAXby>S=%cBjQnqbY%+ccOuDPkTAz@Y3PI179Xlr}B3C-;2 z*kmB0qvNCN*RO}JJ$vzyjp=l`Tz+xm#^+yr@%W|3cXv)omLx?oyIg9ThS_BX-??+= zM?d=KgZ;yuo!z~?z2}~P?zPum@!@gcD3t46k~QI*e=?bL?eyHa^N*an^bbG!(Us3W zy>Q{uO_BTe?=v$nNtJ-d%2BG#x$@^CvWh6C{3-uh@8SAaNy9!wHsYTetzXNNwfjJp zfn`N(^(R!NLyCKX8FSJ?G8j4}3o-*w$I*Tw(fW?PJd z@6ihv&R@82{=47(lk3;7Uw-$4x8J^e^|KrI9^4Df6al$u8Vf{}Yar42tGEF*F{7AK zEW`|jOCj%*H5gsVz!h5>kT^6F`v?1nY7*n-=CthsBL$#AmC#TPJpgN<=#m*JiVjiL zObw%02%uo1ZvG=6HcgA6F<`(!75Y97VtrIVa5yGPrj@rGeMTWMB(8`mD4#>U5;$aQe*|3D zC$~IBL?rhq^-n2vFC$zN2$f}0%~DnNRNH}$en_AJ8+Ad^w6tD(q@~L%6R9S?Zwl!h zYY(C}j5Ay^6-!|$J}9nMQUSh*s`h*3W0{Trm5ZPR!V8Kp|G(6}W!tr^fk!!r6F_?W zp@_S?&d?D@v(I<1MOP9bgwpe!h+N(`O(WU##R_{21xk<$lnO?dh`i;NZ=h&E?u!yR zaVNOu@fEEoCz3Np8Rb+FEE*W)Zs}Gzt^nWwU?&|wH8o)(@Y>rdt_S1c9KFOkIAtY@ z%7mHGGO7kg@PMU2E*e52h)fRxD&bT_hU&0!7+K^?)Y8`d4J86_L(L)q04B1Ta&F-v z1is_F>KF7i=ZBcfq1vyWjPfs2`EZWqz*h-w$ZE3onyhlC>$zPcW3|l%i*3{BJby{;AoKwd}xtLGK8ghwT^B{k;# zH@z6yxh((?pdQVqySd?Ap{)9ti>l#2k-wZc_jN2uM)6XVF(oK4mWOQgMmN;7-Sxh)Pt{ zf8uvhRYHV(5>-Xb6ve#rk(G#fUaYVBl-6;o8cj`%LO{k4#-4RDM5k&Br5Ti}S;?u6 z4r3-oW!7(#^t@r>;Zb#J>7|r)RFZ#Qva;|YE6370?;v2GBy=tpYyVsm;+Ck z)9F^xfR=4TSq^wuw%Af7rb*Sw^(Tsm2eW*NAUDIYY|*AGbDT>=>dqvp>U{}(RF3$| zvV-eKSJ#gxt|Ur}u?wpa0b9+aV$S(#?lqC!4?sjy8~VQCfPlNZyO$oh07naJL%&$u zoz05Xq^gVKnNRy74wJ6im~NT^Hnh3BJp}#y=Cu#M_~icngT-gkZBHM+@L0nP0*nZ` zvwRWw538Fpy$}1?)u*DkfdpelM9gxa)|G3&EZe)h_``QcZit9Nb9{L8{s-@i=oeq! zym9kpuR4g_fAHY36Fa>{1O4p!=ZA}<6Q_5F*b~70yLZ3*ViBVtAal5Pu>UWw|D1@9 z4`+?>W9Kh^`{h^9ZSKNYx;I+IM1(ln{YB)u!?PA7!iVgfb(=QtcEyxXar?y8rDt$e zU}Iye3GKamcP8ERFaPSVPn0xnSSMFmkD3nQJTRPh^YFN^@fN@%p5{k zNY7?nH#vRg%!8x-FN1p8W9r4;XoKx`i1Eg_+8&B%E&FzN@Mm8xx|?b=}sM zJ^AF5=g(hw?d=j)@O$=spVO9pCtfZWlSy}Scl*!2|EFippZn(@|Kx-B zKYnm;Xuv>m*gkH&WRHo*b>1s5+!q# zh%^pB%tSEs7JC_nEMAfl$t{P+;0r!vpq6gtlJsVlo-xFv$J;#|WfKv>5_(!@%0qDj3oGq^2E0L`~BWi5Y~zh|V)dfQ%T> zvlC6A7{nrSuo#(xfFiT>L*EanM;DN1%{@VHYJsU~nkEEBCLmMN!K+*{Id4{uz6}QP zfT@KLqPh@JRS4SlhcV7)%smhW4q(y`JvelMDT1l!AdAoLe{uWz{jIIZ?(Wv5M@~;C zEugdk9gkrmrsCDhL{yg5Veff;YpZqTNRIy}3hc0Bi!sh;vj-0z+`e`D`WJV<{POnx zgJUpaZbD#CbKa-GM1&eOZz!*j7!BRpf5&9tjUhRx_JC!Jx0WR1w#^9mJ$#X4|A91CZy9}RP<0KV(Wwn#b|eoOS!(Rug|>ZCI?N^Kz1G>#Zu8bcl{oYi2C!t z8W>HJGA8z+%(Zz8%!?USav>_HMpI-A0ANuVP%yo`8zLeCmEmaQQ|SkkMAQ3-2nMFi zF$Yy>NwrEWWPmDFykNzl%DYD?G}%j34{4z)F?hb;2x?alsygNJthBoM&teuTx2HHt zJ|rftOGs)FQ0xQCh^?}N{Yw!6u37^j0HRpZWFBf25h7GW0*!-jQzz?nch1bqnGmen z4`x<6+(CwXrsF}xM1u~5=x};R&zi2ti}L4y!OTPjGw+@!n$%H~PRxj@dyy;oV$G;3 zKNLiRN{ZEptvZfSR-qhJt>T_(R^4mOt%TG$We@p83XSGCw$Tcfp4nf&?@Wwg~8R_r7w z{`qR^sr*wt09;+uG>2y7g%1YarG4m^%f$>W(M!|n%%=^4oz{>gbmSF*X(X@ zB3Ros;Mt@~<@hjS;wJ_}49tDst62z*s?KM#X*U@=lILKeXLb@TXc~!`SyUARO+Yk^ zd4B@tN(679gsi!izg|%1!{Ve!DEDkK_RO9^ZqG*vm1@Qaj1U;xfNqBnB7$IYGR*B` zvh0?W4YPoF`Guvva&@EUqG*gKpAVqroo{vwX zh!_KsHyAa;gnultS_UwH-eO6&mUHKJ165$da(u7?2&a^9Mmt)Li)m>(WP}6{LlUBC zjDy#gQPQ4Yk?aLX+@pwCGrbfO!5PqtFo#kIJYqi+meKhK%z!v87FAhX*I$Jbvz$JE zmnupKnu~_Ym6-jOGCx>(YvtIMqgviE@x3-gM5(;V!Mxs1A!G2}9nwtD?g$9Y)xk*S zwNZpAi(BH7R;B152YHLO)f@+38?7%yosQ0fM>BAaDODf}o?$*-=XS3r|r%r8cZR!60M%(RdZZ%zp zEzfEB_Q&u3@~vOqpY8Jo-r*{eSoU@Bh0SpI^WK;Qsc`*15B1 zFI>7H7L9a1EY4gwd-CF0XmGh$E{=|ti^Xg<>-%AdgMiJgpUsXJ^Pac))W(U|zVS!r zcTd}pOz|@7s>0l?>DEe{0H%of$Sm)FtwiM*X(A%$_4Z6hvhuz21)`xjQyXEJPTHnv zKl%96|M7qSkM}6N${t*5+2Xu{rOT zS3djX#?2cYbvrxT&%N+$*EJLzz5zhF9*HneKs0Q5De>KpKe%@5OCWsV$!GuUTi@Ai zrZ|Whh-e&off&K&!(v$WalYuVId}4;%F1Ra=P@)5Pujb)2XDRi&fUX9L+&`t9vof1 ze*~g23K5B_d9zl44k*t1?|=Kd-+bXERyGw#%unl?y|R(&;|$qbaa4Lan4|xx8bZ6h z&1$h9hPG=iJbGb!e&XQx;KtrQGsPiJH>RgfpK{Y1D`Tmg`o&`LPyh5!w{G2f;)y3- zef8Cyot;N7JvN^&kB*L>fBv~gAH6i2&FX*xGiwzNE0*(}J9mEk;~yL1*S`4;M!tLN z=43MIx^B=&U{R8aEb@?u5V&A-oaiR)VOvkwz$!eVh}OJO$Ha!_swu82H|s-PD=(~K z4aI<5`-xR%xvj=NRwP4p_9G8EJkzLjy)~69`bE#JR;~zX;9b>tB2J z$)_HDr=EJ^Z~pUNzwxWL-u(5uzxesDZ{4{Ym4+BMHZ~?38|kehf*GJv&YELN z50C-4qicyZ2K^u-(U42}(zZu%8c{F^$Z?Q6caP%$2C%)^Y)raI_Amn@m@py-LL^`$ z0l+{EF^)R~&G|14Q3-W(((Pp4#16_JfO;hC)G{&8^NS6bMuF8Ig%NPZx>ArU?L0`n;Fdbg!olI8rWPujQ)bZcap0&={7@ z-C~GV<6rUX%O4nv80R+g ze(QvYP19IzyW#xN$zeu7CKaKw)iRNDnG~vWabP36;@VymhxLhg<*T1cKwnD%dqenwVE$*8`$B?VUY4RI`fsgDFyvaI~1Oj@}N$x0Hepmd`|f|XVtMJ8Iz=L%D10};LX!010$ zu9v9+h-g#+8OwFo?S?WNS_N&z9Gm8=3iV*DGVkj38bv@g`Q?3UdFRVsmfI>3P{%~d zugbH^xuy#FUt%AAdD(K~^|&HpQiQ@HL27I|?i_%U$^%hCVuaW)O?pB=;wF(Za(Nw9 zRTbvoL}LbKs=dghX(j~IfTwr2TgI+IMw-uOW|rzo^M;Qx0(*!D0&_nM%f4^h)(`T= z#zw;_))v}k{2`$mVlalG!Cj6h=4B+yI2Zs@$f!{C$)H?KoV^_%wYOYDa;`3PIxKBG z_UD0Ea0V7t6?AzB5Ksf-v1O%&*ZplSjYGyGZVUq*$dp{nlZM)7`m<%+*GbME=Oj#w#jS&mdKbfjo zwwHS9a>`sCAfZJ8cAhMYV5(xOC2!%jf~scE-$Do`T2B;_Q?QOsm#tbYs-7pxdpjQ@ z$D5RJSV=gQ$X9J$72s#cW#DGkgbn~q(G&@T3LtQ3k_;b4T1*ECa*RU`kNUVYgy3jL zmxnec-p8dW5!>1gmXTp*#UjKi`Q)AA{djsMN4XNRR7WC5Pm2x$DH&eIY^#o<8*uf~ zLnSjy;IiDmUi!+ITLIP;5w~XbLbe2aX%Ml7K|xi9??S9zeW)w203aikM#Ti91omVb z7A*-_`fQe2s?}MkVkv_xt58xqP(forbA}SZAQeC`rWIsncO4<2N3+5t07^l%z63%u zJ8|N~76BU$ap`_+-}gSTckkZa+uMu7^3&rv0KN7n-=fX-@@Mb=`h(xxIlL9H=U)xy=0f@n1##)FKGLd6`olDb2QT(MsvN3SL`|T9J+W zcC{$j1<2ms-v9OA|NCq9_V)Ja)2Dy+#=pJ%%FC~Q>op*o4~yTvb9wLHZE2|8 zm_Bjo@y9P*3}?thU5AFYS;qdx-5U?~?;js8HaE7cWKD_J+IiH) z;HMZt$IyjGH|xvBxARDc89{yu0wx<(6^xCVwh5vA$v^+(XFvP-J8xZn?8(Rf_HX~o z^Upnh^XAQe{Gb2tyKlYy;d>ukc;fMkk6iln$|qMo{N&y4-L0*Sv;X-&a@+LFg{per zp0e|q8IXu5g!cL8UO0d5;%u>;&*#fQ4h{~N%jMD0(fQz4ty484#d9p1<_9 z7cV~ge|Fujhgo}xu73eQ)drJ>v5)b?Yad^`@r5!x{q!?0Joo%&(@hjn*bunsuWgsFUCR9hYc|;_%?Zt~1|I>f^n}egH$>x@c9^Ah>o6S_T2;?lgsK`JtDAk%+ zg)(#2Yc-ic?7k)kMnp2gqBJ#SGy#Cy)VB~Yxq`MD&3rgWR8CMao{Rj?Vnpk2inh`W zK`qk8r_|NcFbuQVY-?-l+_`g}7gy2ca#<@u0|78K(3r&1q;0CDF+|%#9_u)_f z^_SPKeG#KrXc$Rys1u-Y8I76gGMHjlmv0!6i2`#V4#X{o9?%V!uABHuGP8+e`ple0 zl$Zd?otzjsgyN!SAX`6mtXq+5B~I{4?lbBx9`9C*4syi2g~JxLmNWdgsGYk2?y2+!j_Vth>1c} zQkY&;z!I!V!4T2?DRD|_^lHfaSP zDu#e@==&vM--B7#2BOI(@}lpD7^6ftTuhCLwsy8poH)@mq3@T=<#IM#480Ih*M-or zYCJsLpB*oTxKtBnb}WTkmxu`9g~A|U}N7>Kutt_&^L)Na>d<=DC= zGDw(!vL|zW&q^N)5y6a`hE+SHSRk}oFJF7vkikrADxgT7B5Ky4nq%9v6z)ujP9hQ+ zk!O|(=*wX#b@VVA3;?(P|(y8{;}*K-#q{TsTKVC2NBIm&0wPM z@gMr*)e^5rKr*PpAO5cuauzeh4`2n{YGjJV_fyYphQPy+uc=}mNyk<(Q2!DF2OC}V z+IQ8}XdM86vvBIVu~@$~#gYuQuDfJPGnZ^} zG7%Bk*w~<4;TS?NH8J%Brk3+o+!Pb@bA$*6rr3)D@iM9*10^hinPoQt$r&xsFoodN zOc4w@M_~{fq|_0G(m4WfGR^1^3q)#&5S0d8>Q5%%B_fZnQbYc1S`C0A zA`z%sMI;*YdC4s)^5arFb+BO=G)6>h+t$n|tLM5h(Z@+hW{|uR=3y8R9cpY$sFDsy zjL~fDDqHq>0p(GJW~~u|nA21qOw6VL74rphaHm|LIp*OXk!gBBQaAqm~IZ6-hlO>4vM|sd8BXu9oO$ zIj3dzD03hbwZ)ma)yxFc2+crL9UmP{iJk6cr1mRkp+wMp7{f4Fh57Zfk0bmUY9m`y zZ%L2vuA~skY1Nfr=oobsiIn?nASUW1$R&rCt^eW}yACa7o={mDqhzSgrip?9aY|ss z7;~HNF&|l;PK2I=Gk|5^-?@Kpe)pb$p~0l<{(s8e^x2Z*x)VD~R^8=o-LH3`H!K7Q z0w6(<0yl|6O;Gz-v@OkiamZmu*q`k1-!u^phwT{IV@n>5L$XGq2#F#I0>s+b8r|qd zqtVNI{q}cnRpvSVa57KjeGO`({yFb<*`?YN7#=Y|+XFrV1(%u6W^vxd`TW?*%K7u>-+AxdOP4M^_x!VA z91gm}tDoL@``Wwrw>F^(N#v7{Z}u;I{qiH{SI5huNk9X)n-3mbdF$=_8=Ir1`O0%I zoIbYBqA9B8R`83`F3U`|SRGXvd58#$iM^j|Fu2c<6}Kl#a9 zZ@vwo`IT>c^IPBi)~(NO{ml=5_-B9iAG^cZ7oUCZKmUUttS+zpum8*ccK5S;oA)>N z_xJnQV;IIqI2{`OhcKE>rwH`buYPrVdv|+xZ)L?ayxA zdg|#XSC6eFwf<-ltN?<@d=vrz!mX_bZ@ls5gRQN88n$+}w|93Ame!hP%7lQlH`_nx zX8Q-bckbQ2zj1$KbMsfe_VwoUgb5+#uob}25g&;n$ieRJz0Hla<&}w~r!HK6^8DqI zQiDwb1%w2aT?bv)$2gz&9VxaDVv3q9#6kTFZQ0Eb=&e_Vgo6|60pCsBqDHCj`>R*4{{72;|AnWYzWl`F`@1{o+__7aE*bII z%R!OhUUG57>~z6m)sVFfSrd#CIhBAPRCX+tgf9`{rhyXg@k9_2p(gm|XJM|2M4Sc{ zOhZDM+K57Us5=%F+ynrahFH5D(ca$P_V%`jT)cP@OZ7vHaXOuHKrQW?0e~>5rj(*c zB96>_?##(Y&Yn4Y=IqOV`?o*)*{iXi_n?HK9Zf~STt6)iIojk*L@6r31OHUb071_q zNy&m$3L4q~h$)Fzvl&K>HiywhMS}MIJjRZ~Fj2ZbHS~~a!ln_Y(bTn$uo?1V(e*D=lJ^iiky!7hNU!};}y8r+n z07*naRR8ghfBMdq54N`UGyzk?9+Jq)Zwgjw#q|2sqmD|LnhaeEd(jr`{$Y>zy zMUYrT5BpvZ1Q`014g)lyA;h-rEttW@&H)5MGSD0Vl4zHDP*N3Q>=oI60EmQ~^4;IQlZz5Rpv%%*aKnhjH0)feL- zDRSGknLIR!h(<*KK_SE>2?+rx7Aq)8v@8b6IqwP}3P~Z|yL-Ru4(IdvgYCWb^|jTN zmC0m;pv>Ha(2m-+&71R z6ezUZP{YiCDlsw#&4UFANuW<4Bp^=zTJnyi^xalfgDG=0k1iOTDJ3u4AtDdqYn3D@ z70&L7kl73?0Z1uOrhO&wK<72|;ezgnjy5pFtxC6Vt)DWK1WA7geIEEwYZhO*h%i&& z;Bk5YbBinuTwQM0Tqy#~WcI8tHKpX!o_($qRGPv8N`FDOr5#a)%A_w3N0+N2P`&<8 zo8@fFWzI_01xkK2 z`Drk`y!738;vry9!yqOv{rhuVzf83Na61&xc{Qnx*PQ z)uvFMH9Z7F$`OeMX7J2#KT&^EDe>EugMnp(zb6`q?AKiu_!pxJQVu=EQfO(F71qm7 zbBgkyX(ARhx$r+CLd>$mI4T$L19)}}RK6%=6ch?31{ocyNDzNnst6I_&~^k$mM$!| zG4-ofgf(kvHPkYtMD-6XM$vuKd=pf)9x63(ZxzADa@mm+BB~CleEz(Le?>Ib zpF3f=5Uf83V-rhuBu%|Eh)oEA5lSz%q>xfV0OSl`O3I{Ujy@rVfGxw>Q^yIlW$q4V zl9C88GVwwi3RML{A`0Bt%#-rD__jMg)-S@iKoY2^09{G|(DgkAa)b^B_7}_7Lqrd# z*cRldAbLLpl$flVCZ(hz$T`m!M3_P#2uuLbHau>bFkAGQeyl4-h5JhtmT+x!sj2sK__~>K006`Oxcypac))@k5dZ*d5~`)i&mfk|%QCa`Q3wGf`q9&o1gNyI zONhB^K2}#PmbHRKuq19gOb-CLrzMuqgX z%&D)u_~QDh6J1JIZ(e`ptzT>&?7)cIaeFxHHV?M{{>`7=+qnCcXP#SIUJXri_rbka z-ulJ+H?Kp|Z+-Qp%a2}cgi|jlSVz0D>V6wS09b$;kG!()Moqo=kPjvzS_P`L)X{6{ znq9ty*ROxPasNTr_hHn0dgs$W{gXd=`EP%8^Tv(7?|3hJLwSB{-E8lS$i*wzjrzT)+A1tFK~(F=|R7 zGyuB1y88IzkA34CFFpD6Q>&}1v%`aiIY~^ZFK-PZD3Y~4AraECW5>SnjhCiZ-@UqV z`_BD)fB*AWJ~@5s@kcL=LUZTd#_fA|_V)K;H`f>g;NurAudg0wVCfT9O^FpOFz zdh?Cf=d=Cq|K|6Z*&>cGkWiVB*<`OxN>fonD&2L4Uvyq}ysws%s-D=Etq7O2X3KgA z#AP@Y%hsgvV54GILoOKeN(k#iaRpjO;7n_qE;fbI_kG*82L}hP8mtalL>N5cA^->i zNY+R?sj5U4fxyjEPhPlm@n662<>&tDuYYvqoev4yrfE@0EAvSUe9Wa}wa(Jga!z@B ziHNA{x`K%?2g8ye#RQ7X)HDo0nsR>^PLUW#<90ru7w@pP30?5y=ey#oq6!PL=!kH3 zU1lqFm0h1NR7NsXLLNZOdOtkux-PYCJ07=dt4pgZE03N%`MrPf?T@bA_|cDk{Mu`8 ze*Ez#d-MJMc^FS7MAWt|R#|VUWSQl_TU;oiu(>pjZ2>^CI01;Lh@^Dbcc~8uZBSJS zAxuYO5ivBA0HgFFgwR-F&X5eKmWLFW$ZBOmftZ1b6DSi~$gv5b6~w)RgtW9YJ(%_L zd4JfYD5?T!ey9q4-^Zkf2fYXohE(!WJ!(Ge8#O5@q7Qy#z?4NvZcCA~(4rzI#gO@q z0h86=2rw}+8ptmPV8DsBPNuxSfngZQCGd({S6i3hXUz zt)wP|(6(*E!6s|jUo$j@02BywoA{<_R#sNdoH=`N(BI$OI_&02;)oFuMG}H99|;39 zibQMXtb$P55V=31rJ5ddB%t{FsBYaEk5E;bY ziEnX9KCq*ArvR(Q!I>(`6Y@_~5P1lJ2oZj%3HtE$PXb2$IHM$sl)7tSOB4Y{1W`%J zvT*=F0TD1!&i~I{=ZoLcTMcz)9vkD3Q*Ev4Gl4?M+C|Kxd3?)i%?hP&0u&EQe>r3T z0C}zg3IGtGBmuOs@dyu1!Sk1OR>{wFM2`_969mDap{WAbRJF8w81SjGq@m~%O5J7t z2@zCnh@(oDkBEUC6@n6AWA9p#C;b@Nb;<+!dmG7k2#Vp*0AP7iEfRa)mBvD9`RFQ)x zi`o693lAV^0&8FtIbaAp8a2mOMoZH%rn#gfDQfl>QHw2(h>-j7AtFXeib#RWrVTIa zypSLdwLoKla+|7ch{V_U4#p^=bS zbV5Z{6T#=S_eDfWV!b$30BIqp^AB7i8e_yZZyzFtklTPV<>GD|4X3!^gE_VPdASzM z{{>LhwrxRFlK@k0lJd~p#*~sDMAJ#(mvhFX7pSHN`vW6c6CrjF!=aXvk^(b?731h2~}DsRk;%OubxtBFtLkGv&d@!Wk2HmLsQ9+ zm6G0K{%te^uAW;}L9SIw0{9OdF@pVM-NJEdJaVW1RZ2$EKrn;t{yAf&Tyj>Pz@RbuXK|KiekNyHm$42R^5Q=8YmjYqUe z%}2$|V8GAskXI9fE?U*jaaxj&Q%di>_uk#xcVmo_(!D#MO_!IJSC*f7_Ls|KfX->C%sW^tUhn&EITqZ(qD{@%MiB z_byyKPl05%z(hueqtPg(^ue_cfBKW3zVgZ|v%}fy>gtJ;ClHVVsYF%T+1b5)`}U`w zesbf+^>2UsTfg^vzc(I_4rjBJqNahtEwjq{pfVE@1`dy2I3HWw|3I#Pa&vQc`=Fa$ z|MW(Tl29khOUI6_tkLT6@$&k3>C)NrE6o@aB&)bG>!`HnBEZ0*k8yT57ZOM^>t;LK z+ZZABac{oYr+6@%ZEkPu?(QLCH#-c-&p-CXX*2#b@ zib+Q8bZKctL}TiYtsOHvg@_C;Az(|9F%ZY|eNLP>@teQ-{VVUi_x3yQuCA`0IeU6} zd0DKOtB4@1ym~CD*-pmw@?3)XpQ(zy)x?bG4TT`%DFe+z{ctzkOH?cK(eUT0{Y$+P zK{)b>Khv4ZU(nEP!=q1}II+FG?MP+USGE{7tfW^=nbI~N6j2%@3E={S7n+b^9v zbLP+g{IA}7|N74MUW&q_#?dZtd!tIisF$Rwp|~Mfd8{!;LJZ8RV7<1?ClwJ*0w^}h zxQ|`SBYRdx1UG`N#fM0VGKxVo*v^dq^tX zctQkeGH#kC99w(tvC9{}{q3*)-QWHAgAYEs^1){tn_GxD@8^UZn#Ou~AP6FAiq=$A zGv*?UjEM939EtsCE+9r2r4L=n-3C#YD8dW3eDEe{@%gt;BdaRvooEJ zrsMI_^3uxEbTn$(K-Q0k5c`z(763xiv`x!_nRqfDHBG}DnkI}!;b`wuoA?Ck9B93UF#NdSO^DT#^_V@yWSL=-@ift*ko20kUV zw)#>^NP`s0+$8F!kJX$~sALN+HtzHJs4hur!#JhnW87V8VYy^6CMTsB#cf)P+53ys z$e0U8AF^#S&}C*VwcKlS^3_ek*EjuDG zp+Gd6jo!h>fefM4P|xrL57O5jiXB}JJ~3;BwAy;gxg(U~r(_b1D8?8To9sKyIH--) zFs@plMekbXNh<$@c^H2EGcraC|746=bA@IeUjPIOm{JVPxtcX5A|}ElDJpmnU>`_Ak13B{WVj?U_Or^*6pbUsulVEXv>`kOXtgK8yMN(8E5>3pFW;Y<_ z_o=dJtnQA93J?lpU`B4-14s%f*ZaF*6%kdi)Gn8~8P`{|G4>%48`KG6llM~giAqLQ zKvk<-R8=u_+uBDY6)7p=1Vg7hQczT|VhT(E-~&ujidw;NPOnbfswy$xAUf0tlLF`L z(Eue16p%$FL6&94{{y39F=r8^^jI_j>D*2k;mjzu2|ET9NCg2T0#s2V1_1`>Qy&5& z2qXdPdL|+ZC6>vgoM`TnjsSsKA$RjZK!u?+()Yo>j*IE8d2_7o_F(fR>vavx>dL?f zMsv+imi2zOA!&#MhHGLgnG`lsanQC@%}@gZBHC98ZU(5;AggtBkjj!alE?}G5r9i? z#|%qFo135%2uTxxs763Ypb`Z|=Y3yNxzTH6m;eK!aD)^9TjoY(8gO+fuyl-|(VC9~ z00=}*rZv&bhkVuwW`5>QB@4DG5(QIfR%>sA!lK&yniUBEs-y~0839mI%IPm&WX(ZU zMFy1&*2AmH63svr5Q3n|Pn3ocAs}Lmi9j19Mj#L-4uNez6%a8Nm5?HXQb`#1IXp&f z#wngAtb@~nMZba$0Tloaf(EcC5ab?n&MyMOnn7ZV*ygH#VgyknR0Ir^G?^f-n_Mki z_OS_nW)euEB1jk`148LEYQ1A(*7Tf1|A+_}lOQ6-sFoUF5n4j4scDH6AZk)jK$4VN zZj~uYBFgPYV(goyQBy#W0&z;I@1rUL6CwyGH$hamZ2+L}Q&d5qm=Z{`Kzd3U18SOp zh^dcu#8{yr446CHR;-G7a6HD;0{}6}V$UF~Le^ee-Ef;y$`r29&m$3y+liF!=8_T- zdXMI!M}!GfQIi58peRt+_f5;=&;WoY<31D}lA$1<5lKoSN=imEkS#^BSv$ro_UnPz z7(ZIK`xu!ysepn;&GEEq6QE=X=@I|Ah{2?4vdNZVs6`Gux_O%0hS-u+5e<}5RSqE) zJk-6}TEH6pTC@am_JwV(nUx6FYmz^P{)BkZ=?1>o2@`Vrfl#O(_vDWQz}R zXyj7C>xK>ush~cm&gjh`A@zeRRvzSlUjCLMAUM2Snx~V6)Kn=?T7}C`KK4id?H~R6 z?c29*-$^kNh6@+YpE-Tz*zwhr;?)m7{15;BPu_gv%_qO`#DD$Y{LwSdJl#t?I5_B2 zLM3y28qSe5N&4E)U;C5)>(B1qy{jxg_=6vO;~Ounudiz_geWa`eY|z!_P_hz|J{|h zuiU!%+28#2kG}KGZyi6mPF7Bfs1!0xLPElAXxcXH&JRAke(mng=FZ{X&i?Ms{IEe< zJ9exYPd2w6%+idSu)Z?=;uoHJ?9{pSu-qg}UF=g71VPC%YEn?dDfscu^IuU;p_0YKvSZ2h0FX192@%L_c$G583eA!j%v}IWq!s{F5L}F&59=w!pV^3r zcrf@)4s(Tya+!jni~c__QD6#;gg`p)XGsJZR@c_d-T=UqB9bC0b13eKxo=7Ohyd0s zl?XLOQRyQlPN|QVFP;1E|GWR{>eY{b_`|<@@7)hJ9_)fNN*uVcy=7*|vkGzz5{E_< ztSJ;g3L%7&_ct1iwzjqiaomg=Y6CGu8>%yeivlv*wC*I@N6@5_L@}y}MB57yB>)9Y zz(+RI{G+nP0+zXCe##=si4_t7usByr28$(=4Gtr)RFeQ%1(bPQDltVl*o%nD+_Y^Q z0&i!Oy#Cf}ufO@uyB}`v9#9yCW*nM^NXO%`Bvryb&Y3C3 z4iORrRVBit<`gqhFa-iB2Ti@0m5Ed%DfF|50ej4h#vvd8#3-{=zEURrmiqCo@7lIS zh(v^hhbhTnZx%9|iDG+l*u(ZdAXu+SGvPoDLCslK!Rm)e1VoduZAnjoLD&O`svxQj zK0(A7fy^xcQPqYJKoi8KF$z!20T@t{CKUxzAmZ_O9NI=T9UL6o-PqXJ;>mb4Zusok zGwsE3(?FM!ih$^BHtVCz=5rD0`###c=Q?f$fRrSJ(6-HJG#Zb`$BrLAaq{HJ6DN-! zTRpzI(zfI2($eu$>)ZRgr?yUQ?d+;-0)WJX3`ihJj9?%S$_vW{(=a?6dyN%5MSndW>PID&R7NCEPs>ZfCwgU%`gfi9Mf zhzM6*B#dX;rorJkc^OhNT#7iP>bHj7kj3K7T=7?&hm?}}`TiBRwkz@l|1K&pW1eR! zpqQ`>Ec35RDVB6A4G2kxrbQ0G`3fmxD^PDTKn^n0D{&*z-&9JD)u0)wk-kn6Sc0Mz z(++Xw{Q1JbnT3<`YoH?UMpsB0vMG$7zGMJ>)l6M$IxK%45?9gYE0zVP#YPY=bX<^C z1b?&$S9OS14bnfGl;E3BkjFCAZ|aM*m*T1y2~=SpUxWXZ$mZ6F^&Ihz%lJ!#i2qY& zA9d#P0fK5Cpoj$GKE{B+AdC`-t?Vd?NN*Fv0TdOq4b>bZRdW$rW&jy6O&E_YFO34* zM0D+w;kDlS*}j!PL6E8u-nFVj9PCBMBkUAXN}*}Qie(hF3`Z6b4lTr}#aOHlao`6t zSUr1xF$)+G$pR#r6qJD|4=9%g0g+lJCPaibFq1VV1@ksA8^?)?2cF7U=z&5iBuI-K zOKH%BH9wlHFmuv-*oCUgbxOmy`C29*=EPsNz!4Q>`XAIaDhhy2)AZ8E7#nKHNVvd) z4w)fh-}gRm5i3Rz)j;Iay_NFu`H(jvf+9;ZZc^DXS~C8S3sY$3Y%HdShyYl+jdi9r zr9QATR;3bVE}NROL=XE+%l&RHV98&rqeQh(b(W;6roPq))_h7t>cK%x(^$6Yk;Ap< z4VL^(L~fcUU^US`Dv~NnEM+NFK)|$E4r3ut56BN#JhP zw4>3NzVxNbk6i|Yc{djk^t8V63T@lY4(C7o;ScZMzc=r@mwx3}e(Se?Ykhrvc5s-m z2L)=v>e9;k(y^CMpS|+NJF)9WO&bcwi2*adA%KL)L;`T_#`Pb+^3%Qf{&+fBTU&el z+{IHTPaZpV3^`o8`SJVLKHAvc{Opt4{e#`j(~rLN?9UNdjQ{{307*naREx((%UV@o z_(p}0gC$J}pWeFl^Vff|6Az_jAvyQRxyLR&cKXzr>2w)U|KdOW<=)}Jcs%;*m%s9* z$DYD@qKMLWvF~9~bwZW(f0XqKd8U*~^!X^e)rVeFW!sKUo;FJ8F3y0Vg@0$?l&98%_4XD43=Uh{{il!$^R5lu1mO*?+#iO0^Jd-RPr-ui$3 z!~c8j;~V4glEvH+8^}HpF<-K)_iz)2mouVYm@O9ie*AMtnR(b&`g)U z@2MdUoMJZMEzQdJ$^~P+b@hq6RqXp*)3B>5H-r5;@-!%dH%qg@BLu7(7OAR8A7h+M zCU$&X*PS|f@?U=U?6<%1wQJXJ{-?kCn?L`Hzk2_Jk5Zh+IZ+6ZdO!w1WYP?S8igVO zibPdZRq1={(_jTXZcF6jE0`BVQxiZ$ao#(Dg%A{=PkK0?w{2_KKLIF)D45|eGL=&L zj7u!X0c0%{0OwtAuiVEumMmZvXo%-2h7bZ00*Qq(4>Jt4Sg`M$`|!>6Ik`xI!AD#e^5L)GjqjaqwWPLq|0paSoc&v# zQzer7SJayTr5Q!tF#vKsT+j-EF@ACQSj&i1@HCXtam(S+T6=oYl}jGq@S;}KP)loV zL?XZuu4=`6>)3O?+G#HXHyJ+HT4~J6ar`z-EO5K&}J>3p-|^ zTyK-Ag~A3151bI)vpqtf)*`JY4!ezkR25apFocwYIfjR55|Nx-+1I0!5K~GKt((RG z4yvM}|L))bJA9+=ya8CQr-)?C+qTR5XP4J;%BX%t-MK;oGgMI&nW6NKH0Mgv;BHw? zXkOXF0FZ|h0iE(xO7yo}1qB-V&-y9XyA74RU zzLUNR7drLPQ|aCagJWi2Bu!c!0hKMVm?r!f~0N91+All52XPma8-X+6)5 z%=Z@<+8nJ^c7Opbv6^&9Jpr(Yqxyjsnjgfvs&-xH6s4t~3k<`nEaX5r6ukK2)p5vh zZ`piQA?eJ4Q;AAygswK90nrM*>-2t6MbM-@f-q?SS(>zK)3(8s`iP<>Zu()@9-&>M)`Boua@i>4G5hEaiP#G{;{vFV}q>}M8 zLGC!rV5g|Szz9sr1fx+)gh)V`GY)F<&`Jj%p_!Vq{7oNbnS2~L6dLC?qnhuj-H-A> ztMTzqa#EAkM*gGCthLN^{0Pfu z$e39U2YG10237RVWuPk&J60(-q%!HU2>j?ex1RN>m3M9XR&>fyb}k|U{j5EJ zX96F~BvUu|{KacMlE1G4B1F8uxAW1ptH;80?d19>w2%^tHp+1xqo$7f{hfo?ue|Zj zjraNh$|xuxihvTut6Pqc95=kt?f(3|H$yvq^4t?+4!JT}2JKca#`mHACqJ^`lZs}J zY>t073Lp-Msy~^CEZL`RTL6e6q!?pl#8YR^{M!1-uIrXpS5k_AFm6XLedWa$zx<*y zE-x>SLnAY57Ymcne)*|qP98sg<%4(cZrtnU-TLVZ&pz{|vnNiac}%@%N|4;V{QNg9 z(q?ci2Bs(hJZAQYJCWsRe~!uSZ;BNxhls=th~Bw<=gytGJ3Bj@o7;Ep-q}0Y-{0Gp zl)5ew(c$4?-_6=KOeT}lXHR|e+u!)X4}LJ6j{Cl^7!Ww?PfAIcS(EJT?HwE*2 z#)t2JaOu*e<;gVlk%?xzd!KGTc=<WNXQqCoqp!AC$C(;dgbbS8}~N!pnLZ6 z(`)ULh=n-9j*NlUzUa6rtD zU3%=X3l~SovF}MRRg$fyu_Hw8bja0wf~utPNa%ghqC-$oBs|a_Kz@??7S6_Yg`i+|*gvTF${KF4FeDUjFfBNZX>iduU*&bMVWQE0;vv>pm z$ipPi?LARcu$DoJc}j+qa)DTaPxZDR!Pg$PJ$x~~Bv*DWH()Uu;k#k?*koexosI#c_TG4n8rq}jn?8fnusU;XOyk3Vtw_1E8g`Nu!` z`1&U*q~i$?HBDoaIsp_BtlJr)1ZLv=i}i*#ZM(FzG#a<6LPOJ1bON&v)bKR{>rUly zWz{T_q*9SuiO}K}f6nCuUsIHb;9^sI)dk8;V=O zRW^g^o!qG}w=x)n+dq8$lYr5RM9{oPEh7b?AeeqL8fxiDeBx%}kPbjZ5~IjKh;D_r zKd(7utQ-}96%}G}M;Wb|2#81^N&^yV#9`wajxvTShyZhG>O7c4$`%wW65fMcrRSh8Q z;qEYd7`EbA5Q!)nxUu_1l@LWCgb+)0t$)k5bO=MaW9*^SB8k+VBSOeNgQ;xhfUo(7 z!_hCoxb|m7n|z&@t%R0=?7!tlP4+9eQ!rOF|{Xk|hD*FdD@sYrAZ9S_KZy zbuMcNP)l)7>GD0y({Rz|=Pn}72uDQukrn!eIO198tzbrgE-oqOXjUnxn(GVH94uA8 z!R`lI@Y!?`6-|=nT@>p(W7Wa-G(fEcZeCb!;W(h%j6*eU$$TdwGPo0x1jGsJsnyA- z3A4lfz5T;^Qa}uWQW@WjgfU9nW(}v-3nB@lOdDQm>E!CtxJBu$8e50$!oh4LLO^hh zI3AB{T>{m)2#|WC4Wix>xXN3kq&YnuEKv>sl#%iX8qGDo_U>4qXB(towke@K!5aN4 zl!-Q7X&NR} zRj``W5~R&4unD!cv)^}RX*i8&^7Pw(;3__eW+e>(fJs$i8qT81TyV8g4q^!TnkgAe z&@VHrmzP#RBoRSr{o`8PFeybTF~+cf zAP+r&pfY{@bwtE8w=diKNH{`jAJ%q>sv550GXJPVtr*<3XALCf5j~lgMM^_Yr!-yc z_mtnatUecjBifimpDav7P~HLnEUsdk?{K7_6jb4KdzZ8rf~HcsZfECO;D}B3Fc;VZ zr3}9CeM21j$1`(NUNEX)$y9aQ#`f0xnH~|>{_9eW^RCTAkK_{(md$5o%g3kEq6bPO z&)q5jR0W@*RI8OEdeGMFyyKMM$E~1%8e{tOlUtkj?w@+}(rDDq_V$1AvsWa+`tkMA zWW3YueSGicgZbvZ%({>?pb#Vx1PX}6pc0WoZbN{%H(>}tA@u+cy1loqzB3N(<~L@WN!Ww6d}^9*_IJw@PFi(Md2A*ftypaJn>k>ZvDh zeDZ0W&p!I-qd)%RKYrxQ*$a=JAGNKD+_`(_!>b={Zf+gU55Dm9lfU^}zwzSNz9s}+ zjGo+TjVg(Vi7DWIn!WSU2cK=;Uq5#I^of&~&RyucZhL=w)~BUrG#X9ElWB7z%wpfA z{++#p(CVpH?(Xi|@>)qIkSbeu0di8b8XkP_gAcA;d2c?ScYW+qfBeMp(PW%b zZ*rA#CV)n_$%)*QW#)?)FFy9zW45;K-Q5Qd9@O&6z3XZpu-*rMDM<^Fc_IWr%GM4d zqRk>x(zb2q^TR&I$z&1&$3Ask*LB_U^0L>0)GPy)Uhq$9YZ;0%wO2dhY}Sjc*#`iu z(jq?r^x)uNZEbBdZbqX~2qDEG7E2`+%e1ZW7*~n^IhYy(VgOJ?6;&WeeFqHy;E9vR ze*Itm>iG-j{^Oth`L!Fj4)=S8K+uXN%m_#jv6kG*Ocu#EC|Rr>TudO^woTJC3gYEq zrW90Ftb7sG8rF+-u~b#nB%+F7qpJ}SIp=#+)Gi{x!xV3+(>(F0ci@IfjieG$>8$Yi z@G4?4f6G0hLtF<7ene{F4THgA2n32uc=_VF$1Xqm^{;*Twby>}fBeaxz5o7)_cyoZ zhdanEHw^*!YiKBsu+} zi=IXhMGB~ra(%140WyI?!+C<48lv}{l{$U4)or*H|MA@Pfkr)$zS^;hXO*y!p zM}Q(CCFl_jZrr{<+Ss_iwYIvly1KS{Y;DwzcXtl0xwPlt5HDzXRjbw_LKYCN3OBL9 zc20PiKB*Exg&_SCXYGg4OhmLK2{!_@vf&qRraGxp>M&&C2&wAQ>?=+cRDoKlG%X!$ zKaZf79-y^FhgGSZIRZybi1LnhI#@6SPcrcDQmK}MB01|_a-6glp_YJhWRd<|*A7SI zsyEMcmxLB8$$Sk|C4AT$Xhv-EkD8jYUu>Gj=-Crg!R^?>K29E4@l_CQO&GP$Rg(l* zku8G!64`a+`lk+G$_Ivn4$}&@XJ#qJP(V`3sX(^eloBJ^Ot*51;M?tFBNvN!ifs*9*({?{EHkx&=b2>hPCcsf+D8mG}Saw}&6ol+zwG-stnJnnOMyH*2G zm8dYYug1^^Zy!lSAOog}qOmlcgp?=r`F0g)k*yO|B?Y7AT0_JbV@eqXuZov-QG#eS z&%`x-W=W(W$OE~ISrmy-V*(IHI5ut0tS@Qom%_Lu-QAxbCe^5zr5-5&H)K6Az~TWZ z5kZSEZs64V%Ic)mZmuy|X3#(ns=1>pTCZV_xdS6L#4ih(*c~ z5h%o%Fz^u$tq)f#4@XM{gyxw5Zb6a0Q8sp#0Mt*_{!2(MTC6CP(KcQIa=nr@)}X=d z2Q#10avxN<)XX8~tliJON|K2h+Y$%}5;GR)2P*fBypv;LwAzRSfLN-fj0y)DD5dmL zGCH%ZSH)|G%2MJ2FOoU zN28HpVO&O^XU<(LmWKibnoV!Q94d+DLX4R$;i7yUinWnj5OiG!nrLw9guohGbJ?~c zJxbI40R%KJ5fMu;)~yiBZ7Een$i=epW3tq2*SP?oRWjod5$F3ORqG-thwi0AHDMQ# zJLq3$0pE=hg&rz2vCIG5 zcYAB!0hc^hj!+WQ#9=_AUU1+K2G!$d;ap~KZAMqwgshClbTk?P zqFVlS2$`aokTsknfz%ugbVpRl?%uw8aYKzxw=_pFg&KJV~0(<}pQk z8D>Vvv4OS?iS_!en>X&=y1Tg{m|j?ZmIA(i<%2grc&9&@T{?UIh38+GHgsq6&fov! z$6E(`YfH;td*Q{&c&u}AQw&tWLsOu{Y#jsp6e;ogWO;pg?Te3Ip3M#)>}=iq?9=PF zKe@lZGY2{7=RberwYyhueDj$X9zT1LkV9x=j8%bfu^`Ij+*kf9h~qgQ{^S!UPppSvqlZ&Ui6K|Z)mq6GA7i|I`}XZm?@Y!^AAkID z7`5|xf9cX=qfry1IkQqLmw_?`FppjYEHyo(3B63(Oavm)M1hl~iDmB$km=fu>o-36 zm2Qc76Ym4f|>rGlzz z)3kz#nGX*Sx3)JYKn&H{U-=RswxY;@JIkf1UwRk3X+gW(ww<@?)hh) zdFGk7-n{asfBI+dfA~=!=S>)eCJ?eA@7Y0s#2k>67&ssi&StZix<1Y)lhI^4A|i>l z9&~tAL_icUTU<7d6%iGvl_HATa7K~<57kTpdBM8j+#mxjNqp=q7etZ}ljYV0&R{bFGO_g`EqN0$B^!u| zNFqRNkg$ScU}n^$%59TU5<+4U0JNk-jp+{P3Fx}i)gh)1tZ|lq|}2dF^LEg#Y_$MT!8_P zUGOCgEY8-Vart6Ck#m&q1~aoyAw)(b!CY}!17wBJ2drI+?x`7-DzgS)fKEykJ}Bg= zBv?5HgLbKUi@1t)sZnECM=nIP5juWk^%MLR1{!!MX|(2Ke?h?o8Kovm(l=h+sp#p%NK> zUfx6>08p}bF_7z!S|}n3uyL8_3s6Mh&g4G;7n) z9n1v*6EU=K&}o#22n>Kq%#u-i=p}LNK_mof11?WSYfBS}GfYwQkR?bWc|yCPNQ6;^ ziKR3Fa5!u@xI*5DNSNQ_lH@-8K8r?Nhp^h3yTEs(3xHU zl&}n@0<|gdsDPNuCW(Ov2&ic&w82WIlH@>&hyV@KZ=nD*uvk)Yg#Jaq28#oLl))wd zAOIl?J@e_5KnSsBH8gQurDI!CY{6*MhCRgG9iEuDAmb0Or989zKQZ_HVcQTBbunrm zt-Qim#tzF`h&pOkM5$$2&}=^UAZHS>@e54>n}|piE&OYCam`IytW}pDF-8DF&Ne8P z7QpYn3)_K=; z01#uc2QqUK$X)8oPn#j05=w#uN(^S$F*m*RZE>WtLr!G9lZ+txBEjrAecwaX-l$KB zD=X0CM&I{Z)C4a2+kTkVdW>WYH4L zxQw8Kt(WcZxM+~nuHC}7 z9v11UDrqnnYP*F)^Eww=iZ&uXHG^AmDSZtmoG1`E|12e-Mzi2A{t9)Nd*8cf-#KRt^LinKYDk&-yg3n zJ^PjC&YnNFb+~us;}5Ri`D7HvkFQR`%4pD5=4$`|AOJ~3K~%3l{P6lmpWXRP1HAB+ zUpaH)Bnv5K=ZAeMKVR%xXV&&Z-0FC3C_pw6U>q@BaNb?^2&=1W6X`Z8so`aivYuXw{$X#CRh+bX~AkQN@_G3UAS;z>%q?c{{A!1J-fWT{O-H&_I;mJlFAXjvmNj}kD8KA z88J6W5)&&a1p*|~u~vbhf(XDNC@LZ(RTzf{`@36vd#D<_etC6uy1X<{Z&j5Hm5_%b zRBIXHSDj+!xPvPiED!?}$J<0l?ok-iWHRaderx-1e}8{zI1 zB1PLu_Xkx{A1x}Z3V;w()Pi;R?r9nFV}JD)URVq^2NqIF^ZDH1+PpviKV@(JEXi@4 z3A%ekW>vkjU*89sxK9Eih=T{jrOq7Q$OednhjVutWev9{a1!<^)2K5+7AH^7a&? z(MW9GL+R*s*RFWo3#C6)<2LRHX%ReE2%M>hEO8Y@goR@)eWHSc3=}WLzG5^QSznQ- z%xfpm>m~ijP}RGpL#ylOo)>`14R-tDfAuE!dO>`x=9gl?7O+&{Vl^Pag$m|N6I?{K zf>suM+WJAvmvl+_quU#};tx8Cm74-R4_LX{h-6+o07i~>*9yN2_A zrmvEQ+DQH@um68j>9JHA0?fGr0MLdAnklk~2r4PDRbUaD zb4rkmih%^wYQ;sw0$45bm2DwmnQAf+$GWe>%;E)E^QFSJ%Cp&wO2rTn8Sydqi4Z{) zgBWmW_pS3CAGJ$VU)kkVRS|>LiUI(@93qB@S!k3Hks%|w4g^3RqcnV^dm@C_ zV?DKsq8_;B0nH_PG`TU3QK}q$q&W%8*VN(SgjOIqblH>-s#g3UeoOuvS2|EdfOX(U zULbS8k*&^H$;Qkb=5lYJSNw?e(-nOoBIu1&mfE-v$PpmI(7L6Zb0Rpb#PCv8Z{@?15459HuX3%4G?&N$ z4kItJva8p#DD<2(HVRM?0T56|)Dy>!g6^+O0x&e#wA8e5bPIO(rrZlFV5EqFW<9eo zB8adRCM}KHqw8y+NmCCh;9R?vOcIeNYB;5o(x`1yN(yL+hI-!*u8G!OAexJ*mhTl+ z3c;9%ECH*k0f~rm-!ut;iYVp&GEoH(wO($^mx^ehU@U}?H9inRpn#~c32ocJFjxzU zVKc~Yz!ChxYqPN+*lz4p)f{n`C=mouvWzX}ZIuK7WwtDU4a)F3bO2Cg3+7!K5h0dx zql4@Dxho9C!)O9_(+&tNd2X(TWg~Uo()WEIM=cdfXhZ0-b3oL_nCroHVCPI}u`96F z73$thsT_b3$s=MQqeTNE%&lozUk=RTj(pk0r7AS`KP4Hmpd!*V4V9Fpt2?d~uNPw$ zoGw2;SHp|AA}1_ku(q;#{P^+pjYFe$oKj-m7ZA*4 zssPpoTir0u7cUcrOvhMuv-|)qzy*gH;D%a6@jz4nrH;u?{gSwFn7e&|rtAcC=pqtPfzw|9GMZ*!}q zaOO*=f9KQ#51sfD^w5jo0XTj^Y1I3L^T25Rn%|~5j4vA+(8*--@WT&pZ*TQ|cW8BO zZDsB7#*v+!orW62_DMnM^A1AMGZ!vic>VR)N9|}jo3*3no%0tSdiddujg1(CXmY7o zuzI%qec!+H&O5j7-fbt7*{plxjh`JlbZFzq;ZT^4YvWRD8($4qZmbFcC?Evr5^vtV zwY9rLfi?~wUSD3}uID79W-JP#Oc=1C_2WmEj;uE!HW1RRLk1*DJQpHCfkFMAf18S^ zLzQ}w>-%@{_BXh0B%+p65oc`4I%eHOJ2wJG0%VnffRZvg_=j2gU z5Di3$lT3HVqse{up1$|qGfzJC_&@&R4_<%m&A#u`Oh%)LDJAQqH_{I*D27>?)m7sd z9kic`q#^_)BqX(dc|anB+=gFnJKI6lT={rVv^;!UP{{Ry*XywGTKJSHvHG2=x%>hO zV&IB#c$+97Ql>uz>HDDC#E_E4w&_ye&1M#jo<4Q_Z~pc#e((3c_4c`Ue*EK~{^R#w zym9N+Y;P(GqtOx|+U#iz1GyX(+C{B<#u3>P3^V%1E_pB=E2QY@8yA|ilVon_5CWz|M2wOCol1+{@163Jbiq6|P75-W-Z07Oz@ zRU|YV->N+ttAA>mCWJ)KY-HeDpvWkOw z6veXU9>Oe~Yu6sNl)A4arMn0q zeB-=UU?DDZH{Qz;yt$sMumY?8eE=}jDi<{u+8NC$rTnTFK}wnmD)-4=%uMACsp|!*Rwi7G6QB}qW{$Ci zd8M4Uxqx&;qzFg|3asjNYa(K(D-}LwstQu5;-)EwcId)}f~(dweHpz5z>-ArTM{d| zujnHk@bWEW<^&ST&`GUo#cLTg?I0oxgnbJhfFD#U*=elKygKs&k-Gw5UO1vi0>O~c zjhv>IQW__vRJ+jS&pCNAKYhZ^w+p3}_Yx6vN{K5xe9q61Dx<>lTFfO|%TqwH-?m3a z0w}qvd@jT3&kohya>Xv}dktXDD^fscvcE@kJy6VhNrFhoq3zg_WCe$sKO2mS?jZ z#TI5ZhAgFJ$MY_L(RrY#5NZfCYU9#Uqq78(0?Ep#2?Runy0R6!t=(M~1!YjOtyGbq z8Ur-}R+lGjL)=Yc*>bG#EPwFq4>7B1+qNM_={kP{R2tTHSwXFIf`~L{K{7oB09Xx3 zN=X#kCV*-TA?q|GL}-J-Pe6#w0!1>NcUVOOfmx0w1d$W~%_GE|h9LkMHL-15B21df zp)e^jGYJ-S6d&9H@iNM__1d7Z!29)AI^Q7$7WY2`)2~ zLTNrCiXA7@X;kruxq(wvYbi3L?%u86jEJDopBK-`C~obuWuE5HgYTys=K(wKy@E>9 z*7+4IL(<*X)pW~>efRC*XHSP+Y`vxiD4c|KAK zotBixQB`t2?&9O>eCUg%S6vFdKyA+47T2p$muEuNz3%Ha=)-w@GscJrBGQymTE@tn zQi`M2`BnW6>&;r2;EAOZ!XFI^+U4glRVAo6zn)lBrJv&Zuc|6C#QFXats;a_bs^am zJm2Q{I}x&I#K1{y^;?Qc8e@Y2FMo37=fC;+``0h;L#F{FMF0XR0XCqqgNP_mraA!t z#N2+IZ3+ejU;u4kf7V^Nba9E=Cm(!beYBRk!S%0?UVVxeRmA+(`?}37LXq>>22r{2 z&iS{`zkT0*_dfj4gGUY@{VnB>YZ4+XQk3ROqpM2*#Ylqe;Mr8&>0R~Y*w2mmL=A!uX zBBF{w;Sr$>j|(6u4Nrun0)Pq!8C2O9`+2hbH$s5vbjGZ+>Fmz!&7PAgE1_`Wj++=Cd;HPA`@8=s9$FV*5g`Ga1C=Gmc{pyW7H{X2wjXPU+R#un3 z^3+osD{IKANdiV7@V+S1t8E)Mx3_-z>dPNqzj|l??gNiL@XUixoY*)%qLvaiv7r!} z@r3qwZ+~`ucXMl>yR^L}KQ2h!0&r7n4;NKmKo1)IRL-4l8z3G?L_YcC z>a5!zjoKzefB=9;H;!(sZGb9)VO*-!x7YD@2q+@QjvZ^;c6WF8=+UDW-?_NGz5Pdj z@CW0z1(42;Ngz-XP^@M-kY&i)_K*Mge>{Kj-3u2ky!`UZOG}fFKKjV?GZA4S9A5~? zT>_!1`~m<=bjJ$QF#^Ea0+92zaJjF;}e=Yckk000SZ-oAP5`gK?v zee~JYo7b+NK5-IfeE-?|0+9mxY{1Xe1HS$+pPZ}peEl|8^}ZeUr()m9RYdbI%z>cZ|t>A5suSMXSf` z_ovdfsfq3BGbjG;@4oxYGtd0w$NzNU{JXQ6ij2nNQ3#QmXcmoV2oQvMb!}}t8mX!e z*MgEiu_~F|f&?ls%v}INgrLNAXPdw3vtQS>K;>-w3%{v11uBKS@R9nvz&&j!F_C*> zkSkuz*agCXsGyuWbD*s{mbq6AJ3G_qbboDm>4k4R_rf>6_V54n-+u2OfAFK1escBd zXWP3w)V8598d~;TU#Zr_v*0ZU)lQz(<6o zCD-0;3|&Z>bC!stjK?VR9+h$3JK5&|KB3TGNvO-)2mv8lg-jC6=& zL;$tnvZA7*6hV`q*t}3hM5ICtUCK61?Q~sI?wOfT2oe#}0m#yRwmT10b=K>^j#z(W z0Vi=uTW|s^)lCC_7xLH!L=?=yLfw;BhwYB=Bu@TCq4d$aYwB)H{Ww$#errvO6+wra z5}e0*{WR5e@qW$PhXfdUpzWOweLD8yNN)A1yg0RMU0=jMt5s{V&(^Cgpp=(8;eM+Q z78UPwafFoX8wXgeR>sy=YnW(=ZstZx)b+5nd!wp(s-A-e@P%H#6&N)DB9DTx|BEC5 zRD?2bYRVIVr+pWF9+{Iwhya3!&J3iW46k@DoeK-3l|mpQYeK|aZwT7N01#DG5(6QH zz#_(~Vn%|6F$5!oLnRTij-pC{B8(6K zLBR4Ml}mvF)**nXIy9jRivog*p`%(wUjSew(1l>s4?mm#Oo$28C6CJ_TmT4~2S>OY z;W801H&LU3FpwDp?R)|t0VQGp5KY!HhoTWb-?3*d52-Vh|MXfy1o|n{y1!e7q(KeNc zq)f8`fG~WUswh>lu03KXBRC5wCkb#cqhx)^2&@S)C~5#zR8Y-?=ZH}03l&8OCiYtK zBLqijZ86D8RRt?21Hi6C0HC5n4OhMdS+TAbHIda{fjF6a)r>W=Alg#rRkZ&>&e|v- zWda?)R5muz0$>&G$(=JR%EqEtGZ6`g5VS-{%;veJNdxzsIu;Q$5@7^YWmsxMh$3kk zuxV&%XWI9Iy-E`hL{+qHnsJb$>q|$L8%p~qY$--i4l#n1babGs??eG1_5El(M#R2n z1pAqQ(xXswgNTDgc7Y(8Lf?fw>LY#g2hMZ2)r>%n(4j6h`K9g20AL zA)=~-)kZgL5+uwD^3LXIq)|REp#!{+kK19#Vy-E`!ryfa@Cha*k0THKNZrw7DC!_vk z&?Yu+o{5Odwh1tRCQcNpfU4p?w+bM{j9jab<;?*RNfDt-GgWOu%gk2e;PrzdqPb6; z1egF-IVFiPAVm-?HLB6$X9xkZLI6?{k%$o$`!e?_AAh1G(#8nZ!B?Q1SotM`GbCb_ z66PNPfc5n&=Au+GE1zdu%|%vTh_Ucrzdlqwp8hAt6#Sh!Uno@lHV<3X-{?1|pY$E}Pmi8jZ8wx9 zsl@U4xo>>q@h?BobzRr>yVGuOZ+~<1&U8AP&1O5>+Xk4XzSETYu9L)^k`l%7c-qZ& zwsw1F0qtkHx3_iU#?N1P;af+J9!cB*2nY~>2ns-Pl&}apKuOn`F>rvw>^_!GE|+0b z0QQ5$^Lb6Gt~wGDW$T4#Mx%hVeRt>f%{$xM+ldp3uCA?}Ielhjb!E1@CA0lQ8*2|g z_V9RV>E^9F)7jp=_uu=#!w*s$Qg1xs0HT)X1IiE{puYCT>p%T(Ki}HfJ9*DNfBu($ ze*EO|o$cM}{a-9r=u~BA+V6D_R)JET837X6G*Q; zV#uDJIVK1I@Y&7JKK$&{ZJvfv^U#A2-h1}Gu|}M+C47LClq1MKatG3n&yfzp^6p#ot8!=qMT|ZYTITu+dp^i++;F2d-fh0MZ!#wqNobW zqK2Vj#pC7|H=vxEkDogEM}P9i@4tWf&h0xJM~_m|Ojafgz4+uhQN$9oOX(~Dh@l;| zlhdcpAcW=R<@YXKx^(H%>C>lIS62xz5_G9DQWf2h`w#8}<}M9DqR?@-wY@W5U2fKw z5NBI3o3yK6I&*6M$RX;L5If=9TbsN6?DWQI2z2A(`TcJH{xe@1O&V1to0(l{Y>&T& zg9DC6&82=-HBh5cW>lbf4%Od)X4owBD^osHb$@SP5-%++G3aP%8A1d=RqeW2NguL% z*LMB32`cH_Z{C>h&n9Q?*}i+X9mTU>I)g$P&(`dBS!a?UXBspOs@TnX<69iH;pwkD ze)`n$mwxn6D%!{+8~e`E5xHP-Q6Q$QeIhIQUnYQCss|SI<)lUnG5Xp zA|Npd01)7yya5Q%_%gIqGukTRfjqXadF40G*=6&`29@Pgc8A@mYx)R_WzRbp$QnI~ z2o(ZayH(z`&=?wk6euXAB*{`}hybLbgbgR1$}EJmw6yg6^G`qV*yCS+{@E9Q_`}y; zf8*0@*Y~@AHscV-O$5N8AS}tku0TY9Vg(n7h+woN07xK^hacw%OhiN&0JWDG8vw{2 zzM;>ErTIViFk)#K(p@8J*3i-dA0I|5+9X=gH%d)2EonEFiw=G&sLD`@nV|&Cz4zSrsV0amY8`AShYOJHVjMLggl?9s zu1r)>MM0^Fo|CC7eFi&SU^uMW<)kWr^7qp`Gg=nh>f?U!5C_wSh=prr@bJu~hy{0c zLGe?U1={*goomw59p=8x*-LVs%JSLINl1zaQOE&+Jt@!eP{08_5@VDCzspdHI2S%4 z+Vq~`i+m}d3NR{_w^+qodtGiqGTdK`qE=7jZ?i=RF{-Me9s~X4e7+PADFl?cl(h?z z&M#Med-gRMWXziIz{NfLREbu-={g^3`pYqbB1i~?k}Oiqvqx;8nSZG-el5wadSsw& z%nvf$L&5G+nSYmYM8XgP+EuOJIj@+Nt`#)zW=Zj2Gd8p?tdzSRVyW)AD|k$v9-d5%Y{7IN1xSc=mRz9)pB#c{7G z8tgToJPHj4B6{b-#s4i=G$8;0AOJ~3K~$3d-{1fGH}8G&!JC^mUi#%vKD_!dN2O7K z0BYkC6T9hTX6E6tZj}^l68x}b0ARDQg_K6k-JPx9yz}<4rK1nrb3c%3N)dxK`dUO@ zKW43?^3UZc<-ekurYKN5W1tX22>99N%~#%f{l@0axIEt3-+k}>OQ(;XT0VP71tj$m zG{ku5$YGN}!r0^#wE?}^kSQpz^r;u&zUz}{&+@aM|Li9({e&@SVqtBX`0yhS9XYb$ zyfH-;&ovLZC>EmwFmI-{U?}bnEEuLb4)F`Zyh3i8(Re(*c>bN2e)yxe-hAu!=AEW# z0@CWr%0mx5w6?bPo43#H?d?scQ%k7*!5{tM@BjYqA3c7g9W~Rg<5bFcYp)w1BHg)p z=O6z5A8y^cv%S6joj>``6OTSVnzVG9QrBA^T2xa?0xGJKvct@hDn*JQY*kDEpak0B z-My_7XHS0XzLSh9q!6g@`~Cgd-p>APe_tVq%5*yAUZ%TyI_sZ$_=zQKd6p~(>MMX2 zI3N=>jIiBJw`TjP0a4!C-|M&^H&I)}1{pvI?oKx^e0XVdb2D|_#?s1zXU?uIub?Pk z=8K_<#LczJg6HXPs2#TY_wFdV0?(JytifW89J!+$2g`yfhYuw zM6qd(96NS=y7Td;pLG57$k8LC&@@dT%frpPF?QRb3Sw&;=PPV~V&+iC2nYJ>i+E=u zX>;lTpzr%zw{C53Zyz~wWO;cxCGNUz6dOtG4e~X{YS)P&?(FZ~xpVi}k)yY7ZvyF= zvu9(BeaDD^IP6+J`!F;c*znlzO8* zt?!e|3lXf`)uqMuBIVw`Ktwh@rSvKx3qzr%Rn_V4R73*Obej9OX0t&m_DozYx+iU# zrlDZwDTEq`uv)hi0BqzzpIB5yWq&#)!liMD0wGcixj+pACgyBGuwTw@}8kx8%vXrf>Jeq#e6w;YyIB1H2&x1t(dQTaiCJp{uO4< z+-0@5)hwm1E^1Tan^G?e5&2M4RrcajUl3okoCZKb6hD<#SJ8yX()n(>&kXYgf`|y^ z{wJe$;o$$vuP->29yHSqLsN=f&HU76j5)P!-s515!bG94p+WJg^9o9?u(LS9xEnyh zINc0lwZ$?lpUb@Fh(WB7+lU54#8y*Gp;#6ktv1stH!UlYp$XNt3{s$yuLnetfiuDt z3dW#{UC)}Q$ODAPA_$mrY#FR9OHBo1E+b#CD@OJQpJ!B{SdJJYvz6;J01V}~l{e;F zo<%`baLB&;Ls^jFA~;}VUY;#h*g{RyBu-fikR1D z5vZVHR8rf=jwAq8YlG%C22TA4mp{DK#t?LM zb$s~n>hffSK}B_SeQmM~cQ&^|oUqEY>mUXNV&>%$ZLCbBpQ4Ir0)-rygWBje8<&X zfTGp5`&j@)B5axl5QtzjYKV-x*f^B);`==>NQ>X3R!}Lz09KQNin4Nj`pR)LolF5q zM4Dh9%|WuQoAZuQp?!o3d9fRaA(kQDdFtJwlpc6_EX2%0imF!G(~d?Etb%=bG)XDs zdjq#Gec$IynX1(qVAXMt15j0J@v`ktecv0EJK~&?_Ty<^nujt~JRUATh*;33pY>$3`5|KO$T=(fD04J1D6L>IDJ_1AnDf9+){RDW$&eWgw!m ze12XK6*l|p5ssF3`kBpk)+`zgTE%Y3;YFte6%hhZRi{Dl6$5V;sX%JiPCRIy%s^yH zCdQ~${>DMajdnj|I=SwC|RKbJBWyRF7T^u!SK%t@l5LAT{eH3VexDS zL+OsR{|>V#i)7Z1^(6(6dh>!2XInYEo8Qr=G3O0&3-cS82=U>-=51zcQ zX(II?i~@N9p>mxUyc!s6R?!=%s999dt(VWe`swX!eE{xflhB+xcIxEu zlYl|A4@i=FNxdRLpq>+SJt&OYCWc5vO^hl6fJm_y20{#RJZb~Q&D(cB{NST*)(1cl z*`Mw`^60~V@t1$Lw7N2z%@l^lv06yV6AcWWbK0)}qxJjix7DY^e_2bQMV+CE z)vH%0lS$jQ)^Q&!z$+s+F;EO)G#*cP_Fj7NhqJx?et)(+T7LVjb35C24{fZkudlAI zEUzptFHe?iLInownJ3HZ%#u=KNiM4*K-P3gq684b<&UqtcJ8$flD4DJ25KTT)U@qn zGy#g71 zy>{c&#<8V#3<@)q-Rbn^?OQi*-rU>WJ-WL7*u#%LaqlA|CGL6wWE)gefg`m*&U=!J zIT-(ay+^L`{NuU9h^Xtj$z-y6X#LcwQ+s=Rdplcw->1H7+t$9+T-*Hf0WXx4n%In* zCI_^dBEe+TSj(roXHX25xexXrecz{E5OH&Jb8BmhK~J1G@!&%b-FM%80SPgW8}O&_ zd#HhXt;lD%GpzA8;SvfaH9F4N%nO)yf0xk)d1-H(eSkb7>3j>Y}3NV**uWttDFUNkMvn0s!u22fQ4p}H=$&FG$c zPJQ>g|MC3!i*LOC#s`UP z3so6Gnx_i&0M>l|TG+Du6P2Fy3`FJ-G7g2wE(!J#_nn}O74wibB-(fW_)vjp zsp}E7X`21%G=|VLO_=q@$%}{-02rqI6cH`wDy;jnPJ{t#nXoSL=eF%xz@H>5^A z84!y@VI4?=sKb2vu$I7DnJi#%WjzP1fJ^zINDg0Y=>&6YJc>Gfjg*ckDCfP>PNbz| z%CnyJ?bQ_Llxtp5s*Je9GJa<3i)eAc{3L2d_H!mIrQR1R#2~B{A~%%$`>vS->}4qR zl0xN$x)|4pr~NYnQ!!#e8?`v1Sm5JY11#)OecZ74uA|YY>$+@`h%mP)uYLj;LLqAA8GiIXrWt6-@;1XTsm&Vz)kj@)&EH60Vu|egC)E88hdcj>v9j>i$+oC&$GhAyx zuL>ce7^9KP_%7Ix)0~Y=j1+(d*P+&BI3G%hmjxBBgSjVVwvG)t5H~_q{pt@6l|J=L z)hE={w-T{tNHO(&mcStx&--BCqP~=Nt6=~=y|UP}q#yR0msSx37!;LL8z^WRH!Xp% z!rtzbRd)9F31QqsL^!m*K5pa6%98HwFO7&G#Mtgnr%G^iZ8=Di)I|_`R*NK%N)L=9 z3kXosr=e}Q90ULeA=Yc?H>^^s9ZgFhGUs$0tEw8Xo0%n5Bm`7NE7TIPF|3lKeFHA*y8E0fgRcN&rh#Zh)EgNQN4>2zwKdE2(4Isats|Mvb&e`C(54po_UoBn_)WyB3j z0~b_-<12VVRBbFQh0rqh0GPP1L1ZW%Pt!D5=qcy43JgV*3tpPxuw1tSscPYKsB})Y zCjPx{^5&asfC}>KZk$%=su$rJaw_HJ8{}?={l;)ue-QjhAo*S%z^uw5$4{Jm_N&h?kC(+vKeHiU$>upLTzUV>uYUPU1X!Ldt*@`GEU&Dr ztc12XbI;k8^;L`k2uCs8xpU|5|I6RMd*Nb$&~;tkPY-RZ|M4IH(ftoSFq`d*BoCJA zP4oqUs_(?#=!@#<;9Ed9yxmAfBWD6j~BlE zyO-X3@BD>}UE&i*j{fy`|Mr_Nys)>od-an~KK=M=+qPf+@|TyFCnhk8sx0WCIA|!I z!)vd;_UdbI-re4fqp_;K`R1FyIrnA=VP$!2)X9_asEO3Xc=*W1($dm5fA0@Yo;q#3 z>vNBTK>$e+6cOn8WYK4?RdPo?dX&Reg&d33qgklTVMJkv_Sn zSGz`pIKqek#B%cJv2Q%{+__5^Zrr-Lx4--Tr4gt;X;bK=xjp8B0L zCr+;52xlsykfXlbVp7LZ^|?E^N5Adm8(sUHgk;C_>eZ`)@c848udJ<3r_;Ti?bLNv z&)ekI2ditC6AUT{9Vs-WBW*15f%t!6Yr3VoVcLu5b-L}DpYNnZC-KWwcxbodRF zw$34gUN4USvsOwtgiZt6>wm405j_yy)HkzmB7A3IUhU_9ieS|tYxX@ipok(Nh?JyQ zKA48-h{&v)0syCu2#y`uIQGqNJp1(1zx$2n|Ih#HKmYijetP@P-Pv@vX(y^gF;Hy4 z+EW3DqA25hYT4aC_Ygce?UHYij^cp-W(T$OBdgcVDX8jbG_qeCO|VV!v}G0Z;i#=3X zXZ!24>+HtNIpMy~;;k8zBBCz!lDKJ_kq8kBWLAAluFACUlZeb_9dqhZpS?=q8Fftz z2w~K=grdq=me=dJp~9(YzH*-ju7J6?b?_}Khe}KHd+nbuyqPU!s37yekxRZ=dGpx0 zkOF&cX?+|#e4x@?Me_-MC@!DtUUwAhbLTjwe~JnhIWwF4iWw9hvgQM%UZD+kWy8un z?X4w?2DRNOF0^S#dtP5OsX%8x*Y-G>ais`VU2|PWb}mt_Te8ES#CxBJ0<(q?LqG(r zBiv#(^7*wp#1ez}H*#VAwIl%|vLZ&T7xQ0!ebH8WtHu)*Kp{dbM~k~Y#uy^@U5?Wb zv16<61tcUGN_j&yPGLcrdO({+1RyrKanc|QJIFv<0ybfgNJK~mBe^;YfPHCwvX||B z7Iz+!lfH|6-;1I(UziK&2E%0{#@6FBDebg6)JuASy&r(Z+5tDfeq#OEF=u^;q7vsV zmLg|Z$_!QW?3aAH(10FC2LMWLN<^9xo%$}QDyl{#&MnYr90&qR!DuwVsyv9Se|Eq_ ziAW2)YyM0vi-2=@W!{c??j9fn%7BVZR996M4RLNpuswx{Ko#89SF6|Xpf=3E)WOyB z|B8r@N|Xvj(<(R-5x|_rbid6dD&GL0l*ddd8BkSk0nGcI!%7}7NcH;%zp7HBF3AJ* zpjzLst5p91z;HJNFeQlAu5UIT0BqA46jcKb<3|?0(J~^g{i)>KeBE57+6VKgQ6*3m z9=CL8b!ika@eHs{EFr|rt(}0Bl5B2HmzH$Yj+y{LLB76bG#SN+kW!jN4A?XX+|43o zG+#{#Nyb1CQE<)?B*eCDSJv0Iwzs)Vcyv7@A{0YuZVE({w4e+jfD!-~oe)aZ2ikY# z(Y#)c{nD4@m*c`W7R{A^^D+0|7F9FaRKG2%%|W?uh`d_fABdOH}Ou4hfhc zwcu~aVhO;N6)*1@d}aWHdLa_ouzOX-s@U8UEm&Gb+*2J5K0G%ZIErQA_9?>nOE3u$b7%9d-Ioqm$lAmJRNGW1H!tuW_4AlWp_raBe1_j8@4o!Kq+LiQ& zt!-!>eis!wL{0uhwG8X$HF!dy0x*|IONE6mi*Klp7*Ugy7(=42$m;C);8J*;N3j7Y>m?q;K@2 z+t+^a#w#y8`TUu~ClN?yNf?lZYx>o2uvXwdSh-*pP-p@?>e&cRRbg z|KZR6?16_K0>lug8IAUL_kRAfU;O&zS2ZQYK%|F{Z2Z;V{KvCFKO)9RZQI_waqGYS*MIongDXpu)xY?QzxvX>_uamI`=uZM z_~Va1ZpWjipZV&yzy0meWb)p7?_Ig_;ojcfBab}t)vtbKJRa}QrmD&!=!w-5Nw%@M z^1xWY>AaneZzH~80P`$IgwRg9tNptwfk>@v_ySu%;xwCb1`&KudA}ayJ z7+06qP9HhGI$mB~T3;DWv=ixiWE52(h)_uAD^F}u@aA9j-qnWYpih`(K(d*>d-v}4 z_BO?E<;s=!-+%w9FF%n4-h2P@$z#V4Z)|X~yf}a&70O^$H7a=kuu8P8&AUJP(T`F} z&p-eCgAYEmcIeP}Ja+NWQdvVpf%5R!(P;GSv(L88SXKA-_HNy}wZFd~09TimBa-wf z#wdLP7<95LUVp&aug-rB1O$8C?CRBPJJY?y970$cEj{wp`$wS(fC?HSw&T&!TKwrQYi=>ZQ)|Bla6qbL>9@9yrctgQGA z+t+!T5Gs7!AFWpM0GyJjGNK$leCV(L>d$}on_vIw&wlos-@G-Qrmmay{Vb)_Sb25` z$jTOR11RQ^41UepAm*Qyq)6$4JlFT*R;<=tINyNpA9rC`SZbI2`XdXmY`%?|WudW$giS{|W$Dv7rK^Mg^VCdQID-(a3h{t6%xbqmMlL zpWgl3fB452zxVwgeDu*(#h7{~ZP8j$K>*Dk9|9}aUGo}PWa!#v5hX$=-xm?ALPBOX zb&BRTCvMx;t$DTe^|GjW{>(ka0Dvj=s)U8u$DM~P(vsXKQPr+XrB-10fvVK6aK^cc zJ<5;Jb=K=iesnZid^t*OGQp))+!0C8Xy!t5biYyF@|LpMbdyEHi@Co&KSDjt7qcm_ZbEnE2t&8l6>rY>r|#v zcPGq>82nUv83YlkYdf^Nmg5jiI$(#=7pfjy<7RAG6m3JXOG1 zt%^3>uXZzMzvLv2>ckv?Q0C6|QiD8ke3;8*gp!tt@^4qoVWX8gS)v84Rj}NxbGd$z z*B1gt)xvCx)pSl>`aNj@ait(Bwj5XujY)l<>D~}^o?W#5y0&d+T@n!`w8k1E2Q?i; zL{`2>L>K}oc_RjtgrSOH3`N3tA=JTAMd&{OKx0Ezgo()Kv?ylQe}!QLSf+tMLu|N+ zNMjBAq{=L0xi7Hcfl3&l6y+_rUkm<0EnZX-kG1i(zcN@yYTfcMgqL){!>e67y9g>o zie0h=R&|t(a-l8&sER_d0cl_emVw7%&Sf;s>u-a3BfVfGiW}k8M&+&> zME-+YZmk$SFmDh*b&_2@`BL}=t51O|0+4+CLI}pIGPi~>7+PC2Pn#@UzkK!JZ6p<( zSNdQ`@dCn#SYNGL>Y;13GP<=qpfg|sK%o{D=M_anE@cD0UobD9B6$jP{;QVkLKXIl zRZ#kV8DOMBBn`;&codZ-Ng!F8G{%Ioy1LfQdO%i+EG&v$*R70~6jO-Q8Y6|UDu*UY zpU}NDEakNJFBcCM<5G68Df2BB7@-)90mij`b0?;(E&(VYshZ)p7CA(Kkms2J0CL$7 zBElp9VwA^bRZS06do5mrsH(9s_A3-oo41qqLV5(7qYBmvkL33%B zDGje)F=Bzd!=?=vWXX3>Jh40&*Q%hV5<(FnYEW#VYqM~{&wbgsZkr}yZ*Vh~(s-^$ z1{e*C-AM?+=4t1=0zgVbdwaQO<6X&f*sTV~aWt|TG$a)@7Kvav7|N8>L=<39wxz`; zdmepCb{UALp+M3RYVJfqe*xKM@R@1LW|cvyY`#6-aK~f=pzq5G8rvFQe<6P zUjEuQzkcK9&42#IFK%z%L87zw-upXWeR_3$txr86A?q*x+t2>LfBGq>L=XTq#_;%) zPdxYBGZaJDO|^t)elBW`QI|t0;P^pz1uHz=Wx2MqIPb94K1tIwdwYAYyz+35^%fI@?FGCZ5`qQ6YzkcK7$&-Kj@BZznQ>QF; zwJpwxe9Q$3OXJDj&hD>%@yp8}e85Sbc=GYT`P;ufcJjpD-X5@|)X!#p*UfhK_U>+N z-rd~X+uh~VKlS8OE32y(Drb>qB?_QmoO6*B12*GPrzwac>Q2A4xqWwY_wLQxH@5C> zrLJ#7d+fx<1V@M0){m_ozW3BU>yzb%n$#z-vE}oavI)tp?aiOP_VSIL+hH5?*lihzx59VUyqy!qGFuG+%>+Hb1j zEP%>Gt5u50d5m$gvMe{QU%!6+=Iz^WU$}7Q%ozZKkh{i-81S zYiD~hS-yGm=DD{o^r~SrUR_-aA$X|=xNBWvpBUq)X<}%vUAuPY&YkC;dyW*|e*5h! zSFTtWe-lI34{m(D6!khl)j<+MK!UqFTQ@gvF$zUWeK#6S?z`vgJx5QHfU*$6bT+&C z+0`>&I-?QazkF$9<FOH;Ag{ zybVp4rfpJ6A)+v^t*^U>V~qm7l~5T|yQS%L@5qrOYinyEgcn|T;povL_4-JKDZBQx ztfy;fUt6jgPID42(Eaz{d-%x4v13OrTzvP|ty`#yDnub5G51>85gU=06$>bkoszj! znF_*uT&bV;PhVJHRezk}Sq|u>+9Vy^zWQ70zt(350P^5+1ptUK5@FkpkU~G5BH}29 z*|d)oSVR@Lx|&o#Ap#o0+4rn!RgL{4}SR4um1VhAAb6& z^gT!`7(y@(30im}oX2+k6njCUc(EG@00MX%ft1-G*{ikzgt-@)ODzzQNMcT=%x!6F zeSK&Vz=>_clNf|VM5>YyF%Ssn za!yqRWi4O9-OQX%cSu4AN@VL7DWG*hg=oH(D5F9QO}-kT0xHOCw$GfHnK`Lqmw0=Z zMhz@auo*|IVIQ>UJPNPH!*>a+1hN#X&9`!EMU6#-_4;7(Oa00z4MSh;4as{?IamK6 zqH&VeMI>;*^t++2g}*q`N@N9?s%kxlcEH^PAOJB-@$QEnNB51Z_O;qdQf5b-&t%lS zV*ch5>C7c@{m%WKT@QE^Kvku`$60pG+Aa4zS{OxDn;R_oBR`|jdqng2l9C^;AhJ003RdDDB zXCr|>5Ch~eAou+Z{cHAT1z;lq$wNBqV>WDMUhEJ>mHWQd7ye(71bLvOw^1i%R%R@K zqYE?wsM%~nW(K2>H@Z?KW(H9J70k^qS{!t`TS1$Hq?w!w=RX_zGrxda`Rw0bFkhwjj z0;0hI8|i<|528biv0$#M-5l&R6kAfKKCmj=Hkqm=Vd0hkRR8nyaB9^&DGw?YY|uTP$kPdqrH3 zZ?a?>imDylEH9HWXTlu?mmdemnHg$cR1Jix!l2x?VR_U<=n3*fTm)p1NP#Ap5{pPu z#Mq8w6DW*Y<*w6EVgt0=x+KP>ZbbwogBK{zo+AU=Fyj|)xBT|9UWO`qDNkBDbnNL+ z)wp;7AR8e=3qdWg&-HNu0D{vMp~-wa;7{ z(#xHjqBYK@VfG?`myxP50OaDh%IXIs0BGB`mt2hqD1G0Ha1*1Y-%LmV?H~`%y7ikB zdh!7T2_ek7PAW1`EM=-hlvA2zXPxw_hNVnh(KMxfGTTG)%s zDRJ-I{wgT$)4Q9MN;=c;s!lU3sA6-7E2nKxEL!1TF-9)4m9ex`*Gk5Z@S-4AtM}HeVB}>Uu)eZGec({cJWPistlVl`ciZp<_d=ePT$WV2QUwc?062{W^G5>szYZ zugcA^@2R`&3ToA?_H(@mI@s>ql1~-gVF;916<7mYzWU*~5o}NbvIs~71r!Vz07Otl zRD}r!QS>!rW`T@2ScYtfpAjr)Ls}S1RD*H0M4EDX`^tNX^@XRtwnS}c5P7g!zPXZf zvZ|VgXZngo1f(bsVhlp^{wG)7diSk8=n_Gi@mjn5!dJik!0CHK0s^9dpWM9q%3H5p z{`m4ocdp8q9((ZdF*P9EC2q#epM2-vv~76t`#;z?dgOokU;pP*XHE%f)5d`G_8V`$ z^!*oiwsr#kch=tQ=d$C-6N`wfUqD5*ZoGFE$@jTr3vf`@`@4!5{x25On>Vlct%hiaH~a8EiOYaC=+g z!jJ<*ZUztj1`lxMUNQ1VAAR)mpZ;QPZOyr^kKxyE{IUyyv?qRuyAO80|CfKo!qeGo zKA-np|Kf`;zWnmbDW$|Q$3@hOav5u$jK&1`;d}4@{r~;Lei2&lzxSQrTboU}?^;A^ z8ydB^j^tcQ9HHo!#4*LbUx*9=Z+mP{Km>l&EW%>@!Gqg-_iyjqyS;sH`|!cx;*ce^ zqjqby_UwgAr;eXEb?nsf^&=jfON>ck*Z1>IQ-d{W6tdRy0H86a2M-?H+umMC7v_ie z?%WZPgj(7~sv4+q&ij@cA87*aOE0|mx^!u0XGe>L`xFs%FwANQ%1G**Lr;sv;_z_s#1l`PK6OS2 z`;czmzIXiSF)fE&0Rr^r+8{;K`P;UA`|Y>y@9vVoojZ3Hhx6^b_fkq;sBPO6vrt;` z;p=M}Dx`dS<)f>YuU+}#S6(`D{Mf7BKYs4H58is~?Zv$B$&oCxL6ya}vPM{--~mY8E8Gl7 z)6}&nu9jfLyx;e! zgjDNAS9%}{Ib@Ck)FQ8AlgLqvdK45no`*^&W(_G3iFS`bnJ{%YIFAhsBSR^D++8Foho z$VI)4cM1qGbBsL^bY1ekRbqOrSV}R)K#p00aCC$q5JHHY=H20Zj(un+Bl6V*Hd`00 zJm0)2ms_-Bsk1QvvEDnz!hQR zjm5e%5u~OymGpKg7^|IN)`j6_^MP~NJ&}1DiH3=lyWJVt+gGl z_>Xx9Qgy+yv99(m2GkgFuyoYKV!ac};4cWHND8U%d)+3J$pmfhRH7*+HCD3`u21Nj zM)wPq9&}jNbr3|dq}_h|@hOKd>7xMv01a0sq7bHybj?a(8xb$pLX-E68CYsXI zR1{Wb6DO`Ng2D+nwI0`}?b@v6E~X#^gy=*7oeL=u3ONQ8B#+`aawO5)6QUzU%$ZXX z4T$NcP=?QKSP2BA%xVCD5JKPe1sD@Ov+FvQ+P-b<1&Ii9mTRE~bFMBy0DzQoFCOol zj>rOL07b$DQ4J!{oWyFqR;)=-jpaOg?*Q0)52&4nR(HLo0!TKkK%Gy3T-jYShRG}Y zCl;UFI2cKs^Cg0n=f-(WCPlOUHIxbfU?W_OJ~3v!sQphBg)Bpiw4}(vqrAk2k37j5 zplw@(#6kKH2t}(QuxfhXN_9LGfs@-z6Cnzbi_yTu%>Py;jaBB(vPXwfV$prylgkDK zYqNu*ya9k?>bcjb7$U}$60;MDF?!b))1k?NfwLtc%lQS&OHdaTV9t3oApN7N+u6=1+9q2)*UP0(#m|4M1_&OF<4=HZ(cN1 z&WUjs0B{;GO~eun0+9g=jwUUQC5#|ajA=tZYq`2y;*c+h%Ydws&z4flW^K#YB0BSb zVnPy-#AzP7-~cE&N0_CeFbjAP!IUDnGW4>7k8SO&yq+rlj4=`+mw1@gQsm+$1O~y@ z9d!K%H?JO9Kl1q}pPM$L#KE9lV-KtxODs3dtOx|)+ELTR?w$AFedEJ7I*Adv>(a!J zo_+F}v&TwdJ9~RS`T37Ox^qif++OUx{@xpa?%8vf#yE<=64GeWzWU9tA3e6Y zb>!%|i)RFx0iA2!c>P!Z>-YbLCq1;)M^H!Vi+fJs1o4D)ga=_GPuee-+Y_{IXb3ju`@ zFr>KPKCnbi2aALKIN#pgJ=~vnvESG@dhF~aJ81>rGd`Nz&~jMqH5J_ZpPNLB@+9;UD@N1X#v8E;DqQL8Hb*n8i$ZQHh8*QFTS zrilrdSqs&ZhU8;vy)SO3+yl-Co;up@GI<>pAf9?9US6+FgX&N;@9)2EU05dEH z&Fg>=Vo3I=rO<*?Vnmp(txcyhMar3(5D7?U(C9UsbJpJH;RUKcsYTF=Qs63>S~GBc zSzhj1_Q-XqZzSb_!H8XQVQO#+N`4;_c|-?D-aGFE^5kejYJ9_qb$pL=K5_rBVAK{# zgvcN$$RI!%IUMZo#lCBrQS5^w`pPR`K6~!;TW`Pf!yo?ifB&1mz4h^J-;Ne6Kpqf9 zkU0UMbG7q0^ky{**uLiS3YtY>C+Nc&Kx035%O%qG7A(o8u2lrgg4C>5JE*kCfYMeT zb0k=IPf3&;?n}lMwu3~Z?|Wuj5fK5)Gc_~J7S1@lexpG;0c!;sB5G=zlCBhDciuNd zO&=B^#1MK(F{VyZ5{^g?go(gA*R-BICQcy)1WzKG6C;&1n9GiB{CWi}O2P7KlhXJE z3kr!oJ~tlU`j3_BJ!})%=<+Zz9QZ`OpGiD=z##qlV;)&OCDF}05v}mMNnIq zlJnjrh@4miM0+_3pp@XA03k_AgoK59RAo&If=(^Z=T{1VtOW+4@UZ7Cph}>R!wosf zI0I;>j6MdtPC`Kh1Z0sKi5WbNgdRL6g?iQI5G}Ys$n8@}fQk>Mr20t7iW2FQ}beMmk-(LhMZhzQ8p`xO?ClsF+Eq1R7H5Rf%Q zpsi>Jqt=zhC1i=j>;Oo@WHfRVA~3j?IXM#2YA>KZibt0aL}am8FcOVgMX~|Jfe=Jp zM{Uz6B8Y%Qf{?5G5s9b^A-hj8wxdxup94z_+14TN$h&Df%Yzs73L;S$0EK}C2z_GR z77PF^%pf85gxECb5kNcc0%^AgME@^owXc8+hVaZqr1mUJ}-VqhOhym25Tn470Oa>^MR74~tMs!`*wXJVFF(+VXoKGonOs?@U zCMY?2gdoDgbxr!xTqzMma0Cc|i3L*9W)Ddc0x8a(q9BqsXk!sao>OAU1AMa8;*pVK zQsYcEo&LxsUo zUkej}0!g&_HKCMgn--QgFV6fBtQ=P=!Ky0tX7E+?MNP)a3ZRVI$x?_MWAdd!6H0EY z3TY~RV{2Q`1OnOYf`TssfMyC~!SPM1LxonD0Uf!FpDy#nnK_A$Qzx#1f2KR~yE{xm zjcYtQbm%>aa1?M7S;If-hg)X=AkF8B+Sy5~4grWV2v~MG3L~LcL5HY1S)`cG$SBBy zAT91J_J8sI>!a4c@Wiui#F&B*0c2YOjUiMo=iMbvYZTFehaMI;c0PXn@*5BO-2gEr z9)o}WiDy3Z>}N*ph;w`_`SGzV@?Qx9&M~h|+h5PdxR+cmL=Qj-5Kug`OECfrTh)?ydbI%?4eP zc2ZkJP4Gg7l{Zn5^cfBeK`$cdawDhCh+1W}U}s1NmObF_{M%(L=R2lwVz2$5k=;^yEhIFZhd@{fEsFM z+)n)Hg=e2XfAVaRZy+F10stdAWbv8~fym6`>1^6;0wSonq?$8vYJB1tk#Em;fBNnl z&G^tQ(lZw>9XWaoV(R-|bua=Tg0{pSWQ#x%8l+%%SqP}sr4Cw%DefW!282l0OM7OG z#-lAdHrv|VKiEAu+`oP27Wc_JHyzJLzR7*769Y1!Q>z951b`eZy6&C#-hKRu3&)Qi z|MFK}`Q_`sdhhZFTU%RKuYCCadv8DY+*5vY6P;&PQ=x<_kXUjSK?ESR4IJJ3>VB<$_(HQ1ax zb^83N^P_eOEZ)0L`j0-j8J#?S>4}eST-%zhAKN%G#qq42c;{2dBMhutl(2x1cOF2? z#H(`n8mnc&%)f$&=KFvQjxJVx@WBxwdGA}_G~~L(vFq0+)6jRWX=kIE07YR0N92K= z#tWR!J1&c2p%~zux8MKp!w(M*4gm4k@goi;Rvou%6$1dm=v@l{Pz|Wi&ovu|OSd8b zVM$R01UYiwr`_EhL`*4ok3NT}U6N!VJ_!Ig5E+IHL+;*Up1Rigns|9wYDtl__VD(Q zE9caotVpeupL5kG$L?k7-lD&xm7pNRKn|U2&^z)TMlAvpGjj@E*8-xWdF;h`2YCcV zk_zx*0Ua{}K;(4HGzt(nNE{Y{15@J>v2EK6XHH)@fA)93`VYSJ^5_5j&;R_r_dcA@ z7ojKDjG%P@gh(+mkz>dKOCZ$1HUMegh8SbP76egetPgZRM60$`!Xct-yzVK@&=)A( z4@3|#71Tx-PBcgf01i26Lc~&3Kscd@c4BQD<%n#GSTIC2{_Ss+Ktv#-lSPp*h8(qR z)V5S%2qGXH0}vwmf(|P*Avk1)Wf^F8kt5G6npw!qNXWvDT<*w<0zwHGA%#A~6hr7s zL7oVp0Fv`D^#~w|ISHa?#?Xh>J12k)kkkeM@=Zz!03|2P<`FwZPz>FND-m6AgXJrF4eB5lN(EB{CvvI)x}^R&RDGIrWw~YdoxXsqN1pbF0F3^;<*I z?Xr4{uIrRO%u(yJnG=`R5bDx~(6wy~fanntIKmKO5>QNRHk}+p#U1E6z0B^H##K|};}^sTO7 zc35DLosT#^?NoZj01y#ysmX$6V(VF4+R7@`LI@&R(@hnCUK(hH2L}J)m##5Iv zEJQ?yg-Pj^V+NBfyNG!5Yl)f_hYH*fx`g1Ah- z&F_muM9zuCltY~;LYR5Ku#k?6MGJ)1s!^{GMK-BKws$o7Zs#Koxy`Ad5_#CSuNkSw)> zlv32)q$w2us}JBHS2Ek7sz@Z4y+C;*dw6>hy@l$7{G4dHNOl4kS(p_qu^u-|ZTn3A z+8)8>+ST$#2>{R~hyWyK!ka}h?9N9Y zQZ0e1;oNAJB(lrC{EZ^23B7Mo=+l@)?j zn+U66F=MxB8pOO2YyyvN!+JtgE!ag^D~pM!ZCf21D#B2}W#^o6p<#AVtUUwKsCa!w z?E)ZXWW6Li_1G}d!T0~|_uqWuZS5hj=;!NO8^8bi z-+lV&r~A-rJ~AvRyE=Di5U2I3t+)+Ks;9U>_P)0CHC2h0@_nRg1p}4HGWl#*Yui>+ zCqjx^vR(fQAosE%2Ld8U-}u%yzy8fvnK^W^>$LI`%jM@I~GzD$t|SvVu5*4AnfXF{xYVpYrZeb3C7p1R~5z5UKRH*VZ``Q?|}whdbR zvFv8s3t|D|T!umtGm~>|J34df^snE0b7z0=(xoRiXIpE{WMew>&>(Q&2nf4}`-|A` z?eBkb`}X-$XHK3x!uA6;j(?s3kL2hix>YfBj!1u|c?9-~ao6 z_wRo2gCCqYaUyj6lTTgx-XH$)`uaL03KG26xY{royp}@u@7}+5`O1kCC(fNa_oE;E zD4TJVdn*odxIBg_FEg#Bs^NvAK=XPP#0yM>vX#vvl)x&bjbLwQsqk(pa6 zYGl%t1zn*`t?5>%TAx$PG+Z`ljX58Akrk(P|U;Nc;Kl;hu z!5okQNC43}%`2p0`}tB+vSJVG;u~P3SVRbcyj!UeF)@;=_Bb{uvRFz>6+919jH{MA z%-nUI@=r+#T&nV^7txl_44y$W6+^2oLIOnn#NxFz4-}E&j3B8@Dz|;AtFOrlnxLQ$ z+;v@yF~+{)sQhYu-y^yZvO`zDz6d*K&HYf}6vceZ5am2OG?&WB@=>lvxGW;T?4pX9 zrSe|uSv95_vQ%8o6E|a6Nn}=&*$J|o5NcO2%A5OR+Q*d3!{V_vS?kAuVrrTjg_Ub> z*Rk_;jq1;h2z3D&mHdpAyVT}~t2$2T51H9HG_=>Q4+Xi>w@y0x0tUQQ@thOKk3N3k z++)X&kK0Cs_xJZhNCyW8BBCxBI!BKBE-n^*Vs3mREFp$Igu{8av%i0TXYax8UX01| zFQH1Rg=OUG|MmE^rSzGI)y`+;6bEAtmPec6V8kyqq&N4V0Jj57E+QeMrYYGyRY;Zq z6AWV7R!GxM5V7wS5TTkCOsOyqV`@3XS`FZ`drU-$6EoZF&fHrhZ#pK$2oaSRo2Ib` z%Z$>8rfHBIYhIEr4Afu*WLZqasZ5W}x^}6kU!|G7vW5gT&C&uIpujW$A&Ta=0=NS3 z6G#*xB9ElVW4t+=6P0tBErk8^_vd8a?`dELI}ZA zqvdQ;HVzf$CdqS1YdT~i5E_PkuE`}xG91ID4N;r7z90~m~Py?HTmG}wPtei$O)GmvL=fOqSJmTM!JE8 zh=^qS!SoxFCtv*R=e9Q1c^`x0{0od6fCYji z0;e%FNx3&j-^Dk7_2w^r_Hz*&wUZF~cGP_B>%aT#bI-;U`B9~L^-5u7tJH_>yIOYD z!Or?~yR7}T{;JkZ^?z&rslT$Ik>->wyJ}iv0h;tgNY1WM z>_d!Q-!Hl@^da^A(e^B1hzqyaN5?1O$m%LU3^V z_TBeBc(3aYTf!&KU)Y?^bY?(CpsF2aa$|+UrZr^MFsNgz!*y0p%bO)7k2#G!r4af> z==-(l?BvOl9y564oJ&L5Cb1aON+O~F=;_m^yZPe1ci;Q*-~Z^$nX{Xln_EYY0Lo}G zt{Fyq4%+ie!OGjVZJK6pZ|};LEBEhiU%K?<Q!8e|fQUU@=DX|P-f{l$eveyi(yIr?- z2!TOj*D=Q)adT_)&;H?`eC~6f{U83v|LO04{Ij>;dGB!E6L`?U3jjpE7~rwKY}@*j zlA@w%dHOa~*1J?;bu9M0J*3g0HWKo(mbsnQ{4rIf{d$ZetE0Ez*i zs7M_xwlx}{G$3`6q{7RLwzblSs*bxhAuK(shJ9j;A%qxX*Dds6u(F~l*Q8U^G>AD) zU@vZmE8PxBXA>|Kv{|Z@U#ZVhwGaMSi^^FvvizmkbNUX+Du2reC1KOiVJAF&jfagzay2AFKT$N?_DI)tt@j%n>zi8}$Pz@o903bG)n>8QK7Y7IP^}X3-G+G=Uc8pR74qaX&gi;Fm|LgFjqA;8TW)*Of zFqbF-a){)eEkouQjs2F4q{NYAh;5262!Uv+d(zByp}bRLc`+$zAgyci;BV(eQsRUF zmDW-^GOg9J!zPCq|=85(7J(C2(LX! z%|=B!qS2?W0hG#5tJ{@gmC)Wa4aZQPr)mpO?{=Lo=LoesjY!T=3&|B3VVepOBa3rH zCXXIqgCU4m-#WooDBq2uVu5ZTdwr z`si9|aXL$+1z@I?S~+H0gc!Z|$^kJ(=Nd%RwpVsR(=0~G`gUbg4|1bs#l8=jAZ72XgiK}5 z6;`&p9%;z&AB2geb=Qn)nz2sm)aQZ1z%)SrA|i=Xy?>#|PqVjbjbj!YR^yCZ)uqn1 z373ey`LVQ&YSl6Gl#*{+Gg5h|hFfZiYIeNIOjlZiVR3KtMo`uM!?KTUGEL>%Xfzt) zI*=o>A_6#Av{3apGowXQEi8w(py$J$f@Mq`U`a);yw|Xujnp7I!a?(tl8P4qKqru4 zdbKeUhRYvc8=?Q=^Itf#LLO*^y0g#M5066guDD+)ebB*_cpp%iwHGLnt5P#>D zSB@Mxl2VGX_ufZ^o+bC)Cj#a~&Y^S85g>b=ufZ%V1Vn+I$XFcuDK;ciaO4pwrY^=H zDTOF%*CCe1Q|ORIJhiQV|MG|LeDE%|o*EjDC)0M+`o=joo=%%l>l(j4nn_FV-Mo5t z?|w+}=-S5Tp8w3O9j6dgUf7<-;)2&~Y;q5l9s6pP2SZ)Ns-cG^t}g{*0tz0#`1r-g zFX-64`Fwu$@|E4)-6Kch@gv8XnL`u+Di)VXB$WWSZr%FT>%aW)!z(*GJOAh({o}_@ zp1gA9%3E*0dGh2*73o=URXm^!7DBjx|Nh3t#@5!>_3PKKUAy+!u@i@fht9b_{nI}^ ze)2JcwvE9Mk*j7n*=rL3fWmbM03oEcwY3vxPC4fq-%ygYh#oy?CRFQh-nq#DU-;Y? zZr=Ii+}U&e;r!0cI~N~2pJH_Au=HUu=C>=?pFmNFwZxX?sDLc5p#7K1Oa)EbSE=&( z&wt^`CokQ+acexDe&MAT*VfiE`W1UZVM&C(z95vJcU|Y58&4*a$)p*NCbMZ)VQHyG z#MHN@A;jFm^y z>R|z8LaF|wmP__wy%zO)t*mLiBkVeairGmQ0su@mrha_}z#^=*-s9P{-#^5pL_@3m zbL32$8-M1yZIu`Z0C_AbWSXd&!0X0-~KoM^_%a!^H<;h>%aJ) z|MHVtw_`+fPIaF~nl%Z)Ud{3-?Gr5CM@=`?zjfr;<&u&@8G$S_0USB&2nis-q78ba z6z5s!!WPTcdN8OGgLZ7IL>2*BaCAv2EN?M|L36Sppf+-A+|Yhqm=%bJQiy3^nKxmU z43&9e=Gbbzg&r!?G?Uaguvi*e`vOSV_y&a$rO1g4(n$r^5>bqGUFp&^V_22y1A1eb zn+7{N=QNsI8=_LMBimLr>7**>HG)g&Vp&0)`TP(9;!x0LOkxjQ<4g4&ZSANE|E~xf z%y|iejaqM2d&k-ZHuSdsFPDC%d9Zec1GrL0$jikp_T*5~gkia!Y(>bZ!qTtonvilj zg}$95+~42d-Q8Q8O>i>xL_{>1OkC5Z6jUVo#vy{R223%8UN1XcEM~LGcrp=?gM(u? z@7(M99&*hIKw_KSVy^e6IX)FIY65x);Ba1Vm12k>DFHK-*1xn2)!6qV-cO)6n z5D`SCMk!0^FfpSe%V(x?*vkz4WvW^;BIKbnLgt~`L8_UctUZb3hI-C5Ia=Z!hk zxvqsELuHVm1I$tHtn0;sI%UQ?Ppl{rItM7sq+n6h&?O?K1e&M{)!J2jgv8P}Zc<#;BPEDBOC$m!N*~gE-pxiWp(i4xvxp$& z{yeA7CMhok&~(XMHObUYM$GdxYKwuHRWzt&3<$yr0R%;WF(c3nrI)CXAOZ=J z&W3^n0HuW%tI8*bI|K2~@*~RuU^}`_gV<3#1vlDfg>ViLEClBSI=gNk$p0T#kXfE+=CW5mxxA0471% zzTIxf-K&~U89zgTM5)4I>ywolHI|yK`O+`a`bcE1E3aQ0PBP>gM-v+M-+E0Ai!psF zWlF$`lI0b^&Z20Lpz@c5BamYeB&Sh095-F$cW+(^%-{O*?`}3z5aGxI+PrzN-AyYo zO9Y*&!`oxQBW); z;NX0&@Nlh?YHe;`)t5DyT%T6+UM-^QN5O1_4E$qX$zWJ6UCjeYOt1g^=l|FL@qf_?6{5zo6(GalinAr})PkT%_pkyAC+y42qCGI zlgO1QkdlbBwYBx)i!U+5-~HWdKl#Z|nx=WM`{3%;s~0YuJ9X;Ru*%iatJV%7+`4t^ zwbx!_=J|ZSzrWwQ=KT3{ckkZ)-~RS*UVZh|C!V-yTql)LF^D)3V0K73KY*A;w(s9R z=ngJCeldX{kwc1I-!u&|MNYyppZC|UeRQ~gc;oubx8Hs1(xppb(arY{z4H!<6aWL@ zDowTCVl@L-E3%XiXzNwWH!jKY_O034Atc{6U-{}+5#4+~@8*lqXauOV}yn5+=d?Cgw!?d|O~ zP17_@j6pjIrxb;AX`0$Rnlh*hWMmEK4fA7I~(m(UmQ~%XJ|L5QQ+BbgiAAb0+{>{JMzPA%oBu6aBrO$hPQ@vmw z%e>s@!FH}gA|w=WND7@(6$!&K2*|F0%Vv^ttzn3@<~2iCKS`x3x86SXtzFQSjx;M+ zm04wmM>P#OrOLVarCup^F9P|4%kb*WJXx~%Fx@D^KF5s1g>g}-5#>Og05YWNT^UG0BFdp zdNyL_zVD^rhBcqya{h|R8C!I-)h)Xj5e)}JM9tN;EM5CKml`jw8lKibuwGnIY%{#| zu*az1!f0;7&6VZ=Sc(#iPqH9#gRzv!E+PU~uir?_J3G5u8yk)H+Ics|$W#^sF6jqQt{-NnE(*o(0ZI`kkBgJLsYzjVF21vDJ}HgyE^|4 zGn>{ZkNsWVrVi{Z=>U^oP>lf7@4!LpJfqgo0Yf6|AcNo>g%CtYH1+Huu?PsjSe#81 zL6V||Vd&RT%i=0JkwnBV=kOcnp#|kA&oq$Yf-1+Wvzk&;;)tLigqXm21W(u`#KyNV zbij$oOVYV9dA+QUZ*@%-%~*2<6bpmO8a=F8l@zrDoPSF?&u9SkQHDfCL~^;dN-c?{ zWENQN17btglz=*+NR~bP+TKM(^~<1?Lc6+16A>zB9&JDbhyVfPyGKrf;B&`0hscua zGfE1#(g%iqi@HsSh_L8+^K~-@okOEaItHn;14KkOx#?5}U`|~6$wp!2ZN0Vy%2xJu zja-<(Fd(De8lsc0%1MaGzyOR0;2>#x3K0%W=A|$Iu zgK886jlS2$rGWZLB}q0hlLO~G0K^haK|~Zl64mai!N=p)`wYXy81nwBjOH3{sMiI{ z0C>^&sMNXrmzO)uslp~yWE6?Od#{0aK-M8zg$}hPF@#c}Xnnn=LRZGg<%~kWPpM(- z5D^eZl;?Z>h{a`_=$BlNhyWZlo}wQ5%c(aCRtxLlw(eup?T3 zgSKr`N~W`9`Hon1D#ucaB|Pi`Grv}-SJO%=16`-jn=Y$F+!B(-rFpkqgoeBcKt#r& zmA*ZRUAf+#RMG^Xcy|MOD5BhAxN5ypMpZLKR+b47(EuOK?ji&MZPB2W?2_%1Qe2h^ zl3UFnqQ-AC2Bl3)OEtZy-om`u0R%A*!N77gLe0ksBBJppqZmsf*8oxEh>j4QIO#(A z@RO?>Z?1po+0Si^))0Z1DGflj8Q=QJcryLW3!h!Q#Sa#H3AiN>UO1*+79h}vurG&) ziv<$J82i+d_lmnYM~K8)Fak7|rXhc9ZS%9weCF)Q(}*O%NX^N!XMXQ{-@CuJbNiD| zzVZ*ga_0P*n39U7hZUtU)yfjr-||E4hE2k(T*>}=_(oXJnfi|Ps=d=n001BWNkl-dwa$-b@DT=UwG)?1M?W!zi&z}C` z7hn43w_e>kwiQB1DTu`y5m68joJVY&Yj6?5?d?0aKKbO%y*r2Vy*@>7G+kRedhFPl z%~R*koOL7O#9iq6dB3}}yRor3nT#_c&UwaXjbJ+003tg2{EJ^Wb?L&L2iy0<^6DN+p{q{S%yZbM{{H2Q*FZO-EHktN)w7cuhGl^;swzjr* z;>1bv4#{1(aG~-3;9&p4xwB_apV3WM-@1O((P;F-3oo2KdvIP zs;B{}gXk+qEf(qzS0n~3yHt<7n!TW%z*P(eDxoJO>C7Qbr_I!X33H0*5D}dA z9E_2Lz4tPob7HKhS4&qIl1yafT>t<`C18Gl$V}jpu;wcu(ZS*2qK}i=^ebQe@^ddd zd*R~QzxrSP`WLUiac}#6(@sE8u&v*HMVQxXr-y1lD5GgKFS0gejW?uNP^!>t8-tm3 zK!|frWT-bUn0TzXOC5KiyB4Qzbu4c-sw`gpDxry*#KSNf0mKcGy9JVyI zCsK2Qh#*q!39it=&bMFLlN)c8MG*s4v1;Q`Z)!7r^-SX#u6skd44&!0I?kaWG@91* z2{H7GzQ1<;V9~El#)#;UwBex#Y+DZ~&XGeLjaujYbTZpIcC=e8`mSr+RsiPn#iHv% zh;7@>7mFAp!mwGyptn!$w0`R0OB$YH=4$!`KrUSjA!t6CNJ-Gs)paDLd>A;VSc?c~ ztW4V>Y3+YrDMubt7`y^oxmt+Wl5>GSOnewKJ?uprQH-aV?GLV9%9>F;lG7R?8#_Rn zC129DisO{!5kg9NdKY1yxkN;Qh#8SU=bS`Kg&WLYDsa9%s_ugP?j#^g=CEaxH$QpE znQo{U86pY-c_)$(hFtVyLLUgpBeeuTxv^i86v4FsN&BY(fFnokfGH?c%FHkTP)qv_ zmYZ|wHo>Z2hS%3H$yG+gn2fVmQ$0a4nENK|5{Rw{RJ>jbo%~P8dIA8D%b=JtR6WD% zCb_C&VE`at1T3{q>JMTBmNHW-Q*l*e36bNJ=jSLv%2E!SQp}hrwy3?kRLlUCTq|8_ zS1pyy;fO%FWpx6j=RmGnXK)3+n|8Om*TmE-Ym0h-+|4!<96>~qMtbw^X0;bva>q8; z2?8>+H~>JP#1cc#M2&Afxpvw%AuK|SDFJfd_c2P0sZVJ#9tqOC>qpLeuPQvhAR;=4 zBA~-1R#;+r*9>1}F3YCgQYTH@S=v`LrPQ{K$2>nR<_R|9962H0dU)n3S+ZrJ6AxW`r-2`l%OIJ$zb3X2_ShEZ(f~;Y}umfkU0^7bDng(Gp(@9 zzyl^NvFx~}X|%VxRq3jb$qY;grF9bge>}!4!m zY_+oi1=ggJ;HhMk>d^O!IsZM28Z$JZ$fdf(rtf=gsA4I2CTG-$EY&CoP?Sb9&R{Ype@DcGX5Qg!4s8fwON8tWHZ!{_hn=hHEyD-pA&kJ(Jyh+p?OR(ZtFEe^T&M~P5>eAMI)X zAB2#Qh*_MX_{iu{Jk1ZnFE772n@+!Q>4nC73g{72dav{ocD`) zzeq8KJ}mnE#bOcq)OUT?_lv$u%nTe-2r(w%#2h*c!_EV3H_qVtAclW;j%I}^! zc9NO<&?SziFP!<$|I7bke}DJr(W8CeccB*qsHZVjqQ+QVscV!sdJ-+kS=+X@K;=5{ z$fMQ;kNml9Njs;$?7;to#{9#@L4wHI=8=E=Pyb2ZbupyA@8{iOXJ==7``+H(-rnAB z9|92q!pW15J@wSn=gyzo*w{pbltPUCa6van7#3+8cW>|huipIi3OhSsP0kN8zXpEFqWc6O;Xdc6Z{oUQg!LQ$aYj<}yfgJAc@uE+V zk|gg(Aken$^Upo^j0YwRp=+G)`=0x#m?MP>!oV>`?|89TEEWq@>)!i3yca~Pj))*72_YbP(=3Rn zo!PKTj*;p`eiN7emT&9Bp0hTpSB_fO)Ndh zAhKA@8-W-C0W{>|G8;f~f(Dy-`9@{7+5q}!aeb61BAx(|IHe?*Vi)(~!QswiGWlo! z@jvF!wr#s2ifaa_pS--+tHYrImPjK&ih>){m0Dw7q8Yb}S4E4T`=!l4r zD6(k2DG*w#a$D?C(}WO&h4QsK4CGY0s}v(Kai4b@SD6A>JS*FB%$$1G z{C2yS`pK{yrd#rdnMp)Q2B-x=H0>8@JerQjvu+Vm3B3B)zpQDH#DRwz*4 z*ET;cTUU0A0!>=HP6aDE9h)OCgwu(*%#|CAxs9-=e|WE43N`!2h9ec?3aYq zU$wW+BBKKDR{pRoAw(Qffy{9l%mUDXF(#zyO##A^ClZsX3VT9WM$HUH0f3cUVC5(r z*jR)GovcmTwP{OyNW~oH0!fRAa0($oL?UWiPmI9A1R`lVYgbERp~; z^J<9bYAY!vKB6|XMIv%Y&8RJ)OyrV~sJvv$YRkvWSb`|L8dpdPii!w%2Y@0fdtl`v zc?A(b*ty1gFOme3O#qY%(lSog=eG(D)lymmZfa7j$0!SErV=20D*XcGMF2#QwCw;Z z`tQAuq3`=%g{`P1QD!5UdebFSx!QG|mVefYJeBG5COT3|=%|jq+8@rjwr!R3`@Ywh zr-i{wL~S+N4+XsDGVmQs{{bZ$RZCwgV)oJh`!b3I6|na8K2HZGWXDc)lunnNOjscY6|M`Vq2GA9BE10Vu2Lm&DOW0W-S<_C-Y z`J(S)nD>i5gp~RiVvMnGM4~Jn97>Xpu3sBB?fPs(#3hLgX*?ax)=%|)A7Wqzbc9&R z*6OI0qspI^6IO_0zgpQok33ABJ#35CcFW35rSid6&M{6?ViJ)MMd7uLjkal=^UNs% zh7gcBr5O6?+h);qKmEy%cXxNT?>#tv;@Hunnk$+RrG5)U0tDwhwY0Op_r^PKeQ^ES zLAN-1?C3L3KYi@jQ9=0d>XrAeTsd6KZ^!Muw|>E04}nMI*G97^pT0DnPGZnRn9`}g z*fSo`dGFii{@%`qH?F>O<^4N*55R+Jy&mP0TX$}aKjw>1eeu$>C$>&XjQ#pi1_lxC zVoq0*+_?|REX@^H`H|M($}-i0rD)e0_gMw+GT$YVcp_q+4J zdpT*KDN2+mx7}u|1Gt@Zci`B542%SM&z}&$@QZ;Y4~c;UFapDN{1Cth+&1#kfYFZO z2I6$OMXKFuwWJnBN}PE~Uh>Z0bWYXYYvp0>y=v9@E@inuTz=pA>QwDv?KS+?^xSjL zeRk)wAO7k0uU);ex4UZ&jEZ7}`ujE=D~V`4$Cymlb-TMe)QXd=HzyW}0|6L~`XN;b zuZSorDlq1eyL9>5WhJ<9`O=ujuJ12iy0Y3?S?etT+zgxH^oW-o_UZFGpQ)CM7ccGa z?8>^R#grf@fWWK~Ry;BoBHiLHY;D=ruTe6#Mr=>bAVLI{T$;6c#sTB2XEnzvCAWZ#D4Mq<;1{iMyx}Yx*_!VcakhBA>P{i$ zF%v+SIzogZ#aw5M0M>GVtk4#Cw)}iyMTC*S8c$gan!f@nsOF-u_=#rg6KA-A03}f^ zW5y!mIE>?P>FV{r^*8?dSHAS6fBr9i=imIB-+%Z0Pm2gD8+6Csq{vf7g2IF0jlO^p zHH&K^0Sw(*d2m;gh=C;1qBY${DVyqF2WRXMt&qcG0SJ+DqjFP5RsUZRdgX#(i*->^VmaQ#*`8f>r^_ws{LDohYHS4 zfdY|`a1J-yxBR^n!MhNuwPkYppSF&G|4cPYtSXjKtd~#&idvW8s4Z`u(75~Kx!@bZ);|=A31j_(UY6e+8F-_;ki*ePDwce3dNRO`2QF zIF%p)rYsoC!?~K&4BGnTffmWPu_vsA5(s$`9sQ zes%WxLSR&3%K1TJQ7lDE(Uc}D&Ky@ck4z-W7I;Oel>k#D07A7)^F*AGa><}dWIakq zwGb$XiWEjHWmKdZ3#o;Ha~X+9B#&7{#gI3onpIayVN4*9!*R7hR7^O^sA!gRHd-U3 zD)Q@z(yrs21<`t?3IHHLLPAl=83BM8h!pBcNT>>m0-DeYWN};QV(IElu|_7#siwp# zqFD(MkyNV7)b=b96CfcKP%W8>Ofn$z#PXy%%R~`c>B}Mjh{T;j5e4R&Smg(X6bOmH zI$sH*7<5gT2onP>_+Z@hAgVHG0m4NA04+p7tXT?Dhs?;t9WOBPIGh|mVn$8~1w@ko z5eT)MF0B!D2mp%BLm~hwD2iZlVFf@@F%cFpMyV+!3>}vgCTSt4w)lvM)WqD}$9tC6 z>oFLWkx`I{6w8(kU%!q85g9;9MKe-O#6YalR#h#qQ$Q{A6PPgDpN!oCDgoGkh=^8+ zQdB^Zfvp0m*oHZfM^H)uL}IW4gVm4*wbG4Q#qtxYjztLo0Yyc#2sAPVu;ZXb1u2bE z01&he#V1=If?zpoh*)9Rp!3_X0Te)sjG`HoP?{o0M9PXiHWtH&y z`Q?fgG^u1H08~UsoFr#aac;OCbHgmGlvT09C>_E1bNf9LU@JYzXaFey8h37@QLR)f zfC>m&gCe5@gsio#la;_juzno2f{1`wvmyXk`==sh?3nvxEh{ppGC`^-$!zr&a?U!7 zSz}N|^e~6&mS84gwl-*0?kXTBZV`e~H^o#61RFP|QAWc(oEQ)h&}&M7ioFO?tnvdS zP5@$%IRStc07|J(trZ?&vf`%-rI`1u2_9&Mgh$Yuo}`AVC|QyCgh^1Sq3X!9@~rVR zeUTh-BY;>@QL~U~1k6-&5m9q00s$HX@>2 zv3{GE!xO5=isrVf1#@)5$G2@Q0AQ|J{NuQRP-;^`k@UV}KQ?^IL0DmIFwO#KA^5t?%w5D)|arFPFO zgM|Z#$)Xk!P}x5K00+I#GgZ}5SFQD_tH%ma2wW|$a&Y#F27hls74=26a`)t)tNo^_Q?)%Rb`TUu6$wyC zbC2)b|KxZW`sMP=mv1h*9!9CX&Y;vh5<*cOWdKzM)~u@5ryhxF1veYdg8Nms06^F| zr+AGM+nsehqPY}h-3-IH9yX`zJmkLX5V4dI1;-*DcA}~Pf(q{7jHHgOt|(3^G5CZv znHxwBjzsR!a)7q*2sM*WLy?MTm~Cl0@mC*7vk$@2#-z0Y?E9XHlC@_AM1V1GhG9@^ zf5^zGTdbCV_~C~i{NW$`!KWX5c=6)-XP*9VL9mQs5(-++Rie(Gk`fEaPv3j%#~;46 z*3FG8SO1g0@|`a~`+VPZSrwH&ynXw4b5eka`x{SPzqEVq((d_#-Gd7U7fBe@;_-#5 zreuIt*D+GhkITuQy#3=Jz4gZFIPR=gPv5+CZfAGY^6tkU+&g-7@9_Q)e)6Mp-0yvP z+0&wIieW(rlsao1r_hwrRv4$six_3oL@-Q+m81SV&rSeCgh883!|P3-NG4Gx)W^ zWO3#F9wI7Q7_8km-oJl$7>0-UA6&eA<;IO0Hd)O%c`2&K<;b$+REPEY`0#MA=fC=E zzxMd(WPNhHTJ?fO5rGm|)q68-+VONJRue`>W;T&oeZXn5qD)8tr$;A850CREGcW-% z@h}XawW2Np^a+kmPXQFPaKchbHU-QrtU30IhzuZKpqNFD0fEtN{Y))qB`&PXg0pxu z2HYV&$Aj09xD=IKMk#r-=~m0-xs?JdCm>eQZndH$SrEsOP)M-al5Ji#5)~z^m0_k2 zjj=|2-)34>ClBgR06++WTCxD@@!`?9`Cz%T^R;ih@b|v)cYo`*|JwiYPygBP|Nj4T za(bG9yM8%lp)LVJk(^Q@Y`y74!4UuEXZ1DlrE_*o&C}_4pJScmHTM)yYX>A>`G}V} zli$*3;=XS|SE^cl@GXMJT4bA}!tzpix;%)OrDHRi;!?5I z3b2?h389D%%-H}0AeW*7oEXsx6BZ&+O4TF)#Hx+kbSyw*Du!Nl=9a>SK>=$gPPH|F zNr_C8v^d08cd)36!Ff#yw0#+U;iiRJLG28zN#kUcPavhUeB( zG@fd`uR262M2Os3F=8n-6B$HQ zwO^znlFg<^>UUP4G>!u?jYR95$*dKOW~!~-8BiXssck3(xnUBC{% zaT&qt$_*hQ8udu)o1~#)ZnYv>U@1&k(PR?>Xi7;HrIp0C-ApM#L-cIe2BL52Rbu6t z=MC$9Y))QWOVpM6xS*Ea|4l{Xn%)7Fv@ zpeBU0NGNEcw9*i0!&~Qi zRon%rh%kYQDi$eBJ&{6@oyB5rcZq5}$Jy8zGkMi2B2p119-DN@xd5`X2&oP^F_k<* za<_bRNU9mzh>QrJiqM?8Duzu(r7bEbj%fm*idgwEg`!w%+FH>7%N6&zRw_s}v!?P| zkx~Res##H`FAyUqV&=u7Z!S912145zBB($~Xec>%2>X2FHrfBpkziY(s;ZMq*>pfP zl{&SUKCI;$C`3E9HJk;(+2u?ra-Jx>RTQa3I-jv^&R%YZ+8U7p5oav~WSUc@Kx;GA z0vJ8U&y<}e1T)uL@(Ck;m= zmpW``0uz%#R0JIA*`!v-4G~4kZd&Q?Qg`-MwTx4~m@oB~uzTVqEmFgG+1DiMA--RF zMw4+e@MlI*<)3eHxu_3EX6pm+U7#k7pqj6on3y?_c|EQXweQoSU#TjoE>coO5LGE! zv|FS*pWOMkzxRJXzIQ*5a)*2>&(g}5t=Vbftb3EKYe)r{o5aIhK(fMIar;H zC-2>UuTMz;-+cRx$0v^!%gyUIzw=jKJyg;j8EOT_R7nzeC65a6QFjq^Jm}x{-6KgVr@dw001BWNkl!Q!Sg6^19yT7;n@P+?c?UuGN&w*ErpKG-q?qz3pM3K9m%ozl-+%CfAO5JQ+_>@7 zTW|gB)>F5xU%AS_TEy63E<+?0MBLlk`^s0oGLGXg4D0p!&L^LK{`uzyWj=NNs>$Cl z{uzDxc$j&$TAiMr{_gMoZW+qn-d@gm_uT%gum0-({=Ry5gdkXb04VJ=)tSoi>0#

    iG2W$>;a)eR})$#odEf{=zqQ7kdcUbqNzL7R$Ze-Nz?~5AQ$N+uef#pjvY2EGgK^ zUYS4-?M$~0h%dXV^zn@79Q8Om{S3NyC<;M`wR!JfY z;XFD#T5mRg^6$T|L|^;bOE+%ZD5YQ}wyA^{%?Th5J{;AV{EGW!vwra4!Dh1&5moH_ z1rmE~AsW-wx^vN7e{L9_pGDN*53Jy{7(DCMHK|m;966pD;q{!6C$$G4}b_2 z%AfF75EZc~5rB|b?ay>dHVeyR3=xr;d?e0weF`prg*P z>8FvRFin5ekeiP|tzw+yek|CvMbfqxz5?+``qWGVS5>0qcHj1q43l*+WOMZxg^=4c z%hvM2V~A^x?g4HsM&kiYDPiK4vZkduxg{#kZ1F}@ks<)F>>q70&ZSviOr2=qT5v28 zLy>94c*+1KC6$U1!!L9FvNc9sMH56N)FR_Jc3oFQTKT`4IHm!nq)^F1RWUJY&Goh- zDeZ>JN6b`kQp=@qJBkoP=mxi^X1=5$3>MFmkcO9KGRyXmO;eOI<${7VJa@1w>LsB|uSSA{8R;6L*PI-*t;Vfx_XV z2V>4In^aUl6*RR%hT6KN3QVE`1NWhZHkML=iHWSih&012vIFDn=E72~!MPS4NiY+H zZ7XM1Q)JCBH~#&*j)7T@k9Y;2GiD4ruE&f?TM7JTU(G8tLr_zqu@ujgi){?G7hG9~ z7SGwnUrpCK1ur3L|ES??R-W|>&M*L0*V6>_D3liJ)80MDou`G;sn%p;zRXpYXM)lv zyms~C?lNiK5FrW>5!d>xX7Ezibs`&Rx{ioYA|%El0JytavFajql$cpyj_hm=#(oI$ zgD6xFuxej|62BH@1E`VUV0y1OY zCn7W)whAzsDB+25h!9Hi`1*rWLr{#g+4HJMwWPc~rGByNxMg}8FpBYkh)9^+>>#3X ztjW$UMGW`n);-SwGF1goq{>0qVvqGg<#Z%KuTCowgrK=JU>KH^|!p9%AlPw>0&5#qG#rZ5+?c*wlzpN{x7_qHW60iYLOg2is@|l$~G@QRlfo5QR+tH1VYvhJ>p zlGVX|EKEclJw7>n>z$w7yMGs0q{s&!e{k>qT?Rr?;&ga=EIO!a$-~3@_l^tfcZelt^J6#8*j3Sap1xQ^wxN!c${gk7D=wCAR-W~R;#C#T-|Oo)2AK7He-Z)DQKvb(!`<@)snbqnP#_3F)I6Tk44FAF?>I&41u?6Z51 zANI7keCcwPgEcmPmeA%4?t<(WEVaui4e(P6eO70DxFI8mXt7<#$H$E1_50lIM{@yW zJcOC|_V#vncb1FY%`o12_PK-e=gyzMC{iqo)2~tr1c4IfrSkz#Cbk1Qs){X8=J4=v zy*VYKVHo=U+@fC)V#f&;%D5RtN|f4Cobf~k66KeD=mZaQD0yobTdUV-U^@i0jd|M( zXqN;~9s+lDg{PDvS~^DNM2ij=JtMA%wIU~EGp!J5Cl?qksHQUwi#~ckX;%iZZb%=B%z# zQtL$=dAkq)EY5+CckIbV!PO?7S1^*u9nL}ZbYT3)P6v6%H=S@^ zK0Zzg&!}6z1->0yd%--Fw(u|7QbZg!o|kr}rekG6LKu1m;5;L(F04$aSan9sTRZL) zs10R`V{rRD5+^rL00y*SYuFHiv=DR5B%=W9J1py{4hG|>(obsR0v50eWo5;10E$=Rf4l@;|bR<3ye}L zm{p+E#J~{g-7||!r_^^;M92)g6O#kyU>GhcY5~B+fGB7Mf@B;=QzM+f zY`%>S(6Y2m*SEMf6vdWPOhm*CM4~EEx~>CNu$0+Ya8Rc{xlZWuRHT%;v?CjSS@+ETpk}jIz5)0 zM&*p)u>2 zLFpAd0UEU0bb|Pb`bNS^nbY#t3@>o+C_tWbCDmH3$(P-^Gd679U*W9H-|i#vgN8vn zIeT096Phomy7^H-sm6+cqQ&$EPCC&;I|~6)5rwIMDFnvnuZ~wcZcXrDVie5d?oQfW zGHF&2X4`j2j0DmpQl(tP{CldPTC8y$AfQ2AgJ9o_N+D$?AUL~I5b{Q)HO2NVgC=p? z+S_4qv%FG>2$&JBB1MG=QtJDT$rxy;J!RJk7z2y9p1QxO3rx5Pa88e43p zhH~;z^7+rIqM(+n$*rCDfAI1HJLXKxT1o~H)kT+7l>>Qu`3TE~)~Qq?mmpa@vYv>D zDRxPcd3`0OiT22u!%>oRf9g{uY+J_KdvMQ5N zPYqpZr4Jy0q`v-+@i}7@k<`^n&CL-u*-`rO1(!O*$SHLC~P~qcA-*XZ=%Wcd%Tg$A2#i*J4U936~07xVCz?|#!ebGdwpaTT5 zcuQeHqD|SnfA4nx(?9+77yikRtYS8sda5PH^@m_wJyG7p;}GR?q&ojol$%?3!u)i{r#bO&9fU1e5XT&^xcH(% z#K;7M$n@a;gV(wojVxODw$ zZeb~Li*08)QCg&v;|F8joI8JRL3xy-MaC?pTFG5rN3w-p;ST`s(4y zp`rrO{<(cX>bkVqYydzNRcaCNA&=(a#^$OKk)53#0QlsSkN@@W{oZ1^JUF<(Nart{ z`^HNzUbuLEXac&82r;^O0?)sF`}Tzk7ZNYtdh_Q;M<-u<>BVl*9~>MYB9c{90+>gN zwSyx73;@KGCEvPrYXfW3#RlWfE?%fBAMR)Pi#ng8P=P#`DkaJ!j zgWxcX2`!CJ5dg||Uld=%Eta)K^M1*kg~nq=?XstJ9Y1)mUa!}S#e!1j+d3nL`SJ9; zhldXzE|#lD4-ZduQ~EhpvwWuWZ_SRmJ3T!;Jv}ut zTkR|^T)1$szmHO=>j-tsxs*EOWxjU75yQN?GgiX1%#`pZ~}I?+?HGPyX@${`%|R+YD<+NW`ex zF&B|i6cKA2$ zq&e6tycmw#*ZwCAnv!veEy2|EOx(&Waic5}fGi{@j) zWG$$|cde9SMPo$7ilhaG4*(!zMrLfyBve%i6INu;8V8q}(oLm!EpnqMHIHCw{dldd zQ6#W3PkIA@BBERkarh;!UltfeFWQCG2ca|rssUyyh1)00Nko9A7&j{}04-F2=wvF*JLD%5g2L^FnV)c+YZcT&duH;<$QP7@ z1)CO&3m48Eoqz%P7!M)EvJ2`xmbEYm4fPhK? z6)TW}siwn&h(fA1bL2jV=*2iNIK-$$MNt5Z;w<9N^?^9WhPXU%uIFqqGOVp1h)A@m zfc1U^(%D<;B8v)6ewbkx7@Sih))ze)?(~SB=*2=rRkBhb2oq{-=+M@zwS|a+swdzh zViB=qW(ATmfno*x1Z;bQP1gCLh~tU3IpYQZ3V(v&Rw5+P0)m79IVY6sR}c1=m_z^x zN`XYoDXI2->JyC_(2EHK(*hCHGSfxMI3y+z0o2lJHB`gcM4eTWoNIV~SfVrCr_fe1 zBF^L)Ng}!Ldor}AAye9*wT9$^8c>cnIKy&XF>$vAPxnB>pYuGejf>5ZKB+s6}lHmN^=d zbN2LVP;wj0$1fs;iOFNcP-|JDS^0Kb2dM>ZGa+SD-z711cBlo!IZ~_EH2Hqx_-%Lz z8383%tR#^apsd!5jo+0OSE-#8UAomZ4DoT!x5sf@EEZkYS*=e*tbxyS9%T%{Nz{Qn z*N3pC&rbrv^r4(HQB{|jx$8P9q5NnI|JRU5;=3F*QO8oXnGNYl$g*)2Bgj$;Rg1lg zdRtVYFvPgU;9vj2{*<*4%nD6-6fiWkHQujY!6rn1*fVV;B_uuB7u}X{MJ~jF*0UBV z#D%XYy4bZFhGAf4uxehlppC*Z9c|V>`}n;pyO&=6>PtN{D`-pE0a65ZUKGzD1R)!j zD<0?RhxV(8n4E3K|g$f5NZ& z#DC#Qm-BD{0H&fsL?(cc>8mgPg=7&!*)BBGfjpI0! z@@v2T>o0!uWk@Vzjsu=fE!e8Kd(QOagBH+P2{l%C1zQz*yb7{<-v zgGWPN1LKefQ25}(0RTzy)~#D2g3wa1txQv(7K?H<*0<^x&pr1XGoRZ(fB*jd*Is*V zTyK8+w|7ZmuU)^24cCydLU^9vV3!5Zsj+9p zM~@zVaOa~3Cy&xHt;fxxTVA_(^}@jg##A&T(edfYcmMdcXP$jV6Mg*2$2XpO>iFdJ z@bTgEH*YQbl_u3<8pt+?wsn@{x$qz2`SLGriKj?EFln{`01qBKNGWw4_kD7XZIZ%^ zjhsDEBC@x?zZr%*kM05SU;EE~W3^fVSUJMUElO02el$JGh#6hSP(}MS4!+4mQ{EH- zhhZ4U(Zu~?vFQ7ryH2v^JTQ|K3!{S~#T7PFhKD?EahSLcap`6(ah{_Z7a)ET8E>R~ zf1p2eOWTRN0F5hlDfOTrI*wx=NAA0n5_gCVj!{svf=nA6$FT^hX=2S_^uuCL=8%4| zMJMru#xono?}hTUk|rQx$r-UcxO;cCTJ7!c|L4E?8_z#;^LKvdU%vL*AOGo(ehLcX zCNGvN1Rzu-My8??1*q%NC6w=QtswgBv4N-lp=nM2tF5q0^QZ)RGP2GAJ`LKtX$3iy z*%1*#S1P(n27sV9Ope^xcsK@7!k*bmi*9eRL0Z_fBPWcr=h~)8NJyA-&STDfZcZgp zowV+b*pFm2@q*ITCN45HlAYj4AN2#%B2%5oiW`8eLaj7U zu`~mqgp5Umx;kD*EH0cKZ;z_=@{aahDYayqRy8zD7Im{>%(iI&??4d0WiC_BnP^s} z4iQyq*;=;~5G#X7DQz|ze-1S5#Zu{g9qe1`In=Ri2UN<2AaZPKX6?I8ZhsOH04c>g z9UD@N9*$>&sl71Hob3qwSsZs(lM}Ip(h4FFp*7NhV0(**st}>JI#M)&vzEw@s#@kHO)bcEW42%TKyj=E5 z9xGaiU<@U$WGo7_NQpX5h#gujhzu}0xniC!LK&fy>hhIIwt*YH08lZ`Mh0qZw4q&K zO)y0b&OlT`6e(2q*>3~Yf~f7k>1fxyb!Gso%(1PVh}1S@l^7a@AR;wgxl*iFN^@rD zt3BJb`s&H@sY(o~RW4UmX6(A8HN+L1_+1Hbkx6YeptgFP#C&SmD+n`l>#RMmPKEG` zWR3d7nXOg~rq23*8PkIziMduLNlDrva_hx;rmu_vXT|_Qr>vjS>MR2Q!{lwkVA<+C zv(lcQQqrc|d6{MjFzA*KrnLSx@qoCB;3o(XH{&4H;h%`ej9zJFm|WMiu`yMa!pth@ z#RNpNQ-W#I#^fFLwfEYed|!fECSBJ>8Z(}=*=)M5V`l3d#jUQ8A9mNy?blX0p8c^t zeGIOd~fJkas zk2)r+lWGpF1cB2Sw##rg4U*TSo5Q|hIW!2Kza|08cFOTpEzL2apjOzgl9x=eCl;Vu zUspMX5?Gclf$HIK`lI)L%8Tx6&wO>s9TqW3C)$`;FmyE-0}v?OiOLV%>}G3?sA_2f zF!dh;Di4n9vbH!MMHdMWYnq(hysw9`@X;V z^sUR6E|;7i+H6sK@bK_x7{_nC^76$?7dOME zmOKcCT;&76!!Z2hjW^zW=V#avtrGR!V!7zM-9%J!X6CN%Z`{0fZvWiQ&dvf+hH*R@ z5~QAz2q=)%M7F^Pm7WlB@7(^&-+cMz@Z7`k`0?gA=V3e@Bo`^e$??hQ>82mXlhf0a zdyn6|^C%y!pE|hu&98r*h_VQpmk3Y*{`m_BmlmlL0mBNn!nY9-8?d`xukYQv_l>W8jr;!H zci%lZJ^IqK&mA0`>$(oP8iY<5^-!B*UMg?z`~K?HYp18{yLaz?dgo(A{Q8xzU%q&$ z8sRO1#9kZCF$F-xBGn0W>GGx0t9(YM<7qxUxp1&|^XAj5zIx)nr#6?EOcEj-xw}~}&9LMqa`1r<+ zYa+r#?r}8Vz~o4nZ$V1w@bK{U*I$3?)>D7+FF$p<8E)QsD)niz9?Y}i<1D3c8%z{- z##*~>(UiN%>8l~+4UtmnRn-cNTG6)EYO!1_6oHlt9TihT709Ekhpf05?%-1Scio8fdA*Xzy6g$oy7dg;Z# z^LPHcAN=6Y{=xtDk6wH2_4^MVjvEDHLpu<{O(~6< zfvO27A{oRW2Cv27O25z64|b8-=cKfzC~fbj76(io$SI=ANVQ! zmQ1uv(i z>qF0)hgi6h%PgQk0ot%=S`7DrU4o(|c-EtOmTgf<(Ct zQktdRz(-#$oTYY7D;jBR5>7<`l$kC5jsYz@EH1goth@s>{Ke`i`#VGe5DQeLAxy?I zgo5Ic0=G6OlFCHGp>b2(7XYvfdVrcy(m=79h6+vhvL_G`wANzIJpg8)30i`K2lxjZ zRzy@(Kqw4DRa>!vCtUGkA}TpsIZqHx%n3;n=A65fMkz9m5W;m`-b=%9jcwX8nxH|^ z#bV)1+eA-FNnvU-5G9eLRAb0VRMjHWdntHj?S3n$ZCW5SW}*!tbu^jgb()B3nszCL zQiAFtp5cAm3fns-Xzwlaa+Xd!Ql?^09+eOgMmq@3NI66n=){(AC_~MaE`@n|wVe*v zo_!2?GmwS4SiEo%6h)Yb#JdjS8D%}56yk}u`(8LHI@)M29mi2Lo8!$*N}ISfwbxMG z3MWxs*<*B5`Ibe+7f`K;x!qratDua7FK>h|eIuv^gJ1{^@U!L`w#H*VkInQM<>nrz zVC_r5o$b5K%qcZG5GCW7(@Er3;&yg6p>`-%RU$5+L@1(Qc_c&tQ%)#6DYgQF$>FMz z|LiZS1OOEx_pPrMpp{O78tSW3h)5HEe)90oe)i{kJ9}Tc{7m0J0R#SEMDF z%lfUq`kyTFR8>i_glrX@R|07V_6cQ7{AYir(`~%@?C`e!>NM{QxOKzUcYOhI5^9qm zi1w$iw*4t3UaXc~O2c}1^X+$k{^ncny#4mWhY#1M>v7EEI56|h&hB!#x_I&8x4!lD z7hn4N&i>w*OOXNuWz0HcIkTR2pt`QR|LE|}ojb!YXo2xmat%hNVH^as>k}fq^T9i- zt?ggLq2(Yctg4`bT0=LuMH}fnrdW02X)YJyVcFUm zA7Q*FZh*(m{v(G+5(HCC$YDy`8K_S%kVIBE6j^jAqzJ2?n z_un7K@#f8&=g%LcM2NV_YVXsz>$Fm!7E3uGqDPM(+<*Mw!c$kzUAy$b?e`B)PVU{i z_sQa;i(lR&045s7@%ZHA<}`r_7*Wogrmc0} zTJy8_Kwv&@j`_dt&B{5CYMU`?>qX270cE*d?yh#mlKY(%FLwa6 zr`??MxE{#DCxiPxa*WF20vPJkiD=Fi?Q@>p8?3^AQ1EESanY}BZs;cN#JKU`+f?PI+7&PN_0stlp z$QnA$9!NFzPjV^aYIlEs|KR0UzWLw(y}$eV_x|{w{h$B*`#<>Mdc8*O6H%g6f`7ub zP^ZJlF5A=RAp!E96wY9T`dgaX$t_y5hBQ^v z9;XP%med^; zmC|zAn7L?;-_&`rJZI=4f^`=w0xcprk7$?|Jc0F#6r%tLtj(gd06>Zwt`s?%J;6g? zean4`>}ph7{G2$^iwMBP^0p*_(|UUn0H}g$o;9g&6RG1$)G@&#@xi%s%jF^wc0JQZ zvjA~QT?YU-j+%_Y073`IQm|wNMW&PzU%Ys6XJ?hmx|C6C8x2rUYY!!@I-9nUSH2d_ zl^|;;ss%K-M&|Av|G}A;KQ?LrTL?m2F5h=4vw*4S+VZ`_u;7SDT|z_%_@qyTcw6-e z1Tzby5*00g2$nu$TWubBXzDq z#g&O{G~THp4oln1>exb0OhBm^Cg`%G=bpaa(@{cH01^@*wb`WpaVdmW->^0` zFGW-fbIJ_}E|QB7;KUpOuAOX!WcMi^#U6*!QG6K}@puw2=1($t2mjYB>vY=YD zib-RGmVdyhqFu~vfp61c3@bAacSUSX(kbATz~o_)J_c0W;`cwmqK9!D@lsYfrq(QVf zqj0#bj;Fa^Rkh@n*FU$KrbP=;9*)=|BD9`<2*5<9DplUDYED`!UBs>Yt2UU}*T=>% z45L-kcCFf#THhvU{$WH+q3C;5b{)8P)!E5j=FlEitHa%;brCE^A@V(ci%zn2THeU* zBMMCOdcht>TJ_G*22?_Y9J@SL6q*CWPm_c;=o-b=+{vfm4EpZF6#px2_0Sw`u{27g zTMw_0c?q+qI{VnR_=#_s-`4hGTAwNw0iXy1A~A?kM+1!ajvl}H&fEKG_twShq%2l+ z1p(%Q>FgDk{fq7-01atIVXbBr4_suQeL`G+Kkr+^@QFJ+_2v3y*dtU{3cluX!J7qz z@kM@H4B0?LLRv1Ced<2G{qdVWdE@ohU%&U+=PI&Tro<@`P{+e&cyRYPm-5m3?|%H@ zdmrBZ_&0z1w^n<5lC?!A!M!)7ey^yKt-vtDo3 zL*6LC>H74+;e!WS|>ie#gQHs4({f#v97!{Ez z#wCVpZE=If4AtDF<2X8Wwdfbi#R5#fN~EO_(`si$S=XhkHyc0{Ygr+379@>iDQ7^X zFZ#iM-C}FfKywM$*4dMS!DXm(OvJx}gaVjS>UMXKNTfijRwhbeMg=zNW$HNfh`7lc zfEjHdqT+NmBN_N$XztmH0wT_$D%19rGm~nwE~lrbW6^OetDV&|Pd|0z#^3nTm!JQK z|L~vu@t^$J?Tn7ek{LWg&(o0QvPaeX<@4BWpEI=lx(r9W*CEa)M%?p zM1YWsA#%SIJo*cOQC~;vsZ2!yh*3#$7APqt3p%r8-mFrjq?B-OjYG(KuoM!%0&zzM zt*R47E}$X>5k)N#pTtf#p`eM~R`wLZ(keY-VtTSDTB&RiKokL0MFxQa1f^uMRSwxh zjYK-nb8H8|v%?^dR^1QUd=U}Mqz4P%02L8yf0T!*exFEYCIEx5xs;+{eH&{Spa?8d zYi%rw4f!Raob6!P;uQcO<|3uYwB}1Qo1aiFcM-Z zipX8J6zEw6E%1ywWzIv9QF%d&j{CiSe}Dhc;|Bo1KmwA*67dibfzaRvg;~=fz{W=a zK&_x->xxN)fCA9Kow{rFgo`@X8@&?%V5P?q5wMo4tKZdP{d@pwS9cLX#u!;sLRmLc zA^_33c-_b%DoV`G&ngE2EJbt@pNt7r6+zn0vg*{eLxI3Dp4(hy0zZTzDq^KI(0cHds z7xtitK&k=)3KQR}iJt^e!#l`!-umSLC?O+Q0Wam=616REd*=UiRDxPp?pz93*OEj4 zq6JmN^4Xbq97hx-1p}-_gxL{E5m8h@R01WNp(;K>x13$IZypd@7;#aX)n>C{=8llM zq*6dsTI#WZv#t%OYT_=-=%R!fRRvKMDVKsw2#`zR#H2OG)5;+^NY_*f79wXO+yU2qe+(h5_Ww6=%)v2wYSxT_=pP>P}m5%ejk0yc+AE#FSnlj-aZfC)J< zNtrM&5lNKnflN%nnePYO)y>MjsMe}OMAk%H!BFb7KvC3ON@obEtqB+xRaGT5p{7s- zihxM!x+29QETs7jxaAfRFaU63Q0P((s!fytVHgG!?E8K+*CSFXx#Lt6p#Y%C;)={# z53a87ooo~V2$_;f_I^83M=(QCo!~X}dXg5NFBN<*jW<@i(RKj<0L1EBftY!W#0)&) zzt{@Ty8#2i_>Af-%^l-JwRfbN0T!Z@hW2DfDzkNVY830*izAiPv?d9m1RSa%Gg9;Q zX5tP6JMIW^l*|d$ieuEu+LLar4TIK(r%YQAWCyl!mXM!SWv15R1_*589jc0~#$E|P znH_^bL=-I`0GRrPWO@6}dxX0D*5Z7>&zi76(IN_m95& z=9_Ome*EZz+n;`L`}eL~x%wA>^)D-kN&!+#Tq8Sc7t$JF!o&i?U3%)qO>>G`b$9?6 zO)Cdjm*JE9pZ&r2U%&VG;ZZ)h{qW9%)5nXhYZFICkWv7XA}F!|GLw*e{_x%({^|GL zKl-GM<@|F0#)X?ZtL16ge0=ZYqs{5@=bs*a_VD`d#l_`CDMpqhDS)z?K334mIH2KO zRxYTC@3xDDvA`6F3a+mr0)e8G0)4;gy8fjX&VA{b=Rd!D z_wj?{aXsRK1T4o)7?BaJCKw`VYZ7he{hQzX*4JMC=IMI9S}qnTT{<|}41*vs#w>Df zBUBPn6>Y^c#`SRf{g2-G$(yI+u)BZp@Mw7Z?f0%;y>|85WdI-s(1~S5n^{B@#Ok1S zt7QRs@7;IS^9_deWP>_7n!1RzRu>*lTfD;M6p{r3BJZmX8d7q8zqxVqo( zst~raZdSYsTezss(e}venua`Svs=g06=o#0n&|+>Aee}OYU^Pj%$orKHk%CqUAe-N zGf2t9Cg;K7R8fVgioWS$>3jeF`#=2QkN@`H{x3iL@Pj}4qd)r2cU~ps4*EgHgeVxi zbVOPcuoMXeRV_1{u|NR=1vPCXFb%2dBoYv1)zi%gln7IzZnfO$7AtG=1G(hQ`t;}& zM`6ZQ>Pi_$>!69%+Ep#iP<>@00Xs|a&m)8sm)+Mq-tRokzd|7<4g%mfy&3=lPD+4U zL_~=a799_d`qgq+ue;q{UM_(;&;qp}e*wuwMlb~ot&59-lHsAX;WIvg_s&;%_PMXa z)>lm5us=+S6IR353{_Rh!*D8+hqdmUJ9lpXSHAtNzyCk|4}bLC@BXj<%RhMg=kFaI zAL4R}*aIjr10nztf=Fgc1PZmk2r4KbTcD-Wzi)xJnTjI#tl!H1<;_G@1&dNQ$p|%w2imGv=)jUiX0SuZPqLluyG7m8Qd(5o)aD2R#tkiM z)i=~BlZdS76NvVlvPzMfD{OYFRi`wot4`la+f~fE*69NPFrc|XuGA%4G3t7YwI9ck zh|L4uN|H`pbFKMD-}hM*sRPql>}34H>pv7R+KgUp5vq*~gNTS$Low%U$<3;YIC%za z{i|JF#G$YH?$CEEp1n##s(2<9+Sgq@vIeKG;8qs4eX#*L&XU@rrf_s3q!w!GMF6N> z#-YqOu{hSIzi#s^H&E+RG=IJ)&ihcE<@tGYB2!fhDs+KYLWhK|>j0z_P%T6(nj5CK z?J`0{qy`8A5Wu4Eu3fpbzq@<%=rJ>^XyPto0;JS+WrSRF-58`0QqCpkERv)s6C+Y$ z?)wE1)qQJWj8LO-gM)GIOqe#YK%k8&-4y~5;DPRfHGSTnL!mTVLlY{GYr~kDRy$S1 zVQl>xDaQ#+n-%I|YZBsjsHHvH*V~p&78*1=3XI6m_r>TzkpRl9qS*xM$t^zIjr%`bQf|$3PHf=RI~}x2Ad?y3T#{%iFh4(Eh@hatNDHQ`moJXP8dOC7f5zUm z$&%|h5X;PSs_Nc;Oi#}YFf(`zh64;9BnS{IDYRTsq$o=kwPDAG^}+ke`@vy5ydUhZ zjs_rRYNh2$tCeJuq9hW0fdoLjXYiPJPj}yYtIo;vhdd`M zt9n4O0x{^mUAO9-Jo$b~C{e#efFhW4UM#wE=gz?ga(H-16b8sGgdB3)gq$f-95`bs zY*PP}o+(qUV(9z9mhI!@x?Wqh|G|7%20-KB>g>~8Nzhh%ZcL*U4jKBh@Nu%(ST)L5zQbPbh3T3Jx^bkVZw!XQz!OfnK zQsN3^03ZTH)M7oDj)GBr$Q+lRB+Cs%S%eS?F*7&j<8yi&BDQUtQc`i?^#EV@;ZSk@ zE0($>)n>p-ca3)qoYmK0%l0|Nb{yuvvsY-jlQAo;G&hdn_aY)Fg^8&blC|!&GJr63 z!*Q+cGX6Ol{4QQ-y8suf&(ra#0H7@n#LbB|VW(@$^-&=NP6-jU#HKu46OAjh)!(Pz zwP+<&W@W6&lOD{Hp<+~Dr^P!>aExrW>HzAfQoJ&Rglc|}ONK3o2LJ%WFmSEnHyX4v zwPUjPqP3SA`;)K%%{FDnss*9;b#mowURNQ-@Ssr~WfUq5AmyYsgC&4?5v-Tj%EY-E zXX*_&E-`+~TElzf87J5pKdD#|h=?G`yC1#({nvl+!c(8xi`$Y)q!p``A|jw^rk)@A zfZw!^1RU%0oY0_+G!pEnu(|V+sr%;RE<-tcZ$0P-SnuRK_#SljD3ef{sx$k#=eA~W zvY`_I5w#LNxc>eh{NC@s_JbcJ=4U_k$zS@FUw-oGt6kSgZPWkArN^JReEARm@DIQI z~5lL@9x|> zzAq_tUAOEO1Sp8wc1fzzf{26|37SZU!|MBQy!z4oTf%&9|J-L^`q@Vxy4ZH{c(eNE zD=&Zh``=BlNqOiuJ&KS3a|SN#Qi|RzWW~*)1Qt_{eZpL`v|Zux=tfl+|igP7~1RixAsLO|uh-0^mz8y_7{D z;Ock<)2N0+@4_=f2xVTW4xC90Zj*dK1a){o z7QS%)Lff^+o1^9Sa{uhP_ujkq^rg$^_VybjMi%7N`uOnP@ljs0aEz3Oftk;o*>4l3 zb+S&T225M3sUk*e20%~L_7(s2^0PZE{Y4p|al*sH!?tZ7dg!6HUF_`ac+L=9yEBmz zfiOFkS8e}}32sVs>lG_+Z-($E9NJoI6?uAgsLC<>XX^go4DkfW=J)@ zOZ8$H?P$;a$fdaY?xH5Spc1l;g7is$rro8Knphe=fs@NY!}Nq8Sh7Y~)4E5UmYe}@ zps0mbMF);egQH$I(F1k+wyN5?$0OG7wcu2r(cE5n~YP0`6^Z1&|mhU=$|KKoJQDF;Ik% z8kSy!2{Gj?h&fA2irBQXy|c61w(Wu_XgCD`NJ?MVg3uw%GU`2|r<6cOL(~Hn9QLDA z`@qFNp}I|T&Q|JWM`oyUk_pOmj>L>Bc`0QJ({v2eq3tc^J1~2)9$Yz4cI`;SIWBF3 z#=n@e-?B$P06-M>o-&jQy*8O@&t;Dv8oFf9Jk@s;*vWT5< z#wuex`OLsotg?E7;~CX31^`rFlOl|yG;q$bX^3i%V2~Jt`f&B!XE3SMrsO8-;X=fm zfmuRr4#6y%_rYvYicy9+p*{&tY3iA$Sv zYuym2g2kgMMpSB%d|iwgu`uN!S_qHTUG7iBj@Vp9*6Y*mC+8f5stR}?hnE^$Q~a1U zMX?~E)_8c`MZtIFv;Y7g07*naRO&!Nbo!0mpj=dA&Rplq*=BR?Nve-B<&|p45L~20 z+wEm_*ipziQ+;FACc$JhyT(cWA?)%**d>XGYjSE>Z3|PtYPFz=0IJQ8?C$k?-Rh)* zlyc?R1QaPSjOm{?&A_uVgNdO&(_%xa>p9t` z+?F9;W3BBRZAxzbQvrY`6#t~Am`Ns`OD1J@$LxH?>A_wQ zjJYQ!!KdCp#4=p5Y|{o<@tE1#gb=1yid1_{jYev4HEdpa^VPlWoljkQ8iG(MfG=jY z0B9!>m=!df2uOH^ZT2Vo1T`l1pxDL(Eh0F<#tr%L$1=d#4fa3}J^zEDG)}kazpihm zQAkzkKoo#l3UB=I)$hIhos{zSsoh`r#V>y5r(R-!^=2c$!WVy(0#2D`1yZ_b)?;PcI6Piyx^W4=Zp9+jk z6JyhCbz6}rG41Z3UTiNHZIgOQLlWSUKUY>h0#l}{j#uHl@#fD0r#)xwyG~o1L^RE} zYhNk0{g93ikKTOq?bT}a(n~Mx@9!NQANHGmx!lddkcPfa&(jBLpRO{R9Ba6R`R2`! z1Zi*oG{mTdb`)ZsqSMq6wU%4~5%1i&{nfAj#rF30i=TP%?Kgh(H{baBum0+rOduG;yKlbp?(L869UrV==(fA< zvbCzP`&G(h`@NcKw-Wo_XxC$4U{XWG&(HlrpZZwl?zEB~$0Z zh$OYhpznwKM~BKJDTFpQ1d`V4CUmiBAT$8jHXR78?;mqcsOb^(0OkPBmhpa;lSlAl zE|Z}i@}Bj1(SP#2h!ej9GZPhA`BoHM7P!%*}Sq8K9*u7`o$ zECCX*jDeF&1*hwtL~lD~zij^}zY)8P#D+8+9^UW!u)V$Aw%wNi4d=NX1?RSg_yp z1jRjbG~0Tt4c7?36HX5!t{Ey?CBC7D+DaZX?GV*&GJ$142-PQJsxmW&(AWa(+;zX` z;_{MYpY(B=x`>FOiEgQ^1+}7u7jDeGEdy%C2G*vxhIO`Pasf;GE;Fln zZD=gDP232mpNtv)7{{nr6c7NAFc3)AvO%O!ULn;KG|E(Y&$ZH-06AsSO0>+#Wofx~ zY72qPURB*m>+?0?ftdvaMu|A$sE81tW}4Yr)#_l8NC5zp&`3api+{I(j01&Sa{n_r z6#qC`f`}S&_gu^ntLTw{QKKbR)sk7JyieT3E~?QFo#+CfLug74lqb=$yFAos#X%$w zLou-e5V`^%JN}%c34kbpV0XFTGynimU~X~>Oi^U>PE5hk`z13~45ASPdLqYDk z4k2v%#2mZDa(jC#P$Z0q0U(E=L%kow{}2EP2?2p6B4y41p#7?X>z{3|0h2fWbB`^a zmFxfPSA&D1P^f)~q~=*WmaQGxoQtzQr#N@;0Tk|$$~b~I`-!M@zNkwYZ#dzZ^`N8b zZu6X2cxa>SY;C1}KpL_@4iICCF;YM%1;}Y@Ytb}eXJ-pJ7xgGckrjb7AqdbShV{B1 zhK;g55iN%*9v_3G_XPle0O%;s%9qDxg`TI|UPM4#2wgb<0H}bjFrk@!Wgrc;{irEZ zpnc5>oF^KLLqZMB0aZV~^Bs+1KtvPd=hm|E3MpBKUaps74T0?Xt&E}$Di1NdVxuMs zpcpcgQ9@W_yfU>Iz0|aa0BZdi320as{?P{Nntd)e>MKYjjrJ644IgH&9Ttg^*qg78s zVXfQ`8>2*UW!>OH!6j*tMO-zI{ne8&RMplJO#FgJ(NLM*gu%*`Q!tkqR+S0>0G;}1 zM!R8}M+Ot|;x>Y=mylPB^=Hkx#hMMOr{IIw)~>WvW>kYgmoan9p;PN;Ca!U_lR_M) zD!YB?HC=QL;=0$-9c=p*mu_H$BQhZZU7;QsJjl*LXFwXb6x-YC;xygB$k5aPg{SSv zdZ0^H83ADs34)n(PKl5h87l_>r$mj3hZWQwO6Zgv4`+WO%#%Tgp6bzA8X^-_-iR7O zkU|E54v+iwD{sEKyV$z)@FS8$L;|A#aMr>flMHBOL4ubV9&IJ_Jme%BRhAXS}axn9zuvQ^nHKx)*XsLUETNZ z9UR=cx7^u6&V&%#Mwkx|?!Eoyn}7V3Kgy{GYMy)U*~?FULW2Q7>P zB?SZ|1|Z>VEs}i1(f{CaSf&B;Db9=vr+!xd;sO8MA0n)Y}TppJj+-%79`abC$ANSEpZ4 zXbeg*^U=}K(b17q)vjGGmWz&a&M8r`u|b$a*Ti)M!n7H15(8l0n&Tu^dq|$VPBO{a z8F>u%!gThlr#PvUQ<;8I>V&!PdqV7%3+&ns1S3i5Iwegcl!zD*H(l2aDKT@>)1gwc ztrHIXduJQ;nC7>35(4(!2ZDvBVZ!%<(3B!e=`hlm z(UZFUTD5uuES<6cbIEi zCoNO+J{e;Rrne_I-TY>Tw#Q%wuHSn?sAH(|z7Y2xD>CnTWjsXSr^ zkBpD2`J-p14-q-#7_cSU z-C4G=)X=Qg3251b1p)>n0?Z;HaBy%xNY0WpsIxlW#6^p;5C+1~G~K03m*05fbp-7j z1R;=OZ{wOpk`qq0{&GNLmyqgobF&3zvP#u-f8s`FgaVSWsB!gyFdm$~&VSbq)XOBS z>v2BHF_YXoEMOWB(Z_0^3u83(6=VJyxVPAr5vz%y&(V$^h{6KE026+yt*A_K2Y@6@ zb?BAx*RwJC$_uuC}B?=)SLK~Z= zjf$$9O+O67(R!n~W5SR##|Bf%AyNnpQ9=wN4BA8@MDMdO-Z#cP%dVM-lCZeZiXtV5 zQn_j+RncaDxoz732*O&0gd)HqzywHurlg9S0!h`2YLKyrE6-zP1VGwwN5(m1;}?la zkK_9Ms(rdB$c%SO@rqK_50v9$2tgo+5GbNwiNZ&oIXj zzM={PYU&mU0GogZF$|ww>PL++G$CSwoKiqaIZ*|#dCG9=g_No^X!&r?xyG0$Y0j4M zr~W<|g#yG#M1UwUl1MHU<<$vAM8hzcuA@MxGH6ti3}~Ljq&hEZjH<9WX2yV0CTuFL zfx1Gx)6JJwoP4YinjNUAGRBUaJSw{HEN9c67BFaxr>e_>Tsm1Jln*JCcFZ{^$VH3I zwbUrojs(i?z`1YqU3PZHMhYnEuL`B&&ST7}vQ`8{YMKrJK(g%`-GF$nfJ#-_XIY}g zB1}3M*?L9X2lMsl4Yw=1BM0z_8D{Uos-M{@6b)=T9@OH*K4HNS&nVoE-k#~1tuYP1 z22UXKbY`0qNGM2|!6X2oNMh6ar%442dN86Cd~fAm63I(*v`@ zO8j?iJ;n?@9E>Dk!cph0Rl8Z7g6jFOf0xHqzc53I87A1xcBhADfhxctOkES&c1U@B zy!q2V{*%?=(Nj-7*=;XF2s!1W!^0alZv4ex{KdQPzPo6apSb$uuYBoCJ3Bi=?lqi0 z3R&jTbORX)4-W4`z}=laChmDi#6sBj{brN>I%^5v^f+Il?e6OpJHPa-0cQfgy-{`u!0ee~k>_ujpJ z{n}Gkuk7#dFPF;@LSlxGk9HWnh^SU2fXKia5v3Se00V|5tkZC~I!w9W-#-fgt9wTg zs9R8^h^77bT(o%tvA2vQIfd{H?EYJbqh?i~Y!Ood0F8-mHk*6*?v*aC-9kiEe);t% zyEGv5eXsBwhGDr}KK$^xF2+9BK$Ik@X4y$@Y-{rr>h(VnAsS;IO$f)w$M^5w7ZE^U zEa6YVoO6M-`# zk~LOL2TaU3479xz9>O%_Evtu;?>TRL6r2;o9 zN~)gYS33idMe)JKME#xU95^8mp-{~zjsXR-Iz~;ovZXp~A3+4wcVyFI4Y$Sh8nV`i z-tsl!%PvmlG2Gm0_9*+JJ;%OlVgBH{Aw7@=XUsOnm|fEYtfoOqsi|!}i3qAcU7R1& z5W}A%S8upkF+Qziy7ByRg(?1-9+HM>wix?0lq@JV<-vOlOqnM*F-v|ZQj@1NP;US7HK)K|ay=j+WO05WHg(ejK) zNk+TNOac#BYb=XXm{toWDTw8^DdWmHt79tXfocP<7zhzk z%FKe}#A*cO5S1e{V67|&kkTkYi`Xlp4}5BKEhou!yd#e(nYtuqHvgyBW6&j$NwG<4 zRim)!?$v27F@~lMbwH5007j?0$0d(oMYN~HLkcjiB+p8Er-?T8^Wy*1UJ4_=ef*?9 z0ce^A1<##5clU$CHbx`@6sj7JaRcvhP_|}yokXO5Y45G5Otqof&&ZIUh(xj_PMUxW zAwbT+n(Ye>1q5uG77_bAc0|J3NL0g~;^wYUjVFtXfh$64$&8k|m}11tdOBQ7{CrFs zD$lX0?xu+XXv+22nPeD-wrwpp)9Bh9yWnyO?fF^QVuW@DMCAholANckb-YX;V%I`s z#yw_9Oy<3%X*NAN6`X1#U94(oL?9%t1sniC&MP_#zuN+&nxixAR$LOUQ6D-UuK5Bp zYf7p|n5bm>`1cxdjltJDA zGJ~PrY0Sqj(va4}-yeiWxtS|gobSWf8fwK305$FNFTQZ?`ulJF=&k$r4&Hw2-S^&k zH#Twa^j_DtckkXkIywq5c3aC!mo7d3{PQpU%-=bC_UvZp3#nE&1n`Jp)PxY@)1Q3y z$xl9gUp99S5ALoG4mU@A8jg>Sk%2QaNCULD*x7CuXHTC!v%9z5b};ZTu%rwbfk*@p z88vW@ED%%~5}}I^o!{Eq-B4zLJS67KlGnpVMA{}mAR+qj=8gBSeb6PkxO3+7Kl9mL z*a>x_7c&z^;|8>Y20W z_OD;Re(}P^7hZUwZQIr6SR?}o00kr!I*}G5(!71?75leGxj2`l@Oi^ zJcZ7PS88gDh+uG?=@1d|;NU<+?%cVvwY7ET%(<_5|*c1Y9srM6^QL?zwyS?(y+)jBywSAl%;F z0g@16Y#V4BK$JXipO7UDsqcFLLK=sOAr=R;-`6v_g8A!zI1E{2rJCN*wC%F{mH+scUwq-k-~IhB|JJ|!o$r1BheP5f zHW?|z23VR-n|?AP<}?{y=ojP93yKY%J>HsmYl6e9Jlm$}X@0*Z$k;{N?C4D&^Ug1< zgB;C$rni~Ku3By$OZtitVf01QPN3-eae1Fch>_}m1OPw`P)pL3vSMsRB*MxmGGOJ%YN{O zUf07c2}KZUE_vZ6(d%G_*rw-rg@=d$N48^*;1Gi31Wr3LFTbFiK7G1rqE(js`0FQf zjOvbZ9^#^~qvbp$f>?|Gc zFlI-#PDE~+W_NdIwOVOn6aW%|MkWnet(H8c!5FAGMbKbd4D2y((MQA>aR2l!1*AwU zBq1IjX2GWEx)8$p_*gRZo8v&-4@2gJkcl)=A5+%OZ_;&(w&@T<+jXMd0H`Fx!qn`{ z(_VfafZC7DfaAbRBq&;3DXdfNbz?@%rVc7P+2tSQWeiT`r7@$E28rir;If!KZ=JC@ zbRyH}yK)4V0zCP6XciV`3J?PBY%L)7i6ubkkc~x70|2g88+}pR-QNrw1VD=G{%9ET zFyzDgM?>Zz^-`ngs!5lw+fJSd%vHLAOG@DSt8+f0(>7|M?ilbygcxHC^ArWC^cnEoHyLTVWL^uCoHV(!-~gKA@K3C1`&v8vFIMTc=3%7-v)-9vc!o` z$|IhCslAuV09nC0Y(2)ppJya*gdA#V61XOeDJ2VpFtZByuIub9jL%r~+w(EI4W??D zhWDXL0o_ih9nF|o6IDV8>_A;Kp>b?_IUqB%LTxpm+L%Gxj>$SpvKtLI!y3{I%6oQ_sJYvw+mO(I=RUCwcpKc8@ph3>(=Q z@H1lJ6CNCodobmVv)4_(GV%C4kg?l`@}LrLeU3Gn5E(r|A_^2Vh7&_5u8PE0p1Ayv z{)>O~^{;>92d}*H-n;Mi!zKW%k5@;BN6W3Phc8?_bMEZ3pZesp&p!LmLl3c})q2HK zzX>90(jOus3B?c=aY+4*+qbXZ{^+B7H}4)D9HrI3nGpB3_qGvkB^U6YhDdcKl$A0{e8}iQqEDvgyr#!ybwHzHeR)R;0^VM(U6`U-wa}9b&Y8c8Z`Zph_p5$gmCTJwXb~T zkALoSpW8aM(=;tIY;A3AZ7pMr+Up5i>;wu|7k!#?q}#V|z5ePCAHVeY;}(BMMNh=l*i_*BDZN8hS4jeLUVU_mue0X*7&7N1V?#3 z5$*5q|KczHV%IH()$!}EzxL>37rRB%rzDW;!bX1R-9R$}ANS>~3BOtW;%c?(`#y1z zeW8gd4ZxBxQ%>!23o}s4!qUXJ8K|@z94B*5+*=-W26LKvVP@Ryf!7Q%KJJDGe$Ev# zP(1*uAuytZjG=879kwkr5F{ft$b=|)81j0PhC~@zSaDUVZlm@NII8sAzRHnFOM%&) zwr11i>^A?of2KX*0Fcro5l1aS!vwEFkDM7G=e*f$a$1I_tfZkv{dy|6EjNN| zY}jP9zDqN)N}8Jb+zF9_X7o#K$8S)QY8Bck81U_9gN#?YY_o<`=vrjXP?1kWkxiTO zSSQuQuy>gnU~9-Z>*#sQ#xNjTW`;)zTZ2bzy;MTg*Nq9MUKKP_V%K5J=K+{g+rFX} zna@b`Ooo{;l)T-hX(SiwCX@`KnSw;o(A!AcU#20yT+UfrQRJL~*ic!etoHh35n<5;aR5M(jH3)whGiVb9(#CrI1Ixu=)hUbIjiTz z);6LG%p)OCbr7>`Q%dS=0)Qq4U~Zdk(RHdlZ#LXB_eo;Y#-Fnx<)GNCHWO5k&y9=3$9IP=ga^kgWV=QlVxHH*rP;K%LhE ziHpl4y7E1vMiCV?b4RC{va=68%kz{5t`&vI0|2Xk_2)GcljUT!K)P)zAkDDAX;tR_l9NAP>weM3Qq!3)US%(LVFI zW*QmpL=UJ;1E!LOvo*FWwBPpwgERr#Ha0=4TrJaTt}L2hpgLx!BtQuW3zWq0GS<8b z#R59cWs0S}oteW}P08rHwYoRz9u3E`Ov+N~RkWqHZCHA>f+j=(U@P}{D{tsTp}5v5_$ zbkhEns+;<0=C(X_J?nd|0q6{`OgwSDFpk*R#YRce&_*#t$Azh9*`yo0v3TgTD5$PR zu5F-Ic39ZS?#DXS&=5@7j@#X+I`h=G<&zYodanYay#=c~)mDX7)|(=W)#o*{j=

    &i*>r9L#aD3Y@+a6_Pg)V4UUWdir?z%2g z`0#@dUjEj%jt>s6T)Fb>bD#Xe=Rg0`Kl9T!Z{E6n=hj@$}x zU*6q64G8_v_nTGeb1VX`O(!A{5FoV6Zs7cb*I#@6oi}gYyM5HJS83Br%EU=B5gi>I zN22$yUBA}7{plyKUU}s5vRMp6maOe(v;m82NhAOw7y}Yg69};hkr0Wcr3e^gAuK#V zT6g`T>sI}Gt64T7aL()Fb+=qT{`lh&V_?V$1cgEQYMg0$hU7jq!C*VX2S6_Ry7I$n z&g44%c8275Ld9xg+-x@Mqs{*5)Bo^4|A*gx`P)DI;j3@F`R1bQ4i4_G)~l2&@7B103v`Q z2?Y@3)YkTk&wc8`g@;23{brENk|9tCNKC+a?xKQe!H0jfzs*F|j3kY1+Bvc-(F=jv zwr$%s3-_DN-l@HFXZQQQk1>YWGBb#zl(gG85sAz2VlFQAob!zvH(z`0_3f?g?d|2$ zPhUN~cZxZ)B<+giCE85Ku&4R`dK{bWNPjp!K3=ca!Wth!5$;o>06XnAgFxTs%`mKc z?uR}lhLafrbML%K9Q)Ps-zV&M8sIre6tnf~E=3$B+GxV$T@+OKWRG;MGM zZVN*fs5Z1I!UD@=3+7A#G7mAvNCYxT|5SewPP=}YCTvGz)Zux>jAT5i8gf!i>0p;J zDpg7I_L_)T%TZI&ADGQxq^%-yMi+jmB4Xt3cWq{x719}wado&E@|Xc-Pi7IHW; zM$!E*gg_V{I`{C0H*X3uBaj3Ti9s16NKHl%5vVohl_nbmWY(G#04Rgn1&IZa1!I$Q z7Ol|;1Xz;nAXxRW0HIVDRR|#fX2`%8F-j;rMF=qzeJD!~T3ZGT0R$z9LI*^02xHf$ zHbm9}lNjvzIg7ApPm@}$Z*H25D9D^r4sBET0%3?D=RD*D00JB!B0>fsfQTeIpQzBo zXzdVDVi|Ih&436b2!bW+uEET#Z&!mSXVyL(x)Rc4*h&Klm;xaPO9m7IP&y9`O$dA2 z+uLokjC6dwg0OwO!J`%KpIHEA$^CkDu-V*80+?F?zyMr2VFwJrggJ!cRlafS?&;H~ zwiY|vi_`bQ{UIfQEPx^)h>XI*P1BG7hr<83Dlby|XJ_XECdBFnWoPpQBJKY;fDY-N*=k z20{`50E{t$ij5kaD0IyzEFc&tWQNQMK^9Gj0V87SH&T67BBIR-^i|A46hKC|R|tVQ zA&N#L8Cbg_i7+50&gwB%O`AFERBaIy0p;5wA`Fa0L6JImE$7Tq5R76F0L2pk$gXp_ zo(&cGh=PoP7%~tbQOO(fm6Z?xkbr=JAOI`FMM6drO^Fl6TBV|KrUamTd(2{k>Hw-D zM`a`mg^*I-NCI3e_5?Xn0D+H78buIl!kNAOpML(OfBvuj#fCBvB4?n{B`Vd9wa6s6 z43QE-7YKl+-lZf&kwOqzYpo5l5TP~~L&Tg-OHdCsHcdxFYG5D&1VSEr*;o&V0NBJP zr34}XB{FHDI1>cs6NG8*A-it$sy6}vqM(KbYqJ9)0s#`h>e$LTXC4rd0^~dZf;HX9 z$rL+nH^c%6$T=s%XbVF`ji1LD2~ko;M8*;`4>1hGFk}fKpmq{OV6Hs@gaL>dFxEdI zXzip3QwaTLjfjXLgD77VLJhx}3Zg$K@+9FvK?sMGNMQ61OVaKuUAr7O55oX}Aw({e zD1opHXkkGjNjb&{S(SASKT!w-rE{xzEegzza%K|Nc%*7|rly-;497fN{SWowrbK#q zO*9txmz`?F8^@C#qqzW3UEWjgHUe`gr~wEVOKWl@u8L_WJ=MnQC(AAu=de?;pxILe z{(vm9h|Q_x_QN|nr37csFAm{=BPm3dY(lhOW% z%4A}tMi%qyBj4`!L|Ao_uZ#8_AL~3KC0Z2E?(7+-StWJG10H zXD}lWghZrzE$dmJO7=Nc6uLvu#u0%iQdr+V`s=^^#{1Xb`}`NaaOsIp9ACY%y}NaE z^mL@KwY~M&<;Q?P7=+D#1OhAwStRHf$rvz`u=K;Q++ObP?QU=Fo;z~}hP;37Y|}J( z7;3TE44t%RI%FsXXNcH!%U8btD(CR&Pd~r6x3_a@J2Z_TQ>2_TK`Z&Acz2D)j9+LpLp~MA_{GYAtuVq9H^9MA|O(#51iQQw)m-nH+MK16+q>s-l+-z zsGYXPWC8(Tk$iY?@HgN1tF3Nv@%)9;dwV-)x0$fdNq~o8=+~RL6$k-q;z$4z2!xY#sAn1hgqct%XhBJ0Cvn*M zPZ=SlzVCZZf*c?-1!}t{i$Dfsi7~*CWJv3EKlDSkWPCzlg3?n-^~-rC+GrL%=<>YX zAZ$1=<3;|lb~BvFv9Pa5U5`J_fV60r$E#J!eI7PjO_Mo=osKCeh9Dupu)PIozO>0bj%h(s3bw7?@u);(Duk*G!%BXC&2)2mp*AgcPD^XOsFB5NXUg zNHm%ZB#6k#sJKM0kqE~SQO-HV7!ZMZVq)0w5vk--Yd9;kiAW~^)pbSy)ZAVGCJIEL zLw)R^?XjMsLkI{knCBM(0u|XX4l%h<4u=gp`MtuxUcyCkj9)O%o7+IS)1F zqkX+7P*wvT3!tbrA_D*x78DT7{SaeRQ;89PKqMyt!kC0H5CDW2BxT0<%yXaKKfND9 zk?06up~REdPn1>~LTsAm>Qh%g_~65ydqN69+pdUaJ6B1e+=Mop4b|%;J{6#2!A|pG zHBF$%(0a4s|PXEco7lmNsq;J7Gw|?#veGx7`a9mfRHfc$`?{fYBzC- z$xMPO1v5a@6Iu)&sOf>~)C^%r10t$7PW^W%BMF^MXwNz4%<5CtKPAQ25ZVwh#?%iv z=ipEi&?{DW}blfu!rY z5E@`W3^6tc6k|l9)q1#f>+aJ}ed5yNmoHp+?EMd}qYz+V$$FZcOJIsKhbG$Yyf%}C z1C1FvikwBK4G)NR!h_^l!3qW)o}=&-V?YICi`xZjJdaNyVG86@So6H zwTkN&$S;oTp7zGhRHRy2BS2s_Z5Y2lKWQn4oE=@>o*TBox(0Cjn*7Yg+Z~2s4a|(~`HPQ-*y;F`kMWBF020PiyL*=| zKKASh{(k+(@+Vpr<5oJaCPFW1M@u{I zsufJiqU|eMo2kCkLi-h~?Y%y=R#8{ACjFD8Kss)wHXa)P*X#iM7S_6x03?KZc!5fc zWV`9kZJ&Pl^qKvx+itqGh#HQ9f;c9Rh)j^s_GRGpNXvDImL^SzONq7P^Au;K9ZF|3 z&UH8dj$M^F^T;F(XE@6M>BhnB@4WuX^0~$NowL$&DE1C&5fV(bN6)WLN;mHstN)_k zqcIR5JHYYs4BwtS!-UxlHm9ZDKLTg=-5EN~cEJ=bQOTTpK$`k!&^YXX8^+*5a5ANN*#Y3VPLEzy2{nuZ6{i|R7>OcPP|GOuj zzM8AE8K*)G03wB^4MO~lm%sVi^|ucCqo!@1dE)Y?9((fi_FfwsO$y%daO2*s@4ouV zo44M}%=eEE-+u4iryji=1LYyBoSy*)5JC*p#0=@J>u+Db@xkHxXw?s!KK1=D3>yLg z6p4}vH$$(Ei+s?q`1v5boW(_v)*!UVrcUBNr}Q{=_Ff`sky_FI~dgPQ(P9y~y+j z0e6FjUojdp0&wlp8 zg-15W>#u$7YxnNmd+O@d&;GriU2H8_du~*Ex67obhn3ToYhFuHekE!eSK^#{y)zB- zt`Q2T;A%y^#^SdRCoYfbCrNUGt1-H8PPldZ?jL>a>vwM4y70)wzxVl{|K-2`B_g08 z2g6X941gs^rQ%ejfS7YWI5>FgjW<5}@WaO+yY%=IPjua4Gpxrwt3TAenrmr-wGPmG zvm0dzRl?d%_19q-?%ceEED=M`5@WNwy`!z0-&Z!kwDkB zy$EGs8DN^AZ7&tbljo0NB(gVpo>`B25`3Bn*^fcL*(FkZDD~!%w-@z;iJ2G8^5EbA z0l)agUwHAw7ys#R{@?%azxv&`-@D!bLFPc($tf_aLI@&~QMkB6{Od$qS{zi1(y!Ln zgWE}YAB%sQ?LE}iOvW}%*D^%~u{7o&*Ho%X=dpzpy33ZKzpA=oy8zdEzU)Q7yd^{w zV-pCFG1sStX)zqS`WVaD(2anVh4I)-)8nKu2iqx3n<~T@Su^LHnE<7dPsSq#Fm=%+ z4%KAd3Vi2WmQl5)6CAsI7bpHrJ6x?B78e({1GSnnT{#wWZ%o++7qiFOc2Y#lVFFI) zcRuc-8)sJ(PcALgn!@>GrFz_^=!Ou6Vd(q58kn^RAal+P6qrZjnlk|8uIn~w&;#|m z008BOn!%$k^;~_uiacZCS_mm=E+Uz>oO4bo<;<6!eCqtgi(5N8<{16)*H7daZDQQr z*?H#aXa4=4{wa~>Zv!x>V%_&iebt7=;Is!gVO1G2LcH*r7UiISEJ7 z=9VHdmf?FptiHmE!rXKGB&AV8u#3rX5*Dsz%%tE{S8FJuWqQDzheR=0ws{#+5hyc< z>egZArfGbQu)hF+vFuP_Bsr}BEdX)32S)r*sv<|h%!~-AX|pY269dA~_d^pp!Y~X? z%G53P7Rzl4czASob#!+aR&BS{H0{pz-g>=31fswhVhltPF{H%z?;YR1b$5Gv3xN`9(iB+4n-QoRr|@{Uns%aC>8BV>)(f1IE)gkfuZ24e}WhyYI7HNvz3kci;4 zHHodqdY%r$z%-9+dtPRLlDfXK;EGW^&9a%?UzN*oJtwxQpU+IV5j}7s>f9^J4K%TB zMv5z{Z5{37=j3=e@O0|BE=@#85DE2fj6euTLI_hy+3r+4OxEDAu~ZnQxt;wp$>aL2$gSF20In3V}G6YJcN1 z`mfbfn+y;UK!(~JS`*oF9;8UVnc_8yItR|t3??EewSK|&Voz|SF+rG-H6d!{8xe&- zq0vg2p!q%KAb1eNM6dCP^>Y+TX=5DBhyp8&ugTpYWoT}U=+BT;^E^RvXb&JI!*P14DI<#>f`xjl!i}4&gS*}%1;O0jmj+ui{ zHLc*9=D;X1PgocABGO*IV{an><_xAfYk7XL)>786ZE&^l9>`crV7$Jl>r5$WL`UJH zx0}wbH_S%HdkSI=NLb+&my#t_Gyy;ub515$RephEi6;JhagcFH#Z?7@-mg2g^R>WO zaPta0c=cDS(*ZX$(^#(c?J?l!CR9(bSL=R57-bXJsMyS5XHWJT1v67Uh`#S-oYFU8 zFQy&NFjF8gNCpA~PN|8DF2=Jvr!Q{rpIPqiEfyibzzQyoi}e%8_O5C#r-=7~8-Dy#3L&WxHH_@}<4SjvVz- z)ASrXi|~37L!L;DX(KQ%;9%-zlIf;qj&lFrlR$u})CQQaP=5nBZ^Fs%n#p?d>vjbs z5C}-arhnzT-~0BzvAPe@NcbM@loOLuSG z`R=z~-r3r|cW^KF12apN3$qsyQiA~z-?{POn;%_2%smr6a^b>HJ^z`ragP{EH(P;4 z6CXYQ*uZ@4_-3CoiLCoIPzj4hLJuKh$V7y|*FJpz8?Sul#?hS|MSz+Rmy51hE|yK( zE!%sC_wU`ild^0z?Mu(U@c7vai`cdlm$8Kez`&d-2I2XMdtT~&rZXVhk}4L#>`Z64 z;lFkAVv(-vUU=ywA^yW0;x{P692ch8+Wv$egwsRITK?dx`QBSqHNxC@>? zf4&XPr@F51H|wEqV-ql-NXi*%p^P!5kHJ;M6ZRT7Q6=cba}X4ya$FP~@fyyX zjGk#nvsV{@JD~thA6PDzpZUyZ-g^B0o- zd%amlTA)Zo+}YZS7zkkK`v9=&`^6$P?IMOC04b%!nKKIp0SSoOv&rDhwPxkyVLkAO zXBy*tW79z3>>!K>+VRcqvDc{zF{IQix~7d?(_o0o8UqqA!jO5r>euT42rLK~DdZaP zIH?iM_JswFEahcxRh?X|ox*JIGq}yPYct=NnW`U_tKJ^~GC&^EVrx0{J)m5;c;UbL zum8)(FJJ!W|Icr~_WBz~$7@K$noC$!2mye}_||fiRcZ8HJID5;9+7OR>dcZ3h} z`}>X94LPf2P(Jra;(?}j&YA@gQJ~D1ZvAhJ4NzX1L`Ig%w}*?% z{x-}+0HCVQrR>|FJ9%1OM6S<98yj<<)J2wqw&UjN{uXD$j%I904+mzUFeXyy6+%D= zBmlyQ1eqao00fFZ_xaCn@9ysI?iQyiz>g_&gr7KLH0wmN*q+RYQ$*DFXOwA>WkvupHf|D!1vyI~2qB8(1PQZ*p!xG^ zZL)}P)=3@NN0N;#5|Ik>%sGUhE7J{94F?6JTxZDSoFfvjbg}94SmOAHVB`P*AOJ~3 zK~$|rWf`N2ngqxxa~;c0M4I5BPeU;}Ddv#jv|*lzWGv0L!01-H>DB2s6pP6R#ZM$k zodjCfgX%(qnuc?FXSu(3YT3e~k#?~-+Az=-QUlc8J2(s-t@~9!^#4C)Zx%CKlAMQq z5s~Lq)xWQIzqj}4nV#;R?pe6>m>N<;&I~1uDA4pGiJ%P$79a@rlWD*5QGT=D{9qUa z2IvS?YsU(D$;8>DJx*mlMs_H$^%oiMg>TFdi5Lz>|^B zFxu+hT{l^qZKjlBO!IWgWFVx~cy-+dALu*~5euu17FA5C!5~_bv4o6P!<$uE2MX0_ zsE;!vX%!rmbGZI(t9}>GVkIkzpuL6qU1*e19gLO@0(g2ooRnS1_MjfABX2cY9#zdO zuyI=IN16e|GJp|2DB}b?S4(4{v^kqHDM%S+rTCHi!2Z?Av;WH%&FAye`Khrmkyn6V z4(<$VIW;{8pGwQ-3Z>hKMZ*lzcS=A*z^RJ9JxlVmL%Y7Ss1iu1^V7?D?m9BW$0|04 z1ghVh*U=A15dm@$SXG5FjA_Nb)TBNezcL#5Tpk%41@FOe8p?~xFQ4GPTiSJm;W{*=A=j=eEKI|*xcOh zLI*@ZKJc9Jk9MIuw|Dq=e&U7S`O3fh(OW<6x-srr%5Srod5+H+oH`%v#gfzFb%+<` zQq>YmY*0}i7qmHj>Up2>GR?GEUd>FYh+fxq#$z-UrO=WebA8{}D{BMJYN;+NLe(w- znucbp9!0%4D7P@8#@=OSPiRMpAhxAZMFf=8RJaonA8o;!t$xZaqqY@H=P3aK$nvC3Pi zgQ>f<-ft?o3)U32t|C##ETw{~>xWv{)EX$W__}JAy!3?T!WUd4{A5;1Os#0uB{-w} ztJNMth!*`8hGF2AF#C%f%1ge0gJI z^Vvr}y53E&jLVwDxEgnCbyO=MwsK62a)?5RZcdQ1pKY(%zSNrO^`F&OtncwQIptG% z47KKJtLO1Sj(Qz-9ZY+=spaU)t@m#J)wjQWdVD;cPS2k||J2hTTP_!W{`Eiq!{7V; zn>XGA@a!j_`{iHxl?&G{{rP|T+IPP7P1CfwzCN4uY6;|7*eg{~$$d9Vi$!|%&DW2H zxpqQoS1w&X+}V{=jzfxONtFaadazGIASSQj=q{Bo6vm}XVP(FU88gl2CojJE!?&)# z9oI#PCD8u<&c~m4a(`=kYh%+0-~6j@-~8U)v{>#R?tSdBCwFBnEh8l})flT=9;=;P zRa0d%t=K<}J-I4_XXWI>UTv>KM5bdIE6v91d#g%=)u^wH;^ zf9{=k-hS-y$DVuc6O-xG=eb&v^$%AUodh#mE|((wiD#aD=k2%Odh6}!bUIy3qt`QR zoZ(e(mfEx1jE2Q9pU>ZV>#h5D?kyIJlarI@KJ`2i39%}PNNPB0jq+c~X)qgmoVFSR zMK9%&b3~;RQhsZDojO`-+`V=o+M}@j3TmpUe%ONw#2}?^9XN!p|LGS#`@&Cuc4K4X z{>iZ!1s13-m&@sNO63^Us(4E;qqrR2e&g+7xqR%g$3FWrKexHL?!`t_l^MX2!o0n{(TA{D%;T`=MTTKWNoBqSQEG?_ z^_sF8Bx}E`&L=&P9a2a2;04?Js*+Zn+z-=@^}eX^ifwgQ0!YAov4ExNbY?Mv2@55j zBC0Ky%lRBhH6~&9YNFJHG|u>d?HHOHuj+I)(6t(vX-9tMnst8K`D|~q-2!JO*`Lvr z=JR>ib#aJGjmsE!_jZ2uSO3W~&pi9D|Mma!)vx}i`$yJkX&W8h*_T1#y3Z^ajLF3V-BG?C|j-FE=~2h{EMpXn)huDy&E%&Q{pm$!Ckx1 zR{Cw$xjHj2Rdv8H+r~Dc#&s2_@j=ko&oWlVPo9L-A_g|56m;%@RPWXO6lPR!PMVDP z7R;s63C;IK{ihb9sDCdNi?>c-D%HA16`_`pRF$+r`J0;lN*H47WCbIprl2zb)2u2} zL2u4L|7fa$RExdqIw;MT%LK5EB~4R|(gkEtD5yqNRU-q=U%d4EXMSSu@Ib;ym-+vG z$Z!0{Z+zejBb;ja_!)-f?K^i~eDOtZw=o(JnqdGllx`&q(3ykd>_*}-oLJ|szLT4D zJO>xZ%aMp9(21E8X0X5=Kq)17lbB*CcmWs}2N1Ea0a}U8O&GJTD-nfUWe)(@Amlat z$V()+C^It$fsKouM{7tiCXDm0+5|~JMK>v}+BfB7rS`5ljMlbLF3%()sQw0xu`z{t z1sokqRcatiJ2~9m+*qG&u1|z)7&OuPKs!hC-e`@4)rMg?x0ELRY<+V#gc*}C2Lp?Q z5PBvdBLcBuZEZ50gpKvt>FNCCmtR`yJn2GHViu718YLkiBW7VRIZA89EQJCqMm(9! zCX+P@Jvf+ys2JJ4XGFycNNtU820%h^V@$KJk?WMv>H#LTCex~wJZeTGRP{ll6V>ia zKBIs0hcb>}t98e#4yvn~w~?6>f+?p@nw3CzyD$9WR*nQEFR+tusEV!@ebnF=D~5=O zlp-xKvoZ=WR-C#jtA0RhigAeSRVj$ccOrwBKnx~FMSD)?x7GutjsZi$WQ<5FMjHU&mUg6y0$T;T&v|n0{Z|F^&wbF+uK`T{o0>KQ-xL#s&2QM zuxt(DkQb;zrLcCrU}KLXD>!M_b!Mp8cRo0q^q;)%Y*Ynx*QBPBx~jGm5h_P`ojU)< zYN=FK9dZlE{GOB&(I^aBMw`auVxQ!d2+A3~k>^ClycH|CC#sraTXW2a$WtBd0UxGS zkM*U-e#&DI8Ox#6;CvMWX&LA3N^sy|8nNibu ztlm-G4o!ePf22L}>u+mV7_IVrP++Q%)Q!xgmDw4gGBa*78=6V0mPXxK1-%_D0i!XX z#bxvIDyrMc9+6jGla6JhpB-*&U)b6?+}zz=+Xz9#bl`Y0Nl^^MiX3Gs=T3u1G<6jL zB+YOt3W>6Xh3cBNiYVWmFH_cHZh(Q9%+yS)1!M;Q!FZynLF?KLsuCm-6gW9KS?_22 zJG)3(K*wXNj;DDB&0{p>$<=BV+)IK@x%_e29${{m*Rr6*e*Nw(_ zU@O&&w;TV=_}hyxGbmGMZ@%~5H@@+W)00yG(uLc%-~aQkef`hA`n7v^?h?~azVK6D z{PN$w`slSc-+1%)|NU3qdHZc5dg`gCp8L$FrfX|SGs~t9z$J}|0!s?^>bq~=IJ&*C zrK#?&Z|-kw_mGZ>$bwMlIHlp8>u-Mdd*8W!`(_$+cYWiNPd&T0vCYX;&Cl*SIW+=G zAO@rh=;Yq%Nwj21X&6rK-CG==0($Gttyf-s{pk2;y89m9Rm&K1?eCf5WDCIUXk$T>uTpt}}u#-@kje>pH3@g=$hQWyjEk zaC~(1>dUXZ`NkVJ-h1!<(fts@?*5*G-VVRk@=&&F>YEvrj6Hw7eOvqf>hw+e>FIp_ zNB`lEZ{E7oNe^ISZTh7z{lX&;Ka^5r%8F4!Fp!!hGsi}qbyl6fRu_Gk-l*VmE6-&P z^o)?7*+-R>N6q8RN}*9-@39lg?sN)2NzKWHUrd(X+`h3}f|;)Xdn5 z;-yi9+CR+dVA|bkHO2lxF?;ZtGmmzE`6v4Bvo$Dpyo_OF#xClplzrUjS@Q(OGepZEmT_WWxU`S zUPv8-Grp^kR~?(vLYhe{c-h%?X*F@?LoHO|pK2SNG(nmmdGOxoqKIp5sae-|^hXN4gPTa3np)_+K5kIfx z8WhC+^q>6NfAh!_A3Z#GzBGCoxA=#VMn4o7MRO8*mZzCrxOm~WfBUyhb?N;egc&66 zH8nMQ%xW&-3i?Z}N6{Q+?J7EQ+-jWsDIt(CbJBr;uInYRut3X5natoF3xG;k8OwW7 z!*gkel>btzJV$16BhCRVtwkbyd7Ld+90?s_U}2&x8Sut0MnI52fO;nxt1ekiE~Anq zYSmE@Rx=P-gi3CB{@(1-03}kPsvvmDP8S3sH#i|=fv`3S+neh<8?#PmHk~Zy^V50i zrU!G~9B8wjtZi*?t!=Jv@9fN`8-b_H69Wh7%)IhP=(=8{>$`qBne<(l&H5*vcw}dL zr|ZJEzV(-htN zRUZ6U=dtiY`RuCV8#9%N$TH;Q9ma*7tJ*}`X~kWs2PZY6n+MiZNu$*wN@tEMAlKc% z>Y?HtABfoiYw$2_sQ9Uj%fAyCuMDdbRScREFmss~5X>woIXVm@C!X4u~MMSt%EY)hz5Sdye1`CNWG1QVlt5T+d z_@ro3`a!u!n2xATd(r^JoRjtYzGL$=d1YV?vT zj{l$0V|mw<=1$y%@rfuYO79;M$(yKEhE%M*y8F021&O@o=43KmD%o`RpZ}}>@$mA) z=gwaUA&0^6K@ZA621Ejx?(XiMEEYd{>7_vj31dkhtae^HV|<86C}v->9Bx%r^SX+S z&5_3T=*7t|5f^Eadi=Y>*nn#^j8e&P_uF@GWW+QJJC#bb7L6fW&8$-1UTet$BCZ&m zuEHo?*Ktms8j0uHB#974LqR0KD3pHgu3NgUBjONh{Ryb56>N)3PI{#VSkv#G8$g*# zAj%b&j)Xy^6l*b~Xa#)Y=9_v`V=u``U=O18+^&&u{G0%N? zGNM22hR>^ys5e!0EDg!eRqF; z^v-+lF5;5NPEU@HkB=g3uER-M+?gN0cmLMwH{ST`m%jh@d+(+}x2BuVeDvdwUwL?f zpo8<`S87|Kah8I}&d&DX;o;%#UQf(JjPvEmz2nXmhrU^58|zT)7&YxrvowV}0Y`+_{7O{d4Ee zUAcPYi6@`DaOo0@ESJkRLepMKh+lc-mG6G{yFd8B58l7=-km#lUVr`7o$Z|`pZw^% z@4oxq&6^KD^zdZbo26EU+v|8&Uy!)ES}qna6ApLp9i5z>%+}UE`s7D1T)dESdsrB( z!`?5E0D0*(@<9bvnpdImvq;W1)bR-vu*ofzjd-u0#>) zKU?WNBXwu=b9rO4`lxHYa#{D9a$7&Jst&_aH685je*CGA?eFitck})0H?A|0Y4X;s zM7a(xHDCzJ(ciAGHLU9PAg-c##tN+$q2~N`G_6YJ8QLQX24@&8oGJj!Y{kE*+o4!K z`3f~jtA51aQ>}}9I|hSw!jnEs`>yW-JYKqLjI|#bbyTA_{GZuQYne|3_pd=tp@Ve6 z$fYN%Npt)R;2_!r$Zgd=KO;Z3%4hONwbjvlTuO#Y`?h-hB4*-lW7Q9h%RtoRGnJd= zb~|INMbpAg$uywIY}`ki-`%sY(NCK>wos=zxcV&f8pT# zh4u9fw2u$M0{KJ!h*E7y?JhLD?m*Z$(wae!))*F37@83qz{u$f|vp^KtobYrc*+2V@h%7IxD}fUW3BjA+jrCg zurlo#u}-DnT`h{?>x+hk=h4fu3r6{@U(`xwRj5UmX^UIcz>%SxQX^Cfa!9i2(^^5f zdS}*T5mEz;mS`ITj;ct`Hv)q!m~|KqHaFIUnA8j6xf|$;3Z)4fw8;hV-jaEZ90MvE z#;n*gCIFcRCL!v=c-C4$w_}P?({wte#zdox@im4*L(h>s>*l3=h>#0(lA&Zbx8lL< zq@KK6Q><~bQWG$(7*F*ckz+!Z)xwBvWj2AIG%HKozz4#iJ^dZK^nY@o5FCC|P=z(K zw6wO7nN=}pgNHO(s2x1N8HMa)K(?whVm z$mox?dV`xDomQB7wS>79JCZ7l6+}vgbv6-768gAy6~SywLmyQ0o>1f1KDVBg_J$%eP`fO;p??$pBPy{&*3a@dU5o zbhBJ5x!&?9!8|Ts^^{Ud%wmR|L1SuG%F#4k(d$>}Dj7d?T|*WgJE7Gj=G9<;+1a34 zeYIUsYJ6;zdRwhSQb`AO6;`CEDPUh?s73#b2DD32l?S&$eNHrGtF-GnMXrIRs?{iL z_X0Ql5C9lhNY-R>VSDG?`qtibw!OB#)^}`5KwwG~=e_YnBvMMI7_0Zz0Er84y=Loa z*T=Y_U7Sk1A(iqqWv{JdU9=ysznR8XOK22n>u$3#m_cN!!!X=GI$A6iyF0tPvn?vw ztgRVPf49$I)z7TJ4Kug?bMpqAx!LhmSo@y(2b#y~c!Zs0P$W^5rEzy?Tnl%1cXxL$ z92$40aT;yht#NmEE!-M+x5lBdWj11Bb|+$X|7Ap0zN{Y^d0*c9opVNtS_F0i9_~6{Q4QN%4&O>_xbco+hW)(#T)JeO>!3>CbGma@rP5|qNzJB? z!tr8}6b=!!pqp8vv`e4*1GzAGV4^DNcb1PpBU|sK=9I6wW%i{2Q;#pD~|)*Cw8ktSF)VIy%Uu)!yBaL$0W=Jyx=VYGUd3 zHFx%MEQ+#J$t)RiBw;eiBUqY=3i275^%GXQ&8R408qhJ{CWM2W$tqqygFQEeszm-g zyaV;de}k>{>NhJ>^2ntI6R`12`f_Cn-GSKiK0wq?TWuc`^vrp=*>WdiG9fb6#9BLv zi;K#_?4KWW-v&v4v59h8#{o%ROsa4(++Q{HCFLIq5Rwa?bDQ*%t79$P2D^8Z`&qTv zx-DFCIVnfW$r5!F)w$sxkwqoImjUC z5)EfZ;6$+gA`aUA>6%vdXZ}Me0u67!UjJBE3|H;`o%0Hx9c^g;qIBHkOUK~etE?;YK2juggZ9g3`Cb?6r$>7>OZ;iz89Cr+2XQloVG+zl#cWDyAR(BMTHxAO^tYm(J`!PsyP zw|9&7$iac|k_yofwDd^Leu~D`OuTfKQ(rQ)y~oFY!!gIqh8@rIlgvHu({__y2#ONT z(^Tzzbpse;&F~{CBCYj3-L1Yq%cwD0jgm%+>%mO*-cq{)85i!q2C(D1;U@918o-m) zOobWt3Fu+)S%dGz1g+Rwh5h>^VE9SxwJz-;1&T2CGW(J{Su|RVhpH$`GwwAM zRIW&kiS7Mw)ymlCy`**9d-Me^gVu@nTaK;gHG3FhdU?r!CPS9xFnsw=4m(ektdaQY zFo1lVb(^2z*T0jqDm^d}g($fS^G)W<8z-P{BdfNaS+ZT;Oj`;@Szj&k#W^(uj-}bG zZDLg!13@cY#ghCI)BPCKi{soH`(lBsn4r(RZMh!+GbqUkG z?3a1XV^_k#48)__nq@2ziLdhiMLT!89ZoFStq9#F#tXb|xaPfQS-gvv*yw!@@Q{ z1%pyim9qjRF=ZKOcl?M#+V=mk0u2^2{t*o9?5lrvh5NRHWfBm?8ueU z#?8&moXzfshlkmRNvt$lWbrQF^XW~3Yi8x+tj4KRHwZTIYR5f!HYRCAjpmUp*qRkc z#8wQ)+T`tMX+!dfbmp}ubuMF9$L?}`UV2d+Rz3WEO8PuoI;1ePmey8O6x3Qlw=V}i zV(};qYS~jY96Q5o=2jy%pSM<0W$w%u`Z9jD657h#cnCIw zYDqrYuYEKXKK;Ew3uZ<<|NVUVb#i#`{y-v39F6_*)lr85CkEQ;HCFV%5l5FXUXI&w z!|VEJ>U3>wSRP0C<9-ws1*Pk-6u8`boi-;|yYIZICfyS~RXy8T!H2wgFum#9`w1J! zGc?3dVdH6a{sq%rJ2*OJR)}WEB!|#sq}j3nqF;PR@gS>XVHG8ZyC^C(sVZ9RwF{PJ zE=e@4a@!A<$x=z-+6t+0{?P0vK&blbF!hZF98< zF?cG8E6v@*Q~b5G>MJnM+p_w zXBYDA$f1;}p79wjEmtV(C4bZSUHP+MbJ{)QD~seZ)H%Sq`F6eys?0-P7ym&|;-z6J zn#pOhe7wg3IqLgRmD?|!Wrk&IB!0?81dKvOGj+pS)ru^Z+6uMtfR^Qq>hEBFz^4M%#M@V++Kom=s^miLO0_xZ!v)n+t)-! z8yl%ISO>{ULvA2<8v)J zw&t2lqx25`mr9V^Dfo_22&830f~Nhwi0G5k3J@dMaMOQD!P@X%v_ zfU6b$fi@7>Sl?a+ny@nH(v)Yov8}cT(#1$R$>Pq29SSg|NzF6PH(c{kh4hUTCzBE> zP$&O11#Cc{Qk(iagkzziqHOux#ia$j&9flY^@B`I5-4j~z<}sxrmCE#b1nf{!HiXk ztxulJBQ!va4tVzR^3pL70l|693w$D*2m*DSh$wImAL=UEryJtgiHZw4xsN6Rjy1GE zh}9xB(j?YmoN~f4IGxS52;Kt0vJfdPYu|0?a04F|=Cdbp(CK^l4KCzdg%(JmABGCM zcFrc~?xjB{;u}25M+19|JR3vjjiGx}e6dNO1p-aJfXj2WhayFI@TN%U@2dt}8RQWu z2o@|kF)83d0Rto(oEJR(HxSjxLe2)EfEnD5RZ^I3S6(r0 z@-_9Xm;fidRkQ`e`y=x4?W>C*dlHr;wQXMkWZ468pZ+U{O^(8q%48Uk$QKzgp%8;u zgrkjwCumIPttbI81dEjNc_l8lFuK=c7zlrlMW@7^1#$37`ZqZnqOSB65d2xPl@P?> zuwpF1np&K@e8cNwYl4lh$4wcVF-fOIEN#qnX(;cVnu1rG><@xyFZJU{&;VK^(us<) zn9`b(-K>%WwL_QW?%81&fGmo{A@a7NA^)0Z{64e;UPwM0%$l5KoSf!O;N+m z6!N6l06FBj_=y083I^}!B-)q*ESdasKC_AMNWt>F2z1#VtwQN=5~@p?SiF!)rI}Bc zXH4bwQ0x>=v@r6r-E>xJztFl$ToOR{urcV=cN)TG@Gx?ju*svcV9A-3obWl7G|hw| z7`J;|3aRw0tqi0HnDj*#v4$&u)k+E6eQh(n#p&7o7(ll;Co zEiJ9o$#ITsr~gDKpcGYQTc13b@;ck*rhxNLJ8pb`PT7c=Q>E{QZ~SzS@ZEWloN?iL zHWhdhSX520!J$zU2Ij#fFeu!H1}I7`%XX5`v14f{5y`w#kR$-2Qxm!uzSu(tbVR(` zE7{K%K8xxS-=v_NDaikxngx8`Z@JB1lUzWXsR1I7AQl5M(;$g5j$v-ivqdfhvkcBe zR_X5Ju6rl%BwmINvKN&t{u=QcEXTax9TFCKST;8AusYwOWPb~oKQk++#$56;h}*hv zjWb>$CS;n)Jm)a=cfGq^s*D$SJo%DKd3>2tKg7kQs}Y)MY;N*6MQqAPVUA)$0Dj6j}1&E}CL`3hWE4`1m`nBD@uidMUBh3-S?H(@$lbtxz4#ZcE z7Z){7dF!jaK3DVm+9UyIbMbx`1=Pg7Z(~>X1atFjqPuIu^}!yE@yX&)>YR!d;`8Yo zlv#f*0$rchUSd|547S$)oNCw;*UNm>F+_%V18*-bLsw*DY#c3sOZ80rMQ!-v4G7aC6B15?mCgokm1Q&PThKQ!8j_nz4(SzJroT6u_!W2bV z&GqlEo#D~Z@MIeCmqB+-8ne59ZAB*Nmjn6PDhEW$P$J4{$A^hi;HSyw7bVBb%cqx} z`*vvjF}&M8_{E%mXDUtUezaZITK_h@_Pw1hne5?(kdkSw`~$|h@zk#--G(x)kV)PB zblp&W^VUPd5_0+Gpnhp0%_MUQSa6Mmmbj3-zhdlfIq%8sXt2Gxo}u8&{%!Zm*QJfz zCgoj@+bEG+NW|m(@%4JM>t;XA*yo{Ho4WDiZ5RjYZQ-0ik&Q@qEUYg$KXAP z$qK-$7@K}Kz>2O;(m`;&^}H|q5vT?cspuZ)be;Aw$E@fx!(eKrB}}>@M^UeuG*_1R zZJc>PIE2%xMXHmi;y!gDdTsmTEZxZ%dw^|!-B<5GSc*~a(f1n+hN_}O(y_kch6nd| zw1ia`Z@1&=JvYaw^dI6R$>qxSEmckJRGsANsH1QDHL6=y2HRSer9{2pq&CBU0`(Fd zYxnaQ(KYZSbINg{4>hN|6~Ok@GDemHqFIM|ioLEj`Wt5i+`ZbKa=!XA-Ta>aSWY|f z@G>YTT^9U0%WD zlKRWiY9q2jJ$YECn^>>r#=n#?I1(+QYeQlP0?6rA6xWrn;4WmI4f=$pwo86A4iZI93S zLYvAU8HZA(SxTx8dzNdVl|_>gul{3F6)7{dw=lL9+5!2=vi52*=ga(68GNtdPnS zoIJxBt|C>zbZZdGgo|>L5)D%}vJ?d+5s%dlXt5j}o-9yFsALIQ-RB37q`(I zDBF&vq%J2zSF@Jn0`#TSbggE$*{u&Y88R>@X#>GCc7Dxa6^u zSNtIpk}67+baYTXxllcTn0j=n0;fpn%<6DNp6@r+KW_0!S*hUUNi`XcT#s0WWWrfa zOU~UQRo&N~WT!Y32b!`Fq8L+uOH)gGUT+$rK*E9g*RYt#0V{vn+8FRir&``97E_y?_7jqBVGmj#yKsBG?XS5F`8Ts=!CF#~`9i zjfU=R0vZeleXdQ71dI}@x??Y{39`(SJN#6FL(N|q9T$D~E{CGYc8IO@v5Q;ol!TAsYIa@g$CAqm8G#T<)L?L)-Vh|6K{|N(1 z_7B3KdYoOgB3%Cb%16BX3PYOR?XPrt4hG5MYq6#jvwNBxG#mW%jPZ2EWHEA4kcLh| zAq%SvCvT61g$jB26VO~fh&6c>lr4e$i5lKlijGHh7viiElMzCv00QFUh)Z?6dy@m_ zQv@z0b|pt~k%Z|P@z5o-Cb~25JadvLsXfB0SjJ_>k_$2X)G0!xkD_Fu6giE)*qCB0 ziAYl;{vW(7=*ifdB?r?@6;votv^EdL#7*)ttWv;)1kcMmo{XdpW4f`X(J%|!58~Fo zHgk4)nShO?h$#V~Fr@L|gai>hrtpJ~Tc#7>$Pa@Aj(YE{5j6=vFIGuFgPvq?Vgg%$ zYSrH^f{bP@rfDULgd`cT1T`d#hM2=3Q#k;kCSJ;syxFSJwm@%pXK!>u*dy)`hE9)>g{fq^)YbFjdr@z|VZ{16KkB8?t(xP{F`vR%OJb2!Zetew{c>oJ zrdZa(#kt8`mjGdO8Y{7X@<*^u=@mGcWtGP0biI)Awy(GxmR~w=u1O9&mVTGy0Z_bi zM9c{T4)cPIJ5mZC)lqA*)3A%8iRS#g^dBeomAy!8F&20N8IA_n!3}CWZbrvaX!eFxDc!}DKjRrhMR9Htwe_lm zJ)SMo5)B55YcJI&d#E`t?n*JMO#>PPW@?Og^c;8~nOrd_H#-f%K$VY?Y`vW&*}z?q zv1I>cliMiJfmOKM?PlQi{@}aQ@!FESvf%q-F{%UyQfM@{A3M9GY!;;V?Hs~H>h&0+ z2RZ$Cl90(zK(*<IUddA7Vrq(PDJHo||ihCN=VXNUAe@^VpK z8hVZF?OMm*(?`G>F_3;#!ie3-nwupiBs+CA;<39@3*^nH8?e>e5Qbagc=>Z#&bsh^ zmuiGN`)QTSE!?=cFunozh5l)%{dQ%DE{aaN(c%WY~Sia@F95tE#=c}Rpxu|-b~*JWe!OWCCk z0*5W8N>D)@tvb~)N!K-S4Fr&!^o2R#w9UDyX6x>HWgA;wy${zLSvZ!)^txB7T2>88 zp)3mKvT>vkAqh4Lh=Lti%U17cJ%3;5)0p1Z178C_jC=2V2VHE2u!{2(!Z~Ijr~vt* z$<&uGJDaafgw`BivB`r(8Azr=O0@w}3J5?oR~Hf0P>^l;JPhq%Ch!MPHTm2S8>}K@ zt)O)0kaI2x=&(dE3wr!MxyT*Du^Did@&_%#LR4(~0TVm^H{Oor+UB1n5wpxcDdVV> zDX0SJHV6P)$I4FbtW|gg#dA6c{#G<91z@`!TCyFxNYO7N2wVnK_Ip5sM6rb z`Gjmf5sB2K*8KA>RJ4>$cPqAtTTniF#ehO8L;1*9NrM5~qmk>i_8KPL2h^S(b)pB%p=l5OhkDFTmGwMJebGy;=c~WlJ z4}F0Tk3Jf7hpJk3Rg;$z=D-(fq4(3zeeS?JdgB+l$74I)dQc`gOZ#?71*_x?ydjg4 ze;UlGnjEX7FisA@s?KPL9_z$|rw- zP61*2MV(S}3xheTJG&k8zzr~p1uSxg%Ih<)K~AB?9bI`x+_sX`5**4{^_ShTM~<^G zaFuC$XfPK9HKDkXf4_g>WfHX;Adh9C_vc3+NTR7AM9Qd-4D({mV zD;X*GUaKEqU>U@-#nYgJt2ySk=3tlkQp7PGp1FXl-p#gEsIr;$Aq`;ZB>U#BB0RN7 zfo0)$+T<*b+bL;kvvVp=eJQ@+3Y18lMF9RI6FRIbu*{h=~;?~;MmFYFU#HI$h3XK<4fMZ)p+5X`p>^h!Y`Y`|0X7D zdy_aAS!CeGE*oRV+E52sbiQC22K#WVqM&^=UMNg0>a2_(Ol50mMR2~~oUcN3M~XMt zf#l4I`-r>EPBMJv(WOiyAhS}Xi(nPH9%HZ{LP&#P1yGFs^Fd0*n7A;ScP-{Q>K~i* zRO|^_5aecTY;I&;p*y67vhA3yP(+Iwn$)#?K4q$k(T5qKLfH#HMWj*}of--KEPwpy zezme3ODgMsKRbk$f`Y3hnoG`cgg&|;$sVdu;d$k1qz zX?0y7dAQ#I7WLfoCrN`wtVDXc0eH8TH)bIwbyS?qWQ>9#4%2gx=@5r&vT*&YQ&(f~ z89Ed06pF6Za*V+dRS)m4pve!kGy$F^1#OU3L}nt6d?G|oTiPCrniMRX^{;dJL>r|a zH`$8pp%|<-a!@xGH~=xp=Oex(!f0g_hWdv37xCc!?Zb4Dt*M4Qe~|9pPmcOP5e z91VgbF2vxh`#V}uq+2q4q)gvH#oAMM9a?gxA{AyNSmuU}Rh^6mB^Q@@P-N)+)sJtZ zpmcC~Qgisyiq!0^Ln;9_cYGj(BCdLd}f!~qC&G}_9i$8;!*Ze&eX(84XiDYRH9pY zdR}gR=LNiPay#X0v%af)~0XxJ2{~-~deZ$wXH|3?qi=3!zmlr79EUVbw_RMH2r73HbScuM& zA6-?5LYY?}HIi}rIYLm|`?gP_O#QyQYr5htEiHY1e*XIUS}IckoUqh+i3Ou&t7hH) zxpy@66&&}Vwf$s+%f-#jY}oF1JiVFj=Ih&;rvN9lMk8K?mvn~!#|Rd zgz=SQmaX&~h~laqeYQ$);PgGF=ENDz#!yz3M%l< zWSxg9fS#7_(9lV*BD~znW4qHgbqQm-G>#)_FxMJnPxNE7HB^3zqvZ!!PB;kD6`uqr z@DV#n3`rF$Aj#(!%ZLww@f&91Wk6$4X_1+Q-+^H%Ez_SkY9=50;;;3$501R)3=m>$|*=;7n)BjC(5l!a_4bf&{LZ!uZp?y(GUDs;~JA1&mq8Eog~ zWe2>U2YP>6ByuofyO!2})S^4vpv3OwHyiB8UF7SbHtn@3<^{1+?v&4IFXau}VtZd> zJ*eqc9@=ZI0p%ac@?kjzFn}KB4G)>+EG%mHVfK-<?xd8c9Vdw3!(;A(ZOM zOx(2&G*uOI?QT#Q_4B`R2102OF=^V{V!V**h7L3okwXYO##!mYsoxTqgCX#9c==!) zCu?TrdM$?Lk0C9qqG3uw*<&p*uuViNFaOB`^bsg_!uNxaQi~CQ&Iy}l{GTji~93jbN#%$r`0 zW_q4Ad^e5nC1ODc5+OJzFkEprY;CW95&rx#qFDQitIvBI&-42dMftw`(suk35Z&Cc zT3Ter(Uh}!qbbk3n80IRB`@$sj{h1S%~404u~I zhb60xIe=D&lY$~*C{H=Ci+~}NAP5&#?8ed=Z{`4;QLr@j6Cm@dWPynYf~!>2+~As% zMvX_tx?Dxbo)AW}v6IaeTYyG_*wD&4-EQ{Q>;-KJL1Nrl%=HS+Z2IOITkYOfI`|SM z@H)q{<}xYvYl`Vh^CA*Z*eG8aoMW@{GuX1^w8=O2Yr0=epTAM@!gsK}Pl3u7Nf_B> z=go5sdvz&sN+qObFBC3YNXU2I_($CeE5EyNG3E=&!&YOzoRc*c{OS!{xNtE!(08bi zH2NjZ6i1Ot{kMm))a9m4sMB%Dla(s(2Eq(zF#k#claN#}foNIf{0hL46kP!gWx1e5 zwr&U*<@y;)%&ARuIxh)x?gKqyD9jteFby8sfEG)sipJNWoU9AMBfuMLqTZ087vn<_OC2Ssplhg63)7+O^oW$ukz8CTRXQbb_CX3= z9V!gm?2}6}ODf6Pv-DL2u!v{i&PgY6^yz>ao)_abT3jgXRF)*s!}m)X6#Wax3V{@2= zv(SQ0?A;BRpCS+Sddq%XD!s_@-ivPeWXe@%sz?7T>b7>^?dHrbA4I;g1&KF}EFm#20uYfIS(Wken)ajWmk8j?4}Oi!jU^A$ zhtZ2fYeTh^7)W6-k%1F&#Vmj+I_{35spy-BQ7k_YK?)6Pbuz;hi-B-sS9L}NP)KO% zxg^1gp)vNx=l%|h5y8R_9uUaj2Klfd)6$4JyV@Xv7sOUD1{{LrU%qX?p?27+^3~H! zAc)@ZHrN`(JZk(SMT0?y-o3JAboYm|9rHyc4)}XAx8E2+VoxHpCWvbp3RRX)Qv|IL zF}Fz-gTwrUE;JRPkqJmYetEgGVm9h|zKIw1adzHqbZRGPD+iKgcWE`ADJ_VV!}fM{ z@eTPod%HJpQ}<989cjzm4dRR8jf%>P&WW6`#AZ$L{2bKM=PC@xmNZd04U$0%3IS+M zZT_+~eMiea8bHK_fqxKC8@-?Tyr(9y54it$65g=)RGm7)1D;z98XG)&QjcYcia&LC+v?86Okgykm2s`l2w!s z$JgoIEwm5ettu_ZPSKJ65kl)QVXD(IBu3PeHpvw%Xp%U`hDKh>KZHdT0Jy`_pc3c) z$NT^Hw)abA;74-r^Pup{Zetp=Q9#4zZe!r9)#p*s=U<$FLjvQ^5f4J{eW@@AcPk$C zA60Lt;Z4k=^5OS-4nAY~$cG6{mV5&uFrr8K zenCPRK2=_ow%*cF>8a?@EQb;IEZI`%Q(BP;&Fe}6T= z%Z0=TwB*hrT~;vt=78th3F*r(YAgn@3@s7vKlb;G?C$;j)5cgNt#C)?X0JIYzP&>_ z-mXV0DLLWsHqHE*WBk&5Z3Ujt4oxXhsqJa^tcO~E;Aq@nmP4GnYYkI;1gp8@*1^vZ zUHX}n2u4dtwUQRmE(NpURpwa8W*=)-1+1a#r!wlO({R#+%QO}E4u9rGi4WHXNsN)0 zpd`O(t;3QkDI)k7)^K1pXh&^JhR?jLvFp5HG*M+T{`B4v`^&+DJL9fsXwHjUC;=MUAI*6^*vGtm%C>r%)jSD7EF?$zE_ zdOo{9Z}Q%hKc7iHlLP-Lf37AU&wyBB$y3X|!BH(*6WK}}9W)h*;i4Ob&$}VtHKvM$ zD!zJLX6OOrW6z#Nizyw`gp?wr*YS)mP9HO#S1Gi-hU#l*ti&}_i}PTz(Sz*9d7#z- zO$WzS^+9Dky5y077=SF;G{XjUqncb~x@OW~KE?4W#-0A(zp?L#vZ>LtfVt`7XevuU zVW0{}h{#+Mc-SOyCH5&2khE(yle_LvP8z5Ahq5!MVRe`ds6Hq|^Zdwt5UJr&_SO^#d-fay^#}jvd#`M0) z2R>Z~Tz782U-@1K{{1_*f4TaAI=h|cC}Fr2^ivh%;^`HK*~q}aK*0BFwmgZ`tW_Hx z%TXh;c3zNug<;T2>(!0J9iSN8feuwv^|xA;aKOS? zz+ua}9<^Sv&;vEPZU|+r^c)a&m@Jsp42X#YFWF&8!G9cUb?4aT(GrDjU(65SVoVxp6c6){G^H3 z6MlrgzS++5d3C_~(RZ_YEiE?%?4DoC)r8(xC|kab9ztM|qrRgvO{+YjHDkpJpaG06$y1i}y@oZxi zGxuhW4uW+WnLV_!8*GTRPRGl}S9(wS>!X`{Mnae2+{G&jgO!GdcEq}n3M&qwokzPy zm)q{W9G_QS>i~yssk6_x68&T9Llrmw#4{u82XxXmn0?-d4)Enls<|~;YUazMWu#Z+ z;#SDbkh+@8yWf^8TQwvx$LndY`jck^>-SHWuaToR*1t_!WFzTn(1+JvHf&;8uIiAt z;@o-y`GrHDdgwcfKA{XY(3vLX)I;Xck6K1ww>@P}UT0<=^iys9d((Vg@IdSQg)rPT zHBFoT;>3@_R~ndz7vJA-z}en1Rs8ws|DlvT4yzHcZksgs#=bu}GRTM>6ho4EA|2Ie z`bH$3x>8!Xf>Zn??Tcfwd~pBpSP}4ZK4{IDt-XUY7XA!lKE@&!vF2c8&PY$rJv|O} z^7E!amHG~R7WjV2kuejz^-bSj_02o2%{OkNO;=N_MF*~Pv68JNJh*1BAOxLUKjKAZU( zYOQ>m5hVPuQ@wrVKl9}3{1`p^=1D6c^hN^lE|-9_F4-TE`4_TT^mF#UIf0FGztQ9gcefIn@7Xl4s0eZWW+9BMXM zYFU`5K1ko!he*~idc!Gj&#=9ZvCtWjOA4d35z| zzDAHE70}4e(8#JyQuU_#@tWV}*yxhksr~RnxpQ}F%jZei6OyELyN9V!&q`tA z;mEh;v*T4;^q2nrPwtT4o?W|49gWgYU7tNpf-QlqNCpo_$oGpbrBXiH&XcZ0t5CBu zz;S{zbdW8NED-mo9f^p*aCWAO*{gXlrOl9R^W?(}rJ5+$4(zJBx+#sMdD{j4{_VRo zMB7L>(}n{{55aKnPguj+oi6I6n;N8_?#XuiFI($-T!ccTb7BegeBHmsqL0nC<|uT5o^2 zC3>Z)*&OZ+waQzY?<};8y`kb#+h~^-TG)C~z}keE82AF7pX}Bx9kjPsCx{A4xOHmJ zYdh=|uPaHMIs<8&oi2Qb0@>k#KfV-HrruVsPll&YI(Rhn*E`cMz30t_S&s|gw|SE< zHgoePCBFAJ-cBXVk$Q9J-=QWlj12;C+#Eh?HIu6<#A~L`FCWJZ|DEdvj1l>sEu3~3 zbbo}rzGQh)DQ*7HHb@Sx%vy$7jefdXysjkPjI-Hh(tnm3ctYXl^}~hL{H9rOG}oFT z-dkhfZAa!3_?2#gz`);00{J*RUp?rvVC2uof?vz!p*ZVrL;LT<(ajAS%n(xQ^}WD9 zc&@9WmEd%4sORRxZUIL+quzy4IKKT|!S9xL)-d$l@BL|I){w}@uJ~W(iR8(pXE*Xs z^cCM%5B0l@zdfJZDjk+xspKT{v+2d=*1}s$e#7n*r^qKg24332!kk5S?DKYBH`S7- zaZ*>WTg*g;d6B(%XZKc;0i#Tvz5$NM*1gzrn1t-6e*Wky*EaVsG#{IOUc#`aLb@< zuM~b33IusRY$)KjCc^E8H1JDXzgkLld~|&nlxt%k zmdTBw6vT6g^5&E05?iFji zQrPyE(tTcg4|C=Q&j5`RukkL?+86gJUA3>(v5#!bHTB6wu+QH6{$NwldfmAmT;bce zWGL;i@$2;a@q4T1zN1Hv6VBy1Ne*$6Nr%e@p?%Ma5clRz#n%;4(E%llJQyCG1h_Teu4yVuS#@?-w0I74#%bY9@{TYqvAEmxcymL%<<0sGyEx^-f3rna)D+Ku-jx| zF7%tAT-^nnBCFoEr!6_p63lKG@_%eo%CB$zQ@Ee{`5M;@=JyiDLLHk8|3D5s$uPq4 zJvk>5)O>SMN^XUi|M#Jj9JR^)|8VZ>ifz7s^V+ew|I^i9zvwK*Wbyg$tNz!$oQQIQ z=Kk9~|Ld$o;Q0yE|6}=o`qKZOzsCn&^nWb(-wr>PRlV0?iGn&~Qs5H)inPt#*=tRK zHUXr7D=9XB3ErmAlFH>BV@%6|kcn3zTXVl( zy5mx$0E0I_ZLc$6~1Y_hB{E`p%XV!5`D&o8`(!2 zb1!cI9b5;;)hvfBrodPkA;T-vYnNjasVtq*vleZe)kcRR)1}#YFOu(_$ByB~#byo9 z4I7hdL{C~y)BufdxgnKPdliV6?+(c==jFUwX6#K4wtPWwkq6nbzU?I1$N$6(VmLU>rn(| z^`zVp0}Ps-#B3ZGqG)bjbx2PFftD+hFqqF>bTc8UW)r}!)oDx1>&pzPb_?bCM9cFwI zVvLNYtoD_taj8f{ux_$HIgkJlf13r`MH9~hULWjWWSIzM5sg8RmY4+qx5|MyyaHm5 zKGBkMT&>WWfuIiXBMF?Ipp*H`!7(%}PfT=Dq(%R>b*O@iL`tf1G;h4larpb@v%;+6Rc7QEWc-}e0f==fAvtvx z-9YAy$G=2#WTLqx?bV5>G@Wv@9I9=j#{}5J)Jd!SLE^rb6y+~g-d~JJ6=oT zU|)iG!eSl|wW)`KAQTYe)vD9g z7G+0d;Sqz+#9SF2uYxwZmnWtNNBP%{?g#@AUL5PUH?ZjUoG+Kp+x8+hCf_~4@pgm1 zaC^=yS#UWCIP|}dUNX~O#yzDy$(4x^pPAB&pB>dPbFB+5fsH%={&eOI4Ey;sL!&## zYX%n1_z9)|gy-9z-<0g+6$9wj(B~a?d%8c5kW9XFV~0q%0=`55&l4b>6!P)5t5HU! zFk9z%rlhPLNt5=#Q`X)bV?3vqS2ZU;}Q;m7h{o(%neSox+!7 zT&(F_EgL||nAs_C6^r_jm6(8w<6CToMvu3Bp36z)QM{`+cqyJ#E^YNqD3?}Y1_1wt zldZmRT>IYyE&_@j({{p`xd=B{7nsb$S)|yRD-fnW6)HzRiMLW$#m05x-qj;@KItEb-2oXXoRBYIxP?66gGH zr=}4g2b3Ibg=BOpTO>=@4B~8#PN||_%+jmgzx&OP4knnOvSuSABO%|9gWKEN)8yaH z(?>@@^j+kma}WC`D5wju0Gs1yE7y801X&s+3HC78#d{|Eg*+sQHu-hl;PZdwuHu*r zS2cFRXwptd+}J{_qD~($w8)d4jw8+V=S1Hj^DhR^NAec9pk$G z_V!vibg1vsL6oqGX5Nfib|BU?k!zs_Ye@-hDV@*n#h)=-aHlG9tnjlVNq`xzcU{PPkn0G z%L@5zO@cpud3p|$6ketWPNeS-%rO982-cPi-FAGg=_uU&ON`I&eWA zeI<%nFDt2>wo%&CJ8+p0XSTm5Eywp_keRTP;s;IsQm3<@6!k2V8!^YWtZS;O2neH? z4W@WuilFF%TJPX=jsbFHYjdczb_xKAU-gzRN)f*y92SLINlhi+Me+ zBlkATrWrA&2v`&96FF+4=uwnFIQ?=^qS zg9I~v<3VYB*r&NEv1a@&4N{suZA-GC$26;=vH*wKDaE2+I!xAXkiK_vKG!z=aolN~ zc())))--jQ=vcP7wuc*^`w>8Cia3LRY;!K28$3W^xCb)?7JvW+C>}KkC%DAZ^dlHIoJ@b=i#;CpGPjSXmCs47YJ*u&SZ^;od|ak@5Ik zZzIW^?Qmx+?7nTaZysRoo|=*xrx zghx>6VITm3hoD9IuK5@_SHRjM^*(s<=nKle*|{JLXrP7@n(^BHU;|c(knji(EoeH< zQuO7lHtS2JnUtV=C?epZC4gbvi0TJldA!~29>4$Ic5^n4V>Bc#{nwSa_-qsrQ$6f2 zuP!bwUc7km;>C;UaHw^5cXz+WNNwXcVcxlAnN^89fRcXyHRq*S)y=kdfYMc5fQabc zNmQ$)X!M}iqO}14B3*hU3&jz>1gt5UMRzW?;0@gfto?=Fw?02T5XD9R5*i4RhBo#a z+ap5taG^wa9AoMWBY9dWKsN=^G{{<&07$?zg)P7(?9D}vC4BGRr266@>9d1^Uh?!9eR&E{o z*6x!X(k=G39c~54UU8g{oreiiAsoZQal&S&p{_NbeR&cE20o9gG8x zytn3dg?Lx10U($#u)B-2w2vlXGEr|eG!RW>0c!yIhPZsiHwls&Of%(p?_zn2dR&Sv1c+iMAPi?6i06G%6CQ61}7 z+)Sv7?j1*`Wl`3zxY18t1N7JDWbH}4de1B4y`4lPw_z#6xZ6H>@bKZo_s-8BY|kE) zp>#X&`rfz?y#+A3Krxu7dU5&kr$7CxPo8{I>)~*iKK}UQi;Ig-KKb~?ix&}5>kPVx zz+;~0%{aD@nun^0NHv@1Sw#S7DFCTT@^F}Zp10dwghzx>5roLH(|l1F(o`?PBcc=m zQENrST&qw-rG>Kq5se6UFQu57h~yf(n-pd(o&>(;-R9+%_7nhHd#s$Hgt~UG);NMssSjaXc04WZ)qN8 zrm96tH6O;o%m7HvXGR7=Ve-J7OE8Q>gbUkbf>a8Kd7g!0VM7^~^-2X+tpXUzun2;j zgf!8HGBmJ2WuB&KnoCiOI*!91|Ir`2```Qi_tVP_3lGe5tzJQjNKvH<$!YeVK7ICs zKlr0*_QPxu@bH{J)shmw*1D_$DYaI2&(*wX)0j&Dq=lQ;=oklj{_-N--rGHlh*C<^ zP7$SOo#(&*AOF3t{oDsc-S01nA~NVGL|6?WYpuK8mJ|;Yk#yMIqt;5IloB3V6hSx7 z8QWi7ZMIt+WwbThoFLK|&7CDV_QT;29_~JlgS$`DJPboAN{YLuWmB|Rtpr4*RwFUb zm4umZHk*hrGqXAjqZTImmF)n@zZ}QWEZw8FtwdxqZUSM|=6N25p+P&Od#zTB7J@1| z&vkz|h)5}=IlgRwx>*HSiipa7e+4qw98ohHhG87WM7@3XX`Ts=!&sAhMGpHzAYQz9 zadvjLJv*y)o~GH|s@dhmWv#W8VHk>geCu1^e)#ZV!%!9uIHsym1n!=h0*le+?mCpt z1!-GEcoPvRE+QZ*i=u0}23?2cl&LD&Q%4$z*X++k5|f2Vw!xZvgRt79q60HE>iS}e z2!iA>AmriQ&f3gWQ(%MGuY5r`9 z?V?R3yN8Hs$|w(NtBuG(^?Z2{13D17QjXzXm-nU(omiVWgc{*yP6DYrh{oHZLb^jl za!UPLI_EL)Yd)_mA*pVu$S8u2B@sy7VP=^M$_O|A(?9#u!~P)TZnqmZn~3o6&A1Wa zet(raVjM7^Gf`@_C^(?4bwL^Vq;B|XCDd5(yAnh}vYu&5$1jKeq# z6sdC^hN7y|Ve;@&S}9L%5cjARwa)G+W%u;i<^S`0|GK(gO$QTrL@8yv-LAtr!ZOb_ zHJXT+StiXz-xs-0Q>Tas8E0o_hr_|l=6Oy%o2E!USV~DxcpOI{#?5dxZi~fWSHJZS zzE|p1@$fm6;ba;0;qKx7>hSX5|N7s3^zZ-r*%dHVC$w=U!o4PomQp}BnQqx1 znc3NPH%ei3R6E;j=yg;0m5mHCEGomT$<=|f$lg-4R?8gQ{eIeRw;3PRQarqEV^J3E zx?T-#W@Q-6y-t(rsH$4j%+eJXK@F>3%OF5dXtR?H>Vh-48vu&T(-iPB4Bl0eg{KKj zk=c!)hnu+vnmkuUz|4aoQm*#(>gq5}6-CWl02PJX*=F2~1FY&el5sd3rfDAtH>eKP ztdgY^9frA9ciV1vb(+r4&kk3Y|&dZcWbaFC$RX);ci6S!Hjon-8yC{Lh9(v&s ze}=%8Of)Q3IuTGwr51_*^?i&`5rWU2J^ke4p8`%woeqQQvUu|m?oq?TV=>ERzdyJ~ zVG|dsnge|B;DLyI^2w7Q{_syOFE2m&_WQk68^^H}HFq;3s45`ce4ZyQWjai%nl2WII?n*E z_WSqWf8WhO8Ord(Kl$NMhHrfH8y|l4!_8)Mb#?U@KmN$gcH3P5hyA|J^JcTTyu3V2 zhhZq2%|=yUzI>^wAAInEyI)@IUtV0Cot>SZouzdFU>F7js#UbAM>jJqI%vs#3Q$y1 zl3wliXSf1SEprjHD8Z}!ejLYf9OrqSr^(Esm*1V8pKUiAb3g3&9+Bqa)zy`mZ8n>$ ztIG!u9`5)1!+t-GM%S=2odd%wK6qChAh$8j8n;cz%utz{Ut+iiqjU0&@Ehs|a) z3s)wQH-AIFix08|7^=B7IX?q0pBXi=%tJns(-%vXD# zW=_@2=2~lbt#)~JHQDTeI%*k4847{(hYu+7^76tx&K|!1@V)njGMJltL`1E1nr3*o z`^Ck@kAC!{r_Y`xnnICdjujSoALu~jBIg${h)1+>iFPNtbPW=V4!b52m!&_#lF>f~ z1|84OA8xn1U|d~YJ%9eJ+5|Fa*CpTbwj-rclt1FS<+;c%@9u!AB94S$>OhYa4yipP z0kXxDw-&E0OcqE+i3Cy(opr@Z8xh1q70Jzy)9F^ zS8nscYqtU1JwmccM=xYaDHq|*2Z0n>62hPuhM{OdSJrEsGM7w6!S;B|PJ@UaSK*ps zhz#4eC}soe;c;6a0oOAq-K$7r=>A9@A-Yz=0{0~?suJKA!U3TjH!M~@zT0q5?)yo##nJHiOd5&Bk#w zw>nQ+3L}QXQq-&p4Pc}PN!x6PQc!DTI(_C$goPhh)Ky9lpbIhA*~0`%QeaRWTCId6 zKt)1SqPi-D0fsOT20#TK6@*Gea8OMfokBQ-6mU?QSwxJRF~X}`&(Z~j+71nHx4OiW z@()o0EQEV40<%d=$wDG`W4K82dSyxtB1rcdW&j8XndygalMs}QB|6Eputh|b26u0n zC_+jr)CTEpMubXOor(%zKxk&yz*B-!2#s2;q{OiX9|&ReMfeD;h?yH>Dyq8?S0xY! zSd|v`g#dzD#Kw|XfVul-vum2s<{-jdRV6CHQUF{jP6{nj2FkDf%CG$1@BQB8^XKnBe&5_FAbb$a6?2^kY=^D+ z?B)fsp&c%syNnX3$pLk)W(%4l9qceOk&^nO#gj-gOTVk6gD6tx8X1V!EWT^OcwgYK z2(wv8&CQvGNOjgQWmQaM-HqWst3b7w%|!(fWq`yUL50IYRY47gNaEB!`>de=oG`b- zBA7-UQl5G^8KiX44HfMv!_^V+x)C3?V}#7}Bn)U}m_{jOxSFogv!&0dvzFr3qgE|t z)G)K5NZ2KTLX-mG#0 zt(P7lQtEzRNP$e3FNR?lciU=~7>Cn6LIs43VyXiA<<$#S9ZM++fiVcM!VB%{@^Vui z9WGx!c<_Lv>l_h}AC5ppy(pyNAauaCgIAa;1m-~Dq_J0MPfKY^y&;T5_*_7jV_pnF zqrqo*!&0S1|6GX-l7~A8g*I&k5ZuYD*^xL|DkofG|i%*kYmf)WF}(KBMr$2+LdD745P*# zKC4JQ9H6^#+?E|g3Pr|YlMW$?X`1(bDNd!?JU!fwW64|^fA4(b9^xhl!io+$aGoc+ zkIkb_u)t{I?uAf5BO&-uAP`bWuY%Yp=EKXOlwsKB+Soja7MtdZTBMMwqBbmsTM}1SR{&JTd7cY7WI+T7 zuU_kJC|0f7Jd$Gb*;s%;%u#I^#|T$I!`+(g;Z`GJKJ3SFl!TSs#8Wvs3ButvC`5Hs zD4htv#9?(Rqp@%H-GJ1r#S34vMC#> zKA)eT$6N!$@BaS3{hfdHu{#1fXo-kA&!SrA*`tz#NVSQ*#=_mnT4(x%i~>f7M@2+b z=lzsv%d^d;lvTn@0Ei)Dbu6VUJy#vj91=&+%!YCBaHZO0z+`6dmU}gnVLu+lUx2utG$NZbfmhy~Aa@kwOYpVeTqrHc;phZq+@sXoSnzSysxIGF4@4Jb7~Q^7+e`FU?F^unHpW*dIY? zqURzc=6ND1CHG52_yUxWOwhTd?Bt#&>t7#gGL>QwgS+tN45ea$v^y%~G&)yK#{1aCvd5u-%~MCgHnbv-{xvTI;i)e*CqseQm$Ld~m+q?MBjx$S}VO z5m0JTool_gx&pvZEjkYJ?D9}bDbW4ZJ_6Hp*cMJUyStDSDiCgCk%+1gQI_-FJWT~g zp9f`lTwXjE%5J+=k)ZEJtv1yuN-6a)&2=7zF`z{fo`Jvt6bY|~IVvJloItYiZZoyKgK6-FA*TbmrLc-v4@~73B{IJ`Wj6|B5*Td}dSd?WL#u4ypbJ5ss zib^nQ1XLoEd+1Zxz6@KEvJuh%jH67`-fN|9l+qv)2$8!_MOZ|v#>|MA)rCI$d>BOw z+}vuNVx9*etnRO_yv~I%G9VhJAy5&3$)Ia4n{~X z+Pnd=wwz)dK}9b1cKWG39>a!F^`y%zgD{JTL=Vs)Hiv~UJSzhd+G{p)f?ZL1x>fXK zi{m+Ft-1mkmM)@eFf7|;!fWm-(vujL?1`+s3wmaN_S_PXLaK&}Xr6=A{8fZGP;0Hz z94>UU!9|e4#1?yW%FLLR4Qx?T0cuXGyMUrbVfq&<+^|hF33vsgFrV-ULx7MaDrPM$ zH3RTRU#6$1Cv3M~#5MXFS#j%O!j@f6dILrQ=@HhDh<>gCg){Kdcd!Tr(uuy6<@u!(&gbhQnaEAk~ zqQOvrbg)F283xr_-ONi7LKx|lqfo1bCeCfafSUzdQbzhtfv_+Tc>w8m=eDU@QXUMJ^~J+5kVJ^PcVx27YSvq2KxXZhumx4z z-HTk4T*)+3|lF*qoN9z^ke&#YhJ{X5Cj03-wFf5%roPX zR1wiZ91cgVRkMb@GurbP&%gGy$3P54FE6ijWGfI3Ct2&EluhL6jevWlg6+%&-%ppN z6o>Ag&$FsZ)+1`DBIjkh*~yB`+}*}u*o?zC6tlY9jl&@B za5oWdHU)sY&o-;ZJXiO5vr(X$&C1Oine|<0wiqa|;BECURE*xP_Ssb=YJwOWkeKyJY5SX(={MgUG-Vh>OcBcQ?1q zcB`V{ppT59PD-+<4mw_4UAf6HV6GE52wTl#t#h5Lij*?AXR=zU4PY-eVP==gF$>4~O&f2N40*?KUe9Y#35m&k^uIt!7qLC_;@Cyv~+4 zO#p70dR~RxZpVOwETtT#X&iMJ5*-eJr3^mTut*Fb0&bDVemH^|R1dg0$vWF+v#GU) z0Gbgp1*fo?x|yfL#~*)unCc8d=ot=W05J1;o@+JLGWi~>vXbUGh(Kt|d9pylks>02 zX_^*e<2rM;kgyAeq2>1#*DW{arGD${Uwi!CR_AHlZO?WOXG*}wQBcEU{PB|~KfRjv z^1$lMn9{z=a3ex9_TdJP$_TeQNI}Sam;^%?R*_pKb(}O20xiWOdOblq$R1Wx%2i)f zq-GN$lCfeHTDV12p9u&{P()j5#ymS~^%78wI&4L0)9A_yf};#1ODn>~FbtHQ`T&A? zk`H8{w*qs7d#jLVbM+j+P|BbX&KWt(gTI3S=7>^?4myVmqwIEhV0GDzs$uSh2*+6& z>pVvUvt)_{W1cEy$TSZf3rMr7T13R>THFcFZo9K_7&c}$*O|duE6AXfvbnsPtX9hy zv=p1`xZA?2yUo?h5Ysg6%GqW!e)u1JQ$*+4rfDW6DC0OB>a0ccIGwQ!wbohzNI0cv zMqDoc`sM%jKmV`a`a8e$U;Nkqr9i^@_FKjio;-Q-)1Q9) z?Ag<4nu<`F$^MB@I0=tT%xBAhArd$52VX=#>$cfHBGD7EX?9GKBFa%1w|sL0P&DyG zz$~?ayOTmVnVy9M{$RTicL|r^e0lilykmqLmsnmw^`N{eD`T6;|2sfK?v)P)}AN=4C0DSLz-}~k_f8N~%p{mm~y?F6rnx>2|?#A8K z#f66n7zwYGq9Qp<@F+#kcV_^mX{yYSKQo1DEW-zn-!GyJh{#;c>4Od=>r@$1WDw}t z=Ip_P2ky?86f)@W?C{JzcDoJ9X_~J5^1}~5oaeb7CI;Sn@SxUeW}+04S}U>w10s}* z7cVa_FSpz6Znw)|`8*vo&+h^bowl1zChV`%^AVgUldvqPDl!NJ73OKHBl6VVYNTv- zXB(t-;SkkAP^x(;CHhhqfBAQ3Y3}qz5%py3H zF(S^S%=2v3ODW;VFExnhP=;Eo)!EEhL`xB-%Bwk?%pgXGKdR5^+&RPG5iX*`P;$f9 zI=fqDBZ|<>v)EIHB6+%k3W0GLMwWS+VV1{{3}h+86{iFJW!)d!JN(p=Y|FQ=ksm)0&`c+K!ews(Xq+nFd~ZftgE zVsu>WOm=8>0SW>h?!xRz2aQM&W|k)wrpekr>Tx^@E3x3rLWl_IhmWP;$XJo~sR)GS zw_v&n%y#5gWQJ9D1{me}VNU>ULb!!C>0AMDGVhT{SWX^S-2_6BnRx&RF zYeiR{`A{CA06UPktXl7Jvos)ayvXifpru=;Y0Xv!+fQC1IxZb`RfpaWPe&jG(#y_{ zr^dOVH01<29{wIA!t)RwM)$LlJ3FJ23il%{znp!X0=(I8%mjkoZUD>CZfuDn3+&$I ze>1mM4rB`z#=_gFCbHsl`RGE#jbkN9w(L~LwLQ}BT2e%X5^iXf*2_FchJLeTAWvCQ zCbK8#S|u0_{TEUB=|?~M=l|?~`B%U5FaN9m{(tz@|LE82e0cQ!`@=Be{z2Eb07m86 zv!|bY^6}N>%Rm3ozx&;P`G0!U2rHuVVG@yXv*EONmQsql6^aB!)hzb=13fOLD^>OC zgp@KY1!(TRoFUdSjXmSrGl1FBf~Og%(lVaIRAtDz+Cq_ZS!iY<4F_CwRZ1Kc?I*}A z-+ju7&Mz&nh`52kP)ag!i;OWy)H+3EB~%MmKxFP&eo{(1sj%5nfuL0@rAT+e5t7w^ z07MGB3BfoP_$2tymb~#z1{~-u9Nnus7q>a3p{$ShZUHN42Na?iKnbAafrb_l?nT7H z)8I(gMLN9O8J8iV8dj^SAW!=+h)NI^p6(Vwss!QTTFR2?lrNs$)J>`E2O3N*a7Th6 z8WA#Ra)Mh(PZf!ls)Z~B%mu9;A*c~H*I^h!G^eo;9;_D8k7{n>8_1fWm}jM={b2z( zEa*WgW3AO8Qbv%|e!tmnkj^ex%~X{@o{^t|!$AtIdLS4!yU+9dwQqdwhky7-`{`=j z4z*UVXz8!cP`Ib6i7*p#x7}UrEj&{IpsIN|^nSme=Xo4Ql7P5{6adJh1D16m3AjTt z+=pIQC8RrRHG*0sz1ddN=aK1F?ie%UCc+~q1v1q6U@)jSs9LI9Wb|U(2J?#_hybMN z)KZGOCo;IW6Cz?3!>|!4wblrlxi+P*LJ1F2Hsda(HkrB0;nu`@^6Dr{RRaJ3AOJ~3 zK~zwN)acvIS#tYfKdDGAYZ;4!b1$Nw4wVws+)+y@rAR`0huN|`_y42p-Fj`ylJuZ2 zBE}eVt-a4JPu?o4Gu>6LHV;UCLI@-I30WZFN1l*C_^0%5;ekgiHDEv31`8o%?4|^! zOn2id7j+>kD=+7^FKf*?Mnv!sV~jQT&a8IVQtISB`>ZwBoZ}KB;)^f7P`8v4fz;I9 zI7ulIU@~(G2QlZx%$&GIkrF)R0-&`<&P*gJ0l2-t>!y&!K)ICRGP;?ukh|Bd=3I!v z_2kx^dkwz#s$CK?Q^Wauu1&A6j@+BQsGFKXok+5&nZgt<-kK3fFGeTK1AM}n=wgLw z!e}&8hweeL6VAh+g|FH-V@zoLsb)M5%rKRHIdv!QNjc}aActlX4H77YjgpWkiKHmN z5_Ge9Q$F<6yR~_Q_|weKv$}^TKhR7>bqU8|(P{%r&V@t}&P6}Mol}a(aDYXIH^|ea zBVs4DSlvz@=~8nu17$EV$JK_y8gl^g=1v?2-$R}yr5s@o5P`%TIU^cHmP1x*xC=r5 z0cf-WqHqStRQ+-VFf*r#TZK?ZPoKgW1Cu6_aF7Y)6t1hMoWev0j=VK(?kS}rTvgps z*Y#OmSduW;T6GB2HU~*c3pZQYSj}#3ZY4<^3ZT~JZUj!Uup1|)M6EV+CxIj} zx3naMN}^WVy4^`il1Ob;2LvgR+A8c#^}My?@hI8y!mTxjs}s~fltj+keQPR&ygaSj zmU2Seuy4d9Nm{eh=`JrM8N?Qk0|`?JC#!997(`8VJ!_;$BU_MC(vFz;vgBILyhUQM zZmVi5sSKPML`gEMwv-dtYi)#1T?Q1yMhGbhW@)6(#!PAo_<1`4;Pfo9^d!7H*wx&i z%_=7nA=SprPQGrHnN9umn|Etdh`9PiShR0Sb|+JqDha~viPbZF4@Y?ZYPoL{?$HjX zv6lmd@9tBq&;eicNHU3#64adZ<%?&>WAT!6PReu;0i`6)nb#BU-@Pe>)ts1Aorp4V zwQe*B?1sSCh@#XoD58nMt+m)wk;o*XS}PGJ4rd?|8=yp?_W~lLs7@deLFA;>2_PmN z-1ErTgw~*Y-$Fzk8cR7vGmMg!M3hL%A(fm%Br>Ps4kLAsu1;=Ib`jp6^sG*}r#&PE zNfvW9GdB}O5&=lvOqn9-N-&Mv5+`Cquv-W$Mnn)1m>&;^h_$sTIS$K}s)}$p2F#Sm zn#MHsI4YtG0@(sHQ*%*Gp)F&UiksR(1dzdR@9uAI?ySe>luFbbv9o~bW?eUe6w%YV znJvo!EKI z+kfi^f0Wx=;q>(R)888v9j{uqFTeWY)vK?+`R41p`#Uo=Go@hq^vKXDKnxKfRTIhk zXpLRr4p%aluGtl)c^+)&8HD~CaVkbs387JnI$d|{jC{Zu80tOGUp!xOxxYKRs-(27 zwUks+Vj*TZtJT)jp&+n~!y-tX-N##U2{g!!VAit^7X?Xir{3hs!v*$`;uX%sooT_u z;di+aNJhwSeo5;wfl?xO7tXD<7tdeTT9cIH@v610RcB7$|Nf_6eDTG<`d5GUqaXd~ znnaZHL2Q+qT==TVl>Rhh1XswCb&CxQVGOq9(cIoI}}zh&kn} zCr?l7wk%7^MO7V?Qr>DiuiH~l%H_q27wfvZ`@47Vj>qHSaG+i|m|JW2_vhpBxNYrx zURAwTbpk_bYcR`)!bylot3|nM=papDlQ2y{HFH&8mLtF^l~NAis77N04AjhpAi0>+ zsCTE~>Oh1KIh*@hTdc@dYf34l1W;UxMBHqxEyO;YoFuXr$;_CA`+`i1nmSTSB+0N5 zNY&iElma47v>dPcK@dtoDZ6`BQ#BBWPYV|H=ENkV4zPg5P1O}lOu_>N>&!tHbpTKY zz&a4Fl!}=#BTRbE3&5>agg}82i@0m>mcmjcDel@BB!!t3T7g!ZRn=;d#>*@Uui zhx_|`2dSZ%uUj(^bIL^`d4@sdixaJBBw z2t9u?+h+8)(2UDyr1YYxCl6$ULJPd4Y&{w`qR4XCBDa1IK&bzYi&=IU4)dbnpAPp_3|yW8WW)Fss=dJxLs9B{aMk zGkkv)=+%2TiJK;^`5#I z7rICi*^m^#fLtPa>tvJxal{V}n*B)KogmzsNrtSUAfl4g3-GDC{qb}E%J@e1)Pmdq z0!c3o*!2)2qG(RgKSkp~qBdeK)`3t?ePJQiScMz<<#L$in=^uBBBi3eD&pj z```T6|G}?+`M3Y0zq4(p_dot#&Ig)c_h0QLfBeUP{8xXsJ8s_Hee>$;+q*YE`N@xe z@-Kf3GMJTI1T4Z)o1hp-Vu=9Y45+Lq&ylc-tH(bdfNo znO;Vndlcb4J7O`gSww~gfvO5i5(zcL$nXSNEG6l8GYXUYqtO7*-C>d4g{f-q1POE7 zYE3!!b#|F%U?RD@(lZ+ZqatD+Wf}xv)TDwtyWWw^-CZ`vn(dKGl+?Vm_a3Hn5)g?1`!3wMd7sZsF)*W9}CnvTR&Po%_6#&4S05Y=&!6iNzeuIj=m=qOQ+L|u>pY5;}IDD{35rmF3e zPd*gxoMn;h4kjjpt0zfWq>EHJ5+{<2AV{3Poz&A}PxXyP1l5MY89blQx3{;);}JVI z0>HYi(}j(_GfyKQT&|_3HWdas5#fDhcY zhd+lO5c+Q9!zn}0whX`F;ui&z0v#YHijLtVG}`!1PQm5t;O@PV9Q7jc?nU{~LYiii zhxhi#qPl~T$&*kK%8VqGVM34ycB54bxqtcPmmh!lQP@+SiFEHp`RL9{n5THyUZ2o@B9;c5!kmi8VL7CnQcCXFwkpD5{U*UU zHriwq5+!YD)rk^w7AXKneY`3NNo2`s5ze*xwrNfWv%u*%K0-)@+^WMEki+4Msnlk| zi-qi}Q%=P+)Wju8Zq;B(xCmvY>_)A+HZ1vykVOuv%qX>DJDZybFCv8~CthlGqC%8R zDJD^s+yk61K}%J|-Y|xFi6RDgB1%l@eBSz`JBbukNLqvoQF3RH0HVg)0GC?5t>&J9 z#FSl`oFfZkM!FhN>T1c9QaY4;=!*(ctJTd?UWgJ=3fVnVil5i>iCNTqt@i)@=Bv}W zszVWBIG8!-(iMjYBJ6_=x)1r#alz5OC9bM&g_0H`TBS~3W|vLHN@o3aE1$UViqTMCs1Zd#IQg+!A>xX^1g7*Su(LG z$N+^Yh*%^S>6|2%oQ+UTIdROTi^#G-5?Gw#vutq@ma6QWjf%?wQVg8Rk)$|_aZ<2B zz)7n!XH_s2@?^#$1qjw6&&=wYKxRowuzv zefRG6_U?3dcRsJJR$JF&KsbZ);mwO0TB+JzsU(zW(N`*RNlF_0^X*w{Ih4=Fl{82a!;3b%IX0vLUAD^S`l8 zct}`q?~CHhBw<3k6q8d>Xow@UhnYsNp>fUFQa<90h<)NCg7BAE98{L$lV>lMtHbxc z|1k-USBK;E(ps%`txe5+Ya2$G?ktEKfyeg_9*+}|Bw-O232Fi;HZDa?^`!54ckg>R zMv%z2AsQ-lx8KZ_m>f|*9AKRQ5g=eW9Dn+=pPJjt_g@BUo`_P)*Vk9aw_B}O*H=%jpQM~Y6d!4-YI?l7N;$Fc z;dprc=Jj$|4#y)xlnh8Y$MGG70%jV*Ffo9w)pxhIr}O#h`Z||P%#y_1%d&*WIHNxg z*$rkUk9FcOVl=I4Etk~gX2KM@5umNPSyUeNN?SO=wKca0uS|I8u34x4F`%vHB*NsT z+Uinryg8=?cWt$9tF{(lOcFNLR%?7k-L{f5cmD&Xnv*Q05ZqMZ&IBe(Jx2AqZNlQ_ zOk}Ftx`o?ewZXjPEZy~@Bq@m`5n*n%G4WDLPAS-lt_C$>F5tqFS%R78?)U5I?tHGM z=cd)Q5jS#UDaXUp7tbMlcRD$c4@*kvd^)-L@#=WIx*qs-xWpZqBDku(dGqGo+gta^ zgPyMDffQq0WFw{@+p z1~(;04HRklXkpbM!*DRW0Mo@_Vc>{NU5X+Mg3ru)6z5%dzTqB51RX%Z^nBvA$3`bG za)}g%0}(#c{J}>k(vja72O7D6?!*(^60;D;8kWAOF1+;d^Jv-dN=pdf;IX!l3gkbzkZo-IaRfA{+_SHtm$RnyH5 zLKHQM2{5N%JaZfkmtg`hW5bxE{vSp29}m86e?~;2zPpw4-E-y6pLZ9+z@4HPF4!lC z1%NQ29YD6uBVZ<$2=a)9MUqI)xs)P8P}G}6&kA>8YOOlh-GawA;$(N?@L95S*|O+L5p5u|1k<>6T++HkrX+GQCj%Kp zQTE7ja8M2%)GIrhfqg`?`>;P&9!s7OgYU8T4r&_JgF1^vI+r`9qlIFonUOj3;BmXnE`dY< zQDAP&JyX5+Ce@;Nwg+JQ`tF>wyTUcVUm}=WPT3r)E+hF6D$5=^P2{a@DfXSuq)~{V z1>cHB+Q!U`jJS_~v~zY5A-L_ZhDi2~>GNRU03eFyn=R@lOG+~AdOfd!)LdU*&&drJ zM|;04ry+t>tpiZHromQgYymJXAvZ@^(@H zZV@mt%iYcG>2x|SNCK#*6j%(5z|8A{ORS&sPuWKV~Dw88U$dLhk#^w&HY0QWazxVvbay&$gP24fx2oF@dE}m(Hr$b3O zi>cLG4Q8sXsij0DaA)R{MI^PRuuB*s%$)Q2dHfr0{F4ho5nEZxOj>X(Yan`dCW%p}n`Spy!t{Oiyi z4?PEV?~fm3Rr29whV7>2onGnyh#9WomxTi+L`{txk?jajkt4a}im0fPp$bGG zgAz<6nORqFgR{tVK{5FF4r2;L4AauaQwE3v{$hov`LT zAxS2}r3f=xtIaMu+TCsFbz+nq#BD?wsYoKCXm!S;g>)c9#Ka6$C3Z6xfm%+Yq%LA zQIGTWNIRTXL*rSwSmx02LN=9QG@3s4C<{>BvJy* zB1qNTDUqs~HFN7?9p1C%=Ef`_5RoKm8r7n3B zak8+EWVEj80$(+v#w21}bnHw7-fD}KTgs`{b>r&hQMEG-6bQAhM8qkDR8MPXZ4JUV zH*ddr^XhcEbHb9cyK~NNIFv$WK+7dJQ<7xtr0jr!PHhcGj7i|EjZXKgzPek=K{vBz zL@XqU7(jDyA9hbAB@tiG<&baJn}7O`|L0e4U;QV4_dovn>u)&m)!_=i&r4f-_3E29 zZvqv47yhBUt2Ys05(@E1Fa>LeM}g-9DKiXarDIgnTBqaCh!Zi^7&uHu=lz5;*`;07 zdNko~&aqD2qne6|iCj_=IbJ{c!yo<8%lAJJN!Hfur&qe(-M)MM=ItwxIy(ccsk?)e zNP3wgfkS>Sl&aha5T55xKM0uFX7gufGYyoYjijlnHoNHCbbJ@CX3~#g3uZ$+l=pf_ zxO>VB=jYF#<}9sk{e%)YG^Hd$B9zicKmF-XudlB@{q)nw)S@Tb#9*bA>+9>o;gCvR zj)y1Dp2p}sd+|K5#V}Ck^Lecs5uMhvnH{gMs)n%=cPoct>sqZb#M<`dH(#x7J06cs ztC25<<@#_iGxfF{3t;E9p4RhPx9!dA^R~Wt@d5;O3uUsyp@>ke^?bfR9*^z;J^JBT z%q&{M=A6vzsa$)9rwp)ClE_hntf>%Er*Ag~4kZ&&)y8ll+O{oFs%XuZn6;^!ExGiC zCxJ?br!V|iaK14(7O$WcOgWHIgGxwmQs>ZqP*P)gTa{q%&9r4vq*Jp>w0e00E0I-&YZYtt&+-exO)EHiU2J2;r?s1HUxB`QuCy_v$nGq@+U>dlx&#!d=!^`$wAz*#-;>?aN zGQC&4n?-7h9EkGM%UQCk#1GPyb;Z>IuoJl(q4&I!&f9SBD&*wu(G?^(72aDokNyxL z?cxZ-@1xOoJnI;oY5aZq|M82V=oK>-pXGgdP#i2YsK-Rpt&+Y)E(;)r%jU`%`vr3Z zdIYxv-{+hCA$`Y(G)4R|BUT&47b0>q9_t;%4md1|&V|4toRY$zt!>rZe)8jgZbtvv zfBE;wi@g6LC`y0D*YAF7Y~`+rP5@fdSFgT${r2l${^I9<@fUvuu)$JL2U?Dc9QEok4EY)I?GsLotxmG+OrvvjR;m zk;HO|+zN>#;^qy^rq&zRz}>*+!eSt6gEZ&vGF6hEN@=aR8#A|H{R(mBxhraGsU%fpFp)SzLp7BURYZ~cV`f}bR|4jv%ONqy zxpSw5sbWbixf8Z06@SEpp)9%9)d*3tM?{pQnI%a=y{JFP1EGB`EEswSb9<*$fCki@ zqx~_e>L32_hd=-M&+kv?oCTaf9yQbq7LnE(!$7LKEr()fZ)6N5vdjd5nYX5hLSP0F zS#zyTh+*#BjmSW{sr6>@L=deF7A?zSkfgT=8w~USp4=u&ngF`LyJI73>Q1dyk+iPs z;ZT?p6WF^9Tx6`Hxan{>#9mNss?9l>n+O@SMQ?6U5TYd$bz%a)|Ni?EQx1BDnnhb) zA~N@sl8!0H2tL9bf{3Do1!UIF=hN|cWF}^$)GM0JTKL%^M9{f})M4=`DZ0JA&F{aT zB$*o}g2G_T?5?N#jhPRJ!-Uj{x?(_Ut*$Mlbhzq_*HVhRnzd1&r(w#NSsdX{4~Yw@ zwUxsHZaL@HnlQ&3nr%)nn31WeJLghbYk4@ScXxN4{4Lx}scYL_(u~tCxqCMY=CfES zxRXY@_i}uER#+ypY=6S3HzKmx)p5dnyTi}j4ay-*0j9wKNkO*0-W@BGup~ zo$gTh;L+pKyXbiLIfySl2ZtDKuQ!4_i6k>G5@OAyL@_cDGK`)W7_BY)mwK>asdtKx zFGYlg-eKOZ3KVcv&jv++Xx#_#UAOvac?QinYJo2fUrfLC@7m?7fO!SxUcwmVkY)yQ zPUIdvJ;>nUnKP4LN^CGjWANFBd*4GDisqe81S7w`KDO4}8*>S1%i1)EqR{}B9p$iK zV7ZbyfpqFtBt~-6m4(Y8 z4V>59ylQ2pzO8bO1=UwbXO37d(zL1~Xlu-(+K2?)byVCy!cZeg4mz*f;c(z2t+m>k z!?w1SQaG`>ibz8!5(aVvw+@X3x64|MvH*Zo4WQ6Egt-tiaaxkQGuYLbC?!@?Fu!{H z=Dcm{U0sWfyPpVl*OHi_1N7^(3U_Lz2It6+0VAK+>(<@Ltf8OaQF$61Q4rYFl88Yi zN#G~!EKJP097uANMOY4moJGL!BoK35*YozxyVa$%ZG|lEtfn9`SBHd%2Ve?~pu|*( zh;du#llK}L1wOCGBg-+ip`_eJK=CukF*Ft#J#mz90yCzL{e*| zKm**wo#1M&<}S`+i3&lZL!*fq^*W~zw2#EIJ5}{?d&M=X`BG*Fwbq=8n3FlV1t})T z4hnZ?cPN6n+6+#P<#1KX@qVS-`?Dme+EQ8A{e0epJeP%tU7eYP7r5Ww-4HcSy|{2W zEV}Mtaf*7|^BSuCes_O5olm#7Z}0AIrDQ-7Gf6LSR;Qdxlx@{*C88y$yZMrLj})(J zJFPdV95&koT-T<}7$ls~{c~MPsdgV}m%7qMPVoDC=PY`zfBL`t^N&CL;BWr>e^WBb z_r8}TKhy+^BZ4RIW%u$ouV24;_07%OH|M*%MAW=jiU^Fs?49;w=3S?ZIzu^FZ^2`T zGtNh;O7OQLY6w|vvt9)<4n8=s^=5{>Zhe$f&U3+}W2_NODvWXx5xRbM{pk;WxIBID z`1CoGIgC_cSLHgN>gjZU?q&K!l9K@*yPKFCAx-E#_a^hk-S=bw03ZNKL_t(|jice> z2FT3YMfhXxi0Vlqs%T6WA{9Aj9yv%FSx^GGk$bP}1jwNjh>`*DPd@pB&p-eC^UuHd z?6c28L1?&h;3UtlU)-JUKL7ml<#_z;v(KWY${p@at!-PqzdtR@63)`$aL75Al*?6# zl^F@_>*MvdZB8g5%S7 zOam(kCQfgg!^|ywl1NcUDz}RXh!bf5hax1>TDv=)qEs%W)L9omNDom5W#DGP%?Gh0 z@u)E{5Q%$RTP>xqh{q-}n45rms{?i>~N->GYNxw#S9IWMmG#(qoSFJ*s3Aqyg=j{ir(-E-%Pj- zG%5%IM4C%`7o!$@MbHSlf+@h=0qdJ+TBg>)X7ZS#C^LW#6Q$&eW*h?k+&47G-$|o! zydx-7%sh3pL(?w}wY?tp_A+@8EVS-=bPPq$5CVhiIzTdWP{6mebJSxa{H`Y6VMPZQ zqz&S22-Af5n6^3UG`y?%$6$BvS1hP5$vxCc0H8&V7wXX{(ug<$Pt$jn}ZS9h1&>VBM8vp#9stDJ3l9$!n^9Kdn|yU%ehC1-wyo@SwkN*j?ObC z?*@PdD$+j^UlNZVPi0ZNY{t&eXdO;_sC<6iq|vxz#MhTq)ZZB;+841IjL%*u#^#R8 zmSKm3d#)8k9knoF>bd$r)uUv?VZzM95`qPhb8?5-cCLY%v*Z8%mw)=vKlSV?0?Or18*X^RWs^J#!;p^Pb>hn zR>@gg>l--r#B8YJ`^>-WqV7PBLb5tesTm$m!#6>(kaO#txVS=3m_(M|XE;hkYAVDS z9Og-#z(Cs(W%vUIWg_8=^T9jh+jnSsY=$^mre&V7qIEG)nl~AL=;+nJX>Z1X9kiGzV?M#REnPpHiN6;Rh4M-zyX;Mo7gv5`Cm_q>LFHl-QJnyZJSn zer*qOlJp2U=j=NflmKUWms^X-d07@StF`)$Z~G`16OrM5c%WLHJsKTdoQQg;X}uSg zK701;!w*0F^2;wj`|J+_QzQ213lv##0@Uoqi|5C~*QfPN-g|||orkKLN01u1rcn=$ z9TAL(h!92A9jP3CSO>UAh&zX<=Mg)fruWIk5PyuU(I8!hyX)@WS_>9uTx9Obsi+%u z?t$9JVh-v307K(!;h8rZXNIZ6*L8jR^y%qzikl&# zAXwE}8GU2M0G3js8^Cy2nu8O+iT4muXuQS+;BLE#(DJ4F%%Dux<~gs zA9+4_gn%(VgFe&I)M@4BP`mHsV+Qi*^8*hbZTBhczuNtBdp4x>V>ei0t1phcw>6PBvUC zjzX{<2s?KW^?Z__PWNW^Qgu`0M=H`yLh*8l#vk+E^r^NS^N=4znM)@m$`TVsHvpfRGAY667Fv1GMFLpXv`!` zrDWDtH*2j?*L{u(51Mu_j5`nNsE80H!c@_UEf&Z=<(x3mPT@i2#P5Ib;=_+WsF0KY`4GMJv@irr38?1Iz%WP=Q};5y~m^orE#m>YoejXlTxt} z+_t8nP@j^ZSGi)CrtSvBq3?U;7LN!Is!F-@K>#vS@8jkU7fRJzxG%Yr_rsS9yLUm* z!m`!cE{1OK445dY;{XR+P)CSpYX(kE2jHl-oY(bq)~%kw3^Y?qESb~kyt#RbRJW?T zB}Q42nxRuUMu_Ba$EGflwyic(5xG0v{`R-Ot*Q>?oN~_17_gL5H7!YWv$bxWt6(HK zvB=$P(?9$^ zCwcbd+4JYm@$DBq`ab~N-=AK+e)WrA|LXtz@&Eqfz2`4pJj*#7VJS-|UhPlA?&5|# z`aH$Nq4A9KAeiUZBU3#8oNftrM;rX|P6RU3JH2#pR5-a)D(S_0FJ6B9p{K=(LfixF zAU<9nKmOiFZEdfHx!-M0^?vFq%QkIYuTvOh#H zPSSb78MCN$ZGd?HlP6EEudl!Q>Z_E}U;AsH-rwK%JMj+DeDu*rIp^1}-+cc0=O2Ik zaWF01+0h-p)9Do7a({m>B58=wiOBW!b$DV|S62o<9*^s~j?GTtj=CF|uCK3KYfdCN zx7KQ{1a6{cr%yilBs$J++h%6xx&nCe+5N^=aLzg4={R2ZVMQ3{cwSZQ(O;|tRiY@uFn71s zI2WMv@R*&9L?o*7`l<-Y2J@UsNy6%xQ_3vN=Z)Oa%+^|)8Ryhar&#kM0>a^VJX~El zv6`{Sh}2{b5syeyL{xj4xz-ww;_kK9Ht+`keHlM6B$wA5J@jP!h{5gRx%F}!H^Q!I z`_9t~qZm-vU;_+qlR?bUyJ>zl;KN7o!dwQ^(vB@3Oqa`^#g2=>Lyzu}$4d`g{qT+4 z?K=q;k6wFY_^rq6)??7t9}H12<>&Y2QP=P8K|k;MqdttAk209~T|~pZ1ogbXL=k=9 zHUtDFI?-(!9TC)&(UpIC)az=yF?lpN)56cC9^MZ+R{3BAXy^aW@!4DE$G`W>wEnK) zo&V$=?szby`%~uImzsa;xA(0J?icp{srQGS`$Zai9u|*|LhQ~6A_|NS4;M*X=Yjm_ z!(ivzSMIy);ed>vcdMPeOWmYy(0I6xVUVGwYC=wc5W(z!`p5t12S5Db-^f>2Po6Kw zLw~k`rG2**_{)INKD_;dt?AphZ%_Ak|Kd;ox11%BL)a`*HEbYnT_u{CJ28YPFf}3y ztj9-{#2$dl13Q?F0w&-B^DyY)Kwl!35%pO#4jRqBm^ra1X;^KMXt*$B8KX2zd#WNh zrzxeaRl>zEP2&{PId{vv?YYRN17W7qOh=+B@I)UlB?Wooa#;j8IJ=kRppL2zf~kx2 zI3dnX%)_-eESjVb+VARl?#|=3w^}lr=*$4!#?7F|v~wX&rX&UwsH&n^2x%8#76wbzNf~nR(l`moH!b z>}NmwuH~H@U8> zyQP$Z{}^i^-Yioymq>b#no9;H{L3&A9TXrs9*?RTBWXKb(fRXSNFowir7@LZUIMi_ z91hccthFu6f`Pi`oWnVmOSh=Y8X%%lGBeywgj(AGh;VD&C0&;2v>WN*!K-3EpU>f9 z#uu&U^OABZWdfS+PQr0-VZlo&;nBt;grV=-oaW6B?{fsAJh+FCjw}Bb_P0N|=U=C- zz%Y!=gIM=C{qvycdwzs>2&oSp74FJcc=Qnw(OEmZy9Z|02Ts5P+;)GRy>Bt^e0q?N zyc2g1aC`^F35c3gQssOpqKoUTq-6{7B|%-Waz8kke* z7gm~wgEUhq@eyr(k%YrD17MG6P_nj&{Zb3ZW~ascXvIepUd%Y01C^Wkn65|6yF6t; z|2%Sm%nTp(F=jJ+N_}SI5`}L5cxK^ALckH8Mw84!7rfk`!AiELc;ECDGd} znQ^mt7K6)f0|K4&J*|@r1sfi86;*YZn$5vaDfLE#y*pbXxlD&@1El9lJ(guN^H5Nq z?N*pLF%nT?iTQQxv(zrc2>FHR&FWxb_wID%oXx!s)O&5UwU#KUYOoQLhz5m~xoUGF zmRvZw6!-M*omaizT03v8HrwhJ#Gh#JtxW?JHPgeA-+S+Qj%HfPq7Wz=>bMy*6zWDz z_3rNO{(N^j-_^D?)0}fmR@DY(cV4Tqpfv?^+p!tu?u(q_bX;fJ+s%vQnkY$LatZOA z)~X1DB4Z5_ibj-VMC?SQR@MCac*Pn2-QWN3|MS21U%Y#F^W@31hxVK2VKmk@0Jzzk zH*enFy!jvh=|6e*=FPKLPo6)2no=@CP7A{V`g!*3+3|QxEGea&vvo`$5_wTcBjLdB zZOe4+9-TPfe$fCUx_#@KiyDC?gGOTvk|Yc|9F`X^o&t?XKtjk7_-S3+c6Yp9zW>=D zxaZ$~{RNA-j*OZabE1cb*CX3vqxfKMmibSyQ);^a^b;L>bpFny5e=Nw2j^g(Lt%?v zzI?fD+m~N{>F%F?`h6eK%1F=12OoUcny%}*ZCiA0ng_(Z4R>Fo8UQqRZX}OG??v5a z%veeZmoM&c+qQYKM5n}_@OEt5=I%*Sbi#~)sMflzwJce3I-O48K(6arN;#cQL=t9?$pW)%wxB?)B*|g<;hU>Bt!|v9nci>f+Jc404kHmFsB6xJ zgw35&uc4%2phk?J%zCaX)WzbFZ*On!&Zonf!bJ}QBX;g?!=C?@41HVDSW*4fO~I9=P0n81cXW?newepm0vmZf3_t z=0d{dZvA1HFvs)qvq!Qa>g3tXM^)bC&2zajJ@ot^0;Bui?7wmU@3dG0@?D13_jr^;-YI zpZv*x_1O=upFIEQ@W~F;{L5bdR>o+*%<1m_o3Foo`|j1NufIr1LM2Ip*Z~?HGy8A|Lv?2R13EdM&ry>*$9hgiZzDc}9Lz&K^+Uo&%XmZ~Lv5?K2_Mjy zt?AZ?NQ>gC5!+X7ajB{nr_>y@9_@GUdKNrBSjW@kc|d^!ZJCU}xOr8LoxI;U@#b*l z=cywPaR(nK4G%tr>?8tdI71@hBaq%7qS2h2%-IphlsC;0w~U9NZ?VRFD3!!@2HcZ` zNwp>+S7WBu%w6%&);!upGrF6Z&-m9RN)nrmr}z?cZgSeuhCDMD}rL^v|N4J1rSL?RUb z=%bH*{p(+T@WBUHS63_uoC`p$b;%{v(_!kSq4Y5)l!*ZHLB7r@S?hz$QA~ST`4=LC z5BOuQQulc>J^*f@T>wW!$l-1v`ps{C^Vz2#5-#%|tF)9J2YN@}jJa1_&e(|@QRc6% zG2khs5Zw#F$oPww(hd39po3Ob%DmULqZv0q&;CIY$%ly{U~!JfF|g zv767_0Wu~y3|_S@#{&g#-8^nDc55h#&QaYjsy<@os?F7yxuooasutfH`ZZCZ<7%z8 zB)y;VvMf=~H*H94c_033kWa_hx`=4IFy-gO&4}XBYj0Jo%ZYr4;rE9xyEItrof-Nu zHzs=8glT!O3%d4;ZEr@V=N;Q;j{!|ze}71S`>e%7-*j(GriJ-Vd$kAa$N4y&wu^PL z9T|My!+zz^BX80k`z{zcv;F($7wzwJKE-}reS7-mE~Xv}>3&WxyZ)iSMLRfqk8O?J z4%p*SnrH4@T11qD07UE;=d4}GL>|$pyGIUeUDuRSYuik)J({NJpht!y9wfrlhycT4 zMBEi9_l*QSQ>W z2`+(b#j52dXf*&9r<5|0Q+2>n;?b-x25m_xn{$%oe$(^Xn$c-p zPwU!+=EA@-*IF}65;kj0^!&whX0SL2%aS)eMgM|sn#jNcr}O=`uII15`O@6LPK=b2 z6I3;q606GHogkdI+K$JoZn&Z|jH;O}hXY5+q2uas+_udrF|z|q;b8nEQjw(XdY?_S-0@vGm;lHPmogC|cOD~(>r9b+2L=kx1V-~8-X zKYw?B|SrpDi;6(G*G*{f3vMOiRH<&_dfaT zlbiMK?*0zUZlQ|a>7w)NcvqRRKS}q;&^+Vz=gxfR%vspd;szkV!)k}BvT9t@$&g;6)Q92wB6JDIf z4b%7AgJRL-G(Na(+p;X-b52Lg2E~DgApYzc8iO<4m5UM6OU{4?b1FicVCN9gvMiAu zoO3;M^B4sRxVR#H3B_l_IqxcwBhYqt2(ryhUy^3CKv#Ywt-BkDE#M6(8+gfHICEEkWH zGp^RmM!kgxUIf5Bm}DIcX{}4>np^9lTXuos9^Tjp0OKYH(QFvVxp&-k_jBi&#sKV` zlgI1f;$V+{!t>IPOz|G>`1a^wx31=Cvj3Lduv2SoLSxf!|Mq2l7aCmb_Cs>aqkEX| z+<)(WT|N4i`DpVu-x-rWa<*uMb@;Be8VKX~GdmIKKHWtET^}$dM8`PN)0(`ZRpcvtg2or%~Oor;o^wT_Bz+78PSqZiiMM_TUzlZ!@m)x+q>wNJ?m)B$L1 zbE>Et8Y7V%^MW3IBy211u-7@GeUA})R}AO}0}meGToaFePQgMLFo!y*PJ z!1|m}4(+_LAw5C+Q*+!>U&qr6nYZn`5IU%B7^`_7PsWw!Asv@}1ar`Yo1@rmlt@Rd zmcc?{B;qI{$|)03lr1EY<*-a%=VZLPM|E4OwJs@RwEQNb)>PI zL`0kk!f29TpNY7X+*(Vi>}Mf{E*wE3>Ls5$ zr3*rrQqrc|dCfVq$kpKppw>-9Qp!Xm!clTav|yk-G-A{!ga>ece-F%jxU1I5Rfz>0 z%PAI*h=fZ$dc@m|Wa6*EP3u=<%1fV0gRgZv9*@y`XAac#SyM{)w|DVf6UT|qPS-X7 zlvv^6_0HAa#vD!dYxu0eR!AwW>v}rfACJem&SywtyQ~QhjFNUJ$FdfDGs*>dY|f?0BMH1khSd zsZ2CeRa@KQ$WB89W71?EJ>9%*8TnBnVn%CvdwcWpzq;+5w!|{m@;ROfvjm0k(@eRJ)Sz^x*Uqw~fD zD6&>95h2h-g>)`$Rn%Hj zp{qj?f~h4=9jPUDbs~b=&AZ$6ya^|k-W?>?aBGco*Aw(nf)Ej=4C%C4Nk9+%pIAjP zP{Uieg!D!rfOBHzSy!*LCRN4w%?W3DwAQUv8vO4my^6JaJ|FtjN`0+lEUi_}(i zETqx2Ehx7Vj25#lAm;9^SxPCmoSenXTVx|C8M6UMPYqPfwfXJ+dV6=;S_^SBbv4s% z+j2=DxjLj;YZ7_#C^o1Mel_B9cT{Qe+q0ok+}jo}gLer378!M2QRxYgLG~R@&U1H`bZIy1tMK?K{`>DQm&^VA$qgF-Xia)hw{83Q@#8Ok z@e3Elp`_vwT_z(U-%M#ryPfI+@ae;|%Si#bzrW8pZ`0&=AR+=}=9K2c;Q*krl|TI9 zWx1?KVAVt9Fukm zx)m4OzyZ+r@84f8m;3ws)9DmcOCg=sb={UV!hxsL$$F^L^<9{?G*CS4a{D@66vFA~ zfx19NeSWCZxr6{5?-t6MJOrFPJrN!$8H>&IwT6=nG!;; z^N0j2Xs2IsXcU2n)igzQJc2ehn(iKYUf$Rqb2#;*F*(YC-CVRQvj@Puz`v{7?r0ND zoLY;xPMj_inl za)9Ps00II78Up!#Q;GKUvBAt5M~^p_faXWIx}nbd%-9f8G}9`Zsu~b=njHbn#6XO& zhpYfVK{~)0vu9hr^)#v9$RtiZJ+GhX9^LeALWP28-0JZ{*W<1YV`TjkIE z9Mcs$6NB^yur)^XfQL0j!)V@?*dMErDBAOd2mjIgAAy>oDgn$y|L6blzyIxj_n+3~ zG6180E_3ux0;4v3)6AZpKCIjF^!{g)>R3z&*>zp8<3!le3K!p{6eG>^6d`?J5|xzF zRvTLxBC1-c!g&H`AlkQ-!&s&&J&;C3WOzlhs68{ne@@pJHg)Dxy;@pSFoz-hThu+$ zao1Llqz+vMnGg28Hntrpi|wcYU9601jcHXdVD+1e@Ew2tV_i6RTW^j zXnEi|xzTXY?Z~#%ti`b#WfhS%uJras^C2&n&A;XRhL_8wlyaC)0I;s>{r&wP{_uxs zntu7sFH%bD+OiapEP*$A!km({bx$T5N-KFD97L4<3d8Eoo|V!#*J`b%7*@g{XWPc^ zTa*Dn&A7*QTzRkSW(v!)Qp1I_o5gNjSua#~Sj3~ywN_A@rVJjY7a`^}(1v<~Mp!4F z4wh1Gov+qqo~OP*;M3l7es>5Gx-}oLML^PF2>QnY7^NP5zg#YEjB+R9(4GLoLlN%2 zXSxfGz1$3Y4ZHO%N7vj>%zQqd`=o)BXEm7vCcPU&N@*?I<>h=jo!l`SN$%VtcZApT z4txbKm&;8`U97&n3g1~z{0UJ2Lr&r-6-V`XqtBq53()&Kc*>KRQ-SYUw1};F#dy!x z8aMWB$W?T6tV_I6g^wEAuR$j4_aA+{(ZYz=@dtq8$Nc1O{G|;fnx_0IfIZxS-e# zZcibRUY3|L0cy1G@FYs>!M2oeU2A{kO;ulBUUJTNcgJ|N7hB~#*$`-Pmy$ZC#2Cft zchi*8=bwKrBI@kb?Pzb*nS2r0%(kr+(fh#GbzPR_%P+t5^W~hLqu1m@;6{nxOjM_= zY0)n~WiC%tHTS$@hkE_o&GQ_AJ!Y=5Nw0db&NFkf|0BfcFqyx8^YmO-ikR6nO-|v0 z9W>85Ct|l)_7GrO6iF!)WDylnXuZxF^6vV`O!f#aTG3ic0U!bt^_@&aO;h8>8grk%#13C9fsCs zB)D1tKxW1Y0BQqRtgeKa{^FeUS1Xec=zt%{PL`&O!xQS{PLT+ZN4EB8KPDxNTOOX zWklLa0o0E#7YAzujF~YZ7%_XzKd!aJA@vl_L`hW*v;hWSM3iziZQ*3?=>>==;-{W` z|9HK4BNPBY#8Rqg$v{SwC~2b37mu}8Ln5MlJUrgNnRz}Qj%zJ{`2D~Ar}KaR@#*D@ zFFp@L`csz~*dITVmLo<%taB88NFTVKd{{H^E@4oxp?|%2|U;p}aI(6xqLcmI|bA(ss!9J2f ziBk_F!8M1Yt1xT&RqD2F%km`R4xm#d%=3|Z!B#1&N7v5hGcuR{;UbgH%9-Q6wA^5MgWd7kg@@2!X4T}N1_;D7h--A_OL6g*}w z#5{F?J3p`Etd!7R*1-%0jTq{MJg!t)c9tE^zwX< z6k2zM{Ajz`>8y8tIzsypllB;)Gi$rTs-?PpB_iHikPwJyo@T8T04Juz`7q6%H#5(3 z5hiXqf0MPaK&M9j66kpeKXw}W%u7%4Rvx(s108}?=c{SAZU zw$f`3jC=3dVXMc6yfUZ&BI|BkQj2?OzZT+At@v@Ba)S3*+2J}B#OhYlZa z8J+PI?_df5W2yUiVawq3L25fzU<`kRb%Li^;5AM@8__pq9#=)IK? z7!Uw*bG;ZC<`!4nPvDH!v zSojpXoFUqu)ka5c+G7LQP=ez?$FLK2lB<2)KL!82+DQBMK)Ol+iBIAU_&AWgxFhLr z|9az%*DgP=l3VwG9k-(1bgvoi;3JNC7&iu9`;y}wuJ-@%;-4I+4Gx{EhT9VQ*DWZ* zln98B*^?$)V!k&#uvTufzqt2WQ16G9dVe6q-~aPJefa6e_dosg_VL|So&TS>{@sjG z@^O54djIo}Kd$SNa>B~i`Qs36niDgtwJb&L1<2mQuid3bVzt+ZF{Q9>aVS&?ZhV)6 zxc8hfMD$X=y^$4>i4u4#0&GB0zYx*En$`w7C+JyzoLdnVB6{pdrEzbM*{^`$so;@m zf<2v(hGJXhJ)G#gggC%|O}!1}tEhW)?i#$<5rj~L@t_{6-M<^#NJKmfJ_SV$#12a23mI( z$mn6$-*LxATMS3dXatelHjD5wbSt(&TD_N-tJv5Ku`goX<75Ub5{5!#47uB2NPHbI zjHMJ2Kqcm5I+!(_+T+0ffj4j7{OVV~`u_XxzxeXAxTpV6>c;u-`DdR!KmP#G`tvnU z+xJXwOd-R!#={xIpeW3ghV)Ul%npZxTj$>8-4Ln@0Rj;as$V8qDGtrZ{|r^d$N^=0?> z_afrOO7lFsIc^9p!TdF=$~@0=ZUCrHkw5hA?oPq5W9yPE1ihI(JUloLSKz{NJa0h5 z@xmU487DcmkiAlzH#fOa*zq&ieh}hVh3JUEygpob?L%VUz#%RDjq-J?y_h{1wC^~i z_#w=ro2eKF5T}NtiD5T$V*`v6IKJulYfOs`o@%V}&AhcSTszMcff-QrDEt1Py%1rP z$*)1i{U)!{OWQaHUIjmWPVAdfQgvobG__i{=0clU$LJAl+Zr~yu4_u3f!I{GS_>UT zqPq5j|Mc{9I-UIHcGb^Rl_19XlS1LR{K3WGlkH@2E zaS`D_TP&p)NXFEq-kK@?JDx1nhA@u%A*FOapJAwN9LHRH=bxDE@yP{ zMlrCIZ7zAiFfiE&#<<3=skA;3k-n8j7$$LOv9w zOV#t!W!q$3OUtBT_SW30vRzh0%sJIkPN&nu-O*Im%abM2nRom_xJa|_{A^oA5N#!$*qV$mx!pgZj-x4fKm3Mfwq=n2%1v@uv*LU{{G?d z-DQ0#1`2dJF9)0q@G#$>j(5OE7+M)9K#hOsV%Z z8lSZ*#I7;hSsvar#QykbQv!fQoG3TBjRb^SDY`6APfz|;5Jkk(=_H=U4tTj-Tm=03 z*MF6BuC)-+hYugtb#?uCe}B)t3JMXu3@GRP?%g|A6X)}J+qT2ufIW6Dy?5y2cBRJh<=pD6|^32^Ae>nJUm7BhaY};czC$GyNg;Y z==v)>FY5`a+DqSXaPe%&7lA>kiI;mOG&9d~Mcns>^rj1_1^@^+Px+810$htQ+Uand zymYTgcwM$l(3V=OshE19z*b6?>RBMAlv>ndIiaR~^Q_wj2tcTwbah=Bn2^;-H4#tjw3A>&t)C}i4;}y!QEeH=p1Rto7_8fz z?Y&TY-%1Sjg&U>QXSgjcbAy88CZo&nXRcw5K0y(7vyR{#sR)SFtNWnm_Fm<0jvFIl zOWN9ZU)AS@)_{SLHU#YJ(Z*}O*23}mVdq>=7a^)$jm>X+T~QZzAZj6HB=dL6%#F2{ zz}*UJ;aC-swHAP4gT{#{6Am*`fsXeCWe3S`ged)1MqOr zx-1_){0yL=%m{VZ7S6;}1z?CoNvCFyNf8kNL%_%dVsMpx5zFY@i$201CwV z$&fl)Yt7t1TXbCM+E?*!Q7aOxJ^)4E@twB6b7J~Iw(c|gLt|{(6U|B~-uMi<&!Yq2 z8!}zg0FV=7&$84Wql?|?_CcE&(~b zlI>t+Um$EViO30=vfCwp{nvkOX8-apzyHl|{@YU8sY#4TgiK$3^~FE`?mJU;9Vnek z-a6L_wT@n$XamvuX7dRQs(5p5cpxw22_t^o`P$L|&A;y2D*^g6K7V|ExStRWaklO? z2HNY6!S~;P|J7GtlEno=WT6cGM z(76IVN5I#5S(a_v+%)ubBgEQ|G`vy>9jjv{$O2_o7` zS-0)Yn>T(ixu+kdl>CA3-@m`VzxUJK@E~lih|f7QfB5hr2JgC{6p08~Xy;ehtZi2mokK*JJRE#TQn-!6BV0d?=#<29`BH=H)W3Fvs^B22nMq3b(+M0 zlz)Ez;p4|=fQ&={Qfr+!`&vXK33|dv-x!#37BSbMiP&o)0l+|lYzGHrM?}zQHh^fa z-*okq^5ikg#QfRYM^iy3*D(P=P%|w^h}E8cep=TRa#l5k&X9H+`faufBBp6}@sfye z$oz$2&-;L*L|_za47{Ha03dAT$7aw;2CM_|Ali!QR1n!^XQDJ=GP7+h2@{!EEy+<5 zQYLa@C^PdGRU+cnF9Lc&pF4CKUZoj2q>5kws-T#~DCeVDI&XT}^jzwXKYf@cBw{sy zYRxNFJsc+_yVSc!~0~4!ycRCR$F{+Bg?jlBvl+v~>FE1Z{{No>;<&&7e+cSa@ zVJ@Y-QC^kc(10@>0pG_bXk^V-4O8UgXWA$a%IXC&}Ze}eO-TkR0ro+cTxF~m;%1$NEC2(8T*n2E^C^YcGFKXXC=NIBn~ zPM>}L`MY=Ty!77B!rVzkh{$uYDC8~zrt6TvAHh6IN z_isLY`1$LvzkYmt{O-H&{^_6oi8(($KBkoJ?(W{bds|AGrpa|usM=8v;&ps92CuL5 z9YkazX27hu+}d;G+TFaY*FBVmKmPpl&r8`(r_iy_^R=v_|oXME*!Jp;P;E8$elD5$=hCO3u29}tooOLUr zWj-9!d^jAY<1|aHQbaNnkxJd9zO1W&L1G025j8Vt`3*$006`B`N~_On%6gvj=hAac)pxntrL-mrj&BZ0yRL%@ulJ{xWOs=JNU)RT~jSKB@nT*Phh%OITtqt1pQHyqW{GjQGh6PD2DouR#%0Ik0$Zb;+5Slt`6o?vV{r2DfaDI7Ft?(Cc z4gX1C)Taf&3`ne2ljqAbF^E)E%{hCkK?GJcL}CO(Fl!CI4O@`^FlFdnzk8e(0J?r` zp#lPxM0A+4lcu|56a;9sBv3?|8~F$sh{!z8M1Umj3Nj-KS5+bwGbZGm(YyDA&|fzo z`YzP&`*3KK|%&I(S{u5 zoTL$>^ocR^<2sTS$A%M;&4DwKlt`^1m52!9Bk?Xz-ZI_{G@2Or$4XVNj5XQQ>M^8+ zSsETWxh>W6oD(MT9_U6X&+ED&C#EKPu;&Asv*po_HvxbmsA)nX1gFjoFNFaKN!Ub% zG9i(cu6hv=QB5KbG*RkDw{a`fS`!kZnddlYgS0{-bhYZ_dd&r`wU$y&r&DWb>%s-0 z7QHN6DS}LhR8^*w71d*F2~pKVYD$U7YH_Y#mTF>@b4F@RCPfU$kO{4xFVA0m@x?#< z!yo_UcmMj$H{Xbqlvos0)uh}V4_XTo7XdRMe`NqLLoz@!lY}IIk!}f{R4(OY2%K28 zNfv6vaLhOd7T^W5t?CU85g3UE!^p@)>RR!SKmGjX;cEgzCiH44u*kXgiT&!UuX4`l zJ$$Jl%c922rs|<0w}ZLch3K0S5jzc-YDYyuh$$0$cNeL4V_}4q?`x`603dTRQ7Lsw znTarEzGF`pRn>W(w{7#JQRj67u!qyBamAY~>{V4t%{i+9BOz%m zWm^|!J|2%RFE1VskEwuxRj1o;K5y)xw}^1>vDQ9=I~D_7$2SuYTFAspbX5Sc?HQL$ zVU!~xni3ke3`m2{h11DW_NW82vQ}u6?11rk1ST|9^*9zq3f`w+(0Fu=ylIdjTeB%< zBNYH6Zzbg?XfQYZg|N|7^@a@btPasO>^dG1G6Y84lK=p;HLYsSC-uyWZb}9~hUCx$ zK=O5oq>q+Prg8tiI#<>$b%pG#rVS@;`l3yXnPqM)7U=O(12J{7$k0#`DQx)TvM}S6 zXJ%g3#qZ<#Iwcm7WjTi?^2F_w5>fIK)LW=+$K%nTay%YWO3(=P!DGCBrhJ??Ioi@% zOn49rR2#qk;V{=)ovgVR@wE#5I?#Nt>$}+ox}J+EkX4Z>XVGF{2&l+Q-BcBbs_LAxh}K#&Ck4sOh=7EN zC(wagw@U-m*w8jm+XCX8}ZI*xu-BbWWVd_DF;HUOv2>pD+LR z`+swI3qey#clY;i-n{wpi_h*(r-^gQDS2BnG-74~G9@H3AQ1#z*Ht#<(>>?OZ~|m7 z1Y~f%X=Fv7pI`p@U;gFiZ@qDlosFaC_3--HihfE3o_1lqFaT1>sRSWfP~ z{T`QvpjR652Sf2S)C|&I-UU!i4GfvM_h6Xk`RVBi0KWeE>uj6++4DkD!rU#ThBm6|oDc+_ zKRlOGq$gyhl;(MM9+><4djluIKv4xVCGcRCT+{_B5*ebmRyVV?lswNVB{f@1xm+&C z^H~ zG3SYxXU>T;(I!Q$Ef zEE7@UWYZU)f96FVDJ89PaZ?`s2?(|L6br|0_jI z(KAE0bt8q8rlJxDX9W9teBW)$y-^BYgGzP{DK=eiw}0>dByP5u^#-1bDYJ>0s7FDx z^}TIS;VzemKwEmH2U?^Pqamupk~Dz4jp=^4n(czSWjGXX?}G<$O=ZoB#-5RYz}7e` z+=OmgRVzWW{SjKDSJYmGX~szY7T&SZ5D-CH-*_V;1u#Q10Av>-(D^<6DFRMGK%Fcb z6`T?$Sv~Q=cOunx>Y=(QzLD@OAarU0VtnsBOk|4b2gX zSv+ht zgxW`f?POsev!kNu3bm)AH(cKbR%-?9e5w5@W71QsMI4pg3yr)CW>thvxCwAou^R}i z18UmSX1zup5uJFRGDzc-{1b~X_v}is9 zB0`uffmy49R8`lEZ9)tiC$Yt!M^j3N!(m-l3C=`rgmJ!< zfpnM}F->_wg4n>@wwVHTNm(CN_wg0C7(zM)lAIdm8%W`mJJP z_o`yo*V9~uP{Lv6M!i~p*s z%d)wB=v-~}F_8iKNdb>&%qb(82KNOZ zAtmCR=9Cf{5hw^SF%y6XT!A2Uk~KsiCUiT^M3e}7kb@AJ$OOy`)JO~zlM$Knj~_lr zeR?^UqFPNvx0LAacqby4^D@r|l`5s2?vAJ9@pL?j=sZsbB@?PiOVU#Hc$1+1_{Sff zoTZOjX7{Jlx@}uo zJ(F%L#XrwE0a?!3v=Gr&3uDT8HnY=dIvtO1-#nT@t>x+I>3qH%4o_zGvMx{0FNSb9 z9p@>}(=_GjaG0FbR-{5>-HY9S<-@3Gtz{`I5E{UAn2&GnJ{%^krHUj4iXc6L2a-aN zhRh6giP%2WwhfqX1}1jUK}^idt^cYWj}v`*|Kaj-{_(qSQB6wC%!yM@{O;YmufP8K z?(XjGn>UEy`2TJr~ylbu1_hc?ze)$w7606!~0%!g9t%wU1(zm`{IV!vz(|Gk))KyZMCkeI~s^+ z2+j)1%p;e=!^6XyH*c(0YoXc8%geGXRh5V?my65N&p!JMySIyo(ZLUUpxxPKE|-gt zY}@9~qQr)POvt2Q$h4L6@bG|LPWG;?;FA_QMSB8}?Oec3sg+WkKgV^Vvyr+Q{rK_Y z)6>(he)X#`u-m+u!~sDA$Vt7#JMlcv%{P=jr2u!w6O;;70pxIKbfQw(rQl^<&dX8} zQ_fxzoj5b4YU)ISVez^WG&5Jk(==6WbgRpwgU?gBSobs{d;QF$?sp-1yzf#oHOD&p4j;<7+O!Y* zKSb8+12`I-H%BI<#Oo2>7@Rl9EwBaLwRAU$tZi>3+xsBmr=H_3v)OA8>(g7pY##$$ zulUVW!;pCzf-&xJGq#(bL%_n|t?ctKcqn0d#axA2+3yC8chSsyBGTds5Ll)h@@8EmPG7?p`m-y&`7;aHM3_3 zB4Xkce34f&x+hUbJo#!=y=W!&j}Dcm0N_Ym&e@|GO~(%kk2)idBcZ;#Tvn%)1CRn} zEsPB$s$l%$-hHbXdCaD}r6ubYBUG)>l5rFarYWB<&ySCffAv>?^$-8>4}bsnf1js} zXoy@&NmDixK<4BCCu(3m>4@E^s)S$)%&Z0=3aDn4Fm0vy_I8)aVGcwDg^*cpfnmcI+tQ2kEC58G4X<&= z0YKlj&7ideRaFFb6vNllBL~te@!S5#fGRY|-9$vJ;hX+z>itr*_6S4|vHFVuV4#+9 zA4giFVJK3olS0H=s%Ne_AHM_lFvM~riGPl&FI|itv`ENuRxE1g|@rV^Z`!AJqKgLVXP}iD+I{+;hVSH zb=I|oF&ZM{U`Asl)&*M5%T)yczA{YX^V;n>8x{p$`HeT|IjW&Aq!%s5UNSQ# z@*uXE0pduj3PUUqx?GB*huAuqM*JoY0<&|=xS+6{d{4F)abZ$Q1@iKCa*N3kuCe*# zxGkwidR+LV#3@ZgR9hGwkN|;I8)7m#A--{TaaXIVG`G$6-i+9-ShVu>7vGfg1#3kB zZp1{}T1CmWrEV8Ezbxxk3z1qK4SpQ1+N~N84eQQ>o!ATQVE~|kAkso1tQ|u&Wg_UW zLqt}kTID^K2?(}}TtHRTs&-u`SW00c&rusqT5ds8NSJiS}jO-m)DIVT1^p60{+a5zkaz+`h~&p#5a zplYg^uv)EKy)2gxAD=GExkyE#eE{CqT7rGyLpb4Qs7{XlSd}`R@4HS6}>b z`A%v{DepbpuLUU#4NE&<=n%jjY4hz6rk!2?gIgeIYN~`N>t>(?hz6!Gr8xmV{q+9n z=l4zl%gk@yy!rg|clY;qitzn^{r2*5e*EmSc{)72eZ)fsBv4!4KmGLMAD=%w+2x|^ z>QC@hC{^NJ)C6fqDEA}zstC8M%PZJ))F$BukHVx&t==SXIJ44)8xeWQf{0L0;fz49 z|5|%#r}ktuGee}{gc)@-00bSG^r}1USNMISKE1(f;zfW7S__xY7v=7}jH9*;+lQ-*gLQAtFM92)9WY1DCT7l0#Aj!#9D?Z-`A?fTE$+4;E>boxeZ zDzY1;%Rs_J>G#)$|OEYSpD zQbowZRtyh4G6_V)N=2r_lvD3sfSu`Op0khY;o;$MIHZ)oP`uZHh$@J9_DAE3i|y^n zH#S7d$E%-_VO#dIgM*nm+IZuUi636uUmCj*B?-0y6TPF!amCl_0rI;&Ro@Jn_?dGHQ?Dj)Q+K-$#=e zyCb7&E^#Su3X9nZ^8EGR{@q{y?f(Fm=l}bE{h!}I7oJwpwaAvNfNlkiY0^RB?Gt#d zM8fKb#SKv~&hX8ezFq>m_62Td_4)_+)PlyZ+F7ljd%@#Z$azx7knk{LH-o{BM~)Br zV*R&MlWceP3_s%B5qr(*-r;fB)7G!k+>>neXdSi0mXz4ADgYpYh=wtvBBn%+ zO<*@-BHuRlbUP&dCOYH=(={OO0R-Oz0*z?K%)r{lkgGbKwrwJ}H0QSQ`e>Uo?A&3# zPu$5jGoqn67yuAe@y@(cskQebf^Azm_c?i~J|Zxxqf$ul`1ttkx8MKvx4-+lzx%sV z7b32vwU+sKxO`Zw)v6689z?lA4~pI?$#}~1VLD7xtre%_VSv7+fw|Sxc&YvhZt68^ zHclML^`ihKN@fMXRLqc&NJZ9lIUEjX0BZNAyOsnB4TX33yAf@M0>-*M|`v=Xphe<|vH-u_n-*KxOyb^mh**H`fq;$+M4i+bMcEW&D$C0b*HMP;c z8T>^;D#oqGIf>81pk-_@okL8;X!|__!lv zndf;fWsP)ctrBMqy3gzh8q}i*kpQmOppqxWjJdShJ2DOH+lE(4@korz>YVv}UIEBs zS7sPC#&}5mFgj_8=a^s*Ou7blrh>2{eEBYyivc*Bn_BhWXhhEN&;V8F zMb*G4dD!^sK)5^2gG? z6Z!1zo5T!gcc-IB0Z>AvR?%XNV1&f9ZQF;pg|i z|Cc|A2msRMBBdArBIKOrLq4A7oG?wPip3Q!6nMf4uV4mCaxSgQ3SB)&+9Ye;T%87 zVhG5HiFu;L%*Saa!t=6h+Xe*dx(e8`EI435Yi581U>FQPJ(iPFv%5lx2Zj~N?9la54D3c%A|gU-GqqzcOh}Zj zEg9W&FB*gz_vya*9zt^g;JYiWGyrIzfjixii;9Si1s<>J z_uagYeSQOy-WZ25((%lWhM6BjygmY>>Day{t$7JHc?i7@%Dw(rJhT zdCT9nsXis)aWKV4`8++e3i} zsfGXdR37MF|EP~*)0o+KHgAq+AXnocogpoNyMOoki-1u8Fo0SLc80HUBEq*PV%bSH zn~Pgiv^I@G)-Z1b=$yn5d|n;JD2QmLrPL5Ks^)CU{{9hG!d^QNK1Nu6;a!L0>bpnk z-YMS9P|XNbbz)*dkxBy%A0{rPH5?q>MI7=*N7o4YuJsW{c3S{0ZQ=KjbvNaE(Wnj7 za-*P(4~z%H!#BH*Gy?@WlXl+qLQyaSS%nR!q?=Zpr>`}2CuWTy*)?RVdO_xTs^kRc<9(l5XH`u)>y)dY41CF~v+PSaFPk2%AX z0f1W{6w6ceF!8Vu#bIP7N+<#;A5^s#ou;&H8vsU$D+ZyApAkaa#V;&8AHAPW&~%OWE8_xF^VA@y=urfH&?y!CuoT8<;TeJmoiXn@X$o(dk*_z8e4 zj>#ys#=ne)2wd9)aZ*Md*+m32iGctuCJ961N&h?n?6JH4-#ya>2CY0kZuoG!XwM+q z3BO~gArQu+hmFUD8uGHI)B1C-t96E{=$Pz2lcR`^&yRrSsJ6!?7{@c*x&33j+Rapq z_m9tvOZj?=v^S{P7pUiJ+qL}?|76}r$XaXKI&`g7Rb)!k3MrhOA*EELy1SBk)0?2G zpdKLfCx%-HosT;{(+{{=Zz)SdT&mR*q#Q%_fYa8gjpJi2!&D0Z9FNCRO1O*T9I_K? z0+`u6&s!;ocsw2rBy_G>ONwlpWI#oCMcFKk9YfTiW7uei#G8hh5zu;KAS3(Q zgxz4C%3zr_TJE*&&WH~Z`%?kt)V3%ro`q{(LOl}s>TWD z>1d57yq(TcN@C0@skOHtXCLeai8+xKv49moOp}@kvNCO2-~aUCyl!hX1u}42OEIWs z%3yN>G%?vudEx`!9S=^#H6<)WwW?}GR5L}SDy7!?^z`)c`T1NILm!Y%^JEBSqFTXP zpiw)_x+n*Uw!*ueoxKtZeUOg9k|H~Mocc_9kbZAPwbP%hTjkMPUh^h z=_a8%hL@Qcz_ULH(R)MqB#J0A0OXsrCgR} zEm}<|P4nGpzPmddPn;MNiz-=CRRfUT|3C)b9y3GTEjj>TA}|mUBOBwCE>fU#7mnI$ z)Jmh?hZY2=(CApj%$s*9fEuMvLSRH>6h*)RN$hIW56h?=L-d7ix^Z0jx~6SVh`Zho zwA8O~LPtpsM$kleJGmYb>rJY!U=e0k$G&@OIKtFtqfutNJn=ueaqC$WG0x70)YzG( zX=22b(%s$N@puHH>0q_T&bMuwrbDgOLxV)*(YsPgN|Tw1cnv}E-h)05+qR|L4DU$C z2^AKK#tmcbjeG;o^^{WoR}n$7lp7BodP0OjmFj{t6C+rjXYXkFXv_3ib2^lBN~x(l2cVhZ-Kx`)f8Hq>L{hhx{%R;1Zb@(ushx7^Z9tZBcjHr zqkxE~)5(=`JNO1WKL%pJ@#BUcFI62awAjYuhiOPVh`-0256>F%29OX5drK!j6dreM zPJ2U$_9PyN-XZ-mvzxOy?$~j7`v>gyCNa%YeXP6k3c408AUm)!t&5=h43PR2EfLHI!rkDbLg0!@FNJ+8&gi&*6I z*)WE2kXMEILSDXVEr~lI0_v$hF*6~V#|;^`jla+!-os@E0Aw=Qd)0avwW=gep0e{7 zqTGLJDSb?LK!M&W1iI8iMC)C8#d~AFq5#M#L%40;#9Xv=jza%@QSss?ax!!P1;{yp zwha`)wC0ll_#~E6TzlG6MKFu_2RzJvMIT=GG^>VY5rbU#zg3N zzuf*F{r0N`1{=j(MDv_^zy=0@SbOWvA#_w%N+I5BK!}D`zk^ro!m3#w*6b7j;2qB1 zi!$O!#H9I6xHXa@=w=xJn0b+lrbIb&DTU{3CP)aVjh!k`r#%6u5M@>E1@#V7qNfPO zS&i|8n0lQu001BWNkly$ZX2JqSnVgNPlhl_Am{KVkAnGGLow9ejV9IdsvED(+F0aR<| z7M4H&BD!2I+q&h1NI1>&vYx%wyLUl}t)6o>ZSuXv0D3mTvMkQWR7yF_vwQnd*zV4@ z>YiEbG|Da#ODRtI=dh!yM%}J|(FfoQbkjZ4OMQJ9p3c@bO!JAH2Hj#LfbD;x6}90E z2I|?SjvBa8h=|O5n2(psCHG5P3mOkMv`ZRWVv~3=575<#Pt-I`z1%nvkv9P^s_VAh z-`^wRwyvet)N$A@BKESr8@CZ(MFm6b#90o3HaZ?SSZ{c3|6M7eK+T2+ORuDEpTXp9 z?fbW=C&xKJdCOiJw;C1jXf(u_!%!Z_fSn^OZb(E@<(10cwGVZ&j`6LnhbRNP9N*Ed zQLx>px~{Ch`N}wx@iQ@)wVu2;zTbEa;t1pZH|sUd0EIg6L|0!LQ?Wg)gOPKtRS;Wh zWN06V1X44XJZ0OU_v=ej9_=vgv6FE(#8)k;s4bzTCcyP-JTYY~v zAvxt)uogt9s;ERrfSHJyv+3LWH|4x0rD8?5EfZD~EEUY4f)!9jKnCzwTw81Hm)D}Q z0bU=yCb!ugVDIV+W|p!`zm{bdlD2OK1%RowH|Y{a&2TTDRMlF2J{f@x1<~;WLnAX# zF=S+5CPp9(29A|=hn7Kz} zWL9N$_cQ<=IM^ULyTr)6t#J3>^L<5jmctdy>K2jJ z05$|th>nbKH@8ENPgOsCd3kw$`Cw+E+BIjR^sQ3*L7Q^UoCrifdxvF1>@FMjK)aud zqJjufxR-OTs~|wm*=bw+1c8ByB0?1b5$Fy0I8Sw1OIeIyT}#fI(v%ZFygBT4GZEh3 z-F^1iXQfsGNQqHZRKR4OlbID2FfGd^rL^DAQ%;(D^b5Lo_c2eC5J5CSw<-w)j5EFY z?D6^i)A^fc7BB?&c=+r0GSgZLuNt-tEDcsuFJZdPS5Y3OReX%EK-&#MwEBEJnz$-4KeTMyZbly z_xIB@A(8gH>CwF+A{gdV|C^tF>0}h+wHm3I-<1hPBq+oOdawJk7xKlvCo1 z$x`caT~@7-ay9cFgUnM^A=h^xaL)>go#?@&y$mg znF$#H&gbRj<%L=yska#(VZraj6JPJ!>m6b@UyHpuT6+E_Ocdy%tD*lLo*OMyhyZ!h zybPWlwGI2q*!Tm(w&68CNc+O@#BqEE=*rL&*W6H#UOEKmNk!gT0F)7#IHlwztqcv5 zLG1&8ZAMhp2n;p?4RwxDFtTCT*AKG&+YcI%0zOwb7koILzxu_`|8st`?qt?F-RD?G4-)sI@(S*LmCy|>tDs@kNyAp z)cCV(C!+VIKtwmt!(8_qdH}G+@;f{==wsR25TGP7WeOlBth1rBs$iJW7MZZ?D=Pg?r{D{Ln&(n>S0)B2G-e z2?10Z>(ka>JwjyI>-*e;8l#tKAjS^WG6Ix#-Co1XLaFDCwr(xgx{8qkZ45iZtW_e% zsK&8DpUj)h7t0)qIYy42pf$?7zGKY1@xdmMi71Nh{nmj420VQuAo}ieRjm|Ik8d6x9{%wk z|MSm&_V2y_uxd>?*;1<5lzO)x=9Gwga2Qar^`mR+Xl5X4v}G#?Xl`cS%UDDMBPL4I zgv)XkDbTqN(N=$t0EqPTas)tAJ)U3g?&fKlOj^_-pvjoz^Z6VlJpR0m=C9jc&}{+{ z@y^lOd$z=%d_f%}@P2 zS9=!l<#L&)o%e5v=K=uVey7vv@$oTWAnnaIyt~~lYGNYxX^7S8|NPzW zR8@NpoacXe0#Qh+-EK$3?CsZ42@}AGswJ} zEC#|U&HJb0>3m*Jm-TeHtVNtFhFEG@%!HT{Ap%ILb53`=!<&aUwaPqCW~w60Elh}r zo>M8JA3nT4olfWVjASB`GS9T5T7XGaRFyHQY0ij-bu9ouiA5yXWSKJ&`9!3YuunS^ zscm!X#}g5y*6Hq0O3^Agr7A*+OD!J37SqeRIL)IOs#wnHumAeT@7}$8d3l*QA>rX} zU+PK(j5f`4T`MztRg7!Ql+rv+5b4z&&TC`15uP{yWx(JIAe2zRfKAjm(P!WP{MR2| zR9ZL|)C9~kAzrDxF6zx-Xp)X2<;!qWFB&y9K+K$`X+kvuoTh|CqI#*NGz4Ce2?!c{ z1EQitNhhJ=(9tO-v9KyPA>aAoJ%ct`3l=xPf9yxAA_ z!Kf*B52;JkZT=fJjp&cR(j_v7(ww=|hNhGr9v(!*`KGRB&&=6E-TIy9IYRqhDv^kL zBy#7i2bl?-viN)s^@tdoyP=P$`^th^Qu+$toPuG*9ymDFLYI@v?sX z;aejsWUGLg0FnTx0y85KAOrcKHt#Ft&WsHu6-R1Y|FLc4h$E9>)=C_V!eLM@pUs-i0FR2p&0U_-^%-6{Nn$_uYY}^Li$p3R)7_?GNM37Cka)rkYArV zhjAl72(U2>*d`dS&G_p;`|CY$vrISheDho(YGMX%P@qU$3#c1<@uHvH0d~F;S#gNI zYh#QL6^s7*3$Yn)t`?gX0C4ELLmzX*;wJzAYQ(s`Oad(8&Od2AtkreOm1f!SjqlFJ zef^B_Abk%1$mHC-{xC3#eP5tY0W)jW5U&V48mueEB$ozct;8ANIro!b3;5gEXD zBjQ?H?X!r*3aWX*b&3f$EI;|lkN)ZB|Mkl+fBC=suYaqC^PJ{+;>*g`a6?3#rin7e z$O)8)vpA2g5k;S( zX!7QqZq$3ZcQR@E zzm1>7kbKf^43tqR^e@{uyy55D1djKOJs+bQrzHjulZr5Q$-vi75%(JBd0Yq>^aVy= zvaLq)im^HtE>5NARul5+be`uqF6dxfbTC_%<$ONBdGn@aM)zVpe-m-UmiO23%{WAe z8|k(mioVch16hiPOmfb>8Ic$Eva0a}AqNhJLzrdIJkloKy&sw<1yt)3OH9+Y*bZ6qndd7R7KmhRQg{iy26jjLEO> zD$*5&84z)!O26{Q+O8jwkyx@&HxY|!xPRw3Ysyir>PEHX!`9k(RBBP8L};~EKp;vg z;5j?Blv*q1%t$j~PT5S|ZED~P@*+Z%+Eym4CX0ZkQ~63`2Du5={kO2@B;Cwp0|MuG|WmztiIOnWZ^PB+yiPfCF z08>iKvZRy{8AKs9Ym*bHscTe1rUA8S^=m|>R;Sl&2M3uk)mkT-tjf#t^Rg~T#3`ke zyhW;*UDm}^#XMxF3dWp>$U~ATB~Vc~?`t$DdE!&_O zFxHw7j?xAIJjIEb87b$4DhZHNLPTb&BB#rFtpxxK!3dd?yY%AqQi!Wm6G=n_%18>} zlTTiiZ=j;JRt5qBATmM*C}vMjPhY?P#yiw2G{g9CIJ|xP)^p(9xKD*6@X^0*JxP#!+0y&&dI@VPONPh2GO_JmdBXIJmI~ ztb;PCyORj$Eq1!6VAg11w#1?kGToH25Y&;OA7VM=cC%`{#(7lMHoye5$;=otcFfLD zmSypHIWYQ4<(yM@sG(B_aPNaO&-3|wPAToC$yw1NvL2W6kd+f|dcGbHcn}O^)^Twi zvP!$|(?0XU-GOCh5p%`>LIeW>NW}Bu{;=CIph~%vTB;l`=jY4O5-Db7^vZUVN(O|< zSGh@MBp4{;qmVY#ck|BDRt?q`!t)O@)>>bVPwP@ImrFM_5rO=Nu*G+~CHFDtWVDgu z&G@zNdc|6gGaOddwzF;9C-Fni!ckTCD4VG{KystMKVE-4k~hyXesXIr4q4=3fQ~;O z&yk-U?RivU}~zSgzU|h)O!XafPvXIBL;xjO?^Z&#h`N? zAmcbeX07rA0L(y?B(c~F+o~_q^Epk4p!~Dy5#S7@sK!KqWY$8zL_|F;hRFr{bq#wD z*4|9W%_rkLkN+9|=61m$rhBt(?Ap<|TBZRs+guX>yqdgQEPLDoA04y*D+6sKe8=XY z0olCWLj4t}i$BCTGdItLU77k9xRWK4!zI)b$Rg7sG7kb64OkejP|f|eb{DAxGj{>9J6zLZXDRw*_ck>se#MYFe7SpyC2=A zZb=7@=Cg~?D4=-AWb}xZngV(Vq`OGk(1EKX6R)&;^tM`0mLBH0KiiKd;m*z z_*JXb8MEK97es7eX!CmmA~Z8q;3kNv2NTFKyPo^$`%`39Oh&DsPY11l3B+ubuP5@9H zPGwe61yfKkV`AWxcY9qH#cE~>me3L*0jgoGdcLe_O1s0|dOj0n5k*Q>#0yx~WkujO z50BWrP?u{EY`FwP0Ex_ya%SeTRx`^}^VSftinwu4J!Vi!6;TJHeZ^HFCC)jC2pX9x z5+&lys9o4GbCH@5{OHkjZc!ZVA{7xq5s5F$+WNmE9#5zH`+Fx6MItrJ(=<)9qaogR zqKbOFBqcPosx_x1RXDMMYOPU0!oB@yJKdKH07TXNXfcOErNsX8lyj+S-D>yA@zUL; z3Nu%OOva1|iXha|R$NaQz@{O1Xv-d&4~M!82;Zi;H@7OYfnVB6oB)9E%I*)%Cj(^% zQUhRO^1F4jHKYz@X|_cU;1wVUgSz$q3^aDszHqH3%}lMTRbo)B1PC4jr)GG!n)n+Ys8sl@pMs+Nt+_G_$J3v%>O}o}W+7H+pw>S4BmZoO3%% zh(r|Gsocq<9c`RHw+NbOhd(w+cmy0YHhFUR{_G*#8#YNF+u_(ri51GI;n*rH}*QecQ0@?XoH(;4aO(dEW2$yWLJr8dop2PMW?MMD23EJRP4;#}llT7zqqj zI3-alYefPhQv_f#5i?{?9#+&&9$IUiQ&u2EAV9YaJ%)!V0TX97@CGPgEzyBIz%cEm z-IV9MnJ(v4XHGotc0A>r(=_eA`s!b0k-K@fN-ZL#$~4Ue@O*qZ91jyG(E?~WPi8o! ziIJANsu~d&6%hdhpj6Z{kTWw>kP51Rm$FzB*IvNBsVhYC|0IBlYJ@-i^e>lX{q3?y zRhX!PC?GI@{+HkX)i>Yjss;vx-oc1HPQac{Aw&q`w^1};U_?{|F#$q$wPB)$0FaP? z!Ay3$=`a7{FYXVAr{915_3wYr2}R`Pc&@by7#fI?0TQA1Yp59@Nfk9iAc2->R#k;Y6?J+!zPy~A@KIH#lmWmY(YJ3O-o1NwcX#Kw zTb?F|o4GT;Yj+b7xuu7Lb-Udimn|qYx}6{uz_FaxP6S(2KAE*NO1`dmPym7!E9xI? zy48BzVl*v6=Y}N^1CWhBv_0J5zY`5<_SX#+;>imVK*a|f%c*%G&d>$3Fr zed(57E677=3fP^6_CHtjX689n0H!JxfQWfwo@O#NGg+&wE%VV0>1ql9huz*q1Q8u} z2i!Zi3?M;N$i02b`~AMIvfm%lG%MgzYE?j@YL%cso{^$M;KTsH35f_fd2O8I z5=6uvDKufEyZMg1lf1%iHy`$QJH&NaKD?aI>uOAei1rUvrKkWvsgkFx3aUyhh-eB( z6nWrfZ2&ZNBh#H$-_M?8>dHN=Wd&QxNF*gbm`n&Z3SD;;cg+* z_2z`ZG6w)e!l5SDu2IzZH?Dw)BF$m%cHOl(;8f@_A&qfH0r>H*=8F%7;Eati~%d_ zC1FO>ioXLnuZ7Ec1UR7;w2B}=YrCR}C({9g88M<4^HVF43DG3bP~h(bqgy7ahiwKJ zDTGzLZ-WLHT`gyeLh|fe=*7KTbu~0bbRYw5fi!J-tPP(A80#;GL5}84j4Ey&;gE66 z;}^!yA#AWM0S-NW?!Pf~#2kYaEyxhy3TC-NOJS(JAOL3c$`w!W^Zi_FskK7ydTnNY zXBwhA-T4|fzmE6X*3QVM&Sg6QC{T}2bT{Hpc>Sr(mk=rCOi-j#%P}+IM&5)eNv+6) zswt(El6BJpoRAJMrR2dVpKQ<4;!dY!W}XdKo$#xxu0$*<%#D4YdO@+7F%udD(Ioet zhW@f^emd*EJq{_BvAKNNF#Nwi(MNseN-Es0|4;}wp8r_Jne5p1X~5Y z|24e*2H&&|3R`v_D2Q1Kp<`xdi4*kxKW&85)FTEh;mCDmL=Qxi2qKR}wR)fH%jM!Z zI}Ql?R$13o1-u&0pYe5kFSY@6fM#Upq28Qinzm^PX%b~Av9E4)ReTcbLd;f*v$Gr7 ze!o{$Ga-T>{_uxC|M`FYvmeNhe*6UjAkdWNRqC=Vsuet82f%BSL4yxl+Jc)h(Ufwn z&4$KSZ=TG+wE#jvy}k`}(;-GKLkIA2Yl#*Btfl_jS6@B8`-!UV_xniACTfb+8(I1% zW4F+FcBYWOEy1t{&)X_^%;@RqX}8;X(WnohM>U+dpn0%uC#xL}2mh0*BC|yiJz-R7 z`Rz`p6A^h1g+E%LCoU*_=hRvsA0Ms9_G8ujS1&IwkB^Uz_;>TVjg2}LfR9i*{w3G# zR?KW&SLagP@Ar{a>g{e)Z%T#(4JdcwRAxRNkN$qY-;0R1t*f=}_j`Y=Xr3@`Kfmma z%{1=+o1feqgz;-}aA43qaq)QA@tUJtx;b&<7_8%oujN~eXB2nP6E|)K7XL;tvmChrFsKrdzrkmh`Ou@<_&)q zzj*AihU5BZ27qK7ch?~? zU#>?Y*DYMg8U!GCP%rP{!>gn@<=rr*X2Wogphkig+JbTVSML-Rh0aGes zMJgfEGDv>q|mI1jQr`tyO+!9NlvPuL_jDEz_@$+aQya(40WyCGdvW5nwL%{O6bil z9A5X9W*rOxG*t$qmL*Mylv4ijkAC#`fB*OMG{66!zx{`Q_=j5SvaY38=X5p%P-=Nj z?J`JaL{v>t*w9^ZGy{WH%54a4EUCky&9p`^+;YAE5+}1_7T$R4ZPkPcAQ7$WdOn}O z`R1En{_>ZIcz1XA`1ttv_;@%R=KU_`>?QCi=aeRwa(=r2(|Nk;(-4&((o#eKkr0r~ zKs>5y~3k z%n0ysICw6$XXp5f8F#xK8ZFCmx}5#WiJ1~x_wOQW!AVYItzD?Pmf7ug*sF<6E$57; zwN~}E3SbQWRpG?bG#z?<#<47C)r+Z`l`4X^bPlL0#?2o$aXTk54n%odB3n0rsn_*4 z@opPspZ3D@2!ayP;c(y{>`@iO1klu3Z3u5em_}?Uw$S+RM_=(nyS6rOz81P{+!C>e z3BA{}OS86Du{X%}CI{H7e>QV;W9t7%1Etq5`wrUrwyRrv!RtBt=6<+%S;~mGH(>7taJXaF9<^Q!$2E=pp9LL8503?Uw z+7=D+`tJRx_UviuRGIzUU2!0cll-yyx&0)<2>_4~)r{~Xv-AgEe-s$qhFI2`sI?qz zlit&#h$!cDxmlDwhkcy?pPq!{9%8t zO++}mmY-1OoKoRVFlyaW53~^gm~s(u)gIg*jg~GCW$eDPttiHu7YQOTZ?G44rbw^j z?uf}&SQ?#tp_g_-JO8)sdctbKfwfaR8-R8ArVee98C&atN;Gre)Z<F=*CUDaFVT5qfdxR)zqI2uNrqM7*4fbao4C9k(k0 z)EE(7wQ6SAcre*IKu(A$Wi5BqB`fOSMbdo&`Z3(WZh z=1A5StwfYlR#h*X^^DPgOJY`IQHVgq91Te+rJTa)Eo;F}T-$_0&m({i4nnWq^|c;Z z6ur7%Rf9P(L`v)jU+xW-1z46P=QPi=gDlYX({8tWJ{_g=vT-MG@~L?9=8X<*rkXtM z8?2P#BFN{NIJ^8oM8|Nu|9}iw>uT2c^3^c-0sNY;1=Og;U;haQG&UXw29<+D*7i8~ z*ZLJZn27xq-yFwAotZae!Z^+mZX53vSFpiY8HY5EXZ#Zpftn2Mp~h>zzSMZH5nPVT zhDZr5GY%VGy~5TX)pmR{2Hc+)y%3>~WELQVdsFZR%o_9O(reOf!;hg*Xdl`B=M3AgM<3`NwFrVvRFLU#d74|Z^bzO6s zOK)cFk8wN1hs55*)A5OR_uN$_HZK)J$d~R5^ebJNQW(A zPfsskC?dhzg^2DAo=zu3EY*QgjHWv{kbTGD((4)&fY#;78iM2d#Z*<-!V`n2C8#Pn zXQ@IdS=EQ#n= zfMlGIp%a>G1Mam8;Sp`=pSTlFUi#vHG|#OP~c_X2=*t@l%e9~4xX(ZCQBk{NL| zyO^#9>$((`_viDa)TOM*M9iiNM7ulzAsS>(JmJIs&JRN3G-XBv)fyx8RJ(P(h}Ng4 zrw`B1Vp>fAloA0G5dm3|3J8io%>IaVFo{DJVNWxM0iX%->rL1d%#XaPFs1gVCdr-A z%z)DIvKBQ3n)e3)Ivy{l)6qkkaj;0K?4w$^3+-EYooNpl85HK2X^{3n0@ zyMMu#-+h}1RFuHHh#S>f+FBFw;5dLHMB}yw5FijBdX*EWobwNV{Fgub+0W*Aetv%b zfB*ZJ$MYqnWJuNdyb!!z5D}{?8Y%z+Dx$Vd9{_^YR0+s{5DgJ?YV`%zD%j0hKdt1c ztl}-!+JOCZWXb@5zyv5-5^- zS}V*4Km)f_5pk`>W%#RMpy9^wD4>v}vM@9ys02jRwz z)*2^_yROG5u69xEu8)F=<9AZ$MvsLXw_mTY=63$>gz|od5~K{bhBjRFkWBb=I4CvK)rs1n-8rcAvaGK z@535|YuVVo)7J)J`>msMH?n<{-i>wx5fF%gS`q!$fyT^S>Y6p8ryCLNK=~+jZ#F+6 zjd%aZT)`j*`c~{J|Bt`^Ffck~{JLZZAtVoj1Hk2SnWo9Xi=rjXO^bxNkFBhLydjdQ z4hg5t{TRVM6>%>4kpa4?CBG~fCD!U6C^jFU4bO()q;=xa5uuB_BVz6Eb!b>WDmLqg zr}b{ykxiqjo*KPjUauNABcg$OdL|;2dxTH~iFl~6>t!Yc0ESRiqAQdQ-Z*w_H#E9$ zGPi5<08PdgiJdCfU3X#No(SKgomJhA?zr8%MPiYE0WE+4h#Z!Q83HsA+{c!9-rY^k zs4XJQS$hM7QMe~GWK;oEBO)~gQ8GyLggy6Xx0`y(eRIE|0lp2qGqe5fpglh#PD5A> zqcdjB@@w=3fsn@0bq~2S({0Mh9gYk6eTj)VlRYCHg zKZ*zfcwo`_t)E zO5sjWh(kEnOraaojuFHaC~f?MIcMp%rkT0;qs~9u(w(}S9Xp3Q0f;AT9*@VI)A4xR z@Aq-Cq;-!GGxb&&KCV&Q7p zux)m~XBMyPiXzLpIDRzdnHomdUT_`&H)80z*W4(|LM*_wjvW6KqB6?oM|~g9I4W8j zmgB}txj8s6B=n8OL5vf}RDwatjrh@x9Y6zh>?ncbu#Y3Zd3@>F)A1djEBu(r0z*XP zqb79-Tf9zE7^PfD@)(SNpNMXnLA}1tM`tx=An>60ygd%IgqOYvBW#{6P{_EP=rHu=a*gTFfI!>y+BRuy? zc~!l?zlUxfgeM&B=KQj?_g754+wT}V@ouZJhT7l}Ys z-K_<0V}tBj8=v02$w~>JE=5(bSYkx6vMz|=H@&P2?)HrWu2+P(6472A5;JVJNpjya zp=5m_%o&Yf3f=7w>w7W)`k32ph&J?4L=Y4aMOD>^6Pk&t5vnQ!JH$+LqLdH;5vM$* zc|uBtqKb=Zk+mXTq`p5so$GojrJB@QiyBdqTA9+6=G{D>&&NDXOz`ILki6LuQ56AH zB=VMqKrRXK`T6;H{BS;>tBNAzX~L9>0Dy^AGm@%^s32yh2x^)X6C!tlQFEIaK!?_0 zV6FNr=VVqu4PDJmSyb0jh{y&f#3iWb7C)a(r{l#7)4qBC^x^5H&8;bjEw!YS-rV2s z4|jKW_q)U0x?U1eA`WF2s~M&gBF^*dJ3Qq?M4a2Lt5g9nuv%6d=&JwlOH~u%_a8q2 zf`9q?tK+)zJPD})rbGUBKl;IXx!BVM#60`bwhmyepE5#Yn%e+3GbBY%Bvi}9#9T`G z-k<;ZPygzR$H&Lh>Gb87Uw--PUloAkH|`%GBcBB=&R07@gZ7E-A&Wmw{M{eA};H? zlvM#%gsO_1(mbo_WnINI=R}y?5+EWYbb(-IsOSTOA>7;gi4mEKn9lROlvPYQC;!uE zcpQ&MUwSY3Ld59nn^H2>%Vq5r-AAOyjWs(i$JJiy-;cZB?6L9t(2cs$svP&Bvr>4j zW$S}(hTZl6yc*SL9*pl_-}L4+?&oHi4_gk0hxHMLq9i0V1#ng%V8=$AsA~82Knpc$ zRH>$bEd|zR%glhuwFkT+-yqE9a<>V??PxpK4GbPSTt$2l04Vi@>kfAyN=yAm0|GNJ z6aZ5-Kyxn=34=qqLrDP5kJ#2XK+@rpkN89uAdKFoUXI@hv+Wk;9o8sJmto019s#<( z`_=8nt%BYEy4f)CryGwW1~YCa9K5jC7l{oS%`L6RjobgQagK&6F|*VeEDi@{kWvz<*nm^z#HzJ(C7bUV0Q8ivS_=_zPRL{(6ZA)1*VPl*!b_1M zMHD(l06mPRs+>?&s4GV^k27GnPuN93qz<_w#GUS~Er!8OI)inzZdgAX>wGs{!_ngF zwi`V3W`&;eW<7Z={QuCkHsrNYudvhJ1U?{3%YPy_@Ki5t36YgMhz`w0eSFfmyb zM9jo$)l7+lAJ%g-b66N{ezrDEEt+J5)zarAIPcodrN$Gw<)Z7rhv++PoDJ)EDE4HH zSac#XL!!ih(=?U3YzVa|0vOr5Pu_m|>AT_%-kD?mVL7Sm!*?(K<$Z4Q46Db0{45@ecL=-pt&#qkvgC zMS5N6cyHe{S0AQ>Ek&W1E^J?OGZ7?6>nm2X>41ucS73KcAZ~2Yw>Iu5 zfBclY4KS*IRqzhdH*+|?Myn_mLI?f0sjBV@I!~FZ0)k1I=P72u%cvbA@KqQ@_RXoOPm-D%-y4yRy>CNfD9vumJ5=Rf3!rHRhifNhVG+|z)8Y&>9t z0C?tL@=!2<8yle)B4E&`F1d}iEDI>sD&F}I45fPRd8^>5)yr{cSxzb8@#Q3j%o7n3 zXUf@=DT#5pl-+K+oAcu*?;al?Rkf;Jjwdrg;=D_~FfKQ$Dk1j;Z5iU7=BNWes+5?R zN!2iVH2)FrrL8ppRNd3`y*Ka9%Vqic-+;w=MGI)25NBRV6Cs)hZ=ydgnW$r>&g|r( z4As_6F7(8>o!j zb4=#6%uY0H4s1C7>dkp-DbR5--y)*AUM}n9a(sGXPO3u8hr{91&pvze_U+x_ZZ~n7 zP!%{OA~X{KA*f2pJf%w<89~Nu0G_VZENa`ViyNZ_2OBkXH*KW}S2jt=UVVkMzP{ji zm(ZkR{!0AZQwL~3E)cO%YV`kydKTWa?W9(?x(#b6);!p$K$h$j`L}$ zweFcRCsmzORs^fUiHokK*8Q6|yLnzx(>5kOK$?cG;%K_p<<=UG+Z zif6VduW*g6w_kP<5gnP#%*#;Btd#Qn{9J4O@sEF;8%E#uOew|n?B#NS!ESU{C)~HN zh+Kh$ka1lzS`MK~;wJ#xhKWb8o`Dz^-S`E>RtT@EK%0f;{)(#}U)*uS0Cdv%zDI3< zx5D1Lk%Tq~8N^=I-mJjetO)QxD*&K4_eEwRKL>$|kAZ~V1jIeLx ztCYTvP488<$M}WepGbdFQ5hwq3&X~RdHvD>= zNx$6)zr<5uukO{lxr#AwW<~}UdEy2dJ^k7dhClK32Y}J-_^BEosDgkP3`JNy4ZgWL z1Du>wQV~(bO@d&=jbX5lN7u{Ym9bTBDa8nZTYQz#RdOJHLOi)S7p znx@m~6rD*+DOJG0%QlOuiWm`e2X*U%=}l>)#-E7Ra!EXmj{u+nrid26trJTZKuz-n zvm0E8(R@3^Npl;$|J)*VW%PJM{Kd+y>l!i74r&+-R#zNO>1>#)3P3LKcDr3x_O8cq zO_9n#|M5Tm?C1aG%U}HRU(pl+t#OvKsv@z-N=}~dX0Vv4I^!)7IX|_}fGTJ&8Q|o7 ziLv1YD*coZBGu}hj*=?m9H-Km$B}YE;$|*jgA04Bt7es^l-z;|6b2C^5IyRfMuw>k zk6>mSGHpdfv_!qRV>fPwy7fauh~PLgk zt|HaDKf5{Wi|dDOtfh^H*JIM6r=6Bk5>jH8wQ#^224s*@Udj?(T;|bkB(Ns)qlIu5n30(ZGb*Lj`La|UlR$7Ac>D9bIj^9uKj zZ-$~8uNFX(y-FY*VYrZ)+-b$*SL3~6lZ@sF^(2Cu!AG7T4zDnO+i5j>Z2-k({Y@l^ z<24F4rnJQ4j~7S8-pd4$DRPJaAP9QKML|Ss?UKWAM?^rRvDkK01UJ@9XrJ+un7tUG znR$HC=_wFl-tEjQE14ZV>^NF0a-ZjU<9yi6om5KUPW#|MXYg$LZa<&TIcJa1eEaRU zpM3Jk>3o9TBOZDbP(+r~dA{5GxpsWhfmBACro1c*G2)O=XM8J?0@=tY?*4FA|UaBSYuh z08&G?sH&@e=~WBO z#LcL6ncr7jS`!**-M2U;6G7yMY2vC{R!%5ds{pD28UR+cTB`scr)o-R0%&ZBam?e? zpw|@pH`J(if^dUjumOBCZ$`_=)SPoR1E;C-ulM)RdN;YSw2ix6RZq8er#Acr}BY=ojZ=Xm=L}Gzhy^7ww{s;gK z7`bZQ(fqyp$5Pf0>#@p;oQzQoKKa3Czh6rEa7waSBG@C%ObliKnvl?wq{uSTlrjS( zLQtWU_lLW``@6sU(NBJii2wXQ{^kGrzyH(I%ge*V!(adH-y9BypZ$mb@K68rPv`Sl zJrdSI7Rm_#YDfRAH%k<6l>h*sL?oWdiC{e~OB)O-oY{MS5Etc*^Z)=L07*naRH7J= zZ8ajk5dyFo)n)53Wol-`oZY=LGcTTX?3LJwKtVxPH8aANDW5Vy6#%HUd???Zjz>2{ z**n@POmo^#(~th_d!N01m>8KUaROjKQs82sJQ)D;5O5vL>Ct(C!Il^m7WOhY=mx;( z#Es_1Xl#rZ8Gkz(C-GbBA-(wRs9s@E@gpV`DN*qq3JQL2E5SsG$1M1ncQFi)m8vR$ znY1hx_twCyIz@GA5$QHd*f1mYnWpJ-xs1t4&|_wfFuZ;Hw$|!&t1$Rwu|TDiZ@>K(J2jRYQn4S# zZE!1Fu1w!69=Xwc9p%`t&2D$sXo*2*GBPtx9bALX{e|rPh%i>%Z>^1I&x?^qbvbI! z_%H_S@?adyM<1U+krAMQ7zBt0jK~I#72X7EJ&{Ebyc45()g}QncgNI}`uF2ZwE=%D zba8X)$3H>WbkpgHKQMW&J%;#q2!*D`u z9cbgX5b%!2vI)IIt(uxzV=EY7neSM;ZGJ{m{|4F`2S3c=t($Wr*>0Rf->c}%L0~=0 z*#H}pfI)-5nvymnY;AuCj9js%<`8?0l8As2bT(UWS=~p~JlS!CI&h4Rk1#3@vF%_Y zHFj{{{S1hR&Vk$V>aH~BpY-~prSv^eFNT1Z%VkQFyF<*p_9|NJ8Er0-B5*y19jxbU z`oRm9KpZlXeD?>IN<_ev`jm+XwCQd;HRo*75Pf$)qSSXhDmO^{xYs#&Ouz!7b)pmh zD{m3PYf|mbQ>3qQj+%QCuDDhr0s%8abqmzAmv? z#uAP5RO|Sps2oIhyCd^(-1Q|`L!LcLnt6O?Qt z4jWRL1_A1RqYOk&Fo4BXg%Q$~a_aF$LIB$Bc3Rg_HVsx?llbE_h7$GmxQ=&=h+1`M zFY^@rOq_wp*Y5uQ-sf#y7w@~Gs_VL(PUpkn(127?5%I!XUq$OZ-?W#~dqtri9~xd} zR!VW+D83?JYX{Ir;^4^XbbifW zYpdhIU%OjzO$VxAQ0Fm$rrT7E#|n``o?*jDvC}wgvMxeLP7b9#$$}zI16TH9Goa=?spvfKnE8A@tJaj>df|mzJD%C?gZD;cp+o&HeyB?+j*moR2cMRlb1CA# z-S798wf6psISEogd73p53mvTrLjg!gX$MDdluJ zMGfz`%@C1>09&XP>ao?hnhr_6JS3RgU|skOpHEB5TgFpsn$ac6cpO5NSg$q7Iita- zD6!SAtU2!-|1V%tA}Qr*VkE6HXWmV_oak;hgJJE!1TvW@5iO-4 z^67N>_S^U8^GQKkOK2q8kZ3o6Rl%FvJDSkWNJ26~GT;t|hLz%bQehKi03g-Os)+37 zIp;ZZLPSce>&lE)>bg`!oTmBBn>S{5K3~?gF!L^FQ!J&i0Pptm!^6Xyw{LUK1|m{k zUYR z@5Pjm+2q~fjUk-=$FDMw85lE|K78`{{Qmj$a@Hy{C6FHHxb|rsK|xS5U?iwQNI6l; zvnc-T@BZ$mUwpyy^yRPr`TzMZKmXm=Uq3v){onrg|6@MfE72E!^S8hF)vr&>3INrN z42W0(YpJaVw7bV<-iX4i)y6qN3r66)Y>L7}2H5 z3an}V|5$soW=WFcT+Ek<%v#RY%XH5MfEbX_5CCa1(!^^rnf`ztq@OCiP|w%&z$bt- z6D83IfEaAE^h|e8_t~l{Gu&Md9^n~Pr!mCCEgKs;)P@Qpf@>U43(g%8tNEv(6A_oNMy0()_a}jhv&=c|X^N~4zdv@h%w(1#iTTmx<;C_4H`|;tBb8~MWS*r6AdM@V z4ik_R<%9wzh@3MJ@Q`J)-83ae;E*@Ht>qiTVbF+g=`o{v%$|oWRrTr9 zr(tRI_Ek!WFyGznZf|d675X1yWAr~Cshi`R&0b0Mz*g~_p$LiJeT^2nr!!gzU-ZQn~sxFVn6qrx%Y8S z)*{qmXke;4XW6vaY2ujkMZ)+!!(%j40Sp|oo)iv_F91*Vwd0vt#@wGQICcpiF6D`U zt=~N{9sZ2ZcL1ZyW=8~O&O=_WuBQE7Tg6sD_#%QWDis)IRTu_lCJoe&boy9k?UEYY zmk<$dvXaw6X}nBO6Agq;g0wWlp~h;|3pi?7CvB2}8gWlQ`~AhCm|b#7tDas)V$e@L zw+c89aRmP2YXks@)kOya)lh8ay;jZ4Px~+ovq&O>uD#F6dUMxN);+2iazzibr8%vh zU22(=_Aw$<1V1m9IK@=N%%tRK?Bdl!L-u_|2%r>s@#4kBS?1)MFxQSibIpXRCl@#< zcaLNcqS?rO^SII=P(T8xa#Hj;c%$gWX{wU=PuRTx~b<0 zp1s^W91e~+_)P-hyuZIYKR<_N<3<@iG_HDSY?9WplYB6q^A(6mfG_>=Nhu{BoEi@s zF)MU!;(X5}PM$$L&+{}DXpk#2d+~w8^^x7a#MO=Udcx-gxIP=bO!j0ljgV69i)$-Z+j#9I;<%4f+rU$7_DUhEeQqP0;AF?T>qSIo zXJ`E)Hsh?Wmvxlz%sfrgJkQ(aj9F(;mQuJ`ftB^LD?srvjN=HXPJX&xudo5Q(x_Uk z<4z6qIkumh(#^iAxV(s#Sq!L%s@4cOB6=IkdbS}5^$2P+kL4UKFs`YAA)ttI81A)% zO-;m*0DuW<*CYV((jWr>1T`d1fCH13c`CCe+pIS<+uhyno7XP^`TX)s0Pc48%eiZ> z+@CUEBkmZ4`W!A~0t2Q5;2o}(qY;M`S`xR2ATEi${d}rGEw?}9yeI@Abo{^-$2X}w+}=wX@=xi$zO zQh-^+RoKnVy_8u^5p6Y&3c^gx1O}yusS#0`r&$U(UP=IHWauX)cBvbnxw%YUDgj=D z1_}WC{eC(eWY&2u=jRvWIIh?0)i55W10c+$B&5sB%k^q&X0KnrzP`Rz^&?3sC7py) zPK;;g=j*fWqeqX_Os(AB?%!U&L9}5QQsSpipFVraL^Q54)?NV3x^P?`Fy-tlsD5xN zAsM2n&LR$A*G#b}d^`4IumPpv;G95vjFc!{thP@suBPjkMYMo2=fi%!dhco3O}8)J z5E5JEunLTg$dmAlkQe|F$Y4l$l^D%H?a7lTAAa;v%K3J8|JBzoUc7iQu2vs@_~GT% zm8c@oFpeL8{PAwLySceRH+XVh4a3dtt=ETHYgH$v^IWJB0J;TN^AiveYWz&W49Ur= z7#2O)s$b2}0Ek`Yi--Z5mnoXpRT}~(%3vWZhyjqer~n{&J#5pbk<#w6jy-+VeJiLL zZ#ic%B}G!mBG1k@kBBzAJ(UBg5Yc^+J@Ve*P|7MlAJ4XvH;ZWAu`{Q+UZ%#(w%_mX z@9)E9^T4?`WkoL*tlzDbG>;!YcKV~#dQ`$O5YSX)-AT zhxr{<-b5A6q?YVo7q{!#+dnk+T2NkCOSb5TL@glg<#DQN4J8y21k6~;qx|+E>*{Gi zoc4#@oa-{rbD4=~yV;1U+rZoHmWWgoy7KKhSXC>tpRD_vyL7hMtk$5WCX`cR)_Go~ zApz2~zd!74E{7r_^DKpo60(BjaiEmIGiESHO|Gh`8V>cC$Gj0y)NG}ceBE=-L0{vS zh5125Zh<(M!s?U<=}<%q#|LomUbUFtdOF5fPG+XJS>2 zpv(0QpYbHUR+jf5(*oZ0v15z6AHy<-9e8)LAHvFt{PTKcXLEMJm_<;8DQI$(+;%cH z|I~Smpnex~vg7^JzsSix?~elf`a+c@b$@m0q*r zrcjFrRv8wS&BEaRaIg}GOOnWi8%5>R8`SANf%hb@d9Qr17=D{szAh2gaAYVjI~DEv1-&cYiW7Mq&mr#m2tKT$3zf{irdy zz~bIlYugiJP1FohVuR9RGY%j+lvP#cLWtJE2Tj77st^$v z_1;>4jC(gYz{J{x-07cPQdLpCG&jIzPn;w|LYG1n=zf2jnN$=pNtt|Iix#q4s9ka^wU%W*rG_x9MgXA1qUwp3 zj=5tCx48XOv(h?DEpq}jlS*=A4V!SYY_(ds0>~*%)3nONROWe_#4B^HmIka>D^5v7 zHk(awU*w!UI%-|(Ovh;4uBDa{hK*qm5e>vZ5%Dk`D(j+(l-bD;%wQa|$ShWF?yfhR zO&*6*3XrK7<>ZK8*dg^z)q=~Xk8Qwlp@eohanRMUhnz&R8c;PO46^gn?9N_ILKle% z-yohCV#==!cO~uYv}1_Ko5T9vYepoP8ZQ)MODN9F04$~I8Bzt^{Py+fJpklif*O81 z22xwAa)3&#V`iSGkBBa60PwIoq?E=jJ3*(JAXdLFWhyeuy)`BWZ#_3`x6T$ikK=lt z3v+(^_Kh=_jpL}A{bDnlrZSG>?d|O}P3N2K<=MH2Sdo;5QgoVT0IFUB(|)%rrCeNI z%!d+ZIe)h+ymCKb$gu&E((V*vsHP>-e) zo2Y=A`MJX4)iEY#wj~HrqvH;xvkqW;$ zp&EIXlgvCO1fEMF%Al4hWl9W0$OM3iXPLfy@zpf%hjrSFo84{)YEb4x>1=ye?LflK z=4>^L<1jFi=&VJEK+%+7KTpK0V%N7f-@bZnB8fQ>A|Vg~2ocQlVVbJ&Ev8ZqYN~{s z6C;_^^7L*SqkuY4;`UPMl8(VlRe*SwqCk{WGCJFA&(6*P%uw?{hiMX>R;x90zPY}> zzuOTJB}OC>W6rzXVa%)bdcEFkynO2A%db_{OviD&x;RfMt=5Cjs<$+BaW{(~A+S@Z zyIU|50W;2X@m?J{BWeo=FO(nCkW87C?HP@MK(l5QK)$aq^M@VgdKNwui(_okU9- z_~FIbM~}|VlOhx(@f!bg&J19P&!4}4_UH+(&IVD3MyqPZ#a$PXo12^6Zg+codwYAk z+wHWmGij?Q2*U}P3E=+rZXCxkufG23o6AR6oO5o@i^z;EodOXFn3;EneP~;4+<&1% zT~xM6Tk>ZGl~!+uG?lSrWT%t>&0dMh zt?@-bZwAJeh%@s#k1QkyndfpS^Gsj}_lE-znHv?Dht*1;viX}R5l)jgMKpoZCYhzE zN3|kqMP2GivubFb=iP2cMB}*jWQ)~m?YhgA@?2_}h?!Y2^t5gRP@Cu3LHtIt2cU)x zb0MqQ;NkjNBN!!*wE@;(f&t>v^W((K!*a?ud@<$cZTY`~;0;*vl59Z>0?)qKhCVXh6(?KBlZW+nzA6j@Lt z>T)+?85{_68w(a}g-R)?7KGLgk+@!g<{-iG+V_&{WQ)Z9c8LSW@OiI#L)=JLGaEN) z%SixWas*U&_pJZ)0&^(^5kTl^8R%$zqEypEsfg@SuA!XZ6r$^4^k6SWIz!i&>14Fn z2otoi${r4faW#b8Z&Brn+C(Fx$jNmCbBOltU5O15Rg|EEe%f0vwxDlC9}F`F3~H@D zT~$+B0O$zwB4VNhm1l!Y!2lenn-2Gm_jyi}uWZg4TM#QmC$&85lu|8xP&I?qYOuHW zPCDenriEw#@t88HKLvH)n!jYT02*za>QZk`M5s=1(tKrK@lYP1X1YHdavJ98X3PU~ zMX_T(tvi@Olh+@;)RKk!S@ptjt<7_n3~p{6?c)eQ1+NhsMF|o4DJx~3=NfpA=!)Hn(U&N=a-f`>h?ZMSO~D_CW(dd`p zF!V&S^*{IaSubb$A9}$O*YskokK**#oQU)|!m+WT8vI9WA=tsJC+|gFE!)ZC`aAdU z0*1Jd-7NlRKem%G_fLrn;)@Q^#v_QR=H@W!v@}?c*N?l!P3XAAd_O-i4-enHzYMy= z=u*1RpY?HO=9D*X1d0@g`NnZf*$Fn5G#np>=bJcg#mtV1`k!{Yo#TA~uv)GBuQfRZ zVRm@SiK~VTOamt~E2a*n7(fl|t9ka2p9s(9hUUR~mJk4yQts~V*6X#`lpGER#{`*q z7zWki*ZYz8U`g<(`b&A@Dl8(jCWcoL)a2wWHMb?Aq1AJSn)~B2Cmrk&OKF`_;tp{xe3_UD+);!oJ(<|Vbehu{ zff*2H;@wo#^TnpQSRuf59x^8YkWz@~$)iUGkn`vpOb`(i6O^LGN|~jo-QV22dGkh9 zO(72hm>?5p5)nfXEk(t^N-0{)*GMWW5h+%82$~?xIh%*1P1#+kpy@|2LQyDlndeDF zQXbahCKGSgTQJ)n?zh|R_4W0BzZZk)Af*(b?4>+qR?kRXuh)+sJ-s;J9u9}8%yZEq zxLS?t^?I|}?DqGmF^H)ufH6}kv+u9A0}TLt8=I9HDo(ZM7(mTuM)XOZ-QJbCFyf(1 zW&swsc!lq%g|nJ@f?$>@pN;V0)93rc{XAWR5sh5b&K_OretvOtm#KvUKnR%tYYa`5 zkrML2l!?h9Z$?r3`t_^ZySvrJ8Mzh0e0Fwrb#?Xc|M9C||N7TA*LUCh-uJ%$z3=_> zr$4>EzW(DM|47VpnWt&`$xnW=pAJ9&`OjS`UtT==@sEG}`0?X^|M!3Y)vtb)h)oTR zh)m2r{q)nb_2#qR{QAwS*VTu5z+L0-n~}Y#hrfJv10O^yMT9FGPMx_$*LPR;O2Lne zsZmWpK!IddQ-{DbnVt>lgQr(lBWDv(K~yG^qO*bI)%lb6&OZ9MtTvND&O_uVP(|QO zL{zMlBE^yaVY@k-=UGIE(Q`;kDIU;r>Pc6c+_=|XzI>U-VYAs-tGtN<}OLVJePfi3_Hote>nB@BrrB@o)+q$5#r8_#S>1POf&04j5= zHMu>}&{b>Ud^4+@7(@svQ_V7|4VtuWo5SHSP1E_=nGfaLH*d=8*C`K|mlt^$ObQvW zd0G*U<0|Kzh!f?*G~Mp@MP-(9FfoK_R>(NOJY8i_TV1pbt_6Y=D+Pj6++BkdcPQ@e zTHGO6f#UA&#R@GAS{zF8;_gtK0tqkQn|bg4%8$&M$<4iI@3Z!jqW|Lp&`npCs4Rc> zx1j)OS$(>?jacC8Co=Azj@Vyzz_|}-^CY`M$TY9_CzqF(121|Mz^bk~VN251YPzE! zE(Tvc%xf*3elgtiH^nt6VIJKt6^>w4L|f~Y|XF-D8-J`{2KerZGKvvvu3-{_nGA6 zdq%7k{CsilXIA`VYMky}AYmyT30|TMj`Ogm^ug;}i3F+&V$Q?sfi6c*&+_s=V%1a) z&XXjOiZ|SIdZx1I^84<8iq?^)(w(VzdJ0|gXvX<;naLsEAXgc&v8`_ ze#K`)^w;%te8}?*B+O)*=8YP?AkDf3xVKzXkpfSOz07oFTQ~%qz$sAxpR?XeUz|xP zTe92Wjm+!P@DhFYi65pI`W)KhFcz&MaKKh!PkN6BBzUhy!S_NXQDK6n6zMGV@U(h& zB_RnnhE5;_gZ^9~OeCT*ECO!}jUXA!`5p)3f)*@t^N?!7)A(F+rd&C|inyh zz@1YvO5r0rg*78VLd~gvh%tI+$^ems&ajf@i}^M48wl3N{*AV_&#?rS;N2jMB{}2b zj_(Ixvb?^~quD}3(NiH}+ONg49CA)+nTKw&4P8l8vy%@UkzDmafTm83yv6fHZntY< z&l}~Wg~nz79!LxG|)wv?q75 z5;;b*#f;C+F-_sHYk<|v{=#<_qDDkgp#)&`r#;XeIhNdTP_+B}^xhq6Nx^S&+r6 zKn{;8Xx}_P`WG&q+#<9iUQ?zQ7naLzZv&0mW9YS&%ys8>X+>WQCAYwXN#w6`A+rnU z!>xK%4xXefd%a4|&87lB$NcSo-8UG4rAcWTX3}ccSJx-Cz$DcH+!~#ElS#)tXHnYk zDg@~RjNymXz6VR~BmsulhE5l;wlQIbH>aK`5sQL?oDwfrJ;Umf@J%ZeuCVlv;sgx_ z9d%Dycp#<7obb;~@*1RMkVx`?q;6)lWKSNdnY#}th>g`Y!T4BE%9vcL`K6U;&IdV< z>~_BcRpaF2zCW^5rM27yGc6+q9d5S&x8;YLnM^cBkfTUqSN2E8(F9VnjkUFDE#q%o zcGg^U4D4RghzwaU-Z5c5ZZr#wIUyg1bW-D`k-lxH z>yy@vk9+at-UXrx%w%zzEliH0?D2hyWO;Lr@6W$KL3(m)>lFi;6@xzB-P*Qxb$4H> zMGiRXQmJvS6<0{~Zg~Uk86Q(!+tCe%IgxtB@ISaL2m`aU@*OjUxfz3swb%bSeCffG z=LbxJ59%g|rzN^y9RG|vr!%IdGrKLWj9(ArQKHJC>HJk9N4G?kR~yL@=4Nt}jp|r) z_M6>0ho2{#1^wviet_eL{N2CXCxt!?xd}kUpgwRgK|8VT&?V97^Hxp13Bm zjLOM#*f;8Av>03q7$`ov93r#tqDr{8Fp2v3Vd8GQx$jwGso(Zi@K{yvo&6WnroLIg z303@FeJz<(X4O=6Lre>Ve%qpT-L+G&vlH=*KKaA@m_nr?Zl*oxT*%EJySy_Y+e*av zYAwXiFI2KlV`?Ej^&<^EF)tq*>ukuUMrl9_AAl|f{MQKY6a zU8^?AwsC>~i=|OwbFNWuWo50({QaUlH~|9sOoTT;qm@lY!Ru2`=l!>f)21KoQ4A<# zVJvRk1dm8duCE0Ww`M!G~^ayuH4zy|)lv87@ z?VM1@Ge11pdpXM`GNSrBGVSS~5H{Hq42gfMx>IDh>i0uO?B2Q!#`)AjP8M`9j6%&M zcr@(wW%f~XC~|x3!AYo<39iYR@c49dM++9FD)mvQY+AB+JHoF;cUkg*UERKW_&W#Y znqR!^gRQCKfZCTl2^In+^+R&1WES6RY|x%{Xpmz<12vzoi|i6(k~1JFUzS!q(z6#M zfSNO}FQu3(OTSQj@!!i;?0x3lJnfOYJyy^3; zv{Hp!Wpq4boQ28==Gr-pe0hVj`gRCIpwrB3R-B8K8)(QtXQ36>J2fLz;EIHlbc_pN zGg@|3k_!$7UJ8=}&m%Hn4v7UbPh_x9LCj8%i{Vp|$FQ`o?6T~G(%z-qbGb5Zw(E=h z)7OdCwds!18($C@{UgCnHCB0pB_yY*smY7*eqcv#l@}w7LWcf$vD7QB0V*jl*k?w+ zFh@bv;CnlC9{w$PYf6}pQ`6`NI{&axVJZ8AKTjv@InRP+EZ^kfK^))nR}K9hw&f@C z5iO7=p9XKc-ksXn$0CRo*RP+|ieNT$fIKFkR3_;=7J%%1pHBIe$sBtLLau?v$J;qk z5TDL-&^7Vf5mJ1olhfkki_j9PDF9ThYHF7vkg4%v71Po`X}sLs>46Ky{0YOo6{OxU zy#mZpG#)FP86wp~zg@qI{y39)EB^}VUh-exO;ezb@K~;;*d-h9@FXT~tXM8NEuOzl z3s--=bj~cF%THaUQ3b-l3H*8=-!A;#vJKk~!-g1(zaQZNJscIQtE=@3C-aUOT7w%= zIp-G_o^O%Kup4Hn{efH2xB(u-PufuD?2hZFfv+PeY7IZpdZahTqhbY)xJS4&WG=+JbX9EPEQ5niFvB;=tq@1hU(f1M765=V$Y5aiMt8gd|V$;nLO2(noS z+>$ToZvE-Rg0D5bHMeqb0NbZ`+BD=gHj9(5#3HqnTw{JPw^js?RU?+7Xpqb5e#;j^>vE|btnkuO?TPWH#`=?#= zh6(S;HCfMu5+Db$j|=64ay_!Ti(2}{NGX|fL)px1$BLY zGC?Ov%x`Pwqq9sbbU;nD+T5SzdO8T1*It6r2!pkZ(lT$hdU;NchZ=T<`1jXen0Z<-OoH%U3nP+coOxP-NZ%hyQ6F0^jcSUTj{07cKhJ5D8jC2X!Q!~k z=f^$4odDg+tGtb%y8-HuFU!u7kB4QXoTfqWJyMHNf|*vk>HlWp)7OX(Z^Z*{uJ*?D zn@m04CEj9ba-k3>`_RPG64Z(G#_exf9iqx2yN#m(dQDjpAc~II>oE1niO-Zti2&kC zl!d_@Ilmjnio*BEdVjqTk?Xt>t|L=~J)!;`jFXkP6#~x;>+e3P7uFXByKiPl5%Ohh zV`L>FWv1f*nix!O%n$i(O_Th4{x}QTO|J)XfDpIz{M#N3aPW=BBEtt*LFxEcBt zk&)3eyBP9}00(yMB!h2n1>MYg7jx$2 z{c#H?{4*WtmaoYLBHwKgJh3B1+trG}du@kYXnE?KXPADH0CV1k^DhY_dx%(;ShZN9 zu!*#-Q2r`l>&52KD~lii5Vn$jh{vqOX4RKXZ&o%I0(!uNlVIq>8D*EP7<{@JfSGVr zDO4$+@^mt8;42odJW?*A+aNL&R5}8r2DzQhRTl+YS+Ntcw6o#oDN^B_y0lKwF8Iwo zoL8!#afJlF?jk?~wlKcFjLU-MGzA z7($ELIVol$nhy~gqerXuR1iIn-iZ?r2)3IS^DldpYmn`m^?7KVF49%HaMRrvwxf}u zzbPlQx6iG$WT=;Ns_%p^4#1|wv5)K@{!o@4=WDxK;y^SgB`T=;(EzTVn)=%qjn0N% z>%TY-Ro6wQvH(zm8UGs{YycNGp@mg*yo&j>y|-}Qr=5_G`L~-6I1qc!sJ6Q=^P!__ z7WSif3(7`9SG`o!M-{(wf{Unn-cXob6L*!Rv+ z7Wo0k@g352&P{;(xk%E38^Ueq`N3lZCe;5HbT>B>*59-C9MDsE@XtLPJos{Ky1KW= z09s#L6Xqa#k{m2mU)*vZ(QtTbL4xSo(gqOZ<+9;5n=k8kr&l~R_h>8{Dr_!I^G`eR zn8W zd~;Ai3hjAy!UP*g1hzapwJNFE*@Jq*pgXZ5I`97iNdq^hjaveNn!3fyS*9VV=BDy4 zx(pPbYe-No20g+00X+C{c~@P!(we{og)PU!!wsCi@Ch1PwnNmCEVGpP=qI0Hda?h9NQ&U2rS-kgT{psr)G!RAiR)n zq~27eX_T{Y$&;(57Mq1(Jin@;nE|P9KRw>W?B{zQRFt z@2QT%WV%UhRN$LcP^=#8t6W4^(;ut5YXd!(KVx51FPQ4Rkeh^24j=ZD+C>;$K2cbR^C50;9}s zQBh@hEn8&3Sd*Z5ySA|o4S}6;C4#-P@obw-U7izEn2)x zkr^#=UrX@3G;*;(bFx@GzOWsiEPzK!Eqyc`Uz0z|4S|ARZlhJ*%v|5UWWC&mqWs!0 z+i(F8kRYZ!C;EhH^oji}ZdRxVE>h>sT@m3o$vVOw0dQ>8m0;iPMFQXbHvY%k_R zMAkf#lsI`?o1vkQ+CaV2AH5R&^N-(!cbX(F4tp??tu?-3=`fGvrLrY?BUs?!I!R&q zo4>pS0PM5@L|MO#nL2DFo7X9#tc>el7z7$#73!TnaAwmr<>Y+#eTy}hzx|~;E;pAY z{44h)1QS_dxb;&N@6o%Ii`p*AUM$7V3B4?rU*T)Nru0{rSBZ}|fIxyBgzogu9}078 z`Zv_v4@9-}uX~;fDA#|{bkXdIw%46hGnc#88QwkUbmsa#4~7I=m1g41VU@iC1n^-2 zH^>2XSgL>DrX~-i5G0D;Clz<(JCd^1Gt^qz{(*o808aPDN+BDUZ;sa8LQx#9&{~+EvpSe4 z63R!KLa($cIKLz!Gk01G{YtM@!#Yn-cTGu$0-C%&1^1rE0l<>v`Qq%vz;9!!wyzUB z;T0Yhicw@z&ZHZVe1l2m_7Ps4eHu4-_2y}o6xgJ#>z|lLr=~N4GSE?b42Wt!i$=V# z@lo=F=E(Aj3ju@kJK+#7VS`w(C^o@pMt3^zoDH^AN&06V6mup17KVe&ZXxsSQne;buQxxKBZt@PYIkVK zZ7p*^Yi^_4J1NfOyh%UrY3&TIA!MU=bn1M4d@EkcO(&cb%bCfPD-g+IN{&S$rNmxw z3gD7;Y!J@tJyu7h$hHTuR=Asng)p(_Rq;?^CmluwAbq=WCj@-OSRwVSOfUU8Of+e^ z&%zGoIyg88rY=`Ri&$tN1S0XsV>H$jsKAuJ94$@hTQga7kClB@5B;%i zCo;tpZS{`#=LWgp1sC4q0O3YbPN@CK;6HKl46{}Ir>#~3Zs!mB>phubA~b9Guy@0y z_exdNK`+=^s9paYbltlwx>OYH@ZO3u$VV5zh`srka4d#t2MnS^m}o4g{xwSiq{?)Z zcZ4!|Ca;4+Le#*sZON@ffbG4#3dzNiAg9J+zsTDvRDV}yV(!VEVskkg;|2gXzATW1 zRhHty?II|Esy(XXy1-=7ZOX(16G(*@yRz~$oJ_5KutBIf#;*R_ybzzG2o`LDXq*C0 zk#qddys{bc9kIVB4^Gz)^o8UN>**L#A1?gd=J2uyv1!tI5aS@^SXOX7r0JW}8>f~E zjWOTTWd5YC@A`Hu?7+*Eq;ODl*fCQVOZaK)RS+zr#6 zR%3PZW1@+HcdjPd9UuW^|9@9|t|F^z8^|(BiDwUhUW-DfU{F|iK+pI4ty5i+gYw#0 zu{1Aj_p4LMCc_3ezWJG_>;CBq52+eU6%y`+>jlY&A;Otn7K?8Gz@Bwi&$k_Rq@Vz3 zk#_HNxEs#iRMiVpK2QUMCXYMsej}lc;5KCR8a;-z2L7m!0?c z*yfh3o?I7;*l%W}ZGGqDMe{jkQ^}saB;Z`gum4KCE5>H@lyD8b*}~tKe7>6u!ici8 z@oEXaD7!a%KIYXV*QOBSCZq_fQM5p(W2@zb(5Nw*K|`*0VfgT2gloLW$n*Hi!|hj- zm)$DK;K!SzW{UeK*ziT@Lucsq2GM{ddqT%__Fcm6iet-Fp@Vd3XRtYk25ExgfpF z!PVd9JlcGhj+cQ@gp>?E4n@?qA<36($(JoZ=zZa4h?b6AJb=BOs${?Z!!w5=8WI6+ zx(eZP%wd|HdeZ_*7S(cMRLqfi5W((v)dBU(P}}->cm^SeNe2mKPjBlJ02N#7$)Wj$ z(fq9PyiUV!y#JLmSRMcx8{E`2&X2KJs$aCgtxEqxIys@?Qg~n~GJP#Jjbex9)%aO% zpN|OSYt`iYRMaBOSu#sqinY;VqOMX&q`bd7vqS;l*hkfQ-CwqL&eEdT;=8N)-jYwX zko)lL*JKPWV&oaE0QBhz8hG;zd%1pj*zmi*r|x;#>a9l*G%gVLw>%~X zr*cp+BGCQa;;MlsNT3Z{?_N72L zAU+wKPs8@&&R2ZW^o#SIkFXX@WWiG< zxAnI8ROrkEutDK*l)K4=kO^0T8}60|(vT}{TWi9wi?b+eYmoxSh(WP-2<>mmvxV{)tJM(vmcCMXHKDx(8mJw;V1UOCn{coA~^U4U&bK!GGaljcB;_X z?e&^ca$u)7Z#^v1((+9D=5Ql9$oj@%QP#bRVgfkmUuzQVVUUixd4sOl3-UGq}Nh53%`!5-P zPE{RGn_9E|Nmo?EI`Mqkoa!M@PxL-Y7|8OOK8|az1Zbs}RtqbMo0E z6K?C@9Y`i`)4Vub{LsFi&z`3wL4=xQK32gJZ43{?CY5c!W0XtRaT>gtBGL`GiW6Tj z^D6!MXjWL=L*zsGlH5S%bg!XdHJdBG9|+pmK7w@|4TrLQ%<{|@%1+h%EeU!{1wEZC zsP=&v4ZS<`m>b)G>e3k6h@P$MQ}Wvhq9|Nb`wie3UD*97Iu0qSj<_z)<9DQUJFjjn z3zW#7wB0%Tz8VXKA~r6(G1`8$o19P$qFs(aoi0Kl?)1Q zU0j9`I(*~i8&AqE<1-amaC6FjigVc!um}x$lwE{=Q~o2g2|`|bzA0ri7A>`oDHgyL zKEMsLc`ZO6=|R?!=g~g3liijLA#NH4Z03VAh&I;Odp=%nbCG(TV@B<_&NJ0!lYiX( zph}WhuSKh13T;BG=Jpb(Lv;Yer71jlzQvo}brP9QYr@?_ZKy)*&}&=n%oPO7y)0gO z1B3rgCkDd3JH7gi4c(@$xDx9S0PFH{48{AYE%&8q3`;F8UD`&KNjX%b`C4T{fChi6 zJ@n{Xb!uE5u*H$RNt*zq!a~AQ7%QPV8&Vjwds<3ZtIiCPQWzQ!of?*-jX*A|p)s%Q z>zx{&9QyjY;GQw&XAVc9Y5y6QL^C4 zD|~W-ko%_%GgFhE`{(8Vj?D4)z#xJ<7zppO?J&!?~hZI)R7JDn4P@%g#1==WmuUQK@0%w9ZPn$pbH zUueH79Xay5=NQCSu~{jlan*PHyNnI+ZRaJd6<(^q{BloxUs~U-5;ZDXTy%K(xM-#3 zI10exRLY*@^YFpe|2@* zoME&u$a!O7)v<1;j<%gnFggY>wPej-jz2Pi6ewjM78Ur4UnTFXf>8}+k#oo{yyZ%n`58BQA>wmF-q(|Tk{5~X}X^-V*2I4 z$jDr%{eObreiua1gHCT*c`c9F4t@HxHDEILjTQh1{%K5U0DJ9-EQ3l&*Bg$MI%67X+CwcM_U!sH z#(j+s#T$OAEvie)t7cWWwnGua>l_|}!H$Fk2nHZI!ZZ8Bk&^Fe&<>vqe91f8!3f(> zT`5$HI)-LP#a>Od<42vYpyN!4&zIFH3<%!vz(yB7ud!7Ss!uIV) zIN6~8Prr&&Bq>Y1hJV0(^7OG&U30>v*T9+uG@;Af?J1ZBaHb2ld7t*F=I(ULhTara z2l~6F1-?ebFe+?Clx1ruijbi1Kbmu(69c}$NlOj%pq59(937d^Xfz$`2n*rTK-}L?4H?Mq(2R!couK;dZxeCUaKdo2z#5T$W!Mb5fF#awcr1f=fz zR)(#3DdpdpbX5o5Lhn-lU-MVOtf0g6P}>EN%hm;2ir}ZRtS%P;$^+s%=Kx3PTuc_Z zk}#YlMAoF&VT!a83qBhtZxX#NAWsf8&*&u5yW^E4f6vR&7V06Z6NK63icDprrH_gI zcQ&!lx&uwi>6rA8(smDV7LORCHu^GuT@T-%Pft8+& zF&Xft4MP(7^eX+aBk_&8)Jw}v&kxzs-kZ+?N4V?w@{6jV7`EWrz>OUN|90mS)mY_0H)h*c5D9*s*NjVU)zU`IletNd^Kq^a@3b@=w~ z0uI0MdxBkrzC8U`BzF)+Vpd%;_^uBFF_#VT3%qxGxpV96?9|uS|IbklF*pA4e1)^& z^8|ypPD?x;Z9GrdY$E7eK^`8L35bmQLE(8wkl;1u=g`euV$>G-Dgv73 zq!*$1Z$rN_v0C?*YY}Ry={WY|2Dq6Te(6bZk88jG(k4ej*FuBD49s0%tcwyVpIA4p zK+`-Hj}uk>Wp-6!v&d$>*VDinU{Z$(mM+;G`$!e*&!0dm0pbT zL&bC6Q5pxX8nD{5x%A1&FeOEJFAaa1Q+Ctp{TomR{7CzxllPd}9~kdkLASchcA2 zpbP_~pkit5#v3~N+1XOtwyOu;k)FKw`t-J%?u?C}kRO#L43KN@EBI*IIRSC!&BO5O z{5#>Ol^=AdZ9+o6wdLySdY7|om))wO#kv%nXFiRp3I4K>9F097ebO~QfF0Ls zPl01vrl-oF%}=9Nn%hc_%|(_jk!Q;Y!f1 ztu}FmD0tkx%}8mee;2_19mlWpkPZcF2BIlfpv2QwHNhkvOB^8Xouh8M7=?|#{x@dX z!^O<2dSnqVqy!Dz7_JaC;?6OQlD2S~9FXZm62h0a_GCcZ+HayWjU@$E@MmOq$aZ~S zYdP}Z$t`h!X;QE)P`4XG-ICQ9pOXyze%e5)9%KT%n5$SC`|jx54^Og>9d{Y zdbTm<#muU40f)tZlUlmJMmJ%sIwO|~vyW#nYi4;(v9d65``}2uY9#}z`Y-M1ws+Gr z@DPFi66HGbx9xvY9I(mZ1JKLiR@U}mypYWMNn4f9V-4~Y13DQl+r9ypUp%?aXm>cIH=Yn+nKK&v zJu+-s3{QLXyDqowIMhc7(;XIlR0?DdO!T|0q8oO2sSE0}VEv=ns^9kv9rmzP#pwP9 z(A;=VS-LLB|Gm6~+&91NmIz-?_fmS#|D?AGa_i{qB#k5=o*6-GZ=PLz?*PN|^Ca3l zy!bwI*JT<=51m|BL|7)h6Nm%AdsL!t()dwQkPkpM+WFH`;gxY#jYDWXLW8BlyNXrq z_@T!kOxuGWRjJ|Tr^|rX*AO*rB3%1dXth+~hOiy|{d}wx@d9$}8#fZ7*q`3^RKj3B zO%2|v%SMsaTF!FS*LK32F#78@wj1bF&7fuyr5D-t`xP1o6~%n2)I zpY4LKO2GVSIV5!cD|oJ|vAyIq;lU*yP8B68(%xxv6Szr8y)?=GJiO+{XHCp4wZLPO11-?-VnErnoRDmo`T{);j;G09nWY$qEw{x+Xv%g|rdw?B#* zg=j#4RSxO5^D{G=I-&vbbycxn%XHIVb>c~C2{ppnJK7#f5Brmpw(A=k$+hW1de3&c zx0vye>=JTQ)5bNo4;-_O?N^%7xBEzB?;eN;^SQiUBZUolz9&)^xKN*(FgeyCk%kzo zc><)qgrw^5(~jzVYs!{BV}@YHj7`J^(xYm~Qe8)_=9Q4=WDOUS=Z;v@d=kwjodZ3B zYXFh7=G*D2SZOTu=aJ^aOi1K&s8}RQu|>b9D0+Jf7>ItC$6!0tqay$NI?$NM*n?cD zx?b<&6`tod-6ZjJJX6;?Da^K@M6`?Rs2CrEc}Tyf_E(4Qt4*C=<2#2yDgL(Bm|h*0 zjPIhnz%W(T`S4bq6JF1$`LvwKSFQ!}Ds!Z2lc;R8B`n!MT3U+maNdTpEU~*9!I9in zq0x_@Z`;U!Uf!+FN!+7HH`Es=rr-Q z5f$AAx-%1iq2-oW*mq~~(WCirQ)jXmkBI>;mDxG3A}zx^Wx(NYWI$y;(kn1&U|mm7 zWSc=bM-3|x<_Lo6QH(N{+W?Riw&UF9rGy2gvpFtQa0saBNrPpG=Xal6>mN0U-yNmI z^Ju@``au+K=!XVD2ISp-HDDWLI}pROYjk1c=AXA#D*j<+u9s7?iVFw_U?Pp60$hB( zGv35=nMX5NM%=(h3%--D*K=y5#(A{+UH7dWm<6XT%4WskMtjJp*V%L?Af=|oElI)$ zLSZK_&x=)6ovv%$u-(yFPUy2^SLgj~5&Xs!N;bSj4Zpl767%QTJ9>FeemN>jmhdFf zSHT+b`Yot`G7n!z00Zi78_09>@T=Y3-J6@6al{IfO%j1GuzTp!nmU4qUIaVafU}1c znwaA91U;rv|0nqN4s}Z=cH8I*JUH)xzC1yvXaDMl-nPc#QzQ4Qa#mhe^e8YkFd2-`f6=5I9b-lV_8pPQLF@9Q#*sxYvmp!)%U@UW;m7 zt!TflTUO|AoB6%B&n2ec9#zG=ee`pZR#BgPL1wy^46pRf9gTq*n$jZ~H$Z91L!NYi zPH4|5q#MGVZl!fHeAZ$?W=_a80ZPwKk)zK80IJxf2yB-V2K>-nkN~M`RxWD3vZ#Jn zZSR%qDNzAB0P>W$@*7}3uCQ;UKYqadMM`!e5@wsMOlsk`J)6Q39>uvUT!7O)MdDF z`S>v?y^7l#P4AbK?l1rR&TuA8AOQ7bDQ|_FK@Xsd#H-}I=@thlHc$UNUB3IpV14RU zIO>-$i|u(hJZaWQ_<)jW81Yz$!T0Yu&3@cup9}4Cwb+Y_J9Q9|5xlanJ@LiiQ~A;? zv*H%rw@h<{uJ#xYF(1TR3am^QwySHREtWab6^s2@(l=AjSGP$ZEG1=y%7uE_N>N}k z(_2nwNWc(kGu6t%Bxr_^uMltz~4ynjVe#g)P>7ZkO1ru%?Z~x@>;ZG90hhMPyDd-(7F%+ zV94K)RbcO=C2vFTeok-fIFl{B1)7?J%tOY*6_!oNTXxp;xKlQeSJjE{w))-cWeb)J z^|PqoY?`&Cy?A(bcvB`JC1r~)Uu{7om9)!t@l?-n)B~v5>iDNz`RO|ipR-vbNfUt# zKG%L+y?2q{0miQ&Cj)C9fZhG~-QwQ%x>X{|7$un%~!@D#vqW4-f_prlDN z^%8_XWEz*nYLl(;NQJ>iL`kPc=b{xSJ4)!%^3w72sxy)augq^PUuibL9?#Ih`a5A3 zT0^^918!%P;W7@kQQW9ahFy9rM1{7Z@x&8^4xpi7#E`dKNoea}-E zS60#IU5bZbok>`Xg+YVfTf4Wzm(R~Z?S^vP-*i6D8rW3Zr}7Ky>2wk6`n*vv6Rlp( zT^Fej_MrZ5>)^qS!SW`xCD;D--_8V^Q~Tuoir?ifv)?)pV zw8u#F3w0cF)ExMgDopy-KoLZZ~M z-LCcBbMKA7v^FVWq_7-L4vxFKyL=4Uyf%uao@gbp+E<;41D{M5X{Y>TEniM-$-H1f zua8iSZj8GA8jkv(G@tm^3GQ-OXkTlF4-uA<#UOOFxC5JOMg2++BMm18F;1 zO{T`q0&a~Qq4#GAp-=lq|B7=S`!q14nmxnAbGS?S+zb=L&<_mB^?3y4~?Jayv>`PA;gpRwR^}R`f~{9M_$QkjdK; zax>Cz-g2o7&%H@ACxdx%u(vitSG z>FXeqY(zpk;zFXKZMwVfmV3E5nnf_`zu)&g`CY6}?%bq7AIwsYvY^j<2%$yj9TcX! zaX(!sj>t9%@$m5>F+w0-| zL#`tb%;q=$cGo7N0Z14q*^6vn?Yx@OZs@;%kV*;@>Iu0N1(aDE(RT)Milha)KM=S3 zxw5qQO_GvH0?>SSsB`{>=F6ef3#i6Qnlq(mantadwW5yL4h~`}U|=ZtT~M!!oZ;gm z9sb?j?^|C-y5|f<1Zw|Gn)8Xo;sTmC(i@`E+g2;8_^9sNNvno9Iup`gb-y4Y(ko{$ zsH@mtE2umTn)C7#Ou;p=4yC1Wag<~;b~s#hk46r{Kmu?~UIcU2oyc=)pc$!|QqWaM zpM^J1HALlN1YI|_x?CRlW8FNfVtF)8!0Rd7w;gzwANKPGw}A-E$dn84lvF_bVm zwm;b$*F<@Erwv_%FCB}+H0=UdiNbNZD>Gu3fnjGD{70C-KN2mFU5nmL1Rd-HFBk8i zXZSDLMRyHN8`cXBN%~r*S|q?~Uw@=`UT>*gcy*N*>nZ52TEC=zDiC(7;y@>$EH4mo zmPA)HGI&vw*MAaOti< zWMc5J?lTk8b|Mj-WXJ)A+;GzFCx7YgpNw8(zc_#hvwLzIPl7_k7(@YR_Qg@}(Ljef(;2VN+v2@QPI0yAojc@iL^<2bny7lN zcDU9{7mTYH14w@gmVIW8evN-D@~NM}PU%(Hl3#J{qp7pQPH{JeL@jppWJ&Yg$FPVk zHNfCtWizzX&)fUv@m9o5pmw_r7ZF=xJ0|v&(}3K+58-*|UtpY|YItk%sVKm-v$1AC z%Rrr&HxT~(4~8L#l^Pe>M!U;ZEAxCm%jb_n4D_hvidFuq?BYdI$xVvu-nD5Ii9^@mW z)5&8)6GX#rwrkFKzPTeWo+$GgHRy@opD{XaX*Mn2Uy5GIj0{Fs)B0*GGq%s__Zifs zJcMQiPaCH<+~?j{cMEKL25TR_o=LVUBjJ&~eXyyMl$G$qld~syxr4;JML!JPHdx1? zJGK80O=lStW#e}7r8^dBY3YUqq;nBOy1QArOFE^cmF`|zx=~tMx|Nm=>3Z+yo%w%Z zhM8SHFbmgxo$H+6F=QUQt+b84s%}@hGhbJzF#Nl)% zFu?lkm}JFZ;7O}V!Il2Vc?~{yH-&%GpA)A1cJNiNy-4TB8yIU0c3c*1A^Hp-IP*|U zPU5M*F>?ZYF88v!n4dRf?$^ZyUlq?6_475)ZdV|D<{%(cxu*}Po*uS;;H{?*A|nmxh4bZ_{nw)ZX5omBCBsq3iia*GbgHg%JDgOY%&JfM&`yv`bb2PKB0 zp`qcU3< zT*ib2L@-auXyy6N=mP6-`l|P}Ci@TU1#uLv{DTI^j@EiTfKl}$D#mfqc(+LqeK6QC z_N&UtDv*U*S{biw7>(VK@H>AXsWmZ)4=VwusCn}^y=#aQRhZBxs7llrHjeU67o#04 zI9}nP)~gY+HZL9QVj&KdV!M>(;3KusEvr|8hR4A#W3mYpOIo`ReKnC7P>{l_$du-` zACFf?M`J6;8G>EYS`YDk2;K*9m2NRd$RUe*>`3PuUJwC2ZZg!udEXT8L3NE;{ zWvi9J9-`oNNBff!&lorrE3k%w5HK5e-{0@kz71sVR8sF!PFzkW0N~l?;ZS=9f!+k7 zqOO}EHn@R>4#|Au1_*s~0h2c9biGSO;>iPo``--Q3wqu|!=rixF74D2e}L^8nA2^p zTZ8`%+Q*AgKuB)Szh4I~0h7*aZ2`brYYqeNYG2w7*-zHnF7L-jfxtNYVBj8pOnLCr zv0k^+|L$U;=lN=B=?*}L-28X8m<+nu0-Tw^Z0-&?H!OYJJvs)?9>9-#N_#mpSr0l( zOjkZ#6&Do0|E~iD&;-ifDmxqFWJOYUzT~}}_87AhM{r|*GA-71<)i-o{6LV`)Fnz!ua)f7alUD66LBGB7#V}LT#1Ew|R5Vuhsd5!rj(9nWfLhy{!jd)b%VgNS-t>Py;@)WOFXJx+g*{SUVL3m1@v zr^?i!W1!E3ZcDBqpSwqsBM-kIT(FWz>#KH+p(e0T6?z8ER95>C+swi-8yFFczWHb)VT4E=>``AKlt4empx^94%j#)#JlrT1_HDJotB;#h%mb~d`!A^=@Du3 z@z}clD+jnu&N}j@%xxFR>i6Eg)OUXXos}UKY5!O@K2vqI%BDP>caKk1WOfor*UMEH zvSyuyFkH+~VQVJXy+kQ18*tGXz7n-?>%(wB5IjR{QNLap_`ShGSM6>No8Z|`G@O8- zL5MFYJ1NwGdL)nmWk}}dw|PE`6tAJ-f^4CQoy2&K;1MrV-S7DVMN~M53NB)DP#ei$ zC&6&LX~rou{_k~hZTT3CbQmqTLRDgRu&uecpTSQ=+=(=m9?s&G$?gJ5EIwSGcKSbW zznj7=gQHRvemQL>NBllbFCz0L!b^Kql`)(&XTHLb{6lIkQxFFHv#vx$6bayv8iy%An%0)!2l8Il!>*nLr0=7N)t`4k`#FYxxB` znCWdiAiDYR=YL3khl!Eschv22eorgQLAAHQog4)!^h;Jevb|m3mt-Y@qZX@s6bb!s z(o?NAVfRWNHs7KtT%s`DC#fv_XMO#TBa89&RcEdIk)E8E+p&iw4A)E$UQQJ5SjIU) zT8?2KZ}Kpq#A1}4^QQ1^#`!D|2`-*P+iH!TPXtEpgY+$>XxN;Ez?h*tj7+EU%Lfw3 zy8}J!$)P%3c6_x`jswM(?cQd(u>vwsFH|%WXJV1fU{{2$ba`UEV1;mPk$lPiI9kv{ zMjFSHTd|{u^tDQGwMLQ@`i?8B9_*`?@V88fjy}@Xw(>?QKOv|Pkb^r@n%|<93Kw3;`cc@V%;z= zCpCij=m<;|Y)J)Rt0l8nT^WK}HCUZ+VJGyaDv>?^t-;UTr@+(1+j;lXAE$paigSzp zn1#`RuGVHbk~P$C*F+D|z+#~U+rD1H4GZyGMNEky`68?3S5R= zXhSf;j$`nIEuWh}x)(I9FiD%S+%9AQvr*01{TTm_RjERziwEwu?}OkIq);XA%lke^q4m z%Kv54&7N0a!(w56FerLQ|4~mSSHUl@alfOR$xXZR+rNhgv~<=md_;W4@=`U#dTeCO zOu>@W{{Fh+2k> z1^uN5C|`}G9AYN8x9+N6F1TL4=~p{#bh+gSmte*mNg;NVvsZJ88`#D%BO zAOeT%8{&&SL0e~a)<45iyfH2%pZkA{tcr;Vu4cIzAJw*Z1;~rxqa)I|4h;b-|I5VP(r6l>_c9^Se@Y%v zfKmxWx}brIZEVp#+ZvZ=V)a-&FEyzXWoLoGWl$ng$EG~FxZ(UQ%iYNAm?-{8O$s#7 z@6SmF@7XkB7OD23gt!CK=TaLS<40#_XBQX0SXiczL7beNfJjkWQv+lr4Hn>hN*X#M zTjTRr{1x$et}FCT)}URAeBpZjsYCYe7*KwP_eNlN1`ppkHWIhw)GtY6LJ&G17_#}t z+>h2PYUKN_b#qBT3N zJAc-*_C#I@qo%VvB@P=$&5o@07?XQ)Hv4YGQkyoAp2Q`y+ z9aRVnO||$R+AbfidrogtSn=^0%go<^sx15a-&rOPJ#`Iq-JImD_YC4KsggEz7anAkyM@pQ!sas0@wr zBaV&K$LWM_&V8-1#cWz0&u?1QwKwytER(MNem#gK6g_IXZsGntZEjNpUfgj0q5Knp z{$=^0a)Vc-4TI%5S9{Q$Ik9fedwUz?E>|fbJdf+CL{m-;#9;d@QPe@J#~))y#U7rf zuIy4>GJ1&gNIZ~NeeFNHr#?}D^50mpG7ET9f;^1gRydTpei3FuR^u*XWT4CcIi!PC zQ;+C^n`2}3a!!Z}aqk?o43vgq2#h}B7|ZG)(!vXAxYYx* zFyJCwM`PaMA zhvuUC4LY3#UPtzPXK|n*u_sRl&UKb0iuiD0cbf&zXQCY5LW9O;-H%_-HUCN(HDYc$ z!@@01`?$l`KVI&B-f*;A9`A7Q`%)>76Y;wEptRkv*}9pFVScs&pQv)`5u4LsUCjz) zFeLD{Go#*q^C$jq$vp!yd$gH&4lfVCe{j2PSJThrW-0a?;w^K%i`n<<8=Z5Bt!t_u zv~nhyHBB5=C`Bsf=;tu=%IG{8HNUI}f?pSj&KFWzcf31ZZGO>K8Iis@8Ot*Mu!}RW z&WPHKwd|@s=kS#P0{JT4Fg;_I&#I^r@^5Y1HkXsT)Mew;wZ6p#)zlV@GW>aq$w;Vn1a#4mQ21u1^5<5_Jfj<7sG*u;zzGQ8HBVC1s5d zvfXEp*~7H`;)K6yGA3e+yfZDWITXfQuCUX*_)7PsbW%6Cfah`+-{ZE(x~)>I)xH2b zLvI48l?mAJ(@z<#%3y$TA^jT?vRKP5GLz-C%2Wg;J#TNUqVcUNW{D)_@*J(bgS?Z;+>ur2tk3dKe5YkZl`D$9Javw-J1rwHx7U>3PO7Mg8WqlB)sPI zvsz>M8@x3RVk~nwi=&g0nUS$9y_O2pv?6DI%wd`<-6wfW)nS51Mbbtut+GVm2@-(V zKn`Lj#=;~1VHjW~)KOspt!ruFgLvNG-cMuR4#tR7V$aTmXAo6l+z&y7GgYBU4Af?Q z6p_7(#mP8F`6f9>)OjY^J>)e2^cnXwS3KxC^qqYCgG}{zM1pbG`{LB@`-93;|I?1Q z&N;y9_ySZ*sdNWiU$^W%jL!XMTK^MC?PYYc1l)(O=5*F=lG<$I3`I({5x&O8UXH`u z-Q3(fJot8Kway0iyfRA%%o)en^hcpjdD<)k#_UvzQC61S`D;L6RJ z2(Pe69w?h9H;8R|55kU4PpPS>zMe|+3vstGXiScK&xVH6H@iI5`-B1 zy4MuFM2_k0U}fd#6*+!2aWfVvFOlV^T|^o*qvoI9 z8#}{|GDKjR-<;qiYZsBbZ|=6zIBQD+(BHk~B5_fRCF*RuKVw!u^EO;~lt+1e#zX`s z^%_ox3L-gnV`@-|a{KuEA5~^YMcH&214s&=j?f0c*XF!&?<`6=P8pLbocD1-0b~Gv zZMV;2U>5s?0#dr5&i~rIxNU1?b?uMweJtczJDF%Is$f7Rx^7rf=wS77D{RM(i$R(y z!i-c-4U7adxnP@yAGq?K)zHct9w^v+?ez{e@!&Y5Td#lmlatbmyW!LUnm4pu@#%0a z$N(cFP>wYa$!HBYGNF*0SXeupJByZgky<0aPj^H4r3OJjfiqt0}q6mEYhGxW0lD`4VHf0t!mC0u=oQ0WR9EYpgUIN6wKH2JjlUrj&;em2YZ zAxVm1)kYQl^hxgo7Cw&zk!rkdhHgWjla!rTCfw_2+7_5_Y9$sX3K(8$$&q0&qI#yn zRE01?Z+P`Qw8en!YjzC^Tg>8*&RS6D$6HE-azQ4#5huA^c5X1_>>p+x4#czyqL)D7 z@Jj`L___sNhHW#I*Rm_Ub~cqCb6i7Aw5cBc4jLnm4E^nuJ8T(Ij-0*e3Js4IVOtW0 z^hV-82)t`0>P8(_Li%h*DoQ!|^4d0GoPN?|yKVYRV2cVwXKZAI5d8WEcX8kc2XQQo zdL1ey=V10%VO|NAzMmu`JdsHiXme@L)&CV} zN&zvd*0VoHanE7?I_|vIPkBn2YH1>RZuir`!)`XERss1ZVsM7rcCC+|k{Tflwrg1m z!bf@NRtZ?F0ALR8k>P?wC4W2*3B%!Z-(d`_vkVZ!+P6SOK%ZbV`c0035&S1RE-g<( z%$~7XFfY(s{72~H@)0Li-Tt~8|E_I{9NnfK+XPy~{JuQfUSm#@S|<&!P3YnmDYH?h zMOS6`byh*4{DysE8b>21)v-zRDXOthkLf4Gm8XuPq)nquLDF&g2p~;+NmrPDGxKlhelP8nvPLdaJZb1k;Q8@` z>E{AwCWUB$*H;>zZR}4o9q}6aB~Xxnl8gcyM6Z@BdKilZO0#!lbpiSf7`;?R#w0ugwlA)_=3`nexy=ClIyQ+nn~S67QjUt&J9e@U{a*9DCk3jgk^W*U%Q59Kj} zhI7xL+%Ebzh_rQ_x(-o_%5Q1r)q6{SkkQgG8@VkqaGdd7t`B&`6<^N2G@sUb61_YQ zXCL_eIwP{iU^^RORxwFluC2B8g44<=E(QakydvGqN+v9V8Z$&{?{>8_0KfVK#kv)san!09FL+3 zkR0{bZym7BX0PVJNYLRwn+SfOMD(U`+AnvgS@sMv{y1nSK|;dlZ_8Z$M#67JgUUA^ zo9j-s-tCiNrOPQ|;))=}NS{?|`|DRT7CJT%3_>aAn61JX>(#cQ@Ka8iS1sR@@o5zI zWCY{Yaa3n84g zB~NcVOfHDADnul(0@^-4!S(a}e|}I9=`(K|7AhiSXg1_5>P7>*aqd(q$Adr7EdImy z7N)83c;!mBy&O}gi}*rCzZ|&f@*UHS$W}^PC7d<9`tD;>(98D3?p#Vs-qlV2Tm$^b8$B=gfcER02cGVW!~?#~Q@_6$nQjw?v4enLU^V@2cjVM6+c>)m$ajxa8?>wgQgYtoHd9$ynO+%_O0JQiQOsZN z&s-*5?LNNk%PR)Q$2eR2WTirT|DjiQM@EK#T^HE5OH%`{maKs@1rWNt+l=Kh&g<%0 ztqOYFqNYAR4Z2>k27aLT$?6@TZvVH01LwTwvq*`~_SQ$>#kpdB+IZb=bf*rNg;V&# zDH9jfeLLe?`k}!UAm$5{i-X;qK0my&Kp}KehIeoHx2oN_1)Q1tuBFaL1$Fm!>=kdc zsS%4Z?_A$QO-qofV%ilj`ipl%CZ;to#qmLQ=(@kjVdUQ$x0u_u=(VvluxD585TS0q zip}w4{QxM5S#O;c4r~N;oPcY4YrDQo7-@u|QCglO!kfBpYw4gbs|D|R zH79@`$&0~x-KqH~9qsR+;6m1}e>t&4(PI;%rs0bvv+m~R?|zzRzRhw?|Hhi$GN;9? zgoQnfIKt1irvvd^#P=VH(U_?Z7%~ijwVXVD3$$vMl}X&xJH8TGNr_VRE=61xX}ob5 zzqk(dau8|Oe%!rhJL**SQzF%05Ae2@cRd#=9l#XUyPYa1-fwPM%fw&H%oC7hpXitu zv$d}68Z=X={<6f=Y{%g&Tc9}Ctd{DP7eUzskzKHUU7u=bD%-x98iIP`{4{eNaeTWX z!9TO(a2Z7dT0bqzcEkWK9uySEYu)ZQfc9<)=%+j4F8bB2A85AX>RvyAWwumM-fit= zL$vEySd$D8zLefBH!S*ZMa$E{l$W<1q>Ef)sm=8z-!k3*DQwL_cty@_WevRlp3quR zx5PDrZCtll)kWLCU}?pcp(2T3$fkD$VL6P0(|&_Z^1Zh>_(LDF)@O!jrU=voZ|u7$ zy>I0mmj&Hw>Z8mQ7ePzb&(06?!monr|wJTJIGM-+mb~*(s zfb`+(-z13-)DW*nuCf#ZCELYieq6adAs+g+)X}goW+4j_dtvIEz^l zTb5I?S)uCLT1oOouKi!5h?}yc&|Q|W6pa?D7wkz2Kq`@DE{_Z}S+YC$E*}S06jU8s znwA{y14~t|ka;4*A9Lw82MrfIb9oNjVkJSlWZy#SQU!e$=E@Rvws)3yM#eg|VmGp} ze~A9dbk;&R5z1@i=f~%1uh;Rs!6j-hQntAEdiFJX8sw@CBFWrBs`YsT7UqS}cRm}& zp_`=)lOaVJ*5LGesSf0PS4D!J468hBo_8NVFOSeWl9UAGESBjWV!qrZnT*b*=m9jW}FbF$>+4f|7E) z%93?-;IKOUe_VhaffdpTCf#G<$1pc26`eDcQ5dOmKl(L-MjSi97f(W>LzkI^tT~=s z2IS_8P|>Z`5$l9fl(p&vswCOVJclv(>v0@^Ia@=PqwM%TMN69fu0{0{me@W zDrr;AgE7>v$nU`da7D*vK`Mjlqy^v%3X&br`t+6`@V+TgXy zDR*MbSb_STX=grdx?PP+&q_FYopG%@=N~bsA?FQr+vWu*P~uQ59d2ATD5(ML0ZgojwH!o_ zqfxfvv}4xwI}5skF$OP>{;~Mj7+ss#g`vHtQOlA;oiyTFXazzU(9_ZY&+9=)?W(&6h%-^Y+yT=Q zxcSz?C7#a{I%)vLU`OI-no}jbeQfk9}X8;;4kYWfA z@N8`*NO%#6#cvG^phPjMtbvBp-MkAQN@`SMKt^1U)#5{LEc z_INx3joTa;e@=dIWylZDi7MyF(*d!+$aJ?xqAkGXMNIElC41JE926yqUrdYZ^u_uJ z(Wdiep4br&y6C08b?==?UH8R6m^u{3Ak3TB5LK{~U(dOlx5p_L9QEmU<=;4D?QbGR zpU9mkJN|GCk~O-&MD5YKDf}i}gl-G1eg9bqr`oFJ+C*y~LoQY5R}PQSeH z46V)WSrl3Bx%y4Tr6Y+B3ywK~#3%!wX6wE1bU`aES_>J-sH$=csaJ>HVy82yQ8f$7 z=LSW2SnezabiGCi8pmwwzS`KZ{o%bl6|q7#AuWX@wW8(fP(#&-xNTZdQ|q#vDTna) z%y9YfKPR4%P!FJagAP?!zWzT$+~Zv=z<;e?5c(?Ov?AX16ac=uEl9+lP|xJXNL3_9 z-t$~4RD-__v7;gRgS=Sy>D(dz;<$1e!nl`B;V@)se?Z~)93BneXP-sBQs){7T#Lm`1%fb zDl*$M2|DrQvA1^H+sOGo@5*CaY!c@$3n0hYR3i`eHf*EnLD7ipdZm1Myt$qcq6LBdWHU?f+)1&Y&)+@4ThUcwwmQTmhh9J+=;a$`QA=}quVSQ;izqx zP;r{CG0qL8>)F$y)1OJl>8;I_>3rZ#8QL?t2Q${V$l2iRqg4Z*kBmQI(RbV1gNF_7 z8frN@J##csHs4jdi`X*}Ijc$~>nq{4AE3(ZM+@F_%aZ-uEK z@1lm+H7Jh^{&yW0_4C$8z;k(vOZN~Px7E6z=6b7!Q%urIG2Nkl+kSfjKtEOtPJ~E` z`*?HTqm37Ye$Jy&(%@f&;W|nji`(4{$E#nBF5fD!-%JE-Mpt{SwFx%58vd0Z@3dU# zT@9|xr+ePfQ^o#QSy?&jy$&6XB&}#IpsT|PFnI%6PWtL)UK`YiVQz+EZq9_d`Ra6? zIiz|-j@^e-do;VY7HbYY(kU{kzMj=9(8ienH;ey7Z-XfTQq5IMT$#*H4Kidm;e%dK z>NK>8lb z(=Dg3EiOTAFMOU|wB*U&9Ii&c;d4_@fT7kDO)MHg z?UiZp0sXB*GkK9qm^R{}bjh0j-MiU-deSFFWV9|(+Ip(L5z(@r67dz>tQ0V2@p*Mm z+L3AG1(ddm(RHy+&t~y1unlPu=@Sm~6_@ZcM3d6+lR5|pvG)tcgvR~~#q1n&&L7$i z8jjWPxD@`EE_u|R3=Dn1$5u#3Cu6Q{CJAax z6$T?TkuO_H*YKsH+l*@Afmq)mJINF9m@W&sKH?t<3&^Au>682r3i~m}LZLTO&#-3B zf=LmajskUjSiHA*{xGguNt*G=#wUVZu)4)r*tEE)D-6(o#f1EFv^sXo>su%$IQxUE zw!P;bh#$YB*pfy7xoL-&{WBnlbiV|&TmaAZTU%SPv9Tsk2RiGQ!ip%;$t)ccot>SJ zcauTuo@+1)^!(EY=k7o#l*Ns=3kT3mCe$}!ftsAt9wPFfHu5DNIL zK{bAPU>6hRK%Q_ze7e@<*{hHVHvQ>S-6$$5c7GzSd^v94pKUGv5&G%83 zCixv$$aLN7@mLfjX~;+ymH+#h#)I;KrOuF(Y^g5%qbwuzVh0r(uC9#>`b0TAra994 zt?F7QcEG&TFzDfdiRtEqvm>AvnL+KHCnUQk5aL)<>dFgA$q@emf@%?o9(EdG**`aw zbl54sS1e@w6d)u);sJ0GalogdV-xh5G8#y5TEo+b{s{mSyp+vh+)m7<>4Xp!^->WckRouc6@NslApznd-VnpQqm7P zyB@#GBB`a4xHsDH+<01Nn%P;7qwWz0$N+hZJ!u}Bc@nsB+PpYOApDd@`7E=wl6X=m z7FM7XLuqsd*2Qf2m7CX5FBw)Ze&S+m^iG;A*--bO|&wlrzedp2*V{Xvx;{&Wh3~$$t?ga4wr=W8tob9 z>BAyis!MD;kmWhuEQMvqh|j+cpaR+ zNio1r1JU9uGkKMI#X#H^W^nC*Y(Qk&QGEqa+U16Qx;a20d#$ESkVI5BD ze)HBzd_QKrp(P!{IyIm#whdITiVQw(2{O7Nk+-KR@^! zP!P2!88vpa^J=SWV4!iP2NG{S99#(JfxwdxW`94?@p!Uq7q@?+q$6P1<+MI-{}dIq zoyx~xz6%W1zveL(+AV7mg*S8g%xD`0*sD)xg#{@umX!(@C=I>KE?ZMPG((yAF5MJhvPfOM z2SP0!D3yZN&Z?!x6mRD z158ACh!^~=tB(;Vjmd^w8`_Q@P~3ker;Rc|_Sk1qHRQ&yqksf&Hl%DD1Fq~77Zptk zX23#-DQ~Fef%F=tpOVbaWmpY9iKOAGbE^=k{Z{LH0+hP+F(!_6dL_OcCEZ=lR zBiK#M?DmgeK7MLNHE8|qg!59zNjPHiVW2a=N{!V;AG5On4s?ZCPY-&atd*7#2 zr8$N`nq1&30&L11fl}F>>T~R|Bd`D=#aHyu?c9gtQHzXp{E-Sy_`0biA`(5h`;tgS ze;0j8vFi0~;qGW9D*`#K4;1LFP4)ZQ;33d21}5l_@=10GM{VBs8|PI@p#`T!Wrlo| zrR8a-wSuh`B3b-|4yNNQk}d(g8JZ37a+(xSRC*pevhoCD>AWWvKT*@RWvdZ^%IcQ7 zu7NT$5!dz5x5$u;2Ad5oP0yb*hYc;6O+~mkxYyc>4!@6Y6%_~7xJ#b;`kum&cu)%a z_ak#sZcjOMa;GwVlpj22TTe+q@uEO^Zx)fH6gu`U1+&ta&3c70hI+{=3(Fi`a?}`~ z5I-D|;3Fc?PmHSdyPr-dwn`fdB7+3BVEz1Nb;!d{f35vBDwG~HE>tqh^M;(|v7WAF z*8-;bu<%LAn8Oho&-T1p7<>&9e5ZqLbA~i4T*xWCQloT`i|(iN(Up11ixa_ zqbf7@#JD~i{1b@xp)i#QmGbk^{@}A5_1?g=&0udFGiz}9&Kdn%@viDJi^%Y8J-%?{ zfmC(mH&DiFy(Y|mx1rHw1p3verZCBTayZvu1evPXLvZ4-f;}%HAFDB|uoOKKB5NuV zxfD@!PnXYS9MPa--SLIP+g`nA;b>>@7AtdFRy@3_ zYgybH;PD!ZuK&Ott+?geux{CAn5P2IaMaY2L_k4MhidXMAhU>OB7^K=8m-)$1>GL; zL(|*^PTh@NENKz{4F;5GOU0UKFeZNJ!7L=_2+xVgJ{IZ-qx-bBvr>IXtnc?h_o@e9 z&GIaT1e^o{yAx-9Km)OC<11{iX-di}8gJe`Kb#f;#GOf?Q^dSL$(=}TyY17{Cu}RYX?G1BzS6&o~Bnw`XV;3Sq zX1S1oEOKqa`O}#&tr5OcNQWhK}kaW2Y>0yN9g%Jd*NONm!qiI zFAVr#HJO}6!ce&`HPoRUqb%4k8!_&3McY=>ZJimv#Lv-skJ=>5V_6N)m4f;0jKNqxSuh zZ`C@PFc_h2E~Hno2Itxbwod01Olk7fzfzMe#4N+rY}YT%SD6RqV`(M`xs&LRNRJAb zAXuih2u1xaS^7(}=TYcJOzm8bY z5t{W~BH^K`rmwuxlg6TXlcH|Fl?OZ1N7VbA^xw4l*cC*z8iDDcewgZ}nicTZm-T}4 zm%etzy9ll3#jF!9M%})&mv{cxg=z=yV@av9XJJn7eOsa|Ib8(mgJA*-OKZsT&6Eb5 zmXdZ};ah{jicP9K4L_alx7p0U-#}V^iMCD#Xo0 zMLi09+Dx|c-AX=Oq|)#vpUhN)+xJ{V_7#Bcq*UG>%j+qP^_ z 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�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 l|Vdh&JXp9K1sx!~5@k z{$9o?y7Y6m9XSQ3Ed+pz(C=xWIt-AA&pfe2#B7(q7>-&`#Q7xpn?bBQM69(fo#qj| zMTEDOO@TuM5oAFEgCG-Ax`tbO_pPt-f)TXuW0#?ehyXepm)&;+TzWK;sag>+wXCzq zuSCSy@g)JNv^Z%xbAH?`^?9?zH4J)lOkZGA@9FR7M1(LS-Jd#3Jv!80Ug`EV&^EeAlh%VrwPxrs=v9&urv7i%Z2EH5uFA3l6wmm$ug zB;whSRHIkKP?mvx7A?jAMw5e_;qFZBWG%C*`k-25a64OE`wqZ{p;q^ZNPo=WRQ;aMq&6gy*K8@%Z@2 z!hZ}3YO%G}S{9{8OFHsgBmeE&H=;s>VD9hl$t2AlvMG0{+FM|yF?oM~m$K-Pci?Y$ zC+>cKf6wMi=UUfwJ)KUEkB=nSib!G^t+jPspP!#OD@tKbqOEJ8NZf1+&gXNjl{yRw ze9V5W`&G?dT3wk`{?ig-D%I>BJk7$jeZ!PeN{ggJ!>C_k7>e`&#u@&qzb+%$;1jOb zojJNqBYWoV(t9lgUEk>DD~j}TC{A6j2u#4@?7h(@N9&U(-L;^TK=am-dZJH}!2OMZ z)#+K1q(9r<^h(G7k^APf%Uq2{-eivCkNnqtFiqKN`Kmp_Fzk`HO)?ITxxc?()>TBd z%O$s0THW{e_xt;MG{0OfvaSX@P^=R;UoMBk;pMsaViFM_)I47C{{A>;j4sh)a=D-Cti{A0HnNhl7Vl@0SV$+}qaL;c$S5 zdh0uOL}ho^&~UOp06<|>Nm4OD569#3-de+2%y&<4Prs#3X#Zt+S$aA!hI^x0Xe}te z)oA2>pSxUKwKkb1*pBTEEHb7rO!nk)nf#)Db2(Lns+Xc7vXnxd)`->w^>SI4yTjp* zj=bz?rbQMuUO#WIA`%X><>RM^!_j(In?!>{JTN$+ z5fFDWLy?qC^q7YLqQJo9gK z@3Y!p7K=;LfKT95#Hbv~lc!3Cs#2(`y3=LigK!_r<8#w-ck8MnJJag8uBuA6?fr5J z$GWawE3eXOs7Q;7Oys)rMQgFTV?ErsCET~RBX_(?k}JcVb*82rm(0D%%(ktSQn*1N zbXm&gn}qg+R;>ax>k*j`Y&t_SqU78r>Tvr-1Ondh&AStk2CvizHhuc^(ae7O>8JH@ zyu6=9y3c>PKt=m%)tOj$#t>aA zOO6eNtDgRVnZaAP&m-7LAA>t7U-e$@MQ$AS#?JWelRo4GTwwnH{H>mei%}DdfmFuT z>(1Nrk)x0V4SHxmMhg$_=}100VYTb4?{jVZ2YLlAU9q>dmN_{97QJwOx4^^n&x>eU z@>lT1{1)=a7M{K1k(wlWr9U%UjQrv}Am5LE|Dr%Aklmy5w>2Da^?g)Tl{PH0ZMHY) zVj%6YS4J1C5uqL-5&>@*WqC33H$?o+p&raGkSoe4q4)cV2&e?KvfLhsAPg#*FuQtKVy`Wpp;T;S0|Xa zy_|49(I3){hzUZSX6F?RXP#j)5`7u@$MA+#ON>Z^B=#Zpcx51NmP+1FM3|`8w#C*r z<4%E$1P<~fiNL0D89t%_z5QM!Oc02XJfBz2JVZBp%zU}|PkH40Ec0fW$Ly=lovEkU z6S^4(Oj!2(3M5hH5D%YMdU7|?QV6~B{j@!GB_iMs6oKX#6b1rAd8@TnlO^36hQ5h2 z5+xzx$wWFqGz>Q4wr%VOlJR^-xbHFJ!3jn2U{VXstPTS5@pyds z`i+cLk>0X{5aB%A&5Tu<3H|$^JYxcV=y8h3>2x9uYTo~Ju'BpE8PKi)QRC?R?C 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�R)Feo#b z2;6z#7jP`4n>&@yqCNJWR(H;;u?M}d|M}e+8_ZYv;;#52DRSFK4mR*$tom7R4=cz| zR&V-}J2rw7Cf0Dgy}ZR&taCXqg>Sbv3ZRW-{b8? zM6kJgO3VWwb8@;+AMV~sWm5ak{!B7w^*4EH55NJ0)EqfM{8NJ zgsFu(rZ*#ES**2=C9P}WP_&Lf&fe~$jUFJX-M1;ptPzM{z@vhm&P=r#k{XXZmAl8^ z`9FO75dthHc)M<2AnmlgDLAz%7A8BI#=X9~e%e%*2f5Q8N|CjytsLDkMMNB`r7jX; z?3=(`+Q;q}{b`x0ph!`;7v-o-26tvqNTkHJL_~Cj%|MFauj_hP9daDW+je}YRU)}8 z%lr55_kF)yE+n(>`MR#Ex~?n9r>Cb{>$`XF_I)?A)9F-e)up4Km&@hDhY$6-old8Z zA3tWZh;P36=7`hbWwz$HrDm{zVSiLL;>O2xcU5CVf{8pxiluFwYbOqC|F|n10183% zzRhNyklhU4z?W%zUpOrXRnQkk>1FcfxT5oNI=Iru-C;id{LOqo8E^L08=ohi*UCtK zc38rYL!AatRZr&yV6DhkIUF+q<#alAkVqgR*KMn{sTHxZob>(IKlkfZ>TV+6fA{VC z%YzOS#Ys^O0^}-KDMb`)>5ml?2ZarUp%k&xx)^98(JFwlE?_&^^0S8pT0j>H$!qoV zyAS7g?|E8x!oUR@t$zOaF_-t|EyIvPA)}N6Mr-Z!r%&&H=~@hs04nhC_0N}m+kXF@ zdljLI6toAkPe1+;*Qe#p+buaSsXXr<-c+P^K;u?3Y6eDZ*DE@CS;ZuRpi_CiyF1@s zbXg$TPr?~aFr_EGhb=2QIc9&T|{VFtn4{YKo#{?BU`8yvr_!A`BvRsL{Ik*2(Qo24t)9Pr@Nm$JiPlL zZcwAML6*zq-LL+Jr?ZDV1Y$Y0W!a(Z-Q4>GQ#DmwpPyQ*5nf6ndVL0F$RE+cjhFrc zM1*n6apuZO1WE>rJR*XA{8q;1ou@f0hABc??o9#_0(zsTU|^A$>LN3LJLrTeMWk!@ zB)(S4l1_EMnZYi|;)+xV?I>-=9Vr{q+c;B(dpt)&t?xA?0p+bBEdZG-QPos6PoCS^ zwr!XDI{-ia_~Y}o|Ni&C57Dv|dZ5$flMp(?f0cWu z8tH+J<@N*uRNjEsUKN^tT84ia*@eI$qO+|mA>tmb`LZm#duuIM)wVz3={e2jvMkIv zh=}Ii+gmM$=IJS^klur?v7dIDTXcn`7jDlXBtQDG7={JasAbRXXw}1Zh@vj4;!+#^Fppd`$r{5IqQlW{~ z4VjEYls&)Evli^zwiTVLI(>-zxybF(6NgsS#>lV=9X%{PCShVOF53G~M1+`$X4udp zRx>k!s@BMskvau|Q(F6vH}#AM0*r{$>Etctq-d(D=8+P`9NvYdZSvNWrHSs___Igj zO$)zY$lV#D)^+$)HHJx2>4vPEQGme!olfxMrzbMGGZB#}NLNbk(nSXi%DKGrq4MqQ zwdN1G6t}G&-HxFRa?n~8jo4!VBfSolk@)w%KQCnobi!$n;NB4gz$`etuA+4J^Zi34 zV_rJ|G)sM$*3zr2O7x8a(`4nPoU z3ji{bKd+(!XlKw0!4SYYqf?;KN)$G4ITbwVA!GH~FfJkjiJs?2m?=O} zUOzvtr;}0%ni!e-i<)|cjL6MPO@SAgnET*R0a*k)vrNNPibs&r zTaS5yzE7eKGf$gMF%N~yJ$_0&PKQQiUV#U80yp~57;(@7DAk#att z30RSEs3-`9g?jfLk;+p-N?K%*X+Shc(b6@<4t~vapk-*jpjvMF2_w=jYBNm5 zXh!PpUb7}iMX;k4$cal?v;jgffZj0t-UN$naArwqjUw500TG0Xn7})ZIS|s^=7G-X zm;uR1)`AIV^bwA(RBiSELvBO^YF4P?=qi}%?=|XSlZNJxq)S-R`vAzpZyax5mSR8kW~;b zjtQGiG%ci6qR(TcT6O zxOIzhl=#f_#*t4t*K%HQ{$?IowI zNbz|m=z4alsv#glOF|of>iKlnT2m=`>BO>C_4)dkY*|xHSXB^#rYg2rlyZ9i;Sc}y zcNcLDzkdJw^_Rc)sE@IEz1H0y_Zkp*EJ_n^*h5W+N>P2fZrAo) z42!c6q()@5P}f#^^Yzzy|K_thtc1rNuC0Ci=?`mRI8N&Y5ECpKyZFBCcgw=owx`cU zyn$2$TNT`Wc=z`H^6CEa@t=QlzcqtX)aVZu?bCOB_rTMeB5JLvK~?;E4QVi0FBd1k z05lCq0j%!2SOr+__UZ^&L@D_4<+FbI{H}LJ(6(L6A`MYNZLv_oERuD~J$w&HNO^nz zMk8u#ON6zymc>+ED5hxPg#?U|b#yNrDRun z6e(0~TYdVnqOufS?xE$ySXY@y)s1^dNshNf&q;GoNBuWZ6FqLGG9k2tsm=K>o ze-8TP{=Omp+c&?f!E$$s&fbh5bu_!A_KH!FE>4x?i-c<_UAo6q`#rzp=-l2*$NGbu zd8v#Qlv5a91nEBw2X=Paz$El!&*p^iGLzoj@{ADW^zepKK0SVk2#Zj7gPrwL_~z) zN~ow6G0~!yg>+3LBCM#HTrLmGvhL0I+J5}u)7)JlxVP4bn}3AUrZi%gj$Csj8o4P|drJ zCRJ2SrmUnSrS6d2?vuZ0f*|fLFw+0FU;NxX~@ZN7b)(6 zk-rVe$WA3oiIbR@X@5{6a+FgVF@uH_&xJ@Fs786KjbR<^w8Zk*Ghm1wRo&`7T6n=I z^P8AUN(M#%D8*WDUYNbVI^q*d!dJ%6oraXEE|L8Co`KJETR2m8a=yKYNMHs1m1VFc z0?B|`W)7h9?()3_QlvH5H(NkKu@P@&ni>)T722)In=B#`8r4NK+|z<4_b}ONdBx~W zgfs#v#F?9(M@vd-ifxaWH|3nhm@p$$k`0O^dJcAIe*#ZYS7i{51iX9DsSVdhOgI&5 zHREvETXP1<&=KgXHFvWV8cU>Q=gc@M#X61-`hLF;opcpeB5SNIM z;M9d61PDYIR)!czI1t%AS>QlzzAIZ|z3JcrB1TAM(9x^|LjV<`9iPpPc*R8M^jh5% z>#Al6rS%a^-BoHJ!lltgEW9f~5kx?XP*jk)@LWbrC!S)?2uQjFk%}TB0xKq}hCa8u zwaRRhyC=n+pdkALG=MUdC5N@|E(kP4^5NU0dktQH;#|_Tu@ZfZ6zWdQ5E%hN7^ACZ zU+Y~b`;}otUwS=hd}LtdUt2C@9SUDbkQ`nk^X#Ozn(p}1)6>u1e^`q~_;$Sl0y9t-)X!Eb;2+xhnUKcnZ&2=i{kJA5im zmnPrHEI^(pB*E;OErZ)NCVzJ(b?}iRbH+ozg_62#DV9j2$g~VK8Tp zegzJx(>d(N&&=aCqYes&=>YG06-h9qNN<&=3K_b~& ztF>M(m#H)w5s#0LHWr15WN3$jxj3%bqvM+E;%Kji5hKagJPELaPmq7@lR0A+yimmI zbNe7%cJl-0Dj1)M8+$`FDQVgn(6>eL>TajSJKpW_2IkM1NSjaX?zPs3hll)6GfPjc ze?a8@`}ZF|e#~ARsq-5V>$)zQ(5k8G^?Kd+{lkY3s=BqBaSDL*`J6ZN<;$16pXcZ2 z%jL2xOG^7K%kq4EeEAm8)u2q)yEC|#(;ZD)gF&SRw;HVUW?7k|+Ij>bB)um;K-flV zVh1YKu>rQOG$W<$HEI>IMuh0D;)IZ^NG_}G`DtmpE~oUk=)SgyFVAap^LX>{@K8g) zJc>NmFJF`{TmlhMg)W&yS5c7`p=){g#V@&S*Wdovt8a^nK~|9;zx(d}&wpj-cM*}? z0m%tzSe9kITuLczE|7FS7!<2Sl+sikb!{l3MO8fZrz_rEB+&QL!~`>uWu`l|XaiVx z*aEXytO;Ec*&rFnvd9*a(5XVj2xf(L&Latiw_tdLsdhOe5+WYK@I=3?K~vldJ+i}o|Xt%@9*nRKN+Dxkc$i&om2j(Y*MIw&{-6 z2(cr=y*EI2(A3uR>FvY)>3j}w+w0@wbJlfpXrw?aA_83>{APt-Vgl17PP_N&{$&`_ z9CA6(c#k%7nmCc0uX2RE52JD0-Ixj0X>6b*+`}MucbCskPl7JC-p4Qpt*6_iMYMUCmbF;Y6BrjTV>7PaQy zTR;ob>)ZCv&)0ox-fGlI7F0MW9%lKvT|^}NwoOMpBDYs~C`RL8AY<^x=n9sj1yMRm zeH2~}#h*O>l2ZC^dfvW$<85Q~MW_RDFdJM-)s(RD(F8z5MEe3xao-tnWx6;qzS+)I zRoB5AU)ME@xRE{+t$Xn3Gka)Pz)TVBrA!jpb$S`kZJK<*InNKB8AgemnVrizE7|*F z3)~|qt8mZ3Sh1?Qu0;-VU=w@I%eA(PNW`rJ=5am^81bgRE~J_{BSxK0UMrK^ zX__)2oC-L3MSZy%r`e71GlmWt(hErwp|_Ra?VSS$37+|0oNeB=XsF9(XT}`_l zL_`$R)@l!IiJMP@+nbn^Z^Wawv-)bL05MSEh|4G{SUkhi80vvoAc(xpMmE zG4At^%C}w|>^RK3@BmTHg$6Q`&b|ns zN=S$$GgN!89g>uY<{mc?DpgkUEigq0l1AF-(qDtBSy!w)fErL~Aff5-rJ`5|aKw@V zB_gY7&DWfC#6-SkvXF^9N@H`P38~^Ogl<|Q3k`M7VGRi(B$E0n@X$a2ks+3ZlhqSn zX9wXT#l3~-9Oqo{>6L~Coq%hi`lADkG6ChDN6nn{UZfEf^t|T|cp;^Wn61V{g4oGL zq-3}rWOf@P(U3?ztN--r^YZmqqT15^5_8rFwulN3N(hMF4m)R3=BT$uNwM%gHY5=6 zaKci6;->p{^exgbw(*}PD()W6*#;5-8nZR0bhY1`FLgT`hi~5vQIIOiY4u<{QNJ7q7!;&;jcKM6#uTUp$Pl8Er)6=Eecy{(-FFJI ztH7Wq^a_k^+eGQ$x-9GIT$WQ%9v`1R{Os#xU4H-j?@X0!fb-@Hg3L}T08m>~QxBik ze(ra(?`_(NKr;}%fE(<{iGWmy&um~Tp6c8fu#D6MW^&|V zI1V|$k?740T@e zYl4aMBxAVp1@$P%-3yp*>Rh=KWW-At?v-b9^B=}5mcgN(13O-s2#mg*FZauGYAurU zB^P}EdJYOUM0olc9H?fafoW)VpZ zzU)Cd?aZ((w`Uwphd3%0Zat%pqcly^%O%ne9jT6SPCZ5wM=Li$mQ3u;HJb(3`F=|& z3S7s1B8cF=@2Ar#^;?&jtty3Rx1vsC#fv8)2m^>#5&ut{ws*jj{nx zra_@7MNm}A>2miFq6$R|4S4ft9z}PP>)y@^uW>H6ntc1)-+s7%d%Azy1ZuVlY;&|- z-B+^y^zpmv|LbBPqV6ZPob}`ck%AcZ~yauV%t_mG+w`4 zV{eN{Dn7C&QXB>Vm&-*Q0@SUR z^P*x`XaiZq0cUPuB3b|ldjF3s)WZm$fB4~tZQI_yeRFqrCZe_W<;$0S-{%JO%FIop zG#vmk#i(yOm-F0`278kKe@YUNrjahz`eG#XcPI#8*7Lp^r))imH>NY^N+v3SA4MK60goYOg-|ZlhVZT#iF+Wm1Fdf5jr42D5w^K?BkklYxi9bl5um3oL4+L zkQ}Jmt4Gem582-t_`G@qJ#g|mqeeuNu)Hj%^;EKSny9rh@U&kE?#&~5&3m52(V@?M z-+%bwhwXZO`}XbKdJ<+Q`cBu|u2*;0(U2xcQ7y|N5#Dx55?hKqP?F06ym(E2=J-oB zMkCxziY;a(RYVWKs7-!iks=})O6g!C%%2CUC?pY`beVYLZ3hLX{?yDTiwN8BeHms2 zfSF3M7EJ^u8c{MytVA+C=G6t3zC~+U2zxu`?oMe|7Bfv*#z-wcs*0&<>fo|RGKRiv zdRhH+Wjs4a_wx2$ zqo{o`>!JNio+<^-8gKDQbWR5c&}wo3k-;)i`7&Y*0EC2#~nh9 zp5e$?1v(Sj8BxD-+Kx|$10D5`C-)4o<|lawJ4qg!&)}u)<8XylZW`?X*qUmV{$kq5 zv|ZADxMXgMifTd$qpb@EoyP|2q2GB2AVO5iva}l2|k?rCMhlD-x$$YObUebXkN@t zr@N?aQ5AvH>D3#ol$s$Xy}5JjD?rG^CjdIsJej{xKp@RMT2xh`*T?4-x)h^|oiCS%H>##B?DFump1(Y8clTP|A#hgr z*19@@)NnxK-~e%``;(ILJ$=n4^Cv!M$et*8M%kupXKm77$+a<@0VpMmemsSv-cm=uv)Qo z5z+JcLCdn7pKU#R#D|~#e7ioSqIXLr@kr)ih>4m}Wz7WV%bfh&aJBc{_86iu-L_DY z#5apkLJ$!WoI@vruR*f4mMPo(dY1b}M1Wds0aSI{Hd_iwE5(A#vW%+I{=RaXTb89m z7;^KKm$Jr4Mou?$ZsmQW8G1O=Fv{WR_HFnxIZuB2>8DShKH-qwJAU}K(Y)O9rb{q4 zK7Cn-@yA>0 zo{?sjB$Hg%b=$Vq+O}`e=tkf^Gr2y7ou>tR6@ z>GSh-+qUd_gy9&#`_4Xb&s+;rXHN!O{D=mK*c9UQ7Q5HEjBHfs_N7M!P*D1|64CaW zMSMtN9VBVmWnCy;pLeb@c1@4e?uw+89%*FhU2fan`53n}&&@2%_#K046O5F^8C!1_ zPQ7sX=D$e<0qO2rMAp1LU9ao;q^e)OJpb^+k3W6v|mWNg`}W*+uQD`N_%*Kqsg7e9E79e_xewVz1R9<^seR!;`RX& zMsDqKV`wUb5C;)%uqdKsp(vv5``*G^OGP(PTUylCTFq_;IEc}SZrc{_t+fwt-@Uni z0QvOv^y$;5ZEwQf2FDo*JE_@vcX!=4wmt8k*%G$rb`Njpzjyqlz^I5=(PF}oQkIM* z$du|!@pze@Zs{b=+&f<<{CkQrI*sC{0y93)Eyeh7$1YDDBCOsLqXgjKqHDU{Wl6zP zg|||a+LNyRRMFLHMCkQ}ItM}A>UY&z(mZ?b5V)mj7IS1m72|kKgDdD&0ol80* ztlWx9%0O2|djHctK>-mtolay&`g2Ir5~631Pt%*D0(o5k03ZNKL_t)+EfIv{=*az`aFEXliclVAHV$m+ix%DyWjrycmMex{_%hP z-~RXaKmU5K6~IzTt*y1HY9dfez_bInG!5b!Rgg`+nSyS&xnb6#_2SXFE)FFC)BEhs zef0M=(dXlycU&MOW836#%s9c!RLh_j`MjBV>FIyZx7Nag1b34I+Zm8(94R$3)9@rR zOGvF%MO37uj!!C*L_=2Csi~@YOA(D#%{@Aqq}X@g|MYMF?T6j3cV+du`TqRf?|yr} zzdyhGAZp=Rz|(HSf=n03K9S{0DuNn@h=ifSK+;WzjCTu0?s2(MW(9W@6)h{WcLY>L zvs)0^WqTTErV*|ph;(9w+5O4ggT~5~@t)tBfM7V$=rYd!> zrdq5-z~Q2j#o*nKn0W2rSgXKmc8w2ETZEQE4SFmBi->SwYZXPU3O1q%1T4_lc2n)e zKItqWOEsyZDM!G!@M7v{b$fpL;m7v)^ml*zx668tvTU_2>+<&gp|;A>zW?#3U%q*; zQm)r0fLm)d`_V|&wK~$ue?X?P^VgP(7YfCwnETpkWF99TjA<{|NT@slDp{BiMHo?(7 zZ*X~E0A4yuN86}Vp1)7~Y$Ms0rI$BPU8$nsUa#9-8Yx>-PgbPtFM0k z_33;PRV$^KBv`D7e(zSwdcJ@2&d%@ly?y@l<9>a*+?}HCt?pR>6bwTF5eNWk7DQuk zDBR8a%zMkk-P{F^DA?Qq{lLRbZF?Wt=DC6LPy&`G*}Y`|aNH~=(3bW*HyV<}ZI8xi zfx-iWAT3)CIDlk`%+pRIIqmTAH*$Eu^hD>j9ud#a*Gw)>ro+)-<|LdC_3Dvd`6oQU zBFCL~ekKmg=;;>?gS;R+hWF}7LL{<3hKS{U5nzN4A)mSF&#hlZ5H;^aL`E{Wc~&Q+Q0&jVGFe zlaJ{e=>;L{3Q60ofR-#BAmN?}W)C<^$#B3T(yz{0(I<}&?-Y>M!c0ws-fJLKCEXr+ zdS@!8_Avk^6^hYxij^iBty)LM6LU zpzl6_m8C&Mvnh}iQW_C8O>t33UZXRWMu-i=st^P$Y_o zrT%JB5mS~`myjaFc`bKV#H*TA1wKnbDDk6p_r(UiT2>E`C zf0Q1cCO02xx{f%ktfMKLFX+{NaZLIi4g1mHAH(Nveh~;1D^#(is44dZ$KmK--EMdAM>SH64MNbvS(#Y`5kc_j>1p5hENSR#!Bj+SDYh&?=dVB{ zbw%0Zrd~SyXEUw0i&%8B>iz$@}J0&gC-K^U%6Y1I}f! zZKZO*fq_Q^GnG=#Jrtz}9{R26a?tD~8duFW{aDSUYOL#HEeU|wa!NZsSlp_t1x zqL*mQ9!DayQFWNPwPYM9ds$IZ^XEryPu_eAwg$O3Z|>sZb-RB2^p939cX$8OzyJ6D>NqLKYVz_b|4+QPF75SY%Y2tc(Z z%MU}?yb6#U^VSu4C{jeESleqQ$=a+G(cVKWQjP-M2lHTVb+LnZ*_0m^W(!?e|-L{pZ)CJ&wn8gZ<{T)KB(BoPe1+D z-~QcKKmG9T-MvJMwujeRE1M^ji77^|+K9c@1nCegntI_TKnrhVjkbBKwW_IzvazU| zWcS&Ai%DGoAX$nP>K1i=7u2f^qf6)Ihk zqgY`U<^kQmB#VGZc|h!){E`SQ8Iiq)Ocg=3(UZ1b)`4kZ$D5|R!5vquq*s_%MWS2LvbzSbhdUMZK+tZgHzxx(M+k1Zi zWKD8}gR!?DTPj5!z`mKJ!9kqlXv5PfbN4uu!SY59L?kOq3#DWII0o{9!gJB4f~eF_Zao z?>f3+^NMn4(ERH2^O)Pjblm%cz;dW-Yw21AF$J&t$NGnFt~rM~&>Wxn;p1~f1PYlv99CnDHH7B)uZYpHwK%`^UQ%Fgv38ail z<__FZYb`}ptY@vX*D8Q)4Z28nqQ~&JTkFVIdIeq&k*xr^Hzkab`+$m9FJdAl0O>`n zMPy-_sYXkUoD|&x!=r@@)~t9{^iq95O>S)549owOIOdNR7l!o2On7s|Af=ecpTJ2y zsH(NrT5A^b1=zeDW7OkhkRh+(?gmDb@5iy(wXa2RX*28C}4|cRUudaSPj(5_X z=e~+Dubv(afON=n-KD$LPkZph8K7wa=2vEB=+!Hm_RZZ> zMQNO$^Y(6rcN9X#Ajz_O0bUjZaJ^pVndg|V>za(<^i-dppXc=0wk;xdZ*wq@H%SH$ zA{FDTEM}+m{PeUh=hIie`sH^Y{}9g8x?bBJ5M2Z?s6sWf&1f}yp16eFow=T`Y8xb= zglIs?AWT&ezFocfT6C+vdpwI&TcgDN&%Tx)f6(@PlF)F}rpsysw(aA;{PvDm9S{>} z>b|>^CZ>jP0Z)+FHv@JIbDSmZlmHwm*)9?xYFY}4QlacqN+89I@Hwh65>84KKp|#D z%&;t4RnaHzt(Rk0;Aau5hLn%8{?pk-Ol=RLJca`!aTVn)4w`SkSD_xE=v zhF>DS{pbHy$miw{AKstdz4dSn2BR#?dU;SSEd*AU)1AQ60T$511zePCt9IRX)Y{z3 z!sV=|J5dWF$RZtGk^z-?^Ut3@iJ;cq2bvFnKyyD?=Z8&a=4b?R*c%%U0;438SVj`# z?HsKKg4yie{(s8ewO6(zxei+qk$YFwIp;pQ@9m!Mo(E?*RFf3_5cH%hNVa7_mSD@U zWEi&e#fE>H0DsX3S=J{%Xp6FJK!8k(k_&#Iy)$C@Lu6*{I=4rp z3ysrt&#BrwcRnH`SFBjEsYpgLY1iGeVmhRyOi%$>>pHHF%MEVZm|^<5p^#EaCcM5W z_pvqCFbI*IscsWq!Md3AWLl_6OM zlk1WP%yzY)w`z@NlRIA8W6Y{b`XgWE-)x*8y|xAxU8-nn9`nirIu(&r49HEQhA(y1 zVp>eIwsku#$e27#Y&1e@vSG721)DD2&uCQ-AwO>F_AzDS#|{kY(c~Oo)U0HigC6NC zAl*CecrHHni21<<@lp0=r^_2bHOsez=1YnKIP~z_X-rY-vbf*bPDq{M*LXr8f zvr>Xw?(YZ$YS-V3JXf&;Wq**@ACxf)V497gfc0$)+YK+}DwEkaWI)mJk$jD2wfWs+ z?1KTS8-m_;CT&q|sAOWhhy+{WPu5~;AX=L-XJ32_aI33KXVxJBDmn)kK(yL=eNGe`VEZ`i4d0@zqW*rnMCB5I&coGq zv&Uv~kDifs;9(vnwYPJmnT)SwVvVl}R1qR`Db4Qkj5!WKb9g7b%nnGlpoomn`gt*& z)A`TgX!a0&KH_=K=tc6KbRMFJZDGwZi>T*Och!nF7iY{K4 zx(2I>?#fhJb}l3Q81AG|PPY%Xu5dSz8Xjf0dvb&M>iP4xMELfzr*XWk54RB!wfb_3 zwVG;~W>fWAYptSszxwHP0vS;iu-#6qkO(Ieaj0HT50xQWGy@(A+v53>qP)sH-Djei zdyooYtW;$aLuZ6*QmfLj7kGr2sz_ZIPm~MDs8>Yiu4G$O6@j3T>r$J7Od7*9t;aJ# z+cFWcJK`-`Ni?Nk0$uU9)d#b)GZft>gjWS2iU@bFYxr7ytq6Yk+2`-Q_nxTMWfc)9 z)Jg}1HbDzvqLc}`+e0+!B3(}3Fp-gNj7QCO`5L{n>xDy;ka;s!3;?y) z;*03o3nYeDORhcYx!u0Eo}ahUC~Xfaa`q@N9MBF^j+k-#x-e0;VI=VeK!8iP;n5C0 z?zP?M$MvJjvpo71$$UE=ZTvniNG0w1da0;5&L?kPVcUlBt!?j-^ze+{BWs=G{C#$$ zE&n-9QwET@3AqjDYWt)cKHB+Sjh~x$Cls=V=RTh3<{$}nIzxN9X)18`MW{C_nMW}NTi}-tq!U-W&$Iyt~KSD>I$IoFtam@NGal7 zjTCKeOQ%->ArbJdD1tyL-4;_*L@0uE2w1cj6%G*?OvoZwD@BQry7+EaqVwyI%c&HD z+OoK+uIstxdnt0#zAg88@iUd)M-X7MSjNPThJ>D33rq=`l(;3_J&0+VhMPBt2#*%# zcFvO*xb2(kWoxX)oO!gI^S75X_I&c+-m!oEtPPd3F7sF)EuV4yeDIu;hr@Mr=|BLc zQ#*@YPX2L`7{ypT++8+}VLyFzkGCn(;tjhuocZxA+_>3~+Pv*#?F`n@n0ETud@zqI z(h+SD37)kDw%3$58mFRI4edA<7V_LDC-=MgYNeA*oQM24xLd4AAoQ-EZ99-lE>mrs69- z%B%%cUtfRr=@XR|JTBFDbClV{N|0QIbpi|!B2J6cRptra=M~B1mxO>xf_XfNX$b=#h5w-Dk7>CapsVfSs z;XEEe&Q>5oww$nep7;Cx)y?(1-yfIL{a3G-4QoNQpZ2i{NB;p{KN}d$B`};_={kuN zxh$QQe;-JPnT4Ol0dWb9%jMx@yV;MmI<9u{`JR&RbSv5rjtq()wtg9zBx1h zwMsC;5n8=QuQy#x7jik?1L`8j(?dC2v3gM{LIX`j!bygcPDv5mN`NN9$VxK?VvWiK zVhE55u|CJTRAMuQ?okpHCj`j8$N)YGcNZ0^FvcEsUiBblFkB=R7s6`@B%~#K);L*L zT>y|J&HJPf?S*s!lwuK-wNYX+#?)$3H9lQ5x_kqPKoTkP5+2NtPyka6bY^{GOaf6w zG14g!rYfqta&`SwuAceWMv5)xFGh^%W7LWqe;Q0NjN#4Nn7{^x$_!}p_Jzxv##x!OG4 z%r8H9C!Sut@>7KtfgT@rRx+3tjHqjPjYx3-s;OCFK9+|Dmea!O#dMTG(RqeV5TzNC zgL-wXh@~#RID%6tB`ZW#H-)HFcX*`Okck$-Ud{R*;0zDMdJ>{!=>YdcR#JekoiP9g zYtYFGkB;>Vp}<^9E{ANVQAk%2!T?zAW=y5>txUW9{_gZ3X?cXoPP$~6Xble!iXz%pFPk8xW}TmI+lS*GBO`%K zmpBC!a~FHGSB`CTyP>2DZK9G}WVCya{kOSsqVDT?f5Br!U_=T54 z0?-M$$mnlZPEbbLl%s?~0V^VFj%`pn;;%56iP+FCFQEhq9(=@Sju2qd8+1N~K$s(rt z6sj2*&GnK|1k~!KXkwcI6%NAjSVV#{{Q8nMiQQm;3Y4~Hw8n6WpH<3_)z8bDo+K~Mby-OVyhAp$W)t1FGy zM+n3icVB#V*zK8iDdVhC&pvUU<%debjrm*6b_WXrK)~0opg3XL| z_v3PMreHp>0SCsSX3uLu=Z!wHKaXZ<`ZJ^?ADkV6Y|@_@<4J?h+*4H5KpopX**yPT zLEP?T(raUEo+8^h7Hp!TV?_@+k;D_ms!tRc8$a#5j5jgwz{q=*K~NiOHrwIu?VL@m zU@<)&kDq@@KzMWw{07k*Y4Y-LlfHh#>< zPW>o$S{M3k#^sz&UQBgQehnJnB%rHi0!X{NBi*wO(vNMvJ0jcFehvWl;yhzW`Zgax zRxHW2+mK3;bLsi~e4ka?osx!#2_l6tAZcsi45~x|ju4Tow${BXZS#B#U$ivgcCbAs zqc!c(G#tM5MKGA>TXnF_ng;-DAMglk1wF!{Vnz|DVv|d9b}UpQxlRxflQv#4ZY%|h9$93y!4>b9%;3=2@U zZkhHCAlP(Z+rkzLhk(|U1fW96s7$oa=pZ*Dng6<3Zz9dp1;aV|(1WU=Eba|fAsJx` zL^XyxbMcdH3aJRtX!K&{DyP!}qI#_dNC;G5q!KMn8mz15Lt2(51Q3yOzyLyGjVdDW zDv(K3Yo&^ch9EN=GMhUhWGop%R4sKG7>%nWk{+G*ZHCcV1^|PiiY(>S5<1$dODsVN zUY?2tnstF1Aj)8qYeGU-0Uh(LKT@X&-?e^dG*!jsd`C7meK&j=nWta563K;N-H!Kfss3k zI>P4fz5kteo;?5IPkt|WQX#c|_=nzm_xbZ*|KEQ@<%z;-tR4|zg0hMcEFne+IB9Xo zI!n;%mbH#3>v1i`1cNTROnzI7NR-Q3T!b%D)r!9(1yHSN2#O$FiP&uuudnH)*6D9#DEyWZN z6@@aaMo%R`v+NX6fd{=RLje^l3WJCP5uyS}3pA(+5bm>z!AwL`t5pHeDZvma5gvKa z0R=FKwSdYQ@PcrJyT(?O3Gp>G07a0l2C|TA1N4O$@|plNHGKIv5PjZ2(ZtJ&X!QF4 zFpzaMvmUTfF@P{(L>K~%4Mb6)M~d#M>O9Y?`oi9tW+OT6ch8?ct;ujDHG^zT3pe8~ z00U74piT+{Dop2jeh?)jd&w1G5@*h_*np>h*KBwf!brPx?lzIcA5}}#jWiyqsx`7u z?C9-gvzxcaAyTP?gOMhvZNIsMvjLI{1*3;$pbuzHPM7q7G$|kmWgs#GEXY0Gw+9Av zztgDQE;Ue8I+jBc2m}Py6i9l!og0_byHxks+BScZ3MkdIX;C!{#l+niBa|!SkvmKGBK5fa?3$!0ACh$fdki(kmXT8F z22n^Fe*e- z?%9)gE+hhwQsA|gQb0^a*VRSD1T_c|Q#2zHXbB$;7m_^rnu&Xahcs!?4H~*VPH&7D znWUheZnZh8IT|gi+rs=-06_)?A{04mE4NvF3A4(^(x%0cPMKMjWi-YaU_<$J!x~Az zZdsPAtE+KQ0kY;=KQ2EazPY^|1aEHSu_@{c8x@v)G8auBK6W@SV#s6ZdtnIbYx zQ;jI9rIZK==>RX{BIn4*KtEd%4C$2v`!XO9WNP#Wsao9olF6Ws($g8v%7Gir`bYh| zJ%~wz3evA`b#>CAZW{E`&);vLMM*PD+-ZB{kqs2P9n#mbcke&>IO>AgENXa#7DbWWVU?I_jgyB#QK#Uvn`D}hRMIvZ z>ACNxCQ%4U7djwi3Q;E}QC0OgF>28gr&B$?-r?!`aQEu-&#u)Bx= z=%54o_dad|)AMEy8(E-NTnj>hXB{`iJ-R(@#S{mfI@N-+J2* z`wA~GjhN^WPPGv2wYoisIdnc8>#lh+mm|0YUpGUg3y#40KllR7~GXcBa>c#UOtE5^I$$mmT zz8S;&QR1%PuUy_Ag1b!@R-y@#Tlzt)uLKJ6@n(=6_!us(){B* z?h1fpETs=Xfzld#v@`i265#?hvqV}Llpd#74)wD9e~2)X1&dj-Jp@#NStf1!x~>uF zsHNVh#qe?fK-r#8Dg~>PtaM5FI|U3ugm~`PkT^TQiO-0HrWjE>tK_s?K}I~(1^4$l zO#p6hZ>v|5nvi1Frh=OkVYsID#_%jLDssR1`kBD!Hb&b~aC$w9zz-fl^8j)tsn%LE z6i*dVEgMSqcv|v2659};NJ~>1oAepXW+Qke%uyMP7RGOV5XfV28pFxQ+=)8QAWcRenZd)ZX zw9m(;Xv4N2*yCek97mJ3qcc7*e#0IZd9$DOvce`wK|2|Uh_d1HjAE+ZJ&)2S>l{PV)S&gX}Y=jL%;ap-QB&F`R3+{NV7nurSu9^ z(JPK8l9I{h+u2^}>`W+4)5Bidu{AD*Y|l$T&rg{_jt*b6Ig|z~d*GZ4!LwXFWC(C< zyXXyq#&(q3=9;x2`p{CO$+>o%zb)SLsExQ^j;!@Q2k3$#(w_I+3IH52Ly@d~LC{_L zOhbSsfQZdkH_t>TzyzvrGRtd18xt0p`>I{TT`}?oHdiAMk z39oOzc>3@Dv0whJfBJj%Ay@;Vh5}KqRRoh6!i!oAdM^c~FxGWB-8_Bz=l;TW2zaDj1W{0s6h9!KD<-vuYUji51yFD67&8G$Xg$L@Z!5aSFf)h7$F9T zq3N82z`9cph$vpNghnm6f>+9 zLFpk7LAshf%~C{!#fpkbVvs8CzIb@I00uFUNlQ^kD~8o!a9UDy&TpUHVtS;&0ss`Krh0!`A|};xeRBYyhH09rhY5lh z#Td3LIXYt{_spCQ%^(3PV9*_AEwV!*xuRy08G*Z90g(CZWd8{;pjyU3&zp+9nn@P? z8_sF8%6>V%+xd)AL>2BV4SI{r4M4_iL`aF?G?%`OqDhw$#YB5KhX#MCCN3Ni(`0R4 z413jQblaKnb+0j>p(F-xH1}fflO#EtIY8mQt}W$LAhlM}GS73SoMU4~wyR8guBgpZ zO6u?TdsWTK=2ur&r_;%%lGH)~3R&0ncs$vE{{H@OILM~Dz*Ocjf%9b|(=;8A z$Mn3|56$`4Gg&p=IXRarValdks=J;IXQr8#QY1@w_vO=>0OvWcT_tdU2;(~04%xWP zqeBL%ZJQ|Cmn6mld}KYgmPh)bV=TAvE%HoC9dy@-5ME>!4;!Vu`q|cWY;Qdtc3Y== zx7(>Idm!y}Iu#Rl&(cg~n(}=_Xx~JtJAv8?QWIiVPoI2IN)0b!;S6CZre(In6>OF@ zmebMcg%og_CN*6>D8j@7Ku{BX@bpm-Q7fU-G)vR15{iZ>s7_lexUN^g@&5SbC!aqx z3t$2EZ@uO7bPQ4;L9^YVTsdtAJ+6NG>TX(jP5tEKPaeMb{K>no=jYGd42*{_zP$a( zPl^Z0m9e|J<~(P%hNyzIuCufVl{u zBA`&J*XqGtp(>I^0AbK2bbq*c`NF^YyuSKsGCh<7wFFp6?snI2y@=ga4c6+uhSMrV zr+MUU!zP3C$qyXs))a2U3>zQ%Iy)4u)n z4CJ+w`!H4`hA~!9DJ7+c%q*(+g`%obY#K|rS*mk_#f77|6-a!vcuA)ANIsEvMVetM z^Je2=c^N1gpBy{;))LVzV+E969~`y;D!`JRdv$c@9*x`bxCL(=H%A>tD z{mORt-v@sCgK3P4NUFXT?R1@u^5%K^4p^t}(Yh&Om@8s?Sq^qyhgscSH(HJ7Wh~i? z@JMz{t1hY{?pgS?yy=Lyk$w~*WXdTH195gz$Fn>NGswgSte(h{} zhDEUE*=tV&*>?4?bi-_Ie~!;E*35F^->aHJKXIVw zg$@iw65i>cf0G+PJF{KP&tb3zGcK1#=9zZ(>*Xf$_{Dxm(pDv^rKu+IoTN%q!qqHM znxJLWeq20{(U6n{nVwndoTk#5wHA_{hMZW7Cj-VQPN@!e6bB&Inj?_ws~emG6lGf7 zkjAS5Nk-HN?fs*w(j#)FHUn^a)a%2|lk4kwvX4LhNMJU}_rCj$tE>J0^?&~3y&;aD(tq?H{>eY}C;sN&{F~o+@z&`SpMCaOcoo>J1)^)M zA}ypEl~4&rF^h;I8iCVko#&Z8WG#`}=B#Lh3K7zS0b3d4;_g@$+dIs=6$mU#J)P=Wef2bKW#js|dv%AlptFcgC5szoYy=*$ z)-@NeHgph0)UuviZipFq4P?Sp0u$i@Q7SV5xK$K9Pj&?&F#`e=jgC>I4>(d$wr1+$ zNc@I}w_RM1Z0XjBrL7z5cMHe4M2?=(0V!@Uw?G~ z^su5#B4v4fd%C+_?(bQvwKJ^}tUV$VEdiwQ%C|4=c<9)a`$KWuyt~D9j6>I2;mUxV^odrfEH$Mj_MmQo_#xgW;^o1|s1GCDAqahbNE_fjNzrCcoALrwn4!>4H)pB!V|jOUODNJ+VNwX_((8z-0TcJt_J*q&=z z1w2VyGWiqQNN^a1aP!T6zbBa$vCYhi4z1V$&5WV~`Qg0R)zy`m!6WO@n;8(Nex3b( zUsF2KT~v3wT|~_DJe8SQOc8)0LhhH-wO}?AnF1OVv$ES?FDQf`@9$CFBi0BJH7fuk zDzqe5T%f^l#3FD7)FfiLySKs>aT4KSUyCgev&q2S z{w5AjKVL(3yQ{U2tlgdkeAX;Ulcb#Wi6L&dJIA3po!$!^*Mr65d1)tyI* zK7ID$JKuc}gQ$>|^5VU3e)Q8%msej+MA4~;!lMXkDiLUy(pq*KE3pb!QL*AgIK+w; z3Dgr}|NQy=lV`VI-4x2Crl*SY%A&i!e*HS5FG+|4(77uK{RAQ0aHvNJFn!AW*qHX{ zXY#QFZvPteHGBft{ZG4$TMXgsu_VW0->%kyPi=p0U+8|qFhsdjN42+ZlYf@|e(WP{ z{V@?~HN~4BDAD!`X6l582ccaAus^~D%(``@@{M-Mf;XGNZm+Z*^m^x9I)UTaA2t7L z`*5^`8(?a^>I*m!f>SMY>1Rk~4 ztiO`drS3kWjIFiO_%|e@pWK1$#)!yz!%;KUrqi3!@|#f904g+ohFku%um2y#mlVjH zzOlx}j4`te(nilNZ@tf+-#_LaY3+o+^uwwh`_wk%}LtEMl@^`O;#)qq4{|LnIe>st6dsU^6PBM z=AeEt%G#hoS1>4dNz*M(d2E9J!+T=*N3|=KKaRWe*vM;kGHQL z?p}dxOT!^B(b9A%L=v-eAhiw%P>`sov>K^GD4G88<0Q(QoUJBxKN+S}P_o`dfed^Dn+~ z_sOOYKm5g?e)7pjAAMwIKmYUJvr_)~Z~t>K4SH1n&;QC_{YU@kH-Ge_kFtJcu_A2( zAeUqWBRpkM_PhDt|M&mw2k*S~_x|4h@vndP2fN)tG>Iyy`Aw)MI7ooOok43n!`&bK z){CEiI_dIy(fN3I^5Xj+UcK|;wv;?5!1KV)0CTxYDM{5Dn!o7;WXLa4l1H0E<`JR@ zGgpX!;eI^Ye2;yLoT4s%y!X=)z93wr$>8>FNKQ+w-t%{ul&B#UXSLQf!UH14@XTG^ z&+`O;BBT--1I;ND5byE7B4Ut2F;z5Cb;{=8O$yppC=^5lLZY83hfNy`=RD5=To&#a z%j)tQNS7<$NA&X5(j=_02@yB%Eph2+@se>_-PjZFwNr_nhap*hNCMEdIZCFV(%qNi z!)w^-L8n~=Pxr^=;TY>0)f>{?UqR-7`70$hq&+mr*f;jg?RJ2{Y%;AKW=-nuc;2yP zB(^yI*)P?Yx#(zX+hsEI`q4JGaluE!w%ZUdf#WfxJ+g)|+WE(^*FPH8@ji7dNs?i5 zHprvp+Z)BEaAiJb7BC(CFcw16lT|br`KEmEp5fHHyhsll^CT05)IV)wihHVUZ zZ?FT6uh%i)h|ZIZ2vW*4F^+U~^7!x&QB=z5=mh7Yi8+qVDiv2%TWp%-`N-gjjY_CU zF!I14NC>KnQ>hs$LBcN-Gcm4HYfO_~dN1wn`GILFtmr<>h@D@Y{YK3Xh@=Rq3w`kj zh?s~9;3+F&*%(LGj9NLg*U2I8&}K*eNwuk-xO+v#&kij-dWlM`Ap&mHMYmp`s(KTZ zOAeQoGA%h=6r$BC+|I+XBF0oFd3AL)&+|Ob39;qHudc2>|NL_^`|`^#kH=%W{mb!m ze}A8u=0E-EPp4_BwI&9dS6kQh;o%e!`~Cjr<|aR|uItUs&2G0lola5R%mnma8x~&| zyXszHW4mkTSmdcvRS$>5AV##=+ZWXKAhVej(#O3MBx}v|{Ow_WYvs1fFm>$51^YaV zk>c>kPL7cpR~uiH&cVvA-i}T}mJu;cQ$AM`KM#jPJI>Hgr_(&oyWK9YkQG1f?(W7@ zB)a|T)vNt}UrJfSnYwjemz4My8H}@hkY!ocbyZcHrc9$D5Q3AtO!IQQ+p`uWfba-J zh72<=Rn=51k7Z1md$T}KzLbCpogP(0=45TCYFB|s)xq#k0>O1%4pC>3DPpQoRJ~X^ z95C-zs%QF{s81Gisa7(Z!x@3~^zbT9N35sa9#?x=38ET{s<_B%<;lyJI2=|X#Bv`% zjpcsnqM4djnarB?QcufrT1i!#)u#NbsY(9w*JjWWRsRFTU5!IfOa7PWca(I$qb zPe8~i+@{_BX^xwxbvKI|o9>#yh>Jf71;qF7}Jjb&njI@z=2trWsqK>Son#*4tJupm!75=`eZy4BHMRo$czC5tbD7L`b`bhE#{!fRgQ)bciwvY`Cs`@|Kg8-`tfi7v;Ws@0%;O|@{j+K z&p!G1qaXgRX4xDRuol4^PE7eF+c96`=# zF%+h>9g|s!27slp$OsCY3h(3YwaU7zcdsU2U$(Re=~Mzz zO)YE3H?zzocv?M?kV%amlZgQgCYd_ufCh1_Ylze?FA{olcNzS0CIjcHIr@Pduwc@0rrPlDZ*40U>Sb!txEN!|o(EYsV)KST0@J1rV zc2~Nv@Ya{1dy@vZOgYatwPw+bVS?IM9>EaY#QDeUNvoLr;6}4m%GmI>0*icOZQTIh{`T z5BJq8gN_gt73(>JXU~;{+VFSJslm9gz2`o;h=>cenMUb$Zg-77CGz0c_ynCzBPyEp zGsB~l-6mD2Zxd~84YYKlKfWQTif}~hNkSsyE9w5Zujf56A_Aa2fAZ|T_ueY%?3sWO zC<+OL=Q0-t6IOJz+Vp6MValY!Jz3IHtT0lI3xXy&Ou-sWG(=S>?dxMLzOi{jmM`?RpJBF#)(8JxXyRGZ^ znar`wl#pQ;X+M2=9$=gHF_AckePO9o|w|jVa*zI;CA08f-Wl6z= zh9fHyHYJ&VQq|+}IC6XQMnj1CbUL~FJkLr<)7FsPet$Zhwwud1qE6Esy+F+xRM8jj zeen8ptjoQKS5(JTB&4LwU!0DoJ>W!$g%+peCJV6)um}twM2^RWq`-n6BD?+GonlJK zK)r|v!qvTa@c2-c<)9F%mEF7Vf2%@+sl2ZOXelz4GL>Mkh83OQUwrZtxSOJg6sC-* zK}(3Ort{OM@BaLUadqQh&9@bLJh{I8 znA#LA&s0e{iS6I{##>rG{^3Ut z;fJfMciw$}x;ZSfo%vt8yTvIsP1deSU<=4w#!g9WbLse$Fd@M zs&z6`DdAB8)XE;}cK57b+L!Pn{#JX{ej-eDX~_dGSptcQW)NL^U^1JaY8l$j@QjgN><+u{)M>+QI(HfQf*IEt4D0J|sF6kPhIv&|5F(;G+km$pC+I}Ek$ zqS4h`Kbae)k?r>JsBed1NoFMh9ULRlrHE<(RUoa-949c@{b%5a7j+h1K>9}cI}DT&nsRLq|v6GBXp<=Y}Q8KR*O zg(9k`&ePmCdT;z5kJS9pUIz}qI0ODHbo39(80~mNK=Z`MEx0=-M2izL2EI8`LLOhR zJELQIMNgZ`iFHxmI ziks}4?e5;b)r-F~;s5M3wBYSHwDiYm>ur0O8IW%N(>Dj0ahHfzjpC6F5;-S^IXHOj zxv!5|JT5f+h7Pc{z8c-K>Ew1MQOF~!eew8Xp=`ik;4Ey#Vbkq#+8{d%0AFWZxCu&g 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

    uo2rgepn-YU3)`^hE5F;Z+bph#{mFk+%-F*j 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 z z8lBeb#1grCV5UhV(B}_7{P67T>|5XZ)_T46#{6q$*Vot7C`v_SyWK{*?(y;Q{d=!g zo`o#+#SNVXpqD)b2~t!U_birD zO4!W(@QVEscMokjO_OSld5G)845v||-$&0Ii-~pjPTA3KU6;lbaBgj=!P35qT5PxP zCkcRHQDGF-?bIzU_nS6+fT1oNE_q0~!-Gn)Sc_2sPGpso{=m*YRE%CBctFiSU|}{W zD#573N+}SC2!u!4Lw?}^sJm*Zfr?TrES47#PoE{M%%5m(K>;I8N?Qmg{^~fKrVrvjTN1a26RjsK*_HBqnz&amVN|c5!i$w>x(i z<}ob-x=z9bFmoavSVH^7CK`qT&9ci{cDtRGoMbp!t?%Bsb$xv`?RMt!^!(!a<#jPq zuts^WfT>a3%#QC^fxZxdimun|%gaj((joWVZg+8UIS%Ya89t0P-Mf+nc`(BfI_U?% z%%fl@Vx|To2mdr2^o7?yA!F2Izma<*^{>7*+~LK7OSG8Alo7L=xx*AGNtH|j5qm9u zCT50#$Rp7cL>>uO=EQ83Bujhdf*S;q0+$q4vtrr`aLoy>g+xfi9mUN`CJ}%nje994 zYR+=(BrDbvkH}1eVz9WGIVYL&6zW3N>z!)f>mb@}JV*gVi=b*=C#ZlD4-5#8!UJ^l(r_Du^uLV>H^MC}nglUb}_3yCEE8Gl?q2nY}o_%b_Yed<9u!u;xd1 zAgf`Aeg*e^eIhy@H!E74+gn5wT77Tx&A)gEiN0*W-1oLuye$5+`MqXe>4lSXM1b6V zege%`Ek56^|G3%>0{;1HeunKu1xgSiio&~wAk?~#*__uesyjCbPqk8(%x3r{;9b9n zVLw+k6Y2Uf-zT->P=>on9omg>b4BL!QwQvoCNae^vwv=t7_jok?(;nOg)M@a`qJc;_E(+u*M|9fKs=kL#_ z^v2`Qzc}C8^$L3tjq?>|#y*uYz4Ok4-~SiC^MCy7KYjM>avYYqD9Y~coumKkcmJb* z_KQE`x=9?mXpcYM$keD;Y(i_O$Y`Yro`Dzhk+&ew0T{Fw+8dTu^|+@F|`F`f-8=?Qp?qM}$+SA{d zYdw@hAiX}aTlKq}vE}X}AQ1_*%Suzl(dyk%~8acaS zxmd2(>rzZaI1#M3kwjG31i72LGbI^<(b9zg)3Td%dtLG*?uiH}1ERSN6H#_cre;na z$zPzzJaR61r{+Y-;2?<(vGdsEY~F&`29SC{*L~3@Ezs(H!XWKuW$UVrCj-~9G3sEn>E+kY6BN-Ski7+7!>d+^FYnfie>=}NokNYILus`CEN)jPAP>7O4ZqenX#}) za(9u$-X=AzN)hJuVjPD7a57`!#bR797t6&s?KY)kVp=XoB3~@VAw|8go#w0I z)#cZI;al(g^0#G4PcKdv%f;*WU*B8<7&e=nRl#YRY}(~qiuZaBf^*8niW)(NluAo) zbWqXa4i2tQGZ3;BVy?#9*vP}MuYYM-qBmbv(Y4d03j+lbtUnI5*T(*r+qbJ0CWllFc`|8PI1r5_?Qts1BaX2w7Edfs}18(Qi2OnaM|#hV?0 zHM6{%qJogyd}dX1Z7vefsv;N^{6OAnVA0HyKEqP$==WLYM75cRJA$Y;le$mcj=j3N za`&8dDmmVnvyjEWVp^idOMmct_wN1t&;LBPdXy>WciwsDM?d<}+1Y7FHv8v0Zsp#S zwrWDCyDt`tXc^DUM@L5;^z7JK+}+)WVQ|*~M*F!*4W|73^UtSg@{&U;L?oAr1oh| z#%Lq`Ha<{Fv38V)?-0=N^XJd6uC7u_F+$WDR-dLRjl-L7z8P2OP3Q04z59#5_=~YF zy&GFsEHNZiy>;u>H@@+WpZw$}?%sJ+=ZBQJGf7B&pSQrciS{Dlv*Rq1Jp)OP>WAHK zx7}`C3jyRcAQ8QuVmwJ?9LGo~-sWw6MyA$IDoT~ay-s^JCAaYY0=x?{vuaB)3o)#y z7i-~t0(S?0ucN$C#=(Qw$qB^}!Dp*_1`c@SkT<)XIdxg;c@KTw>h1v8qa@!M7=}?q z$SaXM5rM@4?A1HqPEoVRH7p)Cq1I}Gf;6DU(itrs$~{=!(KUbH6tjnI)fgf0^~>x8 zwc<<~YJ1AL*kbT8$v6x{w=06ZoSYqF3TzH_N?0t0e%W!6;v&P8b1vKMwA)N) zr{`g>ihzg`CFVNYWK>T&ceB9m14-97Bev6SJMBn#y}{GPNs{ca_f*Y2 zB0s9Ss;j$edU|GOKL)c)E-3_v!4d-UKmi~Wp2^>V1Ah&U{0le`BE0ed2tffr0I~w? z%1|(;3PC5tZ}^jH9!A9y3#jug-%jB%})eW5Rr|hBiz^8$uF2O4UVmqr>BV28tJQc zyE$oP1PDP-gzP0X5s`t5WvwCu6NFGhk$jXv2HXSI5_VB*YdX)4ySqnb{<%jUQqh75 zNl4W!1XZQNnQmCae{)Wg3Ntyud)YSvmN}$>@UYxP9<&HmIWEhK7cZYYd7_08(F1xb zPX=7{Q?R{kH#=e^>*Z%m$J=x&UF3P4XGWgtN@H-U=ML2Y=50?ArP58oOD!_p#8b28p{9GMN_bx$ja ztvmBWm}$KD_}MpkK;z6yMwIOz(apQzhmF6dQTSjs#^?Qsdhm683)HoJ^!8R;TXt*g zwr(xD5ezm=X~5rYL$!}YxS5GgXsmbij?Qc)Vf^gfQUtQ!Nb4Ur4s~{0f2>X^#bWfB zIg@idaAV%XVz}`%nz(N0v$v-g&!I*E42>ZyNx2JAJw%lK*dqWpVP@Gxp5l$B4k$$` zTq0XxWRqx81w@dZ`XX9K7qr_k#=8i)0YIg*1Z>|0=OVOS{q5cya}wVoClA(W`eQ^WPxui-fy9P&?aId${p8 zEqAt~J!u#@C0)L+c^|a*{c6yui43+f9RX zZ?mU{@j9;Du1H(<_lgkT|BO|TMoWFV)mF)HJc6zvX$*B#R76??lwiu})_Oo!kEiI` z2A)&Z!063_QA5Nt_~1-_9{llq=^sK-INyxCE7w5A5{_C^naG~Ee z|Gp09z79QfFz`M5yU#O8GnZ!8D|)4Eo{yIo7y5B4|5Vjl8!)l0;Q~-=Rn?-ic{W@| zn8DWj*Sx!_44)@ancOM~!bFNA7@iieNXeSGS*LYfw3LYI5n1))1}!K06zeURRn_cl z-cCmk=w>XfCPtC0rYHH|oKOw88Sl7Vg$Hxajb{}^HsU22pn^*7=DDs_B!NU25SU-S zIo!OqSzQqmLGvOaEF>q9%l+;`=*k&#h~?^n>)r8tpZ(rvfBa+p{_ltuhCh0H_sR2L z{`hbI_-8-)&42xS|79r`s-;Y-MIuCWBHZe_9M{9)07!(?TGwSUcXzwLUxEUt8O)=u zt5sw>u63>EZZ$};YGu-hsI{(Z&8@L4i)y1f5m9)MEJXpjb$T}mPE>L?&8mt(2`V_3 zqD2KDVh5e9M7fwR9#dl8P18gw=Zje<-F^J*;R&6S!hR<3&(_9!~*{S0E zAiy_%7!lqIFJWjo6OL%4#zZ*X-NEW^-E&wQ?2_BlB4VT+jP0{Y9XQEk{?{n5eQ-1k z14DQs(rHc`FaTC`TdQdRwziqycqWb?@&Yr29yCo;wq4H3>-=P%qphuV_`tcgCzr^!sY~)U0!Zc1*E~(b z;R9}>ePd=$)7Xp0hxQ;@Yb`|>T$Uv}nT%;n4OwfIP&0>vojfWUEkMoM_PjD8GKKK* zfW$O9FF>{0?PS%DIl3-j~%h^|Cdqn21nYKBy2($Cdsm?tj zLCmN|vNf-dV5E5ScsyqB@`wnSYO}{qI`fnQmT|Ra`z^~dx+HPqF6CN}mr~UU)2K-w ze^20Y`y$uZ*W;cf6A@03ASL$t`ug{O|M#&;cg=GRz~je{pFMl_)mLBL-Q9ih#TTD` z`f09j_L^_*MkjVx)!g9uI7d{sK?smI1%x8sJ zMC8p$D$6+TH!>M;xcRay*3#D#( zU^C`L;c!-T<>r8QdN$EcXh-pemnL@fP|LOJiBwAB&W3C-?cVT^Nk?!ctAwSb#5xFy zSU#9I9FNCkad(s{L9(u{gWu%-4~5B=w--abw?UGKNc=h?7*gR<81Acs;YPSGh$%o< z%v$n}9^us%^Sk@|z7C>FSlpw{-TS<2*L#mlkZ<3T!q(~|&WCwx52#Hck zqS92Uwcgy_-X9KADf`Q-Adc&*^De-@{KZe--rk!aRN7(ACf?fv6a%3nI!Gu*OYZ$% zn!t##>WAYJEfl)ySDQIK_ zK@yHqdRlDuUhM3L;*kPa}{u_bJB8!mnbb2Ls3Lb0K+6gi31u)r82^95*-1k7yE z%Z@l9ROdVZ-d$nkJhuXK*PIWDh?fL0hH6Y=#3y0vVBV zkM0M4tH&-PDmsk3Je4D|$?lmE*&jrp_3RseZ_|3BnLmR72HrZJJFJK8NO;aj&DlcEHIV z8OZfLhmV`24I$as+3rD{=(_STb;HbMEj{ZDOd0O3bq3pku;cu=a(6j57EdPi=8alx zuV);ro|aM(AR54#Q~;h=G&S{lWMD*Z<{z{wM$B|Cq1# z|M2hs!@v6{f6M)ts6uZB^-y9T{0hLjCdn}vTSU$`_#?w{0vVfpMgRe}?py>w6`<`D zL5t8fRnW1~t^7XNj~JVAGZWd9tS#d?#+M)If*0KhA98_{1h&lIp&x)V?`5kD^WUk^ zgYI4&RouM^pLF80yzImfr^3hsQIhE)iP6xc4*=+cu<+Z%Fz->YwMvaXDS2>j+|e^N zel9z0nFb1cKF?>M;r4><-5#vb*}&eTxBkXcDK-HQ;{ds?XpP3yjQc5FV>xOmXJSAynrOX+$+D}(r*SV*OF zL8mfL5Di$3T3uzDCtcR#V)1Byu~xSlOEs8>qd->=b0Q`UH+Z&g#bN}+IC%jO7IVy# z%;75_Xq>MsHG{emv8I?Rgv8`v!q(G{6iI|dIuE2!$}C0Zxs+MTEagJ?kM{HR<@MkA z?DF@%i>m?#+yMRH^2z0V6|)uIC;61B*m0exMP;p(pz2)B!rVQ?1wkmi9dP1MtNZikAK%~K-{0Mh`u&JF z91gEuy#hcPO)?(3D!JCV(9%D*x3`JOA}KeL%?J^0K}cz8Swsp;mb8!3d*5^dNFY^2 zo<4mF;P&=*tYAOXu&(QVzkmMx`6r)zlG2jED9P*V>v^7^K7IPhC!hTEr$4Q=e*XFA zPo6w^AS!8?q2mTC5D|BGckX_1agkT%>>ZECPK=p9uJ56EayvAT!`;| z_mgEg-n_ZHyFVmJLS!G-jdF{V@yzsbEilshBh4UYYs$c!JHsFQN9 ziE5FiTL`sG;{(#q@W_5Q$DMo3-CqzoP~F^N?&hc#*~&MXuOSE!$>YS+B%yH@gGum` z;VAoyKmUuvae4ae8C%Ll$xd3+?!phNhu3gN)TGFPYhbDC(3!O{bc(qLIZe~Mckk|x zhcM3rqOc5;6{2Y-4x6n|!s%f_S(keA?%mzpu?DU#t}d>xt2w9nZmIwAKmGjXxR@|h z5dm+uV?l(a@}hen#` z?kcq0l@CuEeB0-*n=u*@rOd~5m6V{CxtT{b(ERW-A1ODvTLc`Dy;k7v)1(oZ2*YJr z62BY|(qO_ELvs-d(O_8`-ETYhJkE9f11n^Ex;z-zPy~O)_3vBE5619~ z@4mV7N&AEk+C2gdU)VmV-$BN^X0Km_hzR=8m@<4y3P`vxjdBqmWfAgEqfBfUWDdBZpvnd*x6y|3h+IC&WBV-Jczy^T(mNhwT4Sc&8 zpRV7~1`l%gF$wR_QYwmX7((B??LIsS)Rv!tF>IsL9&G;dIbwy=o^8SMe*0)N0}yVy z)n%hiLNW+3Mmu02_nOsy0`!SL$QG~#^AR=;dsaGu{9v~26ui_a%+S!P4L{P=`1m8INDt# zpsI*d4>thGUy>7FimYo4!(*Foh4=Qt80uEvde5{U=hdT zF~WBHSz1Zp!7L)&tdhLAXz3&oo-ITZFr6=UyNO}79wpqgL=h#Ss#$cJ#&?j8F!MCl z^XU$wB0U_}2nWOHn%T8I=!gs~hx^Dk&*C+nV@5z0khd1|5tMVgWh~`3Liu1e##hcJ zFf$G$JVJqWT?bis(K%yXKcX4WDJ_3NyqFSgK;c}?C7oW%>>x(cQKPYXK)WR}p5XSAv3&i4kA~vso-b%%zl4lF(F(P#~Fz zBR+y#h#LvgN@r)hfh=uxkU?wxJc z_2Z8}-tBhz#T-U9M~aTCx_eeS=W3Qx?vKkae({SG05kjW!w;{nt_BN1e%5vU^2;w1 zW8LrfmzS4$w^B;}ye!Mj%}wHBfAmLxlwh{1u4|i+?6XvD$=l{z`*}yKT%GayiH{`3 zXTD=*II>}d4H53FtfHz{S62z!o#Keg7! zk00;%`)Qh5Z#~ja-KaPSRY|s}y!)^jUcGu{X4^^2iMqMDNe07Qz8vJBWX+sb@03kC z8hDB9_xt^RpEu8Y4rz}F5N2j6@QAvueq3L@dj0n1E$OQ4&87;;1RUpi-Y&uRaSeSV z^}N#Pa5$U}K56OCiK66=%lqV8yn6MD7 zpM7|Jef{p;;TOO7#phpqiOxFJo(qtOZN7XW88m%#=nU>Sq+w!6q0pp_xFci{_>YE zU%&qBv(G;I=##_EEuA3_VFiIO_iC}$D&(w_h2PxXC2udQLH5VhUc7oU%@fJxaD4UZ zmAiYmG!_)>_q%DDG;0BR`MIewQv6j6cuwv8jfjxxdj5M z0jHy=uux?V6aQ+6m8gDUd%ac2_d73k#(|??r+65wd`>CF^-@uvi<>ZFy5-;wKky@2nnPewm z$cGI=>n=+tbf#hY=N@T3QB?-5RWk_Q!#BI0jsEUBc3d-nn;UcX77wE9574o;cISs> z8!FD0X^a^gJA1pVTV~kP3!cBi2^aR0O@CUa4OG#t9|5um^A-!G&^$PTA{hC1nH0id zRGs7@Hu&;;htqbwn#iT=+Vg+MLA!NY@&xt>k&+c>Y)qp;iZ=eN-rOvA5SaWI0tA~& zQnRHp8`DS44!$k$sLYflFq(Nl;Tej=RtHV8Edhb;ID0I;DX|nYW~87Y%co`gtI@^> zlZMo;5%mNojY4z>i@6gnskZ#^2Y>MW=bt?FSlnDn?gepXCp6hw17op()`RBvT^pl`wfEwS#7CL~22OD!c2iptM=TCCo$iC&@q> zH$uH9+33J~7r%%;@(`!zp_zInr#JFMIq7`FsUv2)6&f#e0^+&dh@|_n@SukyBs^R| zfskNGk_J(_{?C&DaI4bldKm6zCgsHLl){=_eT4!Mj-SQj+n zdQvDtxIqYWAN@)D>VS-n@@x;dWJVeQP=Bwp2;w;G*wc<$R$2#Ax$#9G=#$VB4ZC>= z=;0#DU^oQmoYf!|(K?2P*UTMva4J(#DM|`0?6@99<#uJgJHGq;=EeQZ%XNAF#p@!w zdaS%X?&9kD`V+T%LZ-5VP*s8+a3iX_g*hXbMKa+D>}x?pxS7M+ZV^xn)g{cs15Sn@ zb(!^JA^-~90K&{kW*-~T8F@ISeird;(xwt1RTu%)i44jlI%^A;Pc0=uh$!x}Op|aH zrMWFjynJ2CQ`t$7poDP#?sq=E`_bVqetmblEJr^c7ZJ?!v@C?Q){Lu}g#ZEuRl+^t zGeaOk$ON>Yn#+*^(ga7WR!}IJ`#qHNw|X&SyKF6@A##)w5uRD(<5UIENMO9yTEkU} zs;9s_uw z!wF)-dJuCsmluB^78Wf`Z`g_97*w84EGQvUz#EsDJ3y%tp+K&VGn`x7{d&4^jlGW_Zn>Wj{sG?TyOVi{bkJ^iii^O?zL)nHdJbzuQ zrG@ambvJe)aoKE$`3wxREnCd?p1_J z)@B=notuc8^n$LM81L!nbBhsU!{(B0<5Js?ps6)MOj_nL6;a2^?#`D|f-q~a%<5Jm zM6&Z~i$CQQNB5`N0s#p(j4e6T$ac|VV?3u~1sWLT?loDMhDJ&kHiPhFfQIl|5m6~B zN~&7~QCshIIy|+LpXU*7u~By4d^<>V9lI=xy?Jwaaq;xYQ&sgaQ8^rZT^EU(TFUz9S#9F;&$hP?tDN^$FPn}o11w(|CyZd*C`@^vs zMedHrH@Ek9$2UL!)vv#P^OjO5V!n2mD;Pq+T0=ybnUqu4>o}K{lR_4iW-7GH4u`|8 zOnSM`67d=?)r+V%*7}nH;8B6*35dv4SWyC7FYvGWd@C>-aP~566E_JnE1XCVxU$t- zA=_64s9HoyDehiWSBE&<0`P=!MJb?)3q_PF#XP)%M7XJH$%&KIEJP+$>{M5)9u_q5 zIUMd$idL^w4a=g5m{j2rQHx42RN!72llIOuga;$raWRf;*`O|}$t{a;4OB$Bi+%Gq>nxB;Z%t#|10e`x@`!gH18lU<_<6gsTiYccwXrO-l2u5o>$+Gir7X3Y z_?+a>wIzCJ2Msej%IPBF5lrIg2xzK51(1ALP1iKYfsO3algB5L$GIKMknmQ!kqgp- z(;SoJRAF?uEhIT3-JLyXZE$E*SP@ObIH~BmPo6Az+S#IU3VySiCr?5_hg%^MOtVb0 z%U-LG$_{$j*pw1pH?+%2lE~ll+`=&aqKCf0ZSgSx@y3NggrJpcH+vh21o5OmeG>o? zMej-2?@A3soRXRyND#jzA}0?QsfZ9FG8*3&fyoE4Ro_V@tdiRV%x1XAtd@KYWwTNO zl<+VMRbgTud2Hpu2Ph$o=v~LrDFXRif@;G~i20R<(p!YExVm3AU$ zldC|00u@1cLa7!OVThPi83Z&MFOLUudU9rEgov_VmUPtEBdlSd&PH!y&Pd=B$UcNB zMFXL+Lfj)nrLDEy7d2w?ggYcfh9VOpRNTxUiFQf4&<&mtDrnx_r+k#KzZ!DmE3(Z+ z5;RBh52j^ZR7X}?R@l~z@pJ+RAj6EQ8K4kz&;FCq5@#|cXoAg9^)MiOU0_EQI#1Ea z=1t{oBRH}{yJGZ6u{!x$iClLWQ97>G1h1>pk>1E{=?#?`7ev!9;u&*GsIzwrjE?td zCv|WJn_w{*ax#XKr9417J)n`Agz!wn$}5E(aL>7mhOGJt*Y1uvyBcKA20&B7=bwHk zu&KI`2*RyX-D^Y$Vv!0;sgA&k2#FE~7xYZr=8S=en8FBISp;xf7~z1?HJY?{PEnHd zYH4IhA!v;78leo4K-G#>u?lxfoobjyo)+dt239C%3$AdJPzw}|H4t!yM4jme8XZ$O zeRb3oFrC6N?=SC;?~40cD~q!7A_QJBK`O&giyVOo1i9LJsY-YC1;nEJfJm4xwF*VN zOq4LX6*HQp3uV-5YuV3Hri!^W=Q4-N5W=?nP4SWtuT>dSX*Dz;bW#8@fus(&BD}2VmBtbXw9k%Uu~gz$QYc zA%qTuLjzJ`rC09eOVxl?l5V*-T|{h6?mW8CL7AsA?|~p!iUX|lo24G#tykPX+Fjkf zzCZlgFYkYQS2#`cUbU2>^TmGF9Yr#IZjHuhlqI@!^}6KlO~4kUOtRW41>#VZrB*OP z!6;EHzzEB>gqm2t(9DDyV0Z{&<|2?Zs3(euS2KiwN=}VtJ<|A~_#{ad1|n32z*I`w z;#7f#s&W!XtZU_At!B%i))%iYfA#oS*MluGm1oaC++Xf4FCSlgCbbIii{t(A5XV|Q z1eGpSv#16S&0;Nt3q=BJSY{jt;1MchxP>MKXi`gsS^D0zYB1?x3i%djbU2gfnV4HJ zPF3rG7+}dTOhge`BjfApUd^nO$t@|=C6j;7JNblp7CxSgtmsw;drsNb*v^>97-#qK zPH~Q`Q#swxBl|;fV<%&ilsdqUHYE6ZJiL9~!Uoirp~p zEF3XuNp&)50a`-^ut&%O%wC3~ea9w$L-K}gdLed?r2{}g2AMIS&Vbx(*GBcj9#J0^ zs~MLW@n$X3A37KeGBAxmNF&WWo3sc-SkK-_CJEz&QY^6{GfO9ES(dd0(oope-OR$h zF00oOjKS*bqpL^r#k{UZvc;imHEm>W3dbS=ZybP9!}mv^p+!SlS&f_WP4tXEldW>+-Xo{duj+Je4OOeDLLOf9vir zm!P{TG7tf?D57Bw&s^G57EU7bcXx-B5LMmnE>x$(VM*rA-EO+r?ZcXXm$RMr7pOrz zdi3af-}_#z_2%ZS0`oip_y_;s?|=H~r|b!y^E}Vf?s!<=yuQh0{^XNSe*EJfKY#xG zU;V3p_5c36e_QMN_V(RRe)5y&-}z1ew|95xjFowkqN`OZ9({0idwYkKcZd7c7M7q! zYpj_Y9RPir_3qwlZ9S>J^PTTpU0o&k7!ilV;a9)<6@X8_`#nkt(A@72hXh+?Q%)M4 zH9NCA8JM(OUtS4#cYF8w=b!I(yJcA(Klz|Fr3Qs%)-)U;#Nu)L_GZ0bSB86C*JDJK z;sDllRn=g*y}gf?;|w6X8ibpzizSsx2;EGmltP9Cdi{PQWH4LJ&XY5WPDKItT9RFxvsQf4?QJ{MkH%)j^j@2bM<;_Goa-UkgK!_?2++S~++hm%cJ zN)I;om1x$ZCYo^adpE6GPioDEesg97Py(W=>1k$YNTyOsA;sKkHHsj-!fH=5MEX4; zSv9RPK~Np;W&z2{)DA~(^;Jtc?thPHKBf22h^Wi@^2LindG_qXU72*|g_ZSQJY+F< zM8+FbiuLZnDx#$vmMZUV%T!dQlv1RyOfbtzPd7KU43N+B+@j%9B4<`uqk;?wLKct3 z+??yOzIt=_#fuvYEOo8!jFk{bw2U$*h1qUM(98g!<#R@aY@sUe&FcamJbrA|?&>XR zmRMZaak<-HlpxJvW~)023d%fB+@#dBqzFJMS_;BL=Ro-8D95*d{&N|lkwII+O;9D0 z8U}RGd(_dA%-836sQBQpgmh-VSI}BqreR=>gd!ov{^BvRCNmb&(ui1+mLY3~rKKaMVP_P8Ct@QKV75Z5 zL`WpRf&vblI3oI@v~OwQDN;i3_$i!04%R}mFtyAaTik1*s(eT=OlFVkQhkFQgI1KCv znD>;BA%2Y+1ZeEKGMsHjYdC)mAIts;ZWTGT0PB1)MN(P|G8+Ja@FnQyaqL150Fh8_V}ngJ1++~Q2) zA))nTVbIO0h-Pk04#BL2rdO+(G8xqgxZ4^gq+56r+kh6hxxMu@*0nCnF?}I7L&V{D z09({uMa|b*O~{LjebE8|Db-q4k=Kk%N407ej+p122qVlRAaj}%(Q=IoBD^|J4nx$M zf=2{17-&|bQ9GN6Kxo0t9AB3s5c51wWfGyeQ#eg!nhHe_F-^P6i_0R@bh-P^r=Pxg z`}LQ<`o-V<@!x{25As7J!T^2XVUxaTL_3tvHpM<7dT1(!+wOkh+OBn8|eJef4It14;xZ>O5Ut zRqj-#2xvI(m&3~!SF9^yy?UxoJ_tehs$Tbn({hyK{r&5&>+x`R^Y-@UrXE+QN-3Am zp7QaNi;q9$?%IiL9ktbO4=iR8$;_i#YxFZ+M6|HhiU8oHOr`Aa?hioBQz=EoODPbd zs4AtXx?Ah_%og}FZ#kkO!a;nVF*&o`r|taEmNAk~H*buD=*5gfwlj{>ihMn$Qlz)2 z+BzXPuT5^bGq6;nsc$pl-u;E<)u&H2;+={}A4*C_J%tdYdFBa`miq#mqnj!lH&V$OuRvnU>7mfJ>r{m}TlsPQI5?j%y7NN~_^1oi#B!lG%b6?kDGsS$hsm04sB{l+u{KA&5#OpC}}e zsO0aT1S$rv(Bx7Gpy)gZoZM-vSF>s+%XB!p1BzJU_GYPk@+iWlHLfl%Kl$*Z!`s7e z-hG)MnQXWz&<=EI`S+OunXrDQ-Q+RRk^~*SjGa_UDXkczYs~S(H+{NI*7S{-zG(me zAOJ~3K~#2nn_Yy4E^VpGnVl`vpu4$G7qlA`EfAz z!d97|JhM%T=*HMMVH{h&NHiPOGnsB|mX<;oCpOO*d;%wd@o~59n7xyJysvZOp+k`u zH=fgGk+UUYZ}t3xuaBn;TX9U0mec$UW}646@b>T;V;&6k!?hWcJZ>_eE>(@d;$Bya zxXpz6M7sd=-Z&BGau%LwaubVM>(i%CKm72+(Rv6#DJ9GY=r)98ymfZ8&pW(*`}R-& z^iO~Gv!C7H-{0Nc-QC^g@SZ(;_P2lh;pFfw*Et62`;c&RW zzkmJu_2uQ|4}S22{eC~12#q<}&RaHfPiq{_29Rkghr{8wiKuRvowFr+*04W*{1~lY zMO!abVXxo1zP|qS(@)*~{{Eh1cwAmyCNscT6nA%zbzPGqJ0dPGFF*L;gGY}ZJ%9fE z@#Dv@UcEXVk1t=o%u0)!o10vetE;QsZWj^P*N;E?`1#%ae~O4#uUDM=w?RMX7cj$K4$0kxWz^AeI9~d^= zR5G<4Kn5X_)izrTSpZbGTB}FEtk&w%o|WjtTHS)?UTduuLFq$ysHMj;VWaTJ3yKVw zbBR$t&v?db1g=Y^8FL7G2dnBLqZkbZdc&1%Q5P8R)pP48X0DR zOtflHl85hR)u=_WpLc;3^^jSFrIh1wom4@B z?qRDkYOvN-wd{Ar+}CO1srclU>IH?OPJ-EOa1rb2;>WZtOnCS2@y zyWM;|9?ksf`h#gIhx-Fbp=v1+(4rCc`0=CtuApUx>3+YPO7a=IV_H`KzyIaGUV&;+ zRLLpIWLn%@LVYGmenc)*cRI6y=nu~yS9dYUoF;vNR({42;hQV>h&T~>m zTdZ@ddf2OXw_IsMe?p*b6-TvOd_FTB<>a) zFQ|PQ`y9y-+1gbOMD9NKy0OVJ_0bZ_!lTcW9$s0T88S5#KZ9z7T*V6}z7DR~< zdWMH2T5@Acr_4N^lNu!jaJR}%K9Qu^?+(b1I&wu()|IfR-!@K+Scw7Jq zCBUT~=iMA0)s9n{JX^6vM7Izo-BF8$FUt~vQgkkpo0BHOx*8z0Rz@b|NPlG9m zMw9}n?*oHrfFt2 zomcf>xFctQ5TTi^tJS)eX;#&>9s~4tlw{FoHW&_u2(?U;dke7+E<%-wln86}xkV76 zMV%`Ju^NSDb(%`<`BKu8cTo(wuHC$wCmQV^{cr#1#mjg9{9pXbzx#LoTMrj$p=WIL zszpeo8=hr=-@q3@#Z3C{8A=~vxt6w?Ua_*jx zcvC6oqkVt)+iSLm$W{-ZER}v4H+%5x=*g{Q0ea(p6-Y=CuWw)e`cMC@h)<*j`S|hW z@BXgtA4jh?8OjQ&_=T02ecdg0um18U_3JO=c=Tlr5c5u0?x)?8AN~I0$B%D*_RGVU zzja?P-8{US2cnVfn2YF99GvBok3ag|-}(HfKZ%#GmgUafORcM|##pC)nJ;61#b+Nq z{{Hvxr#-(_C(LxI7=5zfjofB5X;JI_D-sF_Yq-g+6_}&^26^`-`yO{`pVl+jqBL ze_0Ajk!zzmV?h*o_v@SW?VAstKC9DeB0k)t! zs?Md%BC@kmE2c>qzTfQx0joMm7ObdBCjD=Mf+xj}4m;Lle{OM$>_Hc14oWGLnfWF> zrf7Ul*q$=|-v(Nl$GMNxP3IU+U5qx5$+MfHlesJIp!e3v4l=?UuL)Y|4cYp!DwUMw zxSG0jFse|3H1lcJi82W%X%!`oaQXt#-ONc`)|JbORrj;(yzEd^Y?c)+QFn476j+3I z`v(%1ic%8{HAj|FP(>oh608U-QtIj}Jg5{*MUQn2k5XncLr6%CXf$xrAWKJ@3S9ws zICH82-T14Ex2jKi2vrcuvMW<|QJ{+IM3quB6W;_-YJ|H5m1fC*gDE_g14vc55csRR zcejVBltVR%*iXBskDu0$vHbe0$ZU>)n?ooVw z@`m~td=ok~vrHAs*ICzfJsdyy;De7o`e;leJNlUw)Q7$Cpbf*;bz9e!p*W(ii0Z{-CPUG$p&`#l^+z*RS8ad6ReB z?RMV#FO8~Lck>?XCwX~!nX#_Nj~_q(=;N0!Uy4ZMd|20;n;Y{r)7IvB&YJpcsKmY@Fgr@#5lZxZQF@`R5*`e>BW z|N7Uze*OCOx~^~E-K3a3efsqJ`g+jFVpF9wY)b&86cM=Bh}M!mdp+e}w0CG6TUEMW znVT`A-J)%)9u5aG@;sGB#aIU|z*h3>vZQ<-?icsNJnw7u+u+{cg8=`t-?hUEkf_IYLf(lP4ATz@Ci0F9IlX<``~+G^hP|9z)vf zaUn!?ny0BQ2lv**xrazwi0h>DvtBLb&BDwpSl0v)vJdykru9t~&ikrntENtB?VI%T z_QSw-a=b^3MA)5&pttZ>SL{s%ZF%9gGlsPNPb`b45MUl1q||E1Zf@>?n0A<_l1T=oOqu6RQYEWGQg$gak#vhP zKfPb#^3nDG_0RsFi|Z%Qi9~o{n%AXf32L|>kN5ZYw?Q8ycki1frIgfh!r?y&nyV-Ce0eLv2u@56o)=$zfd#faE9G8s>opkrwPR+^Pvx{dT zBg?z9B3t^1y>a1fYoW3p))5Fx0FKSu$Ch$LL>xU%ou+F@kQS}W0HrA-GO5{uR3{kX zFrt;mH_p4vABC6)bE7o~pjG1_z*f6jZV$(=zI?INDv(b<{mwKMvsHTA6N&_ru_|Y{ zd2Vcqtk35d8f=rf4K$^huxH++<+h;l-NE72YYo$^o{e-zn|>S_^=RW4>500LQxW~` zljaa3oJAsCVYv4`X=xp1A&TcTGUp>xaUod)+z)Digjr)ti$)ldNf0WcnaUaoOKTAY zNXH1gxL6{^_56_2uissun_F(HX?DtTIVt z3J}%IQvqh^k_43$dZ0t|qFM-$D4G8Snz?}CR;xJ>o*hxJtZSYN0o2FK5=^EAz2rllosR+>;*GRc;tXweE{f>4rJfE3T@f_p@$h#-aAA&40=hXEBK z`^@d7hXbDHWgbEj6e&@PiY8?qm1|w6QXEAZCoDW-b<-k?yW2FC$zqidr&|VOz*#4R zSzSdSYlsv#Kd#tc$nD`?%C*c_A!Ri$%@aS%osSXG{T7F6dtMI9^0aT?Gvl^j**;=> zlVK>6EE{S?o*Rzi=1IIC(H0hj!x|UpXis zFaO-X`1yWa6cSFeuw`YHWjD+5FxAU=@uIwV1+6vKsFu!-AT%g$Up>8vaK#jM?du1zhT9?BL-_9N`N`vzJ0vW%9QVFlMy*8cXT#(! z_iw-Y^5@IvznRP)GgfjjUzbo5RdJZB&hvgM(;6pA>n%_2SQK}sH}3yZiX+5f2o(Z8 zYtcrmP7y}9YD!8JRTa`rim2=&4Dd23S}lPkI6vBzWQw0;!jVTrvtL07Tkli|t9zM> zoNtZy1!>qe{~u#-)@0dror$es?{m(*nK!etCe(l`00n@fNXVilKG9jknC=?-3q!jQX;9AMN$MsjKn|`rUD98mD3&0 zIeV|Q{IK>p_hbT8D}w=M-n#dmY40_D>-!8uqzps&ss~duV2)$LJZ%`{p};rz2_c4U zHSKK89me%-9z5vaA3axOEaSnTDyBk&DgY(bRAwfC5D5{IYHr(L5a(3wR>-))6oa&w z3G+I)n{G41rmmVMHfWSZdFWj#lG-rnON1U=h^m4+1ye&t6;U*fl_e#^q!L2qrgUKa z*!IXh)zI=$Gje;i}-sVSarkZ}umjmEq8pV;afi3@Rh zvpy+zfJweE^-$B>J54SI*YgRzxADxU-gdkMn=}+{5S5x<)buFhY2Z-W7z-Td&T4v; z!5faa6Ld}*Q30otclczM?MEi$Bj6gJ9A4=J64@ zBDudfpU*${xzD*ajsuX*%te6xd?E+06^h8--rhD^FcXoZqocRpddpAJ88f|NIL#c# zP#Fg0B@tn!>EOSaJ$m%WON4FP_I>aF^>wwgvp6`o-BnUWj9Up>Cb+qX_|5UcyV^zJ~`*rYURs=h(rvrj6RI-p;0Xo5u~Lj^DV2Kb@CvGeb19%f9UB5%o}8YZoV1$_6A__V2EdD#4j#XC zqp1P_dmc^olQ_aXHDPK;7qZZ<4PXwlAR69iO^j}c2aHh zA{!DBBZw+Ep|B_328Q0jEp4!@21aJtY|GN--|c{{sg0f5v~w2HPki$G_^*RqvaPW# z*TS9xmqQ|Aep=FeF#+Dp8%GfLh^30;dEl_m%@VHITc+Qc4}1F(Nb9b?r-+nN8Fbgv>uc z#35EOM$Cu+0ZCOEX=E%J@27*`$7M++Iy&zJf7H)kj~E>TbYR4v|GEDFWf{1P19M^seBB8tGO(6-&CZ&&MM(Y)B5J^SpPTQ{!~i?dZ$VTRgD zzuKK$kqEE6^!hix`Da7{G}cuUn0*+nuIdn3#q0N!Qm(2hgy=qX)3rjm6?^yI(a!Gt z;%ljX`-?nYeE#Lq@^cCS-mT>z&U^Cg?++p>Prexf=TO%^; z950ki;^u+eahMPvZSHiTj9)u#|Bg;{Y#PJhHUP}P+%69i8Ra{(iS`4g1Hb@~Llr7D z5HU3f0X6%)IjUkn;1F_70M2=b%q%+UFO`BDpb~*k>`{oCl|vxJ)oRtYtqb5DT-dK? z^OQPO1tJq8#sO-IszOMDU}6RsLWosJ-6k-iftpXm`#wbzFarcqWs@8jDN@e)kN)s$ z-+lgtw$Cxdr=NQAAN<-^R87_AZdf%VtAa7HyCO41Vl>l~0F9mGPUPan11AU@ci}Wr zG&AC6xm>;T&ig-n^X_W3aW|j5{@Y)YvTd!L)?D|Xui@n8XKmDnUASs1F0LVhk1D%Y` zfCzzbKHpuf)~W`8*$fRSFqAVFZ+j)f8M` z%3Ma3vt(5b8~`8z8UkbJGLmcm5{elR2mm8z6J|y;=GrmyKm{?y((t`Y>}FaR}Zc{rc^NmCQOn}+YK-FI*LXC z)Oc7A;{qF>-S`ZOzZUV{q=1A#Lpu|ysuH&V1Q-xa%uJFZXrNLS!$89dJU?Aq7REO4 zNAgCl7raaqF%*Mbmf5*n2!^V`$cHojld1+J;sHri1~b)6+z$J7J0%qndq%3NqfCLX zCQq$l(lhq(o{<4nvT#+X*h6HB!81396^M#cU|NB95&(&6tSg{#@FhtSGt8+A1R;bj zcT7x%(g}5N>DuMf)oEQfHPsmuky8>1Y+l1PKqf?@NC3c*R5j(&O{@Y*7G_J>11V&! zSX2Qanf8O_;nC(Rv1P~7x_J5-WV%}$M~sG|w}LUmSzVhMnC#BxKvq{(Ae_%;6exrM zsAvi*bzLP^HDzTaaDU|daZYi92$TfC43tz=6hu`rn3)I)Ih{$QC|Dec~p@C>~k?<1mD-&I}gVjE^a z(Z3LJzQyxp!HKi*@CkGfh~gCo{e{WiJo=9e3%2LBpLPQ1cp}|LJ<@<1_Lq z-uv&r@3+YRb+g%|lq&W~Ssovph#2U!#Ndg-H&KI;2E#yFeJWRR#*RSdklyX)6TgH(~Kdf(1jAgZd`-QD#K=$KF& z>W^L^Zrj$MrVJ`!exRmlx=rtV4r3_o39d&h>;HdSK; zBD{Y6+Wy`ip=s`O)+&ab-JSO6#9VV45RuJfv<##D8LxNTiS)5al<}8ooH@LIyX74% zn?*>~=hXobsLVGY56T2);<~lIDFEHSI#$P%AXTSy8hQUllH#&qN23Q5b3K}!b3f+{ zj-92$0`NQxBoEWBxcxc-7@QM`3Q-Uk6hF^O(ob*B@L!s~$N2!w#M`l0*x*DkXQ8g^ z0YuCxLNC1T`@;A_h}tuZU+=K$IAQ zAC&_m0uY#H0m%YBxD_~<<&?E;Tdeq`-KZ6WLS)F2w9mw>iUt8FP@tSit-5siN}EBl zR8`aW34oTXP1kj+<>t{5ua-+D+^pAq+s@{}KmbrATZZLoxmm3Y1AqYK{ky_tz<-}gjh&}7hcZx4^xjq+?~hvLj5HyyMC5P%WuI-Z;! zt=DTn1hAA65fPAx5L(s}1;Svz0LV#-r@m@r6vBx}S@EOWf~IE<9!r?22XN*D^MkV3 zwrWWOcjweA!z8XE;_=0@lnF%y!1|n!$w1BJp9X`NO{yWtFtD!cUVG_P15N^|OT^?_ zECA+0*iF;y?(9@m+}Yh-?Cv46p)xuLL)jXp21sVWq3XJHbh`ZTgZr<)_T~p4+<*A+ zq5H+fV)xR)!56;x`72j0Efxz``7tz81BMX7hxZ@+@z?$Yi8t#G0DkhPe)0>S|4f_O zCI+v4A%GD+`snZv{_v0bUi&_q1=IX@f9`MHxpVvegZr=TKN$c3AOJ~3K~yii^vbHs zIYHmc_g;AA^Dq2BEq(Kw-w?5!3^5ogF(F{rbumU!@iF+Osazb289w~rz5nLF{;w`x zI&juC0Pwz(8)9aD^ziVFAHMyU-+BJsckXT036N4R1`;@g`h|-5$)|4p_;X+Q^k<%Z z{`nVPeDNg_Go-d_bJnV=0gQTOy#JTq`JO>QU`0$hZzFeARh`Xdd;14J`{kd$ zdgbz!%NG&&_+;~!fA!LOxk*_OG3D&&9dv3}12fAhc~TCbkwLA$^VGA8*}UjW5IO48 zO7+Klzo@Eb;RxW?5ex-@Y}@NoRYDBj2QG5eu2SfbUav(#F3v!KaG<2{ZWvk-izK&i zC4UIpzPgJ@o3j8Ch*?UO5@jaDKp53x67dy+095e428hdcB`z0+Xn;@Nd3v$8_xhV} z%;vj~9zKjQrj*2>PwC>~A|kGqOU96LGQlKCLCq8mi5SYrzhEE*Q#7I=IWvd zh0A--JoC)q(L+(aaB%S8!Gjp9Dpn8gAD^5oQ%a_A`Rc*#CvNZV?xemGk(Xb7b=|fi z^0)rZ->#c_vso=yC(nQPrJQn>{F6WNlTSWzTXVW}`Qp*h(N}->_tl{WK4qvjG#kkX z5nOFUnXpX>5t|TI(U6dXmcb1IlQHhtdQ7kTjLG37L@O@uY>99htV|=S@t;2a3Z7|N zZs|>Ekb)hI|Cze~c$A^+Xn>%)l^C8J0%7DWot*7hFgja8fMwF{%xzL>mygovgSoV=rnI=Q zc=Fl#!DFh3ssHHSeXJtvA0)Hp&YgJuMwio0Kt4WRz5NzL>if)l2REPnY=SD+z_cUH zPH(ACiB&B`oXz*1dA5a60bbp^c=FmSaC%s&wX3x(m(}hro4)tzOX2uYOx+52wb;M? z#V_%Ex78daFRGmfufJ^VagCn zt_eVippIBo0YcSp*6+OokM8e)roii1U3~JH#kHG#tb|x7WYb8vP*K31oT}Jdnr-Cr zo|ZXKtpxk3J~GLHBNZGv5pOn|Sh<>tZ)E~7B4kD)Bx6EQO{PLa$;cO=nmTl#xO8xb z>L5fQVzmwtM6&`T1?R&?1T7#zUnfd{1Jm0llmHn)=Dsb;^H=rAb-GigIm!4o|434w ze1tN-0v5R{dj);0VN4;+G?!O=Gn$zJWAG}2XOd=S;PQfi;OakWL|H6SFar~#NEjhY zKMPDuW|~shV^GjatKDk;aCvm{@MQ1cVwSdwb=!4dW=TSA?-}zz94csI<~AOE ze9(AyIBa~+cy!+KO(TM-ij8+*?6=`|KKh*F^LI{-%sH<#btpqwK}8Y~=_hH1Os^5G z3^$eGBlN^#>a(`BSJk1_tvYFFp2=3Gk7nw-$D8)?8#R4{>PQib-V*{q5p}E?47#8t zoh#W!_qOl*yLazC_uO+fbfmWD zFA4!1dy%@{a5`>?Y9=BM8F7rHU$O&26=?)cddV^b27~o_J%l3Ld*xz8o6W}m>Gtj0 z&Q%ISLW+o0RZSPk+i$;p@7}$2*JjB(dyC7DT@^3^>m@te$v7rI9>t52+o^D(5fm2O zR5}6|N%{oryd3?=CGEF2aJ9d8@UVa2R-7ofl`usE9XQjmsv4pIhJ>Mt4Iry4G$9)h zQs5BxFKkuX`@ZkG4hIg(69-??+gE58$f5sy1-bZsKy zdNZE3mx7v^n^o^x7=TQ~KfI}29-?KhCgUj2F|jQ}<+1FY7^4}4Ksj^Y_bD3y#aLHW zR1yHlIXlg(Qzi6$PsHT&ct{ua_Eoe?Edh{WQ&+R5K|C3zugJUmHVH4sy{TZxoaA`fGNFPj&(2`vmhrn+*L7XjUFwmE zorDuKG6w=wWpHs#MgRgFw8+flM|#Xj-|Z7Y!JqK+Z{-;E#1hqzBLQngwHbJ2*AE?- zMHB`lT%s*dUsZ`wO_7LzeTgFl4=u=vUm`FQnlpCRK!#L_gbzPF6vfL|4k*Bnf9Xp< zf9)|55wV=I7`AP9da^t{UB3E*AAajw-|qV^gy=2#Lau-)s1F_;KK}Sk(A+f5lTY1J z^}c~2A(|kPh>|n(BOp>rDWyaNHel@4Y}G-Z60l~z^Yw53`J+cm!vG37C(l!uxkNc8poVCdE?s)^ zsV6@5?42i`csy2A8aWE?tj!?C>cPXq7hin!FTVBNlj9YIh#ay+v(Tq>a{B0t=RfyjpT7P0bwV^2XM_o{dgTXifpJ!oY;XSXef?$p;uk)fHM8FULRYYP z^yuWn`wvrZ26eYN{qmQ8MhxEn;G?!rU7!1eY>0?o|HfbZ%+G%5(cv=nk`n?1V+U5K zh{h0H71T^AY?z2pne_BzlQV=62-U$0+zOcfb4nU;oGdC<|{^sY^L2imI7)eQ$t7D%tT4Xs*15peBSlCnJmm82~g3 zQF!x>x9)#khblzfCVxHQ8i6a&VvB7s0kT~Wf9-t1|T=DKlWe# z7r!=N?0)^5-+Au2FTD7|OLbj8Jbciu+tqsg(?9i7Iq5(B@BgQ^6Ul0#qJjuIP_dPX zS0*zMP*o)}q#}OhT{5pDfVzk=fGSZCF+>7lL*n86?Z-Z$>PdH0=neo$BS{-w*m@@qfu^@0ySeAvvYl;rTy$vbb} z`|fw2f9tIe0&$@d?u4^|HzJW|at^s&t(_z4%iY7e=90EsJvLe_D5x)c#4+F9%Z2PY{o^YN9f)pEl( zc9^Cq>p8=C_V+V&(sOQg`hNcz%`YM{)7V8Ho98xZ{{nz*6^dXy3P4FF$D@qjf6lE> zBDpiE@40Af8V>rOgRj}PcAfip{M5ORxRWDr;cY^N(+@w4eVL)<1k}ra*1S zxlbVAb2Zaj2MAzkbxgT4Nty7{Q&02bPi`QBVZd~3Zrr*;aQ}tp8`TKQqoYGo-K}?e46TWwB?je2mrJ(I z@%wi#%=Y8{6|fA_RY(RZ0RmYxwd0f3y|;Iu7lm~_+yB(F@x~J?Y*bOmgam+kGbRKi zSNLED)(;A>Uy;t zFd*3oZ}GrmEHH@(q6-j%7J^Y{MVKrGFj3(UXz0L?GxffyXc%SH0X0@O0)S7ue|+mr z2Y$;}6;!o5TvIT_ZK)k6T>DrohN2=2GVTCG$Yv@kY-Flj<_6U}Vq6NYpoU7AOa*Lr zZ$8_tA-0(?MnD9WlzQpA(|NPAv$r>Eb`Kw(9<`^(+P(9`w;8w!F>v+x&6^k^lXDjb zjvTA#C{zQg=kt_P&RG&vRn=`;X69@L)VA#yGmkj0ZCR~g4N=id%G$`1$yNUVTumzy zquOG=LxGz*&So=4n$MfrP7|uCp4YLis;1&53aV;G0uzzcHzJZ!-*%*u`W{mj5ipe&zowMtgnpBa+Z>)`4a>kN_YUM#uOc`L>zo7!`atd zvXB`CWTqLP^Cz$4(P4%h&F&OZ9pcTODq1GyY1hg zXXOf}KjSMRLT8hX(dYX7tv759)Ppn_L(qZ_-=4{c>YBPy{~3Qj2Tq5xUf55}Pn(E_ zdQiCuqC=|^LAQjMS}fVLrXvc2Y!OVZ4u%Qz@lUThIUsbD#F@|MPQJNbucvN$y!q}*_v}nWX0zG#>(~8qMv$ZbIYu~+Iq;7=mcs8$2%&9{ zUwP#fKf}7Ny)e35E=TFAX~~8Hr<7iO_0`pC<)?S`>ea^|f7}mL%Cf5a`}?!m3;_Hj zJ^5{#@`^7xKa;XJZENxRzMs$M!~H4PZ2%OJrfF{7y7lnE12Y@x3lWi+$CXJ$v)OFC z-u?akx~^d;^7@4|P2*Gf{_*8C*qP*v6C%a;!h_H`sx*xk8tOS=qwrdCFO;N0SYiP3O0uAdbn;eehiBX?#wdq)$Ah#0|2o?cazNU7M4XIN|< zNJ=F&u9_<6tm<41P|(uF_#h!NF(H`=Be~lr!oa>wN~CC$ZEk0OfF?VoJc})K6yVIA z88`1}!6vT*5g{-jdWpsRe7z>u`vS+znhxJt&@Ikl?GhbkM#S4gKnbruu_iXPpW_*x zdrTkyIrHYB(0T47XlJa%_@f1pMtHW0N@sd$q^h7eBB0%)y3{hdUj|p6G(4D88@R4b z@o{Ge?zbLuILp7`&tG2{EoBHZ9}g{?gpgwh2tZsekC{V2H@F69;BgKz0g$oZ1quof zh*b@d&_}=-%ol?phnk25H(B)P8GPMk%piD$nWo9XL zWQanRbzbpe-dIkkP=zQ6fzVe|q2dAq!JVBQ)eKv1AW&0gVv2`{hgYv$_RgLooTt9u zAK_H)(1rpf3>MbTW~w&Cd1J(IF1Q(Dxbx#MTaSAd!abhJ(4Z*eZ0>~M?A|UL)i)?3 zGIxEC98Jgv000b))C@$4h$$K>B7XGf^!WINmtK7N%Rl?2AODFjEOr{RfzjIt3=a>F z|M-u;@x~ADwj1HlsDdE_kYO-0RS8%F=;^ZmH-G+}*I$3*mwxf@-n#V|fcY2#0H|?J zl*CjNApG_}|J|mUKl}6(#2tWw5rWlK9jgi~q?`@FFs|3Vh#eeUR0Hp}K~@ok$ZTpNK%oM_oHGrK0cJpir>Cp0eeF+Pe)-it zF+ebgDH$QFq0{1k8W<|T&U`kT?H(Ll&W0i;Kx%AYBEZBcnHigz06C;Sg9Jnc%nCWH zJBkp(X48M~uU#A{crvDzxc&p_{C?R{Zw7=JWQu47uHr)Gh{$2KsXN?vP9-A7C8_G zZ)GuWS9aL~XBZxR`5}NK>C{~jA(~n?bErQ;p^rqwh?G_Q#TY~HIX|L#`4Av-$nH^u zfSk!ui`bKMi{j8BMIcolXF$iZA}}GLRaK;*;%y@sfch?7fvAZT(Fj9`9x4C^GdVf_ zaJ@XebaD6Q^$V+$`#=4qXT$*Tma2f62z>DVqy4?+qx*-Tkdr7fhX7zmBxQ~g3CUY$ zfK~=TxfC5FtHXbZoX60OICB_6nZetI5KfLy{*V9V|NMXd)gN{_VXQW7*SCEYsu;sM zbx34t0JK@QtK}MXCw1`p5AOYU|Ls3Tvbt`LPma~Bu9}pxc4@uZRB^6mhYwEw+5h%i zs=4c1HKxK74gcStKmXlte}B0;idC#gvatxG5`!?Ffsgaz%h=Z;jP6q3y zCK@J3aWV&?vZ<{Tn#%Qk|eUkkkME{7?l7LK(A&%5TaTV zurQ01)6tuEcTyIl6yud=KAmZ7y@&}k*lhv znnH|bj#3Jy5SyxP+XRXLA;xaine}xYLkMl#_E;45{OV$iNR*0rh(z>~#GFVhZ`$s3 z1!h@IMAU)p>RS{5jR*_`3A2MU#Dh#DqUeNK%qe9+1hgz!6ueYIPSQe@2OKmwo{^(u z^Vr(}D3GcejTq5$Dd{I9sG||~k|@y@Tw^6%*xEz?4l{!?QioNnLI{Hx*cqVEIEX#5 z`QnKRlp@hquxJ`xkKf>6t|m8rI9|~RA{meFzf7N_$MwDr4M0lE!B4`&n_i6eISv_@POm8 zoS2IVj&B&U?z6C_|AnB)CF1~y9IG*1Hr3mh-idFOeCtrRR|%(s$!y?a}voa&ewB z(qN842vrr^u5a7c@r6pLAcIF#^J_lq#&K)}4t~Se3{JdBO6ln6hypvuh?#li8Nnil z3ya0>ypfz0VcJFZTdH0%pMbuHhwJOt*B4Cw???Xp^@Y*m*9jFMN2~~qh9%}SnnfZR zjX4l`NLLM3aFMdyI;7z^e{OTmOgwpr>o*aHK&x z$e;izWkAlU~S_>PVteK){yKfH5RB5ir24D58Jzr{8+*jk{m@60olMnMDO<$7ZP?pYMIsc3(;hzzEEQ_Xkh6k{!h zKw*gU6iE^B!~6Gt@W$P?4>^&Vne~s~x_R;7LSUNBXPedf@OXLn=+SDuzIf^2sXMoj zfXO zm1$;T;;2|F-AgnVI5q7?;r!iJBRym24v{7g)17#yN%g7@WAmS1h zpwECYAQ-Bkh>)X3K9}WKnitK5${T8 zDfJUoi;)pYMHmr5JiajnA_n9T8HqArQ_UF_sm?+OJ!aJ+!w91-wV`UGLwged)Rf_D zUvb;k8bdc2-!R%+05C-JsB!YA4r|q6abA@z_LN3Fu|l_sh`@!OyqIx9kU=Sew|VIp zLV4aeyhygK^PrEsnwj^n5n!U>1H}PvV+9=|^$}20{tIA;1*|dbNB5Ef4mJTs%Khmh zIC%uDAvW`CH#aGxu|d}`tR8$cyZS`JY(@r*W?<@(H5rCjt5^nsC?DQ^=?Y@pyK4If zz4cis6B995MpN%im@x~GCSWt;W_K?m1T!^qj6^L25E2D5tJ%lvv_^%K!_E8mxJ|jn z`r^Uj!lk}l^ZGb|_EqfTyt#6e>9_$!y+k9x_r)xjjCVYu7R*3K@YZ zMQXx&XP4HSy4Q4aSYNne^SMIKlpA2^Fe;-%jtdq503ZNKL_t*a`Q%Z&McGvSk#EK)@vh5dhSOb*Ka(%xts;gACiP441j|f~grOqJ!eahtEo`=7NKfF+pQww z0q-0h9v_{YoSdxY^S#4v^X^-3f@6(oYPCsS3NgmE&wc9JWCR?I)@>FOLtr(MO}9ywk=QxDP{AF6qbn+7Ljta12CcKmg2TVE`1GDlQhYtgu>bQp$pq!Hgg$F%QQb%!`Z$NGJ;6cCN7F zBLJFtM5;j1Oor4$z`~EpVa7akTq?fMN?1E)#Q>h;idhEpJ=G_PG{zk|*j4fl+?3Kv z(-w?LL);AjA__KyF2o}qvlIddX;26q3oageGcyd9d8~?_jpVnUXzLn=(CA!cVfv{_ z36;ha)JhECB?TIs8v79VIsYOP=^g+ulQDt!gyLL5(995dXy>@&nB+1eA%bhBc^<*2 zAmAR55DbM7|NHmvuhyq(83`m8suNW>Iav?n zM7(tA5&*pa-g`{cwe9P#zy8!yPfq@kE0@gJR%FrD_lYt7?`Uq3XH}N{qpyp!K@_=-~q~W#&M5vO7Fe*-XHz(9~~VZ#uyRs&Ye5YJoC&@cK5CxnaS6`{&g==)OAfn zIp-TUZhZ0cKbCVg14cHnDpZoq6a@_;b5&)@ig2=8&KJ9z%_d1sNr;F-%-X9ennzm- zpdwl|b$MQvjXb_LM62r<0;%eJKEH6VMQykt&&W@GbpjN|3Aoibem0#C2%B zYd17e5J0ndX~`l30x_uSrrRI_2WDgM9N17YR@KdBlXITWcg+gu53y235wHx53t)rgG&)Zpm&cyC_Ukpv~@M8pBu{kRnKP*fls zfp2OlrLOD6L;#UMR24Az-5R8-6nv16TQVv`k%=#`AO)XZ$cqGJRiqBaa>AcGkSm|7r1L zq*U_rM>HhVEQV-Gif-#Yu?C}3=>`BX^_uOb+eqrsj12Khe=+km@ zaPmxXddC6$xez#tsl0YpS?kQtUt1V0MK~~11mh5x1Qc9=d=2?IB6$}u!mHEXJiDsAerWNh0uaL__>Sjw0F!N4Jgm_@q2=YTP?Yi6lv z+qUa=W4Tuev-t(UGbiS{%;n*6Nr`=C!A8s`q7v41MPO(akrb6;CGO4r%n3ytHXAhc zBBEYiK~zwY(ppy)AEGy#Zp$-w2_`|()>)3xo+_LT0?wr$=b|e(+jJcb_wJ3I3B;ls9$Qbr@UAMC{U$2)w1k$$c&dzLqZxNX4I!fx+tJSLQ&C!qp<@JUFo7M^`oQX)w=a1!Aw`K zUj5Zy{mK)!Zz2{6xAjT;-uv%;^{fBt*6o`y;*(E4{ty50f9m?ZVp7HGPrm+VzyAkc z?|V=62+97FfAE!q3r#>HL;?^=BAq)j1UfuAIzBl~Swo=wckbN0 zc%iAPC?3)y5MW)^%q*QcqHTYF@k_t>_by%DGgAXNK0f{0pML%2mtW6WG%IsFIa&Vc zpZ@9J|JAQ_nb@~ z^z78qH0JO>-5=n9FB$d}Dj1{lh9Nqz6wR#QM4b5|OI9?8PN5^R$HFXb(Gz19RQ3W5 z4LAT(S?uk`N1Lnx0LvKi@XoRK>x^ms#j4u(JyZDpi!Xog`!9x20l>X`_hXDA3ZjTK zpD$E3XJHOq*O?&^W=Szd$8B-x-vD9ov46iY1%FncJ!NN?e?lf?QDF|iLqqYGs({C zhvIR&3mFokuLNSEax=XFTeKalWOal9f*E{X1_Vt&0ae_NuGeb>BO-M&gR?lG=@J^B zslqrNa{dj&d$u~i(>Q4wFnv7II*aA>ICzqx08hJQN zOgSD7&K$066JN1YAMHJpbGK-FFTAROh-iVVU!IU8jE0Y0qRabDlGWZUZ(7Z1bMnz1 z^#ZjZK~V<-0V4n)ww=Ax%sa6O{if0W=#`gK{Z@1R`oZH*SM^S^n1<4>GZPO_PP1ka zfDp_I3SWT$EcY4A&;Z3M(|Ucnr*?AMzW4Ggv&}}?)*LQgziG|vs5dBXkOLOcVd!M)l|?- zQr~YXkSv<8(hv{=1J3|#y?Ohuz85zcxi{?%L1v4qpLuRR+v`-o$V$|`t$?WNh!h?{ zG@c^?C=d<3)H7pQUc%rQ5L84108=PZ1Rs0Een?fHC1pU$>O=Hs#k7KJ^0?2pQmH&I z5AEMGU2@~fJQt^yqhkp&%f$|he7e!5%XkD-mc1Z4?ln~(Q%{3Y$$UU3OwG zHO(R%Le(@?U0a|~*BHr{G$Bfsc}0?>Uni%~Vv1%aIbkHKxzGLU@4j_-{HV>zz%K3| zTspXfJy13l;6P{=I5H6uH?w&i;tXR`$7VLWbmelG)%(qyE5yATDhl(up4GZj8>Kj_ ztOf{%!I7C1ESLmi21HY>RI=u^o@ye=l5#(>GiD(efKxoHssbyhA!gOUp^AYCm?#ai z7Yas!MRLv(Vq|7SFhgQgF$Bya2*4agH0Q)zBeKKU00u_AVj(}dIBG-N#!4A+QmLQ3 zO;uA)2BxJfR<_vx&)J(kTXG%ufw`Qjy6aneUw{UP23LTqNQyEknX)($l0&j-#e{5m z6cgjG^L_O1_=Cmyps_~wjH!`G#Ymz+LL$LU1VIo4h_xHNy?)DGs?N#G`H-j1t@oOu zsi{CT-n*}E)u~gNdGh=+^Ox)OI)o~#Rc{#Kw4mbY#7yiHRB_;k57G=V>8UdF0+^OH zQB}F;{U1#4DSyK~_MtitAGv7yql;0QlMQlry56f_CI+eK{XU}X1@Mu~)1rpM#jgC& z-@V^P^iKh$)bS=LQcqE2aW#fSL_hL^!fm4GiGwI*;eHKu5_&mcX&+TB? zDJAeGu?XO!C-gil&v3~t&O`8`_%i0<8$rYe4<0O+OA!fN10+=)_Czk3C_cUO`TWY2 zD{sH`RtO=9EEWq9Z$UZeIboox%jL2(YIiA}Oh?`Ws_f~Q+3`mQwa4Re*L6+Pcuyom zY?@}ZS}}8s@dq!yI2nIzcW<|CTL5_Lt+&4Sz3(+m;|Z8gKmD}lQ99gamb*XQzI}VS zT>kW@KYj7V7au-+Sl2ZohEShBe||EVlomk!s)R*NN)9OzjYgvfhY!p9RWs(0QjU97 zbtP+wF?yz|CwLCkK~l!SXS4Zoxg_TKY@4ZaZ38AmaL8tNclX-0Ym>=jXJ=<;XNNdb z0X+58Q%^kcL$(mRCll{!NG?TLeN?^ciKC)U z6i_rv)v@LzDoG4ADF`4i&ZIWkU(2f1f6b+TP z=yL9-WCo@TuiH0cRAr8 z5mY3m)W)vTrXc&n-d`?SVvxMcsF;&5kWox2Kmf=zEQJR{HEBwcgeuCsew1tXAtQBK zjJX+QP}fXUV5m^I>7wkTa{IGhEF~o(Ai(K#y0yLK@h~xkq)rpHzw(i1-ang9L=zxB^UQk}C#ygI^RK@C`de)@ zNkrV-yZ`X(&wuMTe&e$hgKBc$3IPF0RgjoWA0Ds%=zsq||KQ*M+w$(2Lm{zM!1)T6Prnt2=zi{Eak*ahGkqIX=e*CeE|KUIUPs|w8 zngciF(MUqBiFkK+t7)pX?Ep+g&=OdzxM^x40~2ZLAld?;hzP**fA`H8&5TrSHXD8V zQ@`}puY5I0#~hAM7GM6eKmYgt?%%}Jav<0&G?-E(szm@Hotzx6+Xdm&&^Yk^-qyeT zt^Z*<9{ugt{~jQy0w9OFMz(6?_Fuf&QV7&E&8n3USYuLc!8(8r0ICW_l4=63%W70? z#lYLnW=Hi@f7tw2L@-b=G&2QcRD_WK1UR?^5n)b(HdXaXgIr3LgK;_Pa7Lkqx;fZw znE|AfVvGX8la&ZP%gqGLtw67Ur_?j$vJsM`h-idu+d&V{dB#=mv;|dFQzDXNw7I4i zY89S%$W^Z1DFvO8qYo-7AO=JxtP}tQkaFUKhw6w7Kn+9~5-+N~kESk`G3&WhrCi6XO7fe>0;c7vX8UO^ra@s5?f&lXQ3%gG}y?*oc z(CNrPbzMuhc=f@Xx8B*h{P_IpW=W^?J<(ku`gnn0=yk;$q+#tML{0S%c2MJOR8Rz=X{ zIVEbK5<*ZFuId=Z(+hJvIFXZgNmDvHr1|y;Q8ZZy7#IV`Hg%~5R6tD#ijCsEL}9QKnnYd-XF&N^$7R&m~K)IHrm@!G7p? zP);rwYUe3I)zYPRPy|PPyk!LS}fj6L}iWJRI z%`~mLHm(mI9M5;B)u<+j3Ls!zOmV#ip&Qq)oZHzyxP6e?I3A4;j}GqKn_s$g>Ge0? zuE&$t-+Jrur=C2&e^D5#acxY($ zC+)J;$bs%G9&8`py?*}6JWPlf&1wjNLd8%u^|-D_RBer>^ZC|jYdYSVR?~nCI1aSe zNIQed9B!x$P*E~3~~-58cjKxP!vQUNW@tVtOOfSlYsB_Fn= zBt(P&RS3}(x-O;U8Ms}H2uNI&^g&etbC+HavFE5YM2s=^ofiHHM-d*cc^ZB`^tVe; zzaVO*z&u;IKAbR2*BF}aQYd{!GKW9t&|SCOXdGsizuMa8Gmdrw`C-QUl6mcrLo#IE1s04k@Bh7? zT^!&y9m;@P=BldNwvC+-1^{T9W_x?vDFPkyvP~Hx0>F4Yp3mow&==qU08A99ck0x< zt{etvFEPyLb0^IN0M%4gRns&!fRY_kYnsL(&e3Re<;s;;Uwzfz*LS}29ZB6Y&pflW zwRP{_y&wPNmHYSa`@ovnbTk?{&44$B=YY)k`s=TM=}TYIL8`3Z{k`wKdF|Sj)E~#k zM|~rWP3Bz*S(zCyrIcdqn1g1@f?Pa09*>>)RaK9Uju3G^pQ~BmBqIK~nJ)qG*kg}1 zqfuSg7cX8MjYcAZflWkviiUIN&VBZ?pY{7zRRu&TC8A7TDdLuihk93Ps71sxtPzm` z-6-XjeQF!JgMr3*fVpUNk;Ara4-O8THqbl8n<7^fxQ;QdRx39V#cq^|GPCtsyr+{D zKvvDLPhA%eNMYY!%MkMtoRX%La$_si!muAaB|_C{b_(#?j~R%`nI=RPO=Id5YKtkR z1b|G`iTHk`pgm=YFWOhscE~~eGwl^3>cCj{D4UnRYvw0JQqU-JaClf%)YP@6WQ3M- zM|bpOa|2Hqair7+zz6||sDYt@^||YgW}Go)<;9&bbVCb+#gGl2qNry{VslujAYjAq z4(-O^Pe2UN*FAuFb9+PJ;nd~l${RZ?z-YcWm?x-$ndE{rg=hxWRCQnmLJ<=~QEiti zX0Getp`+qYTHh&44F${)5?Gs}(+-KLnXy?_RZPGHh)^>%RhZOOt45X-*%ZVZs`N8Z zV)`Ign?(Wy!A6tubT;9@W+Ey83W^ewKwnu!rU|M&Ps zfl&bO?+noQm~;8_X&t2V|J@50 zx2qZvb-7xN8dHQAqlk4~*LB@`y>`|THH$H&*jHn`11yFB< ziY4Y#93ZC*v5Z<$CSXMv1YK;XR8FzyZV#Sv{x<4e9t3*5J%ge`A2dEAK*LY0=UJ~q zuDi)&9;}XLmMlk5$!o{FloXdTq7tpXuo6=+mXfA4?%o&V!c{`5yb zejAZul&YRR_xv|M_@Vbc{@4|OIBKdYh$<$}IYbsS=H|}b#UKCY|Mtay{hODs>=X2Pf~`c~?YK%`_c6xJPI}`l(NSqOKV!5dmOAQY2*Hiex@(9v)y!iUvtUx@g)W zMgm2!KmmZT3V>>0l-pb3cs!lYW=u?kDFRV=`Q=x>_P5V{{_~$5jmK)7Qm3&a)=BNX zch%89-+xL<7^=~@4uK4mkP&dbTA~RPpvTP2+%y1KUDtQ-9NfBn*MJbnEIt1CLhAse#&&c%9Yaw; zKrl-nQdRp;zYn%{Z@={7;n9OxRdZZTtXszi4;LqKz1n&5eKg(@BLE`+0s~J{aCUMI zW*`QnfJk7_wJl~wC$OZ+paSHW0!jkiyLe@G?dowghGfC_-J}H8nslg1owl7oO~4Xp zL_uc8ib0(?r zqmf`ZY-39}X2uvRP#{^wHKHlx67tf{s0b2fnS?IJPm3Y1b@wNWz@R9;!Ma6Oy31t@+n^+laS zm}6r&i_fqL|D0t-EUr<}j)F-IJsejl9Kfb_8W#i0Sz4xs=%f{>eUl9$5(7ktx%-Nl z_X0(WDz%0XxT)%TvfGU7X4*`qlQzk_ckjg{qB?ITvt}F=uUxuJNOe_RzkYptdnam4 zChy$3b#U_F13S;sxC)aRn*bF6BM?A>W<3Xq@>)3UVox5^jw%7281xH*3#@Tq@aM+!1ZO!MS`P4?C+G)ZFnV}1cQ<&^d zrA<&7G@t<>0M=*$fV|8R06+orD%?dnuKBpFLbaAPDr%>`GciJu#LOva03a_q76UWs zB8ZX#6Eg>G*AB`tvk?alARr)25gXbcT$Kx_%<*HQ`Ld7w)brWtr{hpt`{%VpGLQu7r zUjET5ul}S+jwcn>b^YNFe{?*ay1`s57TzJsiI^RvgFdr(wOV=4rO9OCo?hFwi^YNn z`=%5)^n&~ozp_`9atHVpsLYP?*sPG#Qx+OORs)CtSRH-VO6yl&l5sTQ@c%9b1-v7ekg5_a0KnJW&r~dUq z>nmVMdG>#o%XQbq5XeJUrrA;e03ZNKL_t*hF}9*$nz9&+6ulUNT!^SDzAdfm+AMcz z8;wTHyjm<>2z@eBO5Se_GQqUhzVMC2f&DXKtJV^nm1 z3k(svE{SON&k@nnPzI^x1LYk=ItQ|SDz$TPJn9MiLyXC?qk7f~oqmL&F&z5*<#9G= z_7%Xxo1U?*|AyxswYn73}KvWZ&R2A2Cc%I&MGYaqhH)Mci8gcc zsMP)9$1e(uA^5;J}*5L@Gw`MyTMJ zuP>#i6sgSZMrj9ykeiu*M3aYKJY!$ZC}+|6;iatK%#;t$L_v$5OFr`6coP@_z(Lx1 zQoVTb;=6Z#Y=!_xfFcP@hy$3pb0SFq`QnAWfA-l=e)-S7;?;p>cyzq{;mbe1c=5u$ z`}eypMIitpg9{fged?1Rt1CnkWb=eqUx-4@pZUxu-nw=7=%_=cq$J2G zj7E*>i8JZ}qL?xT5e4GcUcdE!fB7r_=68SV!i8O`8sK1^Z->y!5QyR6;J!+%YYug| zdgTJ65&`9=5l%%H>KeAUrf=wNG-4zUm56wL^+RBATWgKkI)+0hYa zw{j3B_ns0Bv`7OD(NdD-j0bfMGJ7Ef$MWQ!P)H zh&5rAL@!^yeDD5!6kfCS#&OVQArwXpYUiR|>ovKYgSksR#q&KS>fX4$PhYC_@k z>YKk#-bZIxU+HIV&S9cV`ZE}h^|^sV7kN1TUW&w1V20oFFXqw88S*#}V)c(;r?AoC zK74q!%pvOl^*{>0KM|U*{sPE`rVrkJt+9>*SWV1}c=R?2a6DE_fjM>U^8Ve?V~-P8 zs@XX;6$CUjKw4Fyxpe8=d=?K6-+ld+Nm}s9!%<2B;o)1ajrPukW~#&{LYBxtMG#QT z6i5xl8_VUU*?m4LfS~bYlBQd$RTow(NNbhu?yYwYus(P5S-_x1h2S!25=$6BfsGIp z5RDAl#bUKs)l?2Q8V7&j$u5xc=c#`FiIW96pxQ=wH$HfzNi_9 z*K+|N14F`YMbfIJj>F{2)yaIe6}!9t@b_`GAj8l!f(EF_Xh~Ezb$pvQLIkR%EVo!E z7itmllr+rTVF3U zK{PKab1&4Vi`=N1A$ac*OJGhy;3G^Xm7^pkmQq?Q_nX;tK2uH*Fp93*^~rL%TCY`U zKArDQw%f&W49)i59x-0Hc<$4`_Rmn$k6wCt*)8H>eD;@~t)?|i0*nb7G=`j&#=un= z)l=<+s#Zc+;tEw-S-*!@)XNW48L8EDaB^r-cAlC6k0#^MtR7cf&t{WR zQ_r`ysG+dOU89rhGu7Cx*Q4F}_{t8}5RVZ=BXo=b0jMm(L^+rO05zB(jssPU1c3qr zCZLp5HHnC0>U9G|l+@5Hsfwtmc1ch{4KRcpy98n;Ad(Gx2&W_=fGG;N^J%_iCHC+K zm;oWHXp#<#?fbch<>G4{*isuh$t50Xn#t{;4=Ac?2%(1wJbO_PfjyFk;6_qZJq@sU z#buj1G@hkP9srOVq#oY#Mqp;40z~-myN)q3sbq#nI)+l#Z98T%4mV8 z0L~hga-%crUIwQ#N_jLQZzs7K z$r*6g$C*U5%#sIV2UsfhHM|ZX7=SbU3HDuB+)Hy5!py*=7a8C8=PMHvk(e5ih_QF( z4&(K@Td&uX$)t>2RZ|xa4-dPpGec*lolIuu&!4xRJVE=c;Xd>66awPcajdF{0RYsY z0su!O>#FjeIjW~<>kzT7>+9FAsfuUhyU7KB5JIRc3IWaL+uNb8qe$vW24ajQ{njry z9*>`T>M88EcrnHzdv==EAcS!F^5su|`qNjgTp{;9K{cl1hld&y0B~Iu331`^#9I+* zn&#%soAsy}kH@3Y2mn0KX=i8Wlb`$qBIg8K#oe8KLp9r^n*jilAy8e{WgfKWzZym_ ztd9f~>c%3jXLJe&EEz@QsOM%aZ@DbNLuYBYNR{Q-7w96fUMDId5c@#9@US#WF%r@E6JoxXhuo3jWMZWV0FT-KmjqSq)syb8%q=EIvN1*DwY}glKFBqw^h)e zZTS`eV4&jlx^C!vd1+G;18g`Z0RRF54&ZhDkh4Ql?pbZb3~nXF*3g*+4Lm}Ol9*X7 zF;i7@$kA>vGe(@v#(TTldt1|klatQGykBn5p^_)3stVj>NYKORaxB11L_?^E*t|cE468A0Acxr>{soU;2pGj4X+S_jkiIr5bJ`OV zqBpJ1FN{i(IP~37ak$?r;t1IyNI_SLa(3JHJbdEg?=_PoZAg_fM!6|WNkwF}T8YSV zx%8{1l-jmkw{=w!B04$ivZd9!4fBcD_l%|inZS%gUr*XwPo@9>NrZq^y$yhIARy9C zXY*<{o2J-Jwpa|+EFck^n3)(erPwv2rmm}YwNOolOzOp@lu{>FGqXtQgN;};QwM3- zL$w?_9OW%wuADs;=FOk?J=*$Q*IsinBzHE6X{hsv2sxoC-$(nSSQ82iW~C5mXgi2# zXK$B~`VIyfV<#!0HN=D_;L$7)Rl9lf##g_JDdy}LL_RrQwrzZPe3Try1{8_Ad%Jsk zJEqCY1YD<>i3vs0d!D*6omLMY9;Xx#IfUlzw{E#A?(Oft@%BAp#*7)McWy;uRrvlt zygc98`rY6C9i+zJIYuQQNrHfE)~#1JZd_k3()BA>uU@-AY{l(FbbfxRD&E=I%9_ud zM2;6HY7mHXrZ5LE(#(}-V1UE`8Uo&U;@U?(^1*Mu@crenno)|9qTIfHKLmQ?&0Amn z%fA|ps@Zh? z5+0_$yL*=KKGPF(%o#ut+2vqoX9w{eQ~)Q;S9Llb1HsH{Ac)9Z4TJe&D&kIC(O~PV z(Q|dX&xaYP2n5PnXaImo-3vsu3+}FSH@ZpLm zOlR{ieBsys^iTh<6q6>MOh!*Vef_)N{nj7;;s5$afApWnu@c0Km z`2Ku8{lXVMclXYN|K~5h_KoLWI6CgywTM7nH>&DsDLsM)kV$PBnZe9iEYyHu1WGC? zguuWEf`BT@1PC9buEleM5n=(HA%+ zxH!84@i@F}$q*%fv&i)Z7v}2d|K@sw$$ONzLPk;PryR zOt=cz$12>VauQ4=6O#mK4Uqyy_7k(m_(P zBuPw(Jl&TJH9=g&lNMIZ-nk}JDaA0YV2gCjwiB!YzF1#+>>}?^bQ#xg-&x`sWQ{Gg zi<6ovYAOa`G80n+?3+C}Wf~A#h0qX>tEveGibUSj*bJkZs33uuatMTIq8NDTEwEJ> zPza4ERCNe~QAx3j0-SSoO^pzdf*V;g3xS=%L`=;RP;kc*i3m1XS3l=4GXM-Bq|}y^ zi$!%GxY*1R?r}mL_iRfi6E~-nlUGkM>R2!88}aUKe=*C&+7D05Rur6IDz_9X<6+$7 z4L!OLST5<^AS^IgILgV|=cx_7i+)6T4BpS6p9CG;=oFAtp0R8b&S>1DPdD5_V2@iB zKqsG%U;ufi3Jktf4@mmTMN}1f3Xwb{%Y1eYbOC_Z!)GndHYl@D`#O#}@IY!dolX~v zMKS>Z?XPSqpqTx=yqS^mgkU{>>K7LwqNJ)3#57QN^UXJ>)9D94`2ON8_+!5K;)}<} z$6mX%wKKbL>0+p>uIt1!X#_$FjGU9S%YR}TFqm0NX|Y&Lr_((1*tcl3oc#v?j>ZyE zpQVu<*Jf1TxN*agN9=ch{s@k1BVt|GSFc|E!4H1m+^neFZE(R4DK&GJ}#j@`Ph+jd0( zKk~7UR#jzY)u@gt=yZXE^{A0#9D*69+=t_5)y?FhXwqIvHFx@Q622j%(7$x-OTg`Gdw|(wQZ}a%npPVbS$We_Am;?N`IC`3Dh1kQ`=mgIGNBGKe8?4t53flQ)yNz)3M0ipCyT|XsQ^`stI$~Hqs`Ak zCAXQp^|7FHasz+}nlUuUGMTyWouV5IT4h?5}}!x zc3tQF0nc!^4;6B#UFL>v0m%8V zeI(8}-i$(7f&9^6sIjU5I2w&Ouq045LXs%!)oN=#v82AM@-P7bFzU4{mwxi<+p1_r zh;)2>oKnoOK`=xnu0~B`qF4bC^%RO|NRlK3jxnA;zjN!>UC;lOWFod+E}3|~wMEP# zM$B#7Ub}X=3jEGn@A!Hbs_{3z@dAgYsjGDtRf#x&sHiZJNPO~%C*SkL)5~?L16H;5 zuxvl~0E7@in9t^QU9Hz-0IGU?a*|T2>p)0|rsfR~(M$*l`r=kV8;z^q`j=k-g6F^S zy>=a|njx_Wqy%Ol&>S!2WO4GR|K%^f@r`f)&Ts$bhd%H$KtlBTU^KJ&eD3uqB4&^~ zrl@HkFmI49zB7ae_YWREJQQU>R)|kL@%VH)Qi&l{H*Y@m_uu@kN7#tyum9?~-~YXT z&0MJ__f!D{5Q!^As6zdtmtJ}J;2wa*nC{;{c>VRa?mRe2LSm_Ai>ce$*+TPzc5|*e zW}eTti0)JsiK3bjV^Tp-D1ojIkSxe{Sd8rQb|3&1W+c-P@kM`NnsrWBJ_YKJxUk*KMa(uGPiOP-?(WvP zbK~pRuU@`#z6v<1!+dKtpH64fCU+S`L@+V~GRh4x`l(kpCjiC(;2sx(F%cs}M!ZkC z4ri>NKqgAge|7cV?4mbeXkK;}wUbI=XOPrZau8rgfZ-@c6;q>f#OFo-2nW ztyZM%y1jL~IbSJ*VL;?cq*|_y-g!^?JHLos(_@b3g%=+jG%;Jx-&a}?dahH z7VT2&*>`Hlb&~)s)brho@tu>Zq7guQbQJI2o?i&S)K(Qp1dDYYa7_fcHrabF6Xa%{ zL;30DCjY;#Ya0NLehldgv&@JhVvJo=SGn=BM9=5fzIA*r&&bRM9ajv5X_*v2&D01v zh+@vXR$w$mLkM7-dRrS*aUvr0g+XPIXN49)W#bJ(k22)_%jT(1+1nzhL#;H;_bTqb zh=`~If7Hi!i73U+vy}-U_pIw%0wAJ@)ExZgqpDIStEva9qjlBp?QhpLt_~NX){I6M z_Rp^u>+R`$c3~@6Xk%oiX4-7;%)^9!`qnGT-NTc6ANb&hp8b_iR+ABp$WT4<=KFxY zF{A+-j+l|BFki>G>{e70MC{sDL94);BB%<1s&Z9@N%ho6-}BVf$8Nv=_Jwojuf6xi z&gF}$Mu9YT^{kI6cKj(14*f8;B+qJ=Bisj5^P&CHqWuaw!vRQj{E3tWHn+T#nzhDuOX@1NuCF*Mzh87F}hRs`skLgJ^Ih_^( zCafQn>bidNJvU6TX&MZ< zu}|@rR5hg(B_ZO@&X(taW|inGtwp3{j+YGOEIbHwiI(nd;5Ep+sjkc80m>j*k~h zLdUAOUB{G?Q<3NO5&-*NH#T?+XIAPn_VZB_kt1QJUF&Rz5zN`J)SPlfJQc;uj*$%p z6Rx@L#53xWBmk)EnpW$+h*L|@)ekz|p|p$~hi?4O+B>M`inJm;!vIn_^UvyHro<_giy_|VQ6#M3cFx+YYfY~OSHHY>P7||4>ijf5va5RCfQtQ&#NuuEk&B!+k zg1U_P4%C!UnK&m2^?LO(j zErKVr47WKkMs?eZglenRT9bE{5)C4O0x=@8$3c-?o6ZF02QL@?Nyk5-`I2urx#z?z z%HYL%Rgd=#$5b30>bnLF#crTfn+OjO0U)R%X--t-0Ki?>F|!lIc#T4g(c7`rb>(`} zbzMwxG^#`d2@EWy)U`1sL2~liU?#+@3e3!*C%_`25RfQv07NEso=;-0y(3Wm@P}9T z{_=Td0&n303T9+L%xV%sfVyg$2K=E6h!_Dyq+%4&`}gl(ym+C&J=EvY!@xy=et9Er z=G;#m4DE}ZT>$c5)!eX_OZ5VQC9tfvfzlBWfdIvFn9-p3Kg#tH(R~PaN@&n&p{)0Q zX45n&C4dS5kZ9emkB?8zpFal(2;@c6hGYgI(1i=9D2O))y?Hbez85pqn;j6=l%5yEIXLrctH;OS2Kl$o}-x19E(?S!lF@Zn)h z2_P5&5}=_uHzYE;uLTAG&J#49)L;DKZ-4G{|NJlh{4am}qt}j(*D)#rFV`#N5O@@0 zB!YL}efS^$>ka$z(iOQAE|@XcH7v6-i=1XkC}S{hjZsQ_mpI z=krhe(#NOM31I@lPk;JT-}&wjR?ChU&ETaU{rI(4-?;Jk6$Ptn_9iePgf^-GBJ1>$MmOv^4B{%+uhD@bSv zU4)e2d*6NyY#WWuIxpvUo-zPb6&3K}3dhr!7z2z(qurgIbLXcQFP*z~^}>6eyng-a z9?aQktWf{^D{7HjB7)OpfW61_2z=QO+fIx9V7c6&rDxpt;jqgm!z&Cu zGaPI_z5XQ|aLdGSk2} z0j+I)4P|6?MHUaMp^1?yMg=e>R3@w&!=NTAY1E8eThz?dR4v9NB7uRJb2ANahCBdK zb;81mBC3u?QME%P=4w8dyZ1&MR;$&~(ZSZ`>%2AHy>fN+=BsK}E8Kng$5*Q9XzzTh zLKt}6zWeeI+jnn`36n~_v%7!w`XNx|MB#{P8miz${5%@X_Rqt^E8VTP%^+~L5ylmA z)g_qBW+yl>#GP_7-%Ei+Z2X0vv zf$K`lz;gkZFmT9)z*crCUYJ>jiilLa-?CB&Q3VGU4Rch<<4i_`bzLcjW~8(EtW66^ z27oR!h!}{xtKONN!%!Ll@`lGj_;Svfc*9UHaF}T_7@O)@Q6K7pf0v9(0kW!kQ}_@_ zRL~47@^WeaO4oIRpauE)W*`!qP?cU%glGtY)|yNjrcrhO{@n-n?(d(w006VeG$^<0 zb`;{t`ebKkmntU0gX0JP^}qbdyZ3HC{r;Pu`RwOzy?uK;9c^DY$D^RA*=(7&35L8S zKr}UMFkoHHsxS&b7$q4fno3miI57bbhB401&wk@~etma3f9c!&!DpVez0t$t!_bT- z^V#Cz@hZhoArV9{6$y-?ZZyUhfB4c5zyE`~hX)+s&b>SPm(D--)Qw;L7oVS>+u!V? zzzh)@wu+2#*>%Y*nJV;M9>5G?69UJPOHF>44KG8 z`r2RcrAk!t+ebw2z@rABM670N!l9RW0La+wKW2fg2$jnfou;tdSTiIMNg}?xcFwLo ztE0D;eXO8(;~UpvP}^8+W*LEhH2k%9NH(U}Q`LuCp`rQ=4STuKa8)X)c`&$U@xzD8 z=$E2F{aJZH8$>Mni24TfEY~TzX=XS8cC{~3#=%j>qn1hvSmq5IK&u|4=^s0 z0t7-LVlAbP?hpWosVN|OI|^q|8Njmr!}`7^giuw%%}*C2FnXNP@;vwbEwHE1@qZyl zMw2&zFz=vgE47vGS09RrQ+AVF|ns8>oo1a~WnubE;t?lCEd@=7a`<9EQ*3i)LX| z$QDn*3{ujRqG}>g1WeI2uJ{SSIXHdF78SErrv1#El<9rcZ8-CTf|)l=vfMybRS|1) z?#rBXRCtp!7UoJVQYu<3Fj2pwP!;E7AC6?Gk2FZSKl7)v@A~vp6ab`*2MU5b*a#GV zzQ|8`>f9=PaHBFC{T%v>QztIV4Jsa~GXPM~O{$-2vYx645k=K)C-+MOxJeX=T^hoX zj#VbKkXh`Eh(h2%z=#zw^$(IkVg?gajq~XwicQxMSZ%ciL~-)ho+b`FD&>U>fPq7w zq~z`qmgP@XP4(#LsB1d_6tO@QW0IH%fDlv}fw97IJ*qgk;*blxkL`3ZlbPH2UiKb+ z(~lfK7Z~j?;JH=9w+@32JigTV+1iKhhbI@E!9g!V1z+?45ONfk*v!Z)C7B#fGPA(U zL7^`tOG(ZBHW5NJU^S!=#8gbZGAAjP#z|SKJA&Vq53j_+NmI%PiMsuzzfPD!u=13^>^bYz3sJUR{~<};(Rs>A&8Kw8S(3Hym@?lva>w`&o}}EbuY&NjDw3ojt>|j7^xc7 zFquz6&2eP_2u7OHbi!Z!;urqgm%sA%J9m((lmLZ0z+B9w3Wy54?j+PyRcv60i86(q zb6&XpawQ`UG#UpYaf3_-$47^nQb1rL0tKYpg8~%62nuIPWoCxPU{@~g{r>O$t2=k@ z-@pH`i}uFrZ~xujef!p}I~eMKNDz{N0X_fx3%~lSpEc=ncw2#(>bg>mz`+#3OrwAz zBmyEZU^FvbtXDsMz)-+tkH8~};BE&*`{odu5$PJa5b}$1JFe4)X5P(1)32>!Q1oSH!7!Y(Kfe0|DsXN?e zV5S3d7D4j%orUt)99%5M&2da3@5b@}(e`G|l3m$(*c$dZCo}I{x9S$EFcgL+#%>VZ zO*ER4NUAlMrWAHqraX{-_g`>?e}*C)4*vnm5q^+FlOj!1Qi~$lY?9q*5IvxQ1`1PS zsH%JGj+uGR-fJyCti5-hyah182b~8XEAPoO>|u@H`W6xanJF+}WCAcIq>X8?*fTZ; znhZ240AOHIHBiJbB;&vY3`Pbyb?haIM5K_%U(MKa0N7&MLOuzEqzzjTF-2fi1tTOz zQig^bLL@^0LBPy`g#-u<2SITFBpA1o&42lS{!xrW(>6Stblv3s(b4|y-uAoKr@ATw&_jY?gEBCv`&0bZpvsS-Gg+_7C!K~EyMUJHN8 zI?PfX5sQIB$OfjavzQ&rnrjC~SHMwfy_#I(r&`(Tn43%5sQxSe$~hdt>pubjAdrV? zsD?rr2!Q|*a?Kr-zNpZE4of{fZpc#GHP>&~U;~tCOm{zg&xT=lXKS)KOQhB(IXb)hvv)Uj5h~$>Yy{dgo}?AG0kc zaC&z8C-a}*4(*04(xwS~{C+2cOlG=qZSur(aq|GpTA70mmH zzj1WulU)g|49LUKPN8WVBn<)f4mO^6=KQ1gL%e8GYBl2Bk54boja#E2L*n@vAWG;G zcY*=c3`~#!P{n))RORmWz@lH8S?qge3`AsV1Wcr*njQ@_iHV2!!7||!F*d5IqH1dD zJ-BiN);a$W86j{GGnq`o7Pcp6aTx~%L?-vj!~ij{DL4!!_ogcre5q*RjP@>DDK`Q( z0(2Td@ArfNXseDlb!|HXlJ5~4;djQ1zb^GUK13uS1~Id312Y8$ji3$45EF^1M1bgq zzZeslAxcV32twfYRrg?3K*aZp_`yhly|3Q`qt0heB_0vJ!%T7T@%huj<>cqkSU#4RIRM6#dZ5N_)q(&ZKmb&t#>_;4 z*#KhOcs2_{6O5EM87&VOIx@mO!H>XaT{y6jev2TyCr)g5Fo zZ)v&ir6T}~_km0(tM75vrG)A-ct=d7FTk5uq8R%uqzgc?2_{auvrWA~Yot z0Y<~(RPrdY>?K4}0E}ixsG=gNev`dCvzkQr+ZAMwGPi9ANB0h2d-Vs$NB1ePfPM1G zC!c)uQ5qrOMsr3`T`=U zMN5S;1t0^Z0Ba;DFBk41oJ+h;G`gCPE3d7oeWJB z5Q(_5BnVV|C4-Z@)pSJ(k^A9!L|^SjWCE(@bp=-TsT+b$BIP9rRV86)Jc@t}WK=59 zsRljUw$#GE5zt}|W*rMa?9OczOA5(=%=}~oVj@HgL_}ng1Bg)t zP209LLPZE81Ufo5y2}$)Mj%3DMs@1#WME=WlIM?=bB%7VR>A9d{}SxZ^IhXpdG7KW z0078cM1A-9uJ^7CSkunK7gnuKA!cCRXPEx8wQBrIhk?- zdZnzaVB(~?M=wIIX)g%++sF(qC0!*bahfNFBJf(G7=1JNx_Vy_TUH6n#vx9zl#=1#E{ z+US&GKcFh1B083qk~wt>h(Xh~)23^hHn6K$br(A~KpoYX0?=w=bL7_#deE+@#}`M8 z8Z)!;*q>Z!NLTg`m|LO%$Ns&CN{?BniB) zf=UulG3O!xGEg!MB%*z9KmYk10|w+6W7AOAO(v6WdvmjE!(yK8oulL9AH4SZul&7l zpc!Y-s1s@;04^5&oxAsmnrd*^|>jPOHtV%)%}3Pg;A~leEQj2fA?2@>0-Y8SO4nw-g@($<+5jPVodY- z@}0Neef+T-z&W=cLW7ykA2={r82VHug+v8VLlge;uYR!X)ePexMA+-__U-o=Ni`vJ zl0wt0rik5S^H2WtyU+Z>QwP^}nAi-Owk1{sNJ-gS{F(YzHU(g6yKr%_xPJZWZ~gZF zu(#79npyHRrxSG%(bo2snucbQ1~Jo^(lEp(IPVo}u8*+XVBQQ%*AaKE#|IVusnU+w z`-S7m3(9E#q~ZW%yUR5)p-SmJx&m%sF|Sv0tV%QA(KNPpaI(>&TBk+nSfSrXR=3ZhYB_5~|O0Ns`x->(#~~02`sD9u(%|C#U;-t;E+7w`O}OX<|?ZW=Tg0dlX+#d3+b#ISMg#&q}U0@>|11Pe(p3StmR z)J%~AfGH#Z1g2rB%Vf&kkR&29bq1)031I8$LwDYOON@v(EwxRWlwfCP@9Agm{P@*9 zB36^bvsUgx=+dAIQ-nb#w4643w;tt#t7im&tbl;QG)$Qgv>~swN?r@ggZ>&}@NtQA=H)t5zgd zyu`L`3A6_5Q%ViAI4Wl|Gq1mMPr>sR41j=|G{xlYKYbsT{41m+h@=vcf{Lb;iJ%QE z#pspqh{()g1SPKC?|5|)cZHn%qScXxm5H-G!?;oVQ~+}*sgzqNa>2@RNL zI!`k&@_2AjIazigA`pbGdHem_Q3lOLf?{T9q)x@f$N{fj+YhtO8ryz&|Di`8=jjB7 zwwbgTILSa^!tDeU=yR=;Tf#VjKt|41+WcO(tQs(Tc@EQ#ZjO#R$<#!rr;P zKi_$|EJfjgmE(V6pb!EvClxd#B25pFO%-J2Sg>D`rM}d2bFJ}X#R@9y$&35b|wrfUxzUe+~!J9dgKH3Z1`GRP#S^%q}g*9GbB}SYzxMSh9=&H4KjET(Mrb<05CvG0A`lV z)ZH>~aA0bLQD7{Hi8p9 zXo*=dw>)96nw{0AEZJ*=F^L3ZQ&6>V5LfoO@{^Ua_AxOtKx1Z5AZMld?tLpco0NQxjQT^v< zj>-7Y`jELwu|C5%wCa*OS1_9y0w^K_B4XxWRt-73njy&sz)U`RM8tuKkO+CC7IUV= zJnn=dGM_IGkB;Yk9HK4yVMx&|)UEB~2ms9N`9F9d7=39NhhZS1wrLv*h~RRG5s@gR zWMIspX(xzIT)0{Wm-f5=A3WvhG3YOLeBr>TS&E569vA$a(vtB?f{{LWQ1y=gTaPO2 z##cr}x9{t!iYfY1i^DL)NJL%NCP@t7tI*WduMuKDL@*58F||!I1DpXdAp6t<jj=J3W(-~QyzeS-$j%g5uvwQFtL0O)i!VW!XoQ|_02j6;e8 zqCWNbBj5Vfzw_-s{_f%Za{v-GB}QU2a%$w|qTk+{xs0V;OlqYX0{{TYyi@@ZLSO?W zYFH2zmh*+W;B&xemWqay6F50_3kHBp;mtSSeCp{hHI3^kG1In#rfs%%yMOkZzws~r z#s6_JKPMnWS}x<^;n9;%JmM*RzcOPWLWp3h%*|rx)hpFJRswK(esTMq4;Ranr15Mv zdI1H2N4f)XltdH^859lS=>FNa|I>GV`+xjzQyP#vcb!#@u@Q-1d+Ej5Mu%oU|M=4n zKKxkK6s?&wMkp%nWJ1uJ0DzQzylGiPJ0bpIQf?L}e{6GezBH5VEDKfW=aTVuWlRxI*5**d3)qRJMnL|B%*miA7 zqN*LV*@bZsMR})H_5yOGu*6a;AybucB_Ramr+I+26sx;QQ3lJSoL0;vGmtWr#T)@f ztC>2mdV_kD=l|lzB{lKjU)?Gt-_h#4yK6>|i(e6ekzw@U^)H!9FyfEH^#tD93$2$o zKB(-*67`ZncIkw%A65T)Dabp%-RC`wJ>VW-c8rU@E~tcx$Z+e$g$ywRqA@ze*9eUR zn=S6$nY9LhLp$p>c8oU>Iv@jxKrw7=^3L}BbZN}M4Tyz+?D$SpW<0!mm-^*I6&L-4 z(1Zp_HY8O&3fEs-!edMuyvc>!F=>5|MV1t{akbstEiJETj>fWPI zP9J(WHk|?@AheTZ=um;EA#AB&jv*jUXB#&jIXXNX(h`%ZwUee(L|_sM=K|sCL%ZB9 zPfm20pDiv}W0W4uC$P{AK^Yg{B@5K}QBmP+{xzz_Z z;CT7DqH_;QMX(fsURt+Q>iWk~B_aw)Vp8zWRSB8sLeifkkaS|x@!B!~Wkq59(hi%A~`qp(apGn&L^+HUV} zzxeg99z1gM?(y-BhaZiK2iG57E_$G*My1M}Lj5ov%Fs6Z*RN8`$kreaDS2R<8JWpU zCvCWSaJ>n^z?$vNc6;OalY8&~{Da4zcyfDh*P?`C^XnjIC#Ubf{m#7)KGKGCNXrys z$A-{yKrvA}zkBrd*~LV|OE0}NOr|k3EnKnFxn3+SN?P`sQXeHHP=aOB!Q?!i4)>e_PnF*0dOwBHa2^tE=G}XltZL)?Up4j8HLOX5g#{8RAXuysTc-XU@R8c&Jfs51ZUJ;A~B0XQ*IQR1Fc3{X(G3 zhLG~OSuL?QRRZ#BOEGuQ493ADA3C3fj3+WxWjF9F*R0g8>jsd4ww8xFAfdq!bN_=F zqr>rHj8T$#J&ge(4#Tj2?cnOwtCPvZ@8T_$TuRqZvb1`IIwFkJl|CzWnmb%;SH4l~g3heuSHk(=L`&2iF<7Av|^yy8k#!Mg`op4P7GpnzeS za=fy}!Shc5%w0BH?QtmKNJ*-eh!B7*!_wC%IQ$(Yt~zmD5@LQ+r=wjimvt3sZtm*H zATmp)2)WW|b<}Ac3!)lBQPpZTSIYqrO;__+KaAz=gNKM90uVbO8Y>vH9vKscYN`rE zq@s@3Ml2KfIR^Q7#On8#jOw}uE{WXwru8lAI;``BqgYl=9@KaamPJ-aY_ykaHTLBo zDI)4e2KI`6 z55dQz^ZD}RWN~)3NXQq9ewiehv*ZB+Dz4(`z9Z^GR%ZuB%Nr3*b?AFAn>1lIX}x_} zN@=-VN=yw0CT4Cz2ws@40PL-308|7fqHOd_h{B?%sl1_KX_l5uD- zsU(poifU>M)B?3&1i;So1fOMht-JADPP0inl_Z{LQ?P>OQX@nI3$2-r4V05wp`#Lp!* ztuUX@fB*OY(Ejazc=*Mrq_SZjt;e}^_ID}w1f<|Qci!XlpnP;C+OUL)m{@*|N_dkB)EkMRVXJ_+& z|L?y2oB#Zu&RQS}CV~jW;F{eHM-f3}W*(NyI7HRfL&jzXR2tFv(#lW~K?5p$#F<^Y z5NxX@D1B+X-aUgUszCte^`WNXEjFOku^EDRnOjj0xbi?U*)gqhGmgm1#AJlvaU(QT zQ2+=WM4SybBuSYF6#)^|)N1#0%)~CP5=7KH$!Crv&VK^SI25m1AP8QcT2@!I!S>a#dmz>#vLOh7ptW0j^w7-<8ASRN+QY;9S033zV6fyt{f)h=@YqxL z-g`d~H>w&jQHxV0~Ac{sPfN|38Kl}V}|45NwW2VGFO{9>BW{*6vw|{_V=cjk?oXn3E!(?-3 za{xX;!M?f?CN0f2b+)y{hEoavhA2(@$V*@Cz%)>5TR{duAX1=#V0QiHV@=TI93>@0 z*w`8f71W3mpkQdOZnXOkr(v=_Y}*#wHgf2-BsJ74$P8dbmsZz?Gpf_b zzOoYWck_ux#N|{lo@kI@5e5S&HHr{ItNPz14CD-3tmOcc& zsoRbpdg$saFTeE0Yahggs-S=wqZ%el7E@p(!Uh3CNRo&`G9k4-oip=tSONg%Zh1KA zrnBj02w^$&0s>;uWD!$f9ESAnhwmPr93P(?-@Nh2t;ZhS-rSuZUrf8HE)q?fN&!-Z zGI~Y}2|bLa0EjQW{MA4E?sq@<~zpbM4-lmpk`tQh8&jX%h&$u)%SjO zd-uu}Xu|Vf{_?~74_#?C{upfWRgiE2^9u5Sos2mBnXA z;V&Iyi8l^tuA*}#o=AYetO6+|FIct`OLYlY<$RT&ewi_*VO%|0?>RAUCY2-6hQx!0hi$<17%QSqVbNLKE-zyb3>qB#&m4YjnDwH#$eH4K=E%hbS; z!fN9nQN8-!-rh6MJhQ*QU#ET;hSSqiEltU{wzkHaeKMI`yLRpV{ret;wBqOykvHV@ zsOZzrd}(WIYuZh!*46@O^$@430+TnLbEkN@TzbpgzF(Z4p5D20=kW0G?Ci{M?fuRB zzCSuX-rn2{A$W6$*bgbC*=)wlM@Pr!=jSP{~SgN|7*j{b?x<^JkadnGJ8`jL6YTimF zqi#Sm08uwSe8m7{{38*~=kxh|o-~FKwzjrBJ_seEw03=>rfG;Fr5+rC01ChuxM^EU zUhoTI8525=Gp;mUkvvsmSdJKYj;4lSq3HYh|9F%U6P zWi2!FB3&QJwVSS)*6XX~!Qone>$NL<-chS1YD2&E^AQ2f(A2yfuo6g?1RJchS&52{ z2QY6j0~|%n007b9sHH)=nt{5oCIdiJR8{qiI2ANEJ9`XR!_HW|3To#WDc=}SQjjDU z7sKJv>G8?=ATX#blZcTKpqhZ?g5omw_JA8TmJ;a548$}HrWOd=5GHNgwoTV{De2kS z+4=c--}mmSc-s}sHR&{t4(EFTmvEXD#esj*Y>kdD+LhkS99yD>$iZj85WOxFijb;_ zua$*SJY^O2zOI$MrH+xCO;`^9(zljhr)iqWWHRrUBFSIdA){uVR^+TSUjQ%w0fx(rb)WCBBd)4?_xAQqFHTG%cu%36YXU7$_O6-uD>Te0B|{3# zn%gP(`bMlwv7=zQjVf;Z3ZpbQKW$bhRj{pcB1 z_NAXzk@M>dx~xX@@>Olyu(3HkymxNqp>ulggHM?{ViXxfWN|V7=%bI{efNVTdDs}0 zQC@iN*(aZPG_Zl$i!VO^$)|U}_x&FdGLWg_oqP9x=Xd__op(NX`spVq*kV5a@aLcW z^o^fgTr5?Ik=2A5UjF)vUwZO!L?fam1V%DZ#DIw6v^!u#rkcL?)h{33yZ7xs`SXi; zGHYW}ATm$@Ud$Ihu%RKS+#I>=!kE~_G?=Q&#>SL`5donBnm5HJ@Ai|GhdV&o(gFZP z6VWELZ@+!}{?X~Zd&7@^{Nca*qrZ6exo2)Zd}Cv4BgOc^haddtM?bqb6BQ-`RoU6z zeEf+=JZqjeyo#zaF@g}HFkr>N_|~t!l1)@F6(b@sM6?h>5>r)FoiFAoC6VOSLS=0mBB&vH zcM(L(q8q@WK&2f#S3?#6090~npAZmPOf8pXLCPq7m&v4>2}acjM`U4URb-9LvTUR0 z978@+kXS^}RwN5u*QtuAsfmK8#*l~%6%@_T48?$v5qae~tag2t+C|VY7<6rmg^n|e zPFhK(ob<|{S5gc8H{gNDjPk&0J3^_WfD$uZZRO7tdpJqk}H} z^lt?c{aYW!no)nUv7-ws`#YammE|~CSq0$wJC=ZZwSd?2%r;8n`I$5V{SB zn3>6fu_s0WG$ana>GbBqvxjadfiOm=7B)Z%JwxoQolIs2*E%mb1s;Y$5PAcpMi7D$ zfkl9&8DH6tpb^0WlOUQmT|+>`rlr08crgJ)0W%~807C*6Kp-3#kq{@ryi;vxrjrQ( zlBEH>1l9LjhJK7J$4i+T@T77e@L#B^f`-6mP`e~kCjTM|S%s@Av&VqIwU~g4WE=s9 zkfH;@0CIsFJE@?HN*q}fA`&Qkrsv@B6El+}HnwB{yp}RAKNrQdJaDwmFWqZ={WXhU zSFL;{CS1j5y>+f@T?33;+uhfG>C21L;jK5`BWmJ&SoX_4&XG}7ZHT7UgfQtQ4HMI( z2?VBU$wNS9Kp2dy<#slmPG{48=+z{NF3uN8lY+5wLtp}j!|{LmkAL>~V^3V$xqfzd zCJRwg9L(6zVb?C65oAaT+H`FWH5pg}P&+<44#Z|^0t`rPGo5ZU#EguLH?KT;rMr6n z_OUGc`6nmG!$-KyVm6&^49SM0r49X=9ENGL?E5?S?jE0>Y)rZkc1{V-E-p;bL?b{5 ztq{$Z3sX(;{PcW&djE`>Cn?N+0lOWMvtcn`4E-R|BS;(;g1T6qC+WEjEn^!RKn)$W zlYkBYQPiZ#QXG;BgHwGOA^;I5Q3D8p5z#=J5JV$@wH-DM^l^Un>7klj^!>f#`^%wk zrjBR6gdw^dBy~5cE|T#Iv9fMF%V}mV=@1x;wDe9jV_{nZ6Js!GmGDqBiA)G*j<9<}_Hu z8T^$ap_t1!MGX)XEUDK}F`_EvCMRay;)0%l1W}}vj z2^gcQ%AknIWbTR+0C>oy^iJ{GWJWDY1%Xt=dvNC!fGdcBM>>eGI+8v?p%yF}5MYXl z5ZMF7YQdR++`II6t7Kh6MA)!H(gG24Yi5Bt8KfA&3=xwgX7mJ4RPnoPZESw?o8LTm z=tc;^vF%ve>1=OrGoz|*Z*Mz0ronM#Rne#?U0^B|o^ML+o9gWI>?zIX4QKaVeUGrPFBAfog0^P{6906??K zA}T4bMh|g16x4r$h@qj$WU{@z?di8GSFW^e+xPv+$q6EEZf+9MY&M%tr^v^i^55Lt z^jAZ#9EX*qltetR>*h+CeMJgRmuF@$qT^g`v~}&^L4=A4U436R(b&++e;tKT#~7@Y zR8dPJ7Z(?PEh<=>VHk#Cc<;UU-hKC-A;rzj%@wC>=L`l8#nrS@yIg>8W*LA{{{$ucGL|PmTXoH>9ZvzEStT2`i~-L?#fTzG zh@d4#q3UWOPq#l8U?nQdX&5XFy(52T{J`Tct2%)7p!@@;xw)}srP#`w%P&~3V5{y6*0sLqv=*&DGk#fqjAt-K?=s7y66|}Y&u^oRiVPcF2zP4NL$q9 zOBFM9aQ*7>Tlc-5LM1tml6nazB52&+-foC{bK3<}O-u+`K#q=%`o7=Tm_d>0{FlG}t<6~gOG)~TjmfY7 z`nN9T=RbY(cEGkD1~ZD%eE$bOdiAx}Rg(b_G9rl}GZ6w>dg9ij-+bk3#G-1<&cUpr z8UiCg9Avp%fSH;RV~mS`@DF}vwlV#k-~A&|a7d#iQ`OV66U=H#ArlpQ;>AYmR+)kk zv~8G7y5&-klnDXZEert3S%DIu$V5+|W)RwN|Nik0{`$3x#X_V52t#kLzxMX`zV{R7 z^)Rp`K-eZ5RO84*bS2yh;km(#Gw-M%U^x#XKw&T<_^(*_`}z~@|EZI_I78}DIqlM zjIr_b-`_NuOaPSw zgCQnJDK3^5h#Tr+-(z%`4c<~;UrB;i`h(n{K^zMiU@*l3K`J`F)L@o06-G%ey`*IN z%?t>^e5sF2q8whV^G<3hSNNAvGY_Gbpf?kHWvZEp2{NH75)pv`xxCJHC)8G3BM4AO(K(aTAr2e0rXK4}yv6 zIS<-G;i#h8%=m!jg^|jIa5h2;O2RK22ofk7dAuyfNDR${ zzxj7xoKC{`U;WAP#o^i6sX=l=YeGf9XicByEi>@uW-~=niP4l|iqud;q(Fg#fz20l zNdqu4QM9O_Y9>+oq%z235AWZ&cH`*I{Xh79`GmJF{;1^msw(?(v6jzWy4YEgM#D z1MF-KXlb!vB*vhI7Z-gWQygN~b%1)Vi~ZdzpWOcW)owRj!$zAS$`EDfhh-e1r1QQ% z>z5ds>11PjcMDP5jyWi|Bs!3R2nK7qGXn135GGCrA zhKuDe+&{gT4}*ePGYG6YCFV6ycwHWpzVLu#&Sq-0-Q1##_np+RPZ3J+P&!rMJ=w95;SQ z01!(=WB>}eoryDz`pIb+AkRgHe~BekO)4Bhw3tAU$PvFH5=;3rkh2YvQ@S_f8~sJG_7$l2St`?^?G|S z1ZLivZM^j2FJ8NL&CERNz0&E4JI{r&yDy}j9N z)^x4&le#vkW)G1eqObF&BMv_Bmigk#0r zwn$O8;j@WOV4^~%S{tjFg6X(vPPsTTpyV3=QlsrpX8@MrqVQR;hD++>!DDRg)Ga)| zNL_nW>Yn{@^PWl_Pqn7jXQZkyu9vmkeQwP;%}=|o2=gM>0IMzTtFxnw?^8CHBU>(^#SbShuiI`Eq zXryN9QqvKCX#KD@k6A{na@4MLFC|8*OIGpxW8Gt=$BC+%DRSs0-exgRL;BF(^t>>Qql9>=PfT<=k1LUr4L?U4jO^AAWehP#@ zC?bKoPd~jIlS+!FXod&Zc5dFdiqO=!-8VXl`)DgLu&3fr}~ z66QOBTa%=i0Tc*6o^=oAJ%xryRG`p#rpsx07*na zRDuTRo%_fH0KDlTAO|%A@){~;^nw$&D+mct6d(aQdsP4w1F(b!?2n2FC}?2DXv(Ny zkN^qEd3O=aKs9NGxFLWU0VF^`U^Otzpre0NA9229*`+$T^)0Er0^00j|< zOp_rxVhaEfRLF!KwFOzzP!TCsEnI-?4vo~egGx*jmT)Q}X6G4T+~^~O;7y#Ed9heF z#4VzVnyQz}feK>o8VU*oXZ0L{y| zOaXvgA{PW4k7yd}maHZdG3985t}K>7WF`y@6x=C5grlST_m7YEH#c7T#&ak0)7u}s z9icZ!9`I$fHiTw^nnckq7N= zlij&{1gZJO7hY_++1uGYK01Ew)z=SCPfizS{m`o27Tzjyz9_vBQ1`$sQ*vu#?`KtMK- zF^btd&9Q-t{yg2kfaNfoP7|g%454kW?(NUIi}~V$LbF^Z5tC>Pft9rfY8n}YLb&tu zPq)Hm$CF_`Tr7s=0E6IC+KXjBq-JBfsoI>M*~WI$bQ6P~$dCf6X-aVzmWw_OjYcGF zk&MW|1Ca)1Ih61IVF*E00Px~$uDmdo^ZEIrUt+^1G9>YQU0y#f^!`RgQqxzZDl31f zxkG%Z{u2jTg8?9|xfp&cj}(ko>3HRjKh$NPP5sfCY6*RRYBk;6Ct3mDs=g2rBtwKk zkm6pPnVFMyRa6(OfD!qqPC*tCfuhG)%dX9BInV%5GAh%uvzjT55s?ZSE0}4{mIr16 zU?QTF614%dmkeeWGP#@iR&C5$d|m>qbSy0Gw-X5J@UPDC;$FW8s#yQn7jv z5XGzcfvd~nCbTFa1`c2*k^q&7Kn)2HD5c082y?^BfIORaAp|BWPMRWMN{M^`h)7K| zxzSFmLQz0~+VF~*pMCb(*=+XiJGU<`&fHg;Oec>%`sia1KXP#O8t3$3_R+js(eCap z5jlbwM|_knBt2eHEQkXi-;W7Y6Ml43dY4p#a-jGv$GFB{P3qg{pp=McZdiX zIfT$QLyC*VVi<-}j!iC;GoW}C_FtuS{jbGig_NY)QEDkmT}9u~&gTe4?_4YwR=N+h zZQFI-_V)I{!NI{p*Z24LXR}!dAr>Bhk$Hx-Y}7{O!af074n%B1vqJoo*{R!VymPC^ z?U4t|j8#@oc>n$P&(6*c4-Y4k$urM9bLGkvC@GEO<6}a+apQ(NzsvdJ@bK>W`DvCm zh4`*6T{8nDM+EyDEtVH%swzmiL%>*3=7Td}91#mu+A4zP1tKve4gpf4hE#+Ml9{Tw zG3P(wQTUi>g|u}kS`A=k&VbxYa1a=uMu@e`>x$45#&%@+?N}I&DbdXgN0M{2uuJrO z6d4~2F*8H5?1BN9Dwr{I;9zFS)GIMfSI^IeMraC_8{e)%z@Ft#DypjWH|2+Q_g%7B zE*+Qb?eU1!PxW?Qw_btazW|GIE-^_-5L%}(}X4~Q?k6H{mSa5Hh@N1F6U<#^V747iy;jHL(*kRhJ={m z7C4HE*0-p77S~;y`f5~KmQmggppueeQb{QRkSIh+6dFTHX)uDAgc}yHTxNoxfQsI6 z2h6=+KXROeU_?gTsWx-Vgr6e(^ zep6SEmj0?lB$`umIX3E~ya*u#(Ja>-)tXXdf+6J^i!gg~B{@<<|=4ue)Axg1zZJwBDu zvvp`Xj7Z{OeQS+ln)P$l#6=&kxXG=go9gV0KdcmR&UF-m)bkdX~7uxG6O zjZjTOStDkK=IrM-oii&QAU;oBW-gxV$ zKYjbHw{E*Phd_ZtOc6neC@?;9{osY?pZ@Y!p1ZQQ1tH1s-NofJtWM4H-4|{|_?e_T9L7hF9)Ihb z-*T|2yVJ|BzPMRQp7s=-Ra~miPNc=oPf!2+$3J@U#gB+rW`#)mL|)35eA0_AIy(WF|QFEu}(MvBB}2?-=PL>ROPM#FQ(EZk;)?`Vsnc|@SK=MY7tm1 z#~@BUOCp%V9K1BkG@GigifAr?uxFAxU;g=j8Fu-{J{`A6^GA+=?w8%!|8t1xoIvH4 zvI}lCnC5KP?6?3>JudKNIz7%}wdmvM&)FiJn_XLXZ-H*(HCU@mzg|gHzc_PJW8d_e zHaT7>7MIs~MvL?qj!g-Oh(Om^0M%BzJGq+8SFd})!Z)3DW(gt2??glbkKVE*EDRzN zh6q?dq2SB_GbPZ<-OZK31cI|6kVg(hUq&I%PJyzKBU#jjvoqCJIl)78@=@H}Aj_tF$hHAlSC_Fi)=9fxS8efvjab^ zHA*$~vJ&SH-X(bn=Stl{Ohuy&N<^52Lr8?cB7u$CLa%mN%y_Ku4cD0G^;I|E*ur@J zAqq&H7OlNw9k|SZmwT*&lv3?hQIuPXgB%P3C1wG45p*%h)5p92`G5M4|LuSH>&@o; zyMOxb|MH*yHySPHOyt3UJ2^W&-E5vby^uuHG}1u{HXymvG)=4ZI%59An7ghM1_2~A zPW!3YYPABToXh6qYqGU-jL7=$Of_ zcH?UGq-HU@pZy;{mDCNxirk0PCrPHGyECWa24QC^ZsrA`ad(w}^~)8y8|%%9)9bIl z_WJ8@JbC=-{_1L)c4OX;HY$&Fy50=9*j`XkSP{aF&1t{xC)KI!lXOn>+|Ao>zV@}l z{_xQ!zu#Sr+}W0Q4<9@_S)D=|l=h`e)^Eq@a^l@c7vnDV-RbEXy~rw$IEa=aN!*q4nN;h^Z&UvC_W1glmv7!1Wi}2x(?PIgY zJBO6bxvgc|k^Wb8GACvsQFUSlVJ`1&Zosi>s!pMW&ed%EBj}BACLl0(PYtYDu2!kQ zlebG85!?ADc@7$nb-3yd4*6NFje|pt)`KubRbqz-=Eh)R@`ggs5G?>VMNL>z_5ADp zBg9nwNoN)TQ{PGS(}lm&u1g}*G=(Nf zVpi28A}lcTtRb~QfV%}wiW+{~EYm!{ZdWT-m^e|Lv3=ja_10UjzH;wy*og=yp(I_` zt-8Ldobi!LGCK+G9_^m}dTrlKu$|53JU86uUZIskXHLrxdoX!1f5vvZ-S2+)yZiU= zfBNaCQ3D>YW14p3I7T71x3a%FIor=Uy1qD~>&`qgrzyv~pd?Oo$Wxo!F==Zma$YRd zut;wqEr3wuyu7^p!yo=I{A%^eE3dr%`s;V@-0AvW&6ubkhNS|`?B%;x>A5+TyIg?t zv((-l*U`85IrIeHd+)tRj~)@x&6_vB^{sEc`s%B7K>^cv_=lhW^l&%?R`}vecb~ue zT+W%%rr*$oc=~k8nP?UYL->>P>}stGWVW<( z-Uw~aMXMHC1WdD|Yi4B1BB)h4X4X*nrHNY}W>yiDHWc2@KLfQyM^^sPlwZ&BM}SF< z21^8T;t(7YVPdMe)Z@X-Mj$42W9DevX6{0OQ)%@#1Zr}zM~LG~pXI9`)b2i3bdU>T zgFu@J+=^~z2=$rgb&n+}N8Dgh4nM=ki%_E0hclW8h1ZpG{RLIVXl1y&$;e$NNm3{6 zLgr3LDJ2$H>yrr2=QBxN1$5w3E?r8y?N-%G*4=L0@29com~|>P=AsROL|cz77OwX* z&w(ZG6zjcqM`jWc5f+g$j%HDlQ>XMe=5Z=H*N#E%P9$!=-mKSs*LTFsZC+f5q}vpC znh}KS5$PWZM89hDrAWdv1!KBq^qZwdxWOq_BOEYl;ORUKZIMIJcDu_(+jU*LS#LJt zNKqz|X)1l+=dA8fb%0AQjE+H2hZ%vjpzDOll*|pL;)bikcoVeW?xao^#a!Uo!i{U1 zde@)6eu!{(eh#3OZ`9^_0FirQ20W#nDaCeGZKy}Z2gf}J_}fAvcK52nUn|qq-Q7IJ zUP}~3MQVuto zH7qfAG9nhDvy`eXD52|^*8^=|KYzkBT0Q^BVM?BG7M0)))RLoO2h)Ff>y4^@VCGI+S_lZ?|tv> z?bZJB^76BXkG9)`nQcxso0F5i#v|Led0FFo*JSGUM2D-#Q#AU8ifIr;M+|G+^WZAb}$UlXMY z69MkVbNvtz5xc?Ra0MJ9^E{0_CP@lx8nK5~5`@;>Al6in&z!t1y|%S;#kxVn1{hEa z^u1ZN#1h8AOob$-IJ3YBlnr1c^Wx@eEQwh})xCKt>dqpGDH8v#00hoL2@V36l!-++ zF(lxAGj{{~3Cjf9sgu?lC;&`@@>C5io|D`)~5}=S8fs{?CC(Uz$ zm>o=9+%!63T?<+kx<5`ZCx^Gb;B7+%J9D5j9F1j^K~~t}C9#tdK?FR z+!@RuhY~S_G?YFiIT2e5o;r0xEW|x1fuW+rfUqMG5>p3ARGbr$AXSnj9dir@6q-OT zaE2MkeFZYmgjC2B76p#Ru13tteNhJ$kP)~eSGbY6qbUUuz{YNLU}qvIu>&GrTNBk9 zbPc$&Hdk~4Nz~M{hyv~thsofANeHF_K;a-|AvH@dGd5y!B4i?0F)+tHm@)|N#+A~} zaEGvknJF%Sg?xVMn2VK(+=Zad6q0p%x0W)fHKo)*>qjq`Ayut(Utv(N#yM>!n z5d_o)MMSZD68|D*;X(BR7Ar%xZ+fBu{I z|Kh*+)4O+Xh#XKAU!9N>Nn&HRz9Rz0JQbfdn?cD`m6#)yECy!E~6E5!c?N^ zErx#RZlqp17ybCN-#_^Lvk!jzo6jG7{_x__<$gyZUaS)u*uhhuXtR>e4|Xsz&*+K~ zrPVYYR;#seC*9h3Dx}6yT||z`c7tHD>8bjE{Kx;irgW3~=YI1~ue|vD>AKtW-Dc=+ zo}J!4J9TtLSBJcDkndAI>?SW`Db)3e(f5uu4Xgf}Z@m5EAO3i~TEF*Czy61x{dAfR z!?2>%DZ26C@N}6=CciMf@YR)fX2gZI2brz}C;ZY&&)t3gM7X=UDwF!z`h-5c953^3 zw{;jvQbPfhj8L%^5M?vC5u6#8e6`-VJ2Sd&VDC(Kx%f04dP-4|3)FQw$Q~P&}+k zg%O4@X||#z_5FSv!viFuZq;|PDyrq+MBFE_V&SWC5;6!F?l2MqQ54q`fxr-AAxbG_ z&s~zf>&ac!IOyUCI37d{_lP>(jGQ`7ZZ1j4k%Y)W+C7`m>Lle10ChdBeJZY&(tU_?>a=0F8>XT0_3QMl)vJ2{FqGpNm#5O}J* zLSc&HVIb-js8&l5&`^?6^!LC2=pX;_7oU9cNxT<#2ccvws_xSqq%)uf@(?_6Yh7rp zrfFTR^^@Sn=_AaIG@2L9ZWNUz9$7kqVlE^<605x-q#>g*j$Dul{a^jlmzS63#mw@!AIJST?%#d)-R*wo?xq;`(|&hwce9emDJnSJ$~5jv znX2$6IoNlHZ4|!~5ed6m-}iU#zPLn1W7W?vP&BX#X1a8XTK+N(tJTo;+DXoNpT{;0 ztl=V+Z0qi&6te=?X|id0q{Va2&cZAp9Azs34xE~zdjn|+)tZVFbE~VXKY$I)Bu+B7 z?WRznbHK?Qlg{KeB0yt!c5Ak1g|3iga$UdyR{!=i8i)P zhbjl=dX+Pgn<0w*DU4Iasbd?6xHDoxKgyeaiO6ZQSVSc8`5EWoXlcU4pbjif4mS!{ z%8P5fb#j=&!Ej>_*a5|~6F25gk|(PJ5~(G|qFPLKVy9=B=p&1p14sdUo&sb?lea&bg=2<v+ z|MW+H_T%74a&)n8G9S!j=30sf!)nh7)u?>smac>lqix~tHVpj_e(0K>#Ve)Hh??9J>qI&t{X#mpvPt2CUQI_$cZ2j zYg-5ram7Kye>JMRY@?Rc*VnQ99rUMo-o1Ms1j*l z7M8B-hzpDyO2S^l4+1fZMEBT4M&w-*=~9v;I7{4V(Ij0d6O(LK{n_csox8WrPSbj0 zLti%-I{weU9{=nS^<@zYQ*|F&#c?GQE!npVvPS*Et`$qpCKNc!u))2yeM9a27O9vj zL_u*6UYfNJD;lH1;!(BiU<-B-Nkm`bDN#u73%ko?{RAQQfhf`dRU5VsIk^$Th(XLy zb8ra8akdiarzoH`0K&qIVovICCV<3)BH+%_2g(vwG?GKaRH#aGdN52K0IP*TH|Au} z=$tkc4K=u8C4d4IQz!Lct}3s)X|K+tft`tV?#Minfsw9&eIh6pFm7Z zYn~vhx#RL`_vGqe7?4iPA;P6b2UN$f8OBD1xVHS3tI1j;rf^a#H5+pz0A`s1-#Pne zi$(|04&o@fhqfI@&8&gkJE4>H>iqQ15M7eHJ_&)*>K6o-)^>5NGBB1yD)`P_(R8ox70f#A&Z{roJUcyE^~2+bPaZsa z^7P{H=;=<>sK{=YAAkNRtEs9t>9MRC=ERAZ-E6eUUEIpe(?Q7|Up$6yI@t`HQ|{CD zuyq}``~B5!|LF4aP^RK`7^g!%$k3T%y;`5j=FOL0|IStBEVjW=#3+3$C|i^uul!`;Ph zx83bJUX!fGPO5dthoV`nM7ORQP?Nd22=_zZojCJEvQCL|&Lt}ol`>Hn?XR-!g#}u~ z+q1)FO=1~NkXgbuFrdg8dF${P7pj%kq0bWsEj->jKP%TBtxWA0q$~pdYhlhD`A2;F z>=U#njU1P{h1i?J)k}OMcw1m{hE~24TR1IT0RU#PNW%qai<-D9jtosHdLZzyUY~DH z6Z15V0atZhw?7<+s81a^y43)n)!Ujngb@95$2|4aZ}+=l7$P#yra3DBC1f|zGUX|l zm_)=@m^qh{r>SE}oSb}`rbH|uj}*KC12YQ?!-ZLxqYa2Kcd66V&*kljZ7zdc^}RO( zBFwIq)q?XF0w94xH|v4W<($pb9EHtR>q`%AK6%KM%(G~IcV8+Uh(*!f91%Y=G3o?c zL>V&;c{!Kn$y_h&$KWeIR^0dd{rm5~|Ji4sjpG<|GQOs+vyGikNJLotbH1et6|@U2 zW6Uo@ZK@*6(R~t*a~WKg4IUR??7A-KnbR~e^S8hK?X$D9zVEqpdlqCfBowx zPo50JK#+J-4<0;t?z!jw@HE1|x!gTm}pRKa{Mi$5-n_PzEm$1F>FUHbV*X}pdv zUGw=DlYf55u&ql{nm3SVp6#j{1y1w5&Et%=#@%(+A@wDE^o7BkkL4pqxvfpU2v6t5pR+EQl9qEWr6ZE)ZdSaw_lLtsM5=mqb#;4l3ot;w8l(2v zaaihv&T)1uKXO;q0B}?EWy*zWY7v2(x)U!(%vz4ltD0wBw8tH;4$C!U`Ae-5FN*Hx z)%eWoSc0(2?^f>FXd8JvIDNx zpPbym!u`;z88`{Vz|09?tHpXgW&qFU=-@pFaD=)wN!aHxjdU`gT zY}O}d>+`cdNf7=16%hRw91XUq@3WSOqXg9=*pvjc8g1YUv4{JSjk~xXLqAm3?#y>Ig+m zHMzPF6_5qsL{WGEHc+FSSahT_)NiyIF3cSZ!6gigYwp!qggW6qI5bXyU9CVVczX^Z zB!a*p#vs9UMlu0Fr8o!e4@jT_I*6wx>yw2XWDpC|i9MIA2fP(-=24OM;woOEyJjBY~z)m2r zyAdZf6*y^zn{g_xY}PTuY?`Jp^@*ZNCwl^~(rz5RGKmdvPj0GYhw%0oa1>MOoQ;UP zzQ7dDfVl>1X0}MnNeHIZ=H&B>CqMb=-`~4;@3~vIH7fzHzVz~Xy$RwNB?^v7*LChb zO;eYWqy$H?5(@N8Lf{NFiei+A6-1oVXPYGKj7tvCFPVKQOB694V zN?fb#<70G;%8pyAH_?e@d1?JhO}^1`1EykKO3ZZY?Cgzu_s&mG%QO)Yv-EwxTCL1b zvVQXEV|OCwoblWDK78=-lRVjawRW)DXr|^iO=I78B8*PV%#qcsl#sZ!lv3Y!!P)_V z5|xr8rj^u9)09%$Zug&j_Nlw4#GBQ6l~(FG@3XsgoiM{xhaRgwtvf$IN$-69-g9T^ z=J`el&!69Z^Y!PRUW^YOUS3>{zy9#yXP-PSldA#jYSF%2OEGSh4sNCfHD9kzHkOjjnD$fGb&}-Xy;t6R<&9gXH#XfM zis>-zuJ)&^+j+hI_{rtdVh_E1c6F7rjJZsuWH%NNP3Jd0sp9M2MNpqh>beQKDHSvpV*Nan#YU?|K_nQc5}O_Xgdp zRz}vu5WlkhU-%M7H%VualPWV8&?GmM)2cj|FOP5@j(ddrQjdlf4DM%c;28bV(J~qZ z$qpeGT3x0}01Tr<^HfJI#Upn$H|Hj~7(Pthm_lQyd9v*WSYQo9@OIA*Ra0kx+z1Lw zuF78W6f7)aj>NBs#6D59oSdHKtE)-Nlrw;#>(uRVIH*}s&81k&J?A`ymS|jb%u|f& zteIHBzQ}eIOCqb)X4Um@7fD^0+}u?g^f|ZWBnFwOsP&SvyK5wwYOos!bv$j9fxB9& zWSnQW_~lk!J%1c63<1(Ae6Is2)zh12*V0vdVW^`}gmU3rp-zLX6 zjX(R@&vx6%Jv6T;GYgs2h(_aV(=^3jJCRl2$K^^X7Z(>l`N>bNuCC&7LZOwJJEBLA z9^Jox|K7cOa6cRl^H4Bz08T-%zO+k1#kOh%`pL;j*L9zK^2s=kBJ$>&Z@&HZ+o$Je zr>CcC*W`XVZyPpGQ<{ho*bFQs6ia~cD?-|s_iHKo+|(VSxrs4I9n)qO3piIh^( z;wdHf=v8HscoqYxM9u4_X-=%p|C}!ofJrGOHfWn$i7c8pEhk&um(7K)F&v+nRPMf% zycFhRx2tFH*`_`fl zd0+7S>-@j=fY)HFX(76q*56ZkcU1gg#3cLFcARYfeyg*P@zpQS&huH@MT3HMBImmEJ$A+UAby zK=bmU=4pV~E`9mEYf>ae4CY|UL0A9>&-DsKn5JpUhxO18eG;lTkF`!b?TY@4&fZr! zzN*G3ftZ<{h$Uv>wYRnWBoWayHO$#$;F)*4fSl%Iwn|u7Z2+O|z1!^osOIpkJq3m>lPGenLn646cO{Fyb_#u?QX5fRlmHvSA8 zr4<)nnjIj(l$b(qk!y23a}c}N2?0fwRA*~l+S;^a_b6!(KB+4?dxd?-NMV(Q%YeCg zCBS}BMR{H?A+E^nV^m$hqpfVK>{>dfTIA&uy7TN`R!lUOjk`lwR;vvFLLWUrhy{R? zCXw@-XE$z~-?(ws_i42r?mTz<)z@Bm{q39y$LoS7=AYF;SJlU~;n%Cw6fvZW5{q?l31~ zW%mxnT(Xl>mAxcax4HDj;Mq;0GdiiWmmniMlDY?O=(Q?41Tb+u>&;TNkL_Z=R0b(A?6++RZ$N?@O z^;+24Rs>wZ21R6!ITOT*>*h=jc!I+UNLyYgC_>I^V#TeD@EwQ6XA+2l-N_BEsI*d@ zf=LTRGMoV>?VMPZa&|L;yD)b>69?M2awfMF?tz(NtP~=1CNe{IM-p;LQ|`2wVMoCF zBxJLrRY-!{_NnB(X;Dtvuda%&Sul=VvTJcSf+uE0cB8)UQ#V98u@TtO9}eZ}qEodz z6^EoQu?$IsWd!X~$7knhwRTF9Is>Ka74)-9VD9%`f9>h^Vt3en^oNf>{==v4-f=SZ zufO%y<#x-=w{PAYhC#JX_|0bHW>8BaUIK4&B8Jz{T}{;u)R{V{BTiOO)YJ(+hb{|W zzm>)_vmfm$c^%oVY6to!la5zvC zsdRT!1JHFHx%VlB%Ob*7EaW?*{~ZURPh{u^D}{&?3kU`dlDk`tPHMbP40W>-X?f%7Q9EUs$2@KDE5)VlXk^#^G@I;DZmg+wIB8$$Gt( zE?r$+t=H=}zxI|Sp$YH(>em-fceFqQW@c3sO^Qfj2@(JKt*PpEyZyVr`@0W6{E&!( zMjDjamo;-c}^wzCg$CmM}m(JzoZ7-?z$=#X8EqGsC*jf!2!OyV)eIB`ct9+i)OYhIuiYforO~8mNzIu#5p${J z;JB{g_^tWYBKDjg=Lozk5*1kRpu+&7Va@X+&u6xU$-=^DpkX7+UQqKnui1fRgfC@88r7oCQp)bIch%y?NdQEpd^P5r1ZD(x zPsCcL$x0sgWg2mQvKo?CV8WN_rGS9ito^dff7$UbXuf1-5;enitRVQ}!E+mvcteYx zOY`ihYv6jtL4fYHFV)=ev4LO1(4C%cE-o(W!&|hPs3u@GC1zGik<_`v%=^Ad8BEi} ziqAiP_}bTJ(u)BcKH0SgsC&?}t2)fbFbv@_pdpy07!mb-uX(JAmqpV_kD^=VxUpxp z3Thdl7H=H$kn=!2a}V>#^Pv*xlg4q!gNKum=HPcI%0u_J*5h>IFGj*U#eMlqOwF=F;su-bP9ZVA;Kh~7A zA*v4&%9S-I@8L?q)aF61@ff46M3@%>LPeCBLj#K1(cb%!8QqG);{GaUmIz*J>IqEo ze=(JO)*02x;{uV}5@`*V3K7-9_9&PNak^(bo9gS-rNPSt)NG*LovBLk%|6g<)93wr zK5CvhCQ@YA)R|(N4e8s~Iq`@*f~%@ab&$w`g=JS;SbzpO0SoLKN7V>!wU!AI=x}Ix z3#gbgvv8EeS~NSX?;T|11_U5pW`QJd$@*m70O_qZ;zR9$$7)E#Dw#5=jnH_ZYHpUc9Dftd*A^t?s-Z#mt{)?{Zn8 zK!gAkE38ORCQ=wV2bB_5kTVg;#lmuug?K0jLC;LJxEM%`2rwp3uHweVFf)cQ%slD} zl`VrZSqG<5$O{7oAty5K11A-pOpT&VJR6wEJQ5MEy<1mQ*em@p6xRCQLB=jj1R5+6 zgcCtVB=-bzChedTxJ%Aphcldz3jlP3SCVBj%^(6xR8r!Uum(m#A)A;lLeQ*zFle-E zcOmR0yTEAN(YQq!m8D;8GFXed6N5U_a&UQ_^ z!GkBCedgJcq|^`8ck4UPtY5{ z{ri4-k(tVk8!x^4C(1n$2uh&N@`DfFFQ0wH@GBYayz{Pg$q&0H_uu!6N635Al869g zQxFYj=iRN_C(pky4V#gAbCRb|AHDa>Ash#{FJI5>xD1R-*;8 z67Un$l))*bQYNokv6Q0IR5Dun#{5k|X~$v1M=9P-t8V42xnB)+-H1O=#y zW`4C{0aeDQ;Tk9lj-1FII|9k zgdOHW$_(?vo3B0pqwjzF!GHSOtIM3h##CGx#FV(TP0>h49Y zlQgQTTcPB@SVkjv7RqKzq+xx-M?^iyPLLq`}pDI-`@Y-AD&)b<#H%l z-Bhz;FN5@AN&I9Z_g*@`eNxK)>26BD{qWIyA6y;A6Ylz=1QLwk1S``-a?-CktNZB)y#>>q=IF!z#XV$rFji{C2s=`rkd+jkDyS^ zVkS*mqHLL>x6(8cz#@msDFn+Bi#x`=3ulRlLyi+}UDq>FC=fGq5{Z`L+)B=c*}Oyt zc?KmG0<OD^tiUYdBNdz0%6BVa@!uG;#QAVrJ7s%8K!SwsLb)p;LhW|+s&&E{y1 zP^h_vF-N?XY#nisX5Xq#+Uz#RMWco09H!ACkG|wLVSy9PK;CR5XLRqGi_Ww6IIE8z zu*KYlhZL=_JGNK54}bsB`@i|^;c%Fduj?nl@_yz~a;m_ShMHK08PeX3WC~ zptwoY4%+d~=f|W5BrU_1`C$RfrI0!2Pe1*Xnb+%ezZ!^W7>1lPs|qM?AR&d<;9-@pIh!GpM^NP4;Ze!oAS6aM(| zt*Q4e2ASsFP*nq6oyR}Mr0;u0E~ThV;}}i$ zScEs5jjK0a;j#WYlmp|6>-8E<9$~%*W(FA`d~EwuCwl;+%jp_TT;`n`4RMZc_0O)C z#qQr$PelWLfvzr1vU^Z}94&Y5UNN+`cC=O=Q%xPw%wK6)R-nq-VnJAug*Kyqp`IYz zi*F? zTV`(l{bH<~nZ0$HclQ9%>pn>ECYnjixs-V}5K$N-ku%h=Hc z*CcEfk5daRsTIQ1Fw7yTN&&RWehZk?YGFRYLPcHAjEuBrTyAfO#$s{hnC3Cpi7344 z_?*uW0syay=G2&nB(+2Wpc-nbt12yCkP)1zWuzOD+vavtJGQpIj&+XQh;hY_`Q5;e zn2-DJJeS;knG+7LJs$U%YHP`{Iwln!4b^IP2M0rxqC3+uOI+_N&`GKu-Vv@^qyfrt zJQ+Z7OI#UXhN#IRgSEETFt07Lqa%0|9&lpT;*uhnj5Z~Xu4;RKb>la4mS(})9z2hA zo$XF>QFjlA1CBSp_S(Py5C7epUw?xWJJDu6^u3&H`p{ewW_PPZ#v{R1f*;Z*RKq<3 zAU(QR|9X7YBPMpF_o@0nj!=uEDw!}l=*!y4_g-G?(RiR4Q^gUPBz~^IsHc7eXxD*rpv48aN!3V#}yRGMGZSLxcdo@?k)%Nq7Z+nLK~@#=G>+-~aq)}KM1u^{ z$@+Aqs(Dfp7LvYC0Q$ZMWmV55o0aqP(_!cm%YJw8LV`iicYJp1{N~AK&5V;(N0^4r z$G!d2ul@jxXQ%7)v-R1g?>kPMyQBh2xcbIhum0~p{q^VjrwNjyS#8Usxsj8R5rIyI z%^)2VIvI!FFi>DA#PTG$A*+q1E&xf48;JS(Ra>guv4(WNCb|T5lcp*IZ&m18nay`X0JH`zlV_y&g zm^lP?Lm*=E;zZ2QqS`!QFV1yQfGF~@R%-7(MgX8p2DR3)(GiI6_pD<~#4av)OD`tJOOHKVtv@AOJ~3K~ztE@{@~;3sv1+Z6AL2V6|G! zuO_Z@adENR?IMKVZnq&Ktg1QZobx=>d=Z#0-|zgY=J^)rs+oZhzy zyKPjp2NI&u$aTR+^j3Wzd@OgLrU`RY)dWfB4#ukQ@t2c|h`O!|H3R(d!_1tI zr(I6<f+Lnstz zX0oy}-Q85@F56CELUCh9G4n#v52Y}m0DA=5AfBeFkn23PTKW1P zdDrv%eP-c6j~SOX0v=SypxP!DVg}Jv)R3dyNJ^;|y$aOb2*uRhyRJ*2P<*t7*GARM z+^l%BJHjnnw((W6-8IpWJuYIP`u0-S2+4qBBrcJ8n@;c!imRS8wJ-EW)NBBGdX7r)k>ncj0CN zk`DNJ{B&I1Ix;d=$_Pdm32hYPFhMB+UZh4iND) zWit;Zg-A>IEY@TcG%TkSX7FY)v2<>jx5!S+3;sCrZDAizg5z(NPiAdnq}HRbdO1|L z|Hxh*?+r8?h{*KXY+Rfja7VDIV6HVrvhZTf69^i}AqB}4X6B{D@H(hOezjpz+!Dy# z%JINtR;ancBDE6{QI!OzO27}m7s5;ZvSUp63P6}roVx8LLY+wn z<~ZhBm!>10$T^_pm_$!Ka%sL%ZS5U#P?K22yu-zRLgyDi&cS#hbDas= z%w#hQz8SZe6K0FFa062*RuAEwZ@m58AH98kwXI#dePOts=-<;fhp3HvpfBx-o^>~G{H{kr%J3sm}|G&t4w`NpW~+=IrjZ z*1nxP4nSN;00cph5+zHNrHG8Aip)rMNvcHUBri$%HC3sUU-Fjx3suT_QkCpVQnCCX zmlR93ELoxmUH}myE(8c19N^&K;N13oUApI-V~jkE?p|wefHa*ru2iKT4mS2)t5>h? zc^Tsy-}t^}l0=PSEj#n;R;LBG!3_eAeD6=u-)xGy0-uUhm7du?5$RGakpS^NtUnmHMtR`w? zMyhw-yZz?N-)`da*M9wHU-+rVDoem3ph5((EX|}`0eXt?enmfsxMVF**fPzif|9Yz z-SI~UAHBc(#Pjj7=K+v(iHrSdcVqxvU9pK60HQIX3aM~eP0OMxt4^9pP|blc=a=6rupY&2$!ngHqw0`FV|ZZze^>ET35jY*cN9M#pO zD;bbdSE~fcfVdEt8!13VlmkLN>p0SM%a9!~aen(a4%Y(`sO!3v5;ND;got)_cHe*h zgYUoo2CBJ#^87F6&pz{+#~=IDWHJ*GkxV^LQvsorWUg~hT#Bx`HUvU7QzK%Ll5$?P zDJ4)Pz~DlB?wW|35z&yRjZ4qSEwT;s5I@33jI>#J^BUDUOBfQEF{J7DK{ItI0f3Mq z@s+)cS1(=;0I6#sV2jqFA(ESeIK_s+d&OVtadsh>F2v8lQXanfzvVfBylw zM=fY6#j(!SYPDQ05fv#S>TIi-%_cc#r_zkI@V&jg#bV*?q2+RACe5S*#N~2cLLI3# zB@@;XC^phkD^gV<14V8YU6*oaT2#x!urN8?*{UCV6vUL73$USONkyfYB4N@}q%*?ErNYS@w{N}i z{(TNxDXX9sOpzc4m~FA<6IlG|+7W~HHxad1n-dZlLeWxG%CK1gf|{yxVfqc(eJ8D$xIQ@$8mgPWtEvHbv%G-; zq1S*tiV{@-Q&bM5YAQoLUX>6jaPfw8v=MzkV)uoyVSb@EpN(Z*pHm*PyIc|yxyqpS zf7K$0SjCWY?%gfGP_48{%ovHO?{88xLX07r3r!*gW43WNN+g-AID~umSc0ueuC4CiLOi zIy-b7dRXKpTocn}?lk{zF`23O3|@s=B|w|IRz_+`fJL+-b)ze(s!`6KV}54-R;a zsf|nbc!oY78JK;F;IaurI)A3VHHK2KfsUQYNjD}m4jerqLZqCtx6X4}hZ%|Pp8vTa@)3MLJ(Z%lsRrbL8h2fNFMqW(y24%=mCM{lt;*TydxWT=FFJfJngxw z!k*;@dHUc{woV-RC~^yd@11haJ5dqIr4uC)FBB>esc(irs6F~IEEIa~E`9tCjK>+Xsi9;J z{c_jiBsBchmjyA^l0mJ5G~EAQ+9HGiXi|#LUp3__j*MwTU&A*XcNNU-)dp>-ALsZH z!01_2un$8#rdiAGoEu3!c!X=Hp28V^16RH?UMa)2?0N`{w87N->YTtbE8!x}~Qtpz= zMiTnNUR#`ybj`QCi}Fdx^X@y*2!XuTu$u7YFy0j{6vyO%DP zD@HbSXzu)U?dNdVY$pML!RFHpk=*D?)ZC>M0L;_~2jmb2{ve_#GpT{AE14OhsR|Q< zK^dB%d`693QS07AA_P`b%j&&vfti_!*sSOvZPu?%?5rKyr#8< z`o`kMfNt(S%oqgdsgyYSV*{E;(j}L!>$F%Ik<=%NKI3FNdyPpblW9l5;avb81?1>fC$73K6PD>>SY_iI*uh}=ozVWdO8n- zdX$>P5MvB#N+_=#7EtaQkpg9U7_&XM+zI{@0T{14n|O zr+FJV2VGT3h1#w@aQZ(E$xdb*bT_Vm`r~5bGz5JPHxNeF8fw9V#%9be` z9*Ne7qB0e@3e*50l#Z>S5+Ip?DFZf)fL)74gVhyQNz6o0kZUw;G}R!2*d5%zo6;qN z$@NF)CXB(%Y9?AO<7%;^IZ7AEYK|y!a{JchOP34w3snTDb80{QVEO)Amm!6~3yFX7 z;_ENHd$gZO2wTYtWU4ATAk6A!u9I0qfAEJdE!vZx|HbEci#5hi#wlBA?2A!3#sVkm%!Y@!IL3Prr}!NAOzGoy%UDQIS(iJ-dr z$n;ZBTfIX-`QGi5cV36?geu0oqSRKidI{aiauv`*HGTA{YU@(=;YAoGvkTnN)@~tI zGc;9ocy}Fc_AxzJO4-APlas@g(u*&?IG-;8xmeLu>L!TlosT{`I6RCLx3{)F{rIP< z7?#Ur6C*H%5Qqr?i^$38TuLFT0fCszfSEW@V2%+=@}UoXJMhLTh8q@1n-R+fi$YXC zfv9C>-t6YYnUS);$<7#0>wh97XY899Au{0BY^$m2+_uVqMkYY0Auxa-hN_BfmqRcB zR4}f%qR@8p7|Ad+HD9>6{e>4k_wARKr>DyzW~9u-%(>*YOTIfWQ-~a^y6ajZjFAx= zqR_Rel;Ryf16%@C6_{fYK?4!fF3nF`X?eoYG^mgw8wJqD0#@}TRe|jFkVt_9M8S%50U-vih(bL7~)fuETGArYgInW>2Rx=RS&+^GTs zBnSN_;!Z`q#uFl%gZ2Pm2GsZTC>Rb#piHQuIyQt7s%hU6XUc$ppa{sMPKN5Ue?;%x zH$#9xEJM?`IfDiO5Y*eiM`s>$+dJ?UHtUPuR8c?xREz;mx2&Vzvo9v1o{vmq1Hj><9rSz|Y&^;4 z9T>}IXlvh*@uNkAA%qZ0DF+YtKb+padgV$8VP|KDLdPKh;Njt+Q==Y#{PC}T^{Z7? zrIfm^Yg0GsV|oU+SS)Vcx(LcGh>H1GjDBeZEtUVg^?B1LlC}a4a6E>1XP8YnSmHa&gpWw ztV7L=M3hn{TJ7v?i%2Qpni-qJ4El~w^cCJ8^f=fMkr)BUY^|t>h)!SA!OFsy#8I{E z-1a>VV}HvgRsURO(O($!;P}Q^?O*Tp2vxPSmDEkX&Y5^%W3S)*EbDXL@eD2pf&fs8 zfal}9E|!d8#(Ka5n3^ZQDJL^Sa@~1z;OyKd;#h;(z>&u*+`M?)FrM0+wSqb`yxt! zSVVHlDd!~6n}dL%l{P-GgJ{`ChSE&u*aZ(+KDaWeCx=Dn>xcgDX%I3c$>!=*{1VDApri;{}zW zM1#yA9zyi&P8Y^f1?1q<0008g{{H^OE0KKXbR zYcMs_2xO)}AZCGZHJ=|G9CEBv%2M)YpZN@#P3nlKUJFoFW)H;_0fC8_9^Suy=fjUg z5JTMF+kN)4&$t^lcum0D^$iGFA)qCIVp?+6cW=D^&RaKr@cnm=4^B=_PZV|U!lg&9 zU4Qb4C!c=m@kbuL!ej=B%BX^bVrmGb$PeCr|JCn(|NZwreDL6)l%6INWBB~%pZmGL z{c}$|{y1U=$f|O3c=X5r;$I#gozA=579$D@%NvX42G} zmq=1`(o~<%_#1r>2g#ZomJ({U86VO_sBkT&h6-)BpHCAObRrDKKOa zHu{_Iz4oVn_H`)%EUL=WPk-tk{Dc3J$q2=ID(A4@d-c_j9O8#wAP<1h6wC~WD2RFe z(vZ{?a?U9gGc;4rG=B8LYs0eP$MD}x43y7Tq|Uy59WnHzU;rCj2!|kKoiPmm^Fz-F zuo<|VInKXf+|K{)i0yyi!wd{KkOnle8Z8rmfDs3?3;=*izWwT$L!F7^&CI*Em{?rn z)`ku~uuxEpi>ZJRNI+IokW`|f8p|q_E)y!sw(9NdM4^Q&pKmF#U-u>xc{z}~Ytm37JFf|6) z0u#uGby6_t>d;*Oa@AZnQ+)iSeebX3_FJ`NwPm{V_VnT}q{ zQ=OUd-CO&w{FOUeR*zoiYfli(h&T`iDYCdn*-BK@0u>EKd^1xa5YS2unW9Q?LV{EZ zW|WW$b3kIMV_PA`t=%U+-9GrJ?5`L>6)>5icBc!ye*d#iKmGJmPh`@>EtkvbbXqqP-+~(sfv3{( z(eY{Na26&3kWE2}joHGqni-gt6wxkDW+f-JqAII4x2?VZ!NIcYu0OK3J)z8L=i=^U z*5s9yp*s!{fvkv-nki|5#5oWGYbwNmxd2fVMMY!AtfgoHge(OD3y^9NvCd1RNee1B zENt!ah)k;rX0xh_VA5r6d!IBjBoomPt7#KU5s{MGRo9-*CR-6r%IY+C2-T$vv)MEs z9IfVUEkXuC5puU6BH^0CbR{{0#frPmkbwzB6hOP&8mJnGfJiYU4_C3Sg8~hF$xi}C zZKxpn&u3_QBL=Di05s%pre;M2kxUB(Hbf&TW=TqjY}Q|ZnGq9sK_0;nlzPS-41`QW z5Z6X?nG44&5wVxpvSK>)b2}FUyg2Th7XS!Ij8sbTsi3N{2PGXyGBhPKk95tI>YZ7G zgaA?ss=N91nvsDbA_4*hHW9}kV~7Z zYgwT`O)z6d;6W{+Cu|@Y=(mye@9;8HrJh-C5`4u*(})1@*#O9t|0_; z-D*K(thmysswQI0QAASF)5X#Nkzxms9B1mSiVo& zux#4ehg}s_Z75wJqFPY{!hnRPMP2QPOs&vZ2lcz>oFF=5P1aA|pE0 zgMfT~UI3Yz!lwC>$J^fD2xds&oFW4RHE2toN(qcaK#XWZSYe=MVyK3SsHR!96w4xA z67_SSTfG4e;^~`nXY&UlLNnYTz}nh~r57sz7=2a8rw-s4oWl!%W8d(=uh#KHHra2Z z=7nwCD;PI5a@o+nNs$0afz>KP1~k>Kq^|3vh#&$uLkqR1d5p}ZO*2C(BRNmaQ&$jG zRS`Atv-TBn*S+fpHS`K4Vm*nfB@A* zN?~SXG_!2IEsD!G^=fngMMb;Thp>ncp_paWV&Jx{YFfaz2V*m_-d>yml)d;mc02v3 zO!kKXqvJClhAcuUN<4_^f+CQa)0_KM5fRM9YnY{}ZYxcUelw zDV3B$Jq3W-Y$_$s_I7^jw|?_4zwynNzxADigM(o?_#rndgx%fU5CR7VbrULOiVj%< z87d%IUDujR&RNZI4nhPqOht>Bfi#mE(X}tlv2mX&3IA8?zGxZfEeSy{?~tgbUX*ZlnR)I5K=A(NEBpn)*4(=@N=Jg_JuDz_vZKCe*5ir zi_7d4BM5-vB@RiYZl;1dZJK93^VAn#cz)W%Sk;oVx5zVr2oex+I5|E2_RHUV=f=(X z$@1iM?trqWpy~G3^pR`Vo_z9CU;WB2%%)WWB{niZR7Bc8*#F(%{XK(_lB(H%^tZqK z+yB{bq>@84BISM;ARJ@^OrdMLfB7eW_N{OI^=c)C{QMW5|L^|$XC`%YjLKk;X$LR< z3!|#_Kn_MJb);R@Fej4)^cB`}VzWz+Ydxym#f=h2Qwizw_uL*HtYL z7K2jk)~yd;{MJkF{NTd}4-Zw5IZDwYLWn7s?|kRg?|ttFk3atCul@S3KKb|~S~^4C zKRUg4=i#!`WJuA*JqQ2*AOJ~3K~$k4Q$TTnjfkw4-@AG5rEkCX#1l_E{nV3R`O258 zKu%Re)Uja)fjQQH`B#5sKn5Wd%sHd!E3dxx6F>RIOBc4>ajS?D#jed-)mbnnBdVw( zF)%lP&Z-JT>^D(F6|C)wDjJX~wr%=XfBNUIzVX&_nGr&(t*;ZnjRFBs*LDBmUw!>= z{^pHe`_*6h!VAx4fqJr?3octhipVjS1Q5)V7bG!tm4m9Dl!6LmhJ;apoI7l&1~hJl zqvDGPazrFz?qr9E2p(#?@qnj5=Cx>NZ?BQgAM5y0D5X!YANtN=aa&LSvF!B2@Xdeg z@$Yo)|6e^2!I|L*E>5W9{xy^<`UK@%By=uwupx~ePKySLM%+tdSmXezRaI3Xb_QU^ z2o$hLA!ab0s+Pn3c=<|+m6)mLf!w>Y7ZDiv<6=#?v<`q?KgUgK~XK>!ILfSpQ_3K&5!aHJZbHj0Q$TUXlf0qVl5Xljbg zbycx;rlG2<5CUM#RzTc<1ho`G@&J=Ku&SQU=lAYRK{~Jw`RenZZ>~MEM9vh{h=Ihp zK>-U80dkC@RtCu(1R15QnNs1ar-mEVe~K6^bbmKnV4uAb|j6MNsV$Nygk(6p(;`h-v_r8z)dO6*6;4 z4IG&Z;uiy5*R57<*LArl0E8-1FQyg&EN2OUsg4A8?ds*-3p;lo+0&32A_RnL01?bgQn#$DYFbCJMVA*Pt67d@7)iC%RfVQq*M$(c4v5Men7M6Nt8PV% zOst}6EeDv*D#WOV<@B@|R<4Fsh++&yJ1`{#CO`&}qPbHmZR)ZXL=)+XED1|18Us-9 z2JD^zv_aQ7^FO1I1LE3WVocgMHU&=%(aaq4G5{hhQivD`i)j`yvs5w}Lth3pQ3b@J zeXH*fB=r5-pF(OUK|oJ)fhrmM->4z%?ghCsQ{R%G9suknu=Plm(_#I zo*Soj-Fu50eQ7Br8wAA6jG0qPRTY@oL{mx#SVVeNLy+a_PhpK73M<0FEb^KPVm0Q(2oj}FfMi5eRh5C3E(3rI@wutJ-=%Z3-0{|}*OnfS z?z@}Tj#LOHXDpKZf!d&WGd>z`*c}CPdq(Q;p`yarbMXD+Y~vVLxigP@Gbh3`?9266 zFz9a^+N182SpP-E-y)ha*+p)9;_YnyCXQFM_0b<2WY(-TB%oNRv zIEodZhuZ%gvg9ApN`EF285z?6=4-U;aSsaG-YM*4t05UZOA7}WT2agZFoyc##mh&B z`;RHv7r|>EgwUs`~g7Pc+lX6Hh$xgE!s`fmMY# z{;=D}%zJx#u8G7-Kvt*=;D*TeIyo##vN%U5(OC) z@zl`z(MARW){B9jTVi^ElFUFw3NtBc*L69UrkTb-Ip;v}=FJY3Y9UdyeD3H@w)Z9cn8@o@6~bfe|w zcMQi%&*V!bf+CUjS3;C#HZOyhdDLDzItv7PvhlP*-^l9cllElNy5kiK{ZhXfx2ZjNyp&*b#G$>+D5pfHhKMuTX z?Yy1ic==oXI7q>ed=TFg6%rLcHo`+a5S%?(4cQ)q&UI;k?U90u1OQ7}!25|~6|&9Mv>pIu+d^5R5z%7vIhO0Pf8 z6HObpkKG)*W83cu;9wnwrLb*!m=MNUU~VY5!;Ra)ia=PqT8EPnA6oW~sxKuUO4x zHe~TH$aYND&C2uhpS8oUhJ#8oM44~qQY8AZ@5c;h^*3!9tOZ;Btvt??!qB+iyw>%3 zT_4Yz3}hxJOQiPh9EkqwdrF|InSirP?*)+H`vF#&z&l;7!i`nV z`s&WxfsL2n3q5aGkqiK)APrP0o$w$ewxA?@W&#i`ZBjatN(o6}I#hv^2Fv9a2+gA; zPs|X_`tqM0KXU!DD+E&0k15M4@zblD-AH&xk*U-L&o|4jr3{JXvPF>srjaceCWk>0 z+dG9D5hSs$XsM=nuKJ3P-XlhQ7Li%u)*sf;8mD#`ZI)FZn99n5$th;HBtI3-4XaD1 zhPSAxjQ62TLvg^S$i;)`R!cPRrD%7T@5>N#iy@IYhVF8`|8}CoO7gHh2>S&&c_ST^>Braw14`hzyji1`yTN*IR z8;o&~3Q4&>Pr3At3W-D?4NU(p9iukq?o<@h6l{Db;n%QztqfuY^%W9dZmxmDTQ#+j zrqezAY&?HW%#6GS#BgzHK!<`oZ>)oK1kO!gpiG>DRVsjXXfym2aCGU8-%{VⅈNf z`?saGLAlh-XO*ttKi8H9=k7XlDzT7Mt>wz&gZ296FIF}VSn%VaRG?y(PR!2l_8Vsk zDlvJdW$~Y0hx2Py($mxc2r-}8(EfMh5A~K@N-RVfwz_%L)N~S!=HSwxVu}2CtYt}l z{M3RfA6#4d!I9%KRa$jT^qxkQ5-?>U4Jn!6getzIKF`?RMKPl1P<|LXWQe4%&c(}f zpfOz$6>9I0s@3)EGDM-~aBLw#Jq+G0?(tIz@tA3|y&(yL;@($X}Q zwwcL(x0thL%>Mv%u^@f>HEx#pvjh~Bn1O?o5EX*`6O12{n(dd19dgP2V~8qP@6^Pu zQ1z2I{X^W`;PK)HmNZ5%G;B!pD?v7=6xwFh%pWS234b~uG757)4vY1^tfHhWBNqVP znF~ZWpY*z)ot;@Q*Td1q3DRN>1=(v4mng|#ATIr5U?g?N740k`n-!1I)Ij}ce5Aji z)+$YP2G@vX49?(Ej_Jgoqq1&hGC27#n0zc$8~Q|$PbP>c;>4GuI7Yg+a@x#`EARWM zCTJ=!(qNZ}?@u9;nq44&IHly+mn-wbX(gove|EG;b1okV!?f3`+iRjFN?JfDNH~xj ze2q6vUVGTGPV&XUa>OD+lKr*7%QDATma(HBQ(qFihm8d0d(EcePwByfSTzgzNhGjF zr~d%O=y+7OqL$CK-3`Xs9J`&7U;L+IqwZ$$Oc^RpOF z>-w6UZ^ybjKNt1J1nB(lTzO<<FFUi`{+Pah5{o+&el5D#aOBhQ)f zpi9rdmAQ(W;0%LfZ|*v6SPFgj`~8RN7>*ZdXaRTRtXJ=DPW~>;?>yA3&+~j#avyd` zp{`CXtwznL5^c|JHQiW?6>D2e5wgo&`bM}|9xEw2o1M7$2W(NmwBT@yIo*b9Z?_*o zHMNkQfrQmS!oDmT^K?Yaqj~?q?%SjCcRX06c*!ao6zY}glm~wQWDSko$EHD&8quHb zLn|EllFHMW{P_*})!bNTBDQ<{;lM35VJyF#l=vYMZtYFDW>d}0P=+sAC2kc9#?(jF z98%1}$mrp_)E_T~E2RWW_k~Iv3K;BByU)k*0pJ=5h94+grF(+ zpRl()+D{0h8L1Pqwjd<;135+_pthOgXG zvfs`1hYw$M%dIBvx}TnoE1dus`>|To78dCos#(RKGVPn?p-gD9{WNVLpg9sCy1Qj! z=Y58r>(V-6J%9DL`&ofm)=htcxV+!LuE7BYuO#Ji!;!dry!ifbkFZE5O3AQio>5xO>Un*1Ag=1cB2drVUo+WGo^q0$qc8~i2l)=JcGbwAKRaz)x3jP{EaB=iwQ=5lj$2!}D56j&aDPBVx^S)p-|6j;IOqqB{8wmBZ(#l8^wZskxcAA?5YoxnAjR`0Mk& z3^@DaqP0j?6p+AN7V_a?)qNL@5u zPTXeVc=;o$0JZK4YFIGRk!ku{U&Ii-k8FT@&D1}7x=PXq+pWx1lwgnJu5QGnGN(O8{GA^p%k~6HX%WqHq$;)fqHc zpT#)`9QOL*wbI$Al7)e~{<*)oxn@^sYI-Z;?d|P8G!&Kx7H<7W%x-M!rXg2kN*!%$ zUKy>n&&DP>$ID1c&t01%W|uupRlt7C204D* zop_<}(x7y~_|Hf2+k8NwI0>!b;ttIEx9paO)jtbeF}bimX<+a>hwu6qxl&yc=}HI7 zuZ9Q+WzD5^K+`|WBjz0WPj}5SJhi`mYV$LD0J_yzB-PoWVaRW*+_Quf%S#|(R_F~g z@Sy;8W;M8ZknIz3ihgEMdMB4eyU_HlRxy1>O8?|Uo(MogZ2k8JcW!OpcoSI!9GK^- zezRX0qJvPrb=-Ladk5gm8=h!z4tToi^u9Z8H5zNvjz#6xQ|APr4W#tveC}?=7$#Jb z9PMLNc-g%Y5W6Y~yo?FlJN+v{F19SwYZ7^X|<$PEe*MO&qE2gMP@Im@R(&8%v#$w!OX z9NHV%F#Oxnn2HL82-9qM>u<^TlZ3i$4aHEIOsPb40p~Zk+Sp)8hmUVl_ zA%@`JJv~I?DUM_camA?+!APKz_wg3I)EgL*6b#%vU^!H&b7~J9ant18phHsLXKb`w z^!UJKZ(R;XC+jc=q9Kps_K9zz+B^Uh%>hm)hGacdYY^Xs5UcIEn9kpYU323OMp?~a zeVdswciE(E{_%55?lK$rI}}`$8HGX!?Tuf(tyJ$?&RWYB$Q(I2c?Q+3-LT#WaTtpw zTd))WPUNj~bt-h4D?klVdXl?BvwXUVtUAAbV9B~+$`QG$IVLn^wG>EE%l}gDy|#2V z5PvwqU0=_AcXFgOVZE&q1_epgWVg#OHshes@S^=m(2}hy1x>S5*AbaZfep-{_)CTl zvr`zH(X$lx#S%YR-bLzZ=p>N*h-b@`M4bXeF|(z`Aj;$yJ=V5{?ewa$i*}Gqvs#L) zfT6*~^_(hdn47L%HrCcgy4+CtdG;tB8f8QNR(Zb`5mldDD_I<=Xw}v*4ec=^Vl7Te za9#);M7i)>C28=pT=bkEzsTq0odb z9HvVqC)ews_uF0aU{wY*kQD*t#|f7=L|jaP%RF4&!C5LRxEoM>Ok{vy+N(qtXs67DP#Tw;Vk`8s zNp)?I!(W{VS#8aQI|mI#daL*Rb9^EofbX3Vkhk;Qd{et$AZI#?HQdAI5IP65$9QUz z?rW)feqy+aJ?@@p1w+TCNUAQ(ou6Q~-Pf|Ad(`{#SAQqzgg4LR*g@v@MoMb`*00ipO zrf=VWu(mxGLY=^|wH=QQqb^FV<6A0#M+~dXxEt;L@_Zfzg^-&QBpw1Ty?zD#_7#zT zlg7^ZS2%Hyi~rTB8|wjvr7(p^jw<7fowhatC3SQ2Hs1M&78RhUOFTjG$Mm6Zy5Vk0 zAT`ej0P+?5r7-^q2OX=ukOlQkO{3Ci3Rs=Uf&f*<1yzt*R$ev@VKrzTku@EHR+vPi zwG7FvnP0GON>obAEDzZZ_%+=53v>=O9}f)8rX*n0rf`4ZtLGtK_Vvs@u336K%pi9V z^_7!AnHWQsCFET2J;65_q|etyJG?3ph=;-CFkdmMJg^9SVZwd4H9@%4Mj+$9Q6jHw zZ~F$rD7HBvRTAtAzpU#p;+63V&}_>%U_3eFCF#JuY2--BC3S}8?!M+GfEqAI8)0@M zW8l4eWF|I!MKYV+)mrAuWxx>Fb8gY{>$UoAq4;AmhEy?gZsS zu~5t1oz~~`VUTi`*8*Mvi+QgazzT>gC@7M{@$dZnJQN-8?P?(6uxx?1UulZpg&*r9 zD*|8)DCrt$ZdEY*W=GtmSrL?*##fy&&n^&~-<4qc)L3ZpFx{S^20`MSYl9ve`!^tk z`HZrSW{Ki!%?hc7O67JgwJi%Eir8n1Smq)UWPAd3Kx&5{B>F`ch5XtiiD704iPr(2@4`;b93^_=d4lz;sOwWn$7P70YUlkudEi}K+BIHU zGl;qjD~V5KF;lg%k%7V2-*vSi11cNLRG;(MztGukSos{&`H~g9^8!8@_kA~9#Z$|7 zMA-|u$@aT=m7$-Z57DaC%kBds1gXkmYQ9CeCOLWTpQM0Pm$&LXwCV6u2}1Yr|W^&)h}14kBFS)_o(n#SOLQ&Dv)`z>E&^w?dEyh zid;)BLRBlX5t5Swb}25kvQL+ILurK)u!nxS_H-7!Gg0Bf3wwzPyq=u*DkcRh53Azs zAwtsM|0BSfJpS5aNX9f(n|XSAa`yi-NhK@b;&Vc|@X6tUEv+wu8@B__ zkN4HlD1&O+&*IO=fv^xR62TI=h)404i5Jh8XK7O@I7u&pP}JGp&=CAX21qR z-S_1|-1|LYP!7Ge%Ev5nL~qd3A6@oOX|hpJw4a@UXUEO~4+!VU+PcV%L+7Ul|jf`ESMDvhOnoyv`1X3avX<7k%D4kFd%kvdoF(Gf{veR)eMJg5*7iEjw!30E2>HJq~=5Thq&=6ld>*; zMMKK$$4D$XHrZF+np=A6SB2|DhvKMf8Aa+qPy46;@gcHVb!?HViyKcJ&+L(;m)4E* zsk04xm6Z|Ntg_`giElJZf%M~KrjRVR2*6mH2gKy{h zYIHfdD5OUDVg|iwL5175ICZFXm$6ufCP1f4HKwU^=g=C3k(ws`!wa_N zbnh#`gi?^fcEC=^+;Wame*RkhXp}#Ds-2wJ`*6Y_4@0bAOpCfU`Z{=AqCG}87b}af zO_+H)j_+$LsMAM5=XrzOAo9xx&c0PHWumYI?nf0x0#qo@#@>$a|GWUHdaAi1nCoTv3rMM8x-U`}3*3{?COflh*U)xtY+J6)&;aS}SCY zRFWZ65waa&a3%s7V*F zQn!Okl2_+sH`0WIaIu|#M1WM1C89^=r0eq1lNi!k$<($SBK6*6Ys4}q z4YHZdxCkE=x_Yr*@NnV17Ov>CID3SpH0w6c^U``nkXR^N%iEa!W%+JNYOufN*OCh% zjHM1Dy8q5d#V53fK@PYl~P9 zBb&z|_+f-w=lc=a)xv38k9?G4lv%VNT@^gk18gH1bniEpWEAJR#%kf+H39@+PPbx* zB9Jm)IJG@26KU$GLP-XaP}{+&ul>%$ls>Z{+U*rSMjRI)u53t3rNR{F29BIlNl9RGeifXsfx!5!m};yoTo(g_Zwk(>A` zR&=@UcZy(%n`q;|Yv}fSxvCCqMU++&rwG0&r*d(_t;zuY~d-H+Hbt1TXfzlxNSemn9XwnYA* zdO2oiI}FZT@)pTeEkOu5A|fJ&R11O1&H1ysv1&hojJ*#l zo7R2yaw75GdJ0*zuS8z!IEUtagIaR68_LId%N>n_$yxC6)2H*{`J%E}#iVC9@U1a6 zQR;G7b_wj+7$EekTs;jmL~M$&WQGzHJB3sF9n5Vk&P4fj z1=*x1eWfNCIq*tjNs*`$g>Ff!hc7^x+jAFC(Bk!uWB9KN)aUZ0s#+n4dAN$d3Nt z8kee%8bu|Fc_H0e$=J9G zmna@sga*C%3IyZ3g@AbK@G1Hcp$A8b79!3a(rBpR7Oq)iI--T3iKd>5NBJE`X(qwv zPr}p#o%czRm6b(U^lG&iIS$^x=M)JiE_$@72!MRR;LT z^Jo*)5O0he82H$^^=in+JS70r6=Ip?W4UBe=;-1vGN@tQ4>3zcqt#VT&erL;pl-qB zo=EjH6L))TpS|Fp4~{nzPkzwN(K<|;z4XOI82cM+3HpL_@3w{pS(zj)8N_d(9nl&{ zV_~F=sQ)oDTG(rBdi5bbv-m1YtS?VA_aj4k?K zjLE%%=cee*@1p%|3$R4x`y$E94jyR%e0V9~``s8L0<_?x<+r!m-95d&etx{-^L5@9ERlcf+>Jk#KAWuKv?6FFA}Ku4PGwi&A7}im+G2uQW~WS4+g38`|@k*IQpU zd+|P_-3Vx4A6?fG+vHKhdTDgaEf*p)>XPFb^;dtXk^#Nkc;t!#UuYr}N&S)BE7x9U*z* zb^?Oq{cneLW#jgb^Mv*2#$%kx(sHi#X-tCxu5AHx3_I6Sk*=p8oCTBJZD9WW9!{^h+vbUARKR1uEg=(X~i{u3ac)G^R-a07BK>?a%05q4Cm8O$G z4_f~!g}{(Rj2Y^rS|f|>+Z29c*C98r4Cc0rh9zw9S$vn5KUN&A87=Ge%+_|7Vv}F%KTK1a!3NDV8m-pJC?47ESgc2FNIEZHKZKs{wYG^?&=G);b7g?3AX<%} zI!vPY?_YCYGdQKT8&jCg8Tmngq>Pj(yk#Si8fNV%hmyvAWGEDv&khUi?G1gJV&9YP zFWW*(!J#nMzU}{&S*-9ax~H{(#Q{C6&_$bQ?s+{CLV!;+UX$pSO^72LMFV!7h>>5B z!?lgVR2&FN#m~8+&ln}dlVevh`G%S-xF_Qw=8!-u1+*oa1r0y+q+Q7J7<|l9UN~}p z3!n%l4Z=u}=3Pkr%M`*pI&=5voomowSy}+puR=?pa3BDyev=^xLShoGXyce}_xyAJ z=l$3CSJ!f>CW`hNGFteu4Pilj6A*=BjIdXbG70jJU^LgHdZ&UL{okuv+N#KfTo7&$ z{vJN34!!ccp`bB=WGqm|^l!ERSl7p}fQ}if1bkJ>6w^~j3rP=-F3sGr|4J-1l(sEAcQiR>81dXU&+79^Fqws>5x(j zsXhE4D39w1GHKLsEiKq%eXPw5YMG*)Dw#M0!AC+Jw6uQ3RUBqbg^63I3yZccWZa{W zvZ*m^-?#(>Lw>|R$(TM-87uFN_S^D~lvIq=RUNKEGfO`8)xrGrakk6m&`fau<-b?v zeqFkv9gI(t2fp5wUp(NZ*BH`hmiKv`gqsIts?T>?`H^pzHP$=y9(}wNce*vBpTwtM zKMP3>RR&sfhKk?d^as9NrjNz|63)m00eNf|e%7(c6;AK&?hfoW8#0&>%6<~vGt}0$ z()T^(>1Lsgpqyc8b-=B0uJ&K16}B;|eQ?w&#a(6eDq(ThzSbua38{=xxE*A#ZeY2;iiT4@*J};yyl_A z=Q?=H<))ooiDKs!?V6Pr|5UbcG;QC6E*6v`L-E%bW1-{wsvK0Ek*7Ot6i+fUyP z<6G4;ReBv8C?kU5LX$WzovQ(XeFn*$KT0e;`;pdWp_2i41q#oF7V~d$V|TgaO!p0a{6*g5qQA#>{n_dD@2nf{ zyB+1?WcYPKZlT)P|F~g+-K0Y#Lm4`G8`mrPdb$ffUhxkGGgmfENXmDsy4-I6t-%{5 zV+{tYm`9`iG-Q{uZAUa0N|eBsbZPW$zGMna!TVQf)Ah;!d=Gf|NNfxd&l=C1;#ZmJ zA&kc2n)s2ria%XJwWqBv8z8Q(w zfyx_bsB07D2N(79P7EN9&XxEAUN;Q|u5HFp=AuR}E|8S@+?3q7ROPt8r)!P)()z0J z&hPsP)GE0odJ?EF?QNCPPJ{|G{>981tOT?EdgNHV_i2>?}@9!R^8KXIJ$C$-yXfB6x*T43q)f!32<( zjmm~14K?x zAwQ-nYuxGb)b!<0S3saxxhExMrbNsK;m!1ax^GbGd_mv%>2=B_MIS}Xa~CT9xVtmj z$wk#VhD)FVrRwXObxSnAKYgBixixu8d%25qAa2p{hZnGI1e`ht-aZ>OfSF-rdEhN` zE^$#YS(IA#DEoxbR;CX;)!V+5supdzTL`1yPZT|XgjROw&D zzwn7fA|(i-i zsoqjHj^6z!9Vf(H0d@Z4L8K-Rx=kMYSH>tTvUmnDDt`G6nvYBboE~?o*mFrl8_e}r zBm6P}FAvUdDUTXdWVTB_d=-D(eE#ShP)z(haVBXF4WnY~pW;-*2$8UTvm7CT5w4cn zr7Zr_V{f|GXbMP30^oh>;dop<6sRf|+*@@mRZgLEbaHw`eXHn zV;s9T&pA{+2jj2(2oxZ!(uadN9R zJrScH1D+Cv|8$r=S(3#7Fbg{tl$km|HHZkt zM>1yX5=gxUS+)D}C7?3wW$P7?d~5yC18*OpNQfWSsB>GWN)s^tSQXblRyHd$KFw8+ z`$0YqZkbu4L_3 z?Ki|tO`eVX=H!S%URQTEE&$B$(RM+imZOG~Qw2>i%+O#o=twfjPPtF-)DhKMnt@gt z6c>?j%rdE`0MM@&DF%QI2@C5+tmR<|7^F*DS&gaFvk9-skb;>>Ut2rQR~!N&(3Alz zlua=t!)4Z~ulGm7XS>E^gb68K7MC)ZXhFgDQY^3*9omM3%m~>ity$eY4p6GuJpW)M z)p*ap;U~Ya)Rh)XG$t%AAv#IN?3HFu=~3n&T^ZENF)0ca{Pfl?G*add4o^CXu0^v4 z2M1eQX0HsE8~NZA!{r$_xjE7(3W-zYzjr6DOT?~7_ts|GZ9e3RsW?T)SYwXHorht7 zBxJQw@rf>s=e5Fz%CX#A&&J63g5af-zP@Rf9b;z%9Hx09IHx%Ie`>lZp<1kN;q7Mz z0Het*06+#=s{ut(e#~^6f~K65*jS4qiI!ZqP)V4a*o&WaPwF-2J67&@!$f*SI=U$8 zyId0=;x!Zt2)(Yo}u1(0%;yP++=S@q<38KL!NR)u3=9D=0)MB3J%}*##k{_=>ied<8_C>X0d^)Xn~RA?uNt^==c*{qe&vX$d?A z%`a%3`v6TXPJ|e`O(CU-Hcvkk|Mxv`->~7ZaIZnn)vH3g-Sfogv6mYo$L(<7>pcggb$|S_8_9}Vgs*3 zq!t3!yZrDF?t4#*B_Wt&%C>(=S(;|e6wg~y__fO`thkIQ=As|pB4F5hl0PwOlvuXi z^Dda_Igw`wt!nk;W0U9##Yg+46kJVH86)$hNPV4c0i4?JyHM`pBl(ssylRFMe7^IA9d>cRDgI<{dKEK2v(@w9)MquIanDI-*cE4Z6oxMeu0zDDww!A2lWaJbv) zx~PmHdm3U1?!!hb%jJ%SuWw@V_UjlFyU*AwYcZc)^&@_xa;A$Z7=kNE3AeBM-DDO{+1T2v1+mR~ zRidUXjZI_2Ho=`)&U1mivO8C1*HBVP#w8l~cW)7j{5)D3Jw=mm8Y=;fPZ+kku=raq z6A{>44GvNmi5AUZwFQIQ(YrnuB%qcdFH4abvFI`4L6ZRU@jO^sM51Z=kXk7r? zV&i5vkN)Wb@fDH? z!69?uS@COEtb0n|HEgl?E#+td$hF}Nd-BszM8TjMT|d)0u|0JyWOc=ejX2_GzyVfX zSrVzkb)_NcJD)|4Hx~%~Z+y=UoIUww)Jk)q0S4As;YW0RO2Q4lbz~~fzb{nB`M2J> z(fQOpZpOOV9(aAUWL``CUlnH=owfoqF#RSTszJaMuv?WydaeAtdW@q?H2Z6JH^QyT zXdrupZ>CsZ$b?M3YLu6!tHOWD35@s*<-T8pkY(N{(1nvAX`5T7MRFN-eraZcgkgl4 zOC0TuV#r4hGOCbUXi)3S4O?C|R6iZLJ8jF40m%gU6>we7mnJ*z90R?aojaX4F$vBP zx2qF`*7xOip!#jh5^0kHr|?Uok#^_P(v`ycM`80uX|& zr%vY|g_RLf~quhQvnr}TgnJh50 z3q@l9EX&Nb52v?8XuNi0&$xtSUgBR_*TD<;fz&96A+sW0v~3iwcmbvfnn4t*cz!Yp zW8SXr1lDfSub`uJIw{*&o{rW9KVua)6SCE~#9l_apZpr?X}j)bN@lLO2+}jnbUtya zy;jlB90VX20Hb6iV$c+=Oo`KTOp#K|e^q>vEVTv?m)E)>(QqYm7y#%l?Nba4*(>z9 zCAZolKsPtE_n+MXnV@`$Y)Xn0TM0rbLI3MM2%@JqzhIl?Zq@P|%96cFN;o5CLug#X zxr6Sclk*3aS@m198NK&^6@Di9(xb{_NGKNF;Swps3e*H0Kg4gJAKzc$cDq?eC`(`z z%UcF*lLA3W1R2co<|x+DfGgYBfpww?lrb1hI6uD|xf6CikcNkWk4KG;u69RoDa!g3iL;JjEM`I z{X6qtG*UsSrLCG5=)l2d2fk5MhBB;E%G6iNNeV+;jQFG>`83_`B0`;zrQCRZU=ZgI zh2w=1BEB*TBJJb%g$2OO29;JrCN54QLpscHZu}LDzdLpMU1v|kN2Jc|Aiyk2!rZuR8(>jbF?#3f)1n82ST^Ax3^qv_ zPALup;{|=8rZK&!O4%ue=>(i<>rGDP?}Jhfm82Zu?ZMGyFcN~=9pCuaet^EB6WqN+ zM-z<`)lyL*eR_(HmrFmkl9?f{YQF{dMdn@HtU2M%iAzeLub>r24>uCRmxX&i6Hh&V2)l}quvM-R5hdhsAXW66? zqu%==xB%`G$$SucCNiZw`gFAMlihNWPNfX-29g zW*Db`R3PEZlH7U1x(s-xbtylh&W03Z1XLGe?577)7LF2U!$V08H93ipWrjL{tJ+ep zZW*rM3vm01gW(mP*rxl7q#5Zj`;viDH2WlT$K@0aV`ZL`sAcWGk`y|61XeyJOvLxp ztp^K<0`3t$ykyT(9;ngT{TXTv1Ee#b$ZU!(Xd{R?+S(pQ#IlJ#X%i6hs=w2gLY0Rt zY@;}ll6&2_HBzipAwD0~WrI5Uu23-?Z!L?7Dt-mEI0KIODd%~VbeG+RM(`Hr5zi+_ zeqrIljEv)x69h6W@Ux=NR#b&*ZaMif9DX^7E!dBpCWNw!TyxvA-F7bu%|O037sg4w zostgY`0oC5BL8dU7gIeBkV~_nj&|zC@MaEz0}rz<5QWRhLwmhDrMU zj9{4dbZbs(gV}#0Dv$?d_uWSa{8$MezK8~_qCNiQR&!ir? z20l$SJBmBw-S!xDa%NPl8_8|)oMg^Die8jfq(hOUm7Qk#`1=TjIj;)2!7$%9;g!5S zoSK!-w(W*;0z?v?E@Ifjt>ILpLERGS%^cFF?E3w6yp`_}cBo;4!~KW=p!>|iV8roT z?AYtTuqU3RQrucA?oh9A7{7|dj{+u?&9gkaZ+KLqi=B7Rk>Bqx$xZHuCqFEdRBf)p zKU14q)}thlmdwP#O24UqdQ)(Qqe9$NX&an0+=0L_1}UZpcM)OAIR|;uZ#cseNg2{5 zd9Nhj;nUEP0!bKZZTt`nx6bF2;d2))yJf4D##iU-Pr@d*!yLi@>OKFR?7)ZPrqlIi zbR4mHW(E+g`F@q|d2^HmW&E$tVT4^%KR)sumbLb8!Bnh2vA7k zSc&kbqxJ~R6%~?;Et%~Opnz=JQ-5+GwRdv+gBN}H{i-z|B#jhG*j`6(5=b`~4bB;C+F<4s}A;E&c z+_VGfsvok3EtiLxLTizyp#wPUT7W*T*a788f^gv?QxqQB!DWXn1bgQ_Nir6k*g{?F zM{i-_j;ktSU!ia?5J&#q_kyoj-#GC?rVGVdf%oZgq2vB!W4+DIYk|7Jb=YC!@z1IM z)`c?}%AS#8km5vQ-@p()1pFu-_>%SA`%kjTOQea8ATVU(rCt1X^J#EYPNh3Vm5w2p{~g%(SdZub#ty%ypfNhL-o zGkx!g#&3o4GLGI-`G3Aawit8oP5D=>NdykbpB}#v7ZLr$mk0}9*6sYKnd-G*(*8Ko ze-Y_7XkWT6y6kuD7kK;rWm^16n-I7!sz%NF+!R!4FX1WyHBB=AimGp%1~r;ZfjeXp zjw$Y80{WPU!%D3>-vZPW!X!*h)05>DXo00nU{WBYn#G#Es7*DYexNFZjvBf>n*_sG zSB|!H%s@(Hp0tUqpj+f3zTI`gtFr_0sVU_RNCcU36jQvIyro>c`%TXAVhc6R3wj0M zFUi^)&;*+5rqCyGbfo}{w(=b$Qb_*7sEZlGTt&EhCciv04kRnYFa7Ixc6RnVMcVqe zgSh!r2oD09ud!h;I`DX|Az*1RPelPB*g8vdnQo$b2Pd6^{fxVM*=s=u1ntQe2M!j} zn(x{m+i$WVM}_8_84u%NEZTbagyj_Brk7<{ZprdW^e(a?(yE!o`fTc!p5AJpx{;o( z+5u0RlD8s)BH5_`xK--}J>YA$l6(t<)aYl$+f|yWWX78~vTE=?VTcf|6bKrmK-Bjp zPq^A>=3FZp3w4|t^viY|C{$AVn=oCF`$Ls+hO$6j>L2tQJ25x9$&>ZmH;B+*7It08 zn1j%lOIyp3dEcqKO0N|>^$ZsIJqng`O_8O*y0XfaTg#hUM6_rfTt?T+P$Ml(jf_sm zq`V)+QRVEY3?r~=*=-V7;K*I6U?EUzcRhGsd$J;*w*9k;CV^teV+#u6B|tbQ9CYW| zpGA5wGDAZ@ZVX&cp!_*H(-(r|4WlGVFu&pJgV1fsV2$9s!7Tm!nI#4pqePJb`o$q@ zjtGYrwso6=ls2mGeOZ%!LLG~xYd4ZBoGw8W+d!w*lR{nC#y}HY3(UJ2q9>&RW?*Le zdald%Xe5eA8fJz;-7OMTC&X;#s1F!b=TOFgIqZ*0b67OgL z(O`L?0vT?7oXRg%;R$?Xj1V%7$Y4u17<*Htj7{bfBxS_04QB(22_)0s1DdfI$u42x zRw_vWf^eDLG_Q`v2-WFjt@*WQwz~zx#t&{Q$TRHB=}73?w=BL?D(6%?M0m(qzCPkqc|1sw};M2pWo4 zm7o@9OCkpdrVu2F2%%&4XedEdjhW4ZB^8TcBmzOQm70pE^9H0bL6R6E8PT$tmBpI# zkWxTGS6EpR7z(H)Ghj8-7&C2=8SAq2MQx~p4q%0e-Y*`IC-g1}2Z#*TRmi>&@|{J( zq(ng2u|kmq&6w0Q0eS<%&Mc@qJQvnUancJ2PG+2`s*(=AJ&?;k)w1v?=Ws{PxTW3o ztX$G_(XVEVgH#nA_dyb7vj{Uog(TU*OgiMd8tM8IeO@6f=cW2b5^Ow7uB9ZwfjjR*#q?}a#j6=6ApMKW4N-BXAv zFgTg4{FRvv096J>5HY4iMA>P5u~-yE(cw@CM)<+qJBLR{*@)RxGZPtmwa}i@41n0_ zQBu~1?huDnsNxKe>T#~&s#bxLUY!sun+#G1tmN)N#AcQ$aG8EZy|nc3B`@P0FPwV# zA2YC%#dDc+9U&1h!twC|z($UDq9y@rV?Zi$gNG1eYyp57Rns8CfQV>7fU6n1)8mt) zgF{s<%W`{rI~QAI_UJ$kHM6E^vS*2^4l=vL9pyitOeVA0%n_Hq&?Ftd9dj-<$5Jf zCi%x?nA9?jJqwSL0jffl|5HOzQXm5mO<6Y|Aj7i5i3SY|UFqi;e6XClv5Xnw@Pdr; z6pe^#rbwN31aXdpGfT)Yqgu$;jg1Zkqpp-MOMf_GL{t&y9CzIFB6p|`_5}nq1XS?| zIPB?_9NyJ5-WC#F(yAr17n1WsKW!Q~hvyM`pdsJUShDM+YtVBc%=zy5Wd2ecMib(}C z7bz1v5Wx(A0U*~(Affeli(P3v*vi0!ju$dWF?6@xAL6^EufAT7CaaYZ*@RgY%F-9iOXy6&a;Y5>nObPu zVsq2XeBm!#xNvZAaCmqaW29~#AVl2T+skT+qtS?v9J{@}{a0SOm|~2fE!dx&o?P5H zmxmt_6^OBG|GcdH7=<-?U{U@}lYP-TSlIay<4q)a^GwIg$bIy#!D-1Dws~(i>?(pKnn! zB+T7{y~`7ER^IN`WE&Qe9A;S7`!f<`0!X+@C}-NL}~W+GRl{`j-#kA3uE-pY@<@(zJ9;G3`C$i{l!A%In7 zMk{ieO_m_n$#hKt5U}vf$OLxd>Z=)GMu2RHHeDM5Aevp+I+w8z1RPgo&X`u-8-POq zKr=Ffovm#HMa*BU0EpeLXn43Qwknyz+1gow-KGBj~Eo9#Y*dUSLoA*!l|AZ_Ciwl>xQ@w91{Z7Z|+lf7LBRs-xU z10vlxzr6?vJndY+_V~$eY?p{~yt_9lOCX>KV1$BX1OlwtbKQ#bTe`Kg0A?iw6f`9l z3;{weiBvQw%6e#AHd!O#eY3LB4I{r~}M;tj+JSOMj^(YaTe*#k;V!XVNx8vrVjC;*ZpP4nYI zW)auSv$nxA%=UIQM#ruVIw?v)4$jK$^Nao65?$@^boc3ni$~Qu&qG4z0g+5ABt?pV z2HAFwK}=#RsRdJH3MpnCy`-AO`GK$;PiKY`_H3!$KNy|64RW<|9I

    u?DCSe57|0a}(1KJoDJqj{eJ>X1N3oRW!!fF4`1LHD;ZYQ9VM0*=(kHsE)_=+W5hP`-O9Wq^8HGr$2b_ z-Lm?Ls;ZDM#I~%Ql0^_eL4m`If*5Le?C}^i|cw>;ZtNTZLCD!(eq! zG7N0%iA7yZ<+@@$)qzNE_Pl4V^;9*-PBc;%n1DknC{>oOzp_24%K2Cpmcz{AvLpx?X$;I*5*JaDB~lB!x%I+kcXf5w*7fS`_ukArCnEeqWahh7-IO^qN;C?$ z@5`IZS>l}d;)^egIp(e~iy9J9RYx!rEvo*s5F(Nx#Q=h6ghWLZOlrndMMek&Ky6Ht z*Q;h(01VLrN#Lrgreab|*T=a#+W*^^zq3;1>4fUKxql>pVqSArk&uYhKuZp0^N5e_ zE&awx@3i^OE7xz|Jrc#NC2%2PL*qz9WZJ7l7?>C^;<9NNC!~&7Cz|iZZhr6fqGq>k<-kv?3x!O(-C-D}SJ=6;mi4T~Y-}H9B<0OxcVHi)3aL zQ4(S_->)KgQgB9-7$60%QkAMWo7B@;O$Zy(jPU)0t@;|SgI+Cc09eDG0adjW8R<)| zVd~42%d1r}A+fy&&Dn%?yv&7}p+V^eVj6*|nzO?kPC`OLhO>)|Pckk*n}6~Lg^1;cuh(7^X>@S`K&_}J;P-uDRx&fI2m+WxHiTemW+4!| znuk9d7!j%>A*G5P^kima919|yTU^-L*$E-U7-=A|6OmehfdRVtL5EWEv{6ikh;*bN z4W9XXZQ3}xd<<;bE2s6*kkIW?O(KG70tRTF^g5Cm$6If18XawSnM(kus)~r#>*6{7 zH*enTy4D8N&pXt{ear@g>TWwmH<5W?2h)>u+_ zdwaX8D(}afvtQPqa5kHbPc@DZ9dhLbCK4G1QxeWpl- zfpOr3I<0bSwDG_PF)Vx!q&2>HUjZJm2RePUnCDfFbVcjsOiT$z|H}Zds^UvX7}0AFPO2)!6hdgb?qqq|l~P2AS)DaABpBiN zM)2^6dZ;Nj&Cx@Kap<7FeVj%B8}BlnHcYEtrpc!VA_AZ(8Uh;XNF4Ut!QbVE{u=E8aqzy8B7-rGO;iJ$n)?xl+qqiTsvhKdltX=7k@ zUDb7cx?IDMj><8pYT)3>^?^(kL`y;`Y||r3<^qM@Oh;qC;U>z`&)Hqobp`uAh18>73=Q8*g@P z5fKMQ>$+adx88pHZO0j_sv-)dbclHCo!cUkvuLGW>H(3+HLJh^lK8wMw|=OIA%wt8 zmJLA>+P3||7rr3oqF2BihD4--rvKyr^xtxzK)kiR2&pcm00PBucW?i#>u)ow4~o^Y zed(odo*b`YtW`Ap^I825^O#+3-9=rBy|H*&!+RNX4>BVo} zym`kO&8-dM*Pucwc>iAWoBzk}-MIetFa6TzCiRvXn)Fk+ZM$2y?p(QY35mQ~u$dq+ z0*Ymy=*X;cHs!T=G>jO-^0fJ_-~K&Dr#aBk$)N#zRYO%l(@Pi6UAc0plrAJf;M;d^ zfA_oJTQ^F?0&?-(&U|Z5gdwEIpM3liKk_4A{?q?AP!fgv_YYot@tZ&XnNLY69DJXk z4%IQU0eFEBAUrraiZPblF?q2LDkTS|t`Gtc>T1~_k)ak9#=aWwcx*JRA+f4-ZDT-; zC`QaYpVVF3PU;GLi;vWaAW_>E-#NHFG*w2{l5sGvg@A$j=$7?TVtwDKjxqmX3+h`^ z^U$S8dG7}L-}dMOk!N4@>)cr@@W#+GQ$PyAO{u~lRALx$1fS8p!JcmuA$njBoU~7% z(t{Vh>M9Hg2EG)X#jplSjW<7n0-!_C9;)o)!Q-14_Eev~?#+Oe`-Ais|9d&CC!Il0 zs~NM0&i?+u!t9TVh^7K+XmGTDkaN3#|Nd&(oE#s&`|i8(%9HukN1In)-Lg`lb<5>y?;bz) zC^MbhxmlMIjn;^`dzsH&AdDPhil*&;yZ_ES+9bg8<~#F?Pw$>P|NMuZz469%LXMFy zoZp#G78$$-$K;ysH?R1;_di>3j& z4%-(cOjVnJD$9M{$pnbRT+OsCiQr`KcC~jQJ@O2TA#du{m3J6YYUJ~WOck0q1n|(T~b61NG&%_yIz&t0s;_; zYN1jvFaQ{s;QZq5$@cktdXKW4ynXX@B|DcNt?J3~!STtB8w+KEDo@kaV^8H&XQ!ZM z4H=BE5VU9o5rqsgI3k6)e6i`R?CCaV~&wSh%Sqeb^qw- zo!hq`y?XVTXP*AXH(uh%+46KUL$q$)fJ+Y;dTtt10Aoi+N9iRs0AKg}ioj#VZ6||_ zfZEySUR06J{A!gUt#890_7`;DMjzB5>wP}N$Uy}_k&#UlC11X@v#7YNmy;NdSIezw z6v@lnRD|~|(rA}=63({6$?_DT zG0Cgt`uO+|p~Qr#4oD)_70at`ts!tVwJul5BCDzvkN1<4Yt$4-OU-a;d-}o0&sWqi zn3uOT-d|J<@i3wDTXbUKPVgdGR4!+-V@xZVd+^TVOjp?*ZTn3K_4ZsLY znL_^##D-pmtp{U!Prctsk(z=iczUNVsAy<_YQ1dD5WDr{5)ZhJ3B?btQ}2`S41+8W z05Bk&IqH4=T*9D3No6xME8`^c^j;kDvPWogyu}0msxh-zKU*1`1=aHgKuwF7S&Oa^7Tep~v)L@AxV6~s(JSe}AXPOG0~1jY7%HE@sOPh3onS!U z#+HE%P+;r`>?vtI5f~r5h;CqEJq(KI4iu^vE9q58HeGkyK>grBFwyUON?rm<|#njjQ2gdg1 z`Qv3D0xuqV>z+7kXJGCFJz~b8PpKxNaYBthAL~%T0B<3HUAX`NAOJ~3K~(uU{{3e5 zw21hi_5624bO_P`cL2yar$Gnv-wElzaldD z%MVY(VaeN+uqOrWx(*Pf7#Jb2h?SB(*ITrVeHvqhC<8t#<7G!72saTU(R&~h;BE)zwxv~ z6Zd4$wdW9=xk!-+5D`4noqIYbxzV1H^Lv_}2M43CTq!`Uy9(8vDo_~8!DTb85`-qZ?~St-vh%w&8BrVtNytDvQ56{9kgEQT6-YAu>}swf$Z3@X?? zxBbqYci(#R_2)kLkr4dB`dAhs5Yg_%i*H@OF4|Qw8km_Y^AIW=+&^UIn>TNI*b2~< zH*~CqMDgKmE#IwSrRgrI%j&gWvz+x4!j_)l$uvf_?haKl0==m;dUoH3W4y_h4_o zZJXIv-4B!A0s;6EZkZ9DdiIGYpL+b0KlUT{?(Y5NUwrkQ8+Q&5PjV-xCu<<=S_LBx z(?9vj*Eoh>`PE;X&$ssX_J|O&HEs9mE3ba?lOH2OH3fC&SrNVBh@lfm!OWnTs)?DR zhhr6()A8{-ct(REhdP(ym>Yx5x2B)``oi<7D;D)MN`|Gpr;Ggqo# zWBP#GL)Rai#r}L6P8=`|KM4W)WW#%}vu-k^TMsoFx!%&ljq~n9a0l8qb~VR866X1;bLhYz#<}Vprs? zTes8p&SG()+M3LtxOQ^5Z+n@GstS-5fNGL57D8A{Td_q$6+>gj#1>GA0onC&6p1u< zErF?tsA7x~(n_d7Tc!w0T_g;-OV%QZiY)KnnW37QZqF}&?4!1QK2$U2$O>|Dr}^gE zw>qE#poV}U z&KI-Y^N0+{Ac*E=S;2@EP?c0oRTK%emnzoTJY2YRe7rwXj*T=oZ{4|dr%F}M8goIQ zWr%S8QvKKyOA2UYfKmW0s#$9o5zR0_G7yQA#zI5`qy2a9?OwPn02M}SJ4UqJ%JQB9 z0}_-XoU}>;3bw02#R?k*AOQ3@qSO6sK=zl%%hjrdo*Dx#oD@RfRIS(Rk~76nr4&L$ z#I9>q<-+-$JNNd82^2A~A*{PLwTuWkcgau<84v(fRmsG(h==OPK*S>%>h)b|h};Yc zS`RpT<21y6do}>3G{8m_gS+&!;b)KD?AiYgSCi8303{bgN({S;tzbE~vRbV;Rol}V zu?lO6^<;Z7y|6uvAwUr!aArG=wAy zT^1zExlJjQydkPcMn)X4sw&N14TG~3(^d&fL226tXaRWPiOZB&V#tgnXaoL_(*5mU9ktTKQBc3mlE%)D+Ir3f4-xIhVYO)Jt$*P50MwflLS<8Z^jq765URLv9tA#g;IX+2TE;?iT#rxlqf zcr8xsNrhgl@oaRu2Md4z>cH#pCmc93>iN-|(C33L;wIKWL@H;MrU3v&wf6&uSOOZd z`~T)!4*;)riU@2&lBS}D5F8a6uSTv(1Yp`Hxr16MImXC|M8r4MIp+{U&bjNl^>XEW zH~(LE?}-RaO35Rn$bANnGLV^-wm)-(mU<~bwQPm}F84`H2o__-Oo1o{4$L8j*<`ZV zIk$8ETuNzsduKYGR&@;n?+F0%K>Re(R@+ia3PYv1p#)IxzYSx?48X{G`_u0TM#OOZ zJZ`VXQM8FrjQ?)_X(S~2D?8I|ETd$iql)WhN5F=zf~t;&ZoJN&J9mzbj#5gC#bRq~ z>&A`i0N{w814NsI(2cQeqan485=`%fY#uV#n`e&C;A3(uFxAhpo;!w0L-Cd&0I+$% z{!L-j=y#h0KK@5!&YSVf?Arr3@)yZD6PT%XT{j{fBjP#!)`d8oA_`729hjm16Mwej z%H_RKW^BEU!qrb*q8Jr<{L}Z{K z2BuyPhJXN-tk>$Usz`)@Fe+V))I_u%+z$jW1gMDoKSVPoA3{Lj3|V$Aj?=C?j};Lj zlADa2%e1bt6e$XULx`@i5SY8J%cZCS^c#;pK<2XYy77*iGw!{}+Sn$ee=4LrC^_hR ze&C21^x~WSEk@&T)}-FEE&*-|YD7IopH-UNiRs8UvB74Y_2YxrQLupIpg9ipGka#% zhPbf1OZ~3^5RjM{02LxqovIWf0XDg7x;Cq1P(>7VNDc{UK&5b;&SQXTJRWMd_pac6 z+8B=?0F|={eQ!tyHusr{9^Xoh2whaVlu}ALT`o5}^zS}?AYgPfWUiz;KCzEQ-#B_o zsfe&JsGgoI>$<*u``zFAt>2wYs*nHh5B=m%f9CS#N2*B;*z<{q=+dR#n|I!ITRQ|s zOjK9vCg)65uwtr;fmJQ%yk0k@lwNIM>ql1pc%OljGX+BOqlDI%%^z|oJPyk42uY`Xo(#q*}6l-5gm z_L*t`M3{4a=IN*R_xInqeQWoTOQ);l-u-)R)0n8EIi4v`L@A|S%}0gMRLiYf?*LGw zs0cZWY8#M3WK&HsB0$@=D(Yg6h*U~3UldWn`Z58&DXBsTh=EkikRoUfXaH76R`Wb* z@VqW9n!9!~tpXzvf@I$bGq7c7wX|)|PhkYYfW~5gRu+rxpZ(dN-d;?*yq-)_2;^~Y z0DAeAS6+VQxsQGHIU*1fAVU*y%0nOkx_9@!8JejfpsMG;Ai~ys4(3@%)V2BO;QlZC z!q2^X=iOIdc~g}jr+@XYznlUCut@pT$6xsTFMPJ-qwPf!Z4n}x9UUHewhI!8DS0k4 zA^`{p10X1<0`vLv+ZQjK`_S_rFoBZucfS4dU;WkJe($v#H{ZG2wgoI0#5dn~`}pYe z$3FF``***vTA7*VHebJfZvPQGN2h@&ic16zLblZ5f~BjdR4yq7heyFm>7|=8es*Z zzzD>zy?*^KzxKDE{h1#Z>q{v+pD2cCy*LY?(sFrltdde;eNZ&F9pEF9Pi&h+TTCSIbS$`?&_6GVws(k0ppIdHxX`#MHTxk2paY) z_PC|^cR&1=+C!pdfChqqE^NAoDL3)b|IX@5gQ zFA~w)zztjHIHw<@^tWLzi3WzQb?D147YvWH8VF_^(sYP`z=mL!yK?8&t*?CfPxkls1LL$x093jz=S;wLN^RTT zzIEr^`Ewy!9jlZkBBE+dmkoUvg{xI#1c($VD9CczynX$h#1%aK*!HxVJ#zVQ?_dj2 zwGa}jMrJgC(qR$k#i>X#fEXB%A_5RtKq3W|5&#I<_4J9^>)U37N3K0_u)o)Jna#@S zVZGkXZN}0fSz*qpg86oiRnOcDSf9TDv9{(gVL3fLXixVi=eD1G;?XKn*L0UJ>|EU0 znpT9;niQnLKLOQJ1i&}}qp*Q!yH*Z7pH?yG_SW0)=Ybu3!FkD*`I>wiKgN4C%_%t!JKD z#{kA$uwdAF;^|WI(Hq~LN-aA}`J#@7-lJDF7Tztr2aFk*ZP*P!vt91SSKuQrh79>?nu=h=^@26nwAcC2J^W zLFBIOR?Ah}Ho#0cCJjLmTd&te#LEx*60d+=5fwE=V%po=@0#pWq^j$-?b@~_AO(&o zv4R;HfVj>Df@raRbKE0ezA+oOtvwlsd^g|oRt6_cTxM_FWaHrZn`HN4hMmJ%HHHVy z9}Y#&%V8p`7*e3wv?fquETs!6Y;RAiI@XgAQkCk!Rr429d#>) z1OX7Mlt7F2wRW&=TM?^LO+<*vk)04w1>Efi!kn`y=F&LouM-Zh`3&_V~iA{kJujQS5s9j;+h>LXB&9Ut^&MXuRYx5cYOQp zxA*q;%366 zU|0|MN#Wv@z%OX-l3;+!fOnc!J zA3*-TF!n-^zuDPn9}iVU9J(0$ifs?guOR|4*a7OnsLj(h(Q_Q=qU>`AIfleB6jfQT zoWeH-O!UDXQB@eI>qKM-Zd-_`>$>%N-89YS`2gT4lK{{Q^@4}}Fe0ZAXLUVE6*I5f z^{VR{D@GtHE=x*ALjfpr^ce?-debhAZ#TX*Y}mK41x6#>8&WaEGg@@NKARWd0-uJW zDu@QEr63|vuwiis-q)(}V)y4-jet!X+p7NyBA zzW9wtAANN9;zh52VrBpu63^x{^*A-U*qsyLNmYwTjnS(r`fvom>2w-nY@6)O%>h6V zF#se0m`o;%#g<7gOrCS;vaD83RaLp|nx@;D&9!K5yR*hpDcoZPNs3AA9QZtY&78AymW!2wDJ8m9un)Qc5v3Q%RgaIz#R0 z!X6^iLT16R>$)_@pQszTegW_{s2*AzHyPhWW9g{zNUBO(g?^{@ZU?VGnm z)G1P~wXDOgtFBWkMOC}D^>I9|BE_uhx+>1A7^c&?r*a$}9S^i+BLh#NAp$}Y6*A04 zObcn*nub+Hfufgp2jma}hlBv@rU@|`fQp?zw*$F@ObQlRiLytups$}|AVNsY!L;}s zW5oIP{BuA5+2@{pl2{RJYkNAG)}lFgh)8YQ{n?*?^@l(DAs~_>00smMUehVOdHvS? z{S!5EOIJ$X+L|!~AVqMdno}O%P)&JRl`YZqJfBnrj-@H|&sT4pYM2&&} zz0ZDTw#6!OJ`Dj)&6w=ya4&ajL)?)~L*`SjCIs%E6XffVSSn|FWfw}0=y_|N}IRU>m0DZaU{ zLcDcn?~7mj(x?Byk6pfe5dlms5XBHrwQ-H%rfUc_P67(7yH3?OuoMx&%a<>I-~-Qg z#ZgNO9B=O3y8G_^km_dH`gSoAAq7+vF(7s47f{Wdl^ehHjaNVSbDvddm}s=pF-B($ z01}{{td?G%vA5RE)JgeW$G`f44?HQLWA@Wvrg7YkxB*gkSQrLH9(d2<_-}vsdZYjb zr~nEK0Mu*A0>Hq1ATR|J^P=ko03nFHWRE$h25& z=dA5|sj8)D2%+mr+jOOrTQ_gd=GD&5xu$JTm!~nr$!sQC%=Ea+>-B1}y&YpbJU&9B z6ykclzI*%5;^NL^wp(A^#qHY%_wUcsR5Sy0q!58rIiEHuyIW2|T#T{4O0*C;r5okW!xvN0}5y-t8?>zhXQ-^o=;HY5?g$d$>s3v6!0mx-A4QA7_ zPRv=cpezCNhd=V6%a?cW+_+OyIX|nIq-z1WA_nJ-_`XvS>w1O=ss)JxvH@Ou^va!k zw*%Sh-}%l9*Pa8+00u~km(~IWCy6Hp23ib(DAD9Xi+cto10L=lonP#lNV<4=_ah&B z_eDKAK1tdo0tGY?fNE;APHF4e52oq-@Oy78kJ^eDg`!fI zb4Pi_iaYbJ$yJ&YQdW(ON9*+|2TV!OruD2~G$k|zVgw|l!XWdlYajpQ(e*d?uD>Zw zV=9V3m~d7-_WbjF<2EunLxnl zWb3(S1EHZ6?FM@9f`QuHCJw&)7g2XUiAai_oSq&pmqf8EU8*ah z;Mp5vlot@0f;)$8mjQs7_74wtwq}sU1VRWYO(v6hw_dNBrDlytVU{egC>G;v+LewY zBPkLf6B?)~h~p+e6am1?vI8n&)PWhgX)|r0Dp*ez=)nT<#CSwkKLpe<)5tc^BA=~U z1qg_&3N{Tk4QYE411cg+ruBI`Ct!h$rV-dE1SIOZrkHg_maC@AC5v=jcd|S!D$F+D zo?(nP?j77bI9UNu9TAL?L?lb+o9_^kh_r1Mu}~2JbfVF`e65*5+h%}($gAaA%NjID zTMT#-=Y+~yrZHYUx43eChfCL%wYIW2w_PEZqFv5notDB_Lcma!wq3^B>WJ;SH7$tg z(W{qs&fmO!dRGk*HIlKGieM7y^6vR-k3Ci;CKORnp_r;mm#^-vZ|*F%Tg|zw15u)B z)0UizrWjMbTsNodt}7XdBVY=|sV>--E(ZjVB3-N8%R2cU*mrHBxwPu=P2^2iGoB79H~lS*>p&rzi4Oz1;8?cMASOi&b+>KZW>9JrzZf4s?1~} zVt`I10`jfP58}s+zS9V-5RE<^K`(6XP8y86eFO{~yZ{lHg7wQ05ozi3aA`<=fC0_f z%vy!PnH*8YO;_0-BpZ%{eEiaeLsbQU?2K24h<4`fl88{RSm1@=m4TT0A~|XYIqSBVH`GQwuu6a6P&DfSxpp1ESLz@MgYYz zCI{9Ri*qq@N@;g@cWXYKPN$Pe#Y|Pe*=(9ZjEMu1YVlqP0nH3zGB5842ClU0fnBsf zU>of@B4{I7#~%qc{QS|L^c%&EHh0=!DJ4)G`xiEuM?)7sglpLQf!*d2=|Q%&e*oWm z40nVL=+KL4JT!Xix=tyT-lZo1@MLWtBVs^A0>0DfIeJdreCT~QA8dR)9_n}DgW&IY zCT%D zv&m$FgEoR+Hpb||gM0Vxje|VKIG@iiUAojGhWNnrcdpoSxjY*`Lq|A!Y;%~InW}}* z6He9o*B_@CB5nZRI3#&{f1M@x!vMF9FO^b?F_u!Ab?3BjMR1X^K9=JKEwHIlU&ifh z*gQ1a$4-3co6)8LfPk^V5LOpN3q)o@222KOKhDK#z@i$vZ@hgHA$| zbJ0y2ozi&k;c1y!%nS#Ri-=?37+h9m^WovaAD;Dczg{AkMGl0>fmhA?biG=Zw$)P5 z)HA)Q_v;^8<2I4BahZO=8f=WT_x?*nV^#$8$x^0z#&IShgI+bYU#f_a(X}F7w}oS1 zcE#);Fy8uu0i)jQr3gUbFuvii$)#};md8i{;_}f z>Fu3uWCB7W@@2rx)U=dh11}u_R8_RsAa(!%AOJ~3K~zM+$e9biv;)A_)>bJ8CVekb zuLDA6C|UxefVnUPGX*=_Gqr6?9NMNi+&@_CUhT8P%%yAJCn0tNKp46T6aX$>Jg)<* z9GS2W`T-dTfGRLRJ*gHkPU|{yVKOakHUhIqOo%E1K#>!3CKLiS00Kh5#O&rT)WIxD zu~jYxSekZzKFsP#3t(nWL0>MHh~`-^F;LfaJ3BjjdwcUVXCyRZ#5Q+;yr$+-<7 zxKS#l)OAf}xtxVS0eG=k>|VIoELWP#;r&D3U3n5Ts`WKAOLhl|5R1t2 zK&O?LzbpWdOB3RxPE=LZY+6^T+TPjDtu40C9q-?78=7rRBWhyFrlu%GCX?CDxkXCB zknZ2V-!%pMmdC4CuRQ+vH9%7pfpY26#gBaC17G{vH$7Db?9=Q}#0xd{nDyk*MP}dbvqk@ENfW&zD^5su{>f>Mg+P6hPjhSYzz4F#?{^oE0 z+|T}0J&E)A6abd1<=)-BFMRPU*WY^k#TQ@x+~+_0iBEnkF@}&#UE2ja%}Dkezwzr= zuI!eQU;g%Y{+~bkqtnyI7|rnI*IxPhH(q?Bw|9JO%7rz^(ZBx|PDW?k5mfUrn z8G=zrLDhdK#Gxl;AXn97y>1*IXO0LILsT&J*vBQph$#YaDIkh~A?Hwv)Ujq} z5k*WM-wI@CTP6Thn?MSaTfA2t-g*4Ly2jPtAE>;+3VFbkBRaa|_zoJj>+b7+{q-+> z=}XJgRb3^bAYxg{xUA-)xd_LA97trf?wY(en{TP{-oY^)9oKcewLQmF&0pViZ?Yu9cb94ZhP~jM%&fa^K4fzOla~1Vui$ppisw)*H}SIH?5M^Gf+bcpcF1# zzWV8((Ea--ckZ07R){95JLh(Jw!rz$3PYDO0UL-{CsIz0Lc03cmEA|QS>?7nJwBF_ zCyBQw)7^S1X`-plW=MosT9er$mp*#&X9A$22y%-tt0JSBDgdIPL7{M3&nM4)@X5!Y zw9)|+AcJZ_hB`GIqyQtCX=cExy86){2C{;R3a2G2m=T(aO(&CUkArHgSOEk$gbBvF z^jl;tWi8^FN7x>pteb9qusprJ->DkFY&Kgg7G7&21PURT`p%Ed%)o#!U{ZyXlatbA zA|hs|6nQmk!eEk1DNIz&CX*^W`Q#IK-oCwFt^p`;)in9!WVu|mfZVE-?r3W|4S^aJ zBNW6?F$XLvAb<#wNX&}#oDm{|UR47gLPgJJ8{iOP>5C7X?a}+>>obM5F^_E1-6BLn zL+TdOba{Jrp^lfgXNwfKW)-OsP(7)e+=xlw$V}#9i(sOnX06D{dL^Q&lBy~prAgem zu=UN?zW4V1qZSe{TLxzgi5LbZq7X>6WXZ%FQBhHq5Qti%u>ee_Y6%O@g$(zdHunFLv#uC47bNyOM0ADouVY z1rBHd5rIm{3|fjHTcAj2On|E9a@3%zDxeIS0#p&NURs>rnIaY~O&}97MhX^5Eh1t7>q7`8V8+NH1QlUq045|81F<5KbMD%v zYgSFuj2tD$N7M@%sESCyv-a_*mw#p=DMd=5UZ`;pQU%by4z(8@8&FvAI@(l)Sl2ZM zX6E^PzE~_4i-kjb%p7CIV5&+CA%sAfQi?HhoS)LgmOd_5LH8D8@tsv zNkj3dff>gGf?F7!^W5YfTG!D_V{aS8|fj*gBt4I>PEtA~c@=C~UF^w8^X{%Jg61dDah z$`}Xd_*<2}mW1Pyh{%8f4?NZ8t#RPwK7@UYV8=LRd=w2>2Ax@+VNx3yai9EKRaHt! zL~JM{t{Zib#)ehZlarHgfBV}%`lCNuRh5ghHcjJ6mfrGh+pgE^_qLl3DiDb1{ zTn14b%!!0C#_4ntW2|FBMA58jBIb9rv+DMSNNC_3a!^5H8p8|NM`k?iO4gT5EPc|X zW28=U^yYH43eSGQkRlr7k`+L~LgJ>&r~t))Fw|A2sqI?mKt$BTT~1X&FjD~A*y?z* z=*DB8ts45ksE5&kd|-z|gvcR;>2#`Khlhs`weZ6;OAUvB6C#O7TXJ@BPfsUz_1593}^^qszwy=zPtCwfBeNF`J*rV(Bn@&jsQed zPp9K@6=Sp^vtYSeHBC34P5h=V)mw5gvlyelo%&veECgTCkz(w+&U3<;2$3B$omEs@ zUE8%2pp@cXT!PDkOK}SnFO~wuEl80TFHWHl+}$05yIXOG;$DioyZw2;G5#EKl+D;# zd#`oRd0oRm0Fhq#930gq_!cLV3&7hY#c|j!cJ<9+QHNrhG|xNfJ&q#|oLb&W8eBW% zY?zXgxMJ}i<0Lu?dWJ3yW8r5fj)JckFz%{cT=ng9jmxS4ZqOS=s0}lK1p)#A>z6mPU0|<-<$IllqaXuC)9WUK5ltJoR*Cojr5$Hnkj?-*)$*Q*wq?l zWo8Pf>|W`h7@zsjoJ}UmPgiJdUEOWX&Kown-L77HED9LZ8uIdh@J-Nx`TL)bAGBt* zLRZ?63uzlu56qc&IgiweIWpI6TD?4$c7BG*K96)hH4izXqxn7x8oeH9zkX3X7yI|M zvi;`iW2WZ|-NcW57ykRZ0VDV4Yx3KZ4Axvie!tH9herFgw&#=yuY(?HFQ`Vr^z^o1 z=k;-=?{mT9;{ag#HL70Fu3@XCqW9*TDs*jQRS?pi`p%C~5*HzQr&7K$)hdR zD?hPP#B1nz=6xFS?V&z~HT0ZRmE$r9%Bq_-e(*jf`83w7+C&Mdu+{m z9YtKzeE@Y^das&=D2v4F{W|Fx6@f|PkFn(q8X8h5vVN`@v|wF)fAkHHpP71=j@ao?7XgyBJL|@M(E?RTnoJII%e)JEM#N~HB{L!w^Z+7?bg$8kUJPoHg7;5vYTboJO zS!Uj^6okD;KYjOK9gva^RPA}V>+pL2{xvQXN?Vj<=ySYZBq2mqEzbnz&rtQql4LKv z*xI_2cnW^C`|g-5%}b^Y5wejcM22XDO%I_hY6kvn{?^x+<$dzi=rs`@n&X5Gi*q-f zpLr;n+nG*Sxh`XmWDS#T2k7A#L{zjANMCV;uD{~O@Dq0;M*9&y}GxKoH|c8wTO9F z#wok%d(b}^o{%7jKgVKsluH1J=P9P)xXm1Rv*(UDz3Bd>G%#@c`H-w@)H6zp2Jeqe zwH!#(&a5XUGBS!&zq!|fyV-f)3vGo@bviabB{DFkJEFp1HBm{5&Omlo80A z%kdY(PcMmMf>95NC82=GjGM4Z{_n>;HtKscJx!g|*jWqpbcseMpZ6qTe}+zkWCW!@ zq1$3dzfro)JYEgcuCCJE#&wfqyQrpsEbC1VOKnr)6IST+OR+12V*&=DUm8tx8)Nt=G^N#8%35=(ThvSc5r|CTY4r*Ao0BA0DXoc`JvMPbwAYS&ICYF+x-C~KVwba zY5qPpKm13;gG8h-g_36FCmu?}@=hV>JBid_6WY<&n~DW|-nI8p!&ay?zZJ(N9aSv? z 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�-?GKT8c9i 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

  • 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

    SQ8nAdsrX(A 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 literal 0 HcmV?d00001 From cce337439a1db4cf82ac483116b80f7614ed694b Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Thu, 16 Jan 2020 10:54:22 +0300 Subject: [PATCH 213/411] fixed logic error on middleware --- .../Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs index 621e78630e..eee629e969 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs @@ -28,11 +28,6 @@ namespace Volo.Abp.AspNetCore.Auditing public async Task InvokeAsync(HttpContext context, RequestDelegate next) { - if (!ShouldWriteAuditLog(context)) - { - await next(context).ConfigureAwait(false); - return; - } bool hasError = false; using (var scope = _auditingManager.BeginScope()) { @@ -53,7 +48,7 @@ namespace Volo.Abp.AspNetCore.Auditing if (ShouldWriteAuditLog(context, hasError)) { await scope.SaveAsync().ConfigureAwait(false); - } + } } } } @@ -65,10 +60,10 @@ namespace Volo.Abp.AspNetCore.Auditing return false; } - if (Options.AlwaysLogOnException || hasError) + if (Options.AlwaysLogOnException && hasError) { return true; - } + } if (!Options.IsEnabledForAnonymousUsers && !CurrentUser.IsAuthenticated) { From 289e8c4da64ee88ec6ba72cc2b27e0060c08ab54 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 16 Jan 2020 16:57:25 +0800 Subject: [PATCH 214/411] Add more Auditing unit tests. Resolve #2648 --- .../EntityHistory/EntityHistoryHelper.cs | 12 +- .../Volo.Abp.Auditing.Tests.csproj | 4 +- .../Volo/Abp/Auditing/AbpAuditingTestBase.cs | 13 ++ .../Abp/Auditing/AbpAuditingTestModule.cs | 64 ++++++++ .../App/Entities/AppEntityWithAudited.cs | 22 +++ .../Entities/AppEntityWithDisableAuditing.cs | 22 +++ ...ithDisableAuditingAndPropertyHasAudited.cs | 26 +++ .../AppEntityWithPropertyHasAudited.cs | 22 +++ .../App/Entities/AppEntityWithSelector.cs | 16 ++ .../AbpAuditingTestDbContext.cs | 25 +++ .../Abp/Auditing/AuditingInterceptor_Tests.cs | 93 ----------- .../Volo/Abp/Auditing/Auditing_Tests.cs | 154 ++++++++++++++++++ 12 files changed, 373 insertions(+), 100 deletions(-) create mode 100644 framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AbpAuditingTestBase.cs create mode 100644 framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AbpAuditingTestModule.cs create mode 100644 framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithAudited.cs create mode 100644 framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithDisableAuditing.cs create mode 100644 framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithDisableAuditingAndPropertyHasAudited.cs create mode 100644 framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithPropertyHasAudited.cs create mode 100644 framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithSelector.cs create mode 100644 framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/EntityFrameworkCore/AbpAuditingTestDbContext.cs delete mode 100644 framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditingInterceptor_Tests.cs create mode 100644 framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/Auditing_Tests.cs diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs index d28468f306..89734566cd 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs @@ -224,18 +224,18 @@ namespace Volo.Abp.EntityFrameworkCore.EntityHistory return true; } - if (entityType.IsDefined(typeof(DisableAuditingAttribute), true)) + if (entityEntry.Metadata.GetProperties() + .Any(p => p.PropertyInfo?.IsDefined(typeof(AuditedAttribute)) ?? false)) { - return false; + return true; } - if (Options.EntityHistorySelectors.Any(selector => selector.Predicate(entityType))) + if (entityType.IsDefined(typeof(DisableAuditingAttribute), true)) { - return true; + return false; } - var properties = entityEntry.Metadata.GetProperties(); - if (properties.Any(p => p.PropertyInfo?.IsDefined(typeof(AuditedAttribute)) ?? false)) + if (Options.EntityHistorySelectors.Any(selector => selector.Predicate(entityType))) { return true; } 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 770ad82870..fc0c6ce205 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,10 +11,12 @@ + + - + diff --git a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AbpAuditingTestBase.cs b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AbpAuditingTestBase.cs new file mode 100644 index 0000000000..29e1f10d80 --- /dev/null +++ b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AbpAuditingTestBase.cs @@ -0,0 +1,13 @@ +using Volo.Abp.Testing; + +namespace Volo.Abp.Auditing +{ + + public class AbpAuditingTestBase : AbpIntegratedTest + { + protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options) + { + options.UseAutofac(); + } + } +} diff --git a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AbpAuditingTestModule.cs b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AbpAuditingTestModule.cs new file mode 100644 index 0000000000..077658ab83 --- /dev/null +++ b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AbpAuditingTestModule.cs @@ -0,0 +1,64 @@ +using Microsoft.Data.Sqlite; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Auditing.App.Entities; +using Volo.Abp.Auditing.App.EntityFrameworkCore; +using Volo.Abp.Autofac; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.Modularity; + +namespace Volo.Abp.Auditing +{ + [DependsOn( + typeof(AbpTestBaseModule), + typeof(AbpAutofacModule), + typeof(AbpEntityFrameworkCoreModule) + )] + public class AbpAuditingTestModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddAbpDbContext(options => + { + options.AddDefaultRepositories(true); + }); + + var sqliteConnection = CreateDatabaseAndGetConnection(); + + Configure(options => + { + options.Configure(abpDbContextConfigurationContext => + { + abpDbContextConfigurationContext.DbContextOptions.UseSqlite(sqliteConnection); + }); + }); + + Configure(options => + { + options.EntityHistorySelectors.Add( + new NamedTypeSelector( + "AppEntityWithSelector", + type => type == typeof(AppEntityWithSelector)) + ); + }); + + context.Services.AddType(); + } + + private static SqliteConnection CreateDatabaseAndGetConnection() + { + var connection = new SqliteConnection("Data Source=:memory:"); + connection.Open(); + + using (var context = new AbpAuditingTestDbContext(new DbContextOptionsBuilder() + .UseSqlite(connection).Options)) + { + context.GetService().CreateTables(); + } + + return connection; + } + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithAudited.cs b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithAudited.cs new file mode 100644 index 0000000000..6c206aea54 --- /dev/null +++ b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithAudited.cs @@ -0,0 +1,22 @@ +using System; +using Volo.Abp.Domain.Entities; + +namespace Volo.Abp.Auditing.App.Entities +{ + [Audited] + public class AppEntityWithAudited : AggregateRoot + { + protected AppEntityWithAudited() + { + + } + + public AppEntityWithAudited(Guid id, string name) + : base(id) + { + Name = name; + } + + public string Name { get; set; } + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithDisableAuditing.cs b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithDisableAuditing.cs new file mode 100644 index 0000000000..446733ec98 --- /dev/null +++ b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithDisableAuditing.cs @@ -0,0 +1,22 @@ +using System; +using Volo.Abp.Domain.Entities; + +namespace Volo.Abp.Auditing.App.Entities +{ + [DisableAuditing] + public class AppEntityWithDisableAuditing : AggregateRoot + { + protected AppEntityWithDisableAuditing() + { + + } + + public AppEntityWithDisableAuditing(Guid id, string name) + : base(id) + { + Name = name; + } + + public string Name { get; set; } + } +} diff --git a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithDisableAuditingAndPropertyHasAudited.cs b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithDisableAuditingAndPropertyHasAudited.cs new file mode 100644 index 0000000000..28a98bac8e --- /dev/null +++ b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithDisableAuditingAndPropertyHasAudited.cs @@ -0,0 +1,26 @@ +using System; +using Volo.Abp.Domain.Entities; + +namespace Volo.Abp.Auditing.App.Entities +{ + [DisableAuditing] + public class AppEntityWithDisableAuditingAndPropertyHasAudited : AggregateRoot + { + protected AppEntityWithDisableAuditingAndPropertyHasAudited() + { + + } + + public AppEntityWithDisableAuditingAndPropertyHasAudited(Guid id, string name, string name2) + : base(id) + { + Name = name; + Name2 = name2; + } + + [Audited] + public string Name { get; set; } + + public string Name2 { get; set; } + } +} diff --git a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithPropertyHasAudited.cs b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithPropertyHasAudited.cs new file mode 100644 index 0000000000..53207cc27c --- /dev/null +++ b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithPropertyHasAudited.cs @@ -0,0 +1,22 @@ +using System; +using Volo.Abp.Domain.Entities; + +namespace Volo.Abp.Auditing.App.Entities +{ + public class AppEntityWithPropertyHasAudited : AggregateRoot + { + protected AppEntityWithPropertyHasAudited() + { + + } + + public AppEntityWithPropertyHasAudited(Guid id, string name) + : base(id) + { + Name = name; + } + + [Audited] + public string Name { get; set; } + } +} diff --git a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithSelector.cs b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithSelector.cs new file mode 100644 index 0000000000..6c4269a8c2 --- /dev/null +++ b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithSelector.cs @@ -0,0 +1,16 @@ +using System; +using Volo.Abp.Domain.Entities; + +namespace Volo.Abp.Auditing.App.Entities +{ + public class AppEntityWithSelector : AggregateRoot + { + public AppEntityWithSelector(Guid id, string name) + : base(id) + { + Name = name; + } + + public string Name { get; set; } + } +} diff --git a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/EntityFrameworkCore/AbpAuditingTestDbContext.cs b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/EntityFrameworkCore/AbpAuditingTestDbContext.cs new file mode 100644 index 0000000000..46db7afa58 --- /dev/null +++ b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/EntityFrameworkCore/AbpAuditingTestDbContext.cs @@ -0,0 +1,25 @@ +using Microsoft.EntityFrameworkCore; +using Volo.Abp.Auditing.App.Entities; +using Volo.Abp.EntityFrameworkCore; + +namespace Volo.Abp.Auditing.App.EntityFrameworkCore +{ + public class AbpAuditingTestDbContext : AbpDbContext + { + public DbSet AppEntityWithAudited { get; set; } + + public DbSet AppEntityWithDisableAuditing { get; set; } + + public DbSet AppEntityWithDisableAuditingAndPropertyHasAudited { get; set; } + + public DbSet AppEntityWithPropertyHasAudited { get; set; } + + public DbSet AppEntityWithSelector { get; set; } + + public AbpAuditingTestDbContext(DbContextOptions options) + : base(options) + { + + } + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditingInterceptor_Tests.cs b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditingInterceptor_Tests.cs deleted file mode 100644 index 516310b781..0000000000 --- a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/AuditingInterceptor_Tests.cs +++ /dev/null @@ -1,93 +0,0 @@ -using System.Threading.Tasks; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.DependencyInjection.Extensions; -using NSubstitute; -using Volo.Abp.Autofac; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Modularity; -using Volo.Abp.Testing; -using Xunit; - -namespace Volo.Abp.Auditing -{ - public class AuditingInterceptor_Tests : AbpIntegratedTest - { - private IAuditingStore _auditingStore; - private IAuditingManager _auditingManager; - - public AuditingInterceptor_Tests() - { - _auditingManager = GetRequiredService(); - } - - protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options) - { - options.UseAutofac(); - } - - protected override void AfterAddApplication(IServiceCollection services) - { - _auditingStore = Substitute.For(); - services.Replace(ServiceDescriptor.Singleton(_auditingStore)); - } - - [Fact] - public async Task Should_Write_AuditLog_For_Classes_That_Implement_IAuditingEnabled() - { - var myAuditedObject1 = GetRequiredService(); - - using (var scope = _auditingManager.BeginScope()) - { - await myAuditedObject1.DoItAsync(new InputObject { Value1 = "forty-two", Value2 = 42 }).ConfigureAwait(false); - await scope.SaveAsync().ConfigureAwait(false); - } - -#pragma warning disable 4014 - _auditingStore.Received().SaveAsync(Arg.Any()); -#pragma warning restore 4014 - } - - [DependsOn( - typeof(AbpAuditingModule), - typeof(AbpAutofacModule) - )] - public class TestModule : AbpModule - { - public override void ConfigureServices(ServiceConfigurationContext context) - { - context.Services.AddType(); - } - } - - public interface IMyAuditedObject : ITransientDependency, IAuditingEnabled - { - - } - - public class MyAuditedObject1 : IMyAuditedObject - { - public async virtual Task DoItAsync(InputObject inputObject) - { - return new ResultObject - { - Value1 = inputObject.Value1 + "-result", - Value2 = inputObject.Value2 + 1 - }; - } - } - - public class ResultObject - { - public string Value1 { get; set; } - - public int Value2 { get; set; } - } - - public class InputObject - { - public string Value1 { get; set; } - - public int Value2 { get; set; } - } - } -} diff --git a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/Auditing_Tests.cs b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/Auditing_Tests.cs new file mode 100644 index 0000000000..524a1f359c --- /dev/null +++ b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/Auditing_Tests.cs @@ -0,0 +1,154 @@ +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using NSubstitute; +using Volo.Abp.Auditing.App.Entities; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Repositories; +using Xunit; + +namespace Volo.Abp.Auditing +{ + public class Auditing_Tests : AbpAuditingTestBase + { + private IAuditingStore _auditingStore; + private IAuditingManager _auditingManager; + + public Auditing_Tests() + { + _auditingManager = GetRequiredService(); + } + + protected override void AfterAddApplication(IServiceCollection services) + { + _auditingStore = Substitute.For(); + services.Replace(ServiceDescriptor.Singleton(_auditingStore)); + } + + [Fact] + public async Task Should_Write_AuditLog_For_Classes_That_Implement_IAuditingEnabled() + { + var myAuditedObject1 = GetRequiredService(); + + using (var scope = _auditingManager.BeginScope()) + { + await myAuditedObject1.DoItAsync(new InputObject { Value1 = "forty-two", Value2 = 42 }).ConfigureAwait(false); + await scope.SaveAsync().ConfigureAwait(false); + } + +#pragma warning disable 4014 + _auditingStore.Received().SaveAsync(Arg.Any()); +#pragma warning restore 4014 + } + + public interface IMyAuditedObject : ITransientDependency, IAuditingEnabled + { + + } + + public class MyAuditedObject1 : IMyAuditedObject + { + public async virtual Task DoItAsync(InputObject inputObject) + { + return new ResultObject + { + Value1 = inputObject.Value1 + "-result", + Value2 = inputObject.Value2 + 1 + }; + } + } + + public class ResultObject + { + public string Value1 { get; set; } + + public int Value2 { get; set; } + } + + public class InputObject + { + public string Value1 { get; set; } + + public int Value2 { get; set; } + } + + [Fact] + public virtual async Task Should_Write_AuditLog_For_Entity_That_Has_Audited_Attribute() + { + using (var scope = _auditingManager.BeginScope()) + { + var repository = ServiceProvider.GetRequiredService>(); + await repository.InsertAsync(new AppEntityWithAudited(Guid.NewGuid(), "test name")).ConfigureAwait(false); + await scope.SaveAsync().ConfigureAwait(false); + } + +#pragma warning disable 4014 + _auditingStore.Received().SaveAsync(Arg.Any()); +#pragma warning restore 4014 + } + + [Fact] + public virtual async Task Should_Not_Write_AuditLog_For_Entity_That_Has_DisableAuditing_Attribute() + { + using (var scope = _auditingManager.BeginScope()) + { + var repository = ServiceProvider.GetRequiredService>(); + await repository.InsertAsync(new AppEntityWithDisableAuditing(Guid.NewGuid(), "test name")).ConfigureAwait(false); + await scope.SaveAsync().ConfigureAwait(false); + } + +#pragma warning disable 4014 + _auditingStore.DidNotReceive().SaveAsync(Arg.Any()); +#pragma warning restore 4014 + } + + [Fact] + public virtual async Task Should_Write_AuditLog_For_Entity_That_Meet_Selectors() + { + using (var scope = _auditingManager.BeginScope()) + { + var repository = ServiceProvider.GetRequiredService>(); + await repository.InsertAsync(new AppEntityWithSelector(Guid.NewGuid(), "test name")).ConfigureAwait(false); + await scope.SaveAsync().ConfigureAwait(false); + } + +#pragma warning disable 4014 + _auditingStore.Received().SaveAsync(Arg.Any()); +#pragma warning restore 4014 + } + + [Fact] + public virtual async Task Should_Write_AuditLog_For_Entity_That_Property_Has_Audited_Attribute() + { + using (var scope = _auditingManager.BeginScope()) + { + var repository = ServiceProvider.GetRequiredService>(); + await repository.InsertAsync(new AppEntityWithPropertyHasAudited(Guid.NewGuid(), "test name")).ConfigureAwait(false); + await scope.SaveAsync().ConfigureAwait(false); + } + +#pragma warning disable 4014 + _auditingStore.Received().SaveAsync(Arg.Any()); +#pragma warning restore 4014 + } + + [Fact] + public virtual async Task Should_Write_AuditLog_For_Entity_That_Property_Has_Audited_Attribute_Even_Entity_Has_DisableAuditing_Attribute() + { + using (var scope = _auditingManager.BeginScope()) + { + var repository = ServiceProvider.GetRequiredService>(); + await repository.InsertAsync(new AppEntityWithDisableAuditingAndPropertyHasAudited(Guid.NewGuid(), "test name", "test name2")).ConfigureAwait(false); + await scope.SaveAsync().ConfigureAwait(false); + } + +#pragma warning disable 4014 + _auditingStore.Received().SaveAsync(Arg.Is(x => + x.EntityChanges.Count == 1 && x.EntityChanges[0].PropertyChanges.Count == 1 && + x.EntityChanges[0].PropertyChanges[0].PropertyName == + nameof(AppEntityWithDisableAuditingAndPropertyHasAudited.Name))); +#pragma warning restore 4014 + } + } +} From 5bcff3053441d18aac5656554e1f76a8c3dfa49d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 16 Jan 2020 13:03:26 +0300 Subject: [PATCH 215/411] Add cover image for the blog post --- .../Blog-Posts/2020-01-15 v2_0_Release/Post.md | 2 +- .../abp-io-abpcommercial-release.png | Bin 0 -> 76829 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 docs/en/Blog-Posts/2020-01-15 v2_0_Release/abp-io-abpcommercial-release.png diff --git a/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md index 77e6fbb0f6..d3a525c63f 100644 --- a/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md +++ b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md @@ -1,6 +1,6 @@ # ABP Framework v2.0 and the ABP Commercial -ABP Framework v2.0 has been released this week. This post explains why we have released an **early major version** and what is changed with version 2.0. +ABP Framework v2.0 has been released in this week. This post explains why we have released an **early major version** and what is changed with version 2.0. In addition to the v2.0 release, we are excited to announce the **ABP Commercial**, which is a set of professional modules, tools, themes, and services built on top of the open-source ABP framework. diff --git a/docs/en/Blog-Posts/2020-01-15 v2_0_Release/abp-io-abpcommercial-release.png b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/abp-io-abpcommercial-release.png new file mode 100644 index 0000000000000000000000000000000000000000..4366ceb986ca0224aca45e95d9131f98ccaed18f GIT binary patch literal 76829 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 IihbDs0SV9M2LJ#7 literal 0 HcmV?d00001 From 6a22b31835d50198ae6d0fdd11bb8821228bb6d8 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 16 Jan 2020 13:11:08 +0300 Subject: [PATCH 216/411] refactor(theme-shared): change modal backdrop style --- .../theme-shared/src/lib/components/modal/modal.component.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.scss index 023830ceeb..321bf9342d 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.scss +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.scss @@ -4,7 +4,7 @@ } &-backdrop { - background-color: rgba(0, 0, 0, 0.6); + opacity: 0.8; } &::-webkit-scrollbar { From 9be583e2751b7e8123a893605cc66e0b99093858 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 16 Jan 2020 13:11:33 +0300 Subject: [PATCH 217/411] feat(theme-basic): add modal backdrop style --- .../packages/theme-basic/src/lib/constants/styles.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/npm/ng-packs/packages/theme-basic/src/lib/constants/styles.ts b/npm/ng-packs/packages/theme-basic/src/lib/constants/styles.ts index cacf326031..be67bece5a 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/constants/styles.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/constants/styles.ts @@ -68,4 +68,9 @@ export default ` .ui-table .ui-table-tbody > tr.empty-row > div.empty-row-content { border: 1px solid #c8c8c8; } + +.modal-backdrop { +background-color: rgba(0, 0, 0, 0.6); +} + `; From 38b20f83501c92e7e814cbf203b453a483566e7c Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 16 Jan 2020 13:14:01 +0300 Subject: [PATCH 218/411] refactor(theme-shared): remove confirmation colors --- .../confirmation/confirmation.component.html | 6 +-- .../confirmation/confirmation.component.scss | 47 ++----------------- 2 files changed, 6 insertions(+), 47 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.html index 07faa3a8a7..f2b1417f14 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.html +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.html @@ -1,4 +1,4 @@ -

    +
    @@ -15,7 +15,7 @@
    @@ -23,6 +24,7 @@ tr.empty-row > div.empty-row-content { border: 1px solid #c8c8c8; } + +.abp-loading { + background: rgba(0, 0, 0, 0.1); +} `; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/loading/loading.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/loading/loading.component.ts index 0271ced29b..c68757b4a0 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/loading/loading.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/loading/loading.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ViewEncapsulation } from '@angular/core'; @Component({ selector: 'abp-loading', @@ -7,10 +7,10 @@ import { Component, OnInit } from '@angular/core';
    `, + encapsulation: ViewEncapsulation.None, styles: [ ` .abp-loading { - background: rgba(0, 0, 0, 0.2); position: absolute; width: 100%; height: 100%; @@ -23,6 +23,7 @@ import { Component, OnInit } from '@angular/core'; position: absolute; top: 50%; left: 50%; + font-size: 14px; -moz-transform: translateX(-50%) translateY(-50%); -o-transform: translateX(-50%) translateY(-50%); -ms-transform: translateX(-50%) translateY(-50%); diff --git a/npm/ng-packs/packages/theme-shared/src/lib/directives/loading.directive.ts b/npm/ng-packs/packages/theme-shared/src/lib/directives/loading.directive.ts index d38b3713b7..40b76cbfc8 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/directives/loading.directive.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/directives/loading.directive.ts @@ -1,22 +1,23 @@ import { - Directive, - ElementRef, - AfterViewInit, - ViewContainerRef, ComponentFactoryResolver, - Input, - Injector, ComponentRef, - ComponentFactory, - HostBinding, + Directive, + ElementRef, EmbeddedViewRef, - Renderer2, + HostBinding, + Injector, + Input, OnInit, + OnDestroy, + Renderer2, + ViewContainerRef, } from '@angular/core'; +import { Subscription, timer } from 'rxjs'; +import { take } from 'rxjs/operators'; import { LoadingComponent } from '../components/loading/loading.component'; @Directive({ selector: '[abpLoading]' }) -export class LoadingDirective implements OnInit { +export class LoadingDirective implements OnInit, OnDestroy { private _loading: boolean; @HostBinding('style.position') @@ -29,29 +30,50 @@ export class LoadingDirective implements OnInit { set loading(newValue: boolean) { setTimeout(() => { - if (!this.componentRef) { - this.componentRef = this.cdRes - .resolveComponentFactory(LoadingComponent) - .create(this.injector); - } + if (!newValue && this.timerSubscription) { + this.timerSubscription.unsubscribe(); + this.timerSubscription = null; + this._loading = newValue; - if (newValue && !this.rootNode) { - this.rootNode = (this.componentRef.hostView as EmbeddedViewRef).rootNodes[0]; - this.targetElement.appendChild(this.rootNode); - } else { - this.renderer.removeChild(this.rootNode.parentElement, this.rootNode); - this.rootNode = null; + if (this.rootNode) { + this.renderer.removeChild(this.rootNode.parentElement, this.rootNode); + this.rootNode = null; + } + return; } - this._loading = newValue; + this.timerSubscription = timer(this.delay) + .pipe(take(1)) + .subscribe(() => { + if (!this.componentRef) { + this.componentRef = this.cdRes + .resolveComponentFactory(LoadingComponent) + .create(this.injector); + } + + if (newValue && !this.rootNode) { + this.rootNode = (this.componentRef.hostView as EmbeddedViewRef).rootNodes[0]; + this.targetElement.appendChild(this.rootNode); + } else { + this.renderer.removeChild(this.rootNode.parentElement, this.rootNode); + this.rootNode = null; + } + + this._loading = newValue; + this.timerSubscription = null; + }); }, 0); } @Input('abpLoadingTargetElement') targetElement: HTMLElement; + @Input('abpLoadingDelay') + delay = 0; + componentRef: ComponentRef; rootNode: HTMLDivElement; + timerSubscription: Subscription; constructor( private elRef: ElementRef, @@ -71,4 +93,10 @@ export class LoadingDirective implements OnInit { } } } + + ngOnDestroy() { + if (this.timerSubscription) { + this.timerSubscription.unsubscribe(); + } + } } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/loading.directive.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/loading.directive.spec.ts index 1b49b8581c..b359a2000c 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/loading.directive.spec.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/loading.directive.spec.ts @@ -20,8 +20,8 @@ describe('LoadingDirective', () => { describe('default', () => { beforeEach(() => { - spectator = createDirective('
    Testing Loading Directive
    ', { - hostProps: { status: true }, + spectator = createDirective('
    Testing Loading Directive
    ', { + hostProps: { loading: true }, }); }); @@ -30,7 +30,7 @@ describe('LoadingDirective', () => { expect(spectator.directive.rootNode).toBeTruthy(); expect(spectator.directive.componentRef).toBeTruthy(); done(); - }, 0); + }, 20); }); }); @@ -40,9 +40,9 @@ describe('LoadingDirective', () => { beforeEach(() => { spectator = createDirective( - '
    Testing Loading Directive
    ', + '
    Testing Loading Directive
    ', { - hostProps: { status: true, target: mockTarget }, + hostProps: { loading: true, target: mockTarget, delay: 0 }, }, ); }); @@ -51,24 +51,35 @@ describe('LoadingDirective', () => { setTimeout(() => { expect(spy).toHaveBeenCalled(); done(); - }, 0); + }, 20); }); it('should remove the loading component to the DOM', done => { const rendererSpy = jest.spyOn(spectator.directive['renderer'], 'removeChild'); - spectator.setHostInput({ status: false }); + setTimeout(() => spectator.setHostInput({ loading: false }), 0); setTimeout(() => { expect(rendererSpy).toHaveBeenCalled(); expect(spectator.directive.rootNode).toBeFalsy(); done(); - }, 0); + }, 20); + }); + + it('should appear with delay', done => { + spectator.setHostInput({ loading: false, delay: 20 }); + spectator.detectChanges(); + setTimeout(() => spectator.setHostInput({ loading: true }), 0); + setTimeout(() => expect(spectator.directive.loading).toBe(false), 15); + setTimeout(() => { + expect(spectator.directive.loading).toBe(true); + done(); + }, 50); }); }); describe('with a component selector', () => { beforeEach(() => { - spectator = createDirective('', { - hostProps: { status: true }, + spectator = createDirective('', { + hostProps: { loading: true }, }); }); @@ -76,7 +87,7 @@ describe('LoadingDirective', () => { setTimeout(() => { expect(spectator.directive.targetElement.id).toBe('dummy'); done(); - }, 0); + }, 20); }); }); }); diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/toaster.service.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/toaster.service.spec.ts index d7fbd7219e..23e99b8204 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/toaster.service.spec.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/toaster.service.spec.ts @@ -41,7 +41,7 @@ describe('ToasterService', () => { expect(spectator.query('div.toast')).toBeTruthy(); expect(spectator.query('.toast-icon i')).toHaveClass('fa-times-circle'); expect(spectator.query('div.toast-title')).toHaveText('title'); - expect(spectator.query('div.toast-message')).toHaveText('test'); + expect(spectator.query('p.toast-message')).toHaveText('test'); }); test('should display a warning toast', () => { @@ -71,7 +71,7 @@ describe('ToasterService', () => { 'summary1', 'summary2', ]); - expect(spectator.queryAll('div.toast-message').map(node => node.textContent.trim())).toEqual([ + expect(spectator.queryAll('p.toast-message').map(node => node.textContent.trim())).toEqual([ 'detail1', 'detail2', ]); From 6ff38b645d921b5f668d26dc2586a15a9836eaab Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 17 Jan 2020 14:29:53 +0300 Subject: [PATCH 231/411] feat(identity): set default roles as true in new user modal --- .../identity/src/lib/components/users/users.component.html | 3 +-- .../identity/src/lib/components/users/users.component.ts | 4 +++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html index 82995a423f..534bdee970 100644 --- a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html +++ b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html @@ -31,6 +31,7 @@ this.fb.group({ [role.name]: [ - !!snq(() => this.selectedUserRoles.find(userRole => userRole.id === role.id)), + this.selectedUserRoles.length + ? !!snq(() => this.selectedUserRoles.find(userRole => userRole.id === role.id)) + : role.isDefault, ], }), ), From 395a7aebfc6458968407b01d5cba3b2fd879f12d Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 17 Jan 2020 14:36:28 +0300 Subject: [PATCH 232/411] fix: remove a button that use for debug --- .../identity/src/lib/components/roles/roles.component.html | 1 - 1 file changed, 1 deletion(-) diff --git a/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html b/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html index 32ade3186c..99a7554c05 100644 --- a/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html +++ b/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html @@ -15,7 +15,6 @@ {{ 'AbpIdentity::NewRole' | abpLocalization }} -
    From 2a344d5f5c57c27290644efb29930efc9f083a3b Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Fri, 17 Jan 2020 16:43:17 +0300 Subject: [PATCH 233/411] add offline_access to scopes for retrieving refresh token. --- .../src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs index 3fdd0aae1d..5ae689e783 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.Cli.Auth { var configuration = new IdentityClientConfiguration( CliUrls.AccountAbpIo, - "role email abpio abpio_www abpio_commercial", + "role email abpio abpio_www abpio_commercial offline_access", "abp-cli", "1q2w3e*", OidcConstants.GrantTypes.Password, From e2300072ec5a5d2823d47213faf1a6bf7bd40fb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 17 Jan 2020 19:48:08 +0300 Subject: [PATCH 234/411] Added Entities with GUID Keys section. --- docs/en/Entities.md | 60 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/docs/en/Entities.md b/docs/en/Entities.md index 8e0a039dfd..a822e54270 100644 --- a/docs/en/Entities.md +++ b/docs/en/Entities.md @@ -21,6 +21,66 @@ public class Book : Entity `Entity` class just defines an `Id` property with the given primary **key type**, which is `Guid` in the example above. It can be other types like `string`, `int`, `long` or whatever you need. +### Entities with GUID Keys + +If your entity's Id type is `Guid`, there are some good practices to implement: + +* Create a constructor that gets the Id as a parameter and passes to the base class. + * If you leave it default, ABP Framework sets it on save, but it is good to have a valid Id on the entity even before saving it to the database. +* If you create an entity with a constructor that takes parameters, also create a `protected` empty constructor. This is used while your database provider reads your entity from the database (on deserialization). +* Don't use the `Guid.NewGuid()` to set the Id! Use [the `IGuidGenerator` service](Guid-Generation.md) while passing the Id from the code that creates the entity. `IGuidGenerator` optimized to generate sequential GUIDs, which is critical for clustered indexes in the relational databases. + +An example entity: + +````csharp +public class Book : Entity +{ + public string Name { get; set; } + + public float Price { get; set; } + + protected Book() + { + + } + + public Book(Guid id) + : base(id) + { + + } +} +```` + +Example usage in an application service: + +````csharp +public class BookAppService : ApplicationService, IBookAppService +{ + private readonly IRepository _bookRepository; + + public BookAppService(IRepository bookRepository) + { + _bookRepository = bookRepository; + } + + public async Task CreateAsync(CreateBookDto input) + { + await _bookRepository.InsertAsync( + new Book(GuidGenerator.Create()) + { + Name = input.Name, + Price = input.Price + } + ); + } +} +```` + +* `BookAppService` injects the default [repository](Repositories.md) for the book entity and uses its `InsertAsync` method to insert a `Book` to the database. +* `GuidGenerator` is type of `IGuidGenerator` which is a property defined in the `ApplicationService` base class. ABP defines such frequently used base properties as pre-injected for you, so you don't need to manually [inject](Dependency-Injection.md) them. +* If you want to follow the DDD best practices, see the *Aggregate Example* section below. + ### Entities with Composite Keys Some entities may need to have **composite keys**. In that case, you can derive your entity from the non-generic `Entity` class. Example: From 8120ebf9dda27c53030d9ab41c45b06e97791afa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 17 Jan 2020 19:49:36 +0300 Subject: [PATCH 235/411] Update Entities.md --- docs/en/Entities.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Entities.md b/docs/en/Entities.md index a822e54270..b587eecfe1 100644 --- a/docs/en/Entities.md +++ b/docs/en/Entities.md @@ -52,7 +52,7 @@ public class Book : Entity } ```` -Example usage in an application service: +Example usage in an [application service](Application-Services.md): ````csharp public class BookAppService : ApplicationService, IBookAppService From dda8c713809f7e598f970bceab2e059a0bb60900 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 17 Jan 2020 19:51:56 +0300 Subject: [PATCH 236/411] Update Entities.md --- docs/en/Entities.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Entities.md b/docs/en/Entities.md index b587eecfe1..b5d196cccb 100644 --- a/docs/en/Entities.md +++ b/docs/en/Entities.md @@ -26,7 +26,7 @@ public class Book : Entity If your entity's Id type is `Guid`, there are some good practices to implement: * Create a constructor that gets the Id as a parameter and passes to the base class. - * If you leave it default, ABP Framework sets it on save, but it is good to have a valid Id on the entity even before saving it to the database. + * If you don't set a GUID Id, ABP Framework sets it on save, but it is good to have a valid Id on the entity even before saving it to the database. * If you create an entity with a constructor that takes parameters, also create a `protected` empty constructor. This is used while your database provider reads your entity from the database (on deserialization). * Don't use the `Guid.NewGuid()` to set the Id! Use [the `IGuidGenerator` service](Guid-Generation.md) while passing the Id from the code that creates the entity. `IGuidGenerator` optimized to generate sequential GUIDs, which is critical for clustered indexes in the relational databases. From ea140ba7480818f6681ba5a4b0d090a5f2a50edc Mon Sep 17 00:00:00 2001 From: YinChang Date: Sat, 18 Jan 2020 10:22:10 +0800 Subject: [PATCH 237/411] add zh-hant to project in framework --- .../UI/MultiTenancy/Localization/zh-Hant.json | 12 ++++ .../Volo.Abp.Ddd.Application.Contracts.csproj | 2 +- .../Resources/AbpDdd/zh-Hant.json | 6 ++ .../Abp/Emailing/Localization/zh-Hant.json | 23 ++++++++ .../Resources/AbpLocalization/zh-Hant.json | 7 +++ .../Localization/Resource/zh-Hant.json | 6 ++ .../Localization/Resources/AbpUi/zh-Hant.json | 58 +++++++++++++++++++ .../Abp/Validation/Localization/zh-Hant.json | 34 +++++++++++ .../Mvc/Localization/Resource/zh-Hant.json | 7 +++ .../Abp/Emailing/Localization/zh-Hant.json | 6 ++ .../Base/CountryNames/zh-Hant.json | 7 +++ .../Base/Validation/zh-Hant.json | 7 +++ .../TestResources/Source/zh-Hant.json | 11 ++++ .../TestResources/SourceExt/zh-Hant.json | 6 ++ 14 files changed, 191 insertions(+), 1 deletion(-) create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/zh-Hant.json create mode 100644 framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/zh-Hant.json create mode 100644 framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/zh-Hant.json create mode 100644 framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/zh-Hant.json create mode 100644 framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/zh-Hant.json create mode 100644 framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hant.json create mode 100644 framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/zh-Hant.json create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/zh-Hant.json create mode 100644 framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/zh-Hant.json create mode 100644 framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/zh-Hant.json create mode 100644 framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/zh-Hant.json create mode 100644 framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/zh-Hant.json create mode 100644 framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/zh-Hant.json diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/zh-Hant.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/zh-Hant.json new file mode 100644 index 0000000000..12eea67007 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/zh-Hant.json @@ -0,0 +1,12 @@ +{ + "culture": "zh-Hant", + "texts": { + "GivenTenantIsNotAvailable": "指定的租戶不可用: {0}", + "SwitchTenant": "切換租戶", + "Name": "名稱", + "SwitchTenantHint": "將name欄位留空以切換到主控端.", + "Tenant": "租戶", + "Switch": "切換", + "NotSelected": "尚未選定" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo.Abp.Ddd.Application.Contracts.csproj b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo.Abp.Ddd.Application.Contracts.csproj index 6f1674f8ce..7da250da5a 100644 --- a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo.Abp.Ddd.Application.Contracts.csproj +++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo.Abp.Ddd.Application.Contracts.csproj @@ -15,9 +15,9 @@ + - diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/zh-Hant.json b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/zh-Hant.json new file mode 100644 index 0000000000..97a615e901 --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/zh-Hant.json @@ -0,0 +1,6 @@ +{ + "culture": "zh-Hant", + "texts": { + "MaxResultCountExceededExceptionMessage": "{0}禁止超過{1}! 請在伺服器端增加{2}.{3}以獲得更多結果." + } +} diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/zh-Hant.json b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/zh-Hant.json new file mode 100644 index 0000000000..a66a6d2ff8 --- /dev/null +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/zh-Hant.json @@ -0,0 +1,23 @@ +{ + "culture": "zh-Hant", + "texts": { + "DisplayName:Abp.Mailing.DefaultFromAddress": "預設發信者地址", + "DisplayName:Abp.Mailing.DefaultFromDisplayName": "預設發信者名稱", + "DisplayName:Abp.Mailing.Smtp.Host": "主機", + "DisplayName:Abp.Mailing.Smtp.Port": "埠號", + "DisplayName:Abp.Mailing.Smtp.UserName": "使用者名稱", + "DisplayName:Abp.Mailing.Smtp.Password": "密碼", + "DisplayName:Abp.Mailing.Smtp.Domain": "網域", + "DisplayName:Abp.Mailing.Smtp.EnableSsl": "啟用SSL", + "DisplayName:Abp.Mailing.Smtp.UseDefaultCredentials": "使用預設憑證", + "Description:Abp.Mailing.DefaultFromAddress": "預設的發信者地址.", + "Description:Abp.Mailing.DefaultFromDisplayName": "預設的發信者名稱.", + "Description:Abp.Mailing.Smtp.Host": "SMTP 服務的主機名稱或主機IP位址.", + "Description:Abp.Mailing.Smtp.Port": "SMTP 服務的埠號.", + "Description:Abp.Mailing.Smtp.UserName": "憑證使用者名稱.", + "Description:Abp.Mailing.Smtp.Password": "憑證使用者密碼.", + "Description:Abp.Mailing.Smtp.Domain": "驗證憑證的網域名稱或電腦名稱.", + "Description:Abp.Mailing.Smtp.EnableSsl": "設定 SmtpClient 是否使用安全通訊協定.", + "Description:Abp.Mailing.Smtp.UseDefaultCredentials": "設定是否使用預設憑證." + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/zh-Hant.json b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/zh-Hant.json new file mode 100644 index 0000000000..9ff62f43bb --- /dev/null +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/zh-Hant.json @@ -0,0 +1,7 @@ +{ + "culture": "zh-Hant", + "texts": { + "DisplayName:Abp.Localization.DefaultLanguage": "預設語系", + "Description:Abp.Localization.DefaultLanguage": "應用程式的預設語系." + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/zh-Hant.json b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/zh-Hant.json new file mode 100644 index 0000000000..a592b42fff --- /dev/null +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/zh-Hant.json @@ -0,0 +1,6 @@ +{ + "culture": "zh-Hant", + "texts": { + "Menu:Administration": "管理" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hant.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hant.json new file mode 100644 index 0000000000..d19dc7cbc6 --- /dev/null +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hant.json @@ -0,0 +1,58 @@ +{ + "culture": "zh-Hant", + "texts": { + "InternalServerErrorMessage": "對不起,在處理你的請求期間,產生了一個伺服器內部錯誤!", + "ValidationErrorMessage": "你的請求無效!", + "ValidationNarrativeErrorMessageTitle": "驗證時發現以下錯誤.", + "DefaultErrorMessage": "發生錯誤!", + "DefaultErrorMessageDetail": "伺服器未發送錯誤的詳細信息.", + "DefaultErrorMessage401": "未通過身份驗證!", + "DefaultErrorMessage401Detail": "你需要進行身份認證(登入)後再執行此操作.", + "DefaultErrorMessage403": "你沒有權限!", + "DefaultErrorMessage403Detail": "你不能執行此操作!", + "DefaultErrorMessage404": "未找到資源!", + "DefaultErrorMessage404Detail": "未在服務中找到請求的資源!", + "EntityNotFoundErrorMessage": "實體 {0} 不存在,id = {1}!", + "Error": "錯誤", + "AreYouSure": "你確定嗎?", + "Cancel": "取消", + "Yes": "是", + "No": "否", + "Close": "關閉", + "Save": "保存", + "SavingWithThreeDot": "保存中...", + "Actions": "操作", + "Delete": "刪除", + "Edit": "修改", + "Refresh": "刷新", + "ProcessingWithThreeDot": "處理中...", + "LoadingWithThreeDot": "載入中...", + "Welcome": "歡迎", + "Login": "登入", + "Register": "註冊", + "Logout": "登出", + "Submit": "提交", + "Back": "返回", + "PagerSearch": "搜尋", + "PagerNext": "下一頁", + "PagerPrevious": "上一頁", + "PagerFirst": "首頁", + "PagerLast": "末頁", + "PagerInfo": "顯示 _TOTAL_ 個紀錄的 _START_ 到 _END_ 個.", + "PagerInfoEmpty": "顯示0個紀錄中的0到0", + "PagerInfoFiltered": "(從 _MAX_ 所有紀錄中過濾掉)", + "NoDataAvailableInDatatable": "資料表中沒有資料", + "PagerShowMenuEntries": "顯示 _MENU_ 實體", + "DatatableActionDropdownDefaultText": "操作", + "ChangePassword": "修改密碼", + "PersonalInfo": "個人資料", + "AreYouSureYouWantToCancelEditingWarningMessage": "你有未保存的更改.", + "UnhandledException": "未處理的異常!", + "401Message": "未授權", + "403Message": "禁止訪問", + "404Message": "網頁未找到", + "500Message": "內部伺服器錯誤", + "GoHomePage": "返回首頁", + "GoBack": "返回" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/zh-Hant.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/zh-Hant.json new file mode 100644 index 0000000000..1e7e419625 --- /dev/null +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/zh-Hant.json @@ -0,0 +1,34 @@ +{ + "culture": "zh-Hant", + "texts": { + "'{0}' and '{1}' do not match.": "'{0}'與'{1}'不匹配.", + "The {0} field is not a valid credit card number.": "欄位{0}不是有效的信用卡號碼.", + "{0} is not valid.": "{0}驗證未通過.", + "The {0} field is not a valid e-mail address.": "欄位{0}不是有效的電子郵件地址.", + "The {0} field only accepts files with the following extensions: {1}": "{0}欄位只允許以下副檔名的文件: {1}", + "The field {0} must be a string or array type with a maximum length of '{1}'.": "欄位{0}必須是最大長度為'{1}'的字串或陣列.", + "The field {0} must be a string or array type with a minimum length of '{1}'.": "欄位{0}必須是最小長度為'{1}'的字串或陣列.", + "The {0} field is not a valid phone number.": "欄位{0}不是有效的電話號碼.", + "The field {0} must be between {1} and {2}.": "欄位{0}值必須在{1}和{2}範圍內.", + "The field {0} must match the regular expression '{1}'.": "欄位{0}必須匹配正規表示式'{1}'.", + "The {0} field is required.": "欄位{0}不可為空.", + "The field {0} must be a string with a maximum length of {1}.": "欄位{0}必須是長度為{1}的字串.", + "The field {0} must be a string with a minimum length of {2} and a maximum length of {1}.": "欄位{0}必須是最小長度為{2}並且最大長度{1}的字串.", + "The {0} field is not a valid fully-qualified http, https, or ftp URL.": "欄位{0}不是有效的完全限定的http,https或ftp URL.", + "The field {0} is invalid.": "此欄位{0}是無效值.", + "ThisFieldIsNotAValidCreditCardNumber.": "此欄位不是有效的信用卡號碼.", + "ThisFieldIsNotValid.": "此驗證未通過.", + "ThisFieldIsNotAValidEmailAddress.": "此欄位不是有效的郵箱地址.", + "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "此欄位只允許以下副檔名的文件: {0}", + "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthoOf{0}": "此欄位必須是最大長度為'{0}'的字串或陣列.", + "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "此欄位必須是最小長度為'{0}'的字串或陣列.", + "ThisFieldIsNotAValidPhoneNumber.": "此欄位不是有效的電話號碼.", + "ThisFieldMustBeBetween{0}And{1}": "此欄位值必須在{0}和{1}範圍內.", + "ThisFieldMustMatchTheRegularExpression{0}": "此欄位必須匹配正規表示式'{0}'.", + "ThisFieldIsRequired.": "此欄位不可為空.", + "ThisFieldMustBeAStringWithAMaximumLengthOf{0}": "此欄位必須是長度為{0}的字串.", + "ThisFieldMustBeAStringWithAMinimumLengthOf{1}AndAMaximumLengthOf{0}": "此欄位必須是最小長度為{1}並且最大長度{0}的字串.", + "ThisFieldIsNotAValidFullyQualifiedHttpHttpsOrFtpUrl": "此欄位不是有效的完全限定的http,https或ftp URL.", + "ThisFieldIsInvalid.": "此欄位是無效值." + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/zh-Hant.json b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/zh-Hant.json new file mode 100644 index 0000000000..c70842f0b2 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/zh-Hant.json @@ -0,0 +1,7 @@ +{ + "culture": "zh-Hant", + "texts": { + "BirthDate": "生日", + "Value1": "值1" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/zh-Hant.json b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/zh-Hant.json new file mode 100644 index 0000000000..dd12964f70 --- /dev/null +++ b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/zh-Hant.json @@ -0,0 +1,6 @@ +{ + "culture": "zh-Hant", + "texts": { + "hello": "哈囉" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/zh-Hant.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/zh-Hant.json new file mode 100644 index 0000000000..8ce2ad288a --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/zh-Hant.json @@ -0,0 +1,7 @@ +{ + "culture": "zh-Hant", + "texts": { + "USA": "美國", + "Brazil": "巴西" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/zh-Hant.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/zh-Hant.json new file mode 100644 index 0000000000..1c0f506d34 --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/zh-Hant.json @@ -0,0 +1,7 @@ +{ + "culture": "zh-Hant", + "texts": { + "ThisFieldIsRequired": "此欄位為必填欄位", + "MaxLenghtErrorMessage": "此欄位最多可包含'{0}'個字元" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/zh-Hant.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/zh-Hant.json new file mode 100644 index 0000000000..17289c28ea --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/zh-Hant.json @@ -0,0 +1,11 @@ +{ + "culture": "zh-Hans", + "texts": { + "Hello {0}.": "您好 {0}.", + "Car": "汽車", + "CarPlural": "汽車", + "MaxLenghtErrorMessage": "此欄位的長度最多'{0}'個字元", + "Universe": "宇宙", + "FortyTwo": "四十二" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/zh-Hant.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/zh-Hant.json new file mode 100644 index 0000000000..c779d77a25 --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/zh-Hant.json @@ -0,0 +1,6 @@ +{ + "culture": "zh-Hant", + "texts": { + "SeeYou": "再會" + } +} \ No newline at end of file From f21bc4984ea371db04654530d671cbd421b11910 Mon Sep 17 00:00:00 2001 From: YinChang Date: Sat, 18 Jan 2020 11:23:00 +0800 Subject: [PATCH 238/411] add zh-hant to project in modules --- .../Localization/Resources/zh-Hant.json | 44 ++++++++ .../ApplicationContracts/zh-Hant.json | 14 +++ .../Localization/Resources/zh-Hant.json | 47 ++++++++ .../Resources/VoloDocs/Web/zh-Hant.json | 10 ++ .../Docs/ApplicationContracts/zh-Hant.json | 32 ++++++ .../Docs/Localization/Domain/zh-Hant.json | 20 ++++ .../Localization/Domain/zh-Hant.json | 7 ++ .../Abp/Identity/Localization/zh-Hant.json | 103 ++++++++++++++++++ .../Localization/Resources/zh-Hant.json | 8 ++ .../Localization/Domain/zh-Hant.json | 10 ++ .../AbpSettingManagement/zh-Hant.json | 7 ++ .../Localization/Resources/zh-Hant.json | 20 ++++ 12 files changed, 322 insertions(+) create mode 100644 modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hant.json create mode 100644 modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/zh-Hant.json create mode 100644 modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/zh-Hant.json create mode 100644 modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/zh-Hant.json create mode 100644 modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hant.json create mode 100644 modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hant.json create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/zh-Hant.json create mode 100644 modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/zh-Hant.json create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/zh-Hant.json create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hant.json create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/zh-Hant.json diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hant.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hant.json new file mode 100644 index 0000000000..e21631e92e --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hant.json @@ -0,0 +1,44 @@ +{ + "culture": "zh-Hant", + "texts": { + "UserName": "使用者名稱", + "EmailAddress": "電子信箱地址", + "UserNameOrEmailAddress": "使用者名稱或電子信箱地址", + "Password": "密碼", + "RememberMe": "記住我", + "UseAnotherServiceToLogin": "使用另一個服務登入", + "UserLockedOutMessage": "登入失敗,使用者帳號已被鎖定.請稍後再試.", + "InvalidUserNameOrPassword": "使用者名稱或密碼錯誤!", + "LoginIsNotAllowed": "無法登入!你需要驗證電子信箱地址/手機號碼.", + "SelfRegistrationDisabledMessage": "應用程式未開放註冊,請聯絡管理員以加入新使用者.", + "Login": "登入", + "Cancel": "取消", + "Register": "註冊", + "AreYouANewUser": "你是新使用者嗎?", + "AlreadyRegistered": "已經註冊過了?", + "InvalidLoginRequest": "登入請求無效", + "ThereAreNoLoginSchemesConfiguredForThisClient": "沒有為此客戶端配置登入方案.", + "LogInUsingYourProviderAccount": "使用你的{0}帳號登入", + "DisplayName:CurrentPassword": "目前密碼", + "DisplayName:NewPassword": "新密碼", + "DisplayName:NewPasswordConfirm": "確認新密碼", + "PasswordChangedMessage": "你的密碼已修改成功.", + "DisplayName:UserName": "使用者名稱", + "DisplayName:Email": "電子信箱", + "DisplayName:Name": "名字", + "DisplayName:Surname": "姓", + "DisplayName:Password": "密碼", + "DisplayName:EmailAddress": "電子信箱地址", + "DisplayName:PhoneNumber": "電話號碼", + "PersonalSettings": "個人設置", + "PersonalSettingsSaved": "個人設置已保存", + "PasswordChanged": "修改密碼", + "NewPasswordConfirmFailed": "請確認新密碼", + "Manage": "管理", + "ManageYourProfile": "管理你的個人資料", + "DisplayName:Abp.Account.IsSelfRegistrationEnabled": "啟用自行註冊", + "Description:Abp.Account.IsSelfRegistrationEnabled": "是否允許使用者自行註冊帳號.", + "DisplayName:Abp.Account.EnableLocalLogin": "使用本地帳號進行身分驗證", + "Description:Abp.Account.EnableLocalLogin": "伺服器是否允許使用者使用本地帳號進行身份驗證。" + } +} diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/zh-Hant.json b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/zh-Hant.json new file mode 100644 index 0000000000..bca246ba43 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/zh-Hant.json @@ -0,0 +1,14 @@ +{ + "culture": "zh-Hant", + "texts": { + "Permission:Blogging": "部落格", + "Permission:Blogs": "部落格", + "Permission:Posts": "文章", + "Permission:Tags": "標籤", + "Permission:Comments": "評論", + "Permission:Management": "管理", + "Permission:Edit": "標及", + "Permission:Create": "新增", + "Permission:Delete": "刪除" + } + } \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/zh-Hant.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/zh-Hant.json new file mode 100644 index 0000000000..fcafc171de --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/zh-Hant.json @@ -0,0 +1,47 @@ +{ + "culture": "zh-Hant", + "texts": { + "Menu:Blogs": "部落格", + "Menu:BlogManagement": "部落格管理", + "Title": "標題", + "Delete": "刪除", + "Reply": "回覆", + "ReplyTo": "回覆 {0}", + "ContinueReading": "繼續閱讀", + "DaysAgo": "{0}天前", + "YearsAgo": "{0}年前", + "MonthsAgo": "{0}個月前", + "WeeksAgo": "{0}週前", + "MinutesAgo": "{0}分前", + "SecondsAgo": "{0}秒前", + "HoursAgo": "{0}小時前", + "Now": "剛剛", + "Content": "內容", + "SeeAll": "查看所有", + "PopularTags": "熱門標籤", + "WiewsWithCount": "{0}人查看", + "LastPosts": "最後的文章", + "LeaveComment": "發表評論", + "TagsInThisArticle": "文章中的標籤", + "Posts": "文章", + "Edit": "編輯", + "BLOG": "部落格", + "CommentDeletionWarningMessage": "評論將被刪除.", + "PostDeletionWarningMessage": "文章將被刪除.", + "BlogDeletionWarningMessage": "部落格將被刪除.", + "AreYouSure": "您確定嗎?", + "CommentWithCount": "{0}個評論", + "Comment": "評論", + "ShareOnTwitter": "分享到Twitter", + "CoverImage": "封面圖", + "CreateANewPost": "新增一篇文章", + "CreateANewBlog": "新增一個部落格", + "WhatIsNew": "最新消息", + "Name": "名稱", + "ShortName": "簡稱", + "CreationTime": "建立時間", + "Description": "描述", + "Blogs": "部落格", + "Tags": "標籤" + } +} \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/zh-Hant.json b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/zh-Hant.json new file mode 100644 index 0000000000..643b875562 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/zh-Hant.json @@ -0,0 +1,10 @@ +{ + "culture": "zh-Hant", + "texts": { + "DocsTitle": "VoloDocs", + "WelcomeVoloDocs": "歡迎使用VoloDocs!", + "NoProjectWarning": "目前沒有專案!", + "CreateYourFirstProject": "建立您的第一個專案", + "NoProject": "沒有專案!" + } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hant.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hant.json new file mode 100644 index 0000000000..0a8415ccad --- /dev/null +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hant.json @@ -0,0 +1,32 @@ +{ + "culture": "zh-Hant", + "texts": { + "Permission:DocumentManagement": "文件管理", + "Permission:Projects": "專案", + "Permission:Edit": "編輯", + "Permission:Delete": "刪除", + "Permission:Create": "建立", + "Menu:DocumentManagement": "文件管理", + "Menu:ProjectManagement": "專案管理", + "CreateANewProject": "建立新專案", + "Edit": "編輯", + "Create": "建立", + "Projects": "專案", + "Name": "名稱", + "ShortName": "簡稱", + "DocumentStoreType": "文件存儲類型", + "Format": "格式", + "ShortNameInfoText": "將用於唯一的URL.", + "DisplayName:Name": "名稱", + "DisplayName:ShortName": "簡稱", + "DisplayName:Format": "格式", + "DisplayName:DefaultDocumentName": "預設文件名稱", + "DisplayName:NavigationDocumentName": "導覽文件名稱", + "DisplayName:MinimumVersion": "最低版本", + "DisplayName:MainWebsiteUrl": "主網站網址", + "DisplayName:LatestVersionBranchName": "最新版本的分支名稱", + "DisplayName:GitHubRootUrl": "GitHub根網址", + "DisplayName:GitHubAccessToken": "GitHub 存取Token ", + "DisplayName:GitHubUserAgent": "GitHub 使用者代理" + } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hant.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hant.json new file mode 100644 index 0000000000..34ded108f1 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hant.json @@ -0,0 +1,20 @@ +{ + "culture": "zh-Hant", + "texts": { + "Documents": "文件", + "BackToWebsite": "返回主網站", + "Contributors": "貢獻者", + "ShareOn": "分享到", + "Version": "版本", + "Edit": "編輯", + "Delete": "刪除", + "InThisDocument": "在此文件中", + "GoToTop": "到最上方", + "Projects": "專案", + "NoProjectWarning": "沒有專案!", + "DocumentNotFound": "找不到要求的文件!", + "NavigationDocumentNotFound": "這個版本沒有導覽文件!", + "DocumentNotFoundInSelectedLanguage": "本文件不適用於所選語系,將以預設語系顯示.", + "FilterTopics": "過濾主題" + } +} \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/zh-Hant.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/zh-Hant.json new file mode 100644 index 0000000000..bc4dbf268f --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/zh-Hant.json @@ -0,0 +1,7 @@ +{ + "culture": "zh-Hant", + "texts": { + "Features": "功能", + "NoFeatureFoundMessage": "沒有可用的功能." + } +} \ No newline at end of file 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 new file mode 100644 index 0000000000..240b7babdf --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json @@ -0,0 +1,103 @@ +{ + "culture": "zh-Hant", + "texts": { + "Menu:IdentityManagement": "身份識別管理", + "Users": "使用者", + "NewUser": "新使用者", + "UserName": "使用者名稱", + "EmailAddress": "電子信箱地址", + "PhoneNumber": "手機號碼", + "UserInformations": "用戶資訊", + "DisplayName:IsDefault": "預設", + "DisplayName:IsStatic": "靜態", + "DisplayName:IsPublic": "公開", + "Roles": "角色", + "Password": "密碼", + "PersonalInfo": " 個人資料", + "PersonalSettings": "個人設置", + "UserDeletionConfirmationMessage": "使用者 '{0}' 將被刪除. 你確定嗎?", + "RoleDeletionConfirmationMessage": "角色 '{0}' 將被刪除. 你確定嗎?", + "DisplayName:RoleName": "角色名稱", + "DisplayName:UserName": "使用者名稱", + "DisplayName:Name": "名子", + "DisplayName:Surname": "姓", + "DisplayName:Password": "密碼", + "DisplayName:Email": "電子信箱地址", + "DisplayName:PhoneNumber": "手機號碼", + "DisplayName:TwoFactorEnabled": "二次認證", + "DisplayName:LockoutEnabled": "登入失敗,帳號被鎖定", + "NewRole": "新角色", + "RoleName": "角色名稱", + "CreationTime": "建立時間", + "Permissions": "權限", + "DisplayName:CurrentPassword": "目前密碼", + "DisplayName:NewPassword": "新密碼", + "DisplayName:NewPasswordConfirm": "確認新密碼", + "PasswordChangedMessage": "你已成功更改密碼.", + "PersonalSettingsSavedMessage": "你的個人設置保存成功.", + "Identity.DefaultError": "發生了一個未知錯誤.", + "Identity.ConcurrencyFailure": "對象已被修改,因樂觀並行控制導致失敗.", + "Identity.DuplicateEmail": "電子信箱 '{0}' 已存在.", + "Identity.DuplicateRoleName": "角色名 '{0}' 已存在.", + "Identity.DuplicateUserName": "使用者名稱 '{0}' 已存在.", + "Identity.InvalidEmail": "電子信箱 '{0}' 無效.", + "Identity.InvalidPasswordHasherCompatibilityMode": "提供的 PasswordHasherCompatibilityMode 無效.", + "Identity.InvalidPasswordHasherIterationCount": "迭代計數必須是正整數.", + "Identity.InvalidRoleName": "角色名 '{0}' 無效.", + "Identity.InvalidToken": "token無效.", + "Identity.InvalidUserName": "使用者名稱 '{0}' 無效, 只能包含字母或數字.", + "Identity.LoginAlreadyAssociated": "此登入名的使用者已存在.", + "Identity.PasswordMismatch": "密碼錯誤.", + "Identity.PasswordRequiresDigit": "密碼至少包含一位數字 ('0'-'9').", + "Identity.PasswordRequiresLower": "密碼至少包含一位小寫字母 ('a'-'z').", + "Identity.PasswordRequiresNonAlphanumeric": "密碼至少包含一位非字母數字字元.", + "Identity.PasswordRequiresUpper": "密碼至少包含一位大寫字母 ('A'-'Z').", + "Identity.PasswordTooShort": "密碼至少為{0}個字元.", + "Identity.RoleNotFound": "角色 {0} 不存在.", + "Identity.UserAlreadyHasPassword": "使用者已設置密碼.", + "Identity.UserAlreadyInRole": "使用者已具有角色 '{0}'.", + "Identity.UserLockedOut": "使用者被鎖定.", + "Identity.UserLockoutNotEnabled": "該使用者未啟用鎖定.", + "Identity.UserNameNotFound": "使用者 {0} 不存在.", + "Identity.UserNotInRole": "使用者不具有 '{0}' 角色.", + "Identity.PasswordConfirmationFailed": "密碼或確認密碼不一致.", + "Identity.StaticRoleRenamingErrorMessage": "無法重命名靜態角色.", + "Identity.StaticRoleDeletionErrorMessage": "無法刪除靜態角色.", + "Volo.Abp.Identity:010001": "您無法刪除自己的帳號!", + "Permission:IdentityManagement": "身份識別管理", + "Permission:RoleManagement": "角色管理", + "Permission:Create": "建立", + "Permission:Edit": "編輯", + "Permission:Delete": "刪除", + "Permission:ChangePermissions": "更改權限", + "Permission:UserManagement": "使用者管理", + "Permission:UserLookup": "使用者查詢", + "DisplayName:Abp.Identity.Password.RequiredLength": "要求長度", + "DisplayName:Abp.Identity.Password.RequiredUniqueChars": "要求唯一字元數量", + "DisplayName:Abp.Identity.Password.RequireNonAlphanumeric": "要求非字母數字", + "DisplayName:Abp.Identity.Password.RequireLowercase": "要求小寫字母", + "DisplayName:Abp.Identity.Password.RequireUppercase": "要求大寫字母", + "DisplayName:Abp.Identity.Password.RequireDigit": "要求數字", + "DisplayName:Abp.Identity.Lockout.AllowedForNewUsers": "允許新使用者", + "DisplayName:Abp.Identity.Lockout.LockoutDuration": "鎖定時間(秒)", + "DisplayName:Abp.Identity.Lockout.MaxFailedAccessAttempts": "最大失敗存取嘗試次數", + "DisplayName:Abp.Identity.SignIn.RequireConfirmedEmail": "要求驗證的電子信箱", + "DisplayName:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "要求驗證的手機號碼", + "DisplayName:Abp.Identity.User.IsUserNameUpdateEnabled": "啟用使用者名稱更新", + "DisplayName:Abp.Identity.User.IsEmailUpdateEnabled": "啟用電子信箱更新", + "Description:Abp.Identity.Password.RequiredLength": "密碼的最小長度.", + "Description:Abp.Identity.Password.RequiredUniqueChars": "密碼必須包含唯一字元的數量.", + "Description:Abp.Identity.Password.RequireNonAlphanumeric": "密碼是否必須包含非字母數字.", + "Description:Abp.Identity.Password.RequireLowercase": "密碼是否必須包含小寫字母.", + "Description:Abp.Identity.Password.RequireUppercase": "密碼是否必須包含大小字母.", + "Description:Abp.Identity.Password.RequireDigit": "密碼是否必須包含數字.", + "Description:Abp.Identity.Lockout.AllowedForNewUsers": "允許新使用者被鎖定.", + "Description:Abp.Identity.Lockout.LockoutDuration": "當鎖定發生時使用者被鎖定的時間(秒).", + "Description:Abp.Identity.Lockout.MaxFailedAccessAttempts": "如果啟用鎖定,當使用者被鎖定前失敗的存取嘗試次數.", + "Description:Abp.Identity.SignIn.RequireConfirmedEmail": "登入時是否需要驗證電子信箱.", + "Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "登入時是否需要驗證手機號碼.", + "Description:Abp.Identity.User.IsUserNameUpdateEnabled": "是否允許使用者更新使用者名稱.", + "Description:Abp.Identity.User.IsEmailUpdateEnabled": "是否允許使用者更新電子信箱." + + } +} \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/zh-Hant.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/zh-Hant.json new file mode 100644 index 0000000000..859e8c29b7 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/zh-Hant.json @@ -0,0 +1,8 @@ +{ + "culture": "zh-Hant", + "texts": { + "Volo.IdentityServer:DuplicateIdentityResourceName": "Identity資源名稱已存在: {Name}", + "Volo.IdentityServer:DuplicateApiResourceName": "Api資源名稱已存在: {Name}", + "Volo.IdentityServer:DuplicateClientId": "ClientId已經存在: {ClientId}" + } +} \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/zh-Hant.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/zh-Hant.json new file mode 100644 index 0000000000..ea109a2dd0 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/zh-Hant.json @@ -0,0 +1,10 @@ +{ + "culture": "zh-Hant", + "texts": { + "Permissions": "權限", + "OnlyProviderPermissons": "只有這個提供者", + "All": "全部", + "SelectAllInAllTabs": "授予所有權限", + "SelectAllInThisTab": "全選" + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hant.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hant.json new file mode 100644 index 0000000000..f8f55c38cb --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hant.json @@ -0,0 +1,7 @@ +{ + "culture": "zh-Hant", + "texts": { + "Settings": "設置", + "SuccessfullySaved": "保存成功" + } +} \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/zh-Hant.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/zh-Hant.json new file mode 100644 index 0000000000..858d7d6f9b --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/zh-Hant.json @@ -0,0 +1,20 @@ +{ + "culture": "zh-Hant", + "texts": { + "Menu:TenantManagement": "租戶管理", + "Tenants": "租戶", + "NewTenant": "新租戶", + "TenantName": "租戶名稱", + "DisplayName:TenantName": "租戶名稱", + "TenantDeletionConfirmationMessage": "租戶 '{0}' 將被刪除. 您確定嗎?", + "ConnectionStrings": "資料庫連線字串", + "DisplayName:DefaultConnectionString": "預設資料庫連線字串", + "DisplayName:UseSharedDatabase": "使用共用資料庫", + "Permission:TenantManagement": "租戶管理", + "Permission:Create": "新增", + "Permission:Edit": "編輯", + "Permission:Delete": "刪除", + "Permission:ManageConnectionStrings": "管理資料庫連線字串", + "Permission:ManageFeatures": "管理功能" + } +} \ No newline at end of file From 3967c642bb3c3d69911d0c77b09bb2bb8a7f7b38 Mon Sep 17 00:00:00 2001 From: YinChang Date: Sat, 18 Jan 2020 11:50:49 +0800 Subject: [PATCH 239/411] add zh-hant to project in templates --- .../Localization/MyProjectName/zh-Hant.json | 8 ++++++++ .../MyProjectNameHttpApiHostModule.cs | 1 + .../MyProjectNameHttpApiHostModule.cs | 1 + .../MyProjectNameIdentityServerModule.cs | 1 + .../MyProjectNameWebModule.cs | 1 + .../MyProjectNameHttpApiHostModule.cs | 1 + .../MyProjectNameIdentityServerModule.cs | 1 + .../MyProjectNameWebUnifiedModule.cs | 3 ++- 8 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hant.json diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hant.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hant.json new file mode 100644 index 0000000000..31e0ab5a47 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hant.json @@ -0,0 +1,8 @@ +{ + "culture": "zh-Hant", + "texts": { + "Menu:Home": "首頁", + "Welcome": "歡迎", + "LongWelcomeMessage": "歡迎來到此應用程式. 這是一個基於ABP框架的起始專案. 有關更多訊息, 請瀏覽 abp.io." + } + } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index 401c3641fc..63b9689b18 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -113,6 +113,7 @@ namespace MyCompanyName.MyProjectName options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); + options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文")); }); } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs index beeca41292..80aa44c647 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs @@ -122,6 +122,7 @@ namespace MyCompanyName.MyProjectName options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); + options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文")); }); } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 1dfe7f56eb..c20e77adf1 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -61,6 +61,7 @@ namespace MyCompanyName.MyProjectName options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); + options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文")); }); Configure(options => diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs index 697abb9ce2..89cf3c1358 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs @@ -154,6 +154,7 @@ namespace MyCompanyName.MyProjectName.Web options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); + options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文")); }); } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index 8ebec4ad9b..b501ed5fe5 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -88,6 +88,7 @@ namespace MyCompanyName.MyProjectName options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); + options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文")); }); //Updates AbpClaimTypes to be compatible with identity server claims. diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 4be099efaa..b92fe455b5 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -99,6 +99,7 @@ namespace MyCompanyName.MyProjectName options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); + options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文")); }); Configure(options => diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs index aa253e89d3..cdd5de9398 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs @@ -98,7 +98,8 @@ namespace MyCompanyName.MyProjectName options.Languages.Add(new LanguageInfo("en", "en", "English")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português (Brasil)")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); - options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "Chinese")); + options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); + options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文")); }); Configure(options => From 1433aff8d6a79325dfc5d409d32a2a372fd935bf Mon Sep 17 00:00:00 2001 From: YinChang Date: Sat, 18 Jan 2020 14:52:32 +0800 Subject: [PATCH 240/411] add zh-hant to abp.io --- .../Localization/Resources/zh-Hant.json | 13 ++ .../Admin/Localization/Resources/zh-Hant.json | 60 +++++++ .../Base/Localization/Resources/zh-Hant.json | 31 ++++ .../Blog/Localization/Resources/zh-Hant.json | 5 + .../Localization/Resources/zh-Hant.json | 30 ++++ .../Docs/Localization/Resources/zh-Hant.json | 5 + .../Localization/Resources/zh-Hant.json | 5 + .../Www/Localization/Resources/zh-Hant.json | 159 ++++++++++++++++++ 8 files changed, 308 insertions(+) create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/zh-Hant.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/zh-Hant.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hant.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/zh-Hant.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/zh-Hant.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/zh-Hant.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hant.json diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/zh-Hant.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/zh-Hant.json new file mode 100644 index 0000000000..58d01109b5 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/zh-Hant.json @@ -0,0 +1,13 @@ +{ + "culture": "zh-Hant", + "texts": { + "Account": "帳號", + "Welcome": "歡迎", + "UseOneOfTheFollowingLinksToContinue": "使用下面的連結繼續", + "FrameworkHomePage": "框架首頁", + "FrameworkDocumentation": "框架文件", + "OfficialBlog": "官方部落格", + "CommercialHomePage": "商業版首頁", + "CommercialSupportWebSite": "商業版支援網站" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/zh-Hant.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/zh-Hant.json new file mode 100644 index 0000000000..4787d74b25 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/zh-Hant.json @@ -0,0 +1,60 @@ +{ + "culture": "zh-Hant", + "texts": { + "Permission:NpmPackages": "NPM套件", + "Permission:NugetPackages": "Nuget套件", + "Permission:Maintenance": "維護", + "Permission:Maintain": "維護", + "Permission:ClearCaches": "清除快取", + "Permission:Modules": "模組", + "Permission:Packages": "套件", + "Permission:Edit": "編輯", + "Permission:Delete": "刪除", + "Permission:Create": "建立", + "Menu:Packages": "套件", + "NpmPackageDeletionWarningMessage": "該NPM套件將會被刪除. 你確定嗎?", + "NugetPackageDeletionWarningMessage": "該Nuget套件將會被刪除. 你確定嗎?", + "ModuleDeletionWarningMessage": "該模組將會被刪除. 你確定嗎?", + "Name": "名稱", + "DisplayName": "顯示名稱", + "ShortDescription": "簡述", + "NameFilter": "名稱", + "CreationTime": "建立時間", + "IsPro": "是否為專業版", + "EfCoreConfigureMethodName": "設定方法", + "IsProFilter": "是否為專業版", + "ApplicationType": "應用程式類型", + "Target": "目標", + "TargetFilter": "目標", + "ModuleClass": "模組分類", + "NugetPackageTarget.DomainShared": "Domain Shared", + "NugetPackageTarget.Domain": "Domain", + "NugetPackageTarget.Application": "Application", + "NugetPackageTarget.ApplicationContracts": "Application Contracts", + "NugetPackageTarget.HttpApi": "Http Api", + "NugetPackageTarget.HttpApiClient": "Http Api Client", + "NugetPackageTarget.Web": "Web", + "NugetPackageTarget.EntityFrameworkCore": "EntityFramework Core", + "NugetPackageTarget.MongoDB": "MongoDB", + "Edit": "編輯", + "Delete": "刪除", + "Refresh": "刷新", + "NpmPackages": "NPM套件", + "NugetPackages": "Nuget套件", + "NpmPackageCount": "NPM套件數量", + "NugetPackageCount": "Nuget套件數量", + "Module": "模組", + "ModuleInfo": "模組信息", + "CreateANpmPackage": "建立NPM套件", + "CreateAModule": "建立模組", + "CreateANugetPackage": "建立Nuget套件", + "AddNew": "建立", + "PackageAlreadyExist{0}": "\"{0}\"已經被添加.", + "ClearCache": "清除快取", + "SuccessfullyCleared": "清除成功", + "Menu:NpmPackages": "NPM套件", + "Menu:Modules": "模組", + "Menu:Maintenance": "維護", + "Menu:NugetPackages": "Nuget套件" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hant.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hant.json new file mode 100644 index 0000000000..fe97ac3a6c --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hant.json @@ -0,0 +1,31 @@ +{ + "culture": "zh-Hant", + "texts": { + "Volo.AbpIo.Domain:010004": "超過最大成員數!", + "Volo.AbpIo.Domain:010005": "超過最大擁有者數!", + "Volo.AbpIo.Domain:010006": "使用者已經是該組織的擁有者!", + "Volo.AbpIo.Domain:010007": "該使用者已經是該組織的開發者!", + "Volo.AbpIo.Domain:010008": "允許的開發者數量不能低於當前開發者數量!", + "Volo.AbpIo.Domain:010009": "允許的開發者數量不能小於零!", + "Volo.AbpIo.Domain:010010": "超出了最大mac地址數!", + "Volo.AbpIo.Domain:010011": "個人許可不允許超過1個開發者!", + "Volo.AbpIo.Domain:010012": "許可過期後許可不可延長1個月!", + "Volo.AbpIo.Domain:020001": "不能刪除該NPM套件因為\"{NugetPackages}\"Nuget套件依賴此套件.", + "Volo.AbpIo.Domain:020002": "不能刪除該NPM套件因為\"{Modules}\"模組正在使用此套件.", + "Volo.AbpIo.Domain:020003": "不能刪除該NPM套件因為\"{Modules}\"模組正在使用此套件並且\"{NugetPackages}\"Nuget套件依賴此套件.", + "Volo.AbpIo.Domain:020004": "不能刪除該Nuget套件因為\"{Modules}\"模組正在使用此套件.", + "WantToLearn?": "想學習嗎?", + "ReadyToGetStarted?": "準備開始了嗎?", + "JoinOurCommunity": "加入我們的社群", + "GetStartedUpper": "開始", + "ForkMeOnGitHub": "Fork me on GitHub", + "Features": "功能", + "GetStarted": "開始", + "Documents": "文件", + "Community": "社群", + "ContributionGuide": "貢獻指南", + "Blog": "部落格", + "Commercial": "商業版", + "SeeDocuments": "查看文件" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/zh-Hant.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/zh-Hant.json new file mode 100644 index 0000000000..7de3798218 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/zh-Hant.json @@ -0,0 +1,5 @@ +{ + "culture": "zh-Hant", + "texts": { + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json new file mode 100644 index 0000000000..e39eaba846 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json @@ -0,0 +1,30 @@ +{ + "culture": "zh-Hant", + "texts": { + "OrganizationManagement": "組織管理", + "OrganizationList": "組織列表", + "Volo.AbpIo.Commercial:010003": "您不是該組織的擁有者!", + "OrganizationNotFoundMessage": "找不到任何組織!", + "DeveloperCount": "開發者數量", + "Owners": "擁有者", + "AddMember": "加入成員", + "AddOwner": "加入擁有者", + "AddDeveloper": "加入開發者", + "UserName": "使用者名稱", + "Name": "名稱", + "EmailAddress": "電子信箱地址", + "Developers": "開發者", + "LicenseType": "許可證類型", + "Manage": "管理", + "StartDate": "開始日期", + "EndDate": "結束日期", + "Modules": "模組", + "LicenseExtendMessage": "您的許可已經延長至{0}", + "LicenseUpgradeMessage": "您的許可已升級為{0}", + "LicenseAddDeveloperMessage": "{0}個開發者已加入到您的許可", + "Volo.AbpIo.Commercial:010004": "不能找到指定的使用者! 使用者必須已經註冊.", + "MyOrganizations": "我的組織", + "ApiKey": "API key", + "UserNameNotFound": "沒有使用者名稱為{0}的使用者" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/zh-Hant.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/zh-Hant.json new file mode 100644 index 0000000000..7de3798218 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/zh-Hant.json @@ -0,0 +1,5 @@ +{ + "culture": "zh-Hant", + "texts": { + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/zh-Hant.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/zh-Hant.json new file mode 100644 index 0000000000..7de3798218 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/zh-Hant.json @@ -0,0 +1,5 @@ +{ + "culture": "zh-Hant", + "texts": { + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hant.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hant.json new file mode 100644 index 0000000000..6c74dbcadd --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hant.json @@ -0,0 +1,159 @@ +{ + "culture": "zh-Hant", + "texts": { + "GetStarted": "開始", + "Create": "建立", + "NewProject": "新專案", + "DirectDownload": "直接下載", + "ProjectName": "專案名稱", + "ProjectType": "專案類型", + "DatabaseProvider": "資料庫提供者", + "NTier": "N層", + "IncludeUserInterface": "包含使用者介面", + "CreateNow": "現在建立", + "TheStartupProject": "起始專案", + "Tutorial": "教學", + "UsingCLI": "使用CLI", + "SeeDetails": "看詳細", + "AbpShortDescription": "ABP是用於建立現代Web應用程式的完整架構和強大的基礎設施! 遵循最佳實作和約定,為您提供SOLID開發經驗.", + "SourceCodeUpper": "原始碼", + "LatestReleaseLogs": "最新發佈日誌", + "Infrastructure": "基礎設施", + "Architecture": "架構", + "Modular": "模組化", + "DontRepeatYourself": "不要重複工作", + "DeveloperFocused": "專注於開發者", + "FullStackApplicationInfrastructure": "全端應用程式基礎設施", + "DomainDrivenDesign": "領域驅動設計", + "DomainDrivenDesignExplanation": "依據DDD模式和準則進行設計和開發. 為您的應用程式提供分層模型.", + "Authorization": "授權", + "AuthorizationExplanation": "具有使用者,角色和細膩度權限系統的高級授權. 建立於Microsoft Identity套件上.", + "MultiTenancy": "多租戶", + "MultiTenancyExplanationShort": "SaaS應用程式變得簡單! 從資料庫到UI的多租戶整合.", + "CrossCuttingConcerns": "橫切關注點", + "CrossCuttingConcernsExplanationShort": "完整的基礎架構,用於授權,驗證,異常處理,快取,稽核日誌,交易管理等.", + "BuiltInBundlingMinification": "內建Bundling & Minification", + "BuiltInBundlingMinificationExplanation": "無須使用外部工具進行Bundling & Minification. ABP提供了一種更簡單,動態,功能強大,模組化和內建的方式!", + "VirtualFileSystem": "虛擬文件系統", + "VirtualFileSystemExplanation": "將檢視,腳本,樣式,圖片...嵌入到套件/類別庫中,並在不同的應用程式中重複使用.", + "Theming": "主題", + "ThemingExplanationShort": "使用和訂製基於bootstrap的標準UI主題,或建立自己的主題.", + "BootstrapTagHelpersDynamicForms": "Bootstrap Tag Helpers和動態表單", + "BootstrapTagHelpersDynamicFormsExplanation": "內建的背景作業系統可以整合到Hangfire,RabbitMQ或您喜歡的任何工具中.", //TODO explanation doesn't match. + "HTTPAPIsDynamicProxies": "HTTP APIs和動態代理", + "HTTPAPIsDynamicProxiesExplanation": "自動將應用程式服務公開為REST樣式的HTTP API,並與動態JavaScript和C#代理一起使用.", + "CompleteArchitectureInfo": "現在架構用來建立可維護的軟體解決方案.", + "DomainDrivenDesignBasedLayeringModelExplanation": "幫助您實現基於DDD的分層架構並建構可維護的程式碼.", + "DomainDrivenDesignBasedLayeringModelExplanationCont": "提供啟動模板,抽象,基礎類別,服務,文件和指南以幫助您開發基於DDD模式和準則的應用程式.", + "MicroserviceCompatibleModelExplanation": "核心框架和預先建構模組在設計時就考慮了微服務架構.", + "MicroserviceCompatibleModelExplanationCont": "提供基礎結構,整合,範例和文件,以更輕鬆地實現微服務解決方案,而如果您要使用整體應用程式,也不會帶來額外的複雜性.", + "ModularInfo": "ABP提供了完整的模組化系統,使您能夠開發可重複使用的應用程式模組.", + "PreBuiltModulesThemes": "預先建構模組和主題", + "PreBuiltModulesThemesExplanation": "開源和商業模組和主題已準備好在您的業務應用程式中使用.", + "NuGetNPMPackages": "NuGet和NPM套件", + "NuGetNPMPackagesExplanation": "作為NuGet和NPM套件發佈.易於安裝和升級.", + "ExtensibleReplaceable": "可擴展/可替換", + "ExtensibleReplaceableExplanation": "所有服務和模組在設計時都考慮了可擴展性.您可以替換服務,頁面,樣式,組件...", + "CrossCuttingConcernsExplanation2": "保持原始碼整潔,專注於您自己的業務邏輯.", + "CrossCuttingConcernsExplanation3": "不要浪費時間一次又一次地實作共通用的應用程式需求.", + "AuthenticationAuthorization": "認證與授權", + "ExceptionHandling": "異常處理", + "Validation": "驗證", + "DatabaseConnection": "資料庫連接", + "TransactionManagement": "交易管理", + "AuditLogging": "稽核日誌", + "Caching": "快取", + "Multitenancy": "多租戶", + "DataFiltering": "資料過濾", + "ConventionOverConfiguration": "習慣優於設定", + "ConventionOverConfigurationExplanation": "預設情況下,ABP使用最小或零設定實現共通用的應用程式.", + "ConventionOverConfigurationExplanationList1": "自動註冊已知服務以進行依賴注入.", + "ConventionOverConfigurationExplanationList2": "通過命名習慣將應用程式服務公開為HTTP API.", + "ConventionOverConfigurationExplanationList3": "為C#和JavaScript建立動態HTTP客戶端代理.", + "ConventionOverConfigurationExplanationList4": "為您的實體提供預設Repository.", + "ConventionOverConfigurationExplanationList5": "根據Web請求或應用程式服務方法管理工作單元.", + "ConventionOverConfigurationExplanationList6": "為實體發佈建立,更新和刪除事件.", + "BaseClasses": "基礎類別", + "BaseClassesExplanation": "共通用應用程式模式的預先建構基礎類別.", + "DeveloperFocusedExplanation": "ABP是為了開發者", + "DeveloperFocusedExplanationCont": "它旨在簡化您的日常軟體開發,同時又不限制您在需要時進行底層工作。", + "SeeAllFeatures": "瀏覽所有功能", + "CLI_CommandLineInterface": "CLI (命令列介面)", + "CLI_CommandLineInterfaceExplanation": "CLI會自動建立新專案並將模組添加到您的應用程式.", + "StartupTemplates": "起始模板", + "StartupTemplatesExplanation": "各種起始模板為您提供了完整設定的解結方案,以快速啟動您的開發.", + "BasedOnFamiliarTools": "基於熟悉的工具", + "BasedOnFamiliarToolsExplanation": "建立在您已經知道的主流工具上並與其整合.學習曲線低,適應性強,舒適的開發.", + "ORMIndependent": "ORM獨立", + "ORMIndependentExplanation": "核心框架獨立於ORM/資料庫,並且可以與任何資料庫一起使用.Entity Framework Core和MongoDB提供者已經可用.", + "Features": "功能", + "ABPCLI": "ABP CLI", + "Modularity": "模組化", + "BootstrapTagHelpers": "Bootstrap Tag Helpers", + "DynamicForms": "動態表單", + "BundlingMinification": "Bundling & Minification", + "BackgroundJobs": "背景作業", + "DDDInfrastructure": "DDD基礎設施", + "DomainDrivenDesignInfrastructure": "Domain Driven Design基礎設施", + "AutoRESTAPIs": "自動REST APIs", + "DynamicClientProxies": "動態客戶端代理", + "DistributedEventBus": "分散式事件匯流排", + "DistributedEventBusWithRabbitMQIntegration": "具有RabbitMQ整合的分散式事件匯流排", + "TestInfrastructure": "測試基礎設施", + "AuditLoggingEntityHistories": "稽核日誌和實體歷史", + "ObjectToObjectMapping": "物件對應", + "EmailSMSAbstractions": "電子郵件和簡訊抽象", + "EmailSMSAbstractionsWithTemplatingSupport": "具有模板支援的電子郵件和簡訊抽象", + "Localization": "本地化", + "SettingManagement": "設定管理", + "ExtensionMethods": "擴充方法", + "ExtensionMethodsHelpers": "擴充方法和助手", + "AspectOrientedProgramming": "切面導向設計", + "DependencyInjection": "依賴注入", + "DependencyInjectionByConventions": "依照習慣的依賴注入", + "ABPCLIExplanation": "ABP CLI(命令列介面)是用於對ABP解決方案執行常見操作的命令列工具.", + "ModularityExplanation": "ABP提供了一個完整的基礎設施來建構您自己的應用程式模組,這些模組可能具有實體,服務,資料庫整合,API,UI組件等.", //TODO: strong "your own application modules",- + "MultiTenancyExplanation": "ABP框建不僅支援開發多租戶應用程式,而且使您的程式碼幾乎無須知道多租戶.", + "MultiTenancyExplanation2": "可以自動確定當前租戶,將不同租戶的資料互相隔離.", + "MultiTenancyExplanation3": "支援單一資料庫,或每個租戶單獨資料庫或者混合方式.", + "MultiTenancyExplanation4": "您專注於業務邏輯,並讓該框架為您處理多租戶.", + "BootstrapTagHelpersExplanation": "與其手動撰寫重複細節的bootstrap組件,不如使用ABP的tag helper來簡化它並利用自動完成.您當然也可以在需要時直接使用Bootstrap.", + "DynamicFormsExplanation": "動態表單和tag helpers可以利用C#類別做為模型來建立完整的表單.", + "AuthenticationAuthorizationExplanation": "整合到ASP.NET Core Identity和IdentityServer4的豐富身份驗證和授權選項.提供可擴展且詳細的權限系統.", + "CrossCuttingConcernsExplanation": "部要重複資幾一次又一次地實作所有這寫常見的東西.專注於您的業務邏輯,並讓ABP按照習慣自動執行.", + "DatabaseConnectionTransactionManagement": "資料庫連接和交易管理", + "CorrelationIdTracking": "關聯ID追蹤", + "BundlingMinificationExplanation": "ABP提供了一個簡單,動態,功能強大,模組化的內建Bundling & Minification系統.", + "VirtualFileSystemnExplanation": "虛擬文件系統使管理文件系統(硬碟)上不存在的文件成為可能.它主要用於將(js,css,image,cshtml...)文件嵌入到組件(Assembly)中,並在運行時像實體文件一樣使用他們.", + "ThemingExplanation": "主題系統允許通過基於最新的Bootstrap框架定義一組通用基礎類別庫和佈局來獨立開發應用程式和模組主題.", + "DomainDrivenDesignInfrastructureExplanation": "基於領域驅動設計模式和準則建構分層應用程式的完整基礎設施;", + "Specification": "規範", + "Repository": "倉儲", + "DomainService": "領域服務", + "ValueObject": "值對象", + "ApplicationService": "應用服務", + "DataTransferObject": "資料傳輸對象", + "AggregateRootEntity": "聚合根, 實體", + "AutoRESTAPIsExplanation": "ABP可以依照習慣自動將您的應用服務設定為API控制器.", + "DynamicClientProxiesExplanation": "從JavaScript和C#客戶端輕鬆使用您的API.", + "DistributedEventBusWithRabbitMQIntegrationExplanation": "使用帶有RabbitMQ整合的內建分散式事件匯流排,可以輕鬆發佈和使用分散式事件.", + "TestInfrastructureExplanation": "框架已經考慮了單元和整合測試.為您提供基礎類別,使其更容易.起始模板已預先設定用於測試.", + "AuditLoggingEntityHistoriesExplanation": "針對關鍵業務應用的內建稽核日誌紀錄.請求,服務,方法級別的稽核日誌紀錄以及具有屬性級別詳細資訊的實體歷史紀錄.", + "EmailSMSAbstractionsWithTemplatingSupportExplanation": "IEmailSender和ISmsSender抽象使您的應用程式邏輯與基礎設施解耦.先進的電子郵件模板系統允許建立和在地化電子郵件模板,並在需要實輕鬆使用.", + "LocalizationExplanation": "在地化系統允許在純JSON文件中建立資源,並使用它們來在地化UI.它支援繼承,擴展和JavaScript整合等高級方案,同時與AspNet Core的在地化系統完全兼容.", + "SettingManagementExplanation": "定義應用程式的設定,並根據當前設定,租戶和使用者在運行時獲取值.", + "ExtensionMethodsHelpersExplanation": "即使式瑣碎的程式碼部分,也不要重複.標準類型的擴展方法和助手使您的程式碼更加清晰和易於撰寫.", + "AspectOrientedProgrammingExplanation": "提供合適的基礎設施來建立動態代理並實現切面導向設計.攔截任何類別,並在每次方法執行之前和之後執行程式碼.", + "DependencyInjectionByConventionsExplanation": "無須手動註冊類別以進行依賴注入.按照習慣自動註冊常用服務類型.對於其他類型的服務,您可以使用介面和屬性來使其變得更輕鬆.", + "DataFilteringExplanation": "定義和使用資料過濾器,這些過濾器在您從資料庫中查詢實體時會自動應用.當您實現簡單的介面時,可立即使用軟刪除功能和多租戶過濾器.", + "PublishEvents": "發佈事件", + "HandleEvents": "處理事件", + "AndMore": "更多...", + "Code": "編碼", + "Result": "結果", + "SeeTheDocumentForMoreInformation": "查看{0} 文件獲得更多訊息", + "IndexPageHeroSection": "asp.net core的開源Web應用程式
    框架
    ", + "UiFramework": "UI框架", + "EmailAddress": "電子信箱地址" + } +} \ No newline at end of file From 3c2f1a8214f5f2f9a63590688df4dc3b4af0b2cb Mon Sep 17 00:00:00 2001 From: YinChang Date: Sat, 18 Jan 2020 19:14:29 +0800 Subject: [PATCH 241/411] fix templates/module HttpApi.Host project , wrong name MyProjectName and should use MyProjectName_Module database --- ... => MyProjectNameHttpApiHostMigrationsDbContext.cs} | 4 ++-- ...rojectNameHttpApiHostMigrationsDbContextFactory.cs} | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) rename templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/EntityFrameworkCore/{MyProjectHttpApiHostMigrationsDbContext.cs => MyProjectNameHttpApiHostMigrationsDbContext.cs} (61%) rename templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/EntityFrameworkCore/{MyProjectHttpApiHostMigrationsDbContextFactory.cs => MyProjectNameHttpApiHostMigrationsDbContextFactory.cs} (60%) diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/EntityFrameworkCore/MyProjectHttpApiHostMigrationsDbContext.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/EntityFrameworkCore/MyProjectNameHttpApiHostMigrationsDbContext.cs similarity index 61% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/EntityFrameworkCore/MyProjectHttpApiHostMigrationsDbContext.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/EntityFrameworkCore/MyProjectNameHttpApiHostMigrationsDbContext.cs index 1e3386b031..64faa3f630 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/EntityFrameworkCore/MyProjectHttpApiHostMigrationsDbContext.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/EntityFrameworkCore/MyProjectNameHttpApiHostMigrationsDbContext.cs @@ -3,9 +3,9 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.EntityFrameworkCore { - public class MyProjectHttpApiHostMigrationsDbContext : AbpDbContext + public class MyProjectNameHttpApiHostMigrationsDbContext : AbpDbContext { - public MyProjectHttpApiHostMigrationsDbContext(DbContextOptions options) + public MyProjectNameHttpApiHostMigrationsDbContext(DbContextOptions options) : base(options) { diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/EntityFrameworkCore/MyProjectHttpApiHostMigrationsDbContextFactory.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/EntityFrameworkCore/MyProjectNameHttpApiHostMigrationsDbContextFactory.cs similarity index 60% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/EntityFrameworkCore/MyProjectHttpApiHostMigrationsDbContextFactory.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/EntityFrameworkCore/MyProjectNameHttpApiHostMigrationsDbContextFactory.cs index 8b83ae0091..f396202197 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/EntityFrameworkCore/MyProjectHttpApiHostMigrationsDbContextFactory.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/EntityFrameworkCore/MyProjectNameHttpApiHostMigrationsDbContextFactory.cs @@ -5,16 +5,16 @@ using Microsoft.Extensions.Configuration; namespace MyCompanyName.MyProjectName.EntityFrameworkCore { - public class MyProjectHttpApiHostMigrationsDbContextFactory : IDesignTimeDbContextFactory + public class MyProjectNameHttpApiHostMigrationsDbContextFactory : IDesignTimeDbContextFactory { - public MyProjectHttpApiHostMigrationsDbContext CreateDbContext(string[] args) + public MyProjectNameHttpApiHostMigrationsDbContext CreateDbContext(string[] args) { var configuration = BuildConfiguration(); - var builder = new DbContextOptionsBuilder() - .UseSqlServer(configuration.GetConnectionString("Default")); + var builder = new DbContextOptionsBuilder() + .UseSqlServer(configuration.GetConnectionString("MyProjectName")); - return new MyProjectHttpApiHostMigrationsDbContext(builder.Options); + return new MyProjectNameHttpApiHostMigrationsDbContext(builder.Options); } private static IConfigurationRoot BuildConfiguration() From 1955a9a0507059e50b65ce41e56bc7ce469499c2 Mon Sep 17 00:00:00 2001 From: YinChang Date: Sat, 18 Jan 2020 20:12:37 +0800 Subject: [PATCH 242/411] fix Volo.Abp.AspNetCore.Serilog ProjectReference --- .../MyCompanyName.MyProjectName.Web.Host.csproj | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) 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 6d6b11231a..e3678df1ac 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 @@ -16,6 +16,7 @@ + @@ -27,6 +28,7 @@ + @@ -50,11 +52,5 @@ Always - - - - ..\..\..\..\..\framework\src\Volo.Abp.AspNetCore.Serilog\bin\Debug\netcoreapp3.1\Volo.Abp.AspNetCore.Serilog.dll - - - + From 2f58d0b538d0e1c5623a734b34e9c49e9c0d9498 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Sun, 19 Jan 2020 19:15:25 +0300 Subject: [PATCH 243/411] added missing localization --- docs/en/Tutorials/AspNetCore-Mvc/Part-II.md | 3 ++- docs/pt-BR/Tutorials/AspNetCore-Mvc/Part-II.md | 3 ++- docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-II.md | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/en/Tutorials/AspNetCore-Mvc/Part-II.md b/docs/en/Tutorials/AspNetCore-Mvc/Part-II.md index 1e3ec1f539..505de55adc 100644 --- a/docs/en/Tutorials/AspNetCore-Mvc/Part-II.md +++ b/docs/en/Tutorials/AspNetCore-Mvc/Part-II.md @@ -421,7 +421,8 @@ $(function () { Open the `en.json` in the `Acme.BookStore.Domain.Shared` project and add the following line: ````json -"BookDeletionConfirmationMessage": "Are you sure to delete the book {0}?" +"BookDeletionConfirmationMessage": "Are you sure to delete the book {0}?", +"SuccessfullyDeleted": "Successfully deleted" ```` Run the application and try to delete a book. diff --git a/docs/pt-BR/Tutorials/AspNetCore-Mvc/Part-II.md b/docs/pt-BR/Tutorials/AspNetCore-Mvc/Part-II.md index 7e6471d3ed..ef2c28f1f1 100644 --- a/docs/pt-BR/Tutorials/AspNetCore-Mvc/Part-II.md +++ b/docs/pt-BR/Tutorials/AspNetCore-Mvc/Part-II.md @@ -454,7 +454,8 @@ $(function () { Abra o `en.json`no `Acme.BookStore.Domain.Shared`projeto e adicione a seguinte linha: ```json -"BookDeletionConfirmationMessage": "Are you sure to delete the book {0}?" +"BookDeletionConfirmationMessage": "Are you sure to delete the book {0}?", +"SuccessfullyDeleted": "Successfully deleted" ``` diff --git a/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-II.md b/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-II.md index dd86b5e119..2d4b344afa 100644 --- a/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-II.md +++ b/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-II.md @@ -421,7 +421,8 @@ $(function () { 打开`Acme.BookStore.Domain.Shared`项目中的`en.json`并添加以下行: ````json -"BookDeletionConfirmationMessage": "Are you sure to delete the book {0}?" +"BookDeletionConfirmationMessage": "Are you sure to delete the book {0}?", +"SuccessfullyDeleted": "Successfully deleted" ```` 运行程序并尝试删除一个book实体. From fc33924d0aee6e3f6b1de5a224889cc157493053 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 20 Jan 2020 11:56:42 +0800 Subject: [PATCH 244/411] Update zh-Hant.json --- .../Volo/Abp/Localization/TestResources/Source/zh-Hant.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/zh-Hant.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/zh-Hant.json index 17289c28ea..1aeb9cdf6f 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/zh-Hant.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/zh-Hant.json @@ -1,5 +1,5 @@ { - "culture": "zh-Hans", + "culture": "zh-Hant", "texts": { "Hello {0}.": "您好 {0}.", "Car": "汽車", @@ -8,4 +8,4 @@ "Universe": "宇宙", "FortyTwo": "四十二" } -} \ No newline at end of file +} From 45c2abbd32f6112adac7d2ea69a330d9fc2a823d Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 20 Jan 2020 13:20:57 +0800 Subject: [PATCH 245/411] framework & module& template & sample to target .NET Standard 2.0 Resolve #2668 --- framework/src/Volo.Abp.Dapper/Volo.Abp.Dapper.csproj | 2 +- .../Volo.Abp.EntityFrameworkCore.MySQL.csproj | 4 ++-- .../Volo.Abp.EntityFrameworkCore.PostgreSql.csproj | 2 +- .../Volo.Abp.EntityFrameworkCore.SqlServer.csproj | 2 +- .../Volo.Abp.EntityFrameworkCore.Sqlite.csproj | 2 +- .../Volo.Abp.EntityFrameworkCore.csproj | 2 +- .../Volo.Abp.AuditLogging.EntityFrameworkCore.csproj | 2 +- .../Volo.Abp.BackgroundJobs.EntityFrameworkCore.csproj | 2 +- .../Volo.BloggingTestApp.EntityFrameworkCore.csproj | 2 +- .../Volo.Blogging.EntityFrameworkCore.csproj | 2 +- .../VoloDocs.EntityFrameworkCore.csproj | 2 +- .../Volo.Docs.EntityFrameworkCore.csproj | 2 +- .../Volo.Abp.FeatureManagement.EntityFrameworkCore.csproj | 2 +- .../Volo.Abp.Identity.EntityFrameworkCore.csproj | 2 +- .../Volo.Abp.PermissionManagement.EntityFrameworkCore.csproj | 2 +- .../Volo.Abp.SettingManagement.EntityFrameworkCore.csproj | 2 +- .../Volo.Abp.TenantManagement.EntityFrameworkCore.csproj | 2 +- .../Volo.Abp.Users.EntityFrameworkCore.csproj | 2 +- .../Acme.BookStore.BookManagement.EntityFrameworkCore.csproj | 2 +- .../MyCompanyName.MyProjectName.EntityFrameworkCore.csproj | 2 +- 20 files changed, 21 insertions(+), 21 deletions(-) diff --git a/framework/src/Volo.Abp.Dapper/Volo.Abp.Dapper.csproj b/framework/src/Volo.Abp.Dapper/Volo.Abp.Dapper.csproj index f7b9d76169..d077d859e1 100644 --- a/framework/src/Volo.Abp.Dapper/Volo.Abp.Dapper.csproj +++ b/framework/src/Volo.Abp.Dapper/Volo.Abp.Dapper.csproj @@ -3,7 +3,7 @@ - netstandard2.1 + netstandard2.0 Volo.Abp.Dapper Volo.Abp.Dapper $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; 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 b63a2ae7cb..10f1f4e070 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 @@ -3,7 +3,7 @@ - netstandard2.1 + netstandard2.0 Volo.Abp.EntityFrameworkCore.MySQL Volo.Abp.EntityFrameworkCore.MySQL $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; @@ -18,7 +18,7 @@ - + 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 0154d1b773..13e4197209 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 @@ -3,7 +3,7 @@ - netstandard2.1 + netstandard2.0 Volo.Abp.EntityFrameworkCore.PostgreSql Volo.Abp.EntityFrameworkCore.PostgreSql $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; 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 d0d338be9d..3e3172003c 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 @@ -3,7 +3,7 @@ - netstandard2.1 + netstandard2.0 Volo.Abp.EntityFrameworkCore.SqlServer Volo.Abp.EntityFrameworkCore.SqlServer $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; 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 d3c5313898..2ac575f23a 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 @@ -3,7 +3,7 @@ - netstandard2.1 + netstandard2.0 Volo.Abp.EntityFrameworkCore.Sqlite Volo.Abp.EntityFrameworkCore.Sqlite $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj b/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj index 3e83001eb2..0640cf10b9 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj @@ -3,7 +3,7 @@ - netstandard2.1 + netstandard2.0 Volo.Abp.EntityFrameworkCore Volo.Abp.EntityFrameworkCore $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.csproj b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.csproj index 93422d8f3f..ff72eb23da 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.csproj +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.csproj @@ -3,7 +3,7 @@ - netstandard2.1 + netstandard2.0 diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo.Abp.BackgroundJobs.EntityFrameworkCore.csproj b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo.Abp.BackgroundJobs.EntityFrameworkCore.csproj index eb92972675..1b3ed12524 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo.Abp.BackgroundJobs.EntityFrameworkCore.csproj +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo.Abp.BackgroundJobs.EntityFrameworkCore.csproj @@ -3,7 +3,7 @@ - netstandard2.1 + netstandard2.0 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 27fa209d2c..3f100043ee 100644 --- a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.csproj +++ b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.csproj @@ -1,7 +1,7 @@  - netstandard2.1 + netstandard2.0 diff --git a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo.Blogging.EntityFrameworkCore.csproj b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo.Blogging.EntityFrameworkCore.csproj index 122385c76f..77f25274f0 100644 --- a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo.Blogging.EntityFrameworkCore.csproj +++ b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo.Blogging.EntityFrameworkCore.csproj @@ -3,7 +3,7 @@ - netstandard2.1 + netstandard2.0 Volo.Blogging.EntityFrameworkCore Volo.Blogging.EntityFrameworkCore diff --git a/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.csproj b/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.csproj index d7f8b49bae..b70794e39b 100644 --- a/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.csproj +++ b/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.csproj @@ -1,7 +1,7 @@  - netstandard2.1 + netstandard2.0 diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo.Docs.EntityFrameworkCore.csproj b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo.Docs.EntityFrameworkCore.csproj index 1111fa62a2..1eb5495e93 100644 --- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo.Docs.EntityFrameworkCore.csproj +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo.Docs.EntityFrameworkCore.csproj @@ -3,7 +3,7 @@ - netstandard2.1 + netstandard2.0 Volo.Docs.EntityFrameworkCore Volo.Docs.EntityFrameworkCore diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo.Abp.FeatureManagement.EntityFrameworkCore.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo.Abp.FeatureManagement.EntityFrameworkCore.csproj index 297d7fcaa4..54b94c7eef 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo.Abp.FeatureManagement.EntityFrameworkCore.csproj +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo.Abp.FeatureManagement.EntityFrameworkCore.csproj @@ -3,7 +3,7 @@ - netstandard2.1 + netstandard2.0 diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo.Abp.Identity.EntityFrameworkCore.csproj b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo.Abp.Identity.EntityFrameworkCore.csproj index 945905d75f..87c5e27bd5 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo.Abp.Identity.EntityFrameworkCore.csproj +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo.Abp.Identity.EntityFrameworkCore.csproj @@ -3,7 +3,7 @@ - netstandard2.1 + netstandard2.0 Volo.Abp.Identity.EntityFrameworkCore Volo.Abp.Identity.EntityFrameworkCore $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo.Abp.PermissionManagement.EntityFrameworkCore.csproj b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo.Abp.PermissionManagement.EntityFrameworkCore.csproj index c13b3da80b..037bda9589 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo.Abp.PermissionManagement.EntityFrameworkCore.csproj +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo.Abp.PermissionManagement.EntityFrameworkCore.csproj @@ -3,7 +3,7 @@ - netstandard2.1 + netstandard2.0 Volo.Abp.PermissionManagement.EntityFrameworkCore Volo.Abp.PermissionManagement.EntityFrameworkCore $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo.Abp.SettingManagement.EntityFrameworkCore.csproj b/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo.Abp.SettingManagement.EntityFrameworkCore.csproj index f5e1761cc5..c76680e887 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo.Abp.SettingManagement.EntityFrameworkCore.csproj +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo.Abp.SettingManagement.EntityFrameworkCore.csproj @@ -3,7 +3,7 @@ - netstandard2.1 + netstandard2.0 Volo.Abp.SettingManagement.EntityFrameworkCore Volo.Abp.SettingManagement.EntityFrameworkCore $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo.Abp.TenantManagement.EntityFrameworkCore.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo.Abp.TenantManagement.EntityFrameworkCore.csproj index 259f5e7a73..b103325b1a 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo.Abp.TenantManagement.EntityFrameworkCore.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo.Abp.TenantManagement.EntityFrameworkCore.csproj @@ -3,7 +3,7 @@ - netstandard2.1 + netstandard2.0 Volo.Abp.TenantManagement.EntityFrameworkCore Volo.Abp.TenantManagement.EntityFrameworkCore $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo.Abp.Users.EntityFrameworkCore.csproj b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo.Abp.Users.EntityFrameworkCore.csproj index d70b92e1a4..b6916f3aaa 100644 --- a/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo.Abp.Users.EntityFrameworkCore.csproj +++ b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo.Abp.Users.EntityFrameworkCore.csproj @@ -3,7 +3,7 @@ - netstandard2.1 + netstandard2.0 Volo.Abp.Users.EntityFrameworkCore Volo.Abp.Users.EntityFrameworkCore $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/Acme.BookStore.BookManagement.EntityFrameworkCore.csproj b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/Acme.BookStore.BookManagement.EntityFrameworkCore.csproj index 5d0a8647fe..acf58d6c55 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/Acme.BookStore.BookManagement.EntityFrameworkCore.csproj +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/Acme.BookStore.BookManagement.EntityFrameworkCore.csproj @@ -3,7 +3,7 @@ - netstandard2.1 + netstandard2.0 Acme.BookStore.BookManagement diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj index 6060761768..38ec546255 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj @@ -3,7 +3,7 @@ - netstandard2.1 + netstandard2.0 MyCompanyName.MyProjectName From afb4a22c61a143ece5513fb723713f3a353e24b8 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 20 Jan 2020 10:38:01 +0300 Subject: [PATCH 246/411] refactor(core): make toLocalIsoString optional #2666 --- npm/ng-packs/packages/core/src/lib/utils/date-extensions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/core/src/lib/utils/date-extensions.ts b/npm/ng-packs/packages/core/src/lib/utils/date-extensions.ts index 3522b000c8..8f0d17504d 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/date-extensions.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/date-extensions.ts @@ -2,7 +2,7 @@ export {}; declare global { interface Date { - toLocalISOString(): string; + toLocalISOString?: () => string; } } From ee15a1d6a0bf58fff827ed8c897836d11ccc1d05 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 20 Jan 2020 11:23:12 +0300 Subject: [PATCH 247/411] docs fix broken links --- docs/en/Audit-Logging.md | 2 +- .../Contribution/Localization-Text-Files.md | 29 +++++++------------ docs/en/Modules/Docs.md | 6 ++-- docs/en/Modules/Index.md | 2 +- docs/en/Tutorials/AspNetCore-Mvc/Part-I.md | 2 +- 5 files changed, 16 insertions(+), 25 deletions(-) diff --git a/docs/en/Audit-Logging.md b/docs/en/Audit-Logging.md index 642d118983..610efc0451 100644 --- a/docs/en/Audit-Logging.md +++ b/docs/en/Audit-Logging.md @@ -219,7 +219,7 @@ An **audit log object** is created for each **web request** by default. An audit * `ClientId`: Id of the current client, if the client has been authenticated. A client is generally a 3rd-party application using the system over an HTTP API. * `ClientName`: Name of the current client, if available. * `ClientIpAddress`: IP address of the client/user device. - * `CorrelationId`: Current [Correlation Id]((CorrelationId.md)). Correlation Id is used to relate the audit logs written by different applications (or microservices) in a single logical operation. + * `CorrelationId`: Current [Correlation Id](CorrelationId.md). Correlation Id is used to relate the audit logs written by different applications (or microservices) in a single logical operation. * `BrowserInfo`: Browser name/version info of the current user, if available. * `HttpMethod`: HTTP method of the current request (GET, POST, PUT, DELETE... etc.). * `HttpStatusCode`: HTTP response status code for this request. diff --git a/docs/en/Contribution/Localization-Text-Files.md b/docs/en/Contribution/Localization-Text-Files.md index 3932800575..2a8e5ee468 100644 --- a/docs/en/Contribution/Localization-Text-Files.md +++ b/docs/en/Contribution/Localization-Text-Files.md @@ -3,7 +3,7 @@ Here, a list of localization text files for anyone wants to contribute to localization of the texts coming from the framework. We will keep this list up to date: * https://github.com/abpframework/abp/tree/master/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en.json -* https://github.com/abpframework/abp/tree/master/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpValidation/en.json +* https://github.com/abpframework/abp/blob/master/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/en.json * https://github.com/abpframework/abp/tree/master/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/en.json * https://github.com/abpframework/abp/tree/master/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json * https://github.com/abpframework/abp/tree/master/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/en.json @@ -12,29 +12,20 @@ Here, a list of localization text files for anyone wants to contribute to locali * https://github.com/abpframework/abp/tree/master/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/en.json * https://github.com/abpframework/abp/tree/master/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/en.json * https://github.com/abpframework/abp/tree/master/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/en.json -* https://github.com/abpframework/abp/tree/master/modules/account/src/Volo.Abp.Account.Web/Localization/Resources/AbpAccount/Web/en.json +* https://github.com/abpframework/abp/blob/master/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json * https://github.com/abpframework/abp/tree/master/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/en.json -* https://github.com/abpframework/abp/tree/master/modules/blogging/src/Volo.Blogging.Web/Localization/Resources/Blogging/Web/en.json +* https://github.com/abpframework/abp/tree/master/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/en.json * https://github.com/abpframework/abp/tree/master/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/en.json * https://github.com/abpframework/abp/tree/master/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json -* https://github.com/abpframework/abp/tree/master/modules/docs/src/Volo.Docs.Admin.Web/Localization/Resources/Docs/Web/en.json * https://github.com/abpframework/abp/tree/master/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json -* https://github.com/abpframework/abp/tree/master/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/Localization/ApplicationContracts/en.json -* https://github.com/abpframework/abp/tree/master/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/Localization/Domain/en.json -* https://github.com/abpframework/abp/tree/master/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Localization/Resources/FeatureManagement/en.json -* https://github.com/abpframework/abp/tree/master/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/Localization/ApplicationContracts/en.json -* https://github.com/abpframework/abp/tree/master/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/Localization/Domain/en.json -* https://github.com/abpframework/abp/tree/master/modules/identity/src/Volo.Abp.Identity.Web/Localization/Resources/AbpIdentity/en.json -* https://github.com/abpframework/abp/tree/master/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Localization/Resources/AbpPermissionManagement/en.json -* https://github.com/abpframework/abp/tree/master/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Localization/Resources/AbpSettingManagement/en.json -* https://github.com/abpframework/abp/tree/master/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/en.json -* https://github.com/abpframework/abp/tree/master/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/en.json +* https://github.com/abpframework/abp/tree/master/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en.json +* https://github.com/abpframework/abp/tree/master/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en.json +* https://github.com/abpframework/abp/tree/master/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en.json +* https://github.com/abpframework/abp/tree/master/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en.json +* https://github.com/abpframework/abp/tree/master/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en.json * https://github.com/abpframework/abp/tree/master/samples/BookStore/src/Acme.BookStore.Domain.Shared/Localization/BookStore/en.json -* https://github.com/abpframework/abp/tree/master/samples/DashboardDemo/src/DashboardDemo.Domain/Localization/DashboardDemo/en.json +* https://github.com/abpframework/abp/tree/master/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/Localization/DashboardDemo/en.json * https://github.com/abpframework/abp/tree/master/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/ProductManagement/Localization/ApplicationContracts/en.json * https://github.com/abpframework/abp/tree/master/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/ProductManagement/Localization/Domain/en.json * https://github.com/abpframework/abp/tree/master/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/Localization/Resources/ProductManagement/en.json -* https://github.com/abpframework/abp/tree/master/templates/mvc-module/src/MyCompanyName.MyProjectName.Application.Contracts/Localization/MyProjectName/ApplicationContracts/en.json -* https://github.com/abpframework/abp/tree/master/templates/mvc-module/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/DomainShared/en.json -* https://github.com/abpframework/abp/tree/master/templates/mvc-module/src/MyCompanyName.MyProjectName.Web/Localization/MyProjectName/Web/en.json -* https://github.com/abpframework/abp/tree/master/templates/mvc/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en.json +* https://github.com/abpframework/abp/tree/master/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en.json diff --git a/docs/en/Modules/Docs.md b/docs/en/Modules/Docs.md index 6859caa7fa..c42a3c2bcc 100644 --- a/docs/en/Modules/Docs.md +++ b/docs/en/Modules/Docs.md @@ -16,7 +16,7 @@ Docs module is an application module and does not offer any hosting solution. Yo When you use GitHub to store your docs, Docs Module supports versioning. If you have multiple versions for your docs, there will be a combo-box on the UI to switch between versions. If you choose file system to store your docs, it does not support multiple versions. -[The documents](https://abp.io/documents/) for ABP framework is also using this module. +[The documents](docs.abp.io) for ABP framework is also using this module. > Docs module follows the [module architecture best practices](../Best-Practices/Module-Architecture.md) guide. @@ -447,7 +447,7 @@ For example, [en/docs-params.json](https://github.com/abpio/abp-commercial-docs/ Since not every single document in your projects may not have sections or may not need all of those parameters, you have to declare which of those parameters will be used for sectioning the document, as a JSON block anywhere on the document. -For example [Getting-Started.md](https://github.com/abpio/abp-commercial-docs/blob/master/en/Getting-Started.md): +For example [Getting-Started.md](https://github.com/abpio/abp-commercial-docs/blob/master/en/getting-started.md): ``` ..... @@ -466,7 +466,7 @@ For example [Getting-Started.md](https://github.com/abpio/abp-commercial-docs/bl This section will be automatically deleted during render. And f course, those key values must match with the ones in **Parameter document**. -![Interface](..\images\docs-section-ui.png) +![Interface](../images/docs-section-ui.png) Now you can use **Scriban** syntax to create sections in your document. diff --git a/docs/en/Modules/Index.md b/docs/en/Modules/Index.md index 6d920877cd..812f22e8dd 100644 --- a/docs/en/Modules/Index.md +++ b/docs/en/Modules/Index.md @@ -14,7 +14,7 @@ There are some **free and open source** application modules developed and mainta * **Account**: Provides UI for the account management and allows user to login/register to the application. * [**Audit Logging**](Audit-Logging.md): Persists audit logs to a database. * **Background Jobs**: Persist background jobs when using the default background job manager. -* **Blogging**: Used to create fancy blogs. ABP's [own blog](https://abp.io/blog/abp/) already using this module. +* **Blogging**: Used to create fancy blogs. ABP's [own blog](https://blog.abp.io/) already using this module. * [**Docs**](Docs.md): Used to create technical documentation pages. ABP's [own documentation](https://docs.abp.io) already using this module. * **Identity**: Manages roles, users and their permissions, based on the Microsoft Identity library. * **IdentityServer**: Integrates to IdentityServer4. diff --git a/docs/en/Tutorials/AspNetCore-Mvc/Part-I.md b/docs/en/Tutorials/AspNetCore-Mvc/Part-I.md index d113442af9..81dbf90219 100644 --- a/docs/en/Tutorials/AspNetCore-Mvc/Part-I.md +++ b/docs/en/Tutorials/AspNetCore-Mvc/Part-I.md @@ -422,7 +422,7 @@ Change the `Pages/Books/Index.cshtml` as following: ```` * `abp-script` [tag helper](https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/intro) is used to add external **scripts** to the page. It has many additional features compared to standard `script` tag. It handles **minification** and **versioning** for example. See the [bundling & minification document](../../AspNetCore/Bundling-Minification.md) for details. -* `abp-card` and `abp-table` are **tag helpers** for Twitter Bootstrap's [card component](http://getbootstrap.com/docs/4.1/components/card/). There are many tag helpers in ABP to easily use most of the [bootstrap](https://getbootstrap.com/) components. You can also use regular HTML tags instead of these tag helpers, but using tag helpers reduces HTML code and prevents errors by help of the intellisense and compile time type checking. See the [tag helpers document](../../AspNetCore/Tag-Helpers.md). +* `abp-card` and `abp-table` are **tag helpers** for Twitter Bootstrap's [card component](http://getbootstrap.com/docs/4.1/components/card/). There are many tag helpers in ABP to easily use most of the [bootstrap](https://getbootstrap.com/) components. You can also use regular HTML tags instead of these tag helpers, but using tag helpers reduces HTML code and prevents errors by help of the intellisense and compile time type checking. See the [tag helpers document](../../AspNetCore/Tag-Helpers/Index.md). * You can **localize** the column names in the localization file as you did for the menu items above. ##### Add a Script File From a5364a5766066393e4ce7bfa8ace39db1632de3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arma=C4=9Fan=20=C3=9Cnl=C3=BC?= <36102404+armgnunlu@users.noreply.github.com> Date: Mon, 20 Jan 2020 11:36:38 +0300 Subject: [PATCH 248/411] Resolved #1214 --- .../Pages/Documents/Shared/Styles/vs.css | 112 +++++++++--------- .../Pages/Documents/Shared/Styles/vs.min.css | 2 +- .../Pages/Documents/Shared/Styles/vs.scss | 2 + 3 files changed, 60 insertions(+), 56 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css index 6b58aea222..4be74abd72 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css @@ -193,61 +193,63 @@ margin-left: 10px; } .docs-page .docs-content .docs-text-field { padding: 2rem; } - .docs-page .docs-content article.docs-body h1 { - padding-top: 1rem; - font-size: 2.25rem; - padding-bottom: 10px; } - .docs-page .docs-content article.docs-body h2 { - padding-top: 2rem; - padding-bottom: 10px; - font-size: 2rem; } - .docs-page .docs-content article.docs-body h3, .docs-page .docs-content article.docs-body h4, .docs-page .docs-content article.docs-body h5, .docs-page .docs-content article.docs-body h6 { - padding-top: 20px; - padding-bottom: 5px; - font-size: 1.5rem; } - .docs-page .docs-content article.docs-body h1, .docs-page .docs-content article.docs-body h2, .docs-page .docs-content article.docs-body h3, .docs-page .docs-content article.docs-body h4, .docs-page .docs-content article.docs-body h5, .docs-page .docs-content article.docs-body h6 { - position: relative; } - .docs-page .docs-content article.docs-body h1 .anchor, .docs-page .docs-content article.docs-body h2 .anchor, .docs-page .docs-content article.docs-body h3 .anchor, .docs-page .docs-content article.docs-body h4 .anchor, .docs-page .docs-content article.docs-body h5 .anchor, .docs-page .docs-content article.docs-body h6 .anchor { - position: absolute; - right: -26px; - font-size: 18px; - bottom: 5px; - color: #999; - opacity: 0; - transition: .5s; } - .docs-page .docs-content article.docs-body h1:hover .anchor, .docs-page .docs-content article.docs-body h2:hover .anchor, .docs-page .docs-content article.docs-body h3:hover .anchor, .docs-page .docs-content article.docs-body h4:hover .anchor, .docs-page .docs-content article.docs-body h5:hover .anchor, .docs-page .docs-content article.docs-body h6:hover .anchor { - opacity: 1; } - .docs-page .docs-content article.docs-body .blockquote { - margin-bottom: 1rem; - margin-left: 0; - border-left: 2px solid gray; - padding: 1em; - background-color: #eee; - padding-bottom: .2em; } - .docs-page .docs-content article.docs-body img { - max-width: 100%; - border: 1px solid #f4f5f7; - margin: 15px 0 25px; - box-shadow: 0 0 45px #f8f9fa; - border-radius: 6px; } - .docs-page .docs-content article.docs-body table { - display: block; - overflow: auto; - width: 100%; } - .docs-page .docs-content article.docs-body table thead tr { - border-bottom: 2px inset; } - .docs-page .docs-content article.docs-body table th { - font-weight: 600; } - .docs-page .docs-content article.docs-body table td, .docs-page .docs-content article.docs-body table th { - border: 1px solid #dfe2e5; - padding: 6px 13px; } - .docs-page .docs-content article.docs-body table tr { - background-color: #fff; - border-top: 1px solid #c6cbd1; } - .docs-page .docs-content article.docs-body table tr:nth-child(2n) { - background-color: #f6f8fa; } - .docs-page .docs-content article.docs-body table img { - background-color: initial; } + .docs-page .docs-content article.docs-body { + word-break: break-word; } + .docs-page .docs-content article.docs-body h1 { + padding-top: 1rem; + font-size: 2.25rem; + padding-bottom: 10px; } + .docs-page .docs-content article.docs-body h2 { + padding-top: 2rem; + padding-bottom: 10px; + font-size: 2rem; } + .docs-page .docs-content article.docs-body h3, .docs-page .docs-content article.docs-body h4, .docs-page .docs-content article.docs-body h5, .docs-page .docs-content article.docs-body h6 { + padding-top: 20px; + padding-bottom: 5px; + font-size: 1.5rem; } + .docs-page .docs-content article.docs-body h1, .docs-page .docs-content article.docs-body h2, .docs-page .docs-content article.docs-body h3, .docs-page .docs-content article.docs-body h4, .docs-page .docs-content article.docs-body h5, .docs-page .docs-content article.docs-body h6 { + position: relative; } + .docs-page .docs-content article.docs-body h1 .anchor, .docs-page .docs-content article.docs-body h2 .anchor, .docs-page .docs-content article.docs-body h3 .anchor, .docs-page .docs-content article.docs-body h4 .anchor, .docs-page .docs-content article.docs-body h5 .anchor, .docs-page .docs-content article.docs-body h6 .anchor { + position: absolute; + right: -26px; + font-size: 18px; + bottom: 5px; + color: #999; + opacity: 0; + transition: .5s; } + .docs-page .docs-content article.docs-body h1:hover .anchor, .docs-page .docs-content article.docs-body h2:hover .anchor, .docs-page .docs-content article.docs-body h3:hover .anchor, .docs-page .docs-content article.docs-body h4:hover .anchor, .docs-page .docs-content article.docs-body h5:hover .anchor, .docs-page .docs-content article.docs-body h6:hover .anchor { + opacity: 1; } + .docs-page .docs-content article.docs-body .blockquote { + margin-bottom: 1rem; + margin-left: 0; + border-left: 2px solid gray; + padding: 1em; + background-color: #eee; + padding-bottom: .2em; } + .docs-page .docs-content article.docs-body img { + max-width: 100%; + border: 1px solid #f4f5f7; + margin: 15px 0 25px; + box-shadow: 0 0 45px #f8f9fa; + border-radius: 6px; } + .docs-page .docs-content article.docs-body table { + display: block; + overflow: auto; + width: 100%; } + .docs-page .docs-content article.docs-body table thead tr { + border-bottom: 2px inset; } + .docs-page .docs-content article.docs-body table th { + font-weight: 600; } + .docs-page .docs-content article.docs-body table td, .docs-page .docs-content article.docs-body table th { + border: 1px solid #dfe2e5; + padding: 6px 13px; } + .docs-page .docs-content article.docs-body table tr { + background-color: #fff; + border-top: 1px solid #c6cbd1; } + .docs-page .docs-content article.docs-body table tr:nth-child(2n) { + background-color: #f6f8fa; } + .docs-page .docs-content article.docs-body table img { + background-color: initial; } .docs-page .docs-page-index { min-height: 96vh; } .docs-page .docs-page-index #scroll-index { diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css index 4605cb9eff..b46833dd39 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css @@ -1 +1 @@ -body{position:relative;}.docs-page{background:#f5f7f9;}.docs-page .anchorjs-link{transition:all .25s linear;}.docs-page *:hover>.anchorjs-link{margin-left:-1.125em !important;transition:color .25s linear;color:#808080;}.docs-page .anchorjs-link:hover{color:#007bff;text-decoration:none;}.docs-page .docs-sidebar{background:#f5f7f9;padding-right:1rem;position:relative;top:0;left:0;position:fixed;}.docs-page .docs-sidebar .docs-sidebar-wrapper{width:270px;float:right;}.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control{background:none;background:#fff;border:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:visited{box-shadow:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version{position:relative;padding:0 1rem;margin:.25rem 0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select{border-radius:3px;border:1px solid #e9ecef;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select .input-group-text{padding:.375rem .6rem;font-size:.9rem;width:32px;height:30px;line-height:1;border-radius:0;border:1px solid #e9ecef;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{padding:0 10px;border:0;min-height:30px;height:30px;font-size:.85em;border-radius:1px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:visited,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:visited{box-shadow:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control{padding-left:6px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter{padding:0 1rem;margin:.5rem 0;font-size:.9em;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .filter-icon i.fa{color:#ddd;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list{height:100vh;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list>ul{display:block;height:calc(100vh - 220px);overflow-y:auto;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul{font-size:.935em;list-style:none;padding:0 1rem;margin:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li{margin-left:0;padding-left:24px;display:block;width:100%;position:relative;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a{color:#999;font-weight:700;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a:hover{color:#000;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a.last-link{top:11px;color:#aaa;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li span.tree-toggle{color:#999;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon{font-size:.85em;transition:.3s;width:18px;height:18px;text-align:center;padding:0;line-height:1;border-radius:50%;margin-right:4px;position:absolute;left:2px;top:11px;color:#aaa;cursor:default;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon .fa-long-arrow-right.no-link{color:#555;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon .fa-chevron-right{cursor:pointer;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul{padding:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li a{font-weight:400;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li ul{padding:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li ul li a{font-weight:300;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a{color:#000;transition:.4s;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>span .fa{transform:rotate(90deg);color:#007bff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree.last-link>span .fa{transform:rotate(0deg);}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{font-size:1.5rem;color:#000;font-weight:700;padding:20px 0 10px;line-height:1;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand strong{font-weight:300;text-transform:uppercase;font-size:.9rem;opacity:.6;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{color:#000;opacity:.15;transition:.4s;font-size:.75rem;font-weight:300;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site:hover{text-decoration:none;opacity:.5;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{font-size:.85em;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc strong{display:block;}.docs-page .docs-content{overflow-x:scroll;}.docs-page .docs-content .contributors{position:absolute;top:15px;right:5px;}.docs-page .docs-content .contributors .contributors-avatar{border-radius:21px;width:21px;height:21px;}.docs-page .docs-content .contributors a{padding:0;width:21px;height:21px;display:inline-block;margin:0 0 0 2px;}.docs-page .docs-content .contributors a:hover{text-decoration:none;}.docs-page .docs-content .docs-link-btns{border-bottom:1px solid #f4f5f7;background:#fdfdfd;padding:10px 20px;margin:0 -15px;text-align:right;font-size:.8em;min-height:40px;}.docs-page .docs-content .docs-link-btns a{color:#999;}.docs-page .docs-content .docs-link-btns a:hover{color:#444;text-decoration:none;}.docs-page .docs-content .docs-link-btns .twitter{color:#00acee;}.docs-page .docs-content .docs-link-btns .linkedin{color:#0077b5;}.docs-page .docs-content .docs-link-btns .email{color:#5a5a5a;}.docs-page .docs-content .docs-link-btns .share-button{margin-left:10px;}.docs-page .docs-content .docs-text-field{padding:2rem;}.docs-page .docs-content article.docs-body h1{padding-top:1rem;font-size:2.25rem;padding-bottom:10px;}.docs-page .docs-content article.docs-body h2{padding-top:2rem;padding-bottom:10px;font-size:2rem;}.docs-page .docs-content article.docs-body h3,.docs-page .docs-content article.docs-body h4,.docs-page .docs-content article.docs-body h5,.docs-page .docs-content article.docs-body h6{padding-top:20px;padding-bottom:5px;font-size:1.5rem;}.docs-page .docs-content article.docs-body h1,.docs-page .docs-content article.docs-body h2,.docs-page .docs-content article.docs-body h3,.docs-page .docs-content article.docs-body h4,.docs-page .docs-content article.docs-body h5,.docs-page .docs-content article.docs-body h6{position:relative;}.docs-page .docs-content article.docs-body h1 .anchor,.docs-page .docs-content article.docs-body h2 .anchor,.docs-page .docs-content article.docs-body h3 .anchor,.docs-page .docs-content article.docs-body h4 .anchor,.docs-page .docs-content article.docs-body h5 .anchor,.docs-page .docs-content article.docs-body h6 .anchor{position:absolute;right:-26px;font-size:18px;bottom:5px;color:#999;opacity:0;transition:.5s;}.docs-page .docs-content article.docs-body h1:hover .anchor,.docs-page .docs-content article.docs-body h2:hover .anchor,.docs-page .docs-content article.docs-body h3:hover .anchor,.docs-page .docs-content article.docs-body h4:hover .anchor,.docs-page .docs-content article.docs-body h5:hover .anchor,.docs-page .docs-content article.docs-body h6:hover .anchor{opacity:1;}.docs-page .docs-content article.docs-body .blockquote{margin-bottom:1rem;margin-left:0;border-left:2px solid #808080;padding:1em;background-color:#eee;padding-bottom:.2em;}.docs-page .docs-content article.docs-body img{max-width:100%;border:1px solid #f4f5f7;margin:15px 0 25px;box-shadow:0 0 45px #f8f9fa;border-radius:6px;}.docs-page .docs-content article.docs-body table{display:block;overflow:auto;width:100%;}.docs-page .docs-content article.docs-body table thead tr{border-bottom:2px inset;}.docs-page .docs-content article.docs-body table th{font-weight:600;}.docs-page .docs-content article.docs-body table td,.docs-page .docs-content article.docs-body table th{border:1px solid #dfe2e5;padding:6px 13px;}.docs-page .docs-content article.docs-body table tr{background-color:#fff;border-top:1px solid #c6cbd1;}.docs-page .docs-content article.docs-body table tr:nth-child(2n){background-color:#f6f8fa;}.docs-page .docs-content article.docs-body table img{background-color:initial;}.docs-page .docs-page-index{min-height:96vh;}.docs-page .docs-page-index #scroll-index{max-height:96vh;}.docs-page .docs-page-index .docs-inner-anchors{position:fixed;top:0;padding:10px;font-size:.9em;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills{font-size:.92em;margin-left:15px;border-left:1px solid #eee;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-link{padding:3px 14px 4px;color:#aaa;line-height:1.2;position:relative;border-left:1px solid #eee;border-radius:0;margin-left:-1px;margin-top:1px;margin-bottom:1px;transition:.2s;font-weight:normal;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-link.active{border-left:1px solid #007bff;background:none;color:#007bff;font-weight:normal;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-pills .nav-link.active{color:#007bff;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-pills .nav-pills .nav-link.active{color:#007bff;}.docs-page .docs-page-index .docs-inner-anchors .index-scroll{margin-left:-30px;}.docs-page .docs-page-index .docs-inner-anchors .docs-anchors-wrapper{max-width:300px;float:left;}.docs-page .docs-page-index .scroll-top-btn{display:none;font-size:.85em;color:#aaa;text-decoration:none;padding-left:18px;}.docs-page .docs-page-index .scroll-top-btn.showup{display:block;}@media(min-width:1100px){.container{max-width:1080px;}.docs-page .docs-sidebar.dark-sidebar{background:#191919;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-version .version-select{border:1px solid #333;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control,.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{background:#191919;border-color:#191919;color:#999;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{background:#191919;border-color:#191919;color:#999;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control::placeholder{color:#999;opacity:.5;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-version .version-select label{background:#333;border-color:#333;color:#ddd;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-filter .form-control{background:#333;color:#999;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-filter select{border:0;border-radius:6px;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-filter .filter-icon i.fa{color:#aaa;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a{color:#aaa;border-bottom:0;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a:hover{color:#fff;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon{font-size:.85em;transition:.3s;width:18px;height:18px;text-align:center;padding:0;line-height:1;border-radius:50%;margin-right:4px;position:absolute;left:2px;top:11px;color:#aaa;cursor:default;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon .fa-long-arrow-right.no-link{color:#555;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon .fa-chevron-right{cursor:pointer;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon.last-link{top:11px;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li span.tree-toggle{color:#555;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a{color:#fff;transition:.4s;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a span .fa{color:#fff;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a span:not(.last-link) .fa{transform:rotate(90deg);color:#fff;}.docs-page .docs-sidebar.dark-sidebar .docs-top .navbar-logo .navbar-brand{color:#fff;text-transform:uppercase;white-space:unset;}.docs-page .docs-sidebar.dark-sidebar .docs-top .navbar-logo .go-back-site{color:#fff;}.docs-page .docs-sidebar.dark-sidebar .docs-top .navbar-logo .navbar-logo-desc{color:#ddd;}}@media(min-width:1366px){.container{max-width:1340px;}}@media(min-width:1440px){.container{max-width:1400px;}}@media(max-width:767px){.docs-page .docs-content article.docs-body h1{padding-top:1.5rem;}.docs-page{background:#f5f7f9;}.docs-page>.container-fluid{display:block;}.docs-page>.container-fluid>.row{display:block;}.docs-page .docs-sidebar{position:fixed;max-width:100%;width:100%;display:block;padding:0 !important;top:0;left:0;z-index:100;right:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper{max-width:100%;width:100%;top:0;position:relative;margin:0 !important;height:72px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list{padding:.5rem 1.5rem 2rem 1.5rem;position:fixed;top:70px;font-size:17px;left:0;width:100%;z-index:100;background:#f5f7f9;display:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list .docs-filter{padding:0 0 1rem !important;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version label{width:36px;text-align:center;padding-left:0;padding-right:0;display:inline-block;line-height:26px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version input.form-control{padding-left:12px !important;}.docs-page .docs-sidebar .docs-top .navbar-logo{padding:0;padding-top:.3rem;display:block;text-align:center;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{font-size:1.5rem;font-weight:700;display:block;margin-right:0;padding:7px 0 10px;text-transform:uppercase;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand .docs-logo{width:110px;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{display:none;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{font-size:1em;display:none;}.docs-page .docs-sidebar .docs-top .open-dmenu{position:absolute;top:10px;left:20px;}.docs-page .docs-content{padding-top:72px;max-width:100%;display:block !important;}.docs-page .docs-content .docs-text-field{padding:1rem 1.5rem;}.docs-page .docs-page-index{display:none;}}.for-mobile{display:none;}.for-desktop{display:inline-block;}pre[class*="language-"]{padding:1.4em 2em !important;margin:15px 0 25px !important;border-radius:6px;}code{padding:.2em .4em;margin:0;font-size:82%;background-color:#f0f1f3;border-radius:3px;color:#28a745;}pre code{padding:0;}pre .token.keyword{color:#569cd6;}pre .token.atrule,pre .token.attr-value,pre .token.function,pre .token.class-name{color:#d69d85;}:not(pre)>code[class*="language-"],pre[class*="language-"]{background:#191919 !important;}div.code-toolbar>.toolbar span{cursor:default;}div.code-toolbar>.toolbar a{cursor:copy;}@media(max-width:767px){body{font-size:14px;}.for-mobile{display:inline-block;}.for-desktop{display:none;}.close-mmenu,.close-dmenu{position:absolute;top:-78px;left:25px;color:#fff;font-size:68px;background:#fff;opacity:0;}.navbar{padding:.5rem 1.75rem;}.navbar .navbar-collapse{background:#38003d;position:fixed;top:86px;left:0;width:100%;height:100vh;height:calc(100vh - 86px);z-index:100 !important;}.navbar .navbar-collapse .navbar-nav{height:100vh;padding:20px 30px;overflow:auto;}.navbar .navbar-collapse .navbar-nav .nav-link{padding:1.2rem !important;}.navbar .navbar-toggler{padding:.5rem .75rem;font-size:1.5rem;line-height:1;background-color:transparent;border:0;border-radius:.25rem;color:#fff !important;margin-left:-1rem;}.section-with-logos img{margin:15px;opacity:1;-webkit-filter:grayscale(0%);filter:grayscale(0%);}span.code-arrow{padding:0 0 0;display:block;transform:rotate(90deg);font-size:2em;}.mb-5,.my-5{margin-bottom:2rem !important;}}@media screen and (max-width:767px){.navbar-logo .navbar-brand{display:inline-block;margin:0 auto !important;max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}}.alert-criteria{padding:1.25em 1.5em;max-width:100%;}.alert-criteria p.alert-p{font-size:.96em;}.alert-criteria .input-group .input-group-text,.alert-criteria .input-group .form-control{font-size:.96em;}@media screen and (max-width:767px){.alert-criteria .input-group .input-group-text,.alert-criteria .input-group .form-control{font-size:.88em;}}.alert-criteria .input-group .input-group-text{color:#004085;background-color:#bddcfd;border:1px solid #bddcfd;}@media screen and (max-width:1366px){.alert-criteria .input-group .input-group-text{display:none;}}.alert-criteria .input-group .form-control{color:#004085;background-color:#fff;border:1px solid #bddcfd;}@media screen and (max-width:1366px){.alert-criteria .input-group .form-control{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;}}.scrolledMore{padding-top:107px;}.scrolledMore .alert-criteria{position:fixed;top:0;z-index:10;border:0;border-radius:0;margin-left:-47px;padding:.5em .75em;}@media screen and (max-width:767px){.scrolledMore .alert-criteria{top:72px;margin-left:-36px;}}.scrolledMore .alert-criteria p.alert-p{display:none;} \ No newline at end of file +body{position:relative;}.docs-page{background:#f5f7f9;}.docs-page .anchorjs-link{transition:all .25s linear;}.docs-page *:hover>.anchorjs-link{margin-left:-1.125em !important;transition:color .25s linear;color:#808080;}.docs-page .anchorjs-link:hover{color:#007bff;text-decoration:none;}.docs-page .docs-sidebar{background:#f5f7f9;padding-right:1rem;position:relative;top:0;left:0;position:fixed;}.docs-page .docs-sidebar .docs-sidebar-wrapper{width:270px;float:right;}.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control{background:none;background:#fff;border:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:visited{box-shadow:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version{position:relative;padding:0 1rem;margin:.25rem 0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select{border-radius:3px;border:1px solid #e9ecef;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select .input-group-text{padding:.375rem .6rem;font-size:.9rem;width:32px;height:30px;line-height:1;border-radius:0;border:1px solid #e9ecef;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{padding:0 10px;border:0;min-height:30px;height:30px;font-size:.85em;border-radius:1px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:visited,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:visited{box-shadow:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control{padding-left:6px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter{padding:0 1rem;margin:.5rem 0;font-size:.9em;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .filter-icon i.fa{color:#ddd;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list{height:100vh;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list>ul{display:block;height:calc(100vh - 220px);overflow-y:auto;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul{font-size:.935em;list-style:none;padding:0 1rem;margin:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li{margin-left:0;padding-left:24px;display:block;width:100%;position:relative;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a{color:#999;font-weight:700;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a:hover{color:#000;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a.last-link{top:11px;color:#aaa;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li span.tree-toggle{color:#999;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon{font-size:.85em;transition:.3s;width:18px;height:18px;text-align:center;padding:0;line-height:1;border-radius:50%;margin-right:4px;position:absolute;left:2px;top:11px;color:#aaa;cursor:default;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon .fa-long-arrow-right.no-link{color:#555;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon .fa-chevron-right{cursor:pointer;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul{padding:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li a{font-weight:400;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li ul{padding:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li ul li a{font-weight:300;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a{color:#000;transition:.4s;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>span .fa{transform:rotate(90deg);color:#007bff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree.last-link>span .fa{transform:rotate(0deg);}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{font-size:1.5rem;color:#000;font-weight:700;padding:20px 0 10px;line-height:1;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand strong{font-weight:300;text-transform:uppercase;font-size:.9rem;opacity:.6;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{color:#000;opacity:.15;transition:.4s;font-size:.75rem;font-weight:300;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site:hover{text-decoration:none;opacity:.5;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{font-size:.85em;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc strong{display:block;}.docs-page .docs-content{overflow-x:scroll;}.docs-page .docs-content .contributors{position:absolute;top:15px;right:5px;}.docs-page .docs-content .contributors .contributors-avatar{border-radius:21px;width:21px;height:21px;}.docs-page .docs-content .contributors a{padding:0;width:21px;height:21px;display:inline-block;margin:0 0 0 2px;}.docs-page .docs-content .contributors a:hover{text-decoration:none;}.docs-page .docs-content .docs-link-btns{border-bottom:1px solid #f4f5f7;background:#fdfdfd;padding:10px 20px;margin:0 -15px;text-align:right;font-size:.8em;min-height:40px;}.docs-page .docs-content .docs-link-btns a{color:#999;}.docs-page .docs-content .docs-link-btns a:hover{color:#444;text-decoration:none;}.docs-page .docs-content .docs-link-btns .twitter{color:#00acee;}.docs-page .docs-content .docs-link-btns .linkedin{color:#0077b5;}.docs-page .docs-content .docs-link-btns .email{color:#5a5a5a;}.docs-page .docs-content .docs-link-btns .share-button{margin-left:10px;}.docs-page .docs-content .docs-text-field{padding:2rem;}.docs-page .docs-content article.docs-body{word-break:break-word;}.docs-page .docs-content article.docs-body h1{padding-top:1rem;font-size:2.25rem;padding-bottom:10px;}.docs-page .docs-content article.docs-body h2{padding-top:2rem;padding-bottom:10px;font-size:2rem;}.docs-page .docs-content article.docs-body h3,.docs-page .docs-content article.docs-body h4,.docs-page .docs-content article.docs-body h5,.docs-page .docs-content article.docs-body h6{padding-top:20px;padding-bottom:5px;font-size:1.5rem;}.docs-page .docs-content article.docs-body h1,.docs-page .docs-content article.docs-body h2,.docs-page .docs-content article.docs-body h3,.docs-page .docs-content article.docs-body h4,.docs-page .docs-content article.docs-body h5,.docs-page .docs-content article.docs-body h6{position:relative;}.docs-page .docs-content article.docs-body h1 .anchor,.docs-page .docs-content article.docs-body h2 .anchor,.docs-page .docs-content article.docs-body h3 .anchor,.docs-page .docs-content article.docs-body h4 .anchor,.docs-page .docs-content article.docs-body h5 .anchor,.docs-page .docs-content article.docs-body h6 .anchor{position:absolute;right:-26px;font-size:18px;bottom:5px;color:#999;opacity:0;transition:.5s;}.docs-page .docs-content article.docs-body h1:hover .anchor,.docs-page .docs-content article.docs-body h2:hover .anchor,.docs-page .docs-content article.docs-body h3:hover .anchor,.docs-page .docs-content article.docs-body h4:hover .anchor,.docs-page .docs-content article.docs-body h5:hover .anchor,.docs-page .docs-content article.docs-body h6:hover .anchor{opacity:1;}.docs-page .docs-content article.docs-body .blockquote{margin-bottom:1rem;margin-left:0;border-left:2px solid #808080;padding:1em;background-color:#eee;padding-bottom:.2em;}.docs-page .docs-content article.docs-body img{max-width:100%;border:1px solid #f4f5f7;margin:15px 0 25px;box-shadow:0 0 45px #f8f9fa;border-radius:6px;}.docs-page .docs-content article.docs-body table{display:block;overflow:auto;width:100%;}.docs-page .docs-content article.docs-body table thead tr{border-bottom:2px inset;}.docs-page .docs-content article.docs-body table th{font-weight:600;}.docs-page .docs-content article.docs-body table td,.docs-page .docs-content article.docs-body table th{border:1px solid #dfe2e5;padding:6px 13px;}.docs-page .docs-content article.docs-body table tr{background-color:#fff;border-top:1px solid #c6cbd1;}.docs-page .docs-content article.docs-body table tr:nth-child(2n){background-color:#f6f8fa;}.docs-page .docs-content article.docs-body table img{background-color:initial;}.docs-page .docs-page-index{min-height:96vh;}.docs-page .docs-page-index #scroll-index{max-height:96vh;}.docs-page .docs-page-index .docs-inner-anchors{position:fixed;top:0;padding:10px;font-size:.9em;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills{font-size:.92em;margin-left:15px;border-left:1px solid #eee;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-link{padding:3px 14px 4px;color:#aaa;line-height:1.2;position:relative;border-left:1px solid #eee;border-radius:0;margin-left:-1px;margin-top:1px;margin-bottom:1px;transition:.2s;font-weight:normal;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-link.active{border-left:1px solid #007bff;background:none;color:#007bff;font-weight:normal;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-pills .nav-link.active{color:#007bff;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-pills .nav-pills .nav-link.active{color:#007bff;}.docs-page .docs-page-index .docs-inner-anchors .index-scroll{margin-left:-30px;}.docs-page .docs-page-index .docs-inner-anchors .docs-anchors-wrapper{max-width:300px;float:left;}.docs-page .docs-page-index .scroll-top-btn{display:none;font-size:.85em;color:#aaa;text-decoration:none;padding-left:18px;}.docs-page .docs-page-index .scroll-top-btn.showup{display:block;}@media(min-width:1100px){.container{max-width:1080px;}.docs-page .docs-sidebar.dark-sidebar{background:#191919;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-version .version-select{border:1px solid #333;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control,.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{background:#191919;border-color:#191919;color:#999;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{background:#191919;border-color:#191919;color:#999;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control::placeholder{color:#999;opacity:.5;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-version .version-select label{background:#333;border-color:#333;color:#ddd;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-filter .form-control{background:#333;color:#999;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-filter select{border:0;border-radius:6px;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-filter .filter-icon i.fa{color:#aaa;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a{color:#aaa;border-bottom:0;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a:hover{color:#fff;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon{font-size:.85em;transition:.3s;width:18px;height:18px;text-align:center;padding:0;line-height:1;border-radius:50%;margin-right:4px;position:absolute;left:2px;top:11px;color:#aaa;cursor:default;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon .fa-long-arrow-right.no-link{color:#555;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon .fa-chevron-right{cursor:pointer;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon.last-link{top:11px;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li span.tree-toggle{color:#555;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a{color:#fff;transition:.4s;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a span .fa{color:#fff;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a span:not(.last-link) .fa{transform:rotate(90deg);color:#fff;}.docs-page .docs-sidebar.dark-sidebar .docs-top .navbar-logo .navbar-brand{color:#fff;text-transform:uppercase;white-space:unset;}.docs-page .docs-sidebar.dark-sidebar .docs-top .navbar-logo .go-back-site{color:#fff;}.docs-page .docs-sidebar.dark-sidebar .docs-top .navbar-logo .navbar-logo-desc{color:#ddd;}}@media(min-width:1366px){.container{max-width:1340px;}}@media(min-width:1440px){.container{max-width:1400px;}}@media(max-width:767px){.docs-page .docs-content article.docs-body h1{padding-top:1.5rem;}.docs-page{background:#f5f7f9;}.docs-page>.container-fluid{display:block;}.docs-page>.container-fluid>.row{display:block;}.docs-page .docs-sidebar{position:fixed;max-width:100%;width:100%;display:block;padding:0 !important;top:0;left:0;z-index:100;right:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper{max-width:100%;width:100%;top:0;position:relative;margin:0 !important;height:72px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list{padding:.5rem 1.5rem 2rem 1.5rem;position:fixed;top:70px;font-size:17px;left:0;width:100%;z-index:100;background:#f5f7f9;display:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list .docs-filter{padding:0 0 1rem !important;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version label{width:36px;text-align:center;padding-left:0;padding-right:0;display:inline-block;line-height:26px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version input.form-control{padding-left:12px !important;}.docs-page .docs-sidebar .docs-top .navbar-logo{padding:0;padding-top:.3rem;display:block;text-align:center;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{font-size:1.5rem;font-weight:700;display:block;margin-right:0;padding:7px 0 10px;text-transform:uppercase;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand .docs-logo{width:110px;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{display:none;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{font-size:1em;display:none;}.docs-page .docs-sidebar .docs-top .open-dmenu{position:absolute;top:10px;left:20px;}.docs-page .docs-content{padding-top:72px;max-width:100%;display:block !important;}.docs-page .docs-content .docs-text-field{padding:1rem 1.5rem;}.docs-page .docs-page-index{display:none;}}.for-mobile{display:none;}.for-desktop{display:inline-block;}pre[class*="language-"]{padding:1.4em 2em !important;margin:15px 0 25px !important;border-radius:6px;}code{padding:.2em .4em;margin:0;font-size:82%;background-color:#f0f1f3;border-radius:3px;color:#28a745;}pre code{padding:0;}pre .token.keyword{color:#569cd6;}pre .token.atrule,pre .token.attr-value,pre .token.function,pre .token.class-name{color:#d69d85;}:not(pre)>code[class*="language-"],pre[class*="language-"]{background:#191919 !important;}div.code-toolbar>.toolbar span{cursor:default;}div.code-toolbar>.toolbar a{cursor:copy;}@media(max-width:767px){body{font-size:14px;}.for-mobile{display:inline-block;}.for-desktop{display:none;}.close-mmenu,.close-dmenu{position:absolute;top:-78px;left:25px;color:#fff;font-size:68px;background:#fff;opacity:0;}.navbar{padding:.5rem 1.75rem;}.navbar .navbar-collapse{background:#38003d;position:fixed;top:86px;left:0;width:100%;height:100vh;height:calc(100vh - 86px);z-index:100 !important;}.navbar .navbar-collapse .navbar-nav{height:100vh;padding:20px 30px;overflow:auto;}.navbar .navbar-collapse .navbar-nav .nav-link{padding:1.2rem !important;}.navbar .navbar-toggler{padding:.5rem .75rem;font-size:1.5rem;line-height:1;background-color:transparent;border:0;border-radius:.25rem;color:#fff !important;margin-left:-1rem;}.section-with-logos img{margin:15px;opacity:1;-webkit-filter:grayscale(0%);filter:grayscale(0%);}span.code-arrow{padding:0 0 0;display:block;transform:rotate(90deg);font-size:2em;}.mb-5,.my-5{margin-bottom:2rem !important;}}@media screen and (max-width:767px){.navbar-logo .navbar-brand{display:inline-block;margin:0 auto !important;max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}}.alert-criteria{padding:1.25em 1.5em;max-width:100%;}.alert-criteria p.alert-p{font-size:.96em;}.alert-criteria .input-group .input-group-text,.alert-criteria .input-group .form-control{font-size:.96em;}@media screen and (max-width:767px){.alert-criteria .input-group .input-group-text,.alert-criteria .input-group .form-control{font-size:.88em;}}.alert-criteria .input-group .input-group-text{color:#004085;background-color:#bddcfd;border:1px solid #bddcfd;}@media screen and (max-width:1366px){.alert-criteria .input-group .input-group-text{display:none;}}.alert-criteria .input-group .form-control{color:#004085;background-color:#fff;border:1px solid #bddcfd;}@media screen and (max-width:1366px){.alert-criteria .input-group .form-control{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;}}.scrolledMore{padding-top:107px;}.scrolledMore .alert-criteria{position:fixed;top:0;z-index:10;border:0;border-radius:0;margin-left:-47px;padding:.5em .75em;}@media screen and (max-width:767px){.scrolledMore .alert-criteria{top:72px;margin-left:-36px;}}.scrolledMore .alert-criteria p.alert-p{display:none;} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.scss b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.scss index cf6e577a28..1f696721d4 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.scss +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.scss @@ -329,6 +329,8 @@ body { } article.docs-body { + word-break: break-word; + h1 { padding-top: 1rem; font-size: 2.25rem; From b5cb8a5808c1cf28739644e1fe674a7e3f836dca Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Mon, 20 Jan 2020 11:58:29 +0300 Subject: [PATCH 249/411] Improved hard-coded AuthenticationType. --- .../Mvc/Authentication/ChallengeAccountController.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Authentication/ChallengeAccountController.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Authentication/ChallengeAccountController.cs index c18dcaaab5..cfd75840a7 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Authentication/ChallengeAccountController.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Authentication/ChallengeAccountController.cs @@ -8,10 +8,12 @@ namespace Volo.Abp.AspNetCore.Mvc.Authentication public abstract class ChallengeAccountController : AbpController { protected string[] ChallengeAuthenticationSchemas { get; } + protected string AuthenticationType { get; } protected ChallengeAccountController(string[] challengeAuthenticationSchemas = null) { ChallengeAuthenticationSchemas = challengeAuthenticationSchemas ?? new[] { "oidc" }; + AuthenticationType = "Identity.Application"; } [HttpGet] @@ -42,7 +44,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Authentication { await HttpContext.SignOutAsync().ConfigureAwait(false); - if (HttpContext.User.Identity.AuthenticationType == "Identity.Application") + if (HttpContext.User.Identity.AuthenticationType == AuthenticationType) { return RedirectSafely(returnUrl, returnUrlHash); } From 0139e72b02669d398f25e5b39d369aeb71d81724 Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Mon, 20 Jan 2020 13:39:55 +0300 Subject: [PATCH 250/411] Added new Logout functionality for identityserver post logout redirect event. --- .../IdentityServerSupportedLogoutModel.cs | 44 +++++++++++++++++++ .../Account/Controllers/LogoutController.cs | 1 + .../Pages/Account/Logout.cshtml | 3 ++ .../Pages/Account/Logout.cshtml.cs | 27 ++++++++++++ 4 files changed, 75 insertions(+) create mode 100644 modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLogoutModel.cs create mode 100644 modules/account/src/Volo.Abp.Account.Web/Pages/Account/Logout.cshtml create mode 100644 modules/account/src/Volo.Abp.Account.Web/Pages/Account/Logout.cshtml.cs diff --git a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLogoutModel.cs b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLogoutModel.cs new file mode 100644 index 0000000000..3190834fec --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLogoutModel.cs @@ -0,0 +1,44 @@ +using IdentityServer4.Services; +using Microsoft.AspNetCore.Mvc; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Account.Web.Pages.Account +{ + [ExposeServices(typeof(LogoutModel))] + public class IdentityServerSupportedLogoutModel : LogoutModel + { + protected IIdentityServerInteractionService Interaction { get; } + + public IdentityServerSupportedLogoutModel(IIdentityServerInteractionService interaction) + { + Interaction = interaction; + } + + public override async Task OnGetAsync() + { + await SignInManager.SignOutAsync().ConfigureAwait(false); + + var logoutId = Request.Query["logoutId"].ToString(); + + if (!string.IsNullOrEmpty(logoutId)) + { + var logoutContext = await Interaction.GetLogoutContextAsync(logoutId).ConfigureAwait(false); + + var postLogoutUri = logoutContext.PostLogoutRedirectUri; + + if (!string.IsNullOrEmpty(postLogoutUri)) + { + return Redirect(postLogoutUri); + } + } + + if (ReturnUrl != null) + { + return LocalRedirect(ReturnUrl); + } + + return RedirectToPage("/Account/Login"); + } + } +} diff --git a/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/LogoutController.cs b/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/LogoutController.cs index 878f2aa2d5..594064d28a 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/LogoutController.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/LogoutController.cs @@ -17,6 +17,7 @@ namespace Volo.Abp.Account.Web.Areas.Account.Controllers } //todo@alper: this method can be moved to AccountController like "account/logout" + //No longer needed. Already implemented Pages/Account/Logout public async Task Index(string returnUrl = null) { await _signInManager.SignOutAsync().ConfigureAwait(false); diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Logout.cshtml b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Logout.cshtml new file mode 100644 index 0000000000..f57c7258d1 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Logout.cshtml @@ -0,0 +1,3 @@ +@page "/Account/Logout" +@inherits Volo.Abp.Account.Web.Pages.Account.AccountPage +@model Volo.Abp.Account.Web.Pages.Account.LogoutModel \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Logout.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Logout.cshtml.cs new file mode 100644 index 0000000000..6825457a7e --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Logout.cshtml.cs @@ -0,0 +1,27 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; + +namespace Volo.Abp.Account.Web.Pages.Account +{ + public class LogoutModel : AccountPageModel + { + [HiddenInput] + [BindProperty(SupportsGet = true)] + public string ReturnUrl { get; set; } + + [HiddenInput] + [BindProperty(SupportsGet = true)] + public string ReturnUrlHash { get; set; } + + public virtual async Task OnGetAsync() + { + await SignInManager.SignOutAsync().ConfigureAwait(false); + if (ReturnUrl != null) + { + return RedirectSafely(ReturnUrl, ReturnUrlHash); + } + + return RedirectToPage("/Account/Login"); + } + } +} From ffb910f5597c9a63076418c8f9761711c835d36a Mon Sep 17 00:00:00 2001 From: YinChang Date: Tue, 21 Jan 2020 12:17:12 +0800 Subject: [PATCH 251/411] update Swashbuckle.AspNetCore to v5.0.0 --- .../app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj | 2 +- modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj | 2 +- .../Acme.BookStore.HttpApi.Host.csproj | 2 +- .../src/Acme.BookStore.Web/Acme.BookStore.Web.csproj | 2 +- .../Acme.BookStore.BookManagement.HttpApi.Host.csproj | 2 +- .../Acme.BookStore.BookManagement.IdentityServer.csproj | 2 +- .../Acme.BookStore.BookManagement.Web.Host.csproj | 2 +- .../Acme.BookStore.BookManagement.Web.Unified.csproj | 2 +- .../BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj | 2 +- .../src/DashboardDemo.Web/DashboardDemo.Web.csproj | 2 +- .../BackendAdminApp.Host/BackendAdminApp.Host.csproj | 2 +- .../BackendAdminAppGateway.Host.csproj | 2 +- .../gateways/InternalGateway.Host/InternalGateway.Host.csproj | 2 +- .../PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj | 2 +- .../BloggingService.Host/BloggingService.Host.csproj | 2 +- .../IdentityService.Host/IdentityService.Host.csproj | 2 +- .../ProductService.Host/ProductService.Host.csproj | 2 +- .../MyCompanyName.MyProjectName.HttpApi.Host.csproj | 2 +- .../MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj | 2 +- .../MyCompanyName.MyProjectName.Web.Host.csproj | 2 +- .../MyCompanyName.MyProjectName.Web.csproj | 2 +- .../MyCompanyName.MyProjectName.HttpApi.Host.csproj | 2 +- .../MyCompanyName.MyProjectName.IdentityServer.csproj | 2 +- .../MyCompanyName.MyProjectName.Web.Host.csproj | 2 +- .../MyCompanyName.MyProjectName.Web.Unified.csproj | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj b/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj index 1ef5fb5c4c..4bfe348d4e 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj +++ b/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj @@ -14,7 +14,7 @@ - + diff --git a/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj b/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj index c5e164247b..9cfa7656f3 100644 --- a/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj +++ b/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj @@ -16,7 +16,7 @@ - + diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/Acme.BookStore.HttpApi.Host.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/Acme.BookStore.HttpApi.Host.csproj index ad0861edc7..d781fc37f4 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/Acme.BookStore.HttpApi.Host.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/Acme.BookStore.HttpApi.Host.csproj @@ -13,7 +13,7 @@ - + diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj index 9d4115179c..481ecc24e9 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj @@ -35,7 +35,7 @@ - + diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/Acme.BookStore.BookManagement.HttpApi.Host.csproj b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/Acme.BookStore.BookManagement.HttpApi.Host.csproj index 60f118bc93..dc1e8d7318 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/Acme.BookStore.BookManagement.HttpApi.Host.csproj +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/Acme.BookStore.BookManagement.HttpApi.Host.csproj @@ -12,7 +12,7 @@ - + diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Acme.BookStore.BookManagement.IdentityServer.csproj b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Acme.BookStore.BookManagement.IdentityServer.csproj index d9b39f407e..5e9845bbf3 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Acme.BookStore.BookManagement.IdentityServer.csproj +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Acme.BookStore.BookManagement.IdentityServer.csproj @@ -10,7 +10,7 @@ - + diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/Acme.BookStore.BookManagement.Web.Host.csproj b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/Acme.BookStore.BookManagement.Web.Host.csproj index 1df46016b4..c8f5a43e01 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/Acme.BookStore.BookManagement.Web.Host.csproj +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/Acme.BookStore.BookManagement.Web.Host.csproj @@ -12,7 +12,7 @@ - + diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Acme.BookStore.BookManagement.Web.Unified.csproj b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Acme.BookStore.BookManagement.Web.Unified.csproj index 04993f9b69..3e10d5f14a 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Acme.BookStore.BookManagement.Web.Unified.csproj +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Acme.BookStore.BookManagement.Web.Unified.csproj @@ -12,7 +12,7 @@ - + diff --git a/samples/BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj b/samples/BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj index 832114ce3b..66991ebfdd 100644 --- a/samples/BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj +++ b/samples/BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj @@ -25,7 +25,7 @@ - + diff --git a/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemo.Web.csproj b/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemo.Web.csproj index f00f144407..820eca75ca 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemo.Web.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemo.Web.csproj @@ -33,7 +33,7 @@ - + diff --git a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj index a22e073228..3eb7a9f141 100644 --- a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj +++ b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj @@ -15,7 +15,7 @@ - + diff --git a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj index 554555940d..fd6795b549 100644 --- a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj @@ -15,7 +15,7 @@ - + diff --git a/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj b/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj index 73479d93ad..02d97057a6 100644 --- a/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj @@ -15,7 +15,7 @@ - + diff --git a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj index 8ece4fe5f4..10b3e41790 100644 --- a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj @@ -15,7 +15,7 @@ - + diff --git a/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj b/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj index cd5bbc8b01..de85119f3d 100644 --- a/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj @@ -15,7 +15,7 @@ - + diff --git a/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj b/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj index b9dd199a6c..39987145b1 100644 --- a/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj @@ -15,7 +15,7 @@ - + diff --git a/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj b/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj index dc4f6aface..b23ae5d565 100644 --- a/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj @@ -15,7 +15,7 @@ - + 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 d41d991542..33df7b7a00 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 @@ -13,7 +13,7 @@ - + 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 9c7f66798e..b3b3ce9e3a 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 @@ -13,7 +13,7 @@ - + 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 0bff1f34fc..d94aa3542f 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 @@ -19,7 +19,7 @@ - + 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 db3998cc62..bf2d184904 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 @@ -35,7 +35,7 @@ - + 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 f041445109..b65c7d7b4c 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 @@ -12,7 +12,7 @@ - + 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 2815d81262..01d1c6356b 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 @@ -10,7 +10,7 @@ - + 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 e3678df1ac..f7394bf1aa 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 @@ -12,7 +12,7 @@ - + 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 47f8629dde..dcb5a313d3 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 @@ -12,7 +12,7 @@ - + From 8c3ad64c4e75bcba944e844a740ef1f89ee931b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 21 Jan 2020 11:11:40 +0300 Subject: [PATCH 252/411] Remove unused namespace import --- .../Volo/Abp/Application/Services/ApplicationService.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs index 038ba0cf29..0145e2c763 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs +++ b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs @@ -9,7 +9,6 @@ using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Aspects; using Volo.Abp.Auditing; -using Volo.Abp.Authorization; using Volo.Abp.DependencyInjection; using Volo.Abp.Features; using Volo.Abp.Guids; From 670d4b4b96d52fb9aa01be9cd5670ba230998a90 Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Tue, 21 Jan 2020 11:14:10 +0300 Subject: [PATCH 253/411] Removed MVC LogoutController. Already have RazorPage --- .../Account/Controllers/LogoutController.cs | 33 ------------------- 1 file changed, 33 deletions(-) delete mode 100644 modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/LogoutController.cs diff --git a/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/LogoutController.cs b/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/LogoutController.cs deleted file mode 100644 index 594064d28a..0000000000 --- a/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/LogoutController.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Threading.Tasks; -using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Mvc; -using Volo.Abp.AspNetCore.Mvc; -using IdentityUser = Volo.Abp.Identity.IdentityUser; - -namespace Volo.Abp.Account.Web.Areas.Account.Controllers -{ - [Area("Account")] - public class LogoutController : AbpController - { - private readonly SignInManager _signInManager; - - public LogoutController(SignInManager signInManager) - { - _signInManager = signInManager; - } - - //todo@alper: this method can be moved to AccountController like "account/logout" - //No longer needed. Already implemented Pages/Account/Logout - public async Task Index(string returnUrl = null) - { - await _signInManager.SignOutAsync().ConfigureAwait(false); - - if (returnUrl != null) - { - return LocalRedirect(returnUrl); - } - - return RedirectToPage("/Account/Login"); - } - } -} From 589dea1186f2cde239371e10a75782d46c8c4271 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Tue, 21 Jan 2020 14:12:08 +0300 Subject: [PATCH 254/411] fix(theme-shared): add media query to solve mobile responsiveness issues --- .../lib/components/confirmation/confirmation.component.scss | 3 +++ 1 file changed, 3 insertions(+) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss index a28dd3a7c3..5fa1152f3c 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss @@ -24,6 +24,9 @@ width: 450px; min-height: 300px; z-index: 1062 !important; + @media screen and (max-width: 768px) { + width: 90vw; + } .icon-container { display: flex; align-items: center; From 9cb044cd68a11ac73d87c779366d4b4bc4330e71 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Tue, 21 Jan 2020 14:18:31 +0300 Subject: [PATCH 255/411] refactor(theme-shared): change media query width --- .../src/lib/components/confirmation/confirmation.component.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss index 5fa1152f3c..a6d25a4946 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss @@ -24,7 +24,7 @@ width: 450px; min-height: 300px; z-index: 1062 !important; - @media screen and (max-width: 768px) { + @media screen and (max-width: 500px) { width: 90vw; } .icon-container { From a62ad1d14e3291b4aea3dd0816c6eacb585879da Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 21 Jan 2020 15:36:24 +0300 Subject: [PATCH 256/411] added scrollX to datatables --- .../blogging/src/Volo.Blogging.Web/Pages/Admin/Blogs/index.js | 1 + .../src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js | 1 + .../src/Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js | 1 + .../src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js | 1 + .../Pages/TenantManagement/Tenants/Index.js | 1 + 5 files changed, 5 insertions(+) diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Admin/Blogs/index.js b/modules/blogging/src/Volo.Blogging.Web/Pages/Admin/Blogs/index.js index 0d8e8b3641..c2a18e083d 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Admin/Blogs/index.js +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Admin/Blogs/index.js @@ -9,6 +9,7 @@ serverSide: true, paging: false, info: false, + scrollX: true, searching: false, autoWidth: false, scrollCollapse: true, diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js index f1ce283543..d25d04d671 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js @@ -16,6 +16,7 @@ var _dataTable = $('#ProjectsTable').DataTable(abp.libs.datatables.normalizeConfiguration({ processing: true, serverSide: true, + scrollX: true, paging: true, searching: false, autoWidth: false, diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js index eb0892338c..8332a95ac7 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js @@ -17,6 +17,7 @@ searching: false, processing: true, serverSide: true, + scrollX: true, paging: true, ajax: abp.libs.datatables.createAjax(_identityRoleAppService.getList), columnDefs: [ diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js index 4d8486d256..64505509ba 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js @@ -15,6 +15,7 @@ order: [[1, "asc"]], processing: true, serverSide: true, + scrollX: true, paging: true, ajax: abp.libs.datatables.createAjax(_identityUserAppService.getList), columnDefs: [ diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.js b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.js index 3ae75e6ad6..0dc1861790 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.js +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.js @@ -19,6 +19,7 @@ order: [[1, "asc"]], processing: true, paging: true, + scrollX: true, serverSide: true, ajax: abp.libs.datatables.createAjax(_tenantAppService.getList), columnDefs: [ From 08becb31dc892de56360d937939634717f412ddf Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 21 Jan 2020 20:56:44 +0300 Subject: [PATCH 257/411] fix: fix require non alpha numeric validation --- .../components/change-password/change-password.component.ts | 4 +++- .../account/src/lib/components/register/register.component.ts | 4 +++- .../identity/src/lib/components/users/users.component.ts | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/account/src/lib/components/change-password/change-password.component.ts b/npm/ng-packs/packages/account/src/lib/components/change-password/change-password.component.ts index e9125de3c3..87169a2c1f 100644 --- a/npm/ng-packs/packages/account/src/lib/components/change-password/change-password.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/change-password/change-password.component.ts @@ -54,7 +54,9 @@ export class ChangePasswordComponent passwordRulesArr.push('capital'); } - if (+(passwordRules['Abp.Identity.Password.RequiredUniqueChars'] || 0) > 0) { + if ( + (passwordRules['Abp.Identity.Password.RequireNonAlphanumeric'] || '').toLowerCase() === 'true' + ) { passwordRulesArr.push('special'); } diff --git a/npm/ng-packs/packages/account/src/lib/components/register/register.component.ts b/npm/ng-packs/packages/account/src/lib/components/register/register.component.ts index a76de66626..6785fc67fd 100644 --- a/npm/ng-packs/packages/account/src/lib/components/register/register.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/register/register.component.ts @@ -71,7 +71,9 @@ export class RegisterComponent implements OnInit { passwordRulesArr.push('capital'); } - if (+(passwordRules['Abp.Identity.Password.RequiredUniqueChars'] || 0) > 0) { + if ( + (passwordRules['Abp.Identity.Password.RequireNonAlphanumeric'] || '').toLowerCase() === 'true' + ) { passwordRulesArr.push('special'); } 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 127cf15735..47ef7cca23 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 @@ -102,7 +102,9 @@ export class UsersComponent implements OnInit { this.passwordRulesArr.push('capital'); } - if (+(passwordRules['Abp.Identity.Password.RequiredUniqueChars'] || 0) > 0) { + if ( + (passwordRules['Abp.Identity.Password.RequireNonAlphanumeric'] || '').toLowerCase() === 'true' + ) { this.passwordRulesArr.push('special'); } From 2a5cfa082376f9fbe6df2abc1a6e4d21b2728495 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 21 Jan 2020 20:57:23 +0300 Subject: [PATCH 258/411] refactor: make permission management modal responsive --- .../src/lib/components/permission-management.component.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 3e4a1ec3a3..5a5e70e2f5 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 }}


    From 93b9a58029a6480c3c1358f31ca83c5c2a3580f9 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 22 Jan 2020 14:17:41 +0800 Subject: [PATCH 259/411] Move generic host usage for console apps Resolve #1891 --- .../AbpConsoleDemo/AbpConsoleDemo.csproj | 1 + .../AbpConsoleDemo/AppHostedService.cs | 32 +++++++++++ .../AbpConsoleDemo/Program.cs | 29 ++++------ .../DbMigratorHostedService.cs | 34 ++++++++++++ .../src/Acme.BookStore.DbMigrator/Program.cs | 41 +++++--------- .../ConsoleTestAppHostedService.cs | 26 +++++++++ .../Program.cs | 25 ++++----- .../DbMigratorHostedService.cs | 34 ++++++++++++ .../src/Acme.BookStore.DbMigrator/Program.cs | 41 +++++--------- .../ConsoleTestAppHostedService.cs | 26 +++++++++ .../Program.cs | 25 ++++----- .../ConsoleTestAppHostedService.cs | 26 +++++++++ .../Program.cs | 25 ++++----- .../DbMigratorHostedService.cs | 34 ++++++++++++ .../src/Acme.BookStore.DbMigrator/Program.cs | 41 +++++--------- .../ConsoleTestAppHostedService.cs | 26 +++++++++ .../Program.cs | 25 ++++----- .../DbMigratorHostedService.cs | 34 ++++++++++++ .../src/DashboardDemo.DbMigrator/Program.cs | 41 +++++--------- .../ConsoleTestAppHostedService.cs | 26 +++++++++ .../Program.cs | 25 ++++----- .../ConsoleClientDemoHostedService.cs | 33 +++++++++++ .../applications/ConsoleClientDemo/Program.cs | 55 ++++++------------- .../DbMigratorHostedService.cs | 34 ++++++++++++ .../Program.cs | 41 +++++--------- .../ConsoleTestAppHostedService.cs | 26 +++++++++ .../Program.cs | 25 ++++----- .../ConsoleTestAppHostedService.cs | 26 +++++++++ .../Program.cs | 27 ++++----- 29 files changed, 588 insertions(+), 296 deletions(-) create mode 100644 samples/BasicConsoleApplication/AbpConsoleDemo/AppHostedService.cs create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/DbMigratorHostedService.cs create mode 100644 samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/DbMigratorHostedService.cs create mode 100644 samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs create mode 100644 samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs create mode 100644 samples/BookStore/src/Acme.BookStore.DbMigrator/DbMigratorHostedService.cs create mode 100644 samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs create mode 100644 samples/DashboardDemo/src/DashboardDemo.DbMigrator/DbMigratorHostedService.cs create mode 100644 samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs create mode 100644 samples/MicroserviceDemo/applications/ConsoleClientDemo/ConsoleClientDemoHostedService.cs create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/DbMigratorHostedService.cs create mode 100644 templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs create mode 100644 templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs diff --git a/samples/BasicConsoleApplication/AbpConsoleDemo/AbpConsoleDemo.csproj b/samples/BasicConsoleApplication/AbpConsoleDemo/AbpConsoleDemo.csproj index c3c4e39fd8..6bdf644289 100644 --- a/samples/BasicConsoleApplication/AbpConsoleDemo/AbpConsoleDemo.csproj +++ b/samples/BasicConsoleApplication/AbpConsoleDemo/AbpConsoleDemo.csproj @@ -7,6 +7,7 @@ + diff --git a/samples/BasicConsoleApplication/AbpConsoleDemo/AppHostedService.cs b/samples/BasicConsoleApplication/AbpConsoleDemo/AppHostedService.cs new file mode 100644 index 0000000000..578c437177 --- /dev/null +++ b/samples/BasicConsoleApplication/AbpConsoleDemo/AppHostedService.cs @@ -0,0 +1,32 @@ +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Volo.Abp; + +namespace AbpConsoleDemo +{ + public class AppHostedService : IHostedService + { + public Task StartAsync(CancellationToken cancellationToken) + { + using (var application = AbpApplicationFactory.Create(options => + { + options.UseAutofac(); //Autofac integration + })) + { + application.Initialize(); + + //Resolve a service and use it + var helloWorldService = application.ServiceProvider.GetService(); + helloWorldService.SayHello(); + + application.Shutdown(); + } + + return Task.CompletedTask; + } + + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; + } +} diff --git a/samples/BasicConsoleApplication/AbpConsoleDemo/Program.cs b/samples/BasicConsoleApplication/AbpConsoleDemo/Program.cs index 651fda3c4f..2c8791f656 100644 --- a/samples/BasicConsoleApplication/AbpConsoleDemo/Program.cs +++ b/samples/BasicConsoleApplication/AbpConsoleDemo/Program.cs @@ -1,28 +1,21 @@ -using System; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; -using Volo.Abp; +using Microsoft.Extensions.Hosting; namespace AbpConsoleDemo { class Program { - static void Main(string[] args) + static async Task Main(string[] args) { - using (var application = AbpApplicationFactory.Create(options => - { - options.UseAutofac(); //Autofac integration - })) - { - application.Initialize(); - - //Resolve a service and use it - var helloWorldService = - application.ServiceProvider.GetService(); - helloWorldService.SayHello(); - - Console.WriteLine("Press ENTER to stop application..."); - Console.ReadLine(); - } + await CreateHostBuilder(args).RunConsoleAsync(); } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureServices((hostContext, services) => + { + services.AddHostedService(); + }); } } diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/DbMigratorHostedService.cs b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/DbMigratorHostedService.cs new file mode 100644 index 0000000000..aef3d88bb5 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/DbMigratorHostedService.cs @@ -0,0 +1,34 @@ +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Acme.BookStore.Data; +using Serilog; +using Volo.Abp; + +namespace Acme.BookStore.DbMigrator +{ + public class DbMigratorHostedService : IHostedService + { + public async Task StartAsync(CancellationToken cancellationToken) + { + using (var application = AbpApplicationFactory.Create(options => + { + options.UseAutofac(); + options.Services.AddLogging(c => c.AddSerilog()); + })) + { + application.Initialize(); + + await application + .ServiceProvider + .GetRequiredService() + .MigrateAsync(); + + application.Shutdown(); + } + } + + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; + } +} diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/Program.cs b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/Program.cs index d3c4034c8a..179c18f4ca 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/Program.cs +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.DbMigrator/Program.cs @@ -1,39 +1,15 @@ -using System.IO; +using System.IO; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; -using Acme.BookStore.Data; +using Microsoft.Extensions.Hosting; using Serilog; using Serilog.Events; -using Volo.Abp; -using Volo.Abp.Threading; namespace Acme.BookStore.DbMigrator { class Program { - static void Main(string[] args) - { - ConfigureLogging(); - - using (var application = AbpApplicationFactory.Create(options => - { - options.UseAutofac(); - options.Services.AddLogging(c => c.AddSerilog()); - })) - { - application.Initialize(); - - AsyncHelper.RunSync( - () => application - .ServiceProvider - .GetRequiredService() - .MigrateAsync() - ); - - application.Shutdown(); - } - } - - private static void ConfigureLogging() + static async Task Main(string[] args) { Log.Logger = new LoggerConfiguration() .MinimumLevel.Information() @@ -48,6 +24,15 @@ namespace Acme.BookStore.DbMigrator .WriteTo.File(Path.Combine(Directory.GetCurrentDirectory(), "Logs/logs.txt")) .WriteTo.Console() .CreateLogger(); + + await CreateHostBuilder(args).RunConsoleAsync(); } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureServices((hostContext, services) => + { + services.AddHostedService(); + }); } } diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs new file mode 100644 index 0000000000..e41ee7ed31 --- /dev/null +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.Hosting; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; + +namespace Acme.BookStore.HttpApi.Client.ConsoleTestApp +{ + public class ConsoleTestAppHostedService : IHostedService + { + public async Task StartAsync(CancellationToken cancellationToken) + { + using (var application = AbpApplicationFactory.Create()) + { + application.Initialize(); + + var demo = application.ServiceProvider.GetRequiredService(); + await demo.RunAsync(); + + application.Shutdown(); + } + } + + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; + } +} diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Program.cs b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Program.cs index ecef29d963..7d8265158b 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Program.cs +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Program.cs @@ -1,24 +1,21 @@ -using System; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; -using Volo.Abp; -using Volo.Abp.Threading; +using Microsoft.Extensions.Hosting; namespace Acme.BookStore.HttpApi.Client.ConsoleTestApp { class Program { - static void Main(string[] args) + static async Task Main(string[] args) { - using (var application = AbpApplicationFactory.Create()) - { - application.Initialize(); - - var demo = application.ServiceProvider.GetRequiredService(); - AsyncHelper.RunSync(() => demo.RunAsync()); - - Console.WriteLine("Press ENTER to stop application..."); - Console.ReadLine(); - } + await CreateHostBuilder(args).RunConsoleAsync(); } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureServices((hostContext, services) => + { + services.AddHostedService(); + }); } } diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/DbMigratorHostedService.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/DbMigratorHostedService.cs new file mode 100644 index 0000000000..aef3d88bb5 --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/DbMigratorHostedService.cs @@ -0,0 +1,34 @@ +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Acme.BookStore.Data; +using Serilog; +using Volo.Abp; + +namespace Acme.BookStore.DbMigrator +{ + public class DbMigratorHostedService : IHostedService + { + public async Task StartAsync(CancellationToken cancellationToken) + { + using (var application = AbpApplicationFactory.Create(options => + { + options.UseAutofac(); + options.Services.AddLogging(c => c.AddSerilog()); + })) + { + application.Initialize(); + + await application + .ServiceProvider + .GetRequiredService() + .MigrateAsync(); + + application.Shutdown(); + } + } + + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; + } +} diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/Program.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/Program.cs index d3c4034c8a..179c18f4ca 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/Program.cs +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/Program.cs @@ -1,39 +1,15 @@ -using System.IO; +using System.IO; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; -using Acme.BookStore.Data; +using Microsoft.Extensions.Hosting; using Serilog; using Serilog.Events; -using Volo.Abp; -using Volo.Abp.Threading; namespace Acme.BookStore.DbMigrator { class Program { - static void Main(string[] args) - { - ConfigureLogging(); - - using (var application = AbpApplicationFactory.Create(options => - { - options.UseAutofac(); - options.Services.AddLogging(c => c.AddSerilog()); - })) - { - application.Initialize(); - - AsyncHelper.RunSync( - () => application - .ServiceProvider - .GetRequiredService() - .MigrateAsync() - ); - - application.Shutdown(); - } - } - - private static void ConfigureLogging() + static async Task Main(string[] args) { Log.Logger = new LoggerConfiguration() .MinimumLevel.Information() @@ -48,6 +24,15 @@ namespace Acme.BookStore.DbMigrator .WriteTo.File(Path.Combine(Directory.GetCurrentDirectory(), "Logs/logs.txt")) .WriteTo.Console() .CreateLogger(); + + await CreateHostBuilder(args).RunConsoleAsync(); } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureServices((hostContext, services) => + { + services.AddHostedService(); + }); } } diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs b/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs new file mode 100644 index 0000000000..e41ee7ed31 --- /dev/null +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.Hosting; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; + +namespace Acme.BookStore.HttpApi.Client.ConsoleTestApp +{ + public class ConsoleTestAppHostedService : IHostedService + { + public async Task StartAsync(CancellationToken cancellationToken) + { + using (var application = AbpApplicationFactory.Create()) + { + application.Initialize(); + + var demo = application.ServiceProvider.GetRequiredService(); + await demo.RunAsync(); + + application.Shutdown(); + } + } + + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; + } +} diff --git a/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Program.cs b/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Program.cs index ecef29d963..7d8265158b 100644 --- a/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Program.cs +++ b/samples/BookStore-Modular/application/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Program.cs @@ -1,24 +1,21 @@ -using System; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; -using Volo.Abp; -using Volo.Abp.Threading; +using Microsoft.Extensions.Hosting; namespace Acme.BookStore.HttpApi.Client.ConsoleTestApp { class Program { - static void Main(string[] args) + static async Task Main(string[] args) { - using (var application = AbpApplicationFactory.Create()) - { - application.Initialize(); - - var demo = application.ServiceProvider.GetRequiredService(); - AsyncHelper.RunSync(() => demo.RunAsync()); - - Console.WriteLine("Press ENTER to stop application..."); - Console.ReadLine(); - } + await CreateHostBuilder(args).RunConsoleAsync(); } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureServices((hostContext, services) => + { + services.AddHostedService(); + }); } } diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs new file mode 100644 index 0000000000..aec5d0252d --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.Hosting; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; + +namespace Acme.BookStore.BookManagement +{ + public class ConsoleTestAppHostedService : IHostedService + { + public async Task StartAsync(CancellationToken cancellationToken) + { + using (var application = AbpApplicationFactory.Create()) + { + application.Initialize(); + + var demo = application.ServiceProvider.GetRequiredService(); + await demo.RunAsync(); + + application.Shutdown(); + } + } + + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; + } +} diff --git a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/Program.cs b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/Program.cs index 9b6e256930..f69d97f590 100644 --- a/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/Program.cs +++ b/samples/BookStore-Modular/modules/book-management/test/Acme.BookStore.BookManagement.HttpApi.Client.ConsoleTestApp/Program.cs @@ -1,24 +1,21 @@ -using System; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; -using Volo.Abp; -using Volo.Abp.Threading; +using Microsoft.Extensions.Hosting; namespace Acme.BookStore.BookManagement { class Program { - static void Main(string[] args) + static async Task Main(string[] args) { - using (var application = AbpApplicationFactory.Create()) - { - application.Initialize(); - - var demo = application.ServiceProvider.GetRequiredService(); - AsyncHelper.RunSync(() => demo.RunAsync()); - - Console.WriteLine("Press ENTER to stop application..."); - Console.ReadLine(); - } + await CreateHostBuilder(args).RunConsoleAsync(); } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureServices((hostContext, services) => + { + services.AddHostedService(); + }); } } diff --git a/samples/BookStore/src/Acme.BookStore.DbMigrator/DbMigratorHostedService.cs b/samples/BookStore/src/Acme.BookStore.DbMigrator/DbMigratorHostedService.cs new file mode 100644 index 0000000000..aef3d88bb5 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.DbMigrator/DbMigratorHostedService.cs @@ -0,0 +1,34 @@ +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Acme.BookStore.Data; +using Serilog; +using Volo.Abp; + +namespace Acme.BookStore.DbMigrator +{ + public class DbMigratorHostedService : IHostedService + { + public async Task StartAsync(CancellationToken cancellationToken) + { + using (var application = AbpApplicationFactory.Create(options => + { + options.UseAutofac(); + options.Services.AddLogging(c => c.AddSerilog()); + })) + { + application.Initialize(); + + await application + .ServiceProvider + .GetRequiredService() + .MigrateAsync(); + + application.Shutdown(); + } + } + + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; + } +} diff --git a/samples/BookStore/src/Acme.BookStore.DbMigrator/Program.cs b/samples/BookStore/src/Acme.BookStore.DbMigrator/Program.cs index d3c4034c8a..179c18f4ca 100644 --- a/samples/BookStore/src/Acme.BookStore.DbMigrator/Program.cs +++ b/samples/BookStore/src/Acme.BookStore.DbMigrator/Program.cs @@ -1,39 +1,15 @@ -using System.IO; +using System.IO; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; -using Acme.BookStore.Data; +using Microsoft.Extensions.Hosting; using Serilog; using Serilog.Events; -using Volo.Abp; -using Volo.Abp.Threading; namespace Acme.BookStore.DbMigrator { class Program { - static void Main(string[] args) - { - ConfigureLogging(); - - using (var application = AbpApplicationFactory.Create(options => - { - options.UseAutofac(); - options.Services.AddLogging(c => c.AddSerilog()); - })) - { - application.Initialize(); - - AsyncHelper.RunSync( - () => application - .ServiceProvider - .GetRequiredService() - .MigrateAsync() - ); - - application.Shutdown(); - } - } - - private static void ConfigureLogging() + static async Task Main(string[] args) { Log.Logger = new LoggerConfiguration() .MinimumLevel.Information() @@ -48,6 +24,15 @@ namespace Acme.BookStore.DbMigrator .WriteTo.File(Path.Combine(Directory.GetCurrentDirectory(), "Logs/logs.txt")) .WriteTo.Console() .CreateLogger(); + + await CreateHostBuilder(args).RunConsoleAsync(); } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureServices((hostContext, services) => + { + services.AddHostedService(); + }); } } diff --git a/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs b/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs new file mode 100644 index 0000000000..e41ee7ed31 --- /dev/null +++ b/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.Hosting; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; + +namespace Acme.BookStore.HttpApi.Client.ConsoleTestApp +{ + public class ConsoleTestAppHostedService : IHostedService + { + public async Task StartAsync(CancellationToken cancellationToken) + { + using (var application = AbpApplicationFactory.Create()) + { + application.Initialize(); + + var demo = application.ServiceProvider.GetRequiredService(); + await demo.RunAsync(); + + application.Shutdown(); + } + } + + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; + } +} diff --git a/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Program.cs b/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Program.cs index ecef29d963..7d8265158b 100644 --- a/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Program.cs +++ b/samples/BookStore/test/Acme.BookStore.HttpApi.Client.ConsoleTestApp/Program.cs @@ -1,24 +1,21 @@ -using System; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; -using Volo.Abp; -using Volo.Abp.Threading; +using Microsoft.Extensions.Hosting; namespace Acme.BookStore.HttpApi.Client.ConsoleTestApp { class Program { - static void Main(string[] args) + static async Task Main(string[] args) { - using (var application = AbpApplicationFactory.Create()) - { - application.Initialize(); - - var demo = application.ServiceProvider.GetRequiredService(); - AsyncHelper.RunSync(() => demo.RunAsync()); - - Console.WriteLine("Press ENTER to stop application..."); - Console.ReadLine(); - } + await CreateHostBuilder(args).RunConsoleAsync(); } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureServices((hostContext, services) => + { + services.AddHostedService(); + }); } } diff --git a/samples/DashboardDemo/src/DashboardDemo.DbMigrator/DbMigratorHostedService.cs b/samples/DashboardDemo/src/DashboardDemo.DbMigrator/DbMigratorHostedService.cs new file mode 100644 index 0000000000..dcfd612adc --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.DbMigrator/DbMigratorHostedService.cs @@ -0,0 +1,34 @@ +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using DashboardDemo.Data; +using Serilog; +using Volo.Abp; + +namespace DashboardDemo.DbMigrator +{ + public class DbMigratorHostedService : IHostedService + { + public async Task StartAsync(CancellationToken cancellationToken) + { + using (var application = AbpApplicationFactory.Create(options => + { + options.UseAutofac(); + options.Services.AddLogging(c => c.AddSerilog()); + })) + { + application.Initialize(); + + await application + .ServiceProvider + .GetRequiredService() + .MigrateAsync(); + + application.Shutdown(); + } + } + + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; + } +} diff --git a/samples/DashboardDemo/src/DashboardDemo.DbMigrator/Program.cs b/samples/DashboardDemo/src/DashboardDemo.DbMigrator/Program.cs index 3cfe1b680a..ccfa70ea32 100644 --- a/samples/DashboardDemo/src/DashboardDemo.DbMigrator/Program.cs +++ b/samples/DashboardDemo/src/DashboardDemo.DbMigrator/Program.cs @@ -1,39 +1,15 @@ -using System.IO; +using System.IO; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; -using DashboardDemo.Data; +using Microsoft.Extensions.Hosting; using Serilog; using Serilog.Events; -using Volo.Abp; -using Volo.Abp.Threading; namespace DashboardDemo.DbMigrator { class Program { - static void Main(string[] args) - { - ConfigureLogging(); - - using (var application = AbpApplicationFactory.Create(options => - { - options.UseAutofac(); - options.Services.AddLogging(c => c.AddSerilog()); - })) - { - application.Initialize(); - - AsyncHelper.RunSync( - () => application - .ServiceProvider - .GetRequiredService() - .MigrateAsync() - ); - - application.Shutdown(); - } - } - - private static void ConfigureLogging() + static async Task Main(string[] args) { Log.Logger = new LoggerConfiguration() .MinimumLevel.Information() @@ -48,6 +24,15 @@ namespace DashboardDemo.DbMigrator .WriteTo.File(Path.Combine(Directory.GetCurrentDirectory(), "Logs/logs.txt")) .WriteTo.Console() .CreateLogger(); + + await CreateHostBuilder(args).RunConsoleAsync(); } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureServices((hostContext, services) => + { + services.AddHostedService(); + }); } } diff --git a/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs b/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs new file mode 100644 index 0000000000..b10baf1daa --- /dev/null +++ b/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.Hosting; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; + +namespace DashboardDemo.HttpApi.Client.ConsoleTestApp +{ + public class ConsoleTestAppHostedService : IHostedService + { + public async Task StartAsync(CancellationToken cancellationToken) + { + using (var application = AbpApplicationFactory.Create()) + { + application.Initialize(); + + var demo = application.ServiceProvider.GetRequiredService(); + await demo.RunAsync(); + + application.Shutdown(); + } + } + + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; + } +} diff --git a/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/Program.cs b/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/Program.cs index c48298d7d4..7ba0e8151e 100644 --- a/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/Program.cs +++ b/samples/DashboardDemo/test/DashboardDemo.HttpApi.Client.ConsoleTestApp/Program.cs @@ -1,24 +1,21 @@ -using System; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; -using Volo.Abp; -using Volo.Abp.Threading; +using Microsoft.Extensions.Hosting; namespace DashboardDemo.HttpApi.Client.ConsoleTestApp { class Program { - static void Main(string[] args) + static async Task Main(string[] args) { - using (var application = AbpApplicationFactory.Create()) - { - application.Initialize(); - - var demo = application.ServiceProvider.GetRequiredService(); - AsyncHelper.RunSync(() => demo.RunAsync()); - - Console.WriteLine("Press ENTER to stop application..."); - Console.ReadLine(); - } + await CreateHostBuilder(args).RunConsoleAsync(); } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureServices((hostContext, services) => + { + services.AddHostedService(); + }); } } diff --git a/samples/MicroserviceDemo/applications/ConsoleClientDemo/ConsoleClientDemoHostedService.cs b/samples/MicroserviceDemo/applications/ConsoleClientDemo/ConsoleClientDemoHostedService.cs new file mode 100644 index 0000000000..e07c8564eb --- /dev/null +++ b/samples/MicroserviceDemo/applications/ConsoleClientDemo/ConsoleClientDemoHostedService.cs @@ -0,0 +1,33 @@ +using Microsoft.Extensions.Hosting; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; +using Serilog; + +namespace ConsoleClientDemo +{ + public class ConsoleClientDemoHostedService : IHostedService + { + public async Task StartAsync(CancellationToken cancellationToken) + { + using (var application = AbpApplicationFactory.Create(options => + { + options.Services.AddLogging(loggingBuilder => + { + loggingBuilder.AddSerilog(dispose: true); + }); + })) + { + application.Initialize(); + + var demo = application.ServiceProvider.GetRequiredService(); + await demo.RunAsync(); + + application.Shutdown(); + } + } + + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; + } +} diff --git a/samples/MicroserviceDemo/applications/ConsoleClientDemo/Program.cs b/samples/MicroserviceDemo/applications/ConsoleClientDemo/Program.cs index 9626e874a1..40082b1d2a 100644 --- a/samples/MicroserviceDemo/applications/ConsoleClientDemo/Program.cs +++ b/samples/MicroserviceDemo/applications/ConsoleClientDemo/Program.cs @@ -1,48 +1,14 @@ -using Serilog; -using Serilog.Events; -using System; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; -using Volo.Abp; -using Volo.Abp.Threading; +using Microsoft.Extensions.Hosting; +using Serilog; +using Serilog.Events; namespace ConsoleClientDemo { internal class Program { - private static void Main(string[] args) - { - InitializeSerilog(); - - Log.Information("Starting ConsoleClientDemo..."); - - try - { - using (var application = AbpApplicationFactory.Create(options => - { - options.Services.AddLogging(loggingBuilder => - { - loggingBuilder.AddSerilog(dispose: true); - }); - })) - { - application.Initialize(); - - var demo = application.ServiceProvider.GetRequiredService(); - AsyncHelper.RunSync(() => demo.RunAsync()); - - Console.WriteLine("Press ENTER to stop application..."); - Console.ReadLine(); - } - } - catch (Exception ex) - { - Log.Error(ex.Message); - Log.Error(ex.StackTrace); - throw; - } - } - - private static void InitializeSerilog() + static async Task Main(string[] args) { Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() @@ -50,6 +16,17 @@ namespace ConsoleClientDemo .Enrich.FromLogContext() .WriteTo.File("Logs/logs.txt") .CreateLogger(); + + Log.Information("Starting ConsoleClientDemo..."); + + await CreateHostBuilder(args).RunConsoleAsync(); } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureServices((hostContext, services) => + { + services.AddHostedService(); + }); } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/DbMigratorHostedService.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/DbMigratorHostedService.cs new file mode 100644 index 0000000000..730a7f7369 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/DbMigratorHostedService.cs @@ -0,0 +1,34 @@ +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using MyCompanyName.MyProjectName.Data; +using Serilog; +using Volo.Abp; + +namespace MyCompanyName.MyProjectName.DbMigrator +{ + public class DbMigratorHostedService : IHostedService + { + public async Task StartAsync(CancellationToken cancellationToken) + { + using (var application = AbpApplicationFactory.Create(options => + { + options.UseAutofac(); + options.Services.AddLogging(c => c.AddSerilog()); + })) + { + application.Initialize(); + + await application + .ServiceProvider + .GetRequiredService() + .MigrateAsync(); + + application.Shutdown(); + } + } + + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; + } +} diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/Program.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/Program.cs index 1a9175bbee..d1556ea371 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/Program.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/Program.cs @@ -1,39 +1,15 @@ -using System.IO; +using System.IO; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; -using MyCompanyName.MyProjectName.Data; +using Microsoft.Extensions.Hosting; using Serilog; using Serilog.Events; -using Volo.Abp; -using Volo.Abp.Threading; namespace MyCompanyName.MyProjectName.DbMigrator { class Program { - static void Main(string[] args) - { - ConfigureLogging(); - - using (var application = AbpApplicationFactory.Create(options => - { - options.UseAutofac(); - options.Services.AddLogging(c => c.AddSerilog()); - })) - { - application.Initialize(); - - AsyncHelper.RunSync( - () => application - .ServiceProvider - .GetRequiredService() - .MigrateAsync() - ); - - application.Shutdown(); - } - } - - private static void ConfigureLogging() + static async Task Main(string[] args) { Log.Logger = new LoggerConfiguration() .MinimumLevel.Information() @@ -48,6 +24,15 @@ namespace MyCompanyName.MyProjectName.DbMigrator .WriteTo.File(Path.Combine(Directory.GetCurrentDirectory(), "Logs/logs.txt")) .WriteTo.Console() .CreateLogger(); + + await CreateHostBuilder(args).RunConsoleAsync(); } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureServices((hostContext, services) => + { + services.AddHostedService(); + }); } } diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs new file mode 100644 index 0000000000..ae929ced30 --- /dev/null +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.Hosting; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; + +namespace MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp +{ + public class ConsoleTestAppHostedService : IHostedService + { + public async Task StartAsync(CancellationToken cancellationToken) + { + using (var application = AbpApplicationFactory.Create()) + { + application.Initialize(); + + var demo = application.ServiceProvider.GetRequiredService(); + await demo.RunAsync(); + + application.Shutdown(); + } + } + + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; + } +} diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/Program.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/Program.cs index ada0212483..1e24d8a349 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/Program.cs +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/Program.cs @@ -1,24 +1,21 @@ -using System; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; -using Volo.Abp; -using Volo.Abp.Threading; +using Microsoft.Extensions.Hosting; namespace MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp { class Program { - static void Main(string[] args) + static async Task Main(string[] args) { - using (var application = AbpApplicationFactory.Create()) - { - application.Initialize(); - - var demo = application.ServiceProvider.GetRequiredService(); - AsyncHelper.RunSync(() => demo.RunAsync()); - - Console.WriteLine("Press ENTER to stop application..."); - Console.ReadLine(); - } + await CreateHostBuilder(args).RunConsoleAsync(); } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureServices((hostContext, services) => + { + services.AddHostedService(); + }); } } diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs new file mode 100644 index 0000000000..1ea99ce263 --- /dev/null +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.Hosting; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; + +namespace MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp +{ + public class ConsoleTestAppHostedService : IHostedService + { + public async Task StartAsync(CancellationToken cancellationToken) + { + using (var application = AbpApplicationFactory.Create()) + { + application.Initialize(); + + var demo = application.ServiceProvider.GetRequiredService(); + await demo.RunAsync(); + + application.Shutdown(); + } + } + + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; + } +} diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/Program.cs b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/Program.cs index 23192c4e92..1e24d8a349 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/Program.cs +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/Program.cs @@ -1,24 +1,21 @@ -using System; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; -using Volo.Abp; -using Volo.Abp.Threading; +using Microsoft.Extensions.Hosting; -namespace MyCompanyName.MyProjectName +namespace MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp { class Program { - static void Main(string[] args) + static async Task Main(string[] args) { - using (var application = AbpApplicationFactory.Create()) - { - application.Initialize(); - - var demo = application.ServiceProvider.GetRequiredService(); - AsyncHelper.RunSync(() => demo.RunAsync()); - - Console.WriteLine("Press ENTER to stop application..."); - Console.ReadLine(); - } + await CreateHostBuilder(args).RunConsoleAsync(); } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureServices((hostContext, services) => + { + services.AddHostedService(); + }); } } From 132653a8c97208ccb19a84aa85c05dd867a4d12d Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Wed, 22 Jan 2020 11:56:39 +0300 Subject: [PATCH 260/411] style: remove animation from navbar --- .../application-layout.component.html | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.html b/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.html index 890ed1baab..b5fef49cd0 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.html +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.html @@ -67,9 +67,7 @@ #routeContainer class="dropdown-menu border-0 shadow-sm" (click)="$event.preventDefault(); $event.stopPropagation()" - [class.abp-collapsed-height]="smallScreen" - [class.d-block]="smallScreen" - [class.abp-mh-25]="smallScreen && navbarRootDropdown.expand" + [class.d-block]="smallScreen && navbarRootDropdown.expand" > {{ 'AbpAccount::ManageYourProfile' | abpLocalization }} Date: Wed, 22 Jan 2020 11:56:50 +0300 Subject: [PATCH 261/411] style: make manage profile responsive --- .../components/manage-profile/manage-profile.component.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.html b/npm/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.html index 04dd582ac7..20ddf69a06 100644 --- a/npm/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.html +++ b/npm/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.html @@ -3,7 +3,7 @@
    -
    + -
    +

    From edb307d203aa9b076ab8283ce89801bcf77dbc8d Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Wed, 22 Jan 2020 11:58:07 +0300 Subject: [PATCH 262/411] doc(core): add function descriptions --- .../core/src/lib/services/localization.service.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/npm/ng-packs/packages/core/src/lib/services/localization.service.ts b/npm/ng-packs/packages/core/src/lib/services/localization.service.ts index d87d28a938..8d059fc33f 100644 --- a/npm/ng-packs/packages/core/src/lib/services/localization.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/localization.service.ts @@ -10,6 +10,9 @@ type ShouldReuseRoute = (future: ActivatedRouteSnapshot, curr: ActivatedRouteSna @Injectable({ providedIn: 'root' }) export class LocalizationService { + /** + * Returns currently selected language + */ get currentLang(): string { return this.store.selectSnapshot(state => state.SessionState.language); } @@ -42,6 +45,11 @@ export class LocalizationService { }); } + /** + * Returns translated text with with given the interpolation parameters in current language + * @param key Localizaton key to replace with translation + * @param interpolateParams Values to be interpolated in the translation string. + */ get( key: string | Config.LocalizationWithDefault, ...interpolateParams: string[] From 3627c3c8c0d7798aeb8e448c8ff0fae0e8d45bd7 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Wed, 22 Jan 2020 13:32:28 +0300 Subject: [PATCH 263/411] refactor(core): correct the description of functions --- .../core/src/lib/services/localization.service.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/services/localization.service.ts b/npm/ng-packs/packages/core/src/lib/services/localization.service.ts index 8d059fc33f..b12b517156 100644 --- a/npm/ng-packs/packages/core/src/lib/services/localization.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/localization.service.ts @@ -46,9 +46,9 @@ export class LocalizationService { } /** - * Returns translated text with with given the interpolation parameters in current language - * @param key Localizaton key to replace with translation - * @param interpolateParams Values to be interpolated in the translation string. + * Returns an observable localized text with the given interpolation parameters in current language. + * @param key Localizaton key to replace with localized text + * @param interpolateParams Values to interpolate */ get( key: string | Config.LocalizationWithDefault, @@ -57,6 +57,11 @@ export class LocalizationService { return this.store.select(ConfigState.getLocalization(key, ...interpolateParams)); } + /** + * Returns localized text with the given interpolation parameters in current language. + * @param key Localization key to replace with localized text + * @param interpolateParams Values to intepolate. + */ instant(key: string | Config.LocalizationWithDefault, ...interpolateParams: string[]): string { return this.store.selectSnapshot(ConfigState.getLocalization(key, ...interpolateParams)); } From 77845f683a7596e229ffc3db73899963cfef7ec5 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Wed, 22 Jan 2020 13:41:14 +0300 Subject: [PATCH 264/411] AbpTabsTagHelper col md --- .../TagHelpers/Tab/AbpTabsTagHelperService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs index 37d307ac05..d5e93df321 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs @@ -81,7 +81,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab protected virtual string PlaceInsideColunm(string contents, int columnSize) { - var surroundedContents = "
    " + Environment.NewLine + + var surroundedContents = "
    " + Environment.NewLine + contents + "
    "; From 2f829037b64889b04ff7678484eea67d14847c7a Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Wed, 22 Jan 2020 13:42:33 +0300 Subject: [PATCH 265/411] typo fix --- .../TagHelpers/Tab/AbpTabsTagHelperService.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs index d5e93df321..fbafb2b63c 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs @@ -45,8 +45,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab var headerColumnSize = GetHeaderColumnSize(); var contentColumnSize = 12 - headerColumnSize; - headers = PlaceInsideColunm(headers, headerColumnSize); - contents = PlaceInsideColunm(contents, contentColumnSize); + headers = PlaceInsideColumn(headers, headerColumnSize); + contents = PlaceInsideColumn(contents, contentColumnSize); } @@ -79,7 +79,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab return surroundedContents; } - protected virtual string PlaceInsideColunm(string contents, int columnSize) + protected virtual string PlaceInsideColumn(string contents, int columnSize) { var surroundedContents = "
    " + Environment.NewLine + contents + From 48aa6047d48ac93d8b22ed72475d150f8d4b0427 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Wed, 22 Jan 2020 13:48:42 +0300 Subject: [PATCH 266/411] AbpColumnTagHelper remove "col" when a size is given --- .../TagHelpers/Grid/AbpColumnTagHelperService.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Grid/AbpColumnTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Grid/AbpColumnTagHelperService.cs index e78d59ee82..bb8107bc52 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Grid/AbpColumnTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Grid/AbpColumnTagHelperService.cs @@ -8,6 +8,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Grid public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "div"; + output.Attributes.AddClass("col"); ProcessSizeClasses(context, output); @@ -52,6 +53,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Grid classString += "-" + size.ToString("D"); } + output.Attributes.RemoveClass("col"); output.Attributes.AddClass(classString); } From d3c6d73bc2a7946cc0b2433d6973a471322c13e6 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Wed, 22 Jan 2020 17:12:05 +0300 Subject: [PATCH 267/411] refactor(settings-management): change bootstrap class name --- .../src/lib/components/setting-management.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.html b/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.html index 8d5fd0e8d1..c54a581312 100644 --- a/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.html +++ b/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.html @@ -2,7 +2,7 @@

    {{ 'AbpSettingManagement::Settings' | abpLocalization }}

    -
    diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs index 82b58ad117..6212619971 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs @@ -49,7 +49,7 @@ namespace Volo.Docs.Pages.Documents.Project public List ProjectSelectItems { get; private set; } - public NavigationWithDetailsDto Navigation { get; private set; } + public NavigationNode Navigation { get; private set; } public VersionInfoViewModel LatestVersionInfo { get; private set; } @@ -271,7 +271,7 @@ namespace Volo.Docs.Pages.Documents.Project { try { - var document = await _documentAppService.GetNavigationAsync( + Navigation = await _documentAppService.GetNavigationAsync( new GetNavigationDocumentInput { ProjectId = Project.Id, @@ -279,15 +279,11 @@ namespace Volo.Docs.Pages.Documents.Project Version = Version } ); - - Navigation = ObjectMapper.Map(document); } catch (DocumentNotFoundException) //TODO: What if called on a remote service which may return 404 { return; } - - Navigation.ConvertItems(); } public string CreateVersionLink(VersionInfoViewModel latestVersion, string version, string documentName = null) diff --git a/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/DocumentStoreFactory_Tests.cs b/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/DocumentStoreFactory_Tests.cs index 73e07ec8e2..23d34748a6 100644 --- a/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/DocumentStoreFactory_Tests.cs +++ b/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/DocumentStoreFactory_Tests.cs @@ -8,18 +8,18 @@ namespace Volo.Docs { public class DocumentStoreFactory_Tests : DocsDomainTestBase { - private readonly IDocumentStoreFactory _documentStoreFactory; + private readonly IDocumentSourceFactory _documentStoreFactory; public DocumentStoreFactory_Tests() { - _documentStoreFactory = GetRequiredService(); + _documentStoreFactory = GetRequiredService(); } [Fact] public void Create() { - _documentStoreFactory.Create(GithubDocumentStore.Type).GetType().ShouldBe(typeof(GithubDocumentStore)); - _documentStoreFactory.Create(FileSystemDocumentStore.Type).GetType().ShouldBe(typeof(FileSystemDocumentStore)); + _documentStoreFactory.Create(GithubDocumentSource.Type).GetType().ShouldBe(typeof(GithubDocumentSource)); + _documentStoreFactory.Create(FileSystemDocumentSource.Type).GetType().ShouldBe(typeof(FileSystemDocumentSource)); } } } diff --git a/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/GithubDocumentStore_Tests.cs b/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/GithubDocumentStore_Tests.cs index 76d1f9f68f..6b6bb0565c 100644 --- a/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/GithubDocumentStore_Tests.cs +++ b/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/GithubDocumentStore_Tests.cs @@ -9,13 +9,13 @@ namespace Volo.Docs { public class GithubDocumentStore_Tests : DocsDomainTestBase { - private readonly IDocumentStoreFactory _documentStoreFactory; + private readonly IDocumentSourceFactory _documentStoreFactory; private readonly IProjectRepository _projectRepository; private readonly DocsTestData _testData; public GithubDocumentStore_Tests() { - _documentStoreFactory = GetRequiredService(); + _documentStoreFactory = GetRequiredService(); _projectRepository = GetRequiredService(); _testData = GetRequiredService(); } @@ -23,15 +23,15 @@ namespace Volo.Docs [Fact] public async Task GetDocumentAsync() { - var store = _documentStoreFactory.Create(GithubDocumentStore.Type); + var source = _documentStoreFactory.Create(GithubDocumentSource.Type); var project = await _projectRepository.FindAsync(_testData.PorjectId); project.ShouldNotBeNull(); - var document = await store.GetDocumentAsync(project, "index2", "en", "0.123.0"); + var document = await source.GetDocumentAsync(project, "index2", "en", "0.123.0"); document.ShouldNotBeNull(); - document.Title.ShouldBe("index2"); + document.Name.ShouldBe("index2"); document.FileName.ShouldBe("index2"); document.Version.ShouldBe("0.123.0"); document.Content.ShouldBe("stringContent"); @@ -40,12 +40,12 @@ namespace Volo.Docs [Fact] public async Task GetVersionsAsync() { - var store = _documentStoreFactory.Create(GithubDocumentStore.Type); + var source = _documentStoreFactory.Create(GithubDocumentSource.Type); var project = await _projectRepository.FindAsync(_testData.PorjectId); project.ShouldNotBeNull(); - var document = await store.GetVersionsAsync(project); + var document = await source.GetVersionsAsync(project); document.ShouldNotBeNull(); document.Count.ShouldBe(1); @@ -55,12 +55,12 @@ namespace Volo.Docs [Fact] public async Task GetResource() { - var store = _documentStoreFactory.Create(GithubDocumentStore.Type); + var source = _documentStoreFactory.Create(GithubDocumentSource.Type); var project = await _projectRepository.FindAsync(_testData.PorjectId); project.ShouldNotBeNull(); - var documentResource = await store.GetResource(project, "index.md", "en", "0.123.0"); + var documentResource = await source.GetResource(project, "index.md", "en", "0.123.0"); documentResource.ShouldNotBeNull(); documentResource.Content.ShouldBe(new byte[] diff --git a/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestDataBuilder.cs b/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestDataBuilder.cs index 121d18b44a..be5bab81bc 100644 --- a/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestDataBuilder.cs +++ b/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestDataBuilder.cs @@ -25,7 +25,7 @@ namespace Volo.Docs _testData.PorjectId, "ABP vNext", "ABP", - GithubDocumentStore.Type, + GithubDocumentSource.Type, "md", "index", "docs-nav.json", From bc640ebee5261c92f5c2fdda3ea3507ea3314563 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Wed, 12 Feb 2020 17:29:33 +0300 Subject: [PATCH 363/411] ci: fix commander description --- npm/ng-packs/scripts/publish.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/npm/ng-packs/scripts/publish.ts b/npm/ng-packs/scripts/publish.ts index f9357159c7..3a8197522f 100644 --- a/npm/ng-packs/scripts/publish.ts +++ b/npm/ng-packs/scripts/publish.ts @@ -4,7 +4,8 @@ import program from 'commander'; program .option( - "-v, --nextVersion ', 'next semantic version. Available versions: ['major', 'minor', 'patch', 'premajor', 'preminor', 'prepatch', 'prerelease', 'or type a custom version']", + '-v, --nextVersion ', + 'next semantic version. Available versions: ["major", "minor", "patch", "premajor", "preminor", "prepatch", "prerelease", "or type a custom version"]', ) .option('-p, --preview', 'publish with preview tag'); From e055cb8f536130a53ba498969c2713b458318aa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 12 Feb 2020 18:08:20 +0300 Subject: [PATCH 364/411] Add repositories section to the migration guide --- docs/en/AspNet-Boilerplate-Migration-Guide.md | 125 +++++++++++++++++- docs/en/Repositories.md | 1 - 2 files changed, 123 insertions(+), 3 deletions(-) diff --git a/docs/en/AspNet-Boilerplate-Migration-Guide.md b/docs/en/AspNet-Boilerplate-Migration-Guide.md index 96c7ec3ab5..7e1044ec77 100644 --- a/docs/en/AspNet-Boilerplate-Migration-Guide.md +++ b/docs/en/AspNet-Boilerplate-Migration-Guide.md @@ -73,7 +73,7 @@ Most of your domain layer code will remain same, while you need to perform some ### Aggregate Roots & Entities -ABP Framework and the ASP.NET Boilerplate both have the `IEntity` and `IEntity` interfaces and `Entity` and `Entity` base classes to define entities but they have some differences. +The ABP Framework and the ASP.NET Boilerplate both have the `IEntity` and `IEntity` interfaces and `Entity` and `Entity` base classes to define entities but they have some differences. If you have an entity in the ASP.NET Boilerplate application like that: @@ -122,10 +122,131 @@ We suggest & use the GUID as the PK type for all the ABP Framework modules. Howe The challenging part will be the primary keys of the ASP.NET Boilerplate related entities, like Users, Roles, Tenants, Settings... etc. Our suggestion is to copy data from existing database to the new database tables using a tool or in a manual way (be careful about the foreign key values). +#### Documentation + +See the documentation for details on the entities: + +* [ASP.NET Boilerplate - Entity documentation](https://aspnetboilerplate.com/Pages/Documents/Entities) +* [ABP Framework - Entity documentation](https://docs.abp.io/en/abp/latest/Entities) + ### Repositories +> ABP Framework creates default repositories (`IRepository`) **only for the aggregate roots**. It doesn't create for other types derived from the `Entity`. See the "Aggregate Root" section above for more information. + +The ABP Framework and the ASP.NET Boilerplate both have the default generic repository system, but has some differences. + +#### Injecting the Repositories + +In the ASP.NET Boilerplate, there are two default repository interfaces you can directly inject and use: + +* `IRepository` (e.g. `IRepository`) is used for entities with `int` primary key (PK) which is the default PK type. +* `IRepository` (e.g. `IRepository`) is used for entities with other types of PKs. + +ABP Framework doesn't have a default PK type, so you need to **explicitly declare the PK type** of your entity, like `IRepository` or `IRepository`. + +ABP Framework also has the `IRepository` (without PK), but it is mostly used when your entity has a composite PK (because this repository has no methods work with the `Id` property). See [the documentation](https://docs.abp.io/en/abp/latest/Entities#entities-with-composite-keys) to learn more about the **composite PKs**. + +#### Restricted Repositories + +ABP Framework additionally provides a few repository interfaces: + +* `IBasicRepository` has the same methods with the `IRepository` except it doesn't have `IQueryable` support. It can be useful if you don't want to expose complex querying code to the application layer. In this case, you typically want to create custom repositories to encapsulate the querying logic. It is also useful for database providers those don't support `IQueryable`. +* `IReadOnlyRepository` has the methods get data from the database, but doesn't contain any method change the database. +* `IReadOnlyBasicRepository` is similar to the read only repository but also doesn't support `IQueryable`. + +All the interfaces also have versions without `TKey` (like ``IReadOnlyRepository`) those can be used for composite PKs just like explained above. + +#### GetAll() vs IQueryable + +ASP.NET Boilerplate's repository has a `GetAll()` method that is used to obtain an `IQueryable` object to execute LINQ on it. An example application service calls the `GetAll()` method: + +````csharp +public class PersonAppService : ApplicationService, IPersonAppService +{ + private readonly IRepository _personRepository; + + public PersonAppService(IRepository personRepository) + { + _personRepository = personRepository; + } + + public async Task DoIt() + { + var people = await _personRepository + .GetAll() //GetAll() returns IQueryable + .Where(p => p.BirthYear > 2000) //Use LINQ extension methods + .ToListAsync(); + } +} +```` + +ABP Framework's repository doesn't have this method. Instead, it implements the `IQueryable` itself. So, you can directly use LINQ on the repository: + +````csharp +public class PersonAppService : ApplicationService, IPersonAppService +{ + private readonly IRepository _personRepository; + + public PersonAppService(IRepository personRepository) + { + _personRepository = personRepository; + } + + public async Task DoIt() + { + var people = await _personRepository + .Where(p => p.BirthYear > 2000) //Use LINQ extension methods + .ToListAsync(); + } +} +```` + +> Note that in order to use the async LINQ extension methods (like `ToListAsync` here), you may need to depend on the database provider (like EF Core) since these methods are defined in the database provider package, they are not standard LINQ methods. + +#### FirstOrDefault(predicate), Single()... Methods + +ABP Framework repository has not such methods get predicate (expression) since the repository itself is `IQueryable` and all these methods are already standard LINQ extension methods those can be directly used. + +However, it provides the following methods those can be used to query a single entity by its Id: + +* `FindAsync(id)` returns the entity or null if not found. +* `GetAsync(id)` method returns the entity or throws an `EntityNotFoundException` (which causes HTTP 404 status code) if not found. + +#### Sync vs Async + +ABP Framework repository has no sync methods (like `Insert`). All the methods are async (like `InsertAsync`). So, if your application has sync repository method usages, convert them to async versions. + +In general, ABP Framework forces you to completely use async everywhere, because mixing async & sync methods is not a recommended approach. + +#### Documentation + +See the documentation for details on the repositories: + +* [ASP.NET Boilerplate - Repository documentation](https://aspnetboilerplate.com/Pages/Documents/Repositories) +* [ABP Framework - Repository documentation](https://docs.abp.io/en/abp/latest/Repositories) + +### Domain Services + +Your domain service logic mostly remains same on the migration. ABP Framework also defines the base `DomainService` class and the `IDomainService` interface just works like the ASP.NET Boilerplate. + +## The Application Layer + +TODO + +## The Infrastructure Layer + +### IAbpSession vs ICurrentUser and ICurrentTenant + +TODO + +### Unit of Work + TODO ## Missing Features -TODO: Notification... etc. \ No newline at end of file +The following features are not present for the ABP Framework. Here, a list of major missing features (and the related issue for that feature waiting on the ABP Framework GitHub repository): + +* [Multi-Lingual Entities](https://aspnetboilerplate.com/Pages/Documents/Multi-Lingual-Entities) ([#1754](https://github.com/abpframework/abp/issues/1754)) + +Most of these features will eventually be implemented. However, you can implement them yourself if they are important for you. If you want, you can [contribute](Contribution/Index.md) to the framework by implementing these yourself. \ No newline at end of file diff --git a/docs/en/Repositories.md b/docs/en/Repositories.md index e6b55cb3de..6a60c58278 100644 --- a/docs/en/Repositories.md +++ b/docs/en/Repositories.md @@ -52,7 +52,6 @@ Generic Repositories provides some standard CRUD features out of the box: * Provides `Update` and `Delete` methods to update or delete an entity by entity object or it's id. * Provides `Delete` method to delete multiple entities by a filter. * Implements `IQueryable`, so you can use LINQ and extension methods like `FirstOrDefault`, `Where`, `OrderBy`, `ToList` and so on... -* Have **sync** and **async** versions for all methods. ### Basic Repositories From 571bed9be9647be314ecd7736f14b6c3751dc176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 12 Feb 2020 19:27:25 +0300 Subject: [PATCH 365/411] Update AspNet-Boilerplate-Migration-Guide.md --- docs/en/AspNet-Boilerplate-Migration-Guide.md | 68 ++++++++++++++++++- 1 file changed, 66 insertions(+), 2 deletions(-) diff --git a/docs/en/AspNet-Boilerplate-Migration-Guide.md b/docs/en/AspNet-Boilerplate-Migration-Guide.md index 7e1044ec77..b7453b9aff 100644 --- a/docs/en/AspNet-Boilerplate-Migration-Guide.md +++ b/docs/en/AspNet-Boilerplate-Migration-Guide.md @@ -231,18 +231,82 @@ Your domain service logic mostly remains same on the migration. ABP Framework al ## The Application Layer -TODO +Your application service logic remains similar on the migration. ABP Framework also defines the base `ApplicationService` class and the `IApplicationService` interface just works like the ASP.NET Boilerplate, but there are some differences in details. + +### Declarative Authorization + +ASP.NET Boilerplate has `AbpAuthorize` and `AbpMvcAuthorize` attributes for declarative authorization. Example usage: + +````csharp +[AbpAuthorize("MyUserDeletionPermissionName")] +public async Task DeleteUserAsync(...) +{ + ... +} +```` + +ABP Framework doesn't has such a custom attribute. It uses the standard `Authorize` attribute in all layers. + +````csharp +[Authorize("MyUserDeletionPermissionName")] +public async Task DeleteUserAsync(...) +{ + ... +} +```` + +This is possible with the better integration to the Microsoft Authorization Extensions libraries. See the Authorization section below for more information about the authorization system. + +### CrudAppService and AsyncCrudAppService Classes + +ASP.NET Boilerplate has `CrudAppService` (with sync service methods) and `AsyncCrudAppService` (with async service methods) classes. + +ABP Framework only has the `CrudAppService` which actually has only the async methods (instead of sync methods). + +ABP Framework's `CrudAppService` method signatures are slightly different than the old one. For example, old update method signature was ` Task UpdateAsync(TUpdateInput input) ` while the new one is ` Task UpdateAsync(TKey id, TUpdateInput input) `. The main difference is that it gets the Id of the updating entity as a separate parameter instead of including in the input DTO. + +### Data Transfer Objects (DTOs) + +There are similar base DTO classes (like `EntityDto`) in the ABP Framework too. So, you can find the corresponding DTO base class if you need. + +#### Validation + +You can continue to use the data annotation attributes to validate your DTOs just like in the ASP.NET Boilerplate. + +ABP Framework doesn't include the ` ICustomValidate ` that does exists in the ASP.NET Boilerplate. Instead, you should implement the standard `IValidatableObject` interface for your custom validation logic. ## The Infrastructure Layer ### IAbpSession vs ICurrentUser and ICurrentTenant -TODO +ASP.NET Boilerplate's `IAbpSession` service is used to obtain the current user and tenant information, like ` UserId ` and `TenantId`. + +ABP Framework doesn't have the same service. Instead, use `ICurrentUser` and `ICurrentTenant` services. These services are defined as base properties in some common classes (like `ApplicationService` and `AbpController`), so you generally don't need to manually inject them. They also have much properties compared to the `IAbpSession`. + +### Authorization + +ABP Framework extends the [ASP.NET Core Authorization](https://docs.microsoft.com/en-us/aspnet/core/security/authorization/introduction) by adding **permissions** as auto [policies](https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies) and allowing the authorization system to be usable in the [application services](Application-Services.md) too. + +#### AbpAutorize vs Autorize + +Use the standard `[Autorize]` and `[AllowAnonymous]` attributes instead of ASP.NET Boilerplate's custom `[AbpAutorize]` and `[AbpAllowAnonymous]` attributes. + +#### IPermissionChecker vs IAuthorizationService + +Use the standard `IAuthorizationService` to check permissions instead of the ASP.NET Boilerplate's `IPermissionChecker` service. While `IPermissionChecker` also exists in the ABP Framework, it is used to explicitly use the permissions. Using `IAuthorizationService` is the recommended way since it covers other type of policy checks too. + +#### AuthorizationProvider vs PermissionDefinitionProvider + +You inherit from the `AuthorizationProvider` in the ASP.NET Boilerplate to define your permissions. ABP Framework replaces it by the `PermissionDefinitionProvider` base class. So, define your permissions by inheriting from the `PermissionDefinitionProvider` class. ### Unit of Work TODO +### Multi-Tenancy + +TODO + ## Missing Features The following features are not present for the ABP Framework. Here, a list of major missing features (and the related issue for that feature waiting on the ABP Framework GitHub repository): From 2f65d3a3c548d46503be50aa4cff2166ff283adf Mon Sep 17 00:00:00 2001 From: liangshiw Date: Thu, 13 Feb 2020 10:33:53 +0800 Subject: [PATCH 366/411] Translate Hangfire Background Job Manager doc --- docs/zh-Hans/Background-Jobs-Hangfire.md | 44 ++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/docs/zh-Hans/Background-Jobs-Hangfire.md b/docs/zh-Hans/Background-Jobs-Hangfire.md index 5ef9aad32d..d35d8482ca 100644 --- a/docs/zh-Hans/Background-Jobs-Hangfire.md +++ b/docs/zh-Hans/Background-Jobs-Hangfire.md @@ -1,3 +1,43 @@ -# Hangfire Background Job Manager +# Hangfire后台作业管理 -待添加 \ No newline at end of file +[Hangfire](https://www.hangfire.io/)是一个高级的后台作业管理. 你可以用ABP框架集成Hangfire代替[默认后台作业管理](Background-Jobs.md). 通过这种方式你可以使用相同的后台作业API,将你的代码独立于Hangfire. 如果你喜欢也可以直接使用Hangfire的API. + +> 参阅[后台作业文档](Background-Jobs.md),学习如何使用后台作业系统. 本文只介绍了如何安装和配置Hangfire集成. + +## 安装 + +建议使用[ABP CLI](CLI.md)安装包. + +### 使用ABP CLI + +在项目的文件夹(.csproj文件)中打开命令行窗口输入以下命令: + +````bash +abp add-package Volo.Abp.BackgroundJobs.HangFire +```` + +### 手动安装 + +如果你想手动安装; + +1. 添加 [Volo.Abp.BackgroundJobs.HangFire](https://www.nuget.org/packages/Volo.Abp.BackgroundJobs.HangFire) NuGet包添加到你的项目: + + ```` + Install-Package Volo.Abp.BackgroundJobs.HangFire + ```` + +2. 添加 `AbpBackgroundJobsHangfireModule` 到你的模块的依赖列表: + +````csharp +[DependsOn( + //...other dependencies + typeof(AbpBackgroundJobsHangfireModule) //Add the new module dependency + )] +public class YourModule : AbpModule +{ +} +```` + +## 配置 + +TODO... \ No newline at end of file From 3106729f010fa6df3d513a9e73986d392a3750df Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 13 Feb 2020 10:33:18 +0300 Subject: [PATCH 367/411] ci: add npm install as first step to publish scripts --- npm/preview-publish.ps1 | 2 ++ npm/publish.ps1 | 2 ++ 2 files changed, 4 insertions(+) diff --git a/npm/preview-publish.ps1 b/npm/preview-publish.ps1 index c3a15f356b..f10173226b 100644 --- a/npm/preview-publish.ps1 +++ b/npm/preview-publish.ps1 @@ -2,6 +2,8 @@ param( [string]$Version ) +npm install + $NextVersion = $(node get-version.js) + '-preview' + (Get-Date).tostring(“yyyyMMdd”) $rootFolder = (Get-Item -Path "./" -Verbose).FullName diff --git a/npm/publish.ps1 b/npm/publish.ps1 index 3f0f03bc51..69f9ece982 100644 --- a/npm/publish.ps1 +++ b/npm/publish.ps1 @@ -2,6 +2,8 @@ param( [string]$Version ) +npm install + $NextVersion = $(node get-version.js) $rootFolder = (Get-Item -Path "./" -Verbose).FullName From ef78ff655ba986e949c4d157e452d06afc9ba6b2 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 13 Feb 2020 11:42:56 +0300 Subject: [PATCH 368/411] ci: remove unnecessary yarn command from publish.ps1 --- npm/preview-publish.ps1 | 1 - npm/publish.ps1 | 1 - 2 files changed, 2 deletions(-) diff --git a/npm/preview-publish.ps1 b/npm/preview-publish.ps1 index f10173226b..da705d07f9 100644 --- a/npm/preview-publish.ps1 +++ b/npm/preview-publish.ps1 @@ -16,7 +16,6 @@ $commands = ( "npm install", "npm run publish-packages -- --nextVersion $Version --preview", "cd ../../", - "yarn", "yarn lerna publish $Version --no-push --yes --no-git-reset --no-commit-hooks --no-git-tag-version --force-publish --dist-tag preview" ) diff --git a/npm/publish.ps1 b/npm/publish.ps1 index 69f9ece982..a510527401 100644 --- a/npm/publish.ps1 +++ b/npm/publish.ps1 @@ -16,7 +16,6 @@ $commands = ( "npm install", "npm run publish-packages -- --nextVersion $Version", "cd ../../", - "yarn", "yarn lerna publish $Version --no-push --yes --no-git-reset --no-commit-hooks --no-git-tag-version --force-publish", "yarn update:templates", "yarn gulp:app", From 67488b9ac24ca00703c70e6f8bbe8f5e4b726145 Mon Sep 17 00:00:00 2001 From: Arkat Erol Date: Thu, 13 Feb 2020 11:48:54 +0300 Subject: [PATCH 369/411] npm publish version test --- npm/preview-publish.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/preview-publish.ps1 b/npm/preview-publish.ps1 index da705d07f9..d448378750 100644 --- a/npm/preview-publish.ps1 +++ b/npm/preview-publish.ps1 @@ -4,7 +4,7 @@ param( npm install -$NextVersion = $(node get-version.js) + '-preview' + (Get-Date).tostring(“yyyyMMdd”) +$NextVersion = $(node get-version.js) + '-preview' + (Get-Date).tostring(“yyyyMMdd”) + '-1' $rootFolder = (Get-Item -Path "./" -Verbose).FullName if(-Not $Version) { From f0d9083aa655d05b72b4ca97e75c2b00f67639a2 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 13 Feb 2020 17:36:51 +0800 Subject: [PATCH 370/411] Added pull document function in UI. --- .../Docs/ApplicationContracts/en.json | 7 +- .../Docs/ApplicationContracts/tr.json | 7 +- .../Docs/ApplicationContracts/zh-Hans.json | 7 +- .../Docs/ApplicationContracts/zh-Hant.json | 7 +- .../DocsAdminWebAutoMapperProfile.cs | 4 + .../Pages/Docs/Admin/Projects/Index.cshtml | 1 + .../Pages/Docs/Admin/Projects/Pull.cshtml | 22 ++++++ .../Pages/Docs/Admin/Projects/Pull.cshtml.cs | 75 +++++++++++++++++++ .../Pages/Docs/Admin/Projects/Pull.js | 23 ++++++ .../Pages/Docs/Admin/Projects/index.js | 14 ++++ .../Volo/Docs/Documents/DocumentAppService.cs | 5 +- .../GitHub/Documents/GithubDocumentSource.cs | 55 +++++--------- 12 files changed, 184 insertions(+), 43 deletions(-) create mode 100644 modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Pull.cshtml create mode 100644 modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Pull.cshtml.cs create mode 100644 modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Pull.js diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json index 58cff5aa2e..708088b6a6 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json @@ -6,11 +6,13 @@ "Permission:Edit": "Edit", "Permission:Delete": "Delete", "Permission:Create": "Create", + "Permission:Documents": "Documents", "Menu:DocumentManagement": "Documents", "Menu:ProjectManagement": "Projects", "CreateANewProject": "Create new project", "Edit": "Edit", "Create": "Create", + "Pull": "Pull", "Projects": "Projects", "Name": "Name", "ShortName": "ShortName", @@ -27,6 +29,9 @@ "DisplayName:LatestVersionBranchName": "Latest version branch name", "DisplayName:GitHubRootUrl": "GitHub root URL", "DisplayName:GitHubAccessToken": "GitHub access token", - "DisplayName:GitHubUserAgent": "GitHub user agent" + "DisplayName:GitHubUserAgent": "GitHub user agent", + "DisplayName:All": "Pull all", + "DisplayName:LanguageCode": "Language code", + "DisplayName:Version": "Version" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/tr.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/tr.json index 8c31fb1c5a..c40893e538 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/tr.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/tr.json @@ -6,11 +6,13 @@ "Permission:Edit": "Düzenle", "Permission:Delete": "Sil", "Permission:Create": "Oluştur", + "Permission:Documents": "Döküman", "Menu:DocumentManagement": "Dökümanlar", "Menu:ProjectManagement": "Projeler", "CreateANewProject": "Yeni proje oluştur", "Edit": "Düzenle", "Create": "Yeni oluştur", + "Pull": "çekme", "Projects": "Projeler", "Name": "İsim", "ShortName": "Kısa isim", @@ -26,6 +28,9 @@ "DisplayName:MainWebsiteUrl": "Ana web site URL", "DisplayName:LatestVersionBranchName": "Son versiyon Branch adı", "DisplayName:GitHubRootUrl": "GitHub kök adresi", - "DisplayName:GitHubAccessToken": "GitHub erişim token" + "DisplayName:GitHubAccessToken": "GitHub erişim token", + "DisplayName:All": "Çekme bütün", + "DisplayName:LanguageCode": "Dil kodu", + "DisplayName:Version": "versiyon" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hans.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hans.json index 3c540e8154..039be20995 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hans.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hans.json @@ -6,11 +6,13 @@ "Permission:Edit": "编辑", "Permission:Delete": "删除", "Permission:Create": "创建", + "Permission:Documents": "文档", "Menu:DocumentManagement": "文档", "Menu:ProjectManagement": "项目", "CreateANewProject": "创建新项目", "Edit": "编辑", "Create": "创建", + "Pull": "拉取", "Projects": "项目", "Name": "名称", "ShortName": "简称", @@ -27,6 +29,9 @@ "DisplayName:LatestVersionBranchName": "最新版本的分支名称", "DisplayName:GitHubRootUrl": "GitHub根网址", "DisplayName:GitHubAccessToken": "GitHub访问令牌", - "DisplayName:GitHubUserAgent": "GitHub用户代理" + "DisplayName:GitHubUserAgent": "GitHub用户代理", + "DisplayName:All": "拉取所有", + "DisplayName:LanguageCode": "语言代码", + "DisplayName:Version": "版本" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hant.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hant.json index 0a8415ccad..910194094d 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hant.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hant.json @@ -6,11 +6,13 @@ "Permission:Edit": "編輯", "Permission:Delete": "刪除", "Permission:Create": "建立", + "Permission:Documents": "文件", "Menu:DocumentManagement": "文件管理", "Menu:ProjectManagement": "專案管理", "CreateANewProject": "建立新專案", "Edit": "編輯", "Create": "建立", + "Pull": "拉取", "Projects": "專案", "Name": "名稱", "ShortName": "簡稱", @@ -27,6 +29,9 @@ "DisplayName:LatestVersionBranchName": "最新版本的分支名稱", "DisplayName:GitHubRootUrl": "GitHub根網址", "DisplayName:GitHubAccessToken": "GitHub 存取Token ", - "DisplayName:GitHubUserAgent": "GitHub 使用者代理" + "DisplayName:GitHubUserAgent": "GitHub 使用者代理", + "DisplayName:All": "拉取所有", + "DisplayName:LanguageCode": "語言代碼", + "DisplayName:Version": "版本" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Web/DocsAdminWebAutoMapperProfile.cs b/modules/docs/src/Volo.Docs.Admin.Web/DocsAdminWebAutoMapperProfile.cs index 9bf81c2140..ca430cdaad 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/DocsAdminWebAutoMapperProfile.cs +++ b/modules/docs/src/Volo.Docs.Admin.Web/DocsAdminWebAutoMapperProfile.cs @@ -1,5 +1,6 @@ using AutoMapper; using Volo.Abp.AutoMapper; +using Volo.Docs.Admin.Documents; using Volo.Docs.Admin.Pages.Docs.Admin.Projects; using Volo.Docs.Admin.Projects; @@ -15,6 +16,9 @@ namespace Volo.Docs.Admin CreateMap () .Ignore(x => x.GitHubAccessToken).Ignore(x => x.GitHubRootUrl).Ignore(x => x.GitHubUserAgent); + + CreateMap(); + CreateMap(); } } } diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Index.cshtml b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Index.cshtml index a72506d978..e3c0416b6d 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Index.cshtml +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Index.cshtml @@ -20,6 +20,7 @@ + } diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Pull.cshtml b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Pull.cshtml new file mode 100644 index 0000000000..6257971669 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Pull.cshtml @@ -0,0 +1,22 @@ +@page +@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal +@using Volo.Docs.Admin.Pages.Docs.Admin.Projects +@inherits Volo.Docs.Admin.Pages.Docs.Admin.DocsAdminPage +@model Volo.Docs.Admin.Pages.Docs.Admin.Projects.PullModel +@{ + Layout = null; +} + +@if (Model.PullDocument != null) +{ + + + + + + + + + + +} diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Pull.cshtml.cs b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Pull.cshtml.cs new file mode 100644 index 0000000000..dd1b5c2ac9 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Pull.cshtml.cs @@ -0,0 +1,75 @@ +using System; +using System.ComponentModel.DataAnnotations; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Docs.Admin.Documents; +using Volo.Docs.Admin.Projects; +using Volo.Docs.Documents; + +namespace Volo.Docs.Admin.Pages.Docs.Admin.Projects +{ + public class PullModel : DocsAdminPageModel + { + [BindProperty] + public PullDocumentViewModel PullDocument { get; set; } + + private readonly IProjectAdminAppService _projectAppService; + private readonly IDocumentAdminAppService _documentAppService; + + public PullModel(IProjectAdminAppService projectAppService, + IDocumentAdminAppService documentAppService) + { + _projectAppService = projectAppService; + _documentAppService = documentAppService; + } + + public async Task OnGetAsync(Guid id) + { + var project = await _projectAppService.GetAsync(id); + + PullDocument = new PullDocumentViewModel() + { + ProjectId = project.Id, + All = false + }; + + return Page(); + } + + public async Task OnPostAsync() + { + if (PullDocument.All) + { + await _documentAppService.PullAllAsync( + ObjectMapper.Map(PullDocument)); + } + else + { + await _documentAppService.PullAsync( + ObjectMapper.Map(PullDocument)); + } + + return NoContent(); + } + + public class PullDocumentViewModel + { + [HiddenInput] + public Guid ProjectId { get; set; } + + public bool All { get; set; } + + [Required] + [StringLength(DocumentConsts.MaxNameLength)] + public string Name { get; set; } + + [Required] + [StringLength(DocumentConsts.MaxLanguageCodeNameLength)] + public string LanguageCode { get; set; } + + [Required] + [StringLength(DocumentConsts.MaxVersionNameLength)] + public string Version { get; set; } + } + } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Pull.js b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Pull.js new file mode 100644 index 0000000000..8c62b5de34 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Pull.js @@ -0,0 +1,23 @@ +var abp = abp || {}; + +$(function () { + abp.modals.projectPull = function () { + var initModal = function (publicApi, args) { + var $form = publicApi.getForm(); + var fg = $form.find("#PullDocument_Name").parent(); + var nameInput = fg.html(); + + $form.find("input:checkbox").change(function() { + if ($(this).prop("checked")) { + fg.html(""); + } else { + fg.html(nameInput); + } + }); + }; + + return { + initModal: initModal + }; + }; +}); \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js index d25d04d671..b843202dd9 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js @@ -12,6 +12,11 @@ modalClass: 'projectEdit' }); + var _pullModal = new abp.ModalManager({ + viewUrl: abp.appPath + 'Docs/Admin/Projects/Pull', + modalClass: 'projectPull' + }); + var _dataTable = $('#ProjectsTable').DataTable(abp.libs.datatables.normalizeConfiguration({ processing: true, @@ -48,6 +53,15 @@ _dataTable.ajax.reload(); }); } + }, + { + text: l('Pull'), + visible: abp.auth.isGranted('Docs.Admin.Documents'), + action: function (data) { + _pullModal.open({ + Id: data.record.id + }); + } } ] } diff --git a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs index 6037a6739d..1dc43a4e0b 100644 --- a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs +++ b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs @@ -172,16 +172,15 @@ namespace Volo.Docs.Documents return CreateDocumentWithDetailsDto(project, sourceDocument); } - /* if (HostEnvironment.IsDevelopment()) { return await GetDocumentAsync(); - }*/ + } var document = await _documentRepository.FindAsync(project.Id, documentName, languageCode, version); //TODO: Configurable cache time? - if (document == null || document.LastCachedTime + TimeSpan.FromHours(12) < DateTime.Now) + if (document == null || document.LastCachedTime + TimeSpan.FromDays(30) < DateTime.Now) { return await GetDocumentAsync(); } diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentSource.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentSource.cs index ffe6f042be..972d8ecfbb 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentSource.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentSource.cs @@ -34,7 +34,7 @@ namespace Volo.Docs.GitHub.Documents var userAgent = project.GetGithubUserAgentOrNull(); var rawRootUrl = CalculateRawRootUrlWithLanguageCode(rootUrl, languageCode); var rawDocumentUrl = rawRootUrl + documentName; - var commitHistoryUrl = project.GetGitHubUrlForCommitHistory() + documentName; + var commitHistoryUrl = project.GetGitHubUrlForCommitHistory() + languageCode + "/" + documentName; var isNavigationDocument = documentName == project.NavigationDocumentName; var isParameterDocument = documentName == project.ParametersDocumentName; var editLink = rootUrl.ReplaceFirst("/tree/", "/blob/") + languageCode + "/" + documentName; @@ -49,7 +49,7 @@ namespace Volo.Docs.GitHub.Documents var fileCommits = await GetFileCommitsAsync(project, version, $"docs/{languageCode}/{documentName}"); - return new Document(GuidGenerator.Create(), + var document= new Document(GuidGenerator.Create(), project.Id, documentName, version, @@ -64,6 +64,23 @@ namespace Volo.Docs.GitHub.Documents fileCommits.FirstOrDefault()?.Commit.Author.Date.DateTime ?? DateTime.MinValue, fileCommits.Count, DateTime.Now); + + var authors = fileCommits + .Where(x => x.Author != null) + .Select(x => x.Author) + .GroupBy(x => x.Id) + .OrderByDescending(x => x.Count()) + .Select(x => x.FirstOrDefault()).ToList(); + + if (!isNavigationDocument && !isParameterDocument) + { + foreach (var author in authors) + { + document.AddContributor(author.Login, author.HtmlUrl, author.AvatarUrl); + } + } + + return document; } public async Task> GetVersionsAsync(Project project) @@ -195,40 +212,6 @@ namespace Volo.Docs.GitHub.Documents } } - /* - private async Task> GetContributors(string url, string token, string userAgent) - { - var contributors = new List(); - - try - { - var commitsJsonAsString = await DownloadWebContentAsStringAsync(url, token, userAgent); - - var commits = JArray.Parse(commitsJsonAsString); - - foreach (var commit in commits) - { - var author = commit["author"]; - - contributors.Add(new DocumentContributor - { - Username = (string)author["login"], - UserProfileUrl = (string)author["html_url"], - AvatarUrl = (string)author["avatar_url"] - }); - } - - contributors = contributors.GroupBy(c => c.Username).OrderByDescending(c=>c.Count()) - .Select( c => c.FirstOrDefault()).ToList(); - } - catch (Exception ex) - { - Logger.LogWarning(ex.Message); - } - - return contributors; - } - */ private static string CalculateRawRootUrlWithLanguageCode(string rootUrl, string languageCode) { return (rootUrl From abfb823fc23be0206bd134b2d69724f3e4ee1cc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 13 Feb 2020 13:38:43 +0300 Subject: [PATCH 371/411] #2625 remove unused method. --- .../Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingManager.cs | 5 ----- .../Volo/Abp/Auditing/IAuditLogSaveHandle.cs | 1 - 2 files changed, 6 deletions(-) diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingManager.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingManager.cs index 7315c86e79..2a9dd8bf5a 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingManager.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingManager.cs @@ -154,11 +154,6 @@ namespace Volo.Abp.Auditing { await _auditingManager.SaveAsync(this); } - - public void AddException(Exception exception) - { - this.AuditLog.Exceptions.Add(exception); - } public void Dispose() { diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditLogSaveHandle.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditLogSaveHandle.cs index a549dcb755..4709b745d2 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditLogSaveHandle.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IAuditLogSaveHandle.cs @@ -6,6 +6,5 @@ namespace Volo.Abp.Auditing public interface IAuditLogSaveHandle : IDisposable { Task SaveAsync(); - void AddException(Exception exception); } } \ No newline at end of file From f47a0c1f5f8e9d224663b2d8c2f829c8b78f91b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 13 Feb 2020 14:18:41 +0300 Subject: [PATCH 372/411] Fix audit log unit tests. --- .../AspNetCore/Auditing/AbpAuditingMiddleware.cs | 5 +---- .../Mvc/Auditing/AuditTestController.cs | 1 + .../Mvc/Auditing/AuditTestController_Tests.cs | 15 +++++++++++---- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs index b634892029..be84495336 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs @@ -38,10 +38,7 @@ namespace Volo.Abp.AspNetCore.Auditing catch (Exception) { hasError = true; - if (!Options.HideErrors) - { - throw; - } + throw; } finally { diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController.cs index 967f3269d2..9b4892cea4 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController.cs @@ -5,6 +5,7 @@ using Volo.Abp.Auditing; namespace Volo.Abp.AspNetCore.Mvc.Auditing { [Route("api/audit-test")] + [Audited] public class AuditTestController : AbpController { private readonly AbpAuditingOptions _options; diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs index b411b20ee0..733fab3f49 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs @@ -1,4 +1,5 @@ -using Microsoft.Extensions.DependencyInjection; +using System; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; @@ -33,7 +34,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Auditing _options.IsEnabledForGetRequests = true; _options.AlwaysLogOnException = false; await GetResponseAsync("api/audit-test/audit-success"); - //await _auditingStore.Received().SaveAsync(Arg.Any()); //Won't work, save happens out of scope + await _auditingStore.Received().SaveAsync(Arg.Any()); //Won't work, save happens out of scope } [Fact] @@ -41,8 +42,14 @@ namespace Volo.Abp.AspNetCore.Mvc.Auditing { _options.IsEnabled = true; _options.AlwaysLogOnException = true; - await GetResponseAsync("api/audit-test/audit-fail", System.Net.HttpStatusCode.BadRequest); - //await _auditingStore.Received().SaveAsync(Arg.Any()); //Won't work, save happens out of scope + + try + { + await GetResponseAsync("api/audit-test/audit-fail", System.Net.HttpStatusCode.Forbidden); + } + catch { } + + await _auditingStore.Received().SaveAsync(Arg.Any()); //Won't work, save happens out of scope } } } From a601a10d9abadfcb7264784554184788d71f962c Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 13 Feb 2020 14:27:00 +0300 Subject: [PATCH 373/411] feat(core): add set environment action to config state --- .../core/src/lib/actions/config.actions.ts | 6 ++++++ .../packages/core/src/lib/states/config.state.ts | 14 +++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/core/src/lib/actions/config.actions.ts b/npm/ng-packs/packages/core/src/lib/actions/config.actions.ts index 56d0874ebd..8fd11bd2cb 100644 --- a/npm/ng-packs/packages/core/src/lib/actions/config.actions.ts +++ b/npm/ng-packs/packages/core/src/lib/actions/config.actions.ts @@ -1,4 +1,5 @@ import { ABP } from '../models/common'; +import { Config } from '../models/config'; export class PatchRouteByName { static readonly type = '[Config] Patch Route By Name'; @@ -16,3 +17,8 @@ export class AddRoute { static readonly type = '[Config] Add Route'; constructor(public payload: Omit) {} } + +export class SetEnvironment { + static readonly type = '[Config] Set Environment'; + constructor(public environment: Config.Environment) {} +} 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 debbc9b8a0..ff964cfe92 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 @@ -2,7 +2,12 @@ import { Action, createSelector, Selector, State, StateContext, Store } from '@n import { of } from 'rxjs'; import { switchMap, tap } from 'rxjs/operators'; import snq from 'snq'; -import { GetAppConfiguration, PatchRouteByName, AddRoute } from '../actions/config.actions'; +import { + GetAppConfiguration, + PatchRouteByName, + AddRoute, + SetEnvironment, +} from '../actions/config.actions'; import { SetLanguage } from '../actions/session.actions'; import { ABP } from '../models/common'; import { Config } from '../models/config'; @@ -291,6 +296,13 @@ export class ConfigState { flattedRoutes, }); } + + @Action(SetEnvironment) + setEnvironment({ patchState }: StateContext, environment: Config.Environment) { + return patchState({ + environment, + }); + } } function patchRouteDeep( From 586047682b7e562a7c932537d8dec74d13656112 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 13 Feb 2020 14:27:28 +0300 Subject: [PATCH 374/411] feat(core): add dispatch function for set environment action --- .../core/src/lib/services/config-state.service.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts b/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts index 506b278634..cf97e42b0f 100644 --- a/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts @@ -1,8 +1,12 @@ import { Injectable } from '@angular/core'; import { Store } from '@ngxs/store'; +import { + AddRoute, + GetAppConfiguration, + PatchRouteByName, + SetEnvironment, +} from '../actions/config.actions'; import { ConfigState } from '../states'; -import { GetAppConfiguration, PatchRouteByName, AddRoute } from '../actions/config.actions'; -import { ABP } from '../models'; @Injectable({ providedIn: 'root', @@ -61,4 +65,8 @@ export class ConfigStateService { dispatchAddRoute(...args: ConstructorParameters) { return this.store.dispatch(new AddRoute(...args)); } + + dispatchSetEnvironment(...args: ConstructorParameters) { + return this.store.dispatch(new SetEnvironment(...args)); + } } From 4eb57ba270cd9b22fce284b9f8ee0a4a360a6721 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Thu, 13 Feb 2020 14:46:16 +0300 Subject: [PATCH 375/411] test(theme-shared): correct directive test --- .../src/lib/tests/table-sort.directive.spec.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/table-sort.directive.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/table-sort.directive.spec.ts index f359518099..231f627fa1 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/table-sort.directive.spec.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/table-sort.directive.spec.ts @@ -1,16 +1,20 @@ import { SpectatorDirective, createDirectiveFactory } from '@ngneat/spectator/jest'; import { TableSortDirective } from '../directives/table-sort.directive'; +import { TableComponent } from '../components/table/table.component'; +import { DummyLocalizationPipe } from './table.component.spec'; +import { PaginationComponent } from '../components'; describe('TableSortDirective', () => { let spectator: SpectatorDirective; let directive: TableSortDirective; const createDirective = createDirectiveFactory({ directive: TableSortDirective, + declarations: [TableComponent, DummyLocalizationPipe, PaginationComponent], }); beforeEach(() => { spectator = createDirective( - ``, + ``, ); directive = spectator.directive; }); @@ -21,7 +25,7 @@ describe('TableSortDirective', () => { test('should change table value', () => { expect(directive.value).toEqual([1, 4, 2]); - const table = spectator.query(Table); + const table = spectator.query(TableComponent); expect(table.value).toEqual([1, 2, 4]); }); }); From 15fc720dd329c9a791c82d698089f3f447e64508 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 13 Feb 2020 20:42:26 +0800 Subject: [PATCH 376/411] Document contributors. --- .../Docs/Documents/IDocumentRepository.cs | 5 +++- .../Documents/EFCoreDocumentRepository.cs | 12 ++++++-- .../DocsEfCoreQueryableExtensions.cs | 14 +++++++++ .../Docs/Documents/MongoDocumentRepository.cs | 7 +++-- .../Pages/Documents/Project/Index.cshtml | 29 ++++++++++--------- 5 files changed, 47 insertions(+), 20 deletions(-) create mode 100644 modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsEfCoreQueryableExtensions.cs diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/IDocumentRepository.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/IDocumentRepository.cs index b9e0edaee5..aaabb2d8c7 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/IDocumentRepository.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/IDocumentRepository.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; @@ -8,6 +9,8 @@ namespace Volo.Docs.Documents { public interface IDocumentRepository : IBasicRepository { - Task FindAsync(Guid projectId, string name, string languageCode, string version); + Task FindAsync(Guid projectId, string name, string languageCode, string version, + bool includeDetails = true, + CancellationToken cancellationToken = default); } } diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs index e965bd11a6..d9a96e6c4f 100644 --- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs @@ -1,4 +1,5 @@ using System; +using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; @@ -14,10 +15,15 @@ namespace Volo.Docs.Documents { } - public async Task FindAsync(Guid projectId, string name, string languageCode, string version) + public async Task FindAsync(Guid projectId, string name, string languageCode, string version, + bool includeDetails = true, + CancellationToken cancellationToken = default) { - return await DbSet.FirstOrDefaultAsync(x => - x.ProjectId == projectId && x.Name == name && x.LanguageCode == languageCode && x.Version == version); + return await DbSet.IncludeDetails(includeDetails) + .FirstOrDefaultAsync(x => + x.ProjectId == projectId && x.Name == name && x.LanguageCode == languageCode && + x.Version == version, + cancellationToken); } } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsEfCoreQueryableExtensions.cs b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsEfCoreQueryableExtensions.cs new file mode 100644 index 0000000000..0bd2e4fff8 --- /dev/null +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsEfCoreQueryableExtensions.cs @@ -0,0 +1,14 @@ +using System.Linq; +using Microsoft.EntityFrameworkCore; +using Volo.Docs.Documents; + +namespace Volo.Docs.EntityFrameworkCore +{ + public static class DocsEfCoreQueryableExtensions + { + public static IQueryable IncludeDetails(this IQueryable queryable, bool include = true) + { + return !include ? queryable : queryable.Include(x => x.Contributors); + } + } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs index 5e7cc5871a..548b89e246 100644 --- a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs +++ b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs @@ -1,4 +1,5 @@ using System; +using System.Threading; using System.Threading.Tasks; using MongoDB.Driver.Linq; using Volo.Abp.Domain.Repositories.MongoDB; @@ -14,12 +15,14 @@ namespace Volo.Docs.Documents { } - public async Task FindAsync(Guid projectId, string name, string languageCode, string version) + public async Task FindAsync(Guid projectId, string name, string languageCode, string version, + bool includeDetails = true, + CancellationToken cancellationToken = default) { return await GetMongoQueryable().FirstOrDefaultAsync(x => x.ProjectId == projectId && x.Name == name && x.LanguageCode == languageCode && - x.Version == version); + x.Version == version, cancellationToken); } } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml index a8d950b1ce..3430503f7d 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml @@ -190,25 +190,26 @@ @(L["Edit"]) (@L["LastEditTime"]: @Model.Document.LastUpdatedTime.ToShortDateString()) }
    + +
    + @if (Model.Document.Contributors != null && Model.Document.Contributors.Count > 0) + { + @(L["Contributors"].Value + " :") + @foreach (var contributor in Model.Document.Contributors) + { + + + + } + } +
    +
    - @if (Model.Document.Contributors != null && Model.Document.Contributors.Count > 0) - { -
    - @(L["Contributors"].Value + " :") - @foreach (var contributor in Model.Document.Contributors) - { - - - - } -
    - } - @if (Model.DocumentPreferences != null && Model.DocumentPreferences.Parameters != null && Model.DocumentPreferences.Parameters.Any()) {
    From 1106d9021af2515493132e5ee1bc0d8ffbfe50aa Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Thu, 13 Feb 2020 16:34:06 +0300 Subject: [PATCH 377/411] closes volosoft/volo#926 --- .../Volo/Abp/Cli/Commands/SuiteCommand.cs | 20 +++++++++++++------ .../Cli/Licensing/DeveloperApiKeyResult.cs | 10 ++++++++++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs index a47a865617..a13621ea22 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs @@ -54,7 +54,7 @@ namespace Volo.Abp.Cli.Commands private async Task InstallSuiteAsync() { var nugetIndexUrl = await GetNuGetIndexUrlAsync(); - + if (nugetIndexUrl == null) { return; @@ -108,13 +108,21 @@ namespace Volo.Abp.Cli.Commands { var apiKeyResult = await _apiKeyService.GetApiKeyOrNullAsync(); - if (apiKeyResult == null || string.IsNullOrEmpty(apiKeyResult.ApiKey)) + if (apiKeyResult == null) + { + Logger.LogWarning("You are not signed in! Use the CLI command \"abp login \" to sign in, then try again."); + return null; + } + + if (!string.IsNullOrWhiteSpace(apiKeyResult.ErrorMessage)) { - Logger.LogError("Couldn't retrieve your NuGet API key!"); - Logger.LogWarning(File.Exists(CliPaths.AccessToken) - ? "Make sure you have an active session and license on commercial.abp.io. To re-sign in you can use the CLI command \"abp login \"." - : "You are not signed in to commercial.abp.io. Use the CLI command \"abp login \" to sign in."); + Logger.LogWarning(apiKeyResult.ErrorMessage); + return null; + } + if (string.IsNullOrEmpty(apiKeyResult.ApiKey)) + { + Logger.LogError("Couldn't retrieve your NuGet API key! You can re-sign in with the CLI command \"abp login \"."); return null; } 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 fb3622f6eb..eb781c27b1 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 @@ -10,5 +10,15 @@ namespace Volo.Abp.Cli.Licensing public DateTime? LicenseEndTime { get; set; } public bool CanDownloadSourceCode { get; set; } public string LicenseCode { get; set; } + public string ErrorMessage { get; set; } + public LicenseErrorType? ErrorType { get; set; } + + public enum LicenseErrorType + { + NotAuthenticated = 1, + NotMemberOfAnOrganization = 2, + NoActiveLicense = 3, + NotDeveloperOfTheOrganization = 4 + } } } \ No newline at end of file From e80cb601c1baf9ec6d32c21c9b157904ee6efd15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Thu, 13 Feb 2020 16:44:07 +0300 Subject: [PATCH 378/411] Wrong class name is fixed 'BackgroundJobOptions' is changed to 'AbpBackgroundJobOptions' --- docs/en/Background-Jobs.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Background-Jobs.md b/docs/en/Background-Jobs.md index 73815bb229..fa98542845 100644 --- a/docs/en/Background-Jobs.md +++ b/docs/en/Background-Jobs.md @@ -108,7 +108,7 @@ Enqueue method gets some optional arguments to control the background job: You may want to disable background job execution for your application. This is generally needed if you want to execute background jobs in another process and disable it for the current process. -Use `BackgroundJobOptions` to configure the job execution: +Use `AbpBackgroundJobOptions` to configure the job execution: ````csharp [DependsOn(typeof(AbpBackgroundJobsModule))] @@ -116,7 +116,7 @@ public class MyModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { - Configure(options => + Configure(options => { options.IsJobExecutionEnabled = false; //Disables job execution }); From 2147fe52368ba6dfd62f28f5b004b6573b20c6b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Thu, 13 Feb 2020 16:48:25 +0300 Subject: [PATCH 379/411] Update Background-Jobs.md --- docs/en/Background-Jobs.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Background-Jobs.md b/docs/en/Background-Jobs.md index fa98542845..70f06bbadb 100644 --- a/docs/en/Background-Jobs.md +++ b/docs/en/Background-Jobs.md @@ -140,7 +140,7 @@ ABP framework includes a simple `IBackgroundJobManager` implementation that; ### Configuration -Use `BackgroundJobWorkerOptions` in your [module class](Module-Development-Basics.md) to configure the default background job manager. The example below changes the timeout duration for background jobs: +Use `AbpBackgroundJobWorkerOptions` in your [module class](Module-Development-Basics.md) to configure the default background job manager. The example below changes the timeout duration for background jobs: ````csharp [DependsOn(typeof(AbpBackgroundJobsModule))] @@ -148,7 +148,7 @@ public class MyModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { - Configure(options => + Configure(options => { options.DefaultTimeout = 864000; //10 days (as seconds) }); From 69e6d1b752498fd6f6f6f47f9c8356bbe0ad4df8 Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Thu, 13 Feb 2020 16:52:32 +0300 Subject: [PATCH 380/411] added AlwaysLogOnException documentation --- docs/en/Audit-Logging.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/en/Audit-Logging.md b/docs/en/Audit-Logging.md index 610efc0451..ebd110a450 100644 --- a/docs/en/Audit-Logging.md +++ b/docs/en/Audit-Logging.md @@ -1,4 +1,5 @@ -# Audit Logging + +# Audit Logging [Wikipedia](https://en.wikipedia.org/wiki/Audit_trail): "*An audit trail (also called **audit log**) is a security-relevant chronological record, set of records, and/or destination and source of records that provide documentary evidence of the sequence of activities that have affected at any time a specific operation, procedure, or event*". @@ -39,6 +40,7 @@ Here, a list of the options you can configure: * `IsEnabled` (default: `true`): A root switch to enable or disable the auditing system. Other options is not used if this value is `false`. * `HideErrors` (default: `true`): Audit log system hides and write regular [logs](Logging.md) if any error occurs while saving the audit log objects. If saving the audit logs is critical for your system, set this to `false` to throw exception in case of hiding the errors. * `IsEnabledForAnonymousUsers` (default: `true`): If you want to write audit logs only for the authenticated users, set this to `false`. If you save audit logs for anonymous users, you will see `null` for `UserId` values for these users. +* `AlwaysLogOnException` (default: `true`): Audit log option to save all the exceptions occur in the application. * `IsEnabledForGetRequests` (default: `false`): HTTP GET requests should not make any change in the database normally and audit log system doesn't save audit log objects for GET request. Set this to `true` to enable it also for the GET requests. * `ApplicationName`: If multiple applications saving audit logs into a single database, set this property to your application name, so you can distinguish the logs of different applications. * `IgnoredTypes`: A list of `Type`s to be ignored for audit logging. If this is an entity type, changes for this type of entities will not be saved. This list is also used while serializing the action parameters. From 905826f825dfb8cfc1c3b42edea28c265dee721f Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Thu, 13 Feb 2020 17:07:05 +0300 Subject: [PATCH 381/411] removed empty space on top. --- docs/en/Audit-Logging.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/en/Audit-Logging.md b/docs/en/Audit-Logging.md index ebd110a450..8fdb8cff8b 100644 --- a/docs/en/Audit-Logging.md +++ b/docs/en/Audit-Logging.md @@ -1,5 +1,4 @@ - -# Audit Logging +# Audit Logging [Wikipedia](https://en.wikipedia.org/wiki/Audit_trail): "*An audit trail (also called **audit log**) is a security-relevant chronological record, set of records, and/or destination and source of records that provide documentary evidence of the sequence of activities that have affected at any time a specific operation, procedure, or event*". From e37a53d19426113128e1d7c2aeb8d144278ea533 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 13 Feb 2020 17:44:21 +0300 Subject: [PATCH 382/411] Add Data Filtering to docs-nav.json. --- docs/en/docs-nav.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 6657ac629a..edbe193c3f 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -111,6 +111,10 @@ { "text": "Settings", "path": "Settings.md" + }, + { + "text": "Data Filtering", + "path": "Data-Filtering.md" } ] }, From a52fda1133d0f401d2dc51ffa74e65a0f8518099 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 13 Feb 2020 17:44:28 +0300 Subject: [PATCH 383/411] Update AspNet-Boilerplate-Migration-Guide.md --- docs/en/AspNet-Boilerplate-Migration-Guide.md | 75 ++++++++++++++++++- 1 file changed, 73 insertions(+), 2 deletions(-) diff --git a/docs/en/AspNet-Boilerplate-Migration-Guide.md b/docs/en/AspNet-Boilerplate-Migration-Guide.md index b7453b9aff..bbd35d2409 100644 --- a/docs/en/AspNet-Boilerplate-Migration-Guide.md +++ b/docs/en/AspNet-Boilerplate-Migration-Guide.md @@ -277,6 +277,31 @@ ABP Framework doesn't include the ` ICustomValidate ` that does exists in the AS ## The Infrastructure Layer +### Configuration vs Options System + +ASP.NET Boilerplate has its own configuration system to configure the framework and the modules. For example, you could disable the audit logging in the `Initialize` method of your [module](https://aspnetboilerplate.com/Pages/Documents/Module-System): + +````csharp +public override void Initialize() +{ + Configuration.Auditing.IsEnabled = false; +} +```` + +ABP Framework uses [the options pattern](Options.md) to configure the framework and the modules. You typically configure the options in the `ConfigureServices` method of your [module](Module-Development-Basics.md): + +````csharp +public override void ConfigureServices(ServiceConfigurationContext context) +{ + Configure(options => + { + options.IsEnabled = false; + }); +} +```` + +Instead of a central configuration object, there are separated option classes for every module and feature those are defined in the related documents. + ### IAbpSession vs ICurrentUser and ICurrentTenant ASP.NET Boilerplate's `IAbpSession` service is used to obtain the current user and tenant information, like ` UserId ` and `TenantId`. @@ -301,11 +326,57 @@ You inherit from the `AuthorizationProvider` in the ASP.NET Boilerplate to defin ### Unit of Work -TODO +Unit of work system has been designed to work seamlessly. For most of the cases, you don't need to change anything. + +`UnitOfWork` attribute of the ABP Framework doesn't have the `ScopeOption` (type of `TransactionScopeOption`) property. Instead, use `IUnitOfWorkManager.Begin()` method with `requiresNew = true` to create an independent inner transaction in a transaction scope. + +#### Data Filters + +ASP.NET Boilerplate implements the data filtering system as a part of the unit of work. ABP Framework has a separate `IDataFilter` service. + +See the [data filtering document](Data-Filtering.md) to learn how to enable/disable a filter. + +See [the UOW documentation](Unit-Of-Work.md) for more about the UOW system. ### Multi-Tenancy -TODO +#### IMustHaveTenant & IMayHaveTenant vs IMultiTenant + +ASP.NET Boilerplate defines `IMustHaveTenant` and `IMayHaveTenant` interfaces to implement them for your entities. In this way, your entities are automatically filtered according to the current tenant. Because of the design, there was a problem: You had to create a "Default" tenant in the database with "1" as the Id if you want to create a non multi-tenant application (this "Default" tenant was used as the single tenant). + +ABP Framework has a single interface for multi-tenant entities: `IMultiTenant` which defines a nullable `TenantId` property of type `Guid`. If your application is not multi-tenant, then your entities will have null TenantId (instead of a default one). + +On the migration, you need to change the TenantId field type and replace these interfaces with the `IMultiTenant` + +#### Switch Between Tenants + +In some cases you might need to switch to a tenant for a code scope and work with the tenant's data in this scope. + +In ASP.NET Boilerplate, it is done using the `IUnitOfWorkManager` service: + +````csharp +public async Task> GetProducts(int tenantId) +{ + using (_unitOfWorkManager.Current.SetTenantId(tenantId)) + { + return await _productRepository.GetAllListAsync(); + } +} +```` + +In the ABP Framework it is done with the `ICurrentTenant` service: + +````csharp +public async Task> GetProducts(Guid tenantId) +{ + using (_currentTenant.Change(tenantId)) + { + return await _productRepository.GetListAsync(); + } +} +```` + +Pass `null` to the `Change` method to switch to the host side. ## Missing Features From 4f00d1cf8e130f7d23d700a1f3e354d14ac74c8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 13 Feb 2020 19:02:58 +0300 Subject: [PATCH 384/411] Update AspNet-Boilerplate-Migration-Guide.md --- docs/en/AspNet-Boilerplate-Migration-Guide.md | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/docs/en/AspNet-Boilerplate-Migration-Guide.md b/docs/en/AspNet-Boilerplate-Migration-Guide.md index bbd35d2409..cc5bf39228 100644 --- a/docs/en/AspNet-Boilerplate-Migration-Guide.md +++ b/docs/en/AspNet-Boilerplate-Migration-Guide.md @@ -277,6 +277,54 @@ ABP Framework doesn't include the ` ICustomValidate ` that does exists in the AS ## The Infrastructure Layer +### Namespaces + +ASP.NET Boilerplate uses the `Abp.*` namespaces while the ABP Framework uses the `Volo.Abp.*` namespaces for the framework and pre-built fundamental modules. + +In addition, there are also some pre-built application modules (like docs and blog modules) those are using the `Volo.*` namespaces (like `Volo.Blogging.*` and `Volo.Docs.*`). We consider these modules as standalone open source products developed by Volosoft rather than add-ons or generic modules completing the ABP Framework and used in the applications. We've developed them as a module to make them re-usable as a part of a bigger solution. + +### Module System + +Both of the ASP.NET Boilerplate and the ABP Framework have the `AbpModule` while they are a bit different. + +ASP.NET Boilerplate's `AbpModule` class has `PreInitialize`, `Initialize` and `PostInitialize` methods you can override and configure the framework and the depended modules. You can also register and resolve dependencies in these methods. + +ABP Framework's `AbpModule` class has the `ConfigureServices` and `OnApplicationInitialization` methods (and their Pre and Post versions). It is similar to ASP.NET Core's Startup class. You configure other services and register dependencies in the `ConfigureServices`. However, you can now resolve dependencies in that point. You can resolve dependencies and configure the ASP.NET Core pipeline in the `OnApplicationInitialization` method while you can not register dependencies here. So, the new module classes separate dependency registration phase from dependency resolution phase since it follows the ASP.NET Core's approach. + +### Dependency Injection + +#### The DI Framework + +ASP.NET Boilerplate is using the [Castle Windsor](http://www.castleproject.org/projects/windsor/) as the dependency injection framework. This is a fundamental dependency of the ASP.NET Boilerplate framework. We've got a lot of feedback to make the ASP.NET Boilerplate DI framework agnostic, but it was not so easy because of the design. + +ABP Framework is dependency injection framework independent since it uses Microsoft's [Dependency Injection Extensions](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection) library as an abstraction. None of the ABP Framework or module packages depends on any specific library. + +However, ABP Framework doesn't use the Microsoft's base DI library because it has some missing features ABP Framework needs to: Property Injection and Interception. All the startup templates and the samples are using the [Autofac](https://autofac.org/) as the DI library and it is the only [officially integrated](Autofac-Integration.md) library to the ABP Framework. We suggest you to use the Autofac with the ABP Framework if you have not a good reason. If you have a good reason, please create an [issue](https://github.com/abpframework/abp/issues/new) on GitHub to request it or just implement it and send a pull request :) + +#### Registering the Dependencies + +Registering the dependencies are similar and mostly handled by the framework conventionally (like repositories, application services, controllers... etc). Implement the same `ITransientDependency`, `ISingletonDependency` and `IScopedDependency` interfaces for the services not registered by conventions. + +When you need to manually register dependencies, use the `context.Services` in the `ConfigureServices` method of your module. Example: + +````csharp +public class BlogModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + //Register an instance as singleton + context.Services.AddSingleton(new TaxCalculator(taxRatio: 0.18)); + + //Register a factory method that resolves from IServiceProvider + context.Services.AddScoped( + sp => sp.GetRequiredService() + ); + } +} +```` + +See the ABP Framework [dependency injection document](https://docs.abp.io/en/abp/latest/Dependency-Injection) for details. + ### Configuration vs Options System ASP.NET Boilerplate has its own configuration system to configure the framework and the modules. For example, you could disable the audit logging in the `Initialize` method of your [module](https://aspnetboilerplate.com/Pages/Documents/Module-System): From 8efe5efff906152ce32c4eb5980d3e1b457ff863 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 13 Feb 2020 19:32:28 +0300 Subject: [PATCH 385/411] Added more sections to the migration guide. --- docs/en/AspNet-Boilerplate-Migration-Guide.md | 89 +++++++++++++++++++ docs/en/Clock.md | 3 + docs/en/Logging.md | 3 +- docs/en/docs-nav.json | 4 + 4 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 docs/en/Clock.md diff --git a/docs/en/AspNet-Boilerplate-Migration-Guide.md b/docs/en/AspNet-Boilerplate-Migration-Guide.md index cc5bf39228..0a2b3b17b3 100644 --- a/docs/en/AspNet-Boilerplate-Migration-Guide.md +++ b/docs/en/AspNet-Boilerplate-Migration-Guide.md @@ -426,10 +426,99 @@ public async Task> GetProducts(Guid tenantId) Pass `null` to the `Change` method to switch to the host side. +### Caching + +ASP.NET Boilerplate has its [own distributed caching abstraction](https://aspnetboilerplate.com/Pages/Documents/Caching) which has in-memory and Redis implementations. You typically inject the `ICacheManager` service and use its `GetCache(...)` method to obtain a cache, then get and set objects in the cache. + +ABP Framework uses and extends ASP.NET Core's [distributed caching abstraction](Caching.md). It defines the `IDistributedCache` services to inject a cache and get/set objects. + +### Logging + +ASP.NET Boilerplate uses Castle Windsor's [logging facility](http://docs.castleproject.org/Windsor.Logging-Facility.ashx) as an abstraction and supports multiple logging providers including Log4Net (the default one comes with the startup projects) and Serilog. You typically property-inject the logger: + +````csharp +using Castle.Core.Logging; //1: Import Logging namespace + +public class TaskAppService : ITaskAppService +{ + //2: Getting a logger using property injection + public ILogger Logger { get; set; } + + public TaskAppService() + { + //3: Do not write logs if no Logger supplied. + Logger = NullLogger.Instance; + } + + public void CreateTask(CreateTaskInput input) + { + //4: Write logs + Logger.Info("Creating a new task with description: " + input.Description); + //... + } +} +```` + +ABP Framework depends on Microsoft's [logging extensions](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging) library which is also an abstraction and there are many providers implement it. Startup templates are using the Serilog as the pre-configured logging libary while it is easy to change in your project. The usage pattern is similar: + +````csharp +//1: Import the Logging namespaces +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; + +public class TaskAppService : ITaskAppService +{ + //2: Getting a logger using property injection + public ILogger Logger { get; set; } + + public TaskAppService() + { + //3: Do not write logs if no Logger supplied. + Logger = NullLogger.Instance; + } + + public void CreateTask(CreateTaskInput input) + { + //4: Write logs + Logger.Info("Creating a new task with description: " + input.Description); + //... + } +} +```` + +You inject the `ILogger` instead of the `ILogger`. + +### Setting Management + +#### Defining the Settings + +In an ASP.NET Boilerplate based application, you create a class deriving from the `SettingProvider` class, implement the `GetSettingDefinitions` method and add your class to the `Configuration.Settings.Providers` list. + +In the ABP Framework, you need to derive your class from the `SettingDefinitionProvider` and implement the `Define` method. You don't need to register your class since the ABP Framework automatically discovers it. + +#### Getting the Setting Values + +ASP.NET Boilerplate provides the `ISettingManager` to read the setting values in the server side and `abp.setting.get(...)` method in the JavaScript side. + +ABP Framework has the `ISettingProvider` service to read the setting values in the server side and `abp.setting.get(...)` method in the JavaScript side. + +#### Setting the Setting Values + +For ASP.NET Boilerplate, you use the same `ISettingManager` service to change the setting values. + +ABP Framework separates it and provides the setting management module (pre-added to the startup projects) which has the ` ISettingManager ` to change the setting values. This separation was introduced to support tiered deployment scenarios (where `ISettingProvider` can also work in the client application while `ISettingManager ` can also work in the server (API) side). + +### Clock + +ASP.NET Boilerplate has a static `Clock` service ([see](https://aspnetboilerplate.com/Pages/Documents/Timing)) which is used to abstract the `DateTime` kind, so you can easily switch between Local and UTC times. You don't inject it, but just use the `Clock.Now` static method to obtain the current time. + +ABP Framework has the `IClock` service ([see](Clock.md)) which has a similar goal, but now you need to inject it whenever you need it. + ## Missing Features The following features are not present for the ABP Framework. Here, a list of major missing features (and the related issue for that feature waiting on the ABP Framework GitHub repository): * [Multi-Lingual Entities](https://aspnetboilerplate.com/Pages/Documents/Multi-Lingual-Entities) ([#1754](https://github.com/abpframework/abp/issues/1754)) +* ...TODO Most of these features will eventually be implemented. However, you can implement them yourself if they are important for you. If you want, you can [contribute](Contribution/Index.md) to the framework by implementing these yourself. \ No newline at end of file diff --git a/docs/en/Clock.md b/docs/en/Clock.md new file mode 100644 index 0000000000..46ef1235e0 --- /dev/null +++ b/docs/en/Clock.md @@ -0,0 +1,3 @@ +# Clock + +TODO \ No newline at end of file diff --git a/docs/en/Logging.md b/docs/en/Logging.md index 9b9c604bed..7fa45c03b9 100644 --- a/docs/en/Logging.md +++ b/docs/en/Logging.md @@ -2,4 +2,5 @@ ABP Framework doesn't implement any logging infrastructure. It uses the [ASP.NET Core's logging system](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging). -> .NET Core's logging system is actually independent from the ASP.NET Core. It is usable in any type of application. \ No newline at end of file +> .NET Core's logging system is actually independent from the ASP.NET Core. It is usable in any type of application. + diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index edbe193c3f..eb4ef13b8d 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -104,6 +104,10 @@ "text": "Caching", "path": "Caching.md" }, + { + "text": "Logging", + "path": "Logging.md" + }, { "text": "Audit Logging", "path": "Audit-Logging.md" From 41f918f2cf3fffb65d0d2378bf18bfc8798d1ce8 Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 14 Feb 2020 13:36:53 +0800 Subject: [PATCH 386/411] Add unit testing for document repository and application services. --- .../Docs/DocumentAdminAppService_Tests.cs | 55 +++++++++++++++++++ .../Volo/Docs/DocumentSourceFactory_Tests.cs | 25 +++++++++ .../Volo/Docs/DocumentStoreFactory_Tests.cs | 25 --------- ...Tests.cs => GithubDocumentSource_Tests.cs} | 14 ++--- .../DocumentRepository_Tests.cs | 6 ++ .../Docs/Document/DocumentRepository_Tests.cs | 9 +++ .../Volo/Docs/DocsTestBase.cs | 26 ++++++++- .../Volo/Docs/DocsTestDataBuilder.cs | 15 ++++- .../Volo/Docs/DocumentRepository_Tests.cs | 28 ++++++++++ 9 files changed, 168 insertions(+), 35 deletions(-) create mode 100644 modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo/Docs/DocumentAdminAppService_Tests.cs create mode 100644 modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/DocumentSourceFactory_Tests.cs delete mode 100644 modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/DocumentStoreFactory_Tests.cs rename modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/{GithubDocumentStore_Tests.cs => GithubDocumentSource_Tests.cs} (78%) create mode 100644 modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo/Docs/EntityFrameworkCore/DocumentRepository_Tests.cs create mode 100644 modules/docs/test/Volo.Docs.MongoDB.Tests/Volo/Docs/Document/DocumentRepository_Tests.cs create mode 100644 modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocumentRepository_Tests.cs diff --git a/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo/Docs/DocumentAdminAppService_Tests.cs b/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo/Docs/DocumentAdminAppService_Tests.cs new file mode 100644 index 0000000000..a969e3390a --- /dev/null +++ b/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo/Docs/DocumentAdminAppService_Tests.cs @@ -0,0 +1,55 @@ +using System.Threading.Tasks; +using Shouldly; +using Volo.Docs.Admin.Documents; +using Volo.Docs.Documents; +using Xunit; + +namespace Volo.Docs +{ + public class DocumentAdminAppService_Tests : DocsAdminApplicationTestBase + { + private readonly IDocumentAdminAppService _documentAdminAppService; + private readonly IDocumentRepository _documentRepository; + private readonly DocsTestData _testData; + + public DocumentAdminAppService_Tests() + { + _documentAdminAppService = GetRequiredService(); + _documentRepository = GetRequiredService(); + _testData = GetRequiredService(); + } + + [Fact] + public async Task PullAsync() + { + (await _documentRepository.FindAsync(_testData.PorjectId, "Part-I.md", "en", "1.0.0")).ShouldBeNull(); + + await _documentAdminAppService.PullAsync(new PullDocumentInput + { + ProjectId = _testData.PorjectId, + Name = "Part-I.md", + LanguageCode = "en", + Version = "1.0.0" + }); + + (await _documentRepository.FindAsync(_testData.PorjectId, "Part-I.md", "en", "1.0.0")).ShouldNotBeNull(); + } + + [Fact] + public async Task PullAllAsync() + { + (await _documentRepository.FindAsync(_testData.PorjectId, "Part-I.md", "en", "1.0.0")).ShouldBeNull(); + (await _documentRepository.FindAsync(_testData.PorjectId, "Part-II.md", "en", "1.0.0")).ShouldBeNull(); + + await _documentAdminAppService.PullAllAsync(new PullAllDocumentInput + { + ProjectId = _testData.PorjectId, + LanguageCode = "en", + Version = "1.0.0" + }); + + (await _documentRepository.FindAsync(_testData.PorjectId, "Part-I.md", "en", "1.0.0")).ShouldNotBeNull(); + (await _documentRepository.FindAsync(_testData.PorjectId, "Part-II.md", "en", "1.0.0")).ShouldNotBeNull(); + } + } +} diff --git a/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/DocumentSourceFactory_Tests.cs b/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/DocumentSourceFactory_Tests.cs new file mode 100644 index 0000000000..8e56a087d1 --- /dev/null +++ b/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/DocumentSourceFactory_Tests.cs @@ -0,0 +1,25 @@ +using Shouldly; +using Volo.Docs.Documents; +using Volo.Docs.FileSystem.Documents; +using Volo.Docs.GitHub.Documents; +using Xunit; + +namespace Volo.Docs +{ + public class DocumentSourceFactory_Tests : DocsDomainTestBase + { + private readonly IDocumentSourceFactory _documentSourceFactory; + + public DocumentSourceFactory_Tests() + { + _documentSourceFactory = GetRequiredService(); + } + + [Fact] + public void Create() + { + _documentSourceFactory.Create(GithubDocumentSource.Type).GetType().ShouldBe(typeof(GithubDocumentSource)); + _documentSourceFactory.Create(FileSystemDocumentSource.Type).GetType().ShouldBe(typeof(FileSystemDocumentSource)); + } + } +} diff --git a/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/DocumentStoreFactory_Tests.cs b/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/DocumentStoreFactory_Tests.cs deleted file mode 100644 index 23d34748a6..0000000000 --- a/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/DocumentStoreFactory_Tests.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Shouldly; -using Volo.Docs.Documents; -using Volo.Docs.FileSystem.Documents; -using Volo.Docs.GitHub.Documents; -using Xunit; - -namespace Volo.Docs -{ - public class DocumentStoreFactory_Tests : DocsDomainTestBase - { - private readonly IDocumentSourceFactory _documentStoreFactory; - - public DocumentStoreFactory_Tests() - { - _documentStoreFactory = GetRequiredService(); - } - - [Fact] - public void Create() - { - _documentStoreFactory.Create(GithubDocumentSource.Type).GetType().ShouldBe(typeof(GithubDocumentSource)); - _documentStoreFactory.Create(FileSystemDocumentSource.Type).GetType().ShouldBe(typeof(FileSystemDocumentSource)); - } - } -} diff --git a/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/GithubDocumentStore_Tests.cs b/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/GithubDocumentSource_Tests.cs similarity index 78% rename from modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/GithubDocumentStore_Tests.cs rename to modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/GithubDocumentSource_Tests.cs index 6b6bb0565c..1e89966518 100644 --- a/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/GithubDocumentStore_Tests.cs +++ b/modules/docs/test/Volo.Docs.Domain.Tests/Volo/Docs/GithubDocumentSource_Tests.cs @@ -7,15 +7,15 @@ using Xunit; namespace Volo.Docs { - public class GithubDocumentStore_Tests : DocsDomainTestBase + public class GithubDocumentSource_Tests : DocsDomainTestBase { - private readonly IDocumentSourceFactory _documentStoreFactory; + private readonly IDocumentSourceFactory _documentSourceFactory; private readonly IProjectRepository _projectRepository; private readonly DocsTestData _testData; - public GithubDocumentStore_Tests() + public GithubDocumentSource_Tests() { - _documentStoreFactory = GetRequiredService(); + _documentSourceFactory = GetRequiredService(); _projectRepository = GetRequiredService(); _testData = GetRequiredService(); } @@ -23,7 +23,7 @@ namespace Volo.Docs [Fact] public async Task GetDocumentAsync() { - var source = _documentStoreFactory.Create(GithubDocumentSource.Type); + var source = _documentSourceFactory.Create(GithubDocumentSource.Type); var project = await _projectRepository.FindAsync(_testData.PorjectId); project.ShouldNotBeNull(); @@ -40,7 +40,7 @@ namespace Volo.Docs [Fact] public async Task GetVersionsAsync() { - var source = _documentStoreFactory.Create(GithubDocumentSource.Type); + var source = _documentSourceFactory.Create(GithubDocumentSource.Type); var project = await _projectRepository.FindAsync(_testData.PorjectId); project.ShouldNotBeNull(); @@ -55,7 +55,7 @@ namespace Volo.Docs [Fact] public async Task GetResource() { - var source = _documentStoreFactory.Create(GithubDocumentSource.Type); + var source = _documentSourceFactory.Create(GithubDocumentSource.Type); var project = await _projectRepository.FindAsync(_testData.PorjectId); project.ShouldNotBeNull(); diff --git a/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo/Docs/EntityFrameworkCore/DocumentRepository_Tests.cs b/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo/Docs/EntityFrameworkCore/DocumentRepository_Tests.cs new file mode 100644 index 0000000000..d36c97a2b7 --- /dev/null +++ b/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo/Docs/EntityFrameworkCore/DocumentRepository_Tests.cs @@ -0,0 +1,6 @@ +namespace Volo.Docs.EntityFrameworkCore +{ + public class DocumentRepository_Tests : DocumentRepository_Tests + { + } +} \ No newline at end of file diff --git a/modules/docs/test/Volo.Docs.MongoDB.Tests/Volo/Docs/Document/DocumentRepository_Tests.cs b/modules/docs/test/Volo.Docs.MongoDB.Tests/Volo/Docs/Document/DocumentRepository_Tests.cs new file mode 100644 index 0000000000..63e69d099a --- /dev/null +++ b/modules/docs/test/Volo.Docs.MongoDB.Tests/Volo/Docs/Document/DocumentRepository_Tests.cs @@ -0,0 +1,9 @@ +using Volo.Docs.MongoDB; + +namespace Volo.Docs.Document +{ + public class DocumentRepository_Tests : DocumentRepository_Tests + { + + } +} \ No newline at end of file diff --git a/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestBase.cs b/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestBase.cs index ec8270ae01..56a8ea0203 100644 --- a/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestBase.cs +++ b/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestBase.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using Microsoft.Extensions.DependencyInjection; using NSubstitute; @@ -23,6 +23,11 @@ namespace Volo.Docs var repositoryManager = Substitute.For(); repositoryManager.GetFileRawStringContentAsync(Arg.Any(), Arg.Any(), Arg.Any()) .Returns("stringContent"); + repositoryManager.GetFileRawStringContentAsync( + Arg.Is(x => x.Contains("docs-nav.json", StringComparison.InvariantCultureIgnoreCase)), + Arg.Any(), Arg.Any()) + .Returns("{\"items\":[{\"text\":\"Part-I.md\",\"path\":\"Part-I.md\"},{\"text\":\"Part-II\",\"path\":\"Part-II.md\"}]}"); + repositoryManager.GetFileRawByteArrayContentAsync(Arg.Any(), Arg.Any(), Arg.Any()) .Returns(new byte[] { 0x01, 0x02, 0x03 }); repositoryManager.GetReleasesAsync(Arg.Any(), Arg.Any(), Arg.Any()) @@ -47,6 +52,25 @@ namespace Volo.Docs "https://api.github.com/repos/abpframework/abp/zipball/0.15.0", null) }); + repositoryManager.GetFileCommitsAsync(Arg.Any(), Arg.Any(), Arg.Any(), + Arg.Any(), Arg.Any()) + .Returns(new List + { + new GitHubCommit("", "", "", "", "", null, null, + new Author("hikalkan ", 2, "", "https://avatars1.githubusercontent.com/u/1?v=4", "", + "https://github.com/hikalkan", "", "", "", "", "", "", "", "", "", "", false), "", + new Commit("", "", "", "", "", null, null, "", new Committer("", "", DateTimeOffset.Now), + null, null, new []{ new GitReference("", "", "", "", "", null, null) }, 1, null), + null, "", null, new []{ new GitReference("", "", "", "", "", null, null) }, null), + + new GitHubCommit("", "", "", "", "", null, null, + new Author("ebicoglu ", 2, "", "https://avatars1.githubusercontent.com/u/2?v=4", "", + "https://github.com/ebicoglu", "", "", "", "", "", "", "", "", "", "", false), "", + new Commit("", "", "", "", "", null, null, "", new Committer("", "", DateTimeOffset.Now), + null, null, new []{ new GitReference("", "", "", "", "", null, null) }, 1, null), + null, "", null, new []{ new GitReference("", "", "", "", "", null, null) }, null) + }); + services.AddSingleton(repositoryManager); } } diff --git a/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestDataBuilder.cs b/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestDataBuilder.cs index be5bab81bc..1325ec04a3 100644 --- a/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestDataBuilder.cs +++ b/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestDataBuilder.cs @@ -1,6 +1,8 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; +using Volo.Docs.Documents; using Volo.Docs.GitHub.Documents; using Volo.Docs.Projects; @@ -10,13 +12,16 @@ namespace Volo.Docs { private readonly DocsTestData _testData; private readonly IProjectRepository _projectRepository; + private readonly IDocumentRepository _documentRepository; public DocsTestDataBuilder( DocsTestData testData, - IProjectRepository projectRepository) + IProjectRepository projectRepository, + IDocumentRepository documentRepository) { _testData = testData; _projectRepository = projectRepository; + _documentRepository = documentRepository; } public async Task BuildAsync() @@ -38,6 +43,12 @@ namespace Volo.Docs .SetProperty("GitHubUserAgent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"); await _projectRepository.InsertAsync(project); + + await _documentRepository.InsertAsync(new Document(Guid.NewGuid(), project.Id, "CLI.md", "2.0.0", "en", "CLI.md", + "this is abp cli", "md", "https://github.com/abpframework/abp/blob/2.0.0/docs/en/CLI.md", + "https://github.com/abpframework/abp/tree/2.0.0/docs/", + "https://raw.githubusercontent.com/abpframework/abp/2.0.0/docs/en/", "", DateTime.Now, 1, + DateTime.Now)); } } } \ No newline at end of file diff --git a/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocumentRepository_Tests.cs b/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocumentRepository_Tests.cs new file mode 100644 index 0000000000..31d0e8a6fd --- /dev/null +++ b/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocumentRepository_Tests.cs @@ -0,0 +1,28 @@ +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp.Modularity; +using Volo.Docs.Documents; +using Xunit; + +namespace Volo.Docs +{ + public abstract class DocumentRepository_Tests : DocsTestBase + where TStartupModule : IAbpModule + { + protected readonly IDocumentRepository DocumentRepository; + protected readonly DocsTestData DocsTestData; + + protected DocumentRepository_Tests() + { + DocumentRepository = GetRequiredService(); + DocsTestData = GetRequiredService(); + } + + [Fact] + public async Task FindAsync() + { + var document = await DocumentRepository.FindAsync(DocsTestData.PorjectId, "CLI.md", "en", "2.0.0"); + document.ShouldNotBeNull(); + } + } +} From 87890aa4d2000961dc2861586ce5d9903448a15a Mon Sep 17 00:00:00 2001 From: liangshiw Date: Fri, 14 Feb 2020 15:04:53 +0800 Subject: [PATCH 387/411] Update chinese document --- docs/en/Blog-Posts/2019-02-22/Post.md | 4 +- docs/zh-Hans/Background-Jobs.md | 8 +- docs/zh-Hans/Blog-Posts/2019-02-22/Post.md | 12 +- docs/zh-Hans/Connection-Strings.md | 16 ++ .../Contribution/Localization-Text-Files.md | 29 ++-- docs/zh-Hans/Dependency-Injection.md | 2 +- docs/zh-Hans/Entity-Framework-Core.md | 2 +- ...Getting-Started-AspNetCore-MVC-Template.md | 2 +- docs/zh-Hans/Modules/Docs.md | 144 +++++++++++++++--- docs/zh-Hans/Modules/Index.md | 2 +- .../Tutorials/AspNetCore-Mvc/Part-I.md | 16 +- .../Tutorials/AspNetCore-Mvc/Part-III.md | 22 +-- .../images/auditlog-object-diagram.png | Bin 0 -> 29134 bytes docs/zh-Hans/images/docs-section-ui.png | Bin 0 -> 9624 bytes .../Localization/BookStore/zh-Hans.json | 2 +- .../Localization/BookStore/zh-Hans.json | 2 +- .../Localization/BookStore/zh-Hans.json | 2 +- .../Localization/DashboardDemo/zh-Hans.json | 2 +- .../Localization/MyProjectName/zh-Hans.json | 2 +- 19 files changed, 184 insertions(+), 85 deletions(-) create mode 100644 docs/zh-Hans/images/auditlog-object-diagram.png create mode 100644 docs/zh-Hans/images/docs-section-ui.png diff --git a/docs/en/Blog-Posts/2019-02-22/Post.md b/docs/en/Blog-Posts/2019-02-22/Post.md index 35f8219014..b27a50ec05 100644 --- a/docs/en/Blog-Posts/2019-02-22/Post.md +++ b/docs/en/Blog-Posts/2019-02-22/Post.md @@ -1,6 +1,6 @@ # Microservice Demo, Projects Status and Road Map -After [the first announcement](https://abp.io/blog/abp/Abp-vNext-Announcement) on the ABP vNext, we have a lot of improvements on the codebase (1100+ commits on the [GitHub repository](https://github.com/abpframework/abp)). We've created features, samples, documentation and much more. In this post, I want to inform you about some news and the status of the project. +After [the first announcement](https://blog.abp.io/Abp-vNext-Announcement) on the ABP vNext, we have a lot of improvements on the codebase (1100+ commits on the [GitHub repository](https://github.com/abpframework/abp)). We've created features, samples, documentation and much more. In this post, I want to inform you about some news and the status of the project. ## Microservice Demo Solution @@ -38,7 +38,7 @@ First release may not include a SPA template. However, we want to prepare a simp ## Chinese Web Site -There is a big ABP community in China. They have created a Chinese version of the abp.io web site: https://cn.abp.io/ They are keeping it up to date. Thanks to the Chinese developers and especially to [Liming Ma](https://github.com/maliming). +There is a big ABP community in China. They have created a Chinese version of the abp.io web site: https://abp.io/ They are keeping it up to date. Thanks to the Chinese developers and especially to [Liming Ma](https://github.com/maliming). ## NDC {London} 2019 diff --git a/docs/zh-Hans/Background-Jobs.md b/docs/zh-Hans/Background-Jobs.md index 30b6f0f1ad..7c2a694005 100644 --- a/docs/zh-Hans/Background-Jobs.md +++ b/docs/zh-Hans/Background-Jobs.md @@ -110,7 +110,7 @@ Enqueue方法接收一些可选参数用于控制后台作业: 你可能希望在你的应用程序中禁用后台作业执行. 如果你希望在另一个进程中执行后台作业并在当前进程中禁用它,通常可以使用以下命令. -使用 `BackgroundJobOptions` 配置作业执行: +使用 `AbpBackgroundJobOptions` 配置作业执行: ````csharp [DependsOn(typeof(AbpBackgroundJobsModule))] @@ -118,7 +118,7 @@ public class MyModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { - Configure(options => + Configure(options => { options.IsJobExecutionEnabled = false; //禁用作业执行 }); @@ -142,7 +142,7 @@ ABP framework 包含一个简单的 `IBackgroundJobManager` 实现; ### 配置 -在你的[模块类](Module-Development-Basics.md)中使用 `BackgroundJobWorkerOptions` 配置默认作业管理器. +在你的[模块类](Module-Development-Basics.md)中使用 `AbpBackgroundJobWorkerOptions` 配置默认作业管理器. 示例中更改后台作业的的超时时间: ````csharp @@ -151,7 +151,7 @@ public class MyModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { - Configure(options => + Configure(options => { options.DefaultTimeout = 864000; //10 days (as seconds) }); diff --git a/docs/zh-Hans/Blog-Posts/2019-02-22/Post.md b/docs/zh-Hans/Blog-Posts/2019-02-22/Post.md index 69a8603baf..30a5d691e9 100644 --- a/docs/zh-Hans/Blog-Posts/2019-02-22/Post.md +++ b/docs/zh-Hans/Blog-Posts/2019-02-22/Post.md @@ -1,12 +1,12 @@ # 微服务演示,项目状态和路线图 -在ABP vNext上的[第一个公告](https://cn.abp.io/blog/abp/Abp-vNext-Announcement)之后,我们对代码库进行了很多改进([GitHub存储库](https://github.com/abpframework/abp)上的1100多次提交).我们已经创建了功能,示例,文档等等.在这篇文章中,我想告诉你一些新闻和项目的状态. +在ABP vNext上的[第一个公告](https://abp.io/blog/abp/Abp-vNext-Announcement)之后,我们对代码库进行了很多改进([GitHub存储库](https://github.com/abpframework/abp)上的1100多次提交).我们已经创建了功能,示例,文档等等.在这篇文章中,我想告诉你一些新闻和项目的状态. ## 微服务演示解决方案 -ABP框架的主要目标之一是提供[创建微服务解决方案的便利基础设施](https://cn.abp.io/documents/abp/latest/Microservice-Architecture). +ABP框架的主要目标之一是提供[创建微服务解决方案的便利基础设施](https://abp.io/documents/abp/latest/Microservice-Architecture). -我们一直在努力开发微服务解决方案演示.初始版本已完成并[文档化](https://cn.abp.io/documents/abp/latest/Samples/Microservice-Demo).该示例解决方案旨在演示一个简单而完整的微服务解决方案; +我们一直在努力开发微服务解决方案演示.初始版本已完成并[文档化](https://abp.io/documents/abp/latest/Samples/Microservice-Demo).该示例解决方案旨在演示一个简单而完整的微服务解决方案; - 具有多个独立的,可自我部署的**微服务**. - 多个**Web应用程序**,每个都使用不同的API网关. @@ -20,7 +20,7 @@ ABP框架的主要目标之一是提供[创建微服务解决方案的便利基 - 使用[Docker](https://www.docker.com/)和[Kubernates](https://kubernetes.io/)**部署**并运行所有服务和应用程序. - 使用[Elasticsearch](https://www.elastic.co/products/elasticsearch)和[Kibana](https://www.elastic.co/products/kibana)存储和可视化日志(使用[Serilog](https://serilog.net/)编写). -有关解决方案的详细说明,请参阅[其文档](https://cn.abp.io/documents/abp/latest/Samples/Microservice-Demo). +有关解决方案的详细说明,请参阅[其文档](https://abp.io/documents/abp/latest/Samples/Microservice-Demo). ## 改进/功能 @@ -32,13 +32,13 @@ ABP框架的主要目标之一是提供[创建微服务解决方案的便利基 根据我们的估计,我们计划在2019年第二季度(可能在五月或六月)发布v1.0.所以,不用等待太长时间了.我们也对第一个稳定版本感到非常兴奋. -我们还将完善[文档](https://cn.abp.io/documents/abp/latest),因为它现在还远未完成. +我们还将完善[文档](https://abp.io/documents/abp/latest),因为它现在还远未完成. 第一个版本可能不包含SPA模板.但是,如果可能的话,我们想要准备一个简单些的.SPA框架还没有确定下来.备选有:**Angular,React和Blazor**.请将您的想法写为对此帖的评论. ## 中文网 -中国有一个大型的ABP社区.他们创建了一个中文版的abp.io网站:https://cn.abp.io/. 他们一直在保持更新.感谢中国的开发人员,特别是[Liming Ma](https://github.com/maliming). +中国有一个大型的ABP社区.他们创建了一个中文版的abp.io网站:https://abp.io/. 他们一直在保持更新.感谢中国的开发人员,特别是[Liming Ma](https://github.com/maliming). ## NDC {London} 2019 diff --git a/docs/zh-Hans/Connection-Strings.md b/docs/zh-Hans/Connection-Strings.md index 2df4137b2b..562ae700ce 100644 --- a/docs/zh-Hans/Connection-Strings.md +++ b/docs/zh-Hans/Connection-Strings.md @@ -35,6 +35,22 @@ ABP框架的设计是[模块化](Module-Development-Basics.md), [微服务兼容 [预构建的应用程序模块](Modules/Index.md) 为连接字符串名称定义常量. 例如IdentityServer模块在 `AbpIdentityServerDbProperties` 类(位于 `Volo.Abp.IdentityServer` 命名空间)定义了 `ConnectionStringName` 常量 . 其他的模块类似的定义常量,你可以查看连接字符串的名称. +### AbpDbConnectionOptions + +ABP实际上使用 `AbpDbConnectionOptions` 获取连接字符串. 如果如上所述设置了连接字符串, `AbpDbConnectionOptions` 会被自动填充. 但是你也可以使用[选项模式](Options.md)设置或覆盖连接字符串. 你可以在[模块](Module-Development-Basics.md)的 `ConfigureServices` 方法配置`AbpDbConnectionOptions`). +如下所示: + +````csharp +public override void ConfigureServices(ServiceConfigurationContext context) +{ + Configure(options => + { + options.ConnectionStrings.Default = "..."; + options.ConnectionStrings["AbpPermissionManagement"] = "..."; + }); +} +```` + ## 设置连接字符串名称 模块通常使用 `ConnectionStringName` attribute 为 `DbContext` 类关联一个唯一的连接字符串名称. 示例: diff --git a/docs/zh-Hans/Contribution/Localization-Text-Files.md b/docs/zh-Hans/Contribution/Localization-Text-Files.md index 36bae2890a..8055d9cae2 100644 --- a/docs/zh-Hans/Contribution/Localization-Text-Files.md +++ b/docs/zh-Hans/Contribution/Localization-Text-Files.md @@ -3,7 +3,7 @@ 这是一个来自框架的本地化文本文件列表, 任何人都可以做出贡献. 我们会将此列表保持最新: * https://github.com/abpframework/abp/tree/master/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en.json -* https://github.com/abpframework/abp/tree/master/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpValidation/en.json +* https://github.com/abpframework/abp/blob/master/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/en.json * https://github.com/abpframework/abp/tree/master/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/en.json * https://github.com/abpframework/abp/tree/master/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json * https://github.com/abpframework/abp/tree/master/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/en.json @@ -12,29 +12,20 @@ * https://github.com/abpframework/abp/tree/master/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/en.json * https://github.com/abpframework/abp/tree/master/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/en.json * https://github.com/abpframework/abp/tree/master/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/en.json -* https://github.com/abpframework/abp/tree/master/modules/account/src/Volo.Abp.Account.Web/Localization/Resources/AbpAccount/Web/en.json +* https://github.com/abpframework/abp/blob/master/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json * https://github.com/abpframework/abp/tree/master/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/en.json -* https://github.com/abpframework/abp/tree/master/modules/blogging/src/Volo.Blogging.Web/Localization/Resources/Blogging/Web/en.json +* https://github.com/abpframework/abp/tree/master/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/en.json * https://github.com/abpframework/abp/tree/master/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/en.json * https://github.com/abpframework/abp/tree/master/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json -* https://github.com/abpframework/abp/tree/master/modules/docs/src/Volo.Docs.Admin.Web/Localization/Resources/Docs/Web/en.json * https://github.com/abpframework/abp/tree/master/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json -* https://github.com/abpframework/abp/tree/master/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/Localization/ApplicationContracts/en.json -* https://github.com/abpframework/abp/tree/master/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/Localization/Domain/en.json -* https://github.com/abpframework/abp/tree/master/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Localization/Resources/FeatureManagement/en.json -* https://github.com/abpframework/abp/tree/master/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/Localization/ApplicationContracts/en.json -* https://github.com/abpframework/abp/tree/master/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/Localization/Domain/en.json -* https://github.com/abpframework/abp/tree/master/modules/identity/src/Volo.Abp.Identity.Web/Localization/Resources/AbpIdentity/en.json -* https://github.com/abpframework/abp/tree/master/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Localization/Resources/AbpPermissionManagement/en.json -* https://github.com/abpframework/abp/tree/master/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Localization/Resources/AbpSettingManagement/en.json -* https://github.com/abpframework/abp/tree/master/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/en.json -* https://github.com/abpframework/abp/tree/master/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/en.json +* https://github.com/abpframework/abp/tree/master/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en.json +* https://github.com/abpframework/abp/tree/master/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en.json +* https://github.com/abpframework/abp/tree/master/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en.json +* https://github.com/abpframework/abp/tree/master/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en.json +* https://github.com/abpframework/abp/tree/master/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en.json * https://github.com/abpframework/abp/tree/master/samples/BookStore/src/Acme.BookStore.Domain.Shared/Localization/BookStore/en.json -* https://github.com/abpframework/abp/tree/master/samples/DashboardDemo/src/DashboardDemo.Domain/Localization/DashboardDemo/en.json +* https://github.com/abpframework/abp/tree/master/samples/DashboardDemo/src/DashboardDemo.Domain.Shared/Localization/DashboardDemo/en.json * https://github.com/abpframework/abp/tree/master/samples/MicroserviceDemo/modules/product/src/ProductManagement.Application.Contracts/ProductManagement/Localization/ApplicationContracts/en.json * https://github.com/abpframework/abp/tree/master/samples/MicroserviceDemo/modules/product/src/ProductManagement.Domain/ProductManagement/Localization/Domain/en.json * https://github.com/abpframework/abp/tree/master/samples/MicroserviceDemo/modules/product/src/ProductManagement.Web/Localization/Resources/ProductManagement/en.json -* https://github.com/abpframework/abp/tree/master/templates/mvc-module/src/MyCompanyName.MyProjectName.Application.Contracts/Localization/MyProjectName/ApplicationContracts/en.json -* https://github.com/abpframework/abp/tree/master/templates/mvc-module/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/DomainShared/en.json -* https://github.com/abpframework/abp/tree/master/templates/mvc-module/src/MyCompanyName.MyProjectName.Web/Localization/MyProjectName/Web/en.json -* https://github.com/abpframework/abp/tree/master/templates/mvc/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en.json +* https://github.com/abpframework/abp/tree/master/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en.json \ No newline at end of file diff --git a/docs/zh-Hans/Dependency-Injection.md b/docs/zh-Hans/Dependency-Injection.md index 381b77ec35..2264a12930 100644 --- a/docs/zh-Hans/Dependency-Injection.md +++ b/docs/zh-Hans/Dependency-Injection.md @@ -319,4 +319,4 @@ public class AppModule : AbpModule ### 请参阅 -* [ASP.NET Core依赖注入最佳实践,提示和技巧](https://cn.abp.io/blog/Abp/asp-net-core-dependency-injection-best-practices-tips-tricks) +* [ASP.NET Core依赖注入最佳实践,提示和技巧](https://blog.abp.io/asp-net-core-dependency-injection-best-practices-tips-tricks) diff --git a/docs/zh-Hans/Entity-Framework-Core.md b/docs/zh-Hans/Entity-Framework-Core.md index 328a4b74cc..b70630e38f 100644 --- a/docs/zh-Hans/Entity-Framework-Core.md +++ b/docs/zh-Hans/Entity-Framework-Core.md @@ -181,7 +181,7 @@ public interface IBookRepository : IRepository } ```` -你通常希望从IRepository派生以继承标准存储库方法. 然而,你没有必要这样做. 仓储接口在分层应用程序的领域层中定义,它在数据访问/基础设施层([启动模板](https://cn.abp.io/Templates)中的`EntityFrameworkCore`项目)中实现 +你通常希望从IRepository派生以继承标准存储库方法. 然而,你没有必要这样做. 仓储接口在分层应用程序的领域层中定义,它在数据访问/基础设施层([启动模板](https://abp.io/Templates)中的`EntityFrameworkCore`项目)中实现 IBookRepository接口的实现示例: diff --git a/docs/zh-Hans/Getting-Started-AspNetCore-MVC-Template.md b/docs/zh-Hans/Getting-Started-AspNetCore-MVC-Template.md index 4d6695c79b..d65573d9db 100644 --- a/docs/zh-Hans/Getting-Started-AspNetCore-MVC-Template.md +++ b/docs/zh-Hans/Getting-Started-AspNetCore-MVC-Template.md @@ -2,7 +2,7 @@ ### 创建新项目 -本教程使用 **ABP CLI** 创建一个新项目. 更多选项, 请参阅[入门](https://cn.abp.io/get-started)页面. +本教程使用 **ABP CLI** 创建一个新项目. 更多选项, 请参阅[入门](https://abp.io/get-started)页面. 如果你之前未安装,请使用命令行安装ABP CLI: diff --git a/docs/zh-Hans/Modules/Docs.md b/docs/zh-Hans/Modules/Docs.md index cfe287082b..3bd71d554f 100644 --- a/docs/zh-Hans/Modules/Docs.md +++ b/docs/zh-Hans/Modules/Docs.md @@ -14,21 +14,19 @@ ### 版本 -当你使用GitHub存储文档时,文档模块支持多版本. 如果你的文档具有多个版本, UI上有一个组合框,用于切换版本. 如果你选择使用文件系统存储文档, 那么它不支持多版本. +当你使用GitHub存储文档时,文档模块支持多版本. 如果你的文档具有多个版本, UI上有一个组合框,用于切换版本. 如果你选择使用文件系统存储文档, 那么它不支持多版本. -ABP框架的[文档](https://abp.io/documents/)也是使用的此模块. +ABP框架的[文档](docs.abp.io)也是使用的此模块. > 文档模块遵循 [模块化架构最佳实践](../Best-Practices/Module-Architecture.md) 指南. - - ## 安装 ### 1- 下载 -如果你没有现有的ABP项目, 这个步骤向你展示如何在[abp.io](https://cn.abp.io)创建一个新项目并添加文档模块. 如果你本地已经有了一个ABP项目, 那么你可以跳过这一步. +如果你没有现有的ABP项目, 这个步骤向你展示如何在[abp.io](https://abp.io)创建一个新项目并添加文档模块. 如果你本地已经有了一个ABP项目, 那么你可以跳过这一步. -打开 https://cn.abp.io/Templates. 输入项目名称为 `Acme.MyProject`, 选择 `ASP.NET Core Mvc Application` 和选择 `Entity Framework Core` 做为数据库提供者. +打开 https://abp.io/Templates. 输入项目名称为 `Acme.MyProject`, 选择 `ASP.NET Core Mvc Application` 和选择 `Entity Framework Core` 做为数据库提供者. 请注意,本文档包含了 `Entity Framework Core` 提供者 不过你也可以选择 `MongoDB` 做为数据库提供者. @@ -36,7 +34,7 @@ ABP框架的[文档](https://abp.io/documents/)也是使用的此模块. ### 2- 运行这个空项目 -下载项目后, 解压压缩文档并且打开 `Acme.MyProject.sln`. 你可以看到这个解决方案包含了 `Application`, `Domain `, `EntityFrameworkCore` 和 `Web` 项目. 右键选择 `Acme.MyProject.Web` 项目**设置为启动项目**. +下载项目后, 解压压缩文档并且打开 `Acme.MyProject.sln`. 你可以看到这个解决方案包含了 `Application`, `Domain`, `EntityFrameworkCore` 和 `Web` 项目. 右键选择 `Acme.MyProject.Web` 项目**设置为启动项目**. ![创建新项目](../images/docs-module_solution-explorer.png) @@ -67,31 +65,32 @@ ABP框架的[文档](https://abp.io/documents/)也是使用的此模块. ```csharp ``` + * [Volo.Docs.EntityFrameworkCore](https://www.nuget.org/packages/Volo.Docs.EntityFrameworkCore/) 需要安装到 `Acme.MyProject.EntityFrameworkCore` 项目. - - 修改 `Acme.MyProject.EntityFrameworkCore.csproj`文件并且添加以下行. 需要注意它要设置(v0.9.0)为Latest版本. + * 修改 `Acme.MyProject.EntityFrameworkCore.csproj` 文件并且添加以下行. 需要注意它要设置(v0.9.0)为Latest版本. ```csharp ``` + * [Volo.Docs.Application](https://www.nuget.org/packages/Volo.Docs.Application/) 需要安装到 `Acme.MyProject.Application` 项目. - * 修改 `Acme.MyProject.Application.csproj`文件并且添加以下行. 需要注意它要设置(v0.9.0)为Latest版本. + * 修改 `Acme.MyProject.Application.csproj` 文件并且添加以下行. 需要注意它要设置(v0.9.0)为Latest版本. ```csharp ``` -* [Volo.Docs.Web ](https://www.nuget.org/packages/Volo.Docs.Web/) 需要安装到 `Acme.MyProject.Web` 项目. - - 修改 `Acme.MyProject.Web.csproj`文件并且添加以下行. 需要注意它要设置(v0.9.0)为Latest版本. +* [Volo.Docs.Web](https://www.nuget.org/packages/Volo.Docs.Web/) 需要安装到 `Acme.MyProject.Web` 项目. + + * 修改 `Acme.MyProject.Web.csproj` 文件并且添加以下行. 需要注意它要设置(v0.9.0)为Latest版本. ```csharp ``` - - -### 3- 添加模块添加 +### 3- 添加模块依赖 一个ABP模块必须声明 `[DependsOn]` attribute 如果它依赖于另一个模块. 每个模块都必须在相关的项目的`[DependsOn]`Attribute 中添加. @@ -155,7 +154,6 @@ ABP框架的[文档](https://abp.io/documents/)也是使用的此模块. } ``` - * 打开 `MyProjectWebModule.cs`并且添加 `typeof(DocsWebModule)` 如下所示; ```csharp @@ -174,15 +172,13 @@ ABP框架的[文档](https://abp.io/documents/)也是使用的此模块. } ``` - - ### 4- 数据库集成 #### 4.1- Entity Framework 集成 如果你选择了Entity Framework 做为数据库供应者,你需要在DbContext中配置文档模块. 做以下操作; -- 打开 `MyProjectDbContext.cs` 并且添加 `modelBuilder.ConfigureDocs()` 到 `OnModelCreating()` 方法中 +* 打开 `MyProjectDbContext.cs` 并且添加 `modelBuilder.ConfigureDocs()` 到 `OnModelCreating()` 方法中 ```csharp [ConnectionStringName("Default")] @@ -195,7 +191,7 @@ ABP框架的[文档](https://abp.io/documents/)也是使用的此模块. } protected override void OnModelCreating(ModelBuilder modelBuilder) - { + { //... modelBuilder.ConfigureDocs(); } @@ -218,7 +214,6 @@ ABP框架的[文档](https://abp.io/documents/)也是使用的此模块. 最后你可以查看数据库中创建的新表,例如你可以看到 `DocsProjects` 表已经添加到数据库中. - ### 5- 链接文档模块 文档模块的默认路由是; @@ -262,7 +257,7 @@ ABP框架的[文档](https://abp.io/documents/)也是使用的此模块. "texts": { "Menu:Home": "首页", "Welcome": "欢迎", - "LongWelcomeMessage": "欢迎来到该应用程序. 这是一个基于ABP框架的启动项目. 有关更多信息, 请访问 cn.abp.io.", + "LongWelcomeMessage": "欢迎来到该应用程序. 这是一个基于ABP框架的启动项目. 有关更多信息, 请访问 abp.io.", "Menu:Docs": "文档" } } @@ -352,10 +347,10 @@ INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocume - ExtraProperties: ```json - {"Path":"C:\\Github\\abp\\docs\\zh-Hans"} + {"Path":"C:\\Github\\abp\\docs"} ``` - 请注意 `Path` 必须使用本地docs目录替换. 你可以从https://github.com/abpframework/abp/tree/master/docs/zh-hans获取ABP Framework的文档并且复制到该目录 `C:\\Github\\abp\\docs\\zh-Hans` 使其正常工作. + 请注意 `Path` 必须使用本地docs目录替换. 你可以从https://github.com/abpframework/abp/tree/master/docs获取ABP Framework的文档并且复制到该目录 `C:\\Github\\abp\\docs` 使其正常工作. - MainWebsiteUrl: `/` @@ -364,7 +359,7 @@ INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocume 对于 `SQL` 数据库,你可以使用下面的 `T-SQL` 命令将指定的示例插入到 `DocsProjects` 表中: ```mssql -INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939659', N'ABP framework (FileSystem)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'FileSystem', N'{"Path":"C:\\Github\\abp\\docs\\zh-Hans"}', N'/', NULL) +INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939659', N'ABP framework (FileSystem)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'FileSystem', N'{"Path":"C:\\Github\\abp\\docs"}', N'/', NULL) ``` 添加上面的一个示例项目后运行该应用程序. 在菜单中你会看到`文档` 链接,点击菜单链接打开文档页面. @@ -408,6 +403,101 @@ public class Person [https://github.com/abpframework/abp/blob/master/docs/zh-Hans/](https://github.com/abpframework/abp/blob/master/docs/zh-Hans/) +#### 有条件的部分功能(使用Scriban) + +文档模块使用[Scriban]()有条件的显示或隐藏文档的某些部分. 使用该功能你需要为每一种语言创建一个JSON文件做为**参数文档**. 它包含所有键值以及它们的显示名称. + +例如 [en/docs-params.json](https://github.com/abpio/abp-commercial-docs/blob/master/en/docs-params.json): + +```json +{ + "parameters": [{ + "name": "UI", + "displayName": "UI", + "values": { + "MVC": "MVC / Razor Pages", + "NG": "Angular" + } + }, + { + "name": "DB", + "displayName": "Database", + "values": { + "EF": "Entity Framework Core", + "Mongo": "MongoDB" + } + }, + { + "name": "Tiered", + "displayName": "Tiered", + "values": { + "No": "Not Tiered", + "Yes": "Tiered" + } + }] +} +``` + +因为并不是项目中的每个文档都有章节或者不需要所有的参数,你必须声明哪些参数将用于对文档进行分段,在文档的任何地方都可以使用JSON块. + +例如 [Getting-Started.md](https://github.com/abpio/abp-commercial-docs/blob/master/en/getting-started.md): + +``` +..... + +​````json +//[doc-params] +{ + "UI": ["MVC","NG"], + "DB": ["EF", "Mongo"], + "Tiered": ["Yes", "No"] +} +​```` + +........ +``` + +这个部分会在渲染时自动删除.前提是这些键值必须与**参数文档**中的键值匹配. + +![Interface](../images/docs-section-ui.png) + +现在你可以使用 **Scriban** 语法在文档中创建章节. + +示例 : + +```` +{{ if UI == "NG" }} + +* `-u` argument specifies the UI framework, `angular` in this case. + +{{ end }} + +{{ if DB == "Mongo" }} + +* `-d` argument specifies the database provider, `mongodb` in this case. + +{{ end }} + +{{ if Tiered == "Yes" }} + +* `--tiered` argument is used to create N-tiered solution where authentication server, UI and API layers are physically separated. + +{{ end }} + +```` + +还可以在文本中使用变量,在其键中添加 **_Value** 后缀: + +```` +This document assumes that you prefer to use **{{ UI_Value }}** as the UI framework and **{{ DB_Value }}** as the database provider. +```` + +如果你想要得到的当前文档的语言或版本,可以使用预定义的 **Document_Language_Code** 和 **DOCUMENT_VERSION** 键(这对于创建重定向到另一个地区中另一个文档系统的链接很有用). + +------ + +**重要提示**: Scriban 的语法是 "{{" and "}}". 如果要在文档(如Angular文档)中使用转义,则必须使用转义块. 参阅 [Scriban文档]( ) 了解更多信息. + ### 8- 创建文档导航 导航文档是文档页面的主菜单. 它位于页面的左侧,是一个`JSON` 文件. 请查看以下示例导航文档以了解结构. @@ -464,4 +554,8 @@ public class Person ![Navigation menu](../images/docs-module_download-sample-navigation-menu.png) -最后,为您的项目添加了一个新的Docs模块, 该模块由GitHub提供. \ No newline at end of file +最后,为您的项目添加了一个新的Docs模块, 该模块由GitHub提供. + +## 下一步 + +文档模块也可以做为独立的应用程序. 查看 [VoloDocs](../Apps/VoloDocs). \ No newline at end of file diff --git a/docs/zh-Hans/Modules/Index.md b/docs/zh-Hans/Modules/Index.md index 8e5edf35b6..e6f08d5451 100644 --- a/docs/zh-Hans/Modules/Index.md +++ b/docs/zh-Hans/Modules/Index.md @@ -14,7 +14,7 @@ ABP是一个 **模块化的应用程序框架** 由十多个 **nuget packages** * **Account**: 用于用户登录/注册应用程序. * **Audit Logging**: 用于将审计日志持久化到数据库. * **Background Jobs**: 用于在使用默认后台作业管理器时保存后台作业. -* **Blogging**: 用于创建精美的博客. ABP的[博客](https://abp.io/blog/abp/) 就使用了此模块. +* **Blogging**: 用于创建精美的博客. ABP的[博客](https://blog.abp.io/) 就使用了此模块. * [**Docs**](Docs.md): 用于创建技术文档页面. ABP的[文档](https://abp.io/documents/) 就使用了此模块. * **Identity**: 用于管理角色,用户和他们的权限. * **Identity Server**: 集成了IdentityServer4. diff --git a/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-I.md b/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-I.md index f9314e5030..5394890f8d 100644 --- a/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-I.md +++ b/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-I.md @@ -50,6 +50,18 @@ 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; + } } } ```` @@ -349,7 +361,7 @@ successfully created the book with id: f3f03580-c1aa-d6a9-072d-39e75c69f5c7 ```` * 此代码更改了Razor View Page Model的默认继承,因此它从`BookStorePage`类(而不是`PageModel`)继承.启动模板附带的`BookStorePage`类,提供所有页面使用的一些共享属性/方法. -* 确保`IndexModel`(Index.cshtml.cs)具有`Acme.BookStore.Pages.Books`命名空间,或者在`Index.cshtml`中更新它. +* 确保`IndexModel`(Index.cshtml.cs)具有`Acme.BookStore.Web.Pages.Books`命名空间,或者在`Index.cshtml`中更新它. #### 将Books页面添加到主菜单 @@ -426,7 +438,7 @@ context.Menu.AddItem( ```` * `abp-script` [tag helper](https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/intro)用于将外部的 **脚本** 添加到页面中.它比标准的`script`标签多了很多额外的功能.它可以处理 **最小化**和 **版本**.查看[捆绑 & 压缩文档](../../AspNetCore/Bundling-Minification.md)获取更多信息. -* `abp-card` 和 `abp-table` 是为Twitter Bootstrap的[card component](http://getbootstrap.com/docs/4.1/components/card/)封装的 **tag helpers**.ABP中有很多tag helpers,可以很方便的使用大多数[bootstrap](https://getbootstrap.com/)组件.你也可以使用原生的HTML标签代替tag helpers.使用tag helper可以通过智能提示和编译时类型检查减少HTML代码并防止错误.查看[tag helpers 文档](../../AspNetCore/Tag-Helpers.md). +* `abp-card` 和 `abp-table` 是为Twitter Bootstrap的[card component](http://getbootstrap.com/docs/4.1/components/card/)封装的 **tag helpers**.ABP中有很多tag helpers,可以很方便的使用大多数[bootstrap](https://getbootstrap.com/)组件.你也可以使用原生的HTML标签代替tag helpers.使用tag helper可以通过智能提示和编译时类型检查减少HTML代码并防止错误.查看[tag helpers 文档](../../AspNetCore/Tag-Helpers/Index.md). * 你可以像上面本地化菜单一样 **本地化** 列名. #### 添加脚本文件 diff --git a/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-III.md b/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-III.md index 5bbe0e3424..e48cf6b710 100644 --- a/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-III.md +++ b/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-III.md @@ -56,26 +56,12 @@ 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/docs/zh-Hans/images/auditlog-object-diagram.png b/docs/zh-Hans/images/auditlog-object-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..a7e86a2bb214f27b93032292f78d8d24eedf2fca GIT binary patch literal 29134 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 Date: Fri, 14 Feb 2020 11:03:37 +0300 Subject: [PATCH 388/411] Update AspNet-Boilerplate-Migration-Guide.md --- docs/en/AspNet-Boilerplate-Migration-Guide.md | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/docs/en/AspNet-Boilerplate-Migration-Guide.md b/docs/en/AspNet-Boilerplate-Migration-Guide.md index 0a2b3b17b3..b47bb521e0 100644 --- a/docs/en/AspNet-Boilerplate-Migration-Guide.md +++ b/docs/en/AspNet-Boilerplate-Migration-Guide.md @@ -488,6 +488,85 @@ public class TaskAppService : ITaskAppService You inject the `ILogger` instead of the `ILogger`. +### Object to Object Mapping + +#### IObjectMapper Service + +ASP.NET Boilerplate defines an `IObjectMapper` service ([see](https://aspnetboilerplate.com/Pages/Documents/Object-To-Object-Mapping)) and has an integration to the [AutoMapper](https://automapper.org/) library. + +Example usage: Create a `User` object with the given `CreateUserInput` object: + +````csharp +public void CreateUser(CreateUserInput input) +{ + var user = ObjectMapper.Map(input); + ... +} +```` + +Example: Update an existing `User` properties with the given `UpdateUserInput` object: + +````csharp +public async Task UpdateUserAsync(Guid id, UpdateUserInput input) +{ + var user = await _userRepository.GetAsync(id); + ObjectMapper.Map(input, user); +} +```` + +ABP Framework has the same `IObjectMapper` service ([see](Object-To-Object-Mapping.md)) and the AutoMapper integration with a slightly different mapping methods. + +Example usage: Create a `User` object with the given `CreateUserInput` object: + +````csharp +public void CreateUser(CreateUserInput input) +{ + var user = ObjectMapper.Map(input); +} +```` + +This time you need to explicitly declare the source type and target type (while ASP.NET Boilerplate was requiring only the target type). + +Example: Update an existing `User` properties with the given `UpdateUserInput` object: + +````csharp +public async Task UpdateUserAsync(Guid id, UpdateUserInput input) +{ + var user = await _userRepository.GetAsync(id); + ObjectMapper.Map(input, user); +} +```` + +Again, ABP Framework expects to explicitly set the source and target types. + +#### AutoMapper Integration + +##### Auto Mapping Attributes + +ASP.NET Boilerplate has `AutoMapTo`, `AutoMapFrom` and `AutoMap` attributes to automatically create mappings for the declared types. Example: + +````csharp +[AutoMapTo(typeof(User))] +public class CreateUserInput +{ + public string Name { get; set; } + public string Surname { get; set; } + ... +} +```` + +ABP Framework has no such attributes, because AutoMapper as a [similar attribute](https://automapper.readthedocs.io/en/latest/Attribute-mapping.html) now. You need to switch to AutoMapper's attribute. + +##### Mapping Definitions + +ABP Framework follows AutoMapper principles closely. You can define classes derived from the `Profile` class to define your mappings. + +##### Configuration Validation + +Configuration validation is a best practice for the AutoMapper to maintain your mapping configuration in a safe way. + +See [the documentation](Object-To-Object-Mapping.md) for more information related to the object mapping. + ### Setting Management #### Defining the Settings From ed7098faec496bcbb3bffbcf0821420f7b971442 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 14 Feb 2020 11:32:25 +0300 Subject: [PATCH 389/411] Add Event Bus --- docs/en/AspNet-Boilerplate-Migration-Guide.md | 15 +++++++++++++++ .../Volo/Abp/EventBus/Local/ILocalEventHandler.cs | 1 + 2 files changed, 16 insertions(+) diff --git a/docs/en/AspNet-Boilerplate-Migration-Guide.md b/docs/en/AspNet-Boilerplate-Migration-Guide.md index b47bb521e0..8aec88336a 100644 --- a/docs/en/AspNet-Boilerplate-Migration-Guide.md +++ b/docs/en/AspNet-Boilerplate-Migration-Guide.md @@ -593,6 +593,21 @@ ASP.NET Boilerplate has a static `Clock` service ([see](https://aspnetboilerplat ABP Framework has the `IClock` service ([see](Clock.md)) which has a similar goal, but now you need to inject it whenever you need it. +### Event Bus + +ASP.NET Boilerplate has an in-process event bus system. You typically inject the `IEventBus` (or use the static instance `EventBus.Default`) to trigger an event. It automatically triggers events for entity changes (like `EntityCreatingEventData` and `EntityUpdatedEventData`). You create a class by implementing the `IEventHandler` interface. + +ABP Framework separates the event bus into two services: `ILocalEventBus` and `IDistributedEventBus`. + +The local event bus is similar to the event bus of the ASP.NET Boilerplate while the distributed event bus is new feature introduced in the ABP Framework. + +So, to migrate your code; + +* Use the `ILocalEventBus` instead of the `IEventBus`. +* Implement the `ILocalEventHandler` instead of the `IEventHandler`. + +> Note that ABP Framework has also an `IEventBus` interface, but it does exists to be a common interface for the local and distributed event bus. It is not injected and directly used. + ## Missing Features The following features are not present for the ABP Framework. Here, a list of major missing features (and the related issue for that feature waiting on the ABP Framework GitHub repository): diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/ILocalEventHandler.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/ILocalEventHandler.cs index e3501294be..006097825c 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/ILocalEventHandler.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/ILocalEventHandler.cs @@ -2,6 +2,7 @@ using System.Threading.Tasks; namespace Volo.Abp.EventBus { + //TODO: Move to the right namespace in v3.0 public interface ILocalEventHandler : IEventHandler { ///

    From 3cfe67c5e47b982414effe95a427176ac6e83429 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 14 Feb 2020 13:10:52 +0300 Subject: [PATCH 390/411] Added sections to the migration guide. --- docs/en/AspNet-Boilerplate-Migration-Guide.md | 40 +++++++++++++++++++ docs/en/Features.md | 3 ++ docs/en/Modules/Feature-Management.md | 3 ++ docs/en/Modules/Index.md | 1 + 4 files changed, 47 insertions(+) create mode 100644 docs/en/Features.md create mode 100644 docs/en/Modules/Feature-Management.md diff --git a/docs/en/AspNet-Boilerplate-Migration-Guide.md b/docs/en/AspNet-Boilerplate-Migration-Guide.md index 8aec88336a..190e11769f 100644 --- a/docs/en/AspNet-Boilerplate-Migration-Guide.md +++ b/docs/en/AspNet-Boilerplate-Migration-Guide.md @@ -38,6 +38,10 @@ We also suggest you to compare the features of two products based on your needs. If you have an ASP.NET Zero based solution and want to migrate to the ABP Commercial, this guide will also help you. +### ASP.NET MVC 5.x Projects + +The ABP Framework doesn't support ASP.NET MVC 5.x, it only works with ASP.NET Core. So, if you migrate your ASP.NET MVC 5.x based projects, you will also deal with the .NET Core migration. + ## The Migration Progress We've designed the ABP Framework by **getting the best parts** of the ASP.NET Boilerplate framework, so it will be familiar to you if you've developed ASP.NET Boilerplate based applications. @@ -608,11 +612,47 @@ So, to migrate your code; > Note that ABP Framework has also an `IEventBus` interface, but it does exists to be a common interface for the local and distributed event bus. It is not injected and directly used. +### Feature Management + +Feature system is used in multi-tenant applications to define features of your application check if given feature is available for the current tenant. + +#### Defining Features + +In the ASP.NET Boilerplate ([see](https://aspnetboilerplate.com/Pages/Documents/Feature-Management)), you create a class inheriting from the `FeatureProvider`, override the `SetFeatures` method and add your class to the `Configuration.Features.Providers` list. + +In the ABP Framework ([see](Features.md)), you derive your class from the `FeatureDefinitionProvider` and override the `Define` method. No need to add your class to the configuration, it is automatically discovered by the framework. + +#### Checking Features + +You can continue to use the `RequiresFeature` attribute and `IFeatureChecker` service to check if a feature is enabled for the current tenant. + +#### Changing the Feature Values + +In the ABP Framework you use the `IFeatureManager` to change a feature value for a tenant. + +### Audit Logging + +TODO + +### Localization + +TODO + +### Navigation + +TODO + +### Background Jobs & Workers + +TODO + ## Missing Features The following features are not present for the ABP Framework. Here, a list of major missing features (and the related issue for that feature waiting on the ABP Framework GitHub repository): * [Multi-Lingual Entities](https://aspnetboilerplate.com/Pages/Documents/Multi-Lingual-Entities) ([#1754](https://github.com/abpframework/abp/issues/1754)) +* [Real time notification system](https://aspnetboilerplate.com/Pages/Documents/Notification-System) ([#633](https://github.com/abpframework/abp/issues/633)) +* [NHibernate Integration](https://aspnetboilerplate.com/Pages/Documents/NHibernate-Integration) ([#339](https://github.com/abpframework/abp/issues/339)) - We don't intent to work on this, but any community contribution welcome. * ...TODO Most of these features will eventually be implemented. However, you can implement them yourself if they are important for you. If you want, you can [contribute](Contribution/Index.md) to the framework by implementing these yourself. \ No newline at end of file diff --git a/docs/en/Features.md b/docs/en/Features.md new file mode 100644 index 0000000000..4b31ca16e9 --- /dev/null +++ b/docs/en/Features.md @@ -0,0 +1,3 @@ +# Features + +TODO \ No newline at end of file diff --git a/docs/en/Modules/Feature-Management.md b/docs/en/Modules/Feature-Management.md new file mode 100644 index 0000000000..5c41277dd8 --- /dev/null +++ b/docs/en/Modules/Feature-Management.md @@ -0,0 +1,3 @@ +# Feature Management Module + +TODO \ No newline at end of file diff --git a/docs/en/Modules/Index.md b/docs/en/Modules/Index.md index 812f22e8dd..2ffb509667 100644 --- a/docs/en/Modules/Index.md +++ b/docs/en/Modules/Index.md @@ -16,6 +16,7 @@ There are some **free and open source** application modules developed and mainta * **Background Jobs**: Persist background jobs when using the default background job manager. * **Blogging**: Used to create fancy blogs. ABP's [own blog](https://blog.abp.io/) already using this module. * [**Docs**](Docs.md): Used to create technical documentation pages. ABP's [own documentation](https://docs.abp.io) already using this module. +* **Feature Management**: Used to persist and manage the [features](../Features.md). * **Identity**: Manages roles, users and their permissions, based on the Microsoft Identity library. * **IdentityServer**: Integrates to IdentityServer4. * **Permission Management**: Used to persist permissions. From e32e43eaed0ca9c6f2b9013ecb463b0689b780e8 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Fri, 14 Feb 2020 14:38:46 +0300 Subject: [PATCH 391/411] closes #2831. Use ` abp login MyUsername -p MyPassword` --- .../Volo/Abp/Cli/Commands/LoginCommand.cs | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs index fe9ed2d98f..32bc6671bf 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs @@ -33,15 +33,19 @@ namespace Volo.Abp.Cli.Commands ); } - Console.Write("Password: "); - var password = ConsoleHelper.ReadSecret(); - if (password.IsNullOrWhiteSpace()) + var password = commandLineArgs.Options.GetOrNull(Options.Password.Short, Options.Password.Long); + if (password == null) { - throw new CliUsageException( - "Password is missing!" + - Environment.NewLine + Environment.NewLine + - GetUsageInfo() - ); + Console.Write("Password: "); + password = ConsoleHelper.ReadSecret(); + if (password.IsNullOrWhiteSpace()) + { + throw new CliUsageException( + "Password is missing!" + + Environment.NewLine + Environment.NewLine + + GetUsageInfo() + ); + } } await AuthService.LoginAsync( @@ -60,10 +64,12 @@ namespace Volo.Abp.Cli.Commands sb.AppendLine(""); sb.AppendLine("Usage:"); sb.AppendLine(" abp login "); + sb.AppendLine(" abp login -p "); sb.AppendLine(""); sb.AppendLine("Example:"); sb.AppendLine(""); sb.AppendLine(" abp login john"); + sb.AppendLine(" abp login john -p 1234"); sb.AppendLine(""); sb.AppendLine("See the documentation for more info: https://docs.abp.io/en/abp/latest/CLI"); @@ -82,6 +88,12 @@ namespace Volo.Abp.Cli.Commands public const string Short = "o"; public const string Long = "organization"; } + + public static class Password + { + public const string Short = "p"; + public const string Long = "password"; + } } } } \ No newline at end of file From 43a11ed8532f3640735313f486db7fa09ae193ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 14 Feb 2020 17:03:31 +0300 Subject: [PATCH 392/411] Resolved #2120: ASP.NET Boilerplate 5.x to ABP 1.x migration guide --- docs/en/AspNet-Boilerplate-Migration-Guide.md | 94 +++++++++++++++++-- docs/en/docs-nav.json | 4 + 2 files changed, 89 insertions(+), 9 deletions(-) diff --git a/docs/en/AspNet-Boilerplate-Migration-Guide.md b/docs/en/AspNet-Boilerplate-Migration-Guide.md index 190e11769f..d47b266839 100644 --- a/docs/en/AspNet-Boilerplate-Migration-Guide.md +++ b/docs/en/AspNet-Boilerplate-Migration-Guide.md @@ -632,27 +632,103 @@ In the ABP Framework you use the `IFeatureManager` to change a feature value for ### Audit Logging -TODO +The ASP.NET Boilerplate ([see](https://aspnetboilerplate.com/Pages/Documents/Audit-Logging)) and the ABP Framework ([see](Audit-Logging.md)) has similar audit logging systems. ABP Framework requires to add `UseAuditing()` middleware to the ASP.NET Core pipeline, which is already added in the startup templates. So, most of the times it will be work out of the box. ### Localization -TODO +ASP.NET Boilerplate supports XML and JSON files to define the localization key-values for the UI ([see](https://aspnetboilerplate.com/Pages/Documents/Localization)). ABP Framework only supports the JSON formatter localization files ([see](Localization.md)). So, you need to convert your XML file to JSON. -### Navigation +The ASP.NET Boilerplate has its own the `ILocalizationManager` service to be injected and used for the localization in the server side. -TODO +The ABP Framework uses [Microsoft localization extension](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization) library, so it is completely integrated to ASP.NET Core. You use the `IStringLocalizer` service to get a localized text. Example: -### Background Jobs & Workers +````csharp +public class MyService +{ + private readonly IStringLocalizer _localizer; + + public MyService(IStringLocalizer localizer) + { + _localizer = localizer; + } + + public void Foo() + { + var str = _localizer["HelloWorld"]; //Get a localized text + } +} +```` + +So, you need to replace `ILocalizationManager` usage by the `IStringLocalizer`. + +It also provides API used in the client side: + +````js +var testResource = abp.localization.getResource('Test'); +var str = testResource('HelloWorld'); +```` + +It was like `abp.localization.localize(...)` in the ASP.NET Boilerplate. + +### Navigation vs Menu + +In ASP.NET you create a class deriving from the `NavigationProvider` to define your menu elements. Menu items has `requiredPermissionName` attributes to restrict access to a menu element. Menu items were static and your class is executed only one time. + +Int the ABP Framework you need to create a class implements the `IMenuContributor` interface. Your class is executed whenever the menu needs to be rendered. So, you can conditionally add menu items. + +As an example, this is the menu contributor of the tenant management module: + +````csharp +public class AbpTenantManagementWebMainMenuContributor : IMenuContributor +{ + public async Task ConfigureMenuAsync(MenuConfigurationContext context) + { + //Add items only to the main menu + if (context.Menu.Name != StandardMenus.Main) + { + return; + } + + //Get the standard administration menu item + var administrationMenu = context.Menu.GetAdministration(); + + //Resolve some needed services from the DI container + var authorizationService = context.ServiceProvider + .GetRequiredService(); + var l = context.ServiceProvider + .GetRequiredService>(); + + var tenantManagementMenuItem = new ApplicationMenuItem( + TenantManagementMenuNames.GroupName, + l["Menu:TenantManagement"], + icon: "fa fa-users"); + + administrationMenu.AddItem(tenantManagementMenuItem); + + //Conditionally add the "Tenants" menu item based on the permission + if (await authorizationService + .IsGrantedAsync(TenantManagementPermissions.Tenants.Default)) + { + tenantManagementMenuItem.AddItem( + new ApplicationMenuItem( + TenantManagementMenuNames.Tenants, + l["Tenants"], + url: "/TenantManagement/Tenants")); + } + } +} +```` + +So, you need to check permission using the `IAuthorizationService` if you want to show a menu item only when the user has the related permission. -TODO +> Navigation/Menu system is only for ASP.NET Core MVC / Razor Pages applications. Angular applications has a different system implemented in the startup templates. ## Missing Features -The following features are not present for the ABP Framework. Here, a list of major missing features (and the related issue for that feature waiting on the ABP Framework GitHub repository): +The following features are not present for the ABP Framework. Here, a list of some major missing features (and the related issue for that feature waiting on the ABP Framework GitHub repository): * [Multi-Lingual Entities](https://aspnetboilerplate.com/Pages/Documents/Multi-Lingual-Entities) ([#1754](https://github.com/abpframework/abp/issues/1754)) * [Real time notification system](https://aspnetboilerplate.com/Pages/Documents/Notification-System) ([#633](https://github.com/abpframework/abp/issues/633)) * [NHibernate Integration](https://aspnetboilerplate.com/Pages/Documents/NHibernate-Integration) ([#339](https://github.com/abpframework/abp/issues/339)) - We don't intent to work on this, but any community contribution welcome. -* ...TODO -Most of these features will eventually be implemented. However, you can implement them yourself if they are important for you. If you want, you can [contribute](Contribution/Index.md) to the framework by implementing these yourself. \ No newline at end of file +Some of these features will eventually be implemented. However, you can implement them yourself if they are important for you. If you want, you can [contribute](Contribution/Index.md) to the framework, it is appreciated. \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index eb4ef13b8d..cbb4c80e72 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -49,6 +49,10 @@ } ] }, + { + "text": "ASP.NET Boilerplate Migration Guide", + "path": "AspNet-Boilerplate-Migration-Guide.md" + }, { "text": "CLI", "path": "CLI.md" From fc8d34eae94bb628ea170321fe8236fa4eb73b9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 14 Feb 2020 19:33:29 +0300 Subject: [PATCH 393/411] Refactor and improvements for #2807 --- .../Volo/Abp/Domain/Entities/EntityHelper.cs | 21 ------- .../Abp/Domain/Repositories/RepositoryBase.cs | 1 + .../Repositories/RepositoryExtensions.cs | 61 +++++++++++++------ .../UnitOfWorkExtensionDataTypes.cs | 11 ---- .../Repositories/UnitOfWorkItemNames.cs | 7 +++ .../EntityFrameworkCore/EfCoreRepository.cs | 4 +- .../Abp/EntityFrameworkCore/AbpDbContext.cs | 40 ++++++------ .../Repositories/MongoDB/MongoDbRepository.cs | 23 ++----- .../Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs | 1 + .../Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs | 8 +-- .../Abp/TestApp/Testing/HardDelete_Tests.cs | 55 ++++++++--------- 11 files changed, 105 insertions(+), 127 deletions(-) delete mode 100644 framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/UnitOfWorkExtensionDataTypes.cs create mode 100644 framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/UnitOfWorkItemNames.cs diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs index cce1e9c18f..a33c5f56ec 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs @@ -112,26 +112,5 @@ namespace Volo.Abp.Domain.Entities idProperty.SetValue(entity, idFactory()); } - - public static object GetEntityId(object entity) - { - if (!IsEntity(entity.GetType())) - { - throw new AbpException(entity.GetType() + " is not an Entity !"); - } - - return ReflectionHelper.GetValueByPath(entity, entity.GetType(), "Id"); - } - public static string GetHardDeleteKey(object entity, string tenantId) - { - //if (entity is IMultiTenant) // IsMultiTenantEntity - if (typeof(IMultiTenant).IsAssignableFrom(entity.GetType())) - { - var tenantIdString = !string.IsNullOrEmpty(tenantId) ? tenantId : "null"; - return entity.GetType().FullName + ";TenantId=" + tenantIdString + ";Id=" + GetEntityId(entity); - } - - return entity.GetType().FullName + ";Id=" + GetEntityId(entity); - } } } diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs index b908827a98..3ade403017 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs @@ -18,6 +18,7 @@ namespace Volo.Abp.Domain.Repositories public IDataFilter DataFilter { get; set; } public ICurrentTenant CurrentTenant { get; set; } + public IUnitOfWorkManager UnitOfWorkManager { get; set; } public virtual Type ElementType => GetQueryable().ElementType; diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs index 9a2bc147af..ef44d6830d 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; @@ -44,31 +43,55 @@ namespace Volo.Abp.Domain.Repositories } } - public static async Task HardDeleteAsync(this IRepository repository, TEntity entity) - where TEntity : class, IEntity, ISoftDelete + public static async Task HardDeleteAsync( + this IBasicRepository repository, + TEntity entity, + bool autoSave = false, + CancellationToken cancellationToken = default + ) + where TEntity : class, IEntity, ISoftDelete { - var repo = ProxyHelper.UnProxy(repository) as IRepository; - if (repo != null) + if (!(ProxyHelper.UnProxy(repository) is IUnitOfWorkManagerAccessor unitOfWorkManagerAccessor)) { - var uow = ((IUnitOfWorkManagerAccessor)repo).UnitOfWorkManager; - var baseRepository = ((RepositoryBase)repo); - - var items = ((IUnitOfWorkManagerAccessor)repo).UnitOfWorkManager.Current.Items; - var hardDeleteEntities = items.GetOrAdd(UnitOfWorkExtensionDataTypes.HardDelete, () => new HashSet()) as HashSet; + throw new AbpException($"The given repository (of type {repository.GetType().AssemblyQualifiedName}) should implement the {typeof(IUnitOfWorkManagerAccessor).AssemblyQualifiedName} interface in order to invoke the {nameof(HardDeleteAsync)} method!"); + } - var hardDeleteKey = EntityHelper.GetHardDeleteKey(entity, baseRepository.CurrentTenant?.Id?.ToString()); - hardDeleteEntities.Add(hardDeleteKey); + var uowManager = unitOfWorkManagerAccessor.UnitOfWorkManager; + if (uowManager == null) + { + throw new AbpException($"{nameof(unitOfWorkManagerAccessor.UnitOfWorkManager)} property of the given {nameof(repository)} object is null!"); + } - await repo.DeleteAsync(entity); + if (uowManager.Current == null) + { + using (var uow = uowManager.Begin()) + { + await HardDeleteWithUnitOfWorkAsync(repository, entity, autoSave, cancellationToken, uowManager.Current); + await uow.CompleteAsync(cancellationToken); + } } - } - public static async Task HardDeleteAsync(this IRepository repository, Expression> predicate) - where TEntity : class, IEntity, ISoftDelete - { - foreach (var entity in repository.Where(predicate).ToList()) + else { - await repository.HardDeleteAsync(entity); + await HardDeleteWithUnitOfWorkAsync(repository, entity, autoSave, cancellationToken, uowManager.Current); } } + + private static async Task HardDeleteWithUnitOfWorkAsync( + IBasicRepository repository, + TEntity entity, + bool autoSave, + CancellationToken cancellationToken, IUnitOfWork currentUow + ) + where TEntity : class, IEntity, ISoftDelete + { + var hardDeleteEntities = (HashSet) currentUow.Items.GetOrAdd( + UnitOfWorkItemNames.HardDeletedEntities, + () => new HashSet() + ); + + hardDeleteEntities.Add(entity); + + await repository.DeleteAsync(entity, autoSave, cancellationToken); + } } } diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/UnitOfWorkExtensionDataTypes.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/UnitOfWorkExtensionDataTypes.cs deleted file mode 100644 index a95aca42c0..0000000000 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/UnitOfWorkExtensionDataTypes.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Volo.Abp.Domain.Repositories -{ - public class UnitOfWorkExtensionDataTypes - { - public static string HardDelete { get; } = "HardDelete"; - } -} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/UnitOfWorkItemNames.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/UnitOfWorkItemNames.cs new file mode 100644 index 0000000000..4ec067ceec --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/UnitOfWorkItemNames.cs @@ -0,0 +1,7 @@ +namespace Volo.Abp.Domain.Repositories +{ + public static class UnitOfWorkItemNames + { + public const string HardDeletedEntities = "AbpHardDeletedEntities"; + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs index 6c3eb689d8..106e00f77a 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs @@ -80,7 +80,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore { return includeDetails ? await WithDetails().ToListAsync(GetCancellationToken(cancellationToken)) - : await DbSet.ToListAsync(GetCancellationToken(cancellationToken)); + : await DbSet.ToListAsync(GetCancellationToken(cancellationToken)); } public override async Task GetCountAsync(CancellationToken cancellationToken = default) @@ -208,7 +208,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore { return includeDetails ? await WithDetails().FirstOrDefaultAsync(e => e.Id.Equals(id), GetCancellationToken(cancellationToken)) - : await DbSet.FindAsync(new object[] { id }, GetCancellationToken(cancellationToken)); + : await DbSet.FindAsync(new object[] {id}, GetCancellationToken(cancellationToken)); } public virtual async Task DeleteAsync(TKey id, bool autoSave = false, CancellationToken cancellationToken = default) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index 4e2f4c0d51..ba9cee70ee 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -50,6 +50,7 @@ namespace Volo.Abp.EntityFrameworkCore public IEntityHistoryHelper EntityHistoryHelper { get; set; } public IAuditingManager AuditingManager { get; set; } + public IUnitOfWorkManager UnitOfWorkManager { get; set; } public IClock Clock { get; set; } @@ -199,37 +200,24 @@ namespace Volo.Abp.EntityFrameworkCore protected virtual void ApplyAbpConceptsForDeletedEntity(EntityEntry entry, EntityChangeReport changeReport) { - if (IsHardDeleteEntity(entry)) + if (TryCancelDeletionForSoftDelete(entry)) { - changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Deleted)); - return; + UpdateConcurrencyStamp(entry); + SetDeletionAuditProperties(entry); } - CancelDeletionForSoftDelete(entry); - UpdateConcurrencyStamp(entry); - SetDeletionAuditProperties(entry); + changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Deleted)); } - protected virtual bool IsHardDeleteEntity(EntityEntry entry) + protected virtual bool IsHardDeleted(EntityEntry entry) { - if (UnitOfWorkManager?.Current?.Items == null) - { - return false; - } - - if (!UnitOfWorkManager.Current.Items.ContainsKey(UnitOfWorkExtensionDataTypes.HardDelete)) + var hardDeletedEntities = UnitOfWorkManager?.Current?.Items.GetOrDefault(UnitOfWorkItemNames.HardDeletedEntities) as HashSet; + if (hardDeletedEntities == null) { return false; } - var hardDeleteItems = UnitOfWorkManager.Current.Items[UnitOfWorkExtensionDataTypes.HardDelete]; - if (!(hardDeleteItems is HashSet objects)) - { - return false; - } - string hardDeleteKey = EntityHelper.GetHardDeleteKey(entry.Entity, CurrentTenantId?.ToString()); - - return objects.Contains(hardDeleteKey); + return hardDeletedEntities.Contains(entry.Entity); } protected virtual void AddDomainEvents(EntityChangeReport changeReport, object entityAsObj) @@ -283,16 +271,22 @@ namespace Volo.Abp.EntityFrameworkCore entity.ConcurrencyStamp = Guid.NewGuid().ToString("N"); } - protected virtual void CancelDeletionForSoftDelete(EntityEntry entry) + protected virtual bool TryCancelDeletionForSoftDelete(EntityEntry entry) { if (!(entry.Entity is ISoftDelete)) { - return; + return false; + } + + if (IsHardDeleted(entry)) + { + return false; } entry.Reload(); entry.State = EntityState.Modified; entry.Entity.As().IsDeleted = true; + return true; } protected virtual void CheckAndSetId(EntityEntry entry) diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs index b827292702..3333f1d505 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs @@ -111,7 +111,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB await ApplyAbpConceptsForDeletedEntityAsync(entity); var oldConcurrencyStamp = SetNewConcurrencyStamp(entity); - if (entity is ISoftDelete softDeleteEntity && !IsHardDeleteEntity(entity)) + if (entity is ISoftDelete softDeleteEntity && !IsHardDeleted(entity)) { softDeleteEntity.IsDeleted = true; var result = await Collection.ReplaceOneAsync( @@ -175,32 +175,21 @@ namespace Volo.Abp.Domain.Repositories.MongoDB Collection.AsQueryable() ); } - protected virtual bool IsHardDeleteEntity(TEntity entry) + protected virtual bool IsHardDeleted(TEntity entity) { - if (UnitOfWorkManager?.Current?.Items == null) + var hardDeletedEntities = UnitOfWorkManager?.Current?.Items.GetOrDefault(UnitOfWorkItemNames.HardDeletedEntities) as HashSet; + if (hardDeletedEntities == null) { return false; } - if (!UnitOfWorkManager.Current.Items.ContainsKey(UnitOfWorkExtensionDataTypes.HardDelete)) - { - return false; - } - - var hardDeleteItems = UnitOfWorkManager.Current.Items[UnitOfWorkExtensionDataTypes.HardDelete]; - if (!(hardDeleteItems is HashSet objects)) - { - return false; - } - string hardDeleteKey = EntityHelper.GetHardDeleteKey(entry, CurrentTenant?.Id.ToString()); - - return objects.Contains(hardDeleteKey); + return hardDeletedEntities.Contains(entity); } protected virtual FilterDefinition CreateEntityFilter(TEntity entity, bool withConcurrencyStamp = false, string concurrencyStamp = null) { throw new NotImplementedException( - $"{nameof(CreateEntityFilter)} is not implemented for MongoDB by default. It should be overrided and implemented by the deriving class!" + $"{nameof(CreateEntityFilter)} is not implemented for MongoDB by default. It should be overriden and implemented by the deriving class!" ); } diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs index 97fd81372b..ee5baa58bc 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs @@ -9,6 +9,7 @@ namespace Volo.Abp.Uow public interface IUnitOfWork : IDatabaseApiContainer, ITransactionApiContainer, IDisposable { Guid Id { get; } + Dictionary Items { get; } //TODO: Switch to OnFailed (sync) and OnDisposed (sync) methods to be compatible with OnCompleted diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs index c494bfdfe6..05f49df180 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Collections.Immutable; using System.Threading; using System.Threading.Tasks; +using JetBrains.Annotations; using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; @@ -31,6 +32,7 @@ namespace Volo.Abp.Uow public IServiceProvider ServiceProvider { get; } + [NotNull] public Dictionary Items { get; } private readonly Dictionary _databaseApis; @@ -48,6 +50,7 @@ namespace Volo.Abp.Uow _databaseApis = new Dictionary(); _transactionApis = new Dictionary(); + Items = new Dictionary(); } @@ -320,10 +323,5 @@ namespace Volo.Abp.Uow { return $"[UnitOfWork {Id}]"; } - - public Dictionary GetHardDeleteItems() - { - return Items; - } } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/HardDelete_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/HardDelete_Tests.cs index 9d0430e968..1eac79fd7c 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/HardDelete_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/HardDelete_Tests.cs @@ -1,7 +1,5 @@ using Shouldly; using System; -using System.Collections.Generic; -using System.Text; using System.Threading.Tasks; using Volo.Abp.Data; using Volo.Abp.Domain.Repositories; @@ -15,58 +13,57 @@ namespace Volo.Abp.TestApp.Testing public abstract class HardDelete_Tests : TestAppTestBase where TStartupModule : IAbpModule { - protected readonly IRepository _personRepository; + protected readonly IRepository PersonRepository; protected readonly IDataFilter DataFilter; - protected readonly IUnitOfWorkManager _unitOfWorkManager; - public HardDelete_Tests() + protected readonly IUnitOfWorkManager UnitOfWorkManager; + + protected HardDelete_Tests() { - _personRepository = GetRequiredService>(); + PersonRepository = GetRequiredService>(); DataFilter = GetRequiredService(); - _unitOfWorkManager = GetRequiredService(); + UnitOfWorkManager = GetRequiredService(); } + [Fact] - public async Task Should_HardDelete_Entity_With_Collection() + public async Task Should_HardDelete_Entities() { - using (var uow = _unitOfWorkManager.Begin()) - { - using (DataFilter.Disable()) - { - var douglas = await _personRepository.FindAsync(TestDataBuilder.UserDouglasId); - await _personRepository.HardDeleteAsync(x => x.Id == TestDataBuilder.UserDouglasId); - await uow.CompleteAsync(); - } + var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId); + await PersonRepository.HardDeleteAsync(douglas); - var deletedDougles = await _personRepository.FindAsync(TestDataBuilder.UserDouglasId); - deletedDougles.ShouldBeNull(); - } + douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); + douglas.ShouldBeNull(); } + [Fact] public async Task Should_HardDelete_Soft_Deleted_Entities() { - var douglas = await _personRepository.GetAsync(TestDataBuilder.UserDouglasId); - await _personRepository.DeleteAsync(douglas); + var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId); + await PersonRepository.DeleteAsync(douglas); - douglas = await _personRepository.FindAsync(TestDataBuilder.UserDouglasId); + douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); douglas.ShouldBeNull(); using (DataFilter.Disable()) { - douglas = await _personRepository.FindAsync(TestDataBuilder.UserDouglasId); + douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); douglas.ShouldNotBeNull(); douglas.IsDeleted.ShouldBeTrue(); douglas.DeletionTime.ShouldNotBeNull(); } - using (var uow = _unitOfWorkManager.Begin()) + + using (var uow = UnitOfWorkManager.Begin()) { using (DataFilter.Disable()) { - douglas = await _personRepository.GetAsync(TestDataBuilder.UserDouglasId); - await _personRepository.HardDeleteAsync(douglas); - await uow.CompleteAsync(); - var deletedDougles = await _personRepository.FindAsync(TestDataBuilder.UserDouglasId); - deletedDougles.ShouldBeNull(); + douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId); } + + await PersonRepository.HardDeleteAsync(douglas); + await uow.CompleteAsync(); } + + douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); + douglas.ShouldBeNull(); } } } From 0325126eb33cac41983a6b692cc69d9fa8ab3c5e Mon Sep 17 00:00:00 2001 From: maliming Date: Sat, 15 Feb 2020 17:17:18 +0800 Subject: [PATCH 394/411] Only the latest version (dev) of the document needs to update the cache. --- .../Volo/Docs/Documents/DocumentAppService.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs index 1dc43a4e0b..f4ae3a9158 100644 --- a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs +++ b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs @@ -178,9 +178,16 @@ namespace Volo.Docs.Documents } var document = await _documentRepository.FindAsync(project.Id, documentName, languageCode, version); + if (document == null) + { + return await GetDocumentAsync(); + } - //TODO: Configurable cache time? - if (document == null || document.LastCachedTime + TimeSpan.FromDays(30) < DateTime.Now) + //Only the latest version (dev) of the document needs to update the cache. + if (!project.LatestVersionBranchName.IsNullOrWhiteSpace() && + document.Version == project.LatestVersionBranchName && + //TODO: Configurable cache time? + document.LastCachedTime + TimeSpan.FromHours(2) < DateTime.Now) { return await GetDocumentAsync(); } From 2f6a29c481f198bb4b837eb512ff0c5cdef4e744 Mon Sep 17 00:00:00 2001 From: liangshiw Date: Sat, 15 Feb 2020 17:45:56 +0800 Subject: [PATCH 395/411] Translate audit-logging document --- docs/zh-Hans/Audit-Logging.md | 374 ++++++++++++++++++++++++++++++++++ docs/zh-Hans/docs-nav.json | 9 +- 2 files changed, 381 insertions(+), 2 deletions(-) create mode 100644 docs/zh-Hans/Audit-Logging.md diff --git a/docs/zh-Hans/Audit-Logging.md b/docs/zh-Hans/Audit-Logging.md new file mode 100644 index 0000000000..36f80525d1 --- /dev/null +++ b/docs/zh-Hans/Audit-Logging.md @@ -0,0 +1,374 @@ +# 审计日志 + +[维基百科](https://en.wikipedia.org/wiki/Audit_trail): "*审计跟踪(也称为**审计日志**)是一种安全相关的按时间顺序记录,记录集或记录目的和来源. 这种记录提供了在任何特定时间的操作,过程或事件产生影响活动顺序的文件证据* ". + +ABP框架提供一个可扩展的**审计日志系统**,自动化的根据**约定**记录审计日志,并提供**配置**控制审计日志的级别. + +一个**审计日志对象**(参见下面的审计日志对象部分)通常是针对每个web请求创建和保存的.包括; + +* **请求和响应的细节** (如URL,HTTP方法,浏览器信息,HTTP状态代码...等). +* **执行的动作** (控制器操作和应用服务方法调用及其参数). +* **实体的变化** (在Web请求中). +* **异常信息** (如果在执行请求发生操作). +* **请求时长** (测量应用程序的性能). + +> [启动模板](Startup-Templates/Index.md)已经将审计日志系统配置为适用于大多数应用程序. 本文档介绍了对审计日志系统更精细的控制. + +## 数据库提供程序支持 + +* [Entity Framework Core](Entity-Framework-Core.md)提供程序完全支持. +* [MongoDB](MongoDB.md)提供程序不支持实体更改审计记录. 其他功能按预期工作. + +## UseAuditing() + +`UseAuditing()` 中间件应该被添加到ASP.NET Core请求管道,用于创建和保存审计日志. 如果你使用[启动模板](Startup-Templates/Index.md)创建的应用程序,它已经默认添加. + +## AbpAuditingOptions + +`AbpAuditingOptions` 是配置审计日志系统的主要[options对象](Options.md). 你可以在[模块](Module-Development-Basics.md)的 `ConfigureServices` 方法中进行配置: + +````csharp +Configure(options => +{ + options.IsEnabled = false; //Disables the auditing system +}); +```` + +这里是你可以配置的选项列表: + +* `IsEnabled` (默认值: `true`): 启用或禁用审计系统的总开关. 如果值为 `false`,则不使用其他选项. +* `HideErrors` (默认值: `true`): 在保存审计日志对象时如果发生任何错误,审计日志系统会将错误隐藏并写入常规[日志](Logging.md). 如果保存审计日志对系统非常重要那么将其设置为 `false` 以便在隐藏错误时抛出异常. +* `IsEnabledForAnonymousUsers` (默认值: `true`): 如果只想为经过身份验证的用户记录审计日志,请设置为 `false`.如果为匿名用户保存审计日志,你将看到这些用户的 `UserId` 值为 `null`. +* `IsEnabledForGetRequests` (默认值: `false`): HTTP GET请求通常不应该在数据库进行任何更改,审计日志系统不会为GET请求保存审计日志对象. 将此值设置为 `true` 可为GET请求启用审计日志系统. +* `ApplicationName`: 如果有多个应用程序保存审计日志到单一的数据库,使用此属性设置为你的应用程序名称区分不同的应用程序日志. +* `IgnoredTypes`: 审计日志系统忽略的 `Type` 列表. 如果它是实体类型,则不会保存此类型实体的更改. 在序列化操作参数时也使用此列表. +* `EntityHistorySelectors`:选择器列表,用于确定是否选择了用于保存实体更改的实体类型. 有关详细信息请参阅下面的部分. +* `Contributors`: `AuditLogContributor` 实现的列表. 贡献者是扩展审计日志系统的一种方式. 有关详细信息请参阅下面的"审计日志贡献者"部分. + +### 实体历史选择器 + +保存您的所有实体的所有变化将需要大量的数据库空间. 出于这个原因**审计日志系统不保存为实体的任何改变,除非你明确地对其进行配置**. + +要保存的所有实体的所有更改,只需使用 `AddAllEntities()` 扩展方法. + +````csharp +Configure(options => +{ + options.EntityHistorySelectors.AddAllEntities(); +}); +```` + +`options.EntityHistorySelectors` 实际上是一个类型谓词的列表,你可以写一个lambda表达式定义过滤器. + +下面的示例中与使用 `AddAllEntities()` 扩展方法效果相同: + +````csharp +Configure(options => +{ + options.EntityHistorySelectors.Add( + new NamedTypeSelector( + "MySelectorName", + type => + { + if (typeof(IEntity).IsAssignableFrom(type)) + { + return true; + } + else + { + return false; + } + } + ) + ); +}); +```` + +条件 `typeof(IEntity).IsAssignableFrom(type)` 对于任何实现 `IEntity` 接口的类(从技术上来这些都是你应用程序中的实体) 结果都为 `true` . 你可以根据自己的逻辑编写条件并返回 `true` 或 `false`. + +`options.EntityHistorySelectors` 是一种灵活动态的选择实体进行审计日志记录的方法. 另一种方法是为每个实体使用 `Audited` 和 `DisableAuditing` attribute. + +## 启用/禁用审计日志服务 + +### 启用/禁用 Controllers & Actions + +默认所有的控制器动作都会被记录下来(有关GET请求,请参阅上面的 `IsEnabledForGetRequests` ). + +你可以使用 `[DisableAuditing]` 来禁用特定的控制器: + +````csharp +[DisableAuditing] +public class HomeController : AbpController +{ + //... +} +```` + +使用 `[DisableAuditing]` 在action级别控制: + +````csharp +public class HomeController : AbpController +{ + [DisableAuditing] + public async Task Home() + { + //... + } + + public async Task OtherActionLogged() + { + //... + } +} +```` + +### 启用/禁用 应用服务&方法 + +[应用服务](Application-Services.md)也默认包含在审计日志中. 你可在服务或方法级别使用 `[DisableAuditing]`. + +#### 启用/禁用 其他服务 + +可以为任何类型的类(注册到[依赖注入](Dependency-Injection.md)并从依赖注入解析)启用审计日志,默认情况下仅对控制器和应用程序服务启用. + +对于任何需要被审计记录的类或方法都可以使用 `[Audited]` 和`IAuditingEnabled`.此外,您的类可以(直接或固有的)实现 `IAuditingEnabled` 接口以认启用该类的审计日志记录. + +### 启用/禁用 实体 & 属性 + +以下情况下实体在实体更改审计日志记录中忽略实体; + +* 如果将实体类型添加到 `AbpAuditingOptions.IgnoredTypes`(如前所述),它在审计日志系统中被完全忽略. +* 如果对象不是[实体](Entities.md)(没有直接或固有的实现 `IEntity` - 所有实体默认实现这个接口). +* 如果实体访问级别不是public的. + +你可以使用 `Audited` 来启用实体更改审计日志: + +````csharp +[Audited] +public class MyEntity : Entity +{ + //... +} +```` + +或者禁用实体: + +````csharp +[DisableAuditing] +public class MyEntity : Entity +{ + //... +} +```` + +只有前面提到的 `AbpAuditingOptions.EntityHistorySelector` 选择实体时才有必要禁用审计日志记录. + +你可以仅禁用实体的某些属性的审计,以审计日志记录进行精细控制: + +````csharp +[Audited] +public class MyUser : Entity +{ + public string Name { get; set; } + + public string Email { get; set; } + + [DisableAuditing] //Ignore the Passoword on audit logging + public string Password { get; set; } +} +```` + +审计日志系统保存 `MyUser` 实体的更改,出于安全的目的忽略 `Password` 属性. + +在某些情况下你可能要保存一些属性,但忽略所有其他属性. 为忽略的属性编写 `[DisableAuditing]` 将很乏味. 这种情况下将 `[Audited]` 用于所需的属性,使用 `[DisableAuditing]` 属性标记该实体: + +````csharp +[DisableAuditing] +public class MyUser : Entity +{ + [Audited] //Only log the Name change + public string Name { get; set; } + + public string Email { get; set; } + + public string Password { get; set; } +} +```` + +## IAuditingStore + +`IAuditingStore` 是一个接口,用于保存ABP框架的审计日志对象(下面说明). 如果需要将审计日志对象保存到自定义数据存储中,可以在自己的应用程序中实现 `IAuditingStore` 并在[依赖注入系统](Dependency-Injection.md)替换. + +如果没有注册审计存储,则使用 `SimpleLogAuditingStore`. 它只是将审计对象写入标准[日志系统](Logging.md). + +[审计日志模块](Modules/Audit-Logging.md)已在[启动模板](Startup-Templates/Index.md)中配置,它将审计日志对象保存到数据库中(支持多个数据库提供程序). 所以大多数时候你并不需要关心 `IAuditingStore` 是如何实现和使用的. + +## 审计日志对象 + +默认为每个**web请求**创建一个**审计日志对象**,审计日志对象可以由以下关系图表示: + +![**auditlog-object-diagram**](images/auditlog-object-diagram.png) + +* **AuditLogInfo**: 具有以下属性: + * `ApplicationName`: 当你保存不同的应用审计日志到同一个数据库,这个属性用来区分应用程序. + * `UserId`:当前用户的Id,用户未登录为 `null`. + * `UserName`:当前用户的用户名,如果用户已经登录(这里的值不依赖于标识模块/系统进行查找). + * `TenantId`: 当前租户的Id,对于多租户应用. + * `TenantName`: 当前租户的名称,对于多租户应用. + * `ExecutionTime`: 审计日志对象创建的时间. + * `ExecutionDuration`: 请求的总执行时间,以毫秒为单位. 可以用来观察应用程序的性能. + * `ClientId`: 当前客户端的Id,如果客户端已经通过认证.客户端通常是使用HTTP API的第三方应用程序. + * `ClientName`: 当前客户端的名称,如果有的话. + * `ClientIpAddress`: 客户端/用户设备的IP地址. + * `CorrelationId`: 当前[相关Id](CorrelationId.md). 相关Id用于在单个逻辑操作中关联由不同应用程序(或微服务)写入的审计日志. + * `BrowserInfo`: 当前用户的浏览器名称/版本信息,如果有的话. + * `HttpMethod`: 当前HTTP请求的方法(GET,POST,PUT,DELETE ...等). + * `HttpStatusCode`: HTTP响应状态码. + * `Url`: 请求的URL. +* **AuditLogActionInfo**: 一个 审计日志动作通常是web请求期间控制器动作或[应用服务](Application-Services.md)方法调用. 一个审计日志可以包含多个动作. 动作对象具有以下属性: + * `ServiceName`:执行的控制器/服务的名称. + * `MethodName`:控制器/服务执行的方法的名称. + * `Parameters`:传递给方法的参数的JSON格文本. + * `ExecutionTime`: 执行的时间. + * `ExecutionDuration`: 方法执行时长,以毫秒为单位. 可以用来观察方法的性能. +* **EntityChangeInfo**: 表示一个实体在Web请求中的变更. 审计日志可以包含0个或多个实体的变更. 实体变更具有以下属性: + * `ChangeTime`: 当实体被改变的时间. + * `ChangeType`:具有以下字段的枚举: `Created`(0), `Updated`(1)和 `Deleted`(2). + * `EntityId`: 更改实体的Id. + * `EntityTenantId`:实体所属的租户Id. + * `EntityTypeFullName`: 实体的类型(类)的完整命名空间名称(例如Book实体的*Acme.BookStore.Book*. +* **EntityPropertyChangeInfo**: 表示一个实体的属性的更改.一个实体的更改信息(上面已说明)可含有具有以下属性的一个或多个属性的更改: + * `NewValue`: 属性的新值. 如果实体已被删除为 `null`. + * `OriginalValue`:变更前旧/初始值. 如果实体是新创建为 `null`. + * `PropertyName`: 实体类的属性名称. + * `PropertyTypeFullName`:属性类型的完整命名空间名称. +* **Exception**: 审计日志对象可能包含零个或多个异常. 可以得到失败请求的异常信息. +* **Comment**:用于将自定义消息添加到审计日志条目的任意字符串值. 审计日志对象可能包含零个或多个注释. + +除了上面说明的标准属性之外,`AuditLogInfo`, `AuditLogActionInfo` 和 `EntityChangeInfo` 对象还实现了`IHasExtraProperties` 接口,你可以向这些对象添加自定义属性. + +## 审计日志贡献者 + +你可以创建类继承 `AuditLogContributor`类 来扩展审计系统,该类定义了 `PreContribute` 和 `PostContribute` 方法. + +唯一预构建的贡献者是 `AspNetCoreAuditLogContributor` 类,它设置HTTP请求的相关属性. + +贡献者可以设置 `AuditLogInfo` 类的属性和集合来添加更多信息. + +例: + +````csharp +public class MyAuditLogContributor : AuditLogContributor +{ + public override void PreContribute(AuditLogContributionContext context) + { + var currentUser = context.ServiceProvider.GetRequiredService(); + context.AuditInfo.SetProperty( + "MyCustomClaimValue", + currentUser.FindClaimValue("MyCustomClaim") + ); + } + + public override void PostContribute(AuditLogContributionContext context) + { + context.AuditInfo.Comments.Add("Some comment..."); + } +} +```` + +* `context.ServiceProvider` 可以从[依赖注入系统](Dependency-Injection.md)中解析服务. +* `context.AuditInfo` 可以用来访问当前审计日志的对象并进行操作. + +创建贡献者后,需要将其添加到 `AbpAuditingOptions.Contributors` 列表中: + +````csharp +Configure(options => +{ + options.Contributors.Add(new MyAuditLogContributor()); +}); +```` + +## IAuditLogScope & IAuditingManager + +本节介绍用于高级用例的 `IAuditLogScope` 和 `IAuditingManager` 服务. + +**审计日志范围**是**构建**和**保存**审计日志对象的[环境范围](Ambient-Context-Pattern.md)(前面解释过). 默认审计日志中间件会为Web请求创建审计日志范围(请参阅上面的 `UseAuditing()` 部分). + +### 获取当前审计日志范围 + +上面提到,审计日志贡献者是操作审计日志对象的全局方法. 你可从服务中获得值. + +如果需要在应用程序的任意位置上操作审计日志对象,可以访问当前审计日志范围并获取当前审计日志对象(与范围的管理方式无关). +例: + +````csharp +public class MyService : ITransientDependency +{ + private readonly IAuditingManager _auditingManager; + + public MyService(IAuditingManager auditingManager) + { + _auditingManager = auditingManager; + } + + public async Task DoItAsync() + { + var currentAuditLogScope = _auditingManager.Current; + if (currentAuditLogScope != null) + { + currentAuditLogScope.Log.Comments.Add( + "Executed the MyService.DoItAsync method :)" + ); + + currentAuditLogScope.Log.SetProperty("MyCustomProperty", 42); + } + } +} +```` + +总是检查 `_auditingManager.Current` 是否为空,因为它是在外部范围中控制的,在调用方法之前你不知道是否创建了审计日志范围. + +### 手动创建审计日志范围 + +你很少需要手动创建审计日志的范围,但如果你需要,可以使用 `IAuditingManager` 创建审计日志的范围. +例: + +````csharp +public class MyService : ITransientDependency +{ + private readonly IAuditingManager _auditingManager; + + public MyService(IAuditingManager auditingManager) + { + _auditingManager = auditingManager; + } + + public async Task DoItAsync() + { + using (var auditingScope = _auditingManager.BeginScope()) + { + try + { + //Call other services... + } + catch (Exception ex) + { + //Add exceptions + _auditingManager.Current.Log.Exceptions.Add(ex); + } + finally + { + //Always save the log + await auditingScope.SaveAsync(); + } + } + } +} +```` + +您可以调用其他服务,它们可能调用其他服务,它们可能更改实体,等等. 所有这些交互都保存为finally块中的一个审计日志对象. + +## 审计日志模块 + +审计日志模块基本上实现了 `IAuditingStore`, 将审计日志对象保存到数据库中并支持多个数据库提供程序. 默认此模块已添加到启动模板中. + +参见[审计日志模块文档](Modules/Audit-Logging.md)了解更多. \ No newline at end of file diff --git a/docs/zh-Hans/docs-nav.json b/docs/zh-Hans/docs-nav.json index 44856b34ed..ad811cc5b3 100644 --- a/docs/zh-Hans/docs-nav.json +++ b/docs/zh-Hans/docs-nav.json @@ -97,8 +97,13 @@ "path": "Caching.md" }, { - "text": "审计" - }, + "text": "日志", + "path": "Logging.md" + }, + { + "text": "审计日志", + "path": "Audit-Logging.md" + }, { "text": "设置管理", "path": "Settings.md" From 712029da61094258aa93a906a1b12731bfd5b29a Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 17 Feb 2020 12:51:13 +0800 Subject: [PATCH 396/411] Cache document update information. --- .../Documents/DocumentAdminAppService.cs | 37 ++++++++++------- .../Volo/Docs/Documents/DocumentAppService.cs | 40 ++++++++++++++----- .../Volo/Docs/Documents/DocumentUpdateInfo.cs | 14 +++++++ .../Docs/Documents/IDocumentRepository.cs | 7 ++-- .../Documents/EFCoreDocumentRepository.cs | 7 ++++ .../Docs/Documents/MongoDocumentRepository.cs | 8 ++++ .../Documents/TagHelpers/TreeTagHelper.cs | 16 ++++++-- .../Volo/Docs/DocumentRepository_Tests.cs | 10 +++++ 8 files changed, 106 insertions(+), 33 deletions(-) create mode 100644 modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/DocumentUpdateInfo.cs diff --git a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs index e50e0c4d03..5fa746907b 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs +++ b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Newtonsoft.Json; using Volo.Abp.Application.Services; +using Volo.Abp.Caching; using Volo.Docs.Documents; using Volo.Docs.Projects; @@ -16,14 +17,17 @@ namespace Volo.Docs.Admin.Documents private readonly IProjectRepository _projectRepository; private readonly IDocumentRepository _documentRepository; private readonly IDocumentSourceFactory _documentStoreFactory; + private readonly IDistributedCache _documentUpdateCache; public DocumentAdminAppService(IProjectRepository projectRepository, IDocumentRepository documentRepository, - IDocumentSourceFactory documentStoreFactory) + IDocumentSourceFactory documentStoreFactory, + IDistributedCache documentUpdateCache) { _projectRepository = projectRepository; _documentRepository = documentRepository; _documentStoreFactory = documentStoreFactory; + _documentUpdateCache = documentUpdateCache; } public async Task PullAllAsync(PullAllDocumentInput input) @@ -54,16 +58,12 @@ namespace Volo.Docs.Admin.Documents foreach (var document in documents) { - var oldDocument = await _documentRepository.FindAsync(document.ProjectId, document.Name, + await _documentRepository.DeleteAsync(document.ProjectId, document.Name, document.LanguageCode, document.Version); - if (oldDocument != null) - { - await _documentRepository.DeleteAsync(oldDocument); - } - - await _documentRepository.InsertAsync(document); + await _documentRepository.InsertAsync(document, true); + await UpdateDocumentUpdateInfoCache(document); } } @@ -74,15 +74,21 @@ namespace Volo.Docs.Admin.Documents var source = _documentStoreFactory.Create(project.DocumentStoreType); var sourceDocument = await source.GetDocumentAsync(project, input.Name, input.LanguageCode, input.Version); - var oldDocument = await _documentRepository.FindAsync(sourceDocument.ProjectId, sourceDocument.Name, + await _documentRepository.DeleteAsync(sourceDocument.ProjectId, sourceDocument.Name, sourceDocument.LanguageCode, sourceDocument.Version); + await _documentRepository.InsertAsync(sourceDocument, true); + await UpdateDocumentUpdateInfoCache(sourceDocument); + } - if (oldDocument != null) + private async Task UpdateDocumentUpdateInfoCache(Document document) + { + var cacheKey = $"DocumentUpdateInfo{document.ProjectId}#{document.Name}#{document.LanguageCode}#{document.Version}"; + await _documentUpdateCache.SetAsync(cacheKey, new DocumentUpdateInfo { - await _documentRepository.DeleteAsync(oldDocument); - } - - await _documentRepository.InsertAsync(sourceDocument); + Name = document.Name, + LastUpdatedTime = document.LastUpdatedTime, + UpdatedCount = document.UpdatedCount + }); } private async Task GetDocumentAsync( @@ -93,7 +99,8 @@ namespace Volo.Docs.Admin.Documents { version = string.IsNullOrWhiteSpace(version) ? project.LatestVersionBranchName : version; var source = _documentStoreFactory.Create(project.DocumentStoreType); - return await source.GetDocumentAsync(project, documentName, languageCode, version); + var document = await source.GetDocumentAsync(project, documentName, languageCode, version); + return document; } } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs index f4ae3a9158..1ef35fda54 100644 --- a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs +++ b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs @@ -18,6 +18,7 @@ namespace Volo.Docs.Documents private readonly IDocumentSourceFactory _documentStoreFactory; protected IDistributedCache LanguageCache { get; } protected IDistributedCache ResourceCache { get; } + protected IDistributedCache DocumentUpdateCache { get; } protected IHostEnvironment HostEnvironment { get; } public DocumentAppService( IProjectRepository projectRepository, @@ -25,6 +26,7 @@ namespace Volo.Docs.Documents IDocumentSourceFactory documentStoreFactory, IDistributedCache languageCache, IDistributedCache resourceCache, + IDistributedCache documentUpdateCache, IHostEnvironment hostEnvironment) { _projectRepository = projectRepository; @@ -32,6 +34,7 @@ namespace Volo.Docs.Documents _documentStoreFactory = documentStoreFactory; LanguageCache = languageCache; ResourceCache = resourceCache; + DocumentUpdateCache = documentUpdateCache; HostEnvironment = hostEnvironment; } @@ -73,20 +76,18 @@ namespace Volo.Docs.Documents var navigationNode = JsonConvert.DeserializeObject(navigationDocument.Content); var leafs = navigationNode.Items.GetAllNodes(x => x.Items) - .Where(x => x.IsLeaf && !x.Path.IsNullOrWhiteSpace()) + .Where(x => !x.Path.IsNullOrWhiteSpace()) .ToList(); foreach (var leaf in leafs) { - var document = await GetDocumentWithDetailsDtoAsync( - project, - leaf.Path, - input.LanguageCode, - input.Version - ); - - leaf.LastUpdatedTime = document.LastUpdatedTime; - leaf.UpdatedCount = document.UpdatedCount; + var cacheKey = $"DocumentUpdateInfo{project.Id}#{leaf.Path}#{input.LanguageCode}#{input.Version}"; + var documentUpdateInfo = await DocumentUpdateCache.GetAsync(cacheKey); + if (documentUpdateInfo != null) + { + leaf.LastUpdatedTime = documentUpdateInfo.LastUpdatedTime; + leaf.UpdatedCount = documentUpdateInfo.UpdatedCount; + } } return navigationNode; @@ -165,10 +166,19 @@ namespace Volo.Docs.Documents var source = _documentStoreFactory.Create(project.DocumentStoreType); var sourceDocument = await source.GetDocumentAsync(project, documentName, languageCode, version); - await _documentRepository.InsertAsync(sourceDocument); + await _documentRepository.DeleteAsync(project.Id, sourceDocument.Name, sourceDocument.LanguageCode, sourceDocument.Version); + await _documentRepository.InsertAsync(sourceDocument, true); Logger.LogInformation($"Document retrieved: {documentName}"); + var cacheKey = $"DocumentUpdateInfo{sourceDocument.ProjectId}#{sourceDocument.Name}#{sourceDocument.LanguageCode}#{sourceDocument.Version}"; + await DocumentUpdateCache.SetAsync(cacheKey, new DocumentUpdateInfo + { + Name = sourceDocument.Name, + LastUpdatedTime = sourceDocument.LastUpdatedTime, + UpdatedCount = sourceDocument.UpdatedCount + }); + return CreateDocumentWithDetailsDto(project, sourceDocument); } @@ -192,6 +202,14 @@ namespace Volo.Docs.Documents return await GetDocumentAsync(); } + var cacheKey = $"DocumentUpdateInfo{document.ProjectId}#{document.Name}#{document.LanguageCode}#{document.Version}"; + await DocumentUpdateCache.SetAsync(cacheKey, new DocumentUpdateInfo + { + Name = document.Name, + LastUpdatedTime = document.LastUpdatedTime, + UpdatedCount = document.UpdatedCount + }); + return CreateDocumentWithDetailsDto(project, document); } diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/DocumentUpdateInfo.cs b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/DocumentUpdateInfo.cs new file mode 100644 index 0000000000..fbdc7056a5 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/DocumentUpdateInfo.cs @@ -0,0 +1,14 @@ +using System; + +namespace Volo.Docs.Documents +{ + [Serializable] + public class DocumentUpdateInfo + { + public virtual string Name { get; set; } + + public virtual DateTime LastUpdatedTime { get; set; } + + public virtual int UpdatedCount { get; set; } + } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/IDocumentRepository.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/IDocumentRepository.cs index aaabb2d8c7..75e8a22e6d 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/IDocumentRepository.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/IDocumentRepository.cs @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; -using System.Text; using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; @@ -12,5 +10,8 @@ namespace Volo.Docs.Documents Task FindAsync(Guid projectId, string name, string languageCode, string version, bool includeDetails = true, CancellationToken cancellationToken = default); + + Task DeleteAsync(Guid projectId, string name, string languageCode, string version, + CancellationToken cancellationToken = default); } -} +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs index d9a96e6c4f..7698ef0b39 100644 --- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs @@ -25,5 +25,12 @@ namespace Volo.Docs.Documents x.Version == version, cancellationToken); } + + public async Task DeleteAsync(Guid projectId, string name, string languageCode, string version, CancellationToken cancellationToken = default) + { + await DeleteAsync(x => + x.ProjectId == projectId && x.Name == name && x.LanguageCode == languageCode && + x.Version == version, cancellationToken: cancellationToken); + } } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs index 548b89e246..ee72171e0d 100644 --- a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs +++ b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs @@ -24,5 +24,13 @@ namespace Volo.Docs.Documents x.LanguageCode == languageCode && x.Version == version, cancellationToken); } + + public async Task DeleteAsync(Guid projectId, string name, string languageCode, string version, + CancellationToken cancellationToken = default) + { + await DeleteAsync(x => + x.ProjectId == projectId && x.Name == name && x.LanguageCode == languageCode && + x.Version == version, cancellationToken: cancellationToken); + } } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs b/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs index 23be8a8cff..485de84e4d 100644 --- a/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs +++ b/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs @@ -123,10 +123,18 @@ namespace Volo.Docs.Areas.Documents.TagHelpers } else { - var badge = node.Path.IsNullOrWhiteSpace() - ? "" - : "" + - (node.LastUpdatedTime + TimeSpan.FromDays(30) > DateTime.Now ? (node.UpdatedCount == 1 ? _localizer["New"] : _localizer["Upd"]) : "") + ""; + var badge = ""; + if (!node.Path.IsNullOrWhiteSpace() && node.LastUpdatedTime.HasValue && node.LastUpdatedTime + TimeSpan.FromDays(30) > DateTime.Now) + { + if (node.UpdatedCount > 1) + { + badge = "" + _localizer["Upd"] + ""; + } + else + { + badge = "" + _localizer["New"] + ""; + } + } listInnerItem = string.Format(ListItemAnchor, NormalizePath(node.Path), textCss, node.Text.IsNullOrEmpty() diff --git a/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocumentRepository_Tests.cs b/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocumentRepository_Tests.cs index 31d0e8a6fd..68a2ebb5e6 100644 --- a/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocumentRepository_Tests.cs +++ b/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocumentRepository_Tests.cs @@ -24,5 +24,15 @@ namespace Volo.Docs var document = await DocumentRepository.FindAsync(DocsTestData.PorjectId, "CLI.md", "en", "2.0.0"); document.ShouldNotBeNull(); } + + [Fact] + public async Task DeleteAsync() + { + (await DocumentRepository.GetListAsync()).ShouldNotBeEmpty(); + + await DocumentRepository.DeleteAsync(DocsTestData.PorjectId, "CLI.md", "en", "2.0.0"); + + (await DocumentRepository.GetListAsync()).ShouldBeEmpty(); + } } } From 1033a3db55a6b479fde805624fbeb9adaf6afb4e Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem <25867+gterdem@users.noreply.github.com> Date: Mon, 17 Feb 2020 08:36:45 +0300 Subject: [PATCH 397/411] Update docs/en/Audit-Logging.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updated with reviewer's suggestion Co-Authored-By: Halil İbrahim Kalkan --- docs/en/Audit-Logging.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Audit-Logging.md b/docs/en/Audit-Logging.md index 8fdb8cff8b..799b3b76c3 100644 --- a/docs/en/Audit-Logging.md +++ b/docs/en/Audit-Logging.md @@ -39,7 +39,7 @@ Here, a list of the options you can configure: * `IsEnabled` (default: `true`): A root switch to enable or disable the auditing system. Other options is not used if this value is `false`. * `HideErrors` (default: `true`): Audit log system hides and write regular [logs](Logging.md) if any error occurs while saving the audit log objects. If saving the audit logs is critical for your system, set this to `false` to throw exception in case of hiding the errors. * `IsEnabledForAnonymousUsers` (default: `true`): If you want to write audit logs only for the authenticated users, set this to `false`. If you save audit logs for anonymous users, you will see `null` for `UserId` values for these users. -* `AlwaysLogOnException` (default: `true`): Audit log option to save all the exceptions occur in the application. +* `AlwaysLogOnException` (default: `true`): If you set to true, it always saves the audit log on an exception/error case without checking other options (except `IsEnabled`, which completely disables the audit logging). * `IsEnabledForGetRequests` (default: `false`): HTTP GET requests should not make any change in the database normally and audit log system doesn't save audit log objects for GET request. Set this to `true` to enable it also for the GET requests. * `ApplicationName`: If multiple applications saving audit logs into a single database, set this property to your application name, so you can distinguish the logs of different applications. * `IgnoredTypes`: A list of `Type`s to be ignored for audit logging. If this is an entity type, changes for this type of entities will not be saved. This list is also used while serializing the action parameters. @@ -370,4 +370,4 @@ You can call other services, they may call others, they may change entities and The Audit Logging Module basically implements the `IAuditingStore` to save the audit log objects to a database. It supports multiple database providers. This module is added to the startup templates by default. -See [the Audit Logging Module document](Modules/Audit-Logging.md) for more about it. \ No newline at end of file +See [the Audit Logging Module document](Modules/Audit-Logging.md) for more about it. From 398146bb47535786d23f20040738b82f9edcec87 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 17 Feb 2020 11:40:35 +0300 Subject: [PATCH 398/411] Update Caching.md resolves https://github.com/abpframework/abp/issues/2842 --- docs/en/Caching.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/docs/en/Caching.md b/docs/en/Caching.md index 8aa9f00657..bb11b2b45a 100644 --- a/docs/en/Caching.md +++ b/docs/en/Caching.md @@ -2,6 +2,32 @@ ABP framework extends ASP.NET Core's distributed caching system. +## Volo.Abp.Caching Package + +> This package is already installed by default with the startup template. So, most of the time, you don't need to install it manually. + +Volo.Abp.Caching is the core package of the caching system. Install it to your project using the package manager console (PMC): + +``` +Install-Package Volo.Abp.Caching +``` + +Then you can add **AbpCachingModule** dependency to your module: + +```c# +using Volo.Abp.Modularity; +using Volo.Abp.Caching; + +namespace MyCompany.MyProject +{ + [DependsOn(typeof(AbpCachingModule))] + public class MyModule : AbpModule + { + //... + } +} +``` + ## `IDistributedCache` Interface ASP.NET Core defines the `IDistributedCache` interface to get/set cache values. But it has some difficulties: From a341528aa65f36b8cd986faf25030fe65a5583d9 Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Mon, 17 Feb 2020 13:39:17 +0300 Subject: [PATCH 399/411] Updated AuditingMidware exception check and new test --- .../AspNetCore/Auditing/AbpAuditingMiddleware.cs | 5 +++++ .../AspNetCore/Mvc/Auditing/AuditTestController.cs | 5 +++++ .../Mvc/Auditing/AuditTestController_Tests.cs | 14 ++++++++++++-- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs index be84495336..f59c5b6b3a 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Auditing/AbpAuditingMiddleware.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Options; @@ -34,6 +35,10 @@ namespace Volo.Abp.AspNetCore.Auditing try { await next(context); + if (_auditingManager.Current.Log.Exceptions.Any()) + { + hasError = true; + } } catch (Exception) { diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController.cs index 9b4892cea4..b6bfe203db 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController.cs @@ -26,5 +26,10 @@ namespace Volo.Abp.AspNetCore.Mvc.Auditing { throw new UserFriendlyException("Exception occurred!"); } + [Route("audit-fail-object")] + public object AuditFailForGetRequestsReturningObject() + { + throw new UserFriendlyException("Exception occurred!"); + } } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs index 733fab3f49..f0371ef51a 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Auditing/AuditTestController_Tests.cs @@ -34,7 +34,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Auditing _options.IsEnabledForGetRequests = true; _options.AlwaysLogOnException = false; await GetResponseAsync("api/audit-test/audit-success"); - await _auditingStore.Received().SaveAsync(Arg.Any()); //Won't work, save happens out of scope + await _auditingStore.Received().SaveAsync(Arg.Any()); } [Fact] @@ -49,7 +49,17 @@ namespace Volo.Abp.AspNetCore.Mvc.Auditing } catch { } - await _auditingStore.Received().SaveAsync(Arg.Any()); //Won't work, save happens out of scope + await _auditingStore.Received().SaveAsync(Arg.Any()); + } + [Fact] + public async Task Should_Trigger_Middleware_And_AuditLog_Exception_When_Returns_Object() + { + _options.IsEnabled = true; + _options.AlwaysLogOnException = true; + + await GetResponseAsync("api/audit-test/audit-fail-object", System.Net.HttpStatusCode.Forbidden); + + await _auditingStore.Received().SaveAsync(Arg.Any()); } } } From 614aa0d77cc7121f43aa98b139426f8d62170eed Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 17 Feb 2020 19:38:48 +0800 Subject: [PATCH 400/411] Translate audit-logging module doc --- docs/en/Modules/Audit-Logging.md | 2 +- docs/zh-Hans/Ambient-Context-Pattern.md | 3 +++ docs/zh-Hans/Audit-Logging.md | 1 + docs/zh-Hans/Caching.md | 26 ++++++++++++++++++++++ docs/zh-Hans/Modules/Audit-Logging.md | 7 ++++++ docs/zh-Hans/Modules/Index.md | 16 ++++++++----- docs/zh-Hans/Modules/Setting-Management.md | 2 ++ 7 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 docs/zh-Hans/Ambient-Context-Pattern.md create mode 100644 docs/zh-Hans/Modules/Audit-Logging.md diff --git a/docs/en/Modules/Audit-Logging.md b/docs/en/Modules/Audit-Logging.md index 922f99284b..039c61d3a2 100644 --- a/docs/en/Modules/Audit-Logging.md +++ b/docs/en/Modules/Audit-Logging.md @@ -1,6 +1,6 @@ # Audit Logging Module -The Audit Logging Module basically implements the `IAuditingStore` to save the audit log objects to a database. +The Audit Logging Module basically implements the `IAuditingStore` to save the audit log objects to a database. > Audit Logging module is already installed and configured for [the startup templates](../Startup-Templates/Index.md). So, most of the times you don't need to manually add this module to your application. diff --git a/docs/zh-Hans/Ambient-Context-Pattern.md b/docs/zh-Hans/Ambient-Context-Pattern.md new file mode 100644 index 0000000000..d00a721ce2 --- /dev/null +++ b/docs/zh-Hans/Ambient-Context-Pattern.md @@ -0,0 +1,3 @@ +## Ambient Context Pattern + +TODO \ No newline at end of file diff --git a/docs/zh-Hans/Audit-Logging.md b/docs/zh-Hans/Audit-Logging.md index 36f80525d1..a028e640b2 100644 --- a/docs/zh-Hans/Audit-Logging.md +++ b/docs/zh-Hans/Audit-Logging.md @@ -39,6 +39,7 @@ Configure(options => * `IsEnabled` (默认值: `true`): 启用或禁用审计系统的总开关. 如果值为 `false`,则不使用其他选项. * `HideErrors` (默认值: `true`): 在保存审计日志对象时如果发生任何错误,审计日志系统会将错误隐藏并写入常规[日志](Logging.md). 如果保存审计日志对系统非常重要那么将其设置为 `false` 以便在隐藏错误时抛出异常. * `IsEnabledForAnonymousUsers` (默认值: `true`): 如果只想为经过身份验证的用户记录审计日志,请设置为 `false`.如果为匿名用户保存审计日志,你将看到这些用户的 `UserId` 值为 `null`. +* `AlwaysLogOnException`(默认值: `true`): 如果设置为 `true`,将始终在异常/错误情况下保存审计日志,不检查其他选项(`IsEnabled` 除外,它完全禁用了审计日志). * `IsEnabledForGetRequests` (默认值: `false`): HTTP GET请求通常不应该在数据库进行任何更改,审计日志系统不会为GET请求保存审计日志对象. 将此值设置为 `true` 可为GET请求启用审计日志系统. * `ApplicationName`: 如果有多个应用程序保存审计日志到单一的数据库,使用此属性设置为你的应用程序名称区分不同的应用程序日志. * `IgnoredTypes`: 审计日志系统忽略的 `Type` 列表. 如果它是实体类型,则不会保存此类型实体的更改. 在序列化操作参数时也使用此列表. diff --git a/docs/zh-Hans/Caching.md b/docs/zh-Hans/Caching.md index 7379104f51..0557ddcb4d 100644 --- a/docs/zh-Hans/Caching.md +++ b/docs/zh-Hans/Caching.md @@ -2,6 +2,32 @@ ABP框架扩展了ASP.NET Core的分布式缓存系统. +## Volo.Abp.Caching Package + +> 默认情况下启动模板已经安装了这个包,所以大部分情况下你不需要手动安装. + +Volo.Abp.Caching是缓存系统的核心包.使用包管理控制台(PMC)安装到项目: + +``` +Install-Package Volo.Abp.Caching +``` + +然后将 **AbpCachingModule** 依赖添加到你的模块: + +```c# +using Volo.Abp.Modularity; +using Volo.Abp.Caching; + +namespace MyCompany.MyProject +{ + [DependsOn(typeof(AbpCachingModule))] + public class MyModule : AbpModule + { + //... + } +} +``` + ## `IDistributedCache` 接口 ASP.NET Core 定义了 `IDistributedCache` 接口用于 get/set 缓存值 . 但是会有以下问题: diff --git a/docs/zh-Hans/Modules/Audit-Logging.md b/docs/zh-Hans/Modules/Audit-Logging.md new file mode 100644 index 0000000000..0748b27160 --- /dev/null +++ b/docs/zh-Hans/Modules/Audit-Logging.md @@ -0,0 +1,7 @@ +# 审计日志模块 + +审计日志模块实现了 `IAuditingStore` 将审计日志对象保存到数据库中. + +> [启动模板](../Startup-Templates/Index.md)已经安装并配置了审计日志模块,所以你不需要手动安装到你的应用程序. + +参阅[审计日志系统](../Audit-Logging.md)文档了解更多关于审计日志的内容. \ No newline at end of file diff --git a/docs/zh-Hans/Modules/Index.md b/docs/zh-Hans/Modules/Index.md index e6f08d5451..9b44967c53 100644 --- a/docs/zh-Hans/Modules/Index.md +++ b/docs/zh-Hans/Modules/Index.md @@ -11,16 +11,20 @@ ABP是一个 **模块化的应用程序框架** 由十多个 **nuget packages** 有一些由ABP社区开发和维护的 **开源免费** 的应用程序模块: -* **Account**: 用于用户登录/注册应用程序. -* **Audit Logging**: 用于将审计日志持久化到数据库. +* **Account**: 提供账户管理UI,并允许用户登录/注册应用程序. +* [**Audit Logging**](Audit-Logging.md): 用于将审计日志持久化到数据库. * **Background Jobs**: 用于在使用默认后台作业管理器时保存后台作业. * **Blogging**: 用于创建精美的博客. ABP的[博客](https://blog.abp.io/) 就使用了此模块. * [**Docs**](Docs.md): 用于创建技术文档页面. ABP的[文档](https://abp.io/documents/) 就使用了此模块. -* **Identity**: 用于管理角色,用户和他们的权限. +* **Identity**: 基于Microsoft Identity管理角色,用户和他们的权限. * **Identity Server**: 集成了IdentityServer4. * **Permission Management**: 用于保存权限. * **Setting Management**: 用于保存设置. -* **Tenant Management**: 用于管理[多租户](../Multi-Tenancy.md)应用程序的租户. -* **Users**: 用于抽象用户, 因此其他模块可以依赖此模块而不是Identity模块. +* **Tenant Management**: 管理[多租户](../Multi-Tenancy.md)应用程序的租户. +* **Users**: 抽象用户, 因此其他模块可以依赖此模块而不是Identity模块. -模块化文档正在编写中. 请参阅[这个仓库](https://github.com/abpframework/abp/tree/master/modules)获取所有模块的源代码. \ No newline at end of file +模块化文档正在编写中. 请参阅[这个仓库](https://github.com/abpframework/abp/tree/master/modules)获取所有模块的源代码. + +## 商业应用模块 + +[ABP商业](https://commercial.abp.io/)许可证在ABP框架上提供了额外的预构建应用程序模块. 参见ABP商业版提供的[模块列表](https://commercial.abp.io/module). \ No newline at end of file diff --git a/docs/zh-Hans/Modules/Setting-Management.md b/docs/zh-Hans/Modules/Setting-Management.md index 31ea2505ea..fd87dd734c 100644 --- a/docs/zh-Hans/Modules/Setting-Management.md +++ b/docs/zh-Hans/Modules/Setting-Management.md @@ -67,6 +67,8 @@ namespace Demo 你可以从不同的设置值提供程序中(默认,全局,用户,租户...等)中获取或设定设置值. +> 如果只需要读取设置值,建议使用 `ISettingProvider` 而不是`ISettingManager`,因为它实现了缓存并支持所有部署场景. 如果要创建设置管理UI,可以使用ISettingManager. + ### Setting Cache 设置值缓存在 [分布式缓存](../Caching.md) 系统中. 建议始终使用 `ISettingManager` 更改设置值. From 41604bf713e451c8850109755ada425a603c440b Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 17 Feb 2020 17:03:16 +0300 Subject: [PATCH 401/411] remove unused code --- .../Volo/Docs/GitHub/Documents/GithubDocumentSource.cs | 1 - .../Volo/Docs/GitHub/Projects/ProjectGithubExtensions.cs | 8 -------- 2 files changed, 9 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentSource.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentSource.cs index 972d8ecfbb..0159f20852 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentSource.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentSource.cs @@ -34,7 +34,6 @@ namespace Volo.Docs.GitHub.Documents var userAgent = project.GetGithubUserAgentOrNull(); var rawRootUrl = CalculateRawRootUrlWithLanguageCode(rootUrl, languageCode); var rawDocumentUrl = rawRootUrl + documentName; - var commitHistoryUrl = project.GetGitHubUrlForCommitHistory() + languageCode + "/" + documentName; var isNavigationDocument = documentName == project.NavigationDocumentName; var isParameterDocument = documentName == project.ParametersDocumentName; var editLink = rootUrl.ReplaceFirst("/tree/", "/blob/") + languageCode + "/" + documentName; diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Projects/ProjectGithubExtensions.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Projects/ProjectGithubExtensions.cs index ff1979d037..d518132950 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Projects/ProjectGithubExtensions.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Projects/ProjectGithubExtensions.cs @@ -21,14 +21,6 @@ namespace Volo.Docs.GitHub.Projects .Replace("{version}", version); } - public static string GetGitHubUrlForCommitHistory([NotNull] this Project project) - { - return project - .GetGitHubUrl() - .Replace("github.com", "api.github.com/repos") - .Replace("tree/{version}/", "commits?path="); - } - public static void SetGitHubUrl([NotNull] this Project project, string value) { CheckGitHubProject(project); From 479fc27ec74a2f4149c59ec1b0b3dfe13b7c9a58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 17 Feb 2020 19:12:41 +0300 Subject: [PATCH 402/411] Docs module update badge improvement --- .../Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json | 4 +++- .../Volo.Docs.Domain/Volo/Docs/Localization/Domain/tr.json | 4 +++- .../Areas/Documents/TagHelpers/TreeTagHelper.cs | 7 ++++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json index 5115dd1489..92858a87f0 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json @@ -19,6 +19,8 @@ "FilterTopics": "Filter topics", "MultipleVersionDocumentInfo": "This document has multiple versions. Select the options best fit for you.", "New": "New", - "Upd": "Upd" + "Upd": "Upd", + "NewExplanation": "Created in the last two weeks.", + "UpdatedExplanation": "Updated in the last two weeks." } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/tr.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/tr.json index a546f626dc..612274f95d 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/tr.json +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/tr.json @@ -18,6 +18,8 @@ "DocumentNotFoundInSelectedLanguage": "İstediğiniz dilde belge bulunamadı. Varsayılan dilde belge gösterilir.", "MultipleVersionDocumentInfo": "Bu dökümanın birden çok versiyonu bulunmaktadır. Sizin için en uygun olan seçenekleri seçiniz.", "New": "Yeni", - "Upd": "güncellenmiş" + "Upd": "Günc", + "NewExplanation": "Son iki hafta içinde oluşturuldu.", + "UpdatedExplanation": "Son iki hafta içinde güncellendi." } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs b/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs index 485de84e4d..aa66f4c82f 100644 --- a/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs +++ b/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs @@ -124,15 +124,16 @@ namespace Volo.Docs.Areas.Documents.TagHelpers else { var badge = ""; - if (!node.Path.IsNullOrWhiteSpace() && node.LastUpdatedTime.HasValue && node.LastUpdatedTime + TimeSpan.FromDays(30) > DateTime.Now) + + if (!node.Path.IsNullOrWhiteSpace() && node.LastUpdatedTime.HasValue && node.LastUpdatedTime + TimeSpan.FromDays(14) > DateTime.Now) { if (node.UpdatedCount > 1) { - badge = "" + _localizer["Upd"] + ""; + badge = "" + _localizer["Upd"] + ""; } else { - badge = "" + _localizer["New"] + ""; + badge = "" + _localizer["New"] + ""; } } From 893c8a42b7da8447d2bfa2f0d8188f9058557d77 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 18 Feb 2020 10:15:53 +0800 Subject: [PATCH 403/411] Docs module "new" label improvement Resolve #2848 --- ....Designer.cs => 20200218014727_init.Designer.cs} | 8 ++++---- ...0200212135141_init.cs => 20200218014727_init.cs} | 2 +- .../Migrations/VoloDocsDbContextModelSnapshot.cs | 6 +++--- .../Docs/Admin/Documents/DocumentAdminAppService.cs | 4 ++-- .../Volo/Docs/Documents/DocumentWithDetailsDto.cs | 4 ++-- .../Volo/Docs/Documents/DocumentAppService.cs | 8 ++++---- .../Volo/Docs/Documents/DocumentUpdateInfo.cs | 4 ++-- .../Volo/Docs/Documents/NavigationNode.cs | 4 ++-- .../Volo/Docs/Documents/Document.cs | 9 +++++---- .../Documents/FileSystemDocumentSource.cs | 2 +- .../Docs/GitHub/Documents/GithubDocumentSource.cs | 2 +- .../Volo/Docs/Localization/Domain/zh-Hans.json | 4 +++- .../Volo/Docs/Localization/Domain/zh-Hant.json | 4 +++- .../Areas/Documents/TagHelpers/TreeTagHelper.cs | 13 ++++++++----- .../Volo/Docs/DocsTestDataBuilder.cs | 2 +- 15 files changed, 42 insertions(+), 34 deletions(-) rename modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/{20200212135141_init.Designer.cs => 20200218014727_init.Designer.cs} (99%) rename modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/{20200212135141_init.cs => 20200218014727_init.cs} (99%) diff --git a/modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20200212135141_init.Designer.cs b/modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20200218014727_init.Designer.cs similarity index 99% rename from modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20200212135141_init.Designer.cs rename to modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20200218014727_init.Designer.cs index 3c21209e8c..522b3e3ba5 100644 --- a/modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20200212135141_init.Designer.cs +++ b/modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20200218014727_init.Designer.cs @@ -10,7 +10,7 @@ using VoloDocs.EntityFrameworkCore; namespace VoloDocs.EntityFrameworkCore.Migrations { [DbContext(typeof(VoloDocsDbContext))] - [Migration("20200212135141_init")] + [Migration("20200218014727_init")] partial class init { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -464,6 +464,9 @@ namespace VoloDocs.EntityFrameworkCore.Migrations .IsRequired() .HasColumnType("nvarchar(max)"); + b.Property("CreationTime") + .HasColumnType("datetime2"); + b.Property("EditLink") .HasColumnType("nvarchar(2048)") .HasMaxLength(2048); @@ -512,9 +515,6 @@ namespace VoloDocs.EntityFrameworkCore.Migrations .HasColumnType("nvarchar(2048)") .HasMaxLength(2048); - b.Property("UpdatedCount") - .HasColumnType("int"); - b.Property("Version") .IsRequired() .HasColumnType("nvarchar(128)") diff --git a/modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20200212135141_init.cs b/modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20200218014727_init.cs similarity index 99% rename from modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20200212135141_init.cs rename to modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20200218014727_init.cs index cb18bebed6..7e85e1bbc1 100644 --- a/modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20200212135141_init.cs +++ b/modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20200218014727_init.cs @@ -130,8 +130,8 @@ namespace VoloDocs.EntityFrameworkCore.Migrations RootUrl = table.Column(maxLength: 2048, nullable: true), RawRootUrl = table.Column(maxLength: 2048, nullable: true), LocalDirectory = table.Column(maxLength: 512, nullable: true), + CreationTime = table.Column(nullable: false), LastUpdatedTime = table.Column(nullable: false), - UpdatedCount = table.Column(nullable: false), LastCachedTime = table.Column(nullable: false) }, constraints: table => diff --git a/modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/VoloDocsDbContextModelSnapshot.cs b/modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/VoloDocsDbContextModelSnapshot.cs index 1c595ac3f8..0780f28624 100644 --- a/modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/VoloDocsDbContextModelSnapshot.cs +++ b/modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/VoloDocsDbContextModelSnapshot.cs @@ -462,6 +462,9 @@ namespace VoloDocs.EntityFrameworkCore.Migrations .IsRequired() .HasColumnType("nvarchar(max)"); + b.Property("CreationTime") + .HasColumnType("datetime2"); + b.Property("EditLink") .HasColumnType("nvarchar(2048)") .HasMaxLength(2048); @@ -510,9 +513,6 @@ namespace VoloDocs.EntityFrameworkCore.Migrations .HasColumnType("nvarchar(2048)") .HasMaxLength(2048); - b.Property("UpdatedCount") - .HasColumnType("int"); - b.Property("Version") .IsRequired() .HasColumnType("nvarchar(128)") diff --git a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs index 5fa746907b..255fed246f 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs +++ b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs @@ -86,8 +86,8 @@ namespace Volo.Docs.Admin.Documents await _documentUpdateCache.SetAsync(cacheKey, new DocumentUpdateInfo { Name = document.Name, - LastUpdatedTime = document.LastUpdatedTime, - UpdatedCount = document.UpdatedCount + CreationTime = document.CreationTime, + LastUpdatedTime = document.LastUpdatedTime }); } diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentWithDetailsDto.cs b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentWithDetailsDto.cs index c78a46d2ef..0364a2e26f 100644 --- a/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentWithDetailsDto.cs +++ b/modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentWithDetailsDto.cs @@ -27,9 +27,9 @@ namespace Volo.Docs.Documents public virtual string LocalDirectory { get; set; } - public virtual DateTime LastUpdatedTime { get; set; } + public virtual DateTime CreationTime { get; set; } - public virtual int UpdatedCount { get; set; } + public virtual DateTime LastUpdatedTime { get; set; } public virtual DateTime LastCachedTime { get; set; } diff --git a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs index 1ef35fda54..7ea04ec0c0 100644 --- a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs +++ b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs @@ -85,8 +85,8 @@ namespace Volo.Docs.Documents var documentUpdateInfo = await DocumentUpdateCache.GetAsync(cacheKey); if (documentUpdateInfo != null) { + leaf.CreationTime = documentUpdateInfo.CreationTime; leaf.LastUpdatedTime = documentUpdateInfo.LastUpdatedTime; - leaf.UpdatedCount = documentUpdateInfo.UpdatedCount; } } @@ -175,8 +175,8 @@ namespace Volo.Docs.Documents await DocumentUpdateCache.SetAsync(cacheKey, new DocumentUpdateInfo { Name = sourceDocument.Name, - LastUpdatedTime = sourceDocument.LastUpdatedTime, - UpdatedCount = sourceDocument.UpdatedCount + CreationTime = sourceDocument.CreationTime, + LastUpdatedTime = sourceDocument.LastUpdatedTime }); return CreateDocumentWithDetailsDto(project, sourceDocument); @@ -206,8 +206,8 @@ namespace Volo.Docs.Documents await DocumentUpdateCache.SetAsync(cacheKey, new DocumentUpdateInfo { Name = document.Name, + CreationTime = document.CreationTime, LastUpdatedTime = document.LastUpdatedTime, - UpdatedCount = document.UpdatedCount }); return CreateDocumentWithDetailsDto(project, document); diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/DocumentUpdateInfo.cs b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/DocumentUpdateInfo.cs index fbdc7056a5..fcabe91549 100644 --- a/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/DocumentUpdateInfo.cs +++ b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/DocumentUpdateInfo.cs @@ -7,8 +7,8 @@ namespace Volo.Docs.Documents { public virtual string Name { get; set; } - public virtual DateTime LastUpdatedTime { get; set; } + public virtual DateTime CreationTime { get; set; } - public virtual int UpdatedCount { get; set; } + public virtual DateTime LastUpdatedTime { get; set; } } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/NavigationNode.cs b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/NavigationNode.cs index 4042344581..b5c2704eb8 100644 --- a/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/NavigationNode.cs +++ b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/NavigationNode.cs @@ -22,9 +22,9 @@ namespace Volo.Docs.Documents public bool IsEmpty => Text == null && Path == null; - public DateTime? LastUpdatedTime { get; set; } + public virtual DateTime? CreationTime { get; set; } - public int UpdatedCount { get; set; } + public virtual DateTime? LastUpdatedTime { get; set; } public bool IsSelected(string documentName) { diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/Document.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/Document.cs index ded3fa8530..ecbc3aa617 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/Document.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/Document.cs @@ -31,10 +31,10 @@ namespace Volo.Docs.Documents public virtual string LocalDirectory { get; set; } + public virtual DateTime CreationTime { get; set; } + public virtual DateTime LastUpdatedTime { get; set; } - public virtual int UpdatedCount { get; set; } - public virtual DateTime LastCachedTime { get; set; } public virtual List Contributors { get; set; } @@ -58,8 +58,8 @@ namespace Volo.Docs.Documents [NotNull] string rootUrl, [NotNull] string rawRootUrl, [NotNull] string localDirectory, + DateTime creationTime, DateTime lastUpdatedTime, - int updatedCount, DateTime lastCachedTime ) { @@ -76,8 +76,9 @@ namespace Volo.Docs.Documents RootUrl = Check.NotNullOrWhiteSpace(rootUrl, nameof(rootUrl)); RawRootUrl = Check.NotNullOrWhiteSpace(rawRootUrl, nameof(rawRootUrl)); LocalDirectory = Check.NotNull(localDirectory, nameof(localDirectory)); + + CreationTime = creationTime; LastUpdatedTime = lastUpdatedTime; - UpdatedCount = updatedCount; LastCachedTime = lastCachedTime; Contributors = new List(); diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/FileSystem/Documents/FileSystemDocumentSource.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/FileSystem/Documents/FileSystemDocumentSource.cs index 6b28b42e17..d93b378dcd 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/FileSystem/Documents/FileSystemDocumentSource.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/FileSystem/Documents/FileSystemDocumentSource.cs @@ -43,8 +43,8 @@ namespace Volo.Docs.FileSystem.Documents "/", $"/document-resources?projectId={project.Id.ToString()}&version={version}&languageCode={languageCode}&name=", localDirectory, + File.GetCreationTime(path), File.GetLastWriteTime(path), - File.GetLastWriteTime(path) == File.GetCreationTime(path) ? 1 : 2, DateTime.Now); } diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentSource.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentSource.cs index 0159f20852..0c837991d1 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentSource.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentSource.cs @@ -60,8 +60,8 @@ namespace Volo.Docs.GitHub.Documents rootUrl, rawRootUrl, localDirectory, + fileCommits.LastOrDefault()?.Commit.Author.Date.DateTime ?? DateTime.MinValue, fileCommits.FirstOrDefault()?.Commit.Author.Date.DateTime ?? DateTime.MinValue, - fileCommits.Count, DateTime.Now); var authors = fileCommits diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hans.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hans.json index bbc0014c95..3eec4562bb 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hans.json +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hans.json @@ -18,6 +18,8 @@ "DocumentNotFoundInSelectedLanguage": "本文档不适用于所选语言, 将以默认语言显示文档.", "FilterTopics": "过滤主题", "New": "新文档", - "Upd": "更新" + "Upd": "更新", + "NewExplanation": "在最近两周内创建.", + "UpdatedExplanation": "在最近两周内更新." } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hant.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hant.json index 9d24c75510..5c3d723b0a 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hant.json +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hant.json @@ -18,6 +18,8 @@ "DocumentNotFoundInSelectedLanguage": "本文件不適用於所選語系,將以預設語系顯示.", "FilterTopics": "過濾主題", "New": "新文檔", - "Upd": "更新" + "Upd": "更新", + "NewExplanation": "在最近兩周內創建.", + "UpdatedExplanation": "在最近兩周內更新." } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs b/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs index aa66f4c82f..1c57191d0a 100644 --- a/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs +++ b/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs @@ -125,15 +125,18 @@ namespace Volo.Docs.Areas.Documents.TagHelpers { var badge = ""; - if (!node.Path.IsNullOrWhiteSpace() && node.LastUpdatedTime.HasValue && node.LastUpdatedTime + TimeSpan.FromDays(14) > DateTime.Now) + if (!node.Path.IsNullOrWhiteSpace() && node.CreationTime.HasValue && node.LastUpdatedTime.HasValue) { - if (node.UpdatedCount > 1) + var newBadge = "" + _localizer["New"] + ""; + var updBadge = "" + _localizer["Upd"] + ""; + + if(node.CreationTime + TimeSpan.FromDays(14) > DateTime.Now) { - badge = "" + _localizer["Upd"] + ""; + badge = newBadge; } - else + else if (node.LastUpdatedTime + TimeSpan.FromDays(14) > DateTime.Now) { - badge = "" + _localizer["New"] + ""; + badge = updBadge; } } diff --git a/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestDataBuilder.cs b/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestDataBuilder.cs index 1325ec04a3..e7eadd7562 100644 --- a/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestDataBuilder.cs +++ b/modules/docs/test/Volo.Docs.TestBase/Volo/Docs/DocsTestDataBuilder.cs @@ -47,7 +47,7 @@ namespace Volo.Docs await _documentRepository.InsertAsync(new Document(Guid.NewGuid(), project.Id, "CLI.md", "2.0.0", "en", "CLI.md", "this is abp cli", "md", "https://github.com/abpframework/abp/blob/2.0.0/docs/en/CLI.md", "https://github.com/abpframework/abp/tree/2.0.0/docs/", - "https://raw.githubusercontent.com/abpframework/abp/2.0.0/docs/en/", "", DateTime.Now, 1, + "https://raw.githubusercontent.com/abpframework/abp/2.0.0/docs/en/", "", DateTime.Now, DateTime.Now, DateTime.Now)); } } From 7c15623dd2b079484837a277b0e835187df7c6d2 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Tue, 18 Feb 2020 10:09:15 +0300 Subject: [PATCH 404/411] doc: add deprecation warning --- npm/ng-packs/packages/theme-shared/src/lib/models/toaster.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/models/toaster.ts b/npm/ng-packs/packages/theme-shared/src/lib/models/toaster.ts index 34fe04f351..27a2b6b460 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/models/toaster.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/models/toaster.ts @@ -21,6 +21,9 @@ export namespace Toaster { export type Severity = 'neutral' | 'success' | 'info' | 'warning' | 'error'; + /** + * @deprecated Status will be removed from toaster model in v2.2 + */ export enum Status { confirm = 'confirm', reject = 'reject', From ea391d7d6c79078957f2b499ecb6fc7f6b6b019f Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Tue, 18 Feb 2020 10:09:51 +0300 Subject: [PATCH 405/411] refactor(theme-shared): add status enum to confirmation model and use it instead of toaster status enum --- .../confirmation/confirmation.component.ts | 9 ++++----- .../src/lib/models/confirmation.ts | 6 ++++++ .../src/lib/services/confirmation.service.ts | 19 +++++++++---------- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts index afdb024888..92188acb34 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts @@ -2,7 +2,6 @@ import { Component } from '@angular/core'; import { ConfirmationService } from '../../services/confirmation.service'; import { Confirmation } from '../../models/confirmation'; import { LocalizationService } from '@abp/ng.core'; -import { Toaster } from '../../models/toaster'; @Component({ selector: 'abp-confirmation', @@ -10,9 +9,9 @@ import { Toaster } from '../../models/toaster'; styleUrls: ['./confirmation.component.scss'], }) export class ConfirmationComponent { - confirm = Toaster.Status.confirm; - reject = Toaster.Status.reject; - dismiss = Toaster.Status.dismiss; + confirm = Confirmation.Status.confirm; + reject = Confirmation.Status.reject; + dismiss = Confirmation.Status.dismiss; visible = false; @@ -43,7 +42,7 @@ export class ConfirmationComponent { }); } - close(status: Toaster.Status) { + close(status: Confirmation.Status) { this.confirmationService.clear(status); } } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/models/confirmation.ts b/npm/ng-packs/packages/theme-shared/src/lib/models/confirmation.ts index 40925c1b2c..815fd65c20 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/models/confirmation.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/models/confirmation.ts @@ -20,4 +20,10 @@ export namespace Confirmation { } export type Severity = 'neutral' | 'success' | 'info' | 'warning' | 'error'; + + export enum Status { + confirm = 'confirm', + reject = 'reject', + dismiss = 'dismiss', + } } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts b/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts index f66dfd768d..2db6d38091 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts @@ -2,19 +2,18 @@ import { Injectable } from '@angular/core'; import { Confirmation } from '../models/confirmation'; import { fromEvent, Observable, Subject, ReplaySubject } from 'rxjs'; import { takeUntil, debounceTime, filter } from 'rxjs/operators'; -import { Toaster } from '../models/toaster'; import { Config } from '@abp/ng.core'; @Injectable({ providedIn: 'root' }) export class ConfirmationService { - status$: Subject; + status$: Subject; confirmation$ = new ReplaySubject(1); info( message: Config.LocalizationParam, title: Config.LocalizationParam, options?: Partial, - ): Observable { + ): Observable { return this.show(message, title, 'info', options); } @@ -22,7 +21,7 @@ export class ConfirmationService { message: Config.LocalizationParam, title: Config.LocalizationParam, options?: Partial, - ): Observable { + ): Observable { return this.show(message, title, 'success', options); } @@ -30,7 +29,7 @@ export class ConfirmationService { message: Config.LocalizationParam, title: Config.LocalizationParam, options?: Partial, - ): Observable { + ): Observable { return this.show(message, title, 'warning', options); } @@ -38,16 +37,16 @@ export class ConfirmationService { message: Config.LocalizationParam, title: Config.LocalizationParam, options?: Partial, - ): Observable { + ): Observable { return this.show(message, title, 'error', options); } show( message: Config.LocalizationParam, title: Config.LocalizationParam, - severity?: Toaster.Severity, + severity?: Confirmation.Severity, options?: Partial, - ): Observable { + ): Observable { this.confirmation$.next({ message, title, @@ -59,9 +58,9 @@ export class ConfirmationService { return this.status$; } - clear(status?: Toaster.Status) { + clear(status?: Confirmation.Status) { this.confirmation$.next(); - this.status$.next(status || Toaster.Status.dismiss); + this.status$.next(status || Confirmation.Status.dismiss); } listenToEscape() { From 1638d5cefb30a09965df1b1e602c463aaaab0c5d Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 18 Feb 2020 19:31:54 +0800 Subject: [PATCH 406/411] Make sure the script is executed before the callback method. --- npm/packs/jquery/src/abp.jquery.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/npm/packs/jquery/src/abp.jquery.js b/npm/packs/jquery/src/abp.jquery.js index bf4c920815..ece722404d 100644 --- a/npm/packs/jquery/src/abp.jquery.js +++ b/npm/packs/jquery/src/abp.jquery.js @@ -359,13 +359,17 @@ var _loadScript = function (url, loadCallback, failCallback) { _loadFromUrl(url, loadCallback, failCallback, function (urlInfo) { - $.getScript(url) - .done(function () { - urlInfo.succeed(); - }) - .fail(function () { - urlInfo.failed(); - }); + $.get({ + url: url, + dataType: 'text' + }) + .done(function (script) { + jQuery.globalEval(script); + urlInfo.succeed(); + }) + .fail(function () { + urlInfo.failed(); + }); }); }; From 561be154db196f6e0ed5c6b4187cdf47d8f91cde Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 18 Feb 2020 19:36:54 +0800 Subject: [PATCH 407/411] Use $ instead of jQuery. --- npm/packs/jquery/src/abp.jquery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/packs/jquery/src/abp.jquery.js b/npm/packs/jquery/src/abp.jquery.js index ece722404d..76f54df1a0 100644 --- a/npm/packs/jquery/src/abp.jquery.js +++ b/npm/packs/jquery/src/abp.jquery.js @@ -364,7 +364,7 @@ dataType: 'text' }) .done(function (script) { - jQuery.globalEval(script); + $.globalEval(script); urlInfo.succeed(); }) .fail(function () { From bee0d50b26a9430cfbca35dd6f860bbe1800c759 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 19 Feb 2020 16:59:03 +0800 Subject: [PATCH 408/411] Add AbpAccountApplicationModule to the AuthServer.Host project of the MicroserviceDemo. https://github.com/abpframework/abp/pull/2642 --- .../applications/AuthServer.Host/AuthServer.Host.csproj | 1 + .../applications/AuthServer.Host/AuthServerHostModule.cs | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj index 158c9360ed..c828edc0ae 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj @@ -29,6 +29,7 @@ + diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerHostModule.cs b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerHostModule.cs index 7ff9ae7c51..9c9ccd2a99 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerHostModule.cs +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServerHostModule.cs @@ -1,9 +1,10 @@ -using AuthServer.Host.EntityFrameworkCore; +using AuthServer.Host.EntityFrameworkCore; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.DataProtection; using Microsoft.Extensions.DependencyInjection; using StackExchange.Redis; using Volo.Abp; +using Volo.Abp.Account; using Volo.Abp.Account.Web; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; using Volo.Abp.Auditing; @@ -34,6 +35,7 @@ namespace AuthServer.Host typeof(AbpSettingManagementEntityFrameworkCoreModule), typeof(AbpIdentityEntityFrameworkCoreModule), typeof(AbpIdentityApplicationContractsModule), + typeof(AbpAccountApplicationModule), typeof(AbpIdentityServerEntityFrameworkCoreModule), typeof(AbpEntityFrameworkCoreSqlServerModule), typeof(AbpAccountWebIdentityServerModule), From 1a03104ef2e89879008d8cda0cd36b85c9f2113a Mon Sep 17 00:00:00 2001 From: AkinCam <172804016@ogr.cbu.edu.tr> Date: Wed, 19 Feb 2020 23:26:11 +0300 Subject: [PATCH 409/411] added localization key --- .../AbpIoLocalization/Commercial/Localization/Resources/en.json | 1 + 1 file changed, 1 insertion(+) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 1b4c9a69f8..7987b9ab32 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -6,6 +6,7 @@ "Volo.AbpIo.Commercial:010003": "You are not owner of this organization!", "OrganizationNotFoundMessage": "No organization found!", "DeveloperCount": "Developer count", + "QuestionCount": "Question count", "Owners": "Owners", "AddMember": "Add member", "AddOwner": "Add owner", From 522d31065c5a2d1cbf6931efa61233575d1fc8a7 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 20 Feb 2020 09:58:21 +0800 Subject: [PATCH 410/411] Update Docs module sql. fix #2864 --- docs/en/Modules/Docs.md | 4 ++-- docs/zh-Hans/Modules/Docs.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/en/Modules/Docs.md b/docs/en/Modules/Docs.md index c42a3c2bcc..afcc1a9dd7 100644 --- a/docs/en/Modules/Docs.md +++ b/docs/en/Modules/Docs.md @@ -328,7 +328,7 @@ You can use [ABP Framework](https://github.com/abpframework/abp/) GitHub documen For `SQL` databases, you can use the below `T-SQL` command to insert the specified sample into your `DocsProjects` table: ```mssql -INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939658', N'ABP framework (GitHub)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'GitHub', N'{"GitHubRootUrl":"https://github.com/abpframework/abp/tree/{version}/docs","GitHubAccessToken":"***"}', N'/', N'master') +INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName], [ParametersDocumentName]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939658', N'ABP framework (GitHub)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'GitHub', N'{"GitHubRootUrl":"https://github.com/abpframework/abp/tree/{version}/docs","GitHubAccessToken":"***"}', N'/', N'master', N'') ``` Be aware that `GitHubAccessToken` is masked. It's a private token and you must get your own token and replace the `***` string. @@ -366,7 +366,7 @@ You can use [ABP Framework](https://github.com/abpframework/abp/) GitHub documen For `SQL` databases, you can use the below `T-SQL` command to insert the specified sample into your `DocsProjects` table: ```mssql -INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939659', N'ABP framework (FileSystem)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'FileSystem', N'{"Path":"C:\\Github\\abp\\docs"}', N'/', NULL) +INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName], [ParametersDocumentName]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939659', N'ABP framework (FileSystem)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'FileSystem', N'{"Path":"C:\\Github\\abp\\docs"}', N'/', NULL, N'') ``` Add one of the sample projects above and run the application. In the menu you will see `Documents` link, click the menu link to open the documents page. diff --git a/docs/zh-Hans/Modules/Docs.md b/docs/zh-Hans/Modules/Docs.md index 3bd71d554f..f2a92334fb 100644 --- a/docs/zh-Hans/Modules/Docs.md +++ b/docs/zh-Hans/Modules/Docs.md @@ -321,7 +321,7 @@ There are no projects yet! 对于 `SQL` 数据库,你可以使用下面的 `T-SQL` 命令将指定的示例插入到 `DocsProjects` 表中: ```mssql -INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939658', N'ABP framework (GitHub)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'GitHub', N'{"GitHubRootUrl":"https://github.com/abpframework/abp/tree/{version}/docs/zh-Hans/","GitHubAccessToken":"***"}', N'/', N'master') +INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName], [ParametersDocumentName]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939658', N'ABP framework (GitHub)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'GitHub', N'{"GitHubRootUrl":"https://github.com/abpframework/abp/tree/{version}/docs","GitHubAccessToken":"***"}', N'/', N'master', N'') ``` 请注意,`GitHubAccessToken` 被屏蔽了.它是一个私人令牌,你必须获得自己的令牌并替换 `***` 字符串. @@ -359,7 +359,7 @@ INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocume 对于 `SQL` 数据库,你可以使用下面的 `T-SQL` 命令将指定的示例插入到 `DocsProjects` 表中: ```mssql -INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939659', N'ABP framework (FileSystem)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'FileSystem', N'{"Path":"C:\\Github\\abp\\docs"}', N'/', NULL) +INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName], [ParametersDocumentName]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939659', N'ABP framework (FileSystem)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'FileSystem', N'{"Path":"C:\\Github\\abp\\docs"}', N'/', NULL, N'') ``` 添加上面的一个示例项目后运行该应用程序. 在菜单中你会看到`文档` 链接,点击菜单链接打开文档页面. From 1f6375eb2fabe0612ccbb549b65963575734063d Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Thu, 20 Feb 2020 09:29:47 +0300 Subject: [PATCH 411/411] Blogging module: Fix ShortContent generation resolves https://github.com/abpframework/abp/issues/2865 --- .../Pages/Blogs/BloggingPage.cs | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/BloggingPage.cs b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/BloggingPage.cs index ed3bb0971c..0808432521 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/BloggingPage.cs +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/BloggingPage.cs @@ -1,5 +1,7 @@ using System; +using System.Linq; using System.Text; +using System.Text.RegularExpressions; using CommonMark; using Microsoft.AspNetCore.Html; using Microsoft.AspNetCore.Mvc.Localization; @@ -30,30 +32,27 @@ namespace Volo.Blogging.Pages.Blog public string GetShortContent(string content) //TODO: This should be moved to its own place! { - var openingTag = "

    "; - var closingTag = "

    "; - var html = RenderMarkdownToString(content); - if (string.IsNullOrWhiteSpace(html)) + var plainText = Regex.Replace(html, "/<[^>]*>/g", ""); + + if (string.IsNullOrWhiteSpace(plainText)) { return ""; } - var splittedHtml = html.Split(closingTag); - if (splittedHtml.Length < 1) + var firsParag = plainText.Split(Environment.NewLine).FirstOrDefault(s => !string.IsNullOrWhiteSpace(s)); + + if (firsParag == null) { - return ""; + return plainText; } - var firstHtmlPart = splittedHtml[0]; - var paragraphStartIndex = firstHtmlPart.IndexOf(openingTag, StringComparison.Ordinal) + openingTag.Length; - - if (firstHtmlPart.Length - paragraphStartIndex <= MaxShortContentLength) + if (firsParag.Length <= MaxShortContentLength) { - return firstHtmlPart.Substring(paragraphStartIndex); + return firsParag; } - return firstHtmlPart.Substring(paragraphStartIndex, MaxShortContentLength) + "..."; + return firsParag.Substring(0, MaxShortContentLength) + "..."; } public IHtmlContent RenderMarkdownToHtml(string content)

    CK>T%zWVBm7f18? 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%0A_`Z$!_<9HW^x&7WSPl75umwpXM4VBpXrDu$Y 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∾h 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

  • Cr>Cc}(n+J|;a1%Dp&0<6r)koL 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

    _eRkf5PCy>H!BTP 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