diff --git a/common.props b/common.props
index e97735b0ac..a8a4942585 100644
--- a/common.props
+++ b/common.props
@@ -1,7 +1,7 @@
latest
- 0.19.0
+ 0.20.0
$(NoWarn);CS1591
https://abp.io/assets/abp_nupkg.png
https://abp.io
diff --git a/common.test.props b/common.test.props
new file mode 100644
index 0000000000..e90103e606
--- /dev/null
+++ b/common.test.props
@@ -0,0 +1,10 @@
+
+
+ latest
+ $(NoWarn);CS1591
+ true
+ false
+ false
+ false
+
+
\ 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 7d8a961507..e4b8bae75f 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
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.AspNetCore.Authentication.JwtBearer
Volo.Abp.AspNetCore.Authentication.JwtBearer
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
@@ -18,7 +18,7 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Properties/launchSettings.json b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Properties/launchSettings.json
new file mode 100644
index 0000000000..fcbf86698d
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:53450/",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "Volo.Abp.AspNetCore.Authentication.OAuth": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "http://localhost:53451/"
+ }
+ }
+}
\ 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 54c93df3ec..8541a681f0 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,15 +1,17 @@
-
+
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.AspNetCore.Authentication.OAuth
Volo.Abp.AspNetCore.Authentication.OAuth
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
false
false
false
+ true
+ Library
@@ -17,8 +19,4 @@
-
-
-
-
-
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Volo/Abp/AspNetCore/Authentication/OAuth/Claims/MultipleClaimAction.cs b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Volo/Abp/AspNetCore/Authentication/OAuth/Claims/MultipleClaimAction.cs
index 742f91d057..074cc936d0 100644
--- a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Volo/Abp/AspNetCore/Authentication/OAuth/Claims/MultipleClaimAction.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Volo/Abp/AspNetCore/Authentication/OAuth/Claims/MultipleClaimAction.cs
@@ -1,6 +1,6 @@
using System.Security.Claims;
+using System.Text.Json;
using Microsoft.AspNetCore.Authentication.OAuth.Claims;
-using Newtonsoft.Json.Linq;
namespace Volo.Abp.AspNetCore.Authentication.OAuth.Claims
{
@@ -9,31 +9,30 @@ namespace Volo.Abp.AspNetCore.Authentication.OAuth.Claims
public MultipleClaimAction(string claimType, string jsonKey)
: base(claimType, jsonKey)
{
+
}
- public override void Run(JObject userData, ClaimsIdentity identity, string issuer)
- {
- var prop = userData?.Property(ValueType);
- if (prop == null)
+ public override void Run(JsonElement userData, ClaimsIdentity identity, string issuer)
+ {
+ var prop = userData.GetProperty(ValueType);
+ if (prop.ValueKind == JsonValueKind.Null)
{
return;
}
- var propValue = prop.Value;
-
- switch (propValue.Type)
+ switch (prop.ValueKind)
{
- case JTokenType.String:
- identity.AddClaim(new Claim(ClaimType, propValue.Value(), ValueType, issuer));
+ case JsonValueKind.String:
+ identity.AddClaim(new Claim(ClaimType, prop.GetString(), ValueType, issuer));
break;
- case JTokenType.Array:
- foreach (var innterValue in propValue.Values())
+ case JsonValueKind.Array:
+ foreach (var arramItem in prop.EnumerateArray())
{
- identity.AddClaim(new Claim(ClaimType, innterValue, ValueType, issuer));
+ identity.AddClaim(new Claim(ClaimType, arramItem.GetString(), ValueType, issuer));
}
break;
default:
- throw new AbpException("Unhandled JTokenType: " + propValue.Type);
+ throw new AbpException("Unhandled JsonValueKind: " + prop.ValueKind);
}
}
}
diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Properties/launchSettings.json b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Properties/launchSettings.json
new file mode 100644
index 0000000000..67c494aa28
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:53760/",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "Volo.Abp.AspNetCore.MultiTenancy": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "http://localhost:53763/"
+ }
+ }
+}
\ 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 6904fe07b1..384aaa262e 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,15 +1,17 @@
-
+
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.AspNetCore.MultiTenancy
Volo.Abp.AspNetCore.MultiTenancy
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
false
false
false
+ true
+ Library
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Properties/launchSettings.json b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Properties/launchSettings.json
new file mode 100644
index 0000000000..e17b14d87f
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:52302/",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "Volo.Abp.AspNetCore.Mvc.Client": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "http://localhost:52303/"
+ }
+ }
+}
\ 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 9d05c9e34b..253bf0d288 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,15 +1,17 @@
-
+
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.AspNetCore.Mvc.Client
Volo.Abp.AspNetCore.Mvc.Client
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
false
false
false
+ true
+ Library
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 4ceb8bdd1c..838150fd49 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
@@ -13,8 +13,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Client
{
public class CachedApplicationConfigurationClient : ICachedApplicationConfigurationClient, ITransientDependency
{
- public IHttpContextAccessor HttpContextAccessor { get; set; }
-
+ protected IHttpContextAccessor HttpContextAccessor { get; }
protected IHttpClientProxy Proxy { get; }
protected ICurrentUser CurrentUser { get; }
protected IDistributedCache Cache { get; }
@@ -42,11 +41,11 @@ namespace Volo.Abp.AspNetCore.Mvc.Client
}
configuration = await Cache.GetOrAddAsync(
- CreateCacheKey(),
+ cacheKey,
async () => await Proxy.Service.GetAsync(),
() => new DistributedCacheEntryOptions
{
- AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(60) //TODO: Should be configurable. Default value should be higher (5 mins would be good).
+ AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(120) //TODO: Should be configurable. Default value should be higher (5 mins would be good).
}
);
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
new file mode 100644
index 0000000000..718abbb6a9
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteTenantStore.cs
@@ -0,0 +1,116 @@
+using System;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Caching.Distributed;
+using Volo.Abp.AspNetCore.Mvc.MultiTenancy;
+using Volo.Abp.Caching;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Http.Client.DynamicProxying;
+using Volo.Abp.MultiTenancy;
+using Volo.Abp.Threading;
+
+namespace Volo.Abp.AspNetCore.Mvc.Client
+{
+ public class RemoteTenantStore : ITenantStore, ITransientDependency
+ {
+ protected IHttpClientProxy Proxy { get; }
+ protected IHttpContextAccessor HttpContextAccessor { get; }
+ protected IDistributedCache Cache { get; }
+
+ public RemoteTenantStore(
+ IHttpClientProxy proxy,
+ IHttpContextAccessor httpContextAccessor,
+ IDistributedCache cache)
+ {
+ Proxy = proxy;
+ HttpContextAccessor = httpContextAccessor;
+ Cache = cache;
+ }
+
+ public async Task FindAsync(string name)
+ {
+ var cacheKey = CreateCacheKey(name);
+ var httpContext = HttpContextAccessor?.HttpContext;
+
+ if (httpContext != null && httpContext.Items[cacheKey] is TenantConfiguration tenantConfiguration)
+ {
+ return tenantConfiguration;
+ }
+
+ tenantConfiguration = await Cache.GetOrAddAsync(
+ cacheKey,
+ async () => CreateTenantConfiguration(await Proxy.Service.FindTenantByNameAsync(name)),
+ () => new DistributedCacheEntryOptions
+ {
+ AbsoluteExpirationRelativeToNow =
+ TimeSpan.FromMinutes(5) //TODO: Should be configurable.
+ }
+ );
+
+ if (httpContext != null)
+ {
+ httpContext.Items[cacheKey] = tenantConfiguration;
+ }
+
+ return tenantConfiguration;
+ }
+
+ public async Task FindAsync(Guid id)
+ {
+ var cacheKey = CreateCacheKey(id);
+ var httpContext = HttpContextAccessor?.HttpContext;
+
+ if (httpContext != null && httpContext.Items[cacheKey] is TenantConfiguration tenantConfiguration)
+ {
+ return tenantConfiguration;
+ }
+
+ tenantConfiguration = await Cache.GetOrAddAsync(
+ cacheKey,
+ async () => CreateTenantConfiguration(await Proxy.Service.FindTenantByIdAsync(id)),
+ () => new DistributedCacheEntryOptions
+ {
+ AbsoluteExpirationRelativeToNow =
+ TimeSpan.FromMinutes(5) //TODO: Should be configurable.
+ }
+ );
+
+ if (httpContext != null)
+ {
+ httpContext.Items[cacheKey] = tenantConfiguration;
+ }
+
+ return tenantConfiguration;
+ }
+
+ public TenantConfiguration Find(string name)
+ {
+ return AsyncHelper.RunSync(() => FindAsync(name));
+ }
+
+ public TenantConfiguration Find(Guid id)
+ {
+ return AsyncHelper.RunSync(() => FindAsync(id));
+ }
+
+ protected virtual TenantConfiguration CreateTenantConfiguration(FindTenantResultDto tenantResultDto)
+ {
+ if (!tenantResultDto.Success || tenantResultDto.TenantId == null)
+ {
+ return null;
+ }
+
+ return new TenantConfiguration(tenantResultDto.TenantId.Value, tenantResultDto.Name);
+ }
+
+ protected virtual string CreateCacheKey(string tenantName)
+ {
+ return $"RemoteTenantStore_Name_{tenantName}";
+ }
+
+ protected virtual string CreateCacheKey(Guid tenantId)
+ {
+ return $"RemoteTenantStore_Id_{tenantId:N}";
+ }
+ }
+}
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 8141097dc6..173ff3cfbe 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
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.AspNetCore.Mvc.Contracts
Volo.Abp.AspNetCore.Mvc.Contracts
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/MultiTenancy/FindTenantResultDto.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/MultiTenancy/FindTenantResultDto.cs
new file mode 100644
index 0000000000..d85622f0cf
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/MultiTenancy/FindTenantResultDto.cs
@@ -0,0 +1,14 @@
+using System;
+
+namespace Volo.Abp.AspNetCore.Mvc.MultiTenancy
+{
+ [Serializable]
+ public class FindTenantResultDto
+ {
+ public bool Success { get; set; }
+
+ public Guid? TenantId { get; set; }
+
+ public string Name { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/MultiTenancy/IAbpTenantAppService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/MultiTenancy/IAbpTenantAppService.cs
new file mode 100644
index 0000000000..eb02e84ceb
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/MultiTenancy/IAbpTenantAppService.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Services;
+
+namespace Volo.Abp.AspNetCore.Mvc.MultiTenancy
+{
+ public interface IAbpTenantAppService : IApplicationService
+ {
+ Task FindTenantByNameAsync(string name);
+
+ Task FindTenantByIdAsync(Guid id);
+ }
+}
\ 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 b9e1538272..f0eabc0025 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,13 +1,13 @@
-
+
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.AspNetCore.Mvc.UI.Bootstrap
Volo.Abp.AspNetCore.Mvc.UI.Bootstrap
- true
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
+ true
Library
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Properties/launchSettings.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Properties/launchSettings.json
new file mode 100644
index 0000000000..7bcd0a8aff
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:53762/",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "Volo.Abp.AspNetCore.Mvc.UI.Bundling": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "http://localhost:53765/"
+ }
+ }
+}
\ 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 579d3a659b..4427b40dd6 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,11 +1,13 @@
-
+
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.AspNetCore.Mvc.UI.Bundling
Volo.Abp.AspNetCore.Mvc.UI.Bundling
+ true
+ Library
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 3f99614aa9..35bf730d70 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
@@ -4,6 +4,7 @@ using System.Collections.Immutable;
using System.Linq;
using System.Text;
using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options;
@@ -23,7 +24,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling
protected readonly BundlingOptions Options;
protected readonly BundleContributorOptions ContributorOptions;
protected readonly IWebContentFileProvider WebContentFileProvider;
- protected readonly IHostingEnvironment HostingEnvironment;
+ protected readonly IWebHostEnvironment HostingEnvironment;
protected readonly IScriptBundler ScriptBundler;
protected readonly IStyleBundler StyleBundler;
protected readonly IServiceProvider ServiceProvider;
@@ -36,7 +37,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling
IOptions contributorOptions,
IScriptBundler scriptBundler,
IStyleBundler styleBundler,
- IHostingEnvironment hostingEnvironment,
+ IWebHostEnvironment hostingEnvironment,
IServiceProvider serviceProvider,
IDynamicFileProvider dynamicFileProvider,
IBundleCache bundleCache,
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/Styles/StyleBundler.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/Styles/StyleBundler.cs
index 31c3f1dacf..ac33211860 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/Styles/StyleBundler.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/Styles/StyleBundler.cs
@@ -8,10 +8,10 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.Styles
{
public class StyleBundler : BundlerBase, IStyleBundler
{
- private readonly IHostingEnvironment _hostingEnvironment;
+ private readonly IWebHostEnvironment _hostingEnvironment;
public override string FileExtension => "css";
- public StyleBundler(IWebContentFileProvider webContentFileProvider, ICssMinifier minifier, IHostingEnvironment hostingEnvironment)
+ public StyleBundler(IWebContentFileProvider webContentFileProvider, ICssMinifier minifier, IWebHostEnvironment hostingEnvironment)
: base(webContentFileProvider, minifier)
{
_hostingEnvironment = hostingEnvironment;
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 2224198dc4..981da4e4da 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
@@ -19,14 +19,14 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
protected IBundleManager BundleManager { get; }
protected IWebContentFileProvider WebContentFileProvider { get; }
- protected IHostingEnvironment HostingEnvironment { get; }
+ protected IWebHostEnvironment HostingEnvironment { get; }
protected readonly BundlingOptions Options;
protected AbpTagHelperResourceService(
IBundleManager bundleManager,
IWebContentFileProvider webContentFileProvider,
- IOptions options,
- IHostingEnvironment hostingEnvironment)
+ IOptions options,
+ IWebHostEnvironment hostingEnvironment)
{
BundleManager = bundleManager;
WebContentFileProvider = webContentFileProvider;
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 b4f2ba1b77..8c8e2abc5a 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
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Razor.TagHelpers;
+using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
using Volo.Abp.AspNetCore.VirtualFileSystem;
@@ -14,7 +15,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
IBundleManager bundleManager,
IWebContentFileProvider webContentFileProvider,
IOptions options,
- IHostingEnvironment hostingEnvironment
+ IWebHostEnvironment hostingEnvironment
) : base(
bundleManager,
webContentFileProvider,
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 2a0946cfd2..400a75553f 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
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Razor.TagHelpers;
+using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
using Volo.Abp.AspNetCore.VirtualFileSystem;
@@ -14,7 +15,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
IBundleManager bundleManager,
IWebContentFileProvider webContentFileProvider,
IOptions options,
- IHostingEnvironment hostingEnvironment
+ IWebHostEnvironment hostingEnvironment
) : base(
bundleManager,
webContentFileProvider,
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
new file mode 100644
index 0000000000..d0bea87196
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/AbpTenantAppService.cs
@@ -0,0 +1,52 @@
+using System;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Services;
+using Volo.Abp.AspNetCore.Mvc.MultiTenancy;
+using Volo.Abp.MultiTenancy;
+
+namespace Pages.Abp.MultiTenancy
+{
+ public class AbpTenantAppService : ApplicationService, IAbpTenantAppService
+ {
+ protected ITenantStore TenantStore { get; }
+
+ public AbpTenantAppService(ITenantStore tenantStore)
+ {
+ TenantStore = tenantStore;
+ }
+
+ public async Task FindTenantByNameAsync(string name)
+ {
+ var tenant = await TenantStore.FindAsync(name);
+
+ if (tenant == null)
+ {
+ return new FindTenantResultDto { Success = false };
+ }
+
+ return new FindTenantResultDto
+ {
+ Success = true,
+ TenantId = tenant.Id,
+ Name = tenant.Name
+ };
+ }
+
+ public async Task FindTenantByIdAsync(Guid id)
+ {
+ var tenant = await TenantStore.FindAsync(id);
+
+ if (tenant == null)
+ {
+ return new FindTenantResultDto { Success = false };
+ }
+
+ return new FindTenantResultDto
+ {
+ Success = true,
+ TenantId = tenant.Id,
+ Name = tenant.Name
+ };
+ }
+ }
+}
\ No newline at end of file
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 d42cf82f9b..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
@@ -1,37 +1,34 @@
-using System.Threading.Tasks;
+using System;
+using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc;
-using Volo.Abp.MultiTenancy;
+using Volo.Abp.AspNetCore.Mvc.MultiTenancy;
namespace Pages.Abp.MultiTenancy
{
[Route("api/abp/multi-tenancy")]
- public class AbpTenantController : AbpController
+ public class AbpTenantController : AbpController, IAbpTenantAppService
{
+ private readonly IAbpTenantAppService _abpTenantAppService;
- protected ITenantStore TenantStore { get; }
-
- public AbpTenantController(ITenantStore tenantStore)
+ public AbpTenantController(IAbpTenantAppService abpTenantAppService)
{
- TenantStore = tenantStore;
+ _abpTenantAppService = abpTenantAppService;
}
[HttpGet]
- [Route("find-tenant/{name}")]
- public async Task FindTenantAsync(string name)
+ [Route("find-tenant/{name}")] //TODO: Remove on v1.0
+ [Route("tenants/by-name/{name}")]
+ public async Task FindTenantByNameAsync(string name)
{
- var tenant = await TenantStore.FindAsync(name);
-
- if (tenant == null)
- {
- return new FindTenantResult{Success = false};
- }
+ return await _abpTenantAppService.FindTenantByNameAsync(name);
+ }
- return new FindTenantResult
- {
- Success = true,
- TenantId = tenant.Id
- };
+ [HttpGet]
+ [Route("tenants/by-id/{id}")]
+ public async Task FindTenantByIdAsync(Guid id)
+ {
+ return await _abpTenantAppService.FindTenantByIdAsync(id);
}
}
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/FindTenantResult.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/FindTenantResult.cs
deleted file mode 100644
index 59aef8335e..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/FindTenantResult.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using System;
-
-namespace Pages.Abp.MultiTenancy
-{
- public class FindTenantResult
- {
- public bool Success { get; set; }
-
- public Guid? TenantId { get; set; }
- }
-}
\ 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 d0015b0e57..d55e9ec2df 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,9 +1,9 @@
-
+
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy
Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Properties/launchSettings.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Properties/launchSettings.json
new file mode 100644
index 0000000000..4ae9c1d2f1
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:53766/",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "Volo.Abp.AspNetCore.Mvc.UI.Packages": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "http://localhost:53768/"
+ }
+ }
+}
\ 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 cc4db153d6..b91f36abf0 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,11 +1,13 @@
-
+
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.AspNetCore.Mvc.UI.Packages
Volo.Abp.AspNetCore.Mvc.UI.Packages
+ true
+ Library
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 654b191bec..f12072816a 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,9 +1,9 @@
-
+
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic
Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
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 898d7c1a0d..258feaf64a 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,9 +1,9 @@
-
+
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared
Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
@@ -32,10 +32,6 @@
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Properties/launchSettings.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Properties/launchSettings.json
new file mode 100644
index 0000000000..e9779c3c37
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:53761/",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "Volo.Abp.AspNetCore.Mvc.UI.Widgets": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "http://localhost:53764/"
+ }
+ }
+}
\ 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 ae41d65026..75b83faaf2 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,11 +1,13 @@
-
+
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.AspNetCore.Mvc.UI.Widgets
Volo.Abp.AspNetCore.Mvc.UI.Widgets
+ true
+ Library
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 34367260f9..03e3d2bbd8 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,12 +1,14 @@
-
+
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.AspNetCore.Mvc.UI
Volo.Abp.AspNetCore.Mvc.UI
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
+ true
+ Library
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Microsoft/AspNetCore/Builder/AbpAspNetCoreMvcApplicationBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Microsoft/AspNetCore/Builder/AbpAspNetCoreMvcApplicationBuilderExtensions.cs
index 8b1f6e9d49..9a19337c5f 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Microsoft/AspNetCore/Builder/AbpAspNetCoreMvcApplicationBuilderExtensions.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Microsoft/AspNetCore/Builder/AbpAspNetCoreMvcApplicationBuilderExtensions.cs
@@ -17,19 +17,15 @@ namespace Microsoft.AspNetCore.Builder
/// A reference to this instance after the operation has completed.
public static IApplicationBuilder UseMvcWithDefaultRouteAndArea(
this IApplicationBuilder app,
- Action additionalConfigurationAction = null)
+ Action additionalConfigurationAction = null)
{
- return app.UseMvc(routes =>
+ return app.UseEndpoints(endpoints =>
{
- routes.MapRoute(
- name: "defaultWithArea",
- template: "{area}/{controller=Home}/{action=Index}/{id?}");
+ endpoints.MapControllerRoute("defaultWithArea", "{area}/{controller=Home}/{action=Index}/{id?}");
+ endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");
+ endpoints.MapRazorPages();
- routes.MapRoute(
- name: "default",
- template: "{controller=Home}/{action=Index}/{id?}");
-
- additionalConfigurationAction?.Invoke(routes);
+ additionalConfigurationAction?.Invoke(endpoints);
});
}
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Properties/launchSettings.json b/framework/src/Volo.Abp.AspNetCore.Mvc/Properties/launchSettings.json
new file mode 100644
index 0000000000..3c84fd21f2
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:53767/",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "Volo.Abp.AspNetCore.Mvc": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "http://localhost:53769/"
+ }
+ }
+}
\ 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 138189864b..1a8e8cb18d 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,15 +1,17 @@
-
+
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.AspNetCore.Mvc
Volo.Abp.AspNetCore.Mvc
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
false
false
false
+ true
+ Library
@@ -22,8 +24,8 @@
-
-
+
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs
index fa317d7211..b094505f6c 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs
@@ -3,12 +3,11 @@ using Microsoft.AspNetCore.Mvc.ApplicationParts;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc.Infrastructure;
-using Microsoft.AspNetCore.Mvc.Razor;
using Microsoft.AspNetCore.Mvc.ViewComponents;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Options;
-using Newtonsoft.Json.Serialization;
+using Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -16,7 +15,6 @@ using System.Reflection;
using Volo.Abp.ApiVersioning;
using Volo.Abp.AspNetCore.Mvc.Conventions;
using Volo.Abp.AspNetCore.Mvc.DependencyInjection;
-using Volo.Abp.AspNetCore.Mvc.Json;
using Volo.Abp.AspNetCore.Mvc.Localization;
using Volo.Abp.AspNetCore.VirtualFileSystem;
using Volo.Abp.DependencyInjection;
@@ -45,8 +43,8 @@ namespace Volo.Abp.AspNetCore.Mvc
{
//Configure Razor
context.Services.Insert(0,
- ServiceDescriptor.Singleton>(
- new ConfigureOptions(options =>
+ ServiceDescriptor.Singleton>(
+ new ConfigureOptions(options =>
{
options.FileProviders.Add(
new RazorViewEngineVirtualFileProvider(
@@ -78,6 +76,7 @@ namespace Volo.Abp.AspNetCore.Mvc
);
var mvcBuilder = context.Services.AddMvc()
+ .AddRazorRuntimeCompilation()
.AddDataAnnotationsLocalization(options =>
{
@@ -86,7 +85,7 @@ namespace Volo.Abp.AspNetCore.Mvc
var resourceType = abpMvcDataAnnotationsLocalizationOptions.AssemblyResources.GetOrDefault(type.Assembly);
return factory.Create(resourceType ?? type);
};
- })
+ })
.AddViewLocalization(); //TODO: How to configure from the application? Also, consider to move to a UI module since APIs does not care about it.
context.Services.ExecutePreConfiguredActions(mvcBuilder);
@@ -112,10 +111,10 @@ namespace Volo.Abp.AspNetCore.Mvc
mvcOptions.AddAbp(context.Services);
});
- Configure(jsonOptions =>
- {
- jsonOptions.SerializerSettings.ContractResolver = new AbpMvcJsonContractResolver(context.Services);
- });
+ //Configure(jsonOptions => @3.0.0!
+ //{
+ // jsonOptions.SerializerSettings.ContractResolver = new AbpMvcJsonContractResolver(context.Services);
+ //});
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Conventions/AbpServiceConvention.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Conventions/AbpServiceConvention.cs
index 2d04e316cb..621072b6ba 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Conventions/AbpServiceConvention.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Conventions/AbpServiceConvention.cs
@@ -4,8 +4,8 @@ using System.Linq;
using System.Reflection;
using JetBrains.Annotations;
using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.ActionConstraints;
using Microsoft.AspNetCore.Mvc.ApplicationModels;
-using Microsoft.AspNetCore.Mvc.Internal;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.Extensions.Options;
using Volo.Abp.Application.Services;
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/DependencyInjection/AbpAspNetCoreMvcConventionalDependencyRegistrar.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/DependencyInjection/AbpAspNetCoreMvcConventionalDependencyRegistrar.cs
index a4f57b1b1f..526470b3ad 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/DependencyInjection/AbpAspNetCoreMvcConventionalDependencyRegistrar.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/DependencyInjection/AbpAspNetCoreMvcConventionalDependencyRegistrar.cs
@@ -7,10 +7,15 @@ using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.Mvc.DependencyInjection
{
- public class AbpAspNetCoreMvcConventionalRegistrar : DefaultConventionalRegistrar
+ public class AbpAspNetCoreMvcConventionalRegistrar : ConventionalRegistrarBase
{
public override void AddType(IServiceCollection services, Type type)
{
+ if (IsConventionalRegistrationDisabled(type))
+ {
+ return;
+ }
+
if (!IsMvcService(type))
{
return;
diff --git a/framework/src/Volo.Abp.AspNetCore.TestBase/Properties/launchSettings.json b/framework/src/Volo.Abp.AspNetCore.TestBase/Properties/launchSettings.json
new file mode 100644
index 0000000000..fca5708e7b
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.TestBase/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:53783/",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "Volo.Abp.AspNetCore.TestBase": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "http://localhost:53784/"
+ }
+ }
+}
\ 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 291a36d6b6..e08579cdb7 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,15 +1,17 @@
-
+
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.AspNetCore.TestBase
Volo.Abp.AspNetCore.TestBase
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
false
false
false
+ true
+ Library
@@ -20,7 +22,7 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/DynamicProxying/AspNetCoreTestDynamicProxyHttpClientFactory.cs b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/DynamicProxying/AspNetCoreTestDynamicProxyHttpClientFactory.cs
index e8463e16cc..71de80b018 100644
--- a/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/DynamicProxying/AspNetCoreTestDynamicProxyHttpClientFactory.cs
+++ b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/DynamicProxying/AspNetCoreTestDynamicProxyHttpClientFactory.cs
@@ -8,11 +8,11 @@ namespace Volo.Abp.AspNetCore.TestBase.DynamicProxying
public class AspNetCoreTestDynamicProxyHttpClientFactory : IDynamicProxyHttpClientFactory, ITransientDependency
{
private readonly ITestServerAccessor _testServerAccessor;
- private readonly IHttpClientFactory _httpClientFactory;
- public AspNetCoreTestDynamicProxyHttpClientFactory(ITestServerAccessor testServerAccessor, IHttpClientFactory httpClientFactory) {
+ public AspNetCoreTestDynamicProxyHttpClientFactory(
+ ITestServerAccessor testServerAccessor)
+ {
_testServerAccessor = testServerAccessor;
- _httpClientFactory = httpClientFactory;
}
public HttpClient Create()
@@ -20,7 +20,8 @@ namespace Volo.Abp.AspNetCore.TestBase.DynamicProxying
return _testServerAccessor.Server.CreateClient();
}
- public HttpClient Create(string name) {
+ public HttpClient Create(string name)
+ {
return Create();
}
}
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 ffb4a9d5cc..e2c930f39c 100644
--- a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs
+++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs
@@ -1,9 +1,5 @@
using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.Linq;
using JetBrains.Annotations;
-using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.RequestLocalization;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
@@ -12,9 +8,6 @@ using Volo.Abp.AspNetCore.Mvc.ExceptionHandling;
using Volo.Abp.AspNetCore.Tracing;
using Volo.Abp.AspNetCore.Uow;
using Volo.Abp.DependencyInjection;
-using Volo.Abp.Localization;
-using Volo.Abp.Settings;
-using Volo.Abp.Threading;
namespace Microsoft.AspNetCore.Builder
{
@@ -51,7 +44,10 @@ namespace Microsoft.AspNetCore.Builder
public static IApplicationBuilder UseAbpRequestLocalization(this IApplicationBuilder app, Action optionsAction = null)
{
- app.ApplicationServices.GetRequiredService().InitLocalizationOptions(optionsAction);
+ app.ApplicationServices
+ .GetRequiredService()
+ .InitLocalizationOptions(optionsAction);
+
return app.UseMiddleware();
}
diff --git a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Hosting/AbpHostingEnvironmentExtensions.cs b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Hosting/AbpHostingEnvironmentExtensions.cs
index 7e8bd32055..039e819b38 100644
--- a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Hosting/AbpHostingEnvironmentExtensions.cs
+++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Hosting/AbpHostingEnvironmentExtensions.cs
@@ -6,7 +6,7 @@ namespace Microsoft.AspNetCore.Hosting
public static class AbpHostingEnvironmentExtensions
{
public static IConfigurationRoot BuildConfiguration(
- this IHostingEnvironment env,
+ this IWebHostEnvironment env,
ConfigurationBuilderOptions options = null)
{
options = options ?? new ConfigurationBuilderOptions();
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 21fa6d96f3..75d903557e 100644
--- a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/AbpRequestLocalizationMiddleware.cs
+++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/AbpRequestLocalizationMiddleware.cs
@@ -1,6 +1,8 @@
using System.Threading.Tasks;
+using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Localization;
+using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;
@@ -9,17 +11,24 @@ namespace Microsoft.AspNetCore.RequestLocalization
public class AbpRequestLocalizationMiddleware : IMiddleware, ITransientDependency
{
private readonly IAbpRequestLocalizationOptionsProvider _requestLocalizationOptionsProvider;
+ private readonly ILoggerFactory _loggerFactory;
public AbpRequestLocalizationMiddleware(
- IAbpRequestLocalizationOptionsProvider requestLocalizationOptionsProvider)
+ IAbpRequestLocalizationOptionsProvider requestLocalizationOptionsProvider,
+ ILoggerFactory loggerFactory)
{
_requestLocalizationOptionsProvider = requestLocalizationOptionsProvider;
+ _loggerFactory = loggerFactory;
}
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
- var options = Options.Create(_requestLocalizationOptionsProvider.GetLocalizationOptions());
- var middleware = new RequestLocalizationMiddleware(next, options);
+ var middleware = new RequestLocalizationMiddleware(
+ next,
+ new OptionsWrapper(_requestLocalizationOptionsProvider.GetLocalizationOptions()),
+ _loggerFactory
+ );
+
await middleware.Invoke(context);
}
}
diff --git a/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/AbpAspNetCoreServiceCollectionExtensions.cs b/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/AbpAspNetCoreServiceCollectionExtensions.cs
index 859bdcdbaf..cf11ab32c3 100644
--- a/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/AbpAspNetCoreServiceCollectionExtensions.cs
+++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/AbpAspNetCoreServiceCollectionExtensions.cs
@@ -5,9 +5,9 @@ namespace Microsoft.Extensions.DependencyInjection
{
public static class AbpAspNetCoreServiceCollectionExtensions
{
- public static IHostingEnvironment GetHostingEnvironment(this IServiceCollection services)
+ public static IWebHostEnvironment GetHostingEnvironment(this IServiceCollection services)
{
- return services.GetSingletonInstance();
+ return services.GetSingletonInstance();
}
public static IConfigurationRoot BuildConfiguration(this IServiceCollection services, ConfigurationBuilderOptions options = null)
diff --git a/framework/src/Volo.Abp.AspNetCore/Properties/launchSettings.json b/framework/src/Volo.Abp.AspNetCore/Properties/launchSettings.json
new file mode 100644
index 0000000000..4098e788cd
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:53374/",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "Volo.Abp.AspNetCore": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "http://localhost:53375/"
+ }
+ }
+}
\ 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 2584654ce8..d6a67c14be 100644
--- a/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj
+++ b/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj
@@ -1,15 +1,17 @@
-
+
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.AspNetCore
Volo.Abp.AspNetCore
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
false
false
false
+ true
+ Library
@@ -26,13 +28,4 @@
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/ApplicationInitializationContextExtensions.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/ApplicationInitializationContextExtensions.cs
index ed41314209..616afc8427 100644
--- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/ApplicationInitializationContextExtensions.cs
+++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/ApplicationInitializationContextExtensions.cs
@@ -13,9 +13,9 @@ namespace Volo.Abp
return context.ServiceProvider.GetRequiredService>().Value;
}
- public static IHostingEnvironment GetEnvironment(this ApplicationInitializationContext context)
+ public static IWebHostEnvironment GetEnvironment(this ApplicationInitializationContext context)
{
- return context.ServiceProvider.GetRequiredService();
+ return context.ServiceProvider.GetRequiredService();
}
public static ILoggerFactory GetLoggerFactory(this ApplicationInitializationContext context)
diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/WebContentFileProvider.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/WebContentFileProvider.cs
index b837007996..ebc7446d68 100644
--- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/WebContentFileProvider.cs
+++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/WebContentFileProvider.cs
@@ -14,14 +14,14 @@ namespace Volo.Abp.AspNetCore.VirtualFileSystem
{
private readonly IVirtualFileProvider _virtualFileProvider;
private readonly IFileProvider _fileProvider;
- private readonly IHostingEnvironment _hostingEnvironment;
+ private readonly IWebHostEnvironment _hostingEnvironment;
private string _rootPath = "/wwwroot"; //TODO: How to handle wwwroot naming?
protected AspNetCoreContentOptions Options { get; }
public WebContentFileProvider(
- IVirtualFileProvider virtualFileProvider,
- IHostingEnvironment hostingEnvironment,
+ IVirtualFileProvider virtualFileProvider,
+ IWebHostEnvironment hostingEnvironment,
IOptions options)
{
_virtualFileProvider = virtualFileProvider;
diff --git a/framework/src/Volo.Abp.Authorization/Volo.Abp.Authorization.csproj b/framework/src/Volo.Abp.Authorization/Volo.Abp.Authorization.csproj
index 1be1b27c4f..511e8879a7 100644
--- a/framework/src/Volo.Abp.Authorization/Volo.Abp.Authorization.csproj
+++ b/framework/src/Volo.Abp.Authorization/Volo.Abp.Authorization.csproj
@@ -14,7 +14,7 @@
-
+
diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationModule.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationModule.cs
index 060fe03dc4..5a9c3fa4db 100644
--- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationModule.cs
+++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AbpAuthorizationModule.cs
@@ -25,7 +25,7 @@ namespace Volo.Abp.Authorization
public override void ConfigureServices(ServiceConfigurationContext context)
{
- context.Services.AddAuthorization();
+ context.Services.AddAuthorizationCore();
context.Services.AddSingleton();
diff --git a/framework/src/Volo.Abp.Caching/Volo.Abp.Caching.csproj b/framework/src/Volo.Abp.Caching/Volo.Abp.Caching.csproj
index f4417ae910..445b6c98af 100644
--- a/framework/src/Volo.Abp.Caching/Volo.Abp.Caching.csproj
+++ b/framework/src/Volo.Abp.Caching/Volo.Abp.Caching.csproj
@@ -1,4 +1,4 @@
-
+
@@ -14,7 +14,7 @@
-
+
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/UpdateNuGetConfigStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/UpdateNuGetConfigStep.cs
index 428aaa6c96..1a40eff341 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/UpdateNuGetConfigStep.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/UpdateNuGetConfigStep.cs
@@ -29,7 +29,10 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
return;
}
- file.ReplaceText("{api-key}", apiKey);
+ const string placeHolder = "";
+ var nugetSourceTag = $"";
+
+ file.ReplaceText(placeHolder, nugetSourceTag);
}
}
}
\ 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 f28c2554b2..01d1a210ef 100644
--- a/framework/src/Volo.Abp.Cli/Volo.Abp.Cli.csproj
+++ b/framework/src/Volo.Abp.Cli/Volo.Abp.Cli.csproj
@@ -4,7 +4,7 @@
Exe
- netcoreapp2.2
+ netcoreapp3.0
true
abp
diff --git a/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationBuilderOptions.cs b/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationBuilderOptions.cs
index 101dad5c95..aa55c0e876 100644
--- a/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationBuilderOptions.cs
+++ b/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationBuilderOptions.cs
@@ -30,5 +30,10 @@ namespace Microsoft.Extensions.Configuration
/// Base path to read the configuration file indicated by .
///
public string BasePath { get; set; }
+
+ ///
+ /// Prefix for the environment variables.
+ ///
+ public string EnvironmentVariablesPrefix { get; set; }
}
}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationHelper.cs b/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationHelper.cs
index b2d005685e..37e721f1af 100644
--- a/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationHelper.cs
+++ b/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationHelper.cs
@@ -23,7 +23,7 @@ namespace Microsoft.Extensions.Configuration
builder = builder.AddJsonFile($"{options.FileName}.{options.EnvironmentName}.json", optional: true, reloadOnChange: true);
}
- builder = builder.AddEnvironmentVariables();
+ builder = builder.AddEnvironmentVariables(options.EnvironmentVariablesPrefix);
if (options.EnvironmentName == "Development")
{
diff --git a/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj b/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj
index a7a2a4a55a..b64f3f47e1 100644
--- a/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj
+++ b/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj
@@ -11,18 +11,18 @@
-
-
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ConventionalRegistrarBase.cs b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ConventionalRegistrarBase.cs
index f9cbf3c13c..8a47e7fa17 100644
--- a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ConventionalRegistrarBase.cs
+++ b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ConventionalRegistrarBase.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Microsoft.Extensions.DependencyInjection;
@@ -31,5 +32,23 @@ namespace Volo.Abp.DependencyInjection
}
public abstract void AddType(IServiceCollection services, Type type);
+
+ protected virtual bool IsConventionalRegistrationDisabled(Type type)
+ {
+ return type.IsDefined(typeof(DisableConventionalRegistrationAttribute), true);
+ }
+
+ protected virtual void TriggerServiceExposing(IServiceCollection services, Type implementationType, List serviceTypes)
+ {
+ var exposeActions = services.GetExposingActionList();
+ if (exposeActions.Any())
+ {
+ var args = new OnServiceExposingContext(implementationType, serviceTypes);
+ foreach (var action in exposeActions)
+ {
+ action(args);
+ }
+ }
+ }
}
}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/DefaultConventionalRegistrar.cs b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/DefaultConventionalRegistrar.cs
index 9c5ee06d81..15361ece62 100644
--- a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/DefaultConventionalRegistrar.cs
+++ b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/DefaultConventionalRegistrar.cs
@@ -1,6 +1,4 @@
using System;
-using System.Collections.Generic;
-using System.Linq;
using System.Reflection;
using JetBrains.Annotations;
using Microsoft.Extensions.DependencyInjection;
@@ -48,25 +46,7 @@ namespace Volo.Abp.DependencyInjection
}
}
}
-
- protected virtual void TriggerServiceExposing(IServiceCollection services, Type type, List serviceTypes)
- {
- var exposeActions = services.GetExposingActionList();
- if (exposeActions.Any())
- {
- var args = new OnServiceExposingContext(type, serviceTypes);
- foreach (var action in exposeActions)
- {
- action(args);
- }
- }
- }
-
- protected virtual bool IsConventionalRegistrationDisabled(Type type)
- {
- return type.IsDefined(typeof(DisableConventionalRegistrationAttribute), true);
- }
-
+
protected virtual DependencyAttribute GetDependencyAttributeOrNull(Type type)
{
return type.GetCustomAttribute(true);
diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/IAbpModule.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/IAbpModule.cs
index 32c8980c54..45f02e08c8 100644
--- a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/IAbpModule.cs
+++ b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/IAbpModule.cs
@@ -2,7 +2,7 @@
namespace Volo.Abp.Modularity
{
- public interface IAbpModule : ISingletonDependency
+ public interface IAbpModule
{
void ConfigureServices(ServiceConfigurationContext context);
}
diff --git a/framework/src/Volo.Abp.Dapper/Volo.Abp.Dapper.csproj b/framework/src/Volo.Abp.Dapper/Volo.Abp.Dapper.csproj
index 849dc33c60..0b9ba3f9a9 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.0
+ netstandard2.1
Volo.Abp.Dapper
Volo.Abp.Dapper
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
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 3a64760a0f..c8e89f6869 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
@@ -289,7 +289,11 @@ namespace Volo.Abp.Application.Services
return;
}
- entityWithGuidId.Id = GuidGenerator.Create();
+ EntityHelper.TrySetId(
+ entityWithGuidId,
+ () => GuidGenerator.Create(),
+ true
+ );
}
///
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedAggregateRoot.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedAggregateRoot.cs
index 8f566f1b6b..bc4830bc03 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedAggregateRoot.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedAggregateRoot.cs
@@ -28,5 +28,16 @@ namespace Volo.Abp.Domain.Entities.Auditing
///
public virtual Guid? LastModifierId { get; set; }
+
+ protected AuditedAggregateRoot()
+ {
+
+ }
+
+ protected AuditedAggregateRoot(TKey id)
+ : base(id)
+ {
+
+ }
}
}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedAggregateRootWithUser.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedAggregateRootWithUser.cs
index 107fb35b68..ec490fbb50 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedAggregateRootWithUser.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedAggregateRootWithUser.cs
@@ -32,5 +32,16 @@ namespace Volo.Abp.Domain.Entities.Auditing
///
public virtual TUser LastModifier { get; set; }
+
+ protected AuditedAggregateRootWithUser()
+ {
+
+ }
+
+ protected AuditedAggregateRootWithUser(TKey id)
+ : base(id)
+ {
+
+ }
}
}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedEntity.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedEntity.cs
index 2ccc1aa1e2..0423551509 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedEntity.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedEntity.cs
@@ -28,5 +28,16 @@ namespace Volo.Abp.Domain.Entities.Auditing
///
public virtual Guid? LastModifierId { get; set; }
+
+ protected AuditedEntity()
+ {
+
+ }
+
+ protected AuditedEntity(TKey id)
+ : base(id)
+ {
+
+ }
}
}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedEntityWithUser.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedEntityWithUser.cs
index 76002b2114..fd6aeb9dd9 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedEntityWithUser.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedEntityWithUser.cs
@@ -32,5 +32,16 @@ namespace Volo.Abp.Domain.Entities.Auditing
///
public virtual TUser LastModifier { get; set; }
+
+ protected AuditedEntityWithUser()
+ {
+
+ }
+
+ protected AuditedEntityWithUser(TKey id)
+ : base(id)
+ {
+
+ }
}
}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRoot.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRoot.cs
index 29c01bd466..084c907606 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRoot.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRoot.cs
@@ -28,5 +28,16 @@ namespace Volo.Abp.Domain.Entities.Auditing
///
public virtual Guid? CreatorId { get; set; }
+
+ protected CreationAuditedAggregateRoot()
+ {
+
+ }
+
+ protected CreationAuditedAggregateRoot(TKey id)
+ : base(id)
+ {
+
+ }
}
}
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRootWithUser.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRootWithUser.cs
index 1084360749..7d491d7be1 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRootWithUser.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRootWithUser.cs
@@ -24,5 +24,16 @@ namespace Volo.Abp.Domain.Entities.Auditing
{
///
public virtual TUser Creator { get; set; }
+
+ protected CreationAuditedAggregateRootWithUser()
+ {
+
+ }
+
+ protected CreationAuditedAggregateRootWithUser(TKey id)
+ : base(id)
+ {
+
+ }
}
}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntity.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntity.cs
index 1ab527dc2a..41802c78b7 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntity.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntity.cs
@@ -28,5 +28,16 @@ namespace Volo.Abp.Domain.Entities.Auditing
///
public virtual Guid? CreatorId { get; set; }
+
+ protected CreationAuditedEntity()
+ {
+
+ }
+
+ protected CreationAuditedEntity(TKey id)
+ : base(id)
+ {
+
+ }
}
}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntityWithUser.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntityWithUser.cs
index 0989dfeac4..45d844efa7 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntityWithUser.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntityWithUser.cs
@@ -24,5 +24,16 @@ namespace Volo.Abp.Domain.Entities.Auditing
{
///
public virtual TUser Creator { get; set; }
+
+ protected CreationAuditedEntityWithUser()
+ {
+
+ }
+
+ protected CreationAuditedEntityWithUser(TKey id)
+ : base(id)
+ {
+
+ }
}
}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedAggregateRoot.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedAggregateRoot.cs
index 397a425629..9231efd3ab 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedAggregateRoot.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedAggregateRoot.cs
@@ -34,5 +34,16 @@ namespace Volo.Abp.Domain.Entities.Auditing
///
public virtual DateTime? DeletionTime { get; set; }
+
+ protected FullAuditedAggregateRoot()
+ {
+
+ }
+
+ protected FullAuditedAggregateRoot(TKey id)
+ : base(id)
+ {
+
+ }
}
}
\ No newline at end of file
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 d379a78240..cb0be46421 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
@@ -38,5 +38,16 @@ namespace Volo.Abp.Domain.Entities.Auditing
///
public TUser LastModifier { get; set; }
+
+ protected FullAuditedAggregateRootWithUser()
+ {
+
+ }
+
+ protected FullAuditedAggregateRootWithUser(TKey id)
+ : base(id)
+ {
+
+ }
}
}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedEntity.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedEntity.cs
index 20b07b85b5..ada5cc9eed 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedEntity.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedEntity.cs
@@ -34,5 +34,16 @@ namespace Volo.Abp.Domain.Entities.Auditing
///
public virtual DateTime? DeletionTime { get; set; }
+
+ protected FullAuditedEntity()
+ {
+
+ }
+
+ protected FullAuditedEntity(TKey id)
+ : base(id)
+ {
+
+ }
}
}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedEntityWithUser.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedEntityWithUser.cs
index 9aba520480..12458ebf99 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedEntityWithUser.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedEntityWithUser.cs
@@ -38,5 +38,16 @@ namespace Volo.Abp.Domain.Entities.Auditing
///
public TUser LastModifier { get; set; }
+
+ protected FullAuditedEntityWithUser()
+ {
+
+ }
+
+ protected FullAuditedEntityWithUser(TKey id)
+ : base(id)
+ {
+
+ }
}
}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/DisableIdGenerationAttribute.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/DisableIdGenerationAttribute.cs
new file mode 100644
index 0000000000..1d823ca177
--- /dev/null
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/DisableIdGenerationAttribute.cs
@@ -0,0 +1,9 @@
+using System;
+
+namespace Volo.Abp.Domain.Entities
+{
+ public class DisableIdGenerationAttribute : Attribute
+ {
+
+ }
+}
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Entity.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Entity.cs
index c96e305d45..b78a5aa400 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Entity.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Entity.cs
@@ -23,7 +23,7 @@ namespace Volo.Abp.Domain.Entities
public abstract class Entity : Entity, IEntity
{
///
- public virtual TKey Id { get; set; }
+ public virtual TKey Id { get; protected set; }
protected Entity()
{
@@ -35,8 +35,7 @@ namespace Volo.Abp.Domain.Entities
Id = id;
}
- ///
- public override bool Equals(object obj)
+ public bool EntityEquals(object obj)
{
if (obj == null || !(obj is Entity))
{
@@ -73,33 +72,7 @@ namespace Volo.Abp.Domain.Entities
return Id.Equals(other.Id);
}
-
- ///
- public override int GetHashCode()
- {
- if (Id == null)
- {
- return 0;
- }
-
- return Id.GetHashCode();
- }
-
- public static bool operator ==(Entity left, Entity right)
- {
- if (Equals(left, null))
- {
- return Equals(right, null);
- }
-
- return left.Equals(right);
- }
-
- public static bool operator !=(Entity left, Entity right)
- {
- return !(left == right);
- }
-
+
public override object[] GetKeys()
{
return new object[] {Id};
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 b6558f34d1..dd483f5d7b 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
@@ -81,5 +81,32 @@ namespace Volo.Abp.Domain.Entities
var lambdaBody = Expression.Equal(leftExpression, rightExpression);
return Expression.Lambda>(lambdaBody, lambdaParam);
}
+
+ public static void TrySetId(
+ IEntity entity,
+ Func idFactory,
+ bool checkForDisableGuidGenerationAttribute = false)
+ {
+ //TODO: Can be optimized (by caching per entity type)?
+ var entityType = entity.GetType();
+ var idProperty = entityType.GetProperty(
+ nameof(entity.Id)
+ );
+
+ if (idProperty == null)
+ {
+ return;
+ }
+
+ if (checkForDisableGuidGenerationAttribute)
+ {
+ if (idProperty.IsDefined(typeof(DisableIdGenerationAttribute), true))
+ {
+ return;
+ }
+ }
+
+ idProperty.SetValue(entity, idFactory());
+ }
}
}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/IEntity.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/IEntity.cs
index 58e607b120..890c5227bd 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/IEntity.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/IEntity.cs
@@ -22,6 +22,6 @@
///
/// Unique identifier for this entity.
///
- TKey Id { get; set; }
+ TKey Id { get; }
}
}
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Values/ValueObject.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Values/ValueObject.cs
index ea84b41792..00a4c7ddd3 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Values/ValueObject.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Values/ValueObject.cs
@@ -7,23 +7,9 @@ namespace Volo.Abp.Domain.Values
public abstract class ValueObject
{
- protected static bool EqualOperator(ValueObject left, ValueObject right)
- {
- if (ReferenceEquals(left, null) ^ ReferenceEquals(right, null))
- {
- return false;
- }
- return ReferenceEquals(left, null) || left.Equals(right);
- }
-
- protected static bool NotEqualOperator(ValueObject left, ValueObject right)
- {
- return !(EqualOperator(left, right));
- }
-
protected abstract IEnumerable
-
+
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 458ffda849..db425e4941 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.0
+ netstandard2.1
Volo.Abp.EntityFrameworkCore.SqlServer
Volo.Abp.EntityFrameworkCore.SqlServer
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
@@ -18,7 +18,7 @@
-
+
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo.Abp.EntityFrameworkCore.Sqlite.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo.Abp.EntityFrameworkCore.Sqlite.csproj
index b22bc48301..35d7cc2f40 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.0
+ netstandard2.1
Volo.Abp.EntityFrameworkCore.Sqlite
Volo.Abp.EntityFrameworkCore.Sqlite
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
@@ -14,7 +14,7 @@
-
+
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj b/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj
index a472c09690..43b1182d58 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.0
+ netstandard2.1
Volo.Abp.EntityFrameworkCore
Volo.Abp.EntityFrameworkCore
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
@@ -19,8 +19,8 @@
-
-
+
+
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 23b4e36b75..e26624747c 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
@@ -258,14 +258,14 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore
public virtual TEntity Find(TKey id, bool includeDetails = true)
{
return includeDetails
- ? WithDetails().FirstOrDefault(EntityHelper.CreateEqualityExpressionForId(id))
+ ? WithDetails().FirstOrDefault(e => e.Id.Equals(id))
: DbSet.Find(id);
}
public virtual async Task FindAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return includeDetails
- ? await WithDetails().FirstOrDefaultAsync(EntityHelper.CreateEqualityExpressionForId(id), GetCancellationToken(cancellationToken))
+ ? await WithDetails().FirstOrDefaultAsync(e => e.Id.Equals(id), GetCancellationToken(cancellationToken))
: await DbSet.FindAsync(new object[] { id }, GetCancellationToken(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 1ed5f3eaed..3604913301 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs
+++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs
@@ -9,7 +9,6 @@ using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;
using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Newtonsoft.Json;
@@ -282,20 +281,37 @@ namespace Volo.Abp.EntityFrameworkCore
protected virtual void CheckAndSetId(EntityEntry entry)
{
- //Set GUID Ids
- var entity = entry.Entity as IEntity;
- if (entity != null && entity.Id == Guid.Empty)
+ if (entry.Entity is IEntity entityWithGuidId)
{
- var dbGeneratedAttr = ReflectionHelper
- .GetSingleAttributeOrDefault(
- entry.Property("Id").Metadata.PropertyInfo
- );
+ TrySetGuidId(entry, entityWithGuidId);
+ }
+ }
- if (dbGeneratedAttr == null || dbGeneratedAttr.DatabaseGeneratedOption == DatabaseGeneratedOption.None)
- {
- entity.Id = GuidGenerator.Create();
- }
+ protected virtual void TrySetGuidId(EntityEntry entry, IEntity entity)
+ {
+ if (entity.Id != default)
+ {
+ return;
}
+
+ var idProperty = entry.Property("Id").Metadata.PropertyInfo;
+
+ //Check for DatabaseGeneratedAttribute
+ var dbGeneratedAttr = ReflectionHelper
+ .GetSingleAttributeOrDefault(
+ idProperty
+ );
+
+ if (dbGeneratedAttr != null && dbGeneratedAttr.DatabaseGeneratedOption != DatabaseGeneratedOption.None)
+ {
+ return;
+ }
+
+ EntityHelper.TrySetId(
+ entity,
+ () => GuidGenerator.Create(),
+ true
+ );
}
protected virtual void SetCreationAuditProperties(EntityEntry entry)
@@ -494,12 +510,12 @@ namespace Volo.Abp.EntityFrameworkCore
if (typeof(ISoftDelete).IsAssignableFrom(typeof(TEntity)))
{
- expression = e => !IsSoftDeleteFilterEnabled || !((ISoftDelete) e).IsDeleted;
+ expression = e => !IsSoftDeleteFilterEnabled || !EF.Property(e, "IsDeleted");
}
if (typeof(IMultiTenant).IsAssignableFrom(typeof(TEntity)))
{
- Expression> multiTenantFilter = e => !IsMultiTenantFilterEnabled || ((IMultiTenant) e).TenantId == CurrentTenantId;
+ Expression> multiTenantFilter = e => !IsMultiTenantFilterEnabled || EF.Property(e, "TenantId") == CurrentTenantId;
expression = expression == null ? multiTenantFilter : CombineExpressions(expression, multiTenantFilter);
}
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IEfCoreDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IEfCoreDbContext.cs
index 7cba957724..761e15b6f2 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IEfCoreDbContext.cs
+++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IEfCoreDbContext.cs
@@ -35,9 +35,9 @@ namespace Volo.Abp.EntityFrameworkCore
EntityEntry Add([NotNull] TEntity entity) where TEntity : class;
- Task AddAsync([NotNull] object entity, CancellationToken cancellationToken = default);
+ ValueTask AddAsync([NotNull] object entity, CancellationToken cancellationToken = default);
- Task> AddAsync([NotNull] TEntity entity, CancellationToken cancellationToken = default) where TEntity : class;
+ ValueTask> AddAsync([NotNull] TEntity entity, CancellationToken cancellationToken = default) where TEntity : class;
void AddRange([NotNull] IEnumerable entities);
@@ -59,13 +59,13 @@ namespace Volo.Abp.EntityFrameworkCore
TEntity Find([NotNull] params object[] keyValues) where TEntity : class;
- Task FindAsync([NotNull] Type entityType, [NotNull] object[] keyValues, CancellationToken cancellationToken);
+ ValueTask FindAsync([NotNull] Type entityType, [NotNull] object[] keyValues, CancellationToken cancellationToken);
- Task FindAsync([NotNull] object[] keyValues, CancellationToken cancellationToken) where TEntity : class;
+ ValueTask FindAsync([NotNull] object[] keyValues, CancellationToken cancellationToken) where TEntity : class;
- Task FindAsync([NotNull] params object[] keyValues) where TEntity : class;
+ ValueTask FindAsync([NotNull] params object[] keyValues) where TEntity : class;
- Task FindAsync([NotNull] Type entityType, [NotNull] params object[] keyValues);
+ ValueTask FindAsync([NotNull] Type entityType, [NotNull] params object[] keyValues);
EntityEntry Remove([NotNull] TEntity entity) where TEntity : class;
diff --git a/framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/AbpFluentValidationConventionalRegistrar.cs b/framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/AbpFluentValidationConventionalRegistrar.cs
index 9641b438b0..d51e4728ca 100644
--- a/framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/AbpFluentValidationConventionalRegistrar.cs
+++ b/framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/AbpFluentValidationConventionalRegistrar.cs
@@ -1,14 +1,20 @@
using System;
+using System.Collections.Generic;
using FluentValidation;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.FluentValidation
{
- public class AbpFluentValidationConventionalRegistrar : DefaultConventionalRegistrar
+ public class AbpFluentValidationConventionalRegistrar : ConventionalRegistrarBase
{
public override void AddType(IServiceCollection services, Type type)
{
+ if (IsConventionalRegistrationDisabled(type))
+ {
+ return;
+ }
+
if (!typeof(IValidator).IsAssignableFrom(type))
{
return;
@@ -20,8 +26,12 @@ namespace Volo.Abp.FluentValidation
return;
}
+ var serviceType = typeof(IValidator<>).MakeGenericType(validatingType);
+
+ TriggerServiceExposing(services, type, new List{ serviceType });
+
services.AddTransient(
- typeof(IValidator<>).MakeGenericType(validatingType),
+ serviceType,
type
);
}
diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel/Properties/launchSettings.json b/framework/src/Volo.Abp.Http.Client.IdentityModel/Properties/launchSettings.json
new file mode 100644
index 0000000000..d56e5c65b7
--- /dev/null
+++ b/framework/src/Volo.Abp.Http.Client.IdentityModel/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:52306/",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "Volo.Abp.Http.Client.IdentityModel": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "http://localhost:52307/"
+ }
+ }
+}
\ 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 c515007b30..de2e24e072 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,15 +1,17 @@
-
+
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.Http.Client.IdentityModel
Volo.Abp.Http.Client.IdentityModel
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
false
false
false
+ true
+ Library
diff --git a/framework/src/Volo.Abp.Http.Client/Properties/launchSettings.json b/framework/src/Volo.Abp.Http.Client/Properties/launchSettings.json
new file mode 100644
index 0000000000..3cef3cf668
--- /dev/null
+++ b/framework/src/Volo.Abp.Http.Client/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:52208/",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "Volo.Abp.Http.Client": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "http://localhost:52209/"
+ }
+ }
+}
\ 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 1c7f727e18..be89651600 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,21 +1,22 @@
-
+
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.Http.Client
Volo.Abp.Http.Client
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
false
false
false
+ true
+ Library
-
-
+
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 882bf94cb0..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
@@ -92,7 +92,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying
if (!response.IsSuccessStatusCode)
{
- throw new AbpException("Remote service returns error!");
+ throw new AbpException("Remote service returns error! StatusCode = " + response.StatusCode);
}
var content = await response.Content.ReadAsStringAsync();
diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationResourceContributorBase.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationResourceContributorBase.cs
index aa66507cdd..c42036d1cd 100644
--- a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationResourceContributorBase.cs
+++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationResourceContributorBase.cs
@@ -84,7 +84,7 @@ namespace Volo.Abp.Localization.VirtualFiles
var dictionary = CreateDictionaryFromFile(file);
if (dictionaries.ContainsKey(dictionary.CultureName))
{
- throw new AbpException($"{file.PhysicalPath} dictionary has a culture name '{dictionary.CultureName}' which is already defined!");
+ throw new AbpException($"{file.GetVirtualOrPhysicalPathOrNull()} dictionary has a culture name '{dictionary.CultureName}' which is already defined!");
}
dictionaries[dictionary.CultureName] = dictionary;
diff --git a/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj b/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj
index 8af1220e76..90a5fdafcc 100644
--- a/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj
+++ b/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj
@@ -14,7 +14,7 @@
-
+
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 0f82aa798b..68b9beeb6e 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
@@ -75,18 +75,20 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb
protected virtual void SetIdIfNeeded(TEntity entity)
{
- if (typeof(TKey) == typeof(int) || typeof(TKey) == typeof(long) || typeof(TKey) == typeof(Guid))
+ if (typeof(TKey) == typeof(int) ||
+ typeof(TKey) == typeof(long) ||
+ typeof(TKey) == typeof(Guid))
{
if (EntityHelper.HasDefaultId(entity))
{
- entity.Id = Database.GenerateNextId();
+ EntityHelper.TrySetId(entity, () => Database.GenerateNextId());
}
}
}
public virtual TEntity Find(TKey id, bool includeDetails = true)
{
- return GetQueryable().FirstOrDefault(EntityHelper.CreateEqualityExpressionForId(id));
+ return GetQueryable().FirstOrDefault(e => e.Id.Equals(id));
}
public virtual TEntity Get(TKey id, bool includeDetails = true)
diff --git a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializer.cs b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializer.cs
index 9964e6219b..e68b4b6f37 100644
--- a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializer.cs
+++ b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializer.cs
@@ -1,5 +1,8 @@
using System;
+using System.Reflection;
using System.Text;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Serialization;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Json;
@@ -7,21 +10,43 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb
{
public class Utf8JsonMemoryDbSerializer : IMemoryDbSerializer, ITransientDependency
{
- private readonly IJsonSerializer _jsonSerializer;
+ private static readonly JsonSerializerSettings MemoryDbSerializerSettings;
- public Utf8JsonMemoryDbSerializer(IJsonSerializer jsonSerializer)
+ static Utf8JsonMemoryDbSerializer()
{
- _jsonSerializer = jsonSerializer;
+ MemoryDbSerializerSettings = new JsonSerializerSettings
+ {
+ ContractResolver = new ResolverWithPrivateSetters(),
+ ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
+ };
}
byte[] IMemoryDbSerializer.Serialize(object obj)
{
- return Encoding.UTF8.GetBytes(_jsonSerializer.Serialize(obj));
+ var jsonString = JsonConvert.SerializeObject(obj, MemoryDbSerializerSettings);
+ return Encoding.UTF8.GetBytes(jsonString);
}
public object Deserialize(byte[] value, Type type)
{
- return _jsonSerializer.Deserialize(type, Encoding.UTF8.GetString(value));
+ var jsonString = Encoding.UTF8.GetString(value);
+ return JsonConvert.DeserializeObject(jsonString, type, MemoryDbSerializerSettings);
+ }
+
+ public class ResolverWithPrivateSetters : DefaultContractResolver
+ {
+ protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
+ {
+ var prop = base.CreateProperty(member, memberSerialization);
+ if (prop.Writable)
+ {
+ return prop;
+ }
+
+ prop.Writable = member.As()?.GetSetMethod(true) != null;
+
+ return prop;
+ }
}
}
}
\ 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 0610e45bfd..b15ea6378c 100644
--- a/framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj
+++ b/framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj
@@ -14,7 +14,7 @@
-
+
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 cddebd253d..deca912bec 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
@@ -15,6 +15,7 @@ using Volo.Abp.EventBus.Local;
using Volo.Abp.Guids;
using Volo.Abp.MongoDB;
using Volo.Abp.MultiTenancy;
+using Volo.Abp.Reflection;
using Volo.Abp.Threading;
namespace Volo.Abp.Domain.Repositories.MongoDB
@@ -315,12 +316,26 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
protected virtual void CheckAndSetId(TEntity entity)
{
- if (entity is IEntity entityWithGuidId && entityWithGuidId.Id == default)
+ if (entity is IEntity entityWithGuidId)
{
- entityWithGuidId.Id = GuidGenerator.Create();
+ TrySetGuidId(entityWithGuidId);
}
}
+ protected virtual void TrySetGuidId(IEntity entity)
+ {
+ if (entity.Id != default)
+ {
+ return;
+ }
+
+ EntityHelper.TrySetId(
+ entity,
+ () => GuidGenerator.Create(),
+ true
+ );
+ }
+
protected virtual void SetCreationAuditProperties(TEntity entity)
{
AuditPropertySetter.SetCreationProperties(entity);
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 6217e82805..5bc9402655 100644
--- a/framework/src/Volo.Abp.VirtualFileSystem/Microsoft/Extensions/FileProviders/AbpFileInfoExtensions.cs
+++ b/framework/src/Volo.Abp.VirtualFileSystem/Microsoft/Extensions/FileProviders/AbpFileInfoExtensions.cs
@@ -3,6 +3,7 @@ using System.IO;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp;
+using Volo.Abp.VirtualFileSystem.Embedded;
namespace Microsoft.Extensions.FileProviders
{
@@ -57,5 +58,17 @@ namespace Microsoft.Extensions.FileProviders
return await stream.GetAllBytesAsync();
}
}
+
+ public static string GetVirtualOrPhysicalPathOrNull([NotNull] this IFileInfo fileInfo)
+ {
+ Check.NotNull(fileInfo, nameof(fileInfo));
+
+ if (fileInfo is EmbeddedResourceFileInfo embeddedFileInfo)
+ {
+ return embeddedFileInfo.VirtualPath;
+ }
+
+ return fileInfo.PhysicalPath;
+ }
}
}
diff --git a/framework/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj b/framework/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj
index 626f1eebc8..32eb16a710 100644
--- a/framework/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj
+++ b/framework/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj
@@ -14,8 +14,8 @@
-
-
+
+
diff --git a/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/DictionaryBasedFileProvider.cs b/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/DictionaryBasedFileProvider.cs
index 4fc72c07ec..a8ea963f0e 100644
--- a/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/DictionaryBasedFileProvider.cs
+++ b/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/DictionaryBasedFileProvider.cs
@@ -39,12 +39,13 @@ namespace Volo.Abp.VirtualFileSystem
var directoryPath = subpath.EnsureEndsWith('/');
foreach (var fileInfo in Files.Values)
{
- if (!fileInfo.PhysicalPath.StartsWith(directoryPath))
+ var fullPath = fileInfo.GetVirtualOrPhysicalPathOrNull();
+ if (!fullPath.StartsWith(directoryPath))
{
continue;
}
- var relativePath = fileInfo.PhysicalPath.Substring(directoryPath.Length);
+ var relativePath = fullPath.Substring(directoryPath.Length);
if (relativePath.Contains("/"))
{
continue;
diff --git a/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/DynamicFileProvider.cs b/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/DynamicFileProvider.cs
index a270616e3a..0a92f62f0a 100644
--- a/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/DynamicFileProvider.cs
+++ b/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/DynamicFileProvider.cs
@@ -31,8 +31,9 @@ namespace Volo.Abp.VirtualFileSystem
public void AddOrUpdate(IFileInfo fileInfo)
{
- DynamicFiles.AddOrUpdate(fileInfo.PhysicalPath, fileInfo, (key, value) => fileInfo);
- ReportChange(fileInfo.PhysicalPath);
+ var filePath = fileInfo.GetVirtualOrPhysicalPathOrNull();
+ DynamicFiles.AddOrUpdate(filePath, fileInfo, (key, value) => fileInfo);
+ ReportChange(filePath);
}
public bool Delete(string filePath)
diff --git a/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/Embedded/EmbeddedResourceFileInfo.cs b/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/Embedded/EmbeddedResourceFileInfo.cs
index 22df03f2ab..7291f93cf8 100644
--- a/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/Embedded/EmbeddedResourceFileInfo.cs
+++ b/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/Embedded/EmbeddedResourceFileInfo.cs
@@ -29,7 +29,9 @@ namespace Volo.Abp.VirtualFileSystem.Embedded
}
private long? _length;
- public string PhysicalPath { get; }
+ public string PhysicalPath => null;
+
+ public string VirtualPath { get; }
public string Name { get; }
@@ -46,14 +48,14 @@ namespace Volo.Abp.VirtualFileSystem.Embedded
public EmbeddedResourceFileInfo(
Assembly assembly,
string resourcePath,
- string physicalPath,
+ string virtualPath,
string name,
DateTimeOffset lastModified)
{
_assembly = assembly;
_resourcePath = resourcePath;
- PhysicalPath = physicalPath;
+ VirtualPath = virtualPath;
Name = name;
LastModified = lastModified;
}
@@ -63,7 +65,7 @@ namespace Volo.Abp.VirtualFileSystem.Embedded
{
var stream = _assembly.GetManifestResourceStream(_resourcePath);
- if (!_length.HasValue)
+ if (!_length.HasValue && stream != null)
{
_length = stream.Length;
}
@@ -73,7 +75,7 @@ namespace Volo.Abp.VirtualFileSystem.Embedded
public override string ToString()
{
- return $"[EmbeddedResourceFileInfo] {Name} ({PhysicalPath})";
+ return $"[EmbeddedResourceFileInfo] {Name} ({this.VirtualPath})";
}
}
}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileProvider.cs b/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileProvider.cs
index 9bcf76e4be..be08fc2024 100644
--- a/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileProvider.cs
+++ b/framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileProvider.cs
@@ -71,7 +71,7 @@ namespace Volo.Abp.VirtualFileSystem
true
);
}
-
+
private Dictionary CreateFiles()
{
var files = new Dictionary(StringComparer.OrdinalIgnoreCase);
diff --git a/framework/test/AbpTestBase/AbpTestBase.csproj b/framework/test/AbpTestBase/AbpTestBase.csproj
index d794eaa279..c6d5b71672 100644
--- a/framework/test/AbpTestBase/AbpTestBase.csproj
+++ b/framework/test/AbpTestBase/AbpTestBase.csproj
@@ -1,12 +1,11 @@
+
+
- netcoreapp2.2
+ netcoreapp3.0
AbpTestBase
AbpTestBase
- false
- false
- false
diff --git a/framework/test/SimpleConsoleDemo/SimpleConsoleDemo.csproj b/framework/test/SimpleConsoleDemo/SimpleConsoleDemo.csproj
index 0419ae171d..371e2374f9 100644
--- a/framework/test/SimpleConsoleDemo/SimpleConsoleDemo.csproj
+++ b/framework/test/SimpleConsoleDemo/SimpleConsoleDemo.csproj
@@ -2,7 +2,7 @@
Exe
- netcoreapp2.2
+ netcoreapp3.0
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 c4933829eb..d1eadf276d 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,7 +1,9 @@
+
+
- netcoreapp2.2
+ netcoreapp3.0
latest
Volo.Abp.AspNetCore.Authentication.OAuth.Tests
Volo.Abp.AspNetCore.Authentication.OAuth.Tests
diff --git a/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo/Abp/AspNetCore/Authentication/OAuth/Claims/MultipleClaimAction_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo/Abp/AspNetCore/Authentication/OAuth/Claims/MultipleClaimAction_Tests.cs
index fac9e33e29..bf869fc809 100644
--- a/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo/Abp/AspNetCore/Authentication/OAuth/Claims/MultipleClaimAction_Tests.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo/Abp/AspNetCore/Authentication/OAuth/Claims/MultipleClaimAction_Tests.cs
@@ -1,5 +1,6 @@
using System.Linq;
using System.Security.Claims;
+using System.Text.Json;
using Newtonsoft.Json.Linq;
using Shouldly;
using Volo.Abp.Security.Claims;
@@ -12,13 +13,12 @@ namespace Volo.Abp.AspNetCore.Authentication.OAuth.Claims
[Fact]
public void Should_Set_Single_Value()
{
- var jObject = JObject.Parse(@"{
+ var jObject = JsonDocument.Parse(@"{
""sub"": ""71054539-0e48-af28-5e7a-39e4e42d8ea5"",
""role"": ""admin""
}");
-
var claimsIdentity = new ClaimsIdentity();
- new MultipleClaimAction(AbpClaimTypes.Role, "role").Run(jObject, claimsIdentity, null);
+ new MultipleClaimAction(AbpClaimTypes.Role, "role").Run(jObject.RootElement, claimsIdentity, null);
var claims = claimsIdentity.FindAll(AbpClaimTypes.Role).ToList();
claims.Count.ShouldBe(1);
claims[0].Value.ShouldBe("admin");
@@ -27,7 +27,7 @@ namespace Volo.Abp.AspNetCore.Authentication.OAuth.Claims
[Fact]
public void Should_Set_Multiple_Values()
{
- var jObject = JObject.Parse(@"{
+ var jObject = JsonDocument.Parse(@"{
""sub"": ""71054539-0e48-af28-5e7a-39e4e42d8ea5"",
""role"": [
""admin"",
@@ -36,7 +36,7 @@ namespace Volo.Abp.AspNetCore.Authentication.OAuth.Claims
}");
var claimsIdentity = new ClaimsIdentity();
- new MultipleClaimAction(AbpClaimTypes.Role, "role").Run(jObject, claimsIdentity, null);
+ new MultipleClaimAction(AbpClaimTypes.Role, "role").Run(jObject.RootElement, claimsIdentity, null);
var claims = claimsIdentity.FindAll(AbpClaimTypes.Role).ToList();
claims.Count.ShouldBe(2);
claims[0].Value.ShouldBe("admin");
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 f08d5b1ac2..61d430d984 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,13 +1,11 @@
+
+
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.AspNetCore.MultiTenancy.Tests
Volo.Abp.AspNetCore.MultiTenancy.Tests
- true
- false
- false
- false
diff --git a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/App/Startup.cs b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/App/Startup.cs
index 1af71d75e8..05b724b9c3 100644
--- a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/App/Startup.cs
+++ b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/App/Startup.cs
@@ -12,7 +12,7 @@ namespace Volo.Abp.AspNetCore.App
services.AddApplication();
}
- public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
+ public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
app.InitializeApplication();
}
diff --git a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancyTestBase.cs b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancyTestBase.cs
index 9dc083b3f1..ecc9d055ca 100644
--- a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancyTestBase.cs
+++ b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancyTestBase.cs
@@ -1,8 +1,7 @@
-using Volo.Abp.AspNetCore.App;
namespace Volo.Abp.AspNetCore.MultiTenancy
{
- public abstract class AspNetCoreMultiTenancyTestBase : AbpAspNetCoreTestBase
+ public abstract class AspNetCoreMultiTenancyTestBase : AbpAspNetCoreTestBase
{
}
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Properties/launchSettings.json b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Properties/launchSettings.json
new file mode 100644
index 0000000000..fcf34f54da
--- /dev/null
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:55482/",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "Volo.Abp.AspNetCore.Mvc.Tests": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "http://localhost:55483/"
+ }
+ }
+}
\ 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 0f4fabd553..93143bfbe0 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,17 +1,17 @@
-
+
+
+
- netcoreapp2.2
+ netcoreapp3.0
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
Volo.Abp.AspNetCore.Mvc.Tests
Volo.Abp.AspNetCore.Mvc.Tests
true
true
- false
- false
- false
true
true
+ true
@@ -20,7 +20,6 @@
-
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs
index eb0fc1ef48..28b5ee8b1f 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs
@@ -69,6 +69,9 @@ namespace Volo.Abp.AspNetCore.Mvc
typeof(AbpUiResource),
typeof(AbpValidationResource)
).AddVirtualJson("/Volo/Abp/AspNetCore/Mvc/Localization/Resource");
+
+ options.Languages.Add(new LanguageInfo("en", "en", "English"));
+ options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe"));
});
}
@@ -77,10 +80,14 @@ namespace Volo.Abp.AspNetCore.Mvc
var app = context.GetApplicationBuilder();
app.UseCorrelationId();
+ app.UseVirtualFiles();
+ app.UseAbpRequestLocalization();
+ app.UseRouting();
app.UseMiddleware();
+ app.UseAuthorization();
app.UseAuditing();
app.UseUnitOfWork();
- app.UseMvcWithDefaultRoute();
+ app.UseMvcWithDefaultRouteAndArea();
}
}
}
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
new file mode 100644
index 0000000000..44b206e462
--- /dev/null
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ApiExploring/AbpApiDefinitionController_Tests.cs
@@ -0,0 +1,17 @@
+using System.Threading.Tasks;
+using Shouldly;
+using Volo.Abp.Http.Modeling;
+using Xunit;
+
+namespace Volo.Abp.AspNetCore.Mvc.ApiExploring
+{
+ public class AbpApiDefinitionController_Tests : AspNetCoreMvcTestBase
+ {
+ [Fact]
+ public async Task GetAsync()
+ {
+ var model = await GetResponseAsObjectAsync("/api/abp/api-definition");
+ model.ShouldNotBeNull();
+ }
+ }
+}
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Startup.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Startup.cs
index 458bbd8827..9ae46be82f 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Startup.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Startup.cs
@@ -18,7 +18,7 @@ namespace Volo.Abp.AspNetCore.Mvc
return services.BuildServiceProviderFromFactory();
}
- public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
+ public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
app.InitializeApplication();
}
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 3e92a569bc..7b58c9c738 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,15 +1,14 @@
+
+
- netcoreapp2.2
+ netcoreapp3.0
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests
Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests
true
true
- false
- false
- false
true
true
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo/Abp/AspNetCore/Mvc/UI/Bootstrap/Demo/TestStartup.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo/Abp/AspNetCore/Mvc/UI/Bootstrap/Demo/TestStartup.cs
index da23c66e9f..3a140e35d4 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo/Abp/AspNetCore/Mvc/UI/Bootstrap/Demo/TestStartup.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo/Abp/AspNetCore/Mvc/UI/Bootstrap/Demo/TestStartup.cs
@@ -18,7 +18,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo
return services.BuildServiceProviderFromFactory();
}
- public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
+ public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
app.InitializeApplication();
}
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/AbpAspNetCoreMvcUiBootstrapDemoModule.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/AbpAspNetCoreMvcUiBootstrapDemoModule.cs
index ce9734914d..e14e2336d9 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/AbpAspNetCoreMvcUiBootstrapDemoModule.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/AbpAspNetCoreMvcUiBootstrapDemoModule.cs
@@ -1,5 +1,5 @@
using Microsoft.AspNetCore.Builder;
-using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Hosting;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic;
using Volo.Abp.Autofac;
using Volo.Abp.Modularity;
@@ -22,9 +22,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo
app.UseDeveloperExceptionPage();
}
+ app.UseRouting();
app.UseVirtualFiles();
-
- app.UseMvcWithDefaultRoute();
+ app.UseMvcWithDefaultRouteAndArea();
}
}
}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Program.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Program.cs
index 4ee4949d50..0941475418 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Program.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Program.cs
@@ -1,6 +1,7 @@
using System;
using System.IO;
using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Hosting;
using Serilog;
using Serilog.Events;
@@ -20,7 +21,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo
try
{
Log.Information("Starting web host.");
- BuildWebHostInternal(args).Run();
+ BuildWebHostInternal(args).Build().Run();
return 0;
}
catch (Exception ex)
@@ -34,13 +35,20 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo
}
}
- internal static IWebHost BuildWebHostInternal(string[] args) =>
- new WebHostBuilder()
- .UseKestrel()
- .UseContentRoot(Directory.GetCurrentDirectory())
- .UseIISIntegration()
- .UseStartup()
- .UseSerilog()
- .Build();
+ //internal static IWebHost BuildWebHostInternal(string[] args) =>
+ // new WebHostBuilder()
+ // .UseKestrel()
+ // .UseContentRoot(Directory.GetCurrentDirectory())
+ // .UseIISIntegration()
+ // .UseStartup()
+ // .UseSerilog()
+ // .Build();
+
+ internal static IHostBuilder BuildWebHostInternal(string[] args) =>
+ Host.CreateDefaultBuilder(args)
+ .ConfigureWebHostDefaults(webBuilder =>
+ {
+ webBuilder.UseStartup();
+ });
}
}
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Startup.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Startup.cs
index ffd3ca47be..0497fe5216 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Startup.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Startup.cs
@@ -7,14 +7,14 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo
{
public class Startup
{
- public IServiceProvider ConfigureServices(IServiceCollection services)
+ public void ConfigureServices(IServiceCollection services)
{
services.AddApplication(options =>
{
options.UseAutofac();
});
- return services.BuildServiceProviderFromFactory();
+ //return services.BuildServiceProviderFromFactory();
}
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
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 c5a4731256..eb9f5afd9c 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,12 +1,13 @@
+
+
- netcoreapp2.2
+ netcoreapp3.0
-
-
+
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Properties/launchSettings.json b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Properties/launchSettings.json
new file mode 100644
index 0000000000..9e97dc2b61
--- /dev/null
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:55480/",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "Volo.Abp.AspNetCore.Mvc.UI.Tests": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "http://localhost:55481/"
+ }
+ }
+}
\ 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 cfbe4ad40d..b63efadfda 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,22 +1,20 @@
-
+
+
+
- netcoreapp2.2
+ netcoreapp3.0
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
Volo.Abp.AspNetCore.Mvc.UI.Tests
Volo.Abp.AspNetCore.Mvc.UI.Tests
true
true
- false
- false
- false
true
true
-
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Startup.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Startup.cs
index 1f4182110a..124a103da2 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Startup.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Startup.cs
@@ -19,7 +19,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI
return services.BuildServiceProviderFromFactory();
}
- public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
+ public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
app.InitializeApplication();
}
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Properties/launchSettings.json b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Properties/launchSettings.json
new file mode 100644
index 0000000000..836bd1af47
--- /dev/null
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:55487/",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "Volo.Abp.AspNetCore.Mvc.Versioning.Tests": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "http://localhost:55488/"
+ }
+ }
+}
\ 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 3c9ce2301f..8d954b0b2a 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,22 +1,20 @@
-
+
+
+
- netcoreapp2.2
+ netcoreapp3.0
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
Volo.Abp.AspNetCore.Mvc.Versioning.Tests
Volo.Abp.AspNetCore.Mvc.Versioning.Tests
true
true
- false
- false
- false
true
true
-
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/AbpAspNetCoreMvcVersioningTestModule.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/AbpAspNetCoreMvcVersioningTestModule.cs
index 3ea9103e9e..99a155f3b7 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/AbpAspNetCoreMvcVersioningTestModule.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/AbpAspNetCoreMvcVersioningTestModule.cs
@@ -66,7 +66,8 @@ namespace Volo.Abp.AspNetCore.Mvc.Versioning
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
var app = context.GetApplicationBuilder();
- app.UseMvcWithDefaultRoute();
+ app.UseRouting();
+ app.UseMvcWithDefaultRouteAndArea();
}
}
}
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Startup.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Startup.cs
index 4d9f831670..79985de769 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Startup.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/Startup.cs
@@ -19,7 +19,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Versioning
return services.BuildServiceProviderFromFactory();
}
- public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
+ public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
app.InitializeApplication();
}
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 e52c426e43..061e1640ce 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,18 +1,29 @@
+
+
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.AspNetCore.Tests
Volo.Abp.AspNetCore.Tests
true
false
false
false
+ true
+ false
+ true
+
+
+
+
+
+
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 33beb9d62c..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
@@ -1,5 +1,7 @@
+using System.Globalization;
using System.Net;
using System.Net.Http;
+using System.Net.Http.Headers;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
@@ -8,6 +10,11 @@ using Volo.Abp.AspNetCore.TestBase;
namespace Volo.Abp.AspNetCore
{
+ public class AbpAspNetCoreTestBase : AbpAspNetCoreTestBase
+ {
+
+ }
+
public abstract class AbpAspNetCoreTestBase : AbpAspNetCoreIntegratedTestBase
where TStartup : class
{
@@ -25,15 +32,21 @@ namespace Volo.Abp.AspNetCore
protected virtual async Task GetResponseAsStringAsync(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK)
{
- var response = await GetResponseAsync(url, expectedStatusCode);
- return await response.Content.ReadAsStringAsync();
+ using (var response = await GetResponseAsync(url, expectedStatusCode))
+ {
+ return await response.Content.ReadAsStringAsync();
+ }
}
protected virtual async Task GetResponseAsync(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK)
{
- var response = await Client.GetAsync(url);
- response.StatusCode.ShouldBe(expectedStatusCode);
- return response;
+ using (var requestMessage = new HttpRequestMessage(HttpMethod.Get, url))
+ {
+ requestMessage.Headers.Add("Accept-Language", CultureInfo.CurrentUICulture.Name);
+ var response = await Client.SendAsync(requestMessage);
+ response.StatusCode.ShouldBe(expectedStatusCode);
+ return response;
+ }
}
}
}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestModule.cs b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestModule.cs
new file mode 100644
index 0000000000..fafd5794a6
--- /dev/null
+++ b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestModule.cs
@@ -0,0 +1,53 @@
+using System;
+using System.IO;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp.AspNetCore.TestBase;
+using Volo.Abp.Autofac;
+using Volo.Abp.Localization;
+using Volo.Abp.Modularity;
+using Volo.Abp.VirtualFileSystem;
+
+namespace Volo.Abp.AspNetCore
+{
+ [DependsOn(
+ typeof(AbpAspNetCoreTestBaseModule),
+ typeof(AbpAspNetCoreModule),
+ typeof(AbpAutofacModule)
+ )]
+ public class AbpAspNetCoreTestModule : AbpModule
+ {
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ var hostingEnvironment = context.Services.GetHostingEnvironment();
+
+ Configure(options =>
+ {
+ options.FileSets.AddEmbedded();
+ //options.FileSets.ReplaceEmbeddedByPhysical(FindProjectPath(hostingEnvironment));
+ });
+ }
+
+ public override void OnApplicationInitialization(ApplicationInitializationContext context)
+ {
+ var app = context.GetApplicationBuilder();
+
+ app.UseCorrelationId();
+ app.UseVirtualFiles();
+ }
+
+ private string FindProjectPath(IWebHostEnvironment hostEnvironment)
+ {
+ var directory = new DirectoryInfo(hostEnvironment.ContentRootPath);
+
+ while (directory != null && directory.Name != "Volo.Abp.AspNetCore.Tests")
+ {
+ directory = directory.Parent;
+ }
+
+ return directory?.FullName
+ ?? throw new Exception("Could not find the project path by beginning from " + hostEnvironment.ContentRootPath + ", going through to parents and looking for Volo.Abp.AspNetCore.Tests");
+ }
+ }
+}
diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/Startup.cs b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/Startup.cs
new file mode 100644
index 0000000000..7f95713274
--- /dev/null
+++ b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/Startup.cs
@@ -0,0 +1,26 @@
+using System;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+
+namespace Volo.Abp.AspNetCore
+{
+ public class Startup
+ {
+ public IServiceProvider ConfigureServices(IServiceCollection services)
+ {
+ services.AddApplication(options =>
+ {
+ options.UseAutofac();
+ });
+
+ return services.BuildServiceProviderFromFactory();
+ }
+
+ public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
+ {
+ app.InitializeApplication();
+ }
+ }
+}
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
new file mode 100644
index 0000000000..142d44baec
--- /dev/null
+++ b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/VirtualFileSystem/VirtualFileSystem_Tests.cs
@@ -0,0 +1,19 @@
+using System.Threading.Tasks;
+using Shouldly;
+using Xunit;
+
+namespace Volo.Abp.AspNetCore.VirtualFileSystem
+{
+ public class VirtualFileSystem_Tests : AbpAspNetCoreTestBase
+ {
+ [Fact]
+ public async Task Get_Virtual_File()
+ {
+ var result = await GetResponseAsStringAsync(
+ "/SampleFiles/test1.js"
+ );
+
+ result.ShouldBe("test1.js-content");
+ }
+ }
+}
diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/wwwroot/SampleFiles/test1.js b/framework/test/Volo.Abp.AspNetCore.Tests/wwwroot/SampleFiles/test1.js
new file mode 100644
index 0000000000..20a6856cb7
--- /dev/null
+++ b/framework/test/Volo.Abp.AspNetCore.Tests/wwwroot/SampleFiles/test1.js
@@ -0,0 +1 @@
+test1.js-content
\ 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 aa26dffb44..ee1e2441a6 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,14 +1,12 @@
+
+
- netcoreapp2.2
- latest
+ netcoreapp3.0
Volo.Abp.Auditing.Tests
Volo.Abp.Auditing.Tests
true
- false
- false
- false
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 a76bcabb37..817533079b 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,14 +1,12 @@
+
+
- netcoreapp2.2
- latest
+ netcoreapp3.0
Volo.Abp.Authorization.Tests
Volo.Abp.Authorization.Tests
true
- false
- false
- false
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 234c405eda..d8e2e5ec2b 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,13 +1,11 @@
+
+
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.AutoMapper.Tests
Volo.Abp.AutoMapper.Tests
- true
- false
- false
- false
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 1a9016ee3a..96088ec3e4 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,13 +1,12 @@
+
+
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.Autofac.Tests
Volo.Abp.Autofac.Tests
true
- false
- false
- false
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 31e9c91779..f8a27d020b 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,14 +1,11 @@
+
+
- netcoreapp2.2
- latest
+ netcoreapp3.0
Volo.Abp.BackgroundJobs.Tests
Volo.Abp.BackgroundJobs.Tests
- true
- false
- false
- false
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 8efd87f2b6..1c4818159b 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,14 +1,11 @@
+
+
- netcoreapp2.2
- latest
+ netcoreapp3.0
Volo.Abp.Caching.Tests
Volo.Abp.Caching.Tests
- true
- false
- false
- false
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 34c30b1600..97988f8b3f 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,13 +1,9 @@
+
+
- netcoreapp2.2
- Volo.Abp.Castle.Core.Tests
- Volo.Abp.Castle.Core.Tests
- true
- false
- false
- false
+ netcoreapp3.0
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 d2535076b1..ba75eb73ca 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,8 +1,9 @@
+
+
- netcoreapp2.2
- latest
+ netcoreapp3.0
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 957c255d2b..0812895ae0 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,13 +1,9 @@
+
+
- netcoreapp2.2
- Volo.Abp.Core.Tests
- Volo.Abp.Core.Tests
- true
- false
- false
- false
+ netcoreapp3.0
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 8e9ff07634..7f08897bcd 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,13 +1,9 @@
+
+
- netcoreapp2.2
- Volo.Abp.Dapper.Tests
- Volo.Abp.Dapper.Tests
- true
- false
- false
- false
+ netcoreapp3.0
@@ -18,7 +14,7 @@
-
+
\ 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 b7895d25a0..65b50126bd 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,13 +1,9 @@
+
+
- netcoreapp2.2
- Volo.Abp.Data.Tests
- Volo.Abp.Data.Tests
- true
- false
- false
- false
+ netcoreapp3.0
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 42de4f22f2..1ed24ead80 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,14 +1,9 @@
+
+
- netcoreapp2.2
- latest
- Volo.Abp.Ddd.Tests
- Volo.Abp.Ddd.Tests
- true
- false
- false
- false
+ netcoreapp3.0
diff --git a/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Entities/EntityHelper_Tests.cs b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Entities/EntityHelper_Tests.cs
new file mode 100644
index 0000000000..2ad6a45b05
--- /dev/null
+++ b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Entities/EntityHelper_Tests.cs
@@ -0,0 +1,57 @@
+using System;
+using Shouldly;
+using Xunit;
+
+namespace Volo.Abp.Domain.Entities
+{
+ public class EntityHelper_Tests
+ {
+ [Fact]
+ public static void SetId_DerivedFromAggregateRoot()
+ {
+ var idValue = Guid.NewGuid();
+ var myEntityDerivedFromAggregateRoot = new MyEntityDerivedFromAggregateRoot();
+ EntityHelper.TrySetId(myEntityDerivedFromAggregateRoot, () => idValue, true);
+ myEntityDerivedFromAggregateRoot.Id.ShouldBe(idValue);
+ }
+
+ [Fact]
+ public static void SetId_ImplementsIEntity()
+ {
+ var idValue = Guid.NewGuid();
+ var myEntityImplementsIEntity = new MyEntityImplementsIEntity();
+ EntityHelper.TrySetId(myEntityImplementsIEntity, () => idValue, true);
+ myEntityImplementsIEntity.Id.ShouldBe(idValue);
+ }
+
+ [Fact]
+ public static void SetId_DisablesIdGeneration()
+ {
+ var idValue = Guid.NewGuid();
+ var myEntityDisablesIdGeneration = new MyEntityDisablesIdGeneration();
+ EntityHelper.TrySetId(myEntityDisablesIdGeneration, () => idValue, true);
+ myEntityDisablesIdGeneration.Id.ShouldBe(default);
+ }
+
+ private class MyEntityDerivedFromAggregateRoot : AggregateRoot
+ {
+
+ }
+
+ private class MyEntityImplementsIEntity : IEntity
+ {
+ public Guid Id { get; protected set; }
+
+ public object[] GetKeys()
+ {
+ return new object[] { Id };
+ }
+ }
+
+ private class MyEntityDisablesIdGeneration : Entity
+ {
+ [DisableIdGeneration]
+ public override Guid Id { get; protected set; }
+ }
+ }
+}
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 ec4d2f8bda..bc1296cbc8 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,12 +1,9 @@
+
+
- netcoreapp2.2
- latest
- true
- false
- false
- false
+ netcoreapp3.0
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 14453442c6..bace3a67e5 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,15 +1,12 @@
-
+
+
+
- netcoreapp2.2
+ netcoreapp3.0
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
- Volo.Abp.EntityFrameworkCore.Tests.SecondContext
- Volo.Abp.EntityFrameworkCore.Tests.SecondContext
true
true
- false
- false
- false
true
true
diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/Volo/Abp/EntityFrameworkCore/TestApp/SecondContext/BookInSecondDbContext.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/Volo/Abp/EntityFrameworkCore/TestApp/SecondContext/BookInSecondDbContext.cs
index 0e22533c11..59c568ed9d 100644
--- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/Volo/Abp/EntityFrameworkCore/TestApp/SecondContext/BookInSecondDbContext.cs
+++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/Volo/Abp/EntityFrameworkCore/TestApp/SecondContext/BookInSecondDbContext.cs
@@ -6,5 +6,16 @@ namespace Volo.Abp.EntityFrameworkCore.TestApp.SecondContext
public class BookInSecondDbContext : AggregateRoot
{
public string Name { get; set; }
+
+ public BookInSecondDbContext()
+ {
+
+ }
+
+ public BookInSecondDbContext(Guid id, string name)
+ : base(id)
+ {
+ Name = name;
+ }
}
}
\ 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 59ddc2acdf..0b89576f34 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
@@ -18,11 +18,12 @@ namespace Volo.Abp.EntityFrameworkCore.TestApp.SecondContext
public void Build()
{
- _bookRepository.Insert(new BookInSecondDbContext
- {
- Id = _guidGenerator.Create(),
- Name = "TestBook1"
- });
+ _bookRepository.Insert(
+ new BookInSecondDbContext(
+ _guidGenerator.Create(),
+ "TestBook1"
+ )
+ );
}
}
}
\ 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 e70921b325..633df17917 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,13 +1,9 @@
+
+
- netcoreapp2.2
- Volo.Abp.EntityFrameworkCore.Tests
- Volo.Abp.EntityFrameworkCore.Tests
- true
- false
- false
- false
+ netcoreapp3.0
@@ -20,7 +16,7 @@
-
+
diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Basic_Tests_With_Int_Pk.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Basic_Tests_With_Int_Pk.cs
new file mode 100644
index 0000000000..44cf993be8
--- /dev/null
+++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Basic_Tests_With_Int_Pk.cs
@@ -0,0 +1,9 @@
+using Volo.Abp.TestApp.Testing;
+
+namespace Volo.Abp.EntityFrameworkCore.Repositories
+{
+ public class Repository_Basic_Tests_With_Int_Pk : Repository_Basic_Tests_With_Int_Pk
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs
index cb9726d6b4..0f9def32f0 100644
--- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs
+++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs
@@ -15,6 +15,8 @@ namespace Volo.Abp.EntityFrameworkCore
public DbSet Books { get; set; }
+ public DbSet EntityWithIntPks { get; set; }
+
public TestMigrationsDbContext(DbContextOptions options)
: base(options)
{
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 030b236637..613c42894c 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
@@ -80,7 +80,7 @@ namespace Volo.Abp.EntityFrameworkCore.Transactions
_unitOfWorkManager.Current.ShouldNotBeNull();
await _personRepository.InsertAsync(new Person(personId, "Adam", 42));
- await _bookRepository.InsertAsync(new BookInSecondDbContext { Id = bookId, Name = bookId.ToString() });
+ await _bookRepository.InsertAsync(new BookInSecondDbContext(bookId, bookId.ToString()));
await _unitOfWorkManager.Current.SaveChangesAsync();
diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs
index 00e052d2dd..bfcecdeb65 100644
--- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs
+++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs
@@ -13,6 +13,8 @@ namespace Volo.Abp.TestApp.EntityFrameworkCore
public DbSet DummyEntities { get; set; }
+ public DbSet EntityWithIntPks { get; set; }
+
public TestAppDbContext(DbContextOptions options)
: base(options)
{
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 eb0f746272..a58e10af2d 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,14 +1,9 @@
+
+
- netcoreapp2.2
- latest
- Volo.Abp.EventBus.Tests
- Volo.Abp.EventBus.Tests
- true
- false
- false
- false
+ netcoreapp3.0
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 d770a81325..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 { Id = 42 }));
+ await LocalEventBus.PublishAsync(new EntityUpdatedEventData(new Person(42)));
triggeredEvent.ShouldBe(true);
}
@@ -39,19 +39,37 @@ namespace Volo.Abp.EventBus.Local
return Task.CompletedTask;
});
- await LocalEventBus.PublishAsync(new EntityChangedEventData(new Student { Id = 42 }));
+ await LocalEventBus.PublishAsync(new EntityChangedEventData(new Student(42)));
triggeredEvent.ShouldBe(true);
}
-
+
public class Person : Entity
{
-
+ public Person()
+ {
+
+ }
+
+ public Person(int id)
+ : base(id)
+ {
+
+ }
}
public class Student : Person
{
-
+ public Student()
+ {
+
+ }
+
+ public Student(int id)
+ : base(id)
+ {
+
+ }
}
}
}
\ 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 dd7436e1d2..d7b28568f3 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,14 +1,9 @@
+
+
- netcoreapp2.2
- latest
- Volo.Abp.Features.Tests
- Volo.Abp.Features.Tests
- true
- false
- false
- false
+ netcoreapp3.0
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 089dbcab38..e3e95e182b 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,13 +1,9 @@
+
+
- netcoreapp2.2
- Volo.Abp.FluentValidation.Tests
- Volo.Abp.FluentValidation.Tests
- true
- false
- false
- false
+ netcoreapp3.0
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 8800d492ea..a4bcae448b 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,13 +1,9 @@
+
+
- netcoreapp2.2
- Volo.Abp.Http.Client.Tests
- Volo.Abp.Http.Client.Tests
- true
- false
- false
- false
+ netcoreapp3.0
diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpClientTestBase.cs b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpClientTestBase.cs
new file mode 100644
index 0000000000..7dc930daa1
--- /dev/null
+++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpClientTestBase.cs
@@ -0,0 +1,9 @@
+using Volo.Abp.AspNetCore;
+
+namespace Volo.Abp.Http
+{
+ public abstract class AbpHttpClientTestBase : AbpAspNetCoreTestBase
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpTestModule.cs b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpClientTestModule.cs
similarity index 56%
rename from framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpTestModule.cs
rename to framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpClientTestModule.cs
index 4ee13e7dc7..ecde843177 100644
--- a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpTestModule.cs
+++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpClientTestModule.cs
@@ -1,4 +1,5 @@
-using Microsoft.Extensions.DependencyInjection;
+using Microsoft.AspNetCore.Mvc.ApplicationParts;
+using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Http.Client;
using Volo.Abp.Http.DynamicProxying;
@@ -7,8 +8,11 @@ using Volo.Abp.TestApp;
namespace Volo.Abp.Http
{
- [DependsOn(typeof(AbpAspNetCoreMvcTestModule), typeof(AbpHttpClientModule))]
- public class AbpHttpTestModule : AbpModule
+ [DependsOn(
+ typeof(AbpHttpClientModule),
+ typeof(AbpAspNetCoreMvcTestModule)
+ )]
+ public class AbpHttpClientTestModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
@@ -19,6 +23,11 @@ namespace Volo.Abp.Http
{
options.RemoteServices.Default = new RemoteServiceConfiguration("/");
});
+
+ //This is needed after ASP.NET Core 3.0 upgrade.
+ context.Services.AddMvc()
+ .PartManager.ApplicationParts
+ .Add(new AssemblyPart(typeof(AbpAspNetCoreMvcModule).Assembly));
}
}
}
diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpTestBase.cs b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpTestBase.cs
deleted file mode 100644
index d2db4dc3ac..0000000000
--- a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/AbpHttpTestBase.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using Volo.Abp.AspNetCore;
-
-namespace Volo.Abp.Http
-{
- public abstract class AbpHttpTestBase : AbpAspNetCoreTestBase
- {
-
- }
-}
\ 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 629d979d95..aeae7ef1b4 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
@@ -5,6 +5,7 @@ using Microsoft.Extensions.DependencyInjection;
using Shouldly;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Http.Modeling;
using Volo.Abp.TestApp.Application;
using Volo.Abp.TestApp.Application.Dto;
using Volo.Abp.TestApp.Domain;
@@ -12,7 +13,7 @@ using Xunit;
namespace Volo.Abp.Http.DynamicProxying
{
- public class PersonAppServiceClientProxy_Tests : AbpHttpTestBase
+ public class PersonAppServiceClientProxy_Tests : AbpHttpClientTestBase
{
private readonly IPeopleAppService _peopleAppService;
private readonly IRepository _personRepository;
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 1a59b39614..22d9354624 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
@@ -6,7 +6,7 @@ using Xunit;
namespace Volo.Abp.Http.DynamicProxying
{
- public class RegularTestControllerClientProxy_Tests : AbpHttpTestBase
+ public class RegularTestControllerClientProxy_Tests : AbpHttpClientTestBase
{
//TODO: Create a regular MVC Controller and add different parameter bindings, verbs and routes and test client proxy for it!
diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Startup.cs b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Startup.cs
index 961454d22a..4704128d9d 100644
--- a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Startup.cs
+++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Startup.cs
@@ -1,8 +1,6 @@
using System;
using Microsoft.AspNetCore.Builder;
-using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Logging;
namespace Volo.Abp.Http
{
@@ -10,7 +8,7 @@ namespace Volo.Abp.Http
{
public IServiceProvider ConfigureServices(IServiceCollection services)
{
- services.AddApplication(options =>
+ services.AddApplication(options =>
{
options.UseAutofac();
});
@@ -19,7 +17,7 @@ namespace Volo.Abp.Http
return services.BuildServiceProviderFromFactory();
}
- public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
+ public void Configure(IApplicationBuilder app)
{
app.InitializeApplication();
}
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 c7e32be51a..6f16b2499e 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,9 +1,9 @@
+
+
- netcoreapp2.2
- latest
- false
+ netcoreapp3.0
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 4cc31224fc..68cc2bdb83 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,13 +1,9 @@
+
+
- netcoreapp2.2
- Volo.Abp.Localization.Tests
- Volo.Abp.Localization.Tests
- true
- false
- false
- false
+ netcoreapp3.0
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 09ea53af78..11a2ac7673 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,12 +1,9 @@
+
+
- netcoreapp2.2
- latest
- true
- false
- false
- false
+ netcoreapp3.0
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 136dc408c6..e7d0eec2fc 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,13 +1,9 @@
+
+
- netcoreapp2.2
- Volo.Abp.MemoryDb.Tests
- Volo.Abp.MemoryDb.Tests
- true
- false
- false
- false
+ netcoreapp3.0
diff --git a/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/Repositories/Repository_Basic_Tests_With_Int_Pk.cs b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/Repositories/Repository_Basic_Tests_With_Int_Pk.cs
new file mode 100644
index 0000000000..31cd74043d
--- /dev/null
+++ b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/Repositories/Repository_Basic_Tests_With_Int_Pk.cs
@@ -0,0 +1,9 @@
+using Volo.Abp.TestApp.Testing;
+
+namespace Volo.Abp.MemoryDb.Repositories
+{
+ public class Repository_Basic_Tests_With_Int_Pk : Repository_Basic_Tests_With_Int_Pk
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/TestApp/MemoryDb/TestAppMemoryDbContext.cs b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/TestApp/MemoryDb/TestAppMemoryDbContext.cs
index 902c013ed8..09b134a078 100644
--- a/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/TestApp/MemoryDb/TestAppMemoryDbContext.cs
+++ b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/TestApp/MemoryDb/TestAppMemoryDbContext.cs
@@ -8,7 +8,8 @@ namespace Volo.Abp.TestApp.MemoryDb
public class TestAppMemoryDbContext : MemoryDbContext
{
private static readonly Type[] EntityTypeList = {
- typeof(Person)
+ typeof(Person),
+ typeof(EntityWithIntPk)
};
public override IReadOnlyList GetEntityTypes()
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 0605a51a7c..bbad58f4fa 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,13 +1,9 @@
+
+
- netcoreapp2.2
- Volo.Abp.MongoDB.Tests
- Volo.Abp.MongoDB.Tests
- true
- false
- false
- false
+ netcoreapp3.0
diff --git a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests_With_Int_Pk.cs b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests_With_Int_Pk.cs
new file mode 100644
index 0000000000..58914e8e50
--- /dev/null
+++ b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests_With_Int_Pk.cs
@@ -0,0 +1,14 @@
+using Volo.Abp.TestApp.Testing;
+using Xunit;
+
+namespace Volo.Abp.MongoDB.Repositories
+{
+ public class Repository_Basic_Tests_With_Int_Pk : Repository_Basic_Tests_With_Int_Pk
+ {
+ [Fact(Skip = "Int PKs are not working for MongoDb")]
+ public override void Get()
+ {
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/TestApp/MongoDb/TestAppMongoDbContext.cs b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/TestApp/MongoDb/TestAppMongoDbContext.cs
index fd7562f6df..03869ce566 100644
--- a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/TestApp/MongoDb/TestAppMongoDbContext.cs
+++ b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/TestApp/MongoDb/TestAppMongoDbContext.cs
@@ -8,9 +8,11 @@ namespace Volo.Abp.TestApp.MongoDB
[ConnectionStringName("TestApp")]
public class TestAppMongoDbContext : AbpMongoDbContext, ITestAppMongoDbContext
{
- [MongoCollection("Persons")] //Intentially changed the collection name to test it
+ [MongoCollection("Persons")] //Intentionally changed the collection name to test it
public IMongoCollection People => Collection();
+ public IMongoCollection EntityWithIntPks => Collection();
+
public IMongoCollection Cities => Collection();
protected override void CreateModel(IMongoModelBuilder modelBuilder)
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 1258956caf..17ce3073c5 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,13 +1,9 @@
+
+
- netcoreapp2.2
- Volo.Abp.MultiTenancy.Tests
- Volo.Abp.MultiTenancy.Tests
- true
- false
- false
- false
+ netcoreapp3.0
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 696592c5d3..1534cb28f4 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,13 +1,9 @@
+
+
- netcoreapp2.2
- Volo.Abp.Security.Tests
- Volo.Abp.Security.Tests
- true
- false
- false
- false
+ netcoreapp3.0
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 b800df4fb0..65bb49d57a 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,14 +1,9 @@
+
+
- netcoreapp2.2
- latest
- Volo.Abp.Serialization.Tests
- Volo.Abp.Serialization.Tests
- true
- false
- false
- false
+ netcoreapp3.0
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 419451777d..ef91443b2a 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,14 +1,9 @@
+
+
- netcoreapp2.2
- latest
- Volo.Abp.Settings.Tests
- Volo.Abp.Settings.Tests
- true
- false
- false
- false
+ netcoreapp3.0
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 3b1f95fabb..0594067fa5 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,14 +1,9 @@
+
+
- netcoreapp2.2
- latest
- Volo.Abp.Specifications.Tests
- Volo.Abp.Specifications.Tests
- true
- false
- false
- false
+ netcoreapp3.0
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 1d999ea9d5..90dbb56a8e 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,13 +1,9 @@
+
+
- netcoreapp2.2
- Volo.Abp.TestApp.Tests
- Volo.Abp.TestApp.Tests
- true
- false
- false
- false
+ netcoreapp3.0
diff --git a/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj b/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj
index be55d0dc90..d72d42e48a 100644
--- a/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj
+++ b/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj
@@ -1,13 +1,9 @@
+
+
- netcoreapp2.2
- Volo.Abp.TestApp
- Volo.Abp.TestApp
- true
- false
- false
- false
+ netcoreapp3.0
diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/EntityWithIntPk.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/EntityWithIntPk.cs
new file mode 100644
index 0000000000..040af1a4e9
--- /dev/null
+++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/EntityWithIntPk.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Volo.Abp.Domain.Entities;
+
+namespace Volo.Abp.TestApp.Domain
+{
+ public class EntityWithIntPk : AggregateRoot
+ {
+ public string Name { get; set; }
+
+ public EntityWithIntPk()
+ {
+
+ }
+
+ public EntityWithIntPk(string name)
+ {
+ Name = name;
+ }
+ }
+}
diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/Person.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/Person.cs
index 16ac62589e..3bbec118a2 100644
--- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/Person.cs
+++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/Person.cs
@@ -23,8 +23,8 @@ namespace Volo.Abp.TestApp.Domain
}
public Person(Guid id, string name, int age, Guid? tenantId = null, Guid? cityId = null)
+ : base(id)
{
- Id = id;
Name = name;
Age = age;
TenantId = tenantId;
diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/Phone.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/Phone.cs
index e53f2bc2e3..20292e3de8 100644
--- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/Phone.cs
+++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/Phone.cs
@@ -49,8 +49,8 @@ namespace Volo.Abp.TestApp.Domain
}
public Order(Guid id, string referenceNo)
+ : base(id)
{
- Id = id;
ReferenceNo = referenceNo;
OrderLines = new List();
}
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 25886f77a6..1f955b3e82 100644
--- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestDataBuilder.cs
+++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestDataBuilder.cs
@@ -17,19 +17,23 @@ namespace Volo.Abp.TestApp
private readonly IBasicRepository _personRepository;
private readonly ICityRepository _cityRepository;
+ private readonly IRepository _entityWithIntPksRepository;
public TestDataBuilder(
IBasicRepository personRepository,
- ICityRepository cityRepository)
+ ICityRepository cityRepository,
+ IRepository entityWithIntPksRepository)
{
_personRepository = personRepository;
_cityRepository = cityRepository;
+ _entityWithIntPksRepository = entityWithIntPksRepository;
}
public void Build()
{
AddCities();
AddPeople();
+ AddEntitiesWithPks();
}
private void AddCities()
@@ -63,5 +67,10 @@ namespace Volo.Abp.TestApp
_personRepository.Insert(tenant1Person1);
_personRepository.Insert(tenant1Person2);
}
+
+ private void AddEntitiesWithPks()
+ {
+ _entityWithIntPksRepository.Insert(new EntityWithIntPk("Entity1"));
+ }
}
}
\ No newline at end of file
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
new file mode 100644
index 0000000000..f8a2f4e8e9
--- /dev/null
+++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests_With_Int_Pk.cs
@@ -0,0 +1,42 @@
+using System.Linq;
+using Shouldly;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Modularity;
+using Volo.Abp.TestApp.Domain;
+using Xunit;
+
+namespace Volo.Abp.TestApp.Testing
+{
+ public abstract class Repository_Basic_Tests_With_Int_Pk : TestAppTestBase
+ where TStartupModule : IAbpModule
+ {
+ protected readonly IRepository EntityWithIntPkRepository;
+
+ protected Repository_Basic_Tests_With_Int_Pk()
+ {
+ EntityWithIntPkRepository = GetRequiredService>();
+ }
+
+ [Fact]
+ public virtual void FirstOrDefault()
+ {
+ WithUnitOfWork(() =>
+ {
+ var entity = EntityWithIntPkRepository.FirstOrDefault(e => e.Name == "Entity1");
+ entity.ShouldNotBeNull();
+ entity.Name.ShouldBe("Entity1");
+ });
+ }
+
+ [Fact]
+ public virtual void Get()
+ {
+ WithUnitOfWork(() =>
+ {
+ var entity = EntityWithIntPkRepository.Get(1);
+ entity.ShouldNotBeNull();
+ entity.Name.ShouldBe("Entity1");
+ });
+ }
+ }
+}
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 9a1f142f01..7937d99580 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,13 +1,9 @@
+
+
- netcoreapp2.2
- Volo.Abp.UI.Navigation.Tests
- Volo.Abp.UI.Navigation.Tests
- true
- false
- false
- false
+ netcoreapp3.0
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 dd868b860f..6ec5ddac26 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,14 +1,9 @@
+
+
- netcoreapp2.2
- latest
- Volo.Abp.Uow.Tests
- Volo.Abp.Uow.Tests
- true
- false
- false
- false
+ netcoreapp3.0
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 ea192bb236..b1f30e3ea5 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,13 +1,9 @@
+
+
- netcoreapp2.2
- Volo.Abp.Validation.Tests
- Volo.Abp.Validation.Tests
- true
- false
- false
- false
+ netcoreapp3.0
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 e74d97c437..440525bc9e 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,13 +1,9 @@
+
+
- netcoreapp2.2
- Volo.Abp.VirtualFileSystem.Tests
- Volo.Abp.VirtualFileSystem.Tests
- true
- false
- false
- false
+ netcoreapp3.0
diff --git a/framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo/Abp/VirtualFileSystem/VirtualFileProvider_Tests.cs b/framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo/Abp/VirtualFileSystem/VirtualFileProvider_Tests.cs
index 2c853e3a19..e376d24aa0 100644
--- a/framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo/Abp/VirtualFileSystem/VirtualFileProvider_Tests.cs
+++ b/framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo/Abp/VirtualFileSystem/VirtualFileProvider_Tests.cs
@@ -1,4 +1,5 @@
using System.IO;
+using System.Linq;
using System.Text;
using Microsoft.Extensions.DependencyInjection;
using Shouldly;
@@ -32,6 +33,19 @@ namespace Volo.Abp.VirtualFileSystem
}
}
+ [Fact]
+ public void Should_Define_And_Get_Embedded_Directory_Contents()
+ {
+ //Act
+ var contents = _virtualFileProvider.GetDirectoryContents("/js");
+
+ //Assert
+ contents.Exists.ShouldNotBeNull();
+
+ var contentList = contents.ToList();
+ contentList.ShouldContain(x => x.Name == "jquery-3-1-1-min.js");
+ }
+
[DependsOn(typeof(AbpVirtualFileSystemModule))]
public class TestModule : AbpModule
{
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 14f9c8f991..65c5a1b913 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
@@ -10,7 +10,7 @@
-
+
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 c5d14ebcc4..9ecb118b9b 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
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.Account.HttpApi.Client
Volo.Abp.Account.HttpApi.Client
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 798c7e404e..2af9e29df4 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
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.Account.HttpApi
Volo.Abp.Account.HttpApi
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 666bcfadf0..b6902e86d8 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
@@ -52,15 +52,7 @@ namespace Volo.Abp.Account.Web.Pages.Account
//TODO: Reference AspNetCore MultiTenancy module and use options to get the tenant key!
var tenant = context.Parameters[TenantResolverConsts.DefaultTenantKey];
- if (string.IsNullOrEmpty(tenant))
- {
- if (Request.Cookies.ContainsKey(TenantResolverConsts.DefaultTenantKey))
- {
- CurrentTenant.Change(null);
- Response.Cookies.Delete(TenantResolverConsts.DefaultTenantKey);
- }
- }
- else
+ if (!string.IsNullOrEmpty(tenant))
{
CurrentTenant.Change(Guid.Parse(tenant));
Response.Cookies.Append(TenantResolverConsts.DefaultTenantKey, tenant);
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 724ecc38ef..a03e55b51f 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
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.Account.Web.IdentityServer
Volo.Abp.Account.Web.IdentityServer
true
@@ -16,10 +16,9 @@
-
-
-
-
+
+
+
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 700d52b3a9..8a5b54ecf1 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
@@ -1,5 +1,4 @@
using System;
-using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
@@ -8,6 +7,7 @@ using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Identity;
using SignInResult = Microsoft.AspNetCore.Identity.SignInResult;
using UserLoginInfo = Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo;
+using IdentityUser = Volo.Abp.Identity.IdentityUser;
namespace Volo.Abp.Account.Web.Areas.Account.Controllers
{
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 5a5f517851..1f1b43b853 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
@@ -2,7 +2,7 @@
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc;
-using Volo.Abp.Identity;
+using IdentityUser = Volo.Abp.Identity.IdentityUser;
namespace Volo.Abp.Account.Web.Areas.Account.Controllers
{
diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/AccountPageModel.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/AccountPageModel.cs
index 4a2751f21b..c1c1880650 100644
--- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/AccountPageModel.cs
+++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/AccountPageModel.cs
@@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Mvc;
using Volo.Abp.Account.Localization;
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages;
using Volo.Abp.Identity;
+using IdentityUser = Volo.Abp.Identity.IdentityUser;
namespace Volo.Abp.Account.Web.Pages.Account
{
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 aa168344a5..cc82de414f 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
@@ -14,6 +14,7 @@ using Volo.Abp.Identity;
using Volo.Abp.Security.Claims;
using Volo.Abp.Uow;
using Volo.Abp.Validation;
+using IdentityUser = Volo.Abp.Identity.IdentityUser;
namespace Volo.Abp.Account.Web.Pages.Account
{
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 d5ffdefd88..1a16cecc2a 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
@@ -1,14 +1,11 @@
-using System;
-using System.ComponentModel;
-using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.Account.Web.Settings;
-using Volo.Abp.Identity;
using Volo.Abp.Settings;
-using Volo.Abp.UI;
using Volo.Abp.Uow;
+using IdentityUser = Volo.Abp.Identity.IdentityUser;
namespace Volo.Abp.Account.Web.Pages.Account
{
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 f06fb190ed..3101861d54 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
@@ -3,26 +3,31 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.Account.Web
Volo.Abp.Account.Web
- true
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
false
false
false
Volo.Abp.Account.Web
+ true
Library
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
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 5fa709490c..d7153fa75f 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,11 +1,11 @@
- netcoreapp2.2
+ netcoreapp3.0
-
+
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 a2dec7ddff..634cbfc253 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
@@ -25,7 +25,7 @@ namespace Volo.Abp.Account.Pro.Application.Tests.Volo.Abp.Account
[Fact]
public async Task RegisterAsync()
{
- var registerDto = new RegisterDto()
+ var registerDto = new RegisterDto
{
UserName = "bob.lee",
EmailAddress = "bob.lee@abp.io",
@@ -36,7 +36,7 @@ namespace Volo.Abp.Account.Pro.Application.Tests.Volo.Abp.Account
await _accountAppService.RegisterAsync(registerDto);
var user = await _identityUserRepository.FindByNormalizedUserNameAsync(
- _lookupNormalizer.Normalize("bob.lee"));
+ _lookupNormalizer.NormalizeName("bob.lee"));
user.ShouldNotBeNull();
user.UserName.ShouldBe("bob.lee");
diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogRepository.cs
index e94eee3d88..1da98f36aa 100644
--- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogRepository.cs
+++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogRepository.cs
@@ -13,6 +13,8 @@ namespace Volo.Abp.AuditLogging
string sorting = null,
int maxResultCount = 50,
int skipCount = 0,
+ DateTime? startTime = null,
+ DateTime? endTime = null,
string httpMethod = null,
string url = null,
string userName = null,
@@ -26,6 +28,8 @@ namespace Volo.Abp.AuditLogging
CancellationToken cancellationToken = default);
Task GetCountAsync(
+ DateTime? startTime = null,
+ DateTime? endTime = null,
string httpMethod = null,
string url = null,
string userName = null,
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 ff72eb23da..93422d8f3f 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.0
+ netstandard2.1
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 043c3d8988..c60dfcc4d7 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
@@ -23,6 +23,8 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore
string sorting = null,
int maxResultCount = 50,
int skipCount = 0,
+ DateTime? startTime = null,
+ DateTime? endTime = null,
string httpMethod = null,
string url = null,
string userName = null,
@@ -35,16 +37,31 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore
bool includeDetails = false,
CancellationToken cancellationToken = default)
{
- var query = GetListQuery(httpMethod, url, userName, applicationName, correlationId, maxExecutionDuration, minExecutionDuration, hasException, httpStatusCode, includeDetails);
+ var query = GetListQuery(
+ startTime,
+ endTime,
+ httpMethod,
+ url,
+ userName,
+ applicationName,
+ correlationId,
+ maxExecutionDuration,
+ minExecutionDuration,
+ hasException,
+ httpStatusCode,
+ includeDetails
+ );
var auditLogs = await query.OrderBy(sorting ?? "executionTime desc")
.PageBy(skipCount, maxResultCount)
- .ToListAsync();
+ .ToListAsync(GetCancellationToken(cancellationToken));
return auditLogs;
}
public async Task GetCountAsync(
+ DateTime? startTime = null,
+ DateTime? endTime = null,
string httpMethod = null,
string url = null,
string userName = null,
@@ -56,14 +73,28 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore
HttpStatusCode? httpStatusCode = null,
CancellationToken cancellationToken = default)
{
- var query = GetListQuery(httpMethod, url, userName, applicationName, correlationId, maxExecutionDuration, minExecutionDuration, hasException, httpStatusCode);
+ var query = GetListQuery(
+ startTime,
+ endTime,
+ httpMethod,
+ url,
+ userName,
+ applicationName,
+ correlationId,
+ maxExecutionDuration,
+ minExecutionDuration,
+ hasException,
+ httpStatusCode
+ );
- var totalCount = await query.LongCountAsync();
+ var totalCount = await query.LongCountAsync(GetCancellationToken(cancellationToken));
return totalCount;
}
private IQueryable GetListQuery(
+ DateTime? startTime = null,
+ DateTime? endTime = null,
string httpMethod = null,
string url = null,
string userName = null,
@@ -77,16 +108,18 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore
{
return DbSet.AsNoTracking()
.IncludeDetails(includeDetails)
- .WhereIf(hasException.HasValue && hasException.Value, auditLog => auditLog.Exceptions != null && auditLog.Exceptions.Length > 0)
- .WhereIf(hasException.HasValue && !hasException.Value, auditLog => auditLog.Exceptions == null || auditLog.Exceptions.Length == 0)
- .WhereIf(httpMethod != null, auditLog => auditLog.HttpMethod != null && auditLog.HttpMethod.ToLowerInvariant() == httpMethod.ToLowerInvariant())
- .WhereIf(url != null, auditLog => auditLog.Url != null && auditLog.Url.ToLowerInvariant().Contains(url.ToLowerInvariant()))
- .WhereIf(userName != null, auditLog => auditLog.UserName != null && auditLog.UserName.ToLowerInvariant() == userName.ToLowerInvariant())
- .WhereIf(applicationName != null, auditLog => auditLog.ApplicationName != null && auditLog.ApplicationName.ToLowerInvariant() == applicationName.ToLowerInvariant())
- .WhereIf(correlationId != null, auditLog => auditLog.CorrelationId != null && auditLog.CorrelationId.ToLowerInvariant() == correlationId.ToLowerInvariant())
+ .WhereIf(startTime.HasValue, auditLog => auditLog.ExecutionTime >= startTime)
+ .WhereIf(endTime.HasValue, auditLog => auditLog.ExecutionTime <= endTime)
+ .WhereIf(hasException.HasValue && hasException.Value, auditLog => auditLog.Exceptions != null)
+ .WhereIf(hasException.HasValue && !hasException.Value, auditLog => auditLog.Exceptions == null)
+ .WhereIf(httpMethod != null, auditLog => auditLog.HttpMethod == httpMethod)
+ .WhereIf(url != null, auditLog => auditLog.Url != null && auditLog.Url.Contains(url))
+ .WhereIf(userName != null, auditLog => auditLog.UserName == userName)
+ .WhereIf(applicationName != null, auditLog => auditLog.ApplicationName == applicationName)
+ .WhereIf(correlationId != null, auditLog => auditLog.CorrelationId == correlationId)
.WhereIf(httpStatusCode != null && httpStatusCode > 0, auditLog => auditLog.HttpStatusCode == (int?)httpStatusCode)
- .WhereIf(maxExecutionDuration != null && maxExecutionDuration > 0, auditLog => auditLog.ExecutionDuration <= maxExecutionDuration)
- .WhereIf(minExecutionDuration != null && minExecutionDuration > 0, auditLog => auditLog.ExecutionDuration >= minExecutionDuration);
+ .WhereIf(maxExecutionDuration != null && maxExecutionDuration.Value > 0, auditLog => auditLog.ExecutionDuration <= maxExecutionDuration)
+ .WhereIf(minExecutionDuration != null && minExecutionDuration.Value > 0, auditLog => auditLog.ExecutionDuration >= minExecutionDuration);
}
public override IQueryable WithDetails()
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 f70bd1deaf..cead3fa2a9 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
@@ -24,6 +24,8 @@ namespace Volo.Abp.AuditLogging.MongoDB
string sorting = null,
int maxResultCount = 50,
int skipCount = 0,
+ DateTime? startTime = null,
+ DateTime? endTime = null,
string httpMethod = null,
string url = null,
string userName = null,
@@ -36,14 +38,29 @@ namespace Volo.Abp.AuditLogging.MongoDB
bool includeDetails = false,
CancellationToken cancellationToken = default)
{
- var query = GetListQuery(httpMethod, url, userName, applicationName, correlationId, maxDuration, minDuration, hasException, httpStatusCode, includeDetails);
+ var query = GetListQuery(
+ startTime,
+ endTime,
+ httpMethod,
+ url,
+ userName,
+ applicationName,
+ correlationId,
+ maxDuration,
+ minDuration,
+ hasException,
+ httpStatusCode,
+ includeDetails
+ );
return await query.OrderBy(sorting ?? "executionTime desc").As>()
.PageBy>(skipCount, maxResultCount)
- .ToListAsync();
+ .ToListAsync(GetCancellationToken(cancellationToken));
}
public async Task GetCountAsync(
+ DateTime? startTime = null,
+ DateTime? endTime = null,
string httpMethod = null,
string url = null,
string userName = null,
@@ -55,14 +72,29 @@ namespace Volo.Abp.AuditLogging.MongoDB
HttpStatusCode? httpStatusCode = null,
CancellationToken cancellationToken = default)
{
- var query = GetListQuery(httpMethod, url, userName, applicationName, correlationId, maxDuration, minDuration, hasException, httpStatusCode);
+ var query = GetListQuery(
+ startTime,
+ endTime,
+ httpMethod,
+ url,
+ userName,
+ applicationName,
+ correlationId,
+ maxDuration,
+ minDuration,
+ hasException,
+ httpStatusCode
+ );
- var count = await query.As>().LongCountAsync();
+ var count = await query.As>()
+ .LongCountAsync(GetCancellationToken(cancellationToken));
return count;
}
private IQueryable GetListQuery(
+ DateTime? startTime = null,
+ DateTime? endTime = null,
string httpMethod = null,
string url = null,
string userName = null,
@@ -75,13 +107,15 @@ namespace Volo.Abp.AuditLogging.MongoDB
bool includeDetails = false)
{
return GetMongoQueryable()
- .WhereIf(hasException.HasValue && hasException.Value, auditLog => auditLog.Exceptions != null && auditLog.Exceptions.Length > 0)
- .WhereIf(hasException.HasValue && !hasException.Value, auditLog => auditLog.Exceptions == null || auditLog.Exceptions.Length == 0)
- .WhereIf(httpMethod != null, auditLog => auditLog.HttpMethod != null && auditLog.HttpMethod.ToLowerInvariant() == httpMethod.ToLowerInvariant())
- .WhereIf(url != null, auditLog => auditLog.Url != null && auditLog.Url.ToLowerInvariant().Contains(url.ToLowerInvariant()))
- .WhereIf(userName != null, auditLog => auditLog.UserName != null && auditLog.UserName.ToLowerInvariant() == userName.ToLowerInvariant())
- .WhereIf(applicationName != null, auditLog => auditLog.ApplicationName != null && auditLog.ApplicationName.ToLowerInvariant() == applicationName.ToLowerInvariant())
- .WhereIf(correlationId != null, auditLog => auditLog.CorrelationId != null && auditLog.CorrelationId.ToLowerInvariant() == correlationId.ToLowerInvariant())
+ .WhereIf(startTime.HasValue, auditLog => auditLog.ExecutionTime >= startTime)
+ .WhereIf(endTime.HasValue, auditLog => auditLog.ExecutionTime <= endTime)
+ .WhereIf(hasException.HasValue && hasException.Value, auditLog => auditLog.Exceptions != null)
+ .WhereIf(hasException.HasValue && !hasException.Value, auditLog => auditLog.Exceptions == null)
+ .WhereIf(httpMethod != null, auditLog => auditLog.HttpMethod == httpMethod)
+ .WhereIf(url != null, auditLog => auditLog.Url != null && auditLog.Url.Contains(url))
+ .WhereIf(userName != null, auditLog => auditLog.UserName == userName)
+ .WhereIf(applicationName != null, auditLog => auditLog.ApplicationName == applicationName)
+ .WhereIf(correlationId != null, auditLog => auditLog.CorrelationId == correlationId)
.WhereIf(httpStatusCode != null && httpStatusCode > 0, auditLog => auditLog.HttpStatusCode == (int?)httpStatusCode)
.WhereIf(maxDuration != null && maxDuration > 0, auditLog => auditLog.ExecutionDuration <= maxDuration)
.WhereIf(minDuration != null && minDuration > 0, auditLog => auditLog.ExecutionDuration >= minDuration);
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 32ee40e070..2a877ba222 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
@@ -3,7 +3,7 @@
- netcoreapp2.2
+ netcoreapp3.0
@@ -13,9 +13,9 @@
-
-
-
+
+
+
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 9c831556a4..7126bf3cef 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
@@ -3,7 +3,7 @@
- netcoreapp2.2
+ netcoreapp3.0
@@ -13,8 +13,8 @@
-
-
+
+
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 7d817c4f6d..e7d0174cc9 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
@@ -3,7 +3,7 @@
- netcoreapp2.2
+ netcoreapp3.0
@@ -14,7 +14,7 @@
-
+
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 31c5d2886c..7dadd76798 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
@@ -3,7 +3,7 @@
- netcoreapp2.2
+ netcoreapp3.0
@@ -12,7 +12,7 @@
-
+
diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/DemoAppHangfireModule.cs b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/DemoAppHangfireModule.cs
index 27809f3d5c..1afe3f594c 100644
--- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/DemoAppHangfireModule.cs
+++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/DemoAppHangfireModule.cs
@@ -29,10 +29,11 @@ namespace Volo.Abp.BackgroundJobs.DemoApp.HangFire
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
- context
- .ServiceProvider
- .GetRequiredService()
- .AddConsole(LogLevel.Debug);
+ //TODO: Configure console logging
+ //context
+ // .ServiceProvider
+ // .GetRequiredService()
+ // .AddConsole(LogLevel.Debug);
}
}
}
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 c629101316..0eba9eeec3 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
@@ -2,7 +2,7 @@
Exe
- netcoreapp2.2
+ netcoreapp3.0
diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/DemoAppRabbitMqModule.cs b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/DemoAppRabbitMqModule.cs
index 6b1071716b..416bb29a96 100644
--- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/DemoAppRabbitMqModule.cs
+++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/DemoAppRabbitMqModule.cs
@@ -16,10 +16,11 @@ namespace Volo.Abp.BackgroundJobs.DemoApp.RabbitMq
{
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
- context
- .ServiceProvider
- .GetRequiredService()
- .AddConsole(LogLevel.Debug);
+ //TODO: Configure console logging
+ //context
+ // .ServiceProvider
+ // .GetRequiredService()
+ // .AddConsole(LogLevel.Debug);
}
}
}
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 46b7ff0ce5..00d239bef2 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
@@ -2,7 +2,7 @@
Exe
- netcoreapp2.2
+ netcoreapp3.0
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 1d7fc9fe56..1c95d86610 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
@@ -5,7 +5,7 @@
-
+
diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/DemoAppModule.cs b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/DemoAppModule.cs
index 69cfb2aa6f..cb9b532525 100644
--- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/DemoAppModule.cs
+++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/DemoAppModule.cs
@@ -38,10 +38,11 @@ namespace Volo.Abp.BackgroundJobs.DemoApp
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
- context
- .ServiceProvider
- .GetRequiredService()
- .AddConsole(LogLevel.Debug);
+ //TODO: Configure console logging
+ //context
+ // .ServiceProvider
+ // .GetRequiredService()
+ // .AddConsole(LogLevel.Debug);
}
}
}
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 3540aa8e9c..72dc208dc2 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
@@ -2,7 +2,7 @@
Exe
- netcoreapp2.2
+ netcoreapp3.0
@@ -11,8 +11,8 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/BackgroundJobRecord.cs b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/BackgroundJobRecord.cs
index c3684d9cfe..76106ea468 100644
--- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/BackgroundJobRecord.cs
+++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/BackgroundJobRecord.cs
@@ -48,7 +48,13 @@ namespace Volo.Abp.BackgroundJobs
///
public virtual BackgroundJobPriority Priority { get; set; }
- public BackgroundJobRecord()
+ private BackgroundJobRecord()
+ {
+
+ }
+
+ public BackgroundJobRecord(Guid id)
+ : base(id)
{
}
diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/BackgroundJobsDomainAutoMapperProfile.cs b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/BackgroundJobsDomainAutoMapperProfile.cs
index a20a01392b..ebf98bbe70 100644
--- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/BackgroundJobsDomainAutoMapperProfile.cs
+++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/BackgroundJobsDomainAutoMapperProfile.cs
@@ -8,9 +8,11 @@ namespace Volo.Abp.BackgroundJobs
public BackgroundJobsDomainAutoMapperProfile()
{
CreateMap()
+ .ConstructUsing(x => new BackgroundJobRecord(x.Id))
.Ignore(record => record.ConcurrencyStamp)
- .Ignore(record => record.ExtraProperties)
- .ReverseMap();
+ .Ignore(record => record.ExtraProperties);
+
+ CreateMap();
}
}
}
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 1b3ed12524..eb92972675 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.0
+ netstandard2.1
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 66ef602232..7932f919e1 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
@@ -3,7 +3,7 @@
- netcoreapp2.2
+ netcoreapp3.0
@@ -12,7 +12,7 @@
-
+
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
new file mode 100644
index 0000000000..caa9a3c445
--- /dev/null
+++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/Volo/Abp/BackgroundJobs/BackgroundJobStore_Tests.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Threading.Tasks;
+using Shouldly;
+using Xunit;
+
+namespace Volo.Abp.BackgroundJobs
+{
+ public class BackgroundJobStore_Tests : BackgroundJobsDomainTestBase
+ {
+ private readonly IBackgroundJobStore _backgroundJobStore;
+
+ public BackgroundJobStore_Tests()
+ {
+ _backgroundJobStore = GetRequiredService();
+ }
+
+ [Fact]
+ public async Task InsertAsync()
+ {
+ var jobInfo = new BackgroundJobInfo
+ {
+ Id = Guid.NewGuid(),
+ JobArgs = "args1",
+ JobName = "name1"
+ };
+
+ await _backgroundJobStore.InsertAsync(
+ jobInfo
+ );
+
+ var jobInfo2 = await _backgroundJobStore.FindAsync(jobInfo.Id);
+ jobInfo2.ShouldNotBeNull();
+ jobInfo2.Id.ShouldBe(jobInfo.Id);
+ jobInfo2.JobArgs.ShouldBe(jobInfo.JobArgs);
+ jobInfo2.JobName.ShouldBe(jobInfo.JobName);
+ }
+ }
+}
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 7fd7558b02..b0a58d8f6d 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
@@ -3,7 +3,7 @@
- netcoreapp2.2
+ netcoreapp3.0
@@ -13,10 +13,10 @@
-
-
-
-
+
+
+
+
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 e999356678..468c1f0665 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
@@ -3,7 +3,7 @@
- netcoreapp2.2
+ netcoreapp3.0
@@ -13,7 +13,7 @@
-
+
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 ce6e3b7c1b..d6dbe4bb8e 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
@@ -3,7 +3,7 @@
- netcoreapp2.2
+ netcoreapp3.0
@@ -14,7 +14,7 @@
-
+
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 347db003a2..dd74854a9c 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
@@ -23,9 +23,8 @@ namespace Volo.Abp.BackgroundJobs
public void Build()
{
_backgroundJobRepository.Insert(
- new BackgroundJobRecord
+ new BackgroundJobRecord(_testData.JobId1)
{
- Id = _testData.JobId1,
JobName = "TestJobName",
JobArgs = "{ value: 1 }",
NextTryTime = _clock.Now.Subtract(TimeSpan.FromMinutes(1)),
@@ -38,9 +37,8 @@ namespace Volo.Abp.BackgroundJobs
);
_backgroundJobRepository.Insert(
- new BackgroundJobRecord
+ new BackgroundJobRecord(_testData.JobId2)
{
- Id = _testData.JobId2,
JobName = "TestJobName",
JobArgs = "{ value: 2 }",
NextTryTime = _clock.Now.AddMinutes(42),
@@ -53,9 +51,8 @@ namespace Volo.Abp.BackgroundJobs
);
_backgroundJobRepository.Insert(
- new BackgroundJobRecord
+ new BackgroundJobRecord(_testData.JobId3)
{
- Id = _testData.JobId3,
JobName = "TestJobName",
JobArgs = "{ value: 3 }",
NextTryTime = _clock.Now,
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 e658a6a7ec..27fa209d2c 100644
--- a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.csproj
+++ b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.csproj
@@ -1,13 +1,9 @@
- netstandard2.0
+ netstandard2.1
-
-
-
-
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 1192eda1c2..0f21d360e4 100644
--- a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj
+++ b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj
@@ -1,7 +1,7 @@
- netcoreapp2.2
+ netstandard2.0
diff --git a/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs b/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs
index c42ec7eedc..7a7ecc9046 100644
--- a/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs
+++ b/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs
@@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Localization;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
using Swashbuckle.AspNetCore.Swagger;
using Volo.Abp;
@@ -144,26 +145,19 @@ namespace Volo.BloggingTestApp
app.UseVirtualFiles();
- app.UseSwagger();
- app.UseSwaggerUI(options =>
- {
- options.SwaggerEndpoint("/swagger/v1/swagger.json", "Support APP API");
- });
+ app.UseRouting();
+
+ //app.UseSwagger();
+ //app.UseSwaggerUI(options =>
+ //{
+ // options.SwaggerEndpoint("/swagger/v1/swagger.json", "Support APP API");
+ //});
app.UseAuthentication();
app.UseRequestLocalization(app.ApplicationServices.GetRequiredService>().Value);
- app.UseMvc(routes =>
- {
- routes.MapRoute(
- name: "defaultWithArea",
- template: "{area}/{controller=Home}/{action=Index}/{id?}");
-
- routes.MapRoute(
- name: "default",
- template: "{controller=Home}/{action=Index}/{id?}");
- });
+ app.UseMvcWithDefaultRouteAndArea();
using (var scope = context.ServiceProvider.CreateScope())
diff --git a/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj b/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj
index deffaccf44..a0df8b49dc 100644
--- a/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj
+++ b/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj
@@ -1,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
InProcess
@@ -13,11 +13,6 @@
-
-
-
-
-
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 c5a4990831..e466b4dc99 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
@@ -11,9 +11,6 @@
-
-
-
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 77f25274f0..122385c76f 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.0
+ netstandard2.1
Volo.Blogging.EntityFrameworkCore
Volo.Blogging.EntityFrameworkCore
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 a736b41226..550d58bcec 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
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Blogging.HttpApi.Client
Volo.Blogging.HttpApi.Client
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 b9c9f3933b..db90344d09 100644
--- a/modules/blogging/src/Volo.Blogging.HttpApi/Volo.Blogging.HttpApi.csproj
+++ b/modules/blogging/src/Volo.Blogging.HttpApi/Volo.Blogging.HttpApi.csproj
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Blogging.HttpApi
Volo.Blogging.HttpApi
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 ada7ce2370..330157fbc9 100644
--- a/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.csproj
+++ b/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.csproj
@@ -3,13 +3,13 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Blogging.Web
Volo.Blogging.Web
+ 2.8
Library
true
Volo.Blogging
- 2.8
@@ -25,9 +25,6 @@
-
-
-
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 a36f95ac50..c37538838a 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,14 +1,12 @@
- netcoreapp2.2
- true
- true
+ netcoreapp3.0
-
+
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 b2911bddee..b74ad2c5b0 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,13 +1,12 @@
- netcoreapp2.2
-
- false
+ netcoreapp3.0
+
-
+
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 8f9b464a46..a95f88ce27 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,19 +1,14 @@
- netcoreapp2.2
- true
- true
+ netcoreapp3.0
-
-
-
-
-
-
+
+
+
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 093113db66..dae08a69cc 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,17 +1,13 @@
- netcoreapp2.2
-
- false
+ netcoreapp3.0
+
-
-
-
-
-
+
+
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 fc0e279ae1..96825a0297 100644
--- a/modules/blogging/test/Volo.Blogging.TestBase/Volo.Blogging.TestBase.csproj
+++ b/modules/blogging/test/Volo.Blogging.TestBase/Volo.Blogging.TestBase.csproj
@@ -1,9 +1,7 @@
- netcoreapp2.2
- true
- true
+ netcoreapp3.0
@@ -14,7 +12,7 @@
-
+
diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/ClientSimulationDemoModule.cs b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/ClientSimulationDemoModule.cs
index 3b494ab4fb..afc29ccb3f 100644
--- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/ClientSimulationDemoModule.cs
+++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/ClientSimulationDemoModule.cs
@@ -1,5 +1,6 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Hosting;
using Volo.Abp;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic;
using Volo.Abp.Autofac;
@@ -40,8 +41,8 @@ namespace Volo.ClientSimulation.Demo
}
app.UseVirtualFiles();
-
- app.UseMvcWithDefaultRoute();
+ app.UseRouting();
+ app.UseMvcWithDefaultRouteAndArea();
}
}
}
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 65aadd08eb..e3cc5d272b 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
@@ -3,13 +3,12 @@
- netcoreapp2.2
+ netcoreapp3.0
InProcess
+ true
-
-
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 2664bf2f49..469f90c078 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
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Volo.ClientSimulation.Web
Volo.ClientSimulation.Web
Library
@@ -12,19 +12,16 @@
2.8
-
-
-
-
+
-
-
-
-
+
+
+
+
diff --git a/modules/client-simulation/src/Volo.ClientSimulation/Volo.ClientSimulation.csproj b/modules/client-simulation/src/Volo.ClientSimulation/Volo.ClientSimulation.csproj
index eb0a9f9ae2..9b3d62c856 100644
--- a/modules/client-simulation/src/Volo.ClientSimulation/Volo.ClientSimulation.csproj
+++ b/modules/client-simulation/src/Volo.ClientSimulation/Volo.ClientSimulation.csproj
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Volo.ClientSimulation
Volo.ClientSimulation
diff --git a/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.csproj b/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.csproj
index b70794e39b..d7f8b49bae 100644
--- a/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.csproj
+++ b/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.csproj
@@ -1,7 +1,7 @@
- netstandard2.0
+ netstandard2.1
diff --git a/modules/docs/app/VoloDocs.Migrator/VoloDocs.Migrator.csproj b/modules/docs/app/VoloDocs.Migrator/VoloDocs.Migrator.csproj
index 2d828d6735..4627c9b165 100644
--- a/modules/docs/app/VoloDocs.Migrator/VoloDocs.Migrator.csproj
+++ b/modules/docs/app/VoloDocs.Migrator/VoloDocs.Migrator.csproj
@@ -1,8 +1,8 @@
+ netcoreapp3.0
Exe
- netcoreapp2.2
win-x64;linux-x64;osx-x64
diff --git a/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj b/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj
index 2dfb07ec80..fa6ddeaecc 100644
--- a/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj
+++ b/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj
@@ -1,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
InProcess
true
true
@@ -11,10 +11,10 @@
+
-
@@ -39,8 +39,4 @@
-
-
-
-
diff --git a/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs b/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs
index 85738e6ff9..3402f62622 100644
--- a/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs
+++ b/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs
@@ -1,6 +1,5 @@
using System.IO;
using Microsoft.AspNetCore.Builder;
-using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.DependencyInjection;
using Swashbuckle.AspNetCore.Swagger;
@@ -30,6 +29,7 @@ using Volo.Docs.Admin;
using Volo.Docs.Localization;
using VoloDocs.EntityFrameworkCore;
using Localization.Resources.AbpUi;
+using Microsoft.Extensions.Hosting;
namespace VoloDocs.Web
{
@@ -103,8 +103,7 @@ namespace VoloDocs.Web
options.DocInclusionPredicate((docName, description) => true);
options.CustomSchemaIds(type => type.FullName);
});
-
-
+
Configure(options =>
{
options.FileSets.AddEmbedded("VoloDocs.Web");
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 46a7df4293..2805d03357 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
@@ -10,13 +10,8 @@
-
-
-
-
-
-
-
+
+
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 c76ce2895c..d083eed420 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
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Docs.Admin.HttpApi.Client
Volo.Docs.Admin.HttpApi.Client
diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo/Docs/Admin/DocsHttpApiClientModule.cs b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo/Docs/Admin/DocsHttpApiClientModule.cs
index 5a2e66e5ca..bcab405f63 100644
--- a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo/Docs/Admin/DocsHttpApiClientModule.cs
+++ b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo/Docs/Admin/DocsHttpApiClientModule.cs
@@ -6,6 +6,6 @@ namespace Volo.Docs.Admin
typeof(DocsAdminApplicationContractsModule))]
public class DocsAdminHttpApiClientModule : AbpModule
{
-
+ //TODO: Create client proxies!
}
}
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 cea70211b2..6b45d78d91 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
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Docs.Admin.HttpApi
Volo.Docs.Admin.HttpApi
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 811c668006..1402fb55ee 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
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Docs.Admin.Web
Volo.Docs.Admin.Web
Library
@@ -21,16 +21,10 @@
-
-
-
-
-
-
@@ -41,14 +35,4 @@
-
-
-
-
-
-
- Edit.cshtml
-
-
-
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 9ad8e3bff6..6bf9b9ce0e 100644
--- a/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj
+++ b/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj
@@ -11,14 +11,11 @@
-
-
-
-
+
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 1eb5495e93..1111fa62a2 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.0
+ netstandard2.1
Volo.Docs.EntityFrameworkCore
Volo.Docs.EntityFrameworkCore
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 f85ecb7928..94b6bdbcad 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
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Docs.HttpApi.Client
Volo.Docs.HttpApi.Client
diff --git a/modules/docs/src/Volo.Docs.HttpApi.Client/Volo/Docs/DocsHttpApiClientModule.cs b/modules/docs/src/Volo.Docs.HttpApi.Client/Volo/Docs/DocsHttpApiClientModule.cs
index da16113225..1c208c6195 100644
--- a/modules/docs/src/Volo.Docs.HttpApi.Client/Volo/Docs/DocsHttpApiClientModule.cs
+++ b/modules/docs/src/Volo.Docs.HttpApi.Client/Volo/Docs/DocsHttpApiClientModule.cs
@@ -6,6 +6,6 @@ namespace Volo.Docs
typeof(DocsApplicationContractsModule))]
public class DocsHttpApiClientModule : AbpModule
{
-
+ //TODO: Create client proxies
}
}
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 13d295b421..5990d9751d 100644
--- a/modules/docs/src/Volo.Docs.HttpApi/Volo.Docs.HttpApi.csproj
+++ b/modules/docs/src/Volo.Docs.HttpApi/Volo.Docs.HttpApi.csproj
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Docs.HttpApi
Volo.Docs.HttpApi
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 d35cc00db3..cced411e33 100644
--- a/modules/docs/src/Volo.Docs.Web/Volo.Docs.Web.csproj
+++ b/modules/docs/src/Volo.Docs.Web/Volo.Docs.Web.csproj
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Docs.Web
Volo.Docs.Web
Library
@@ -23,16 +23,10 @@
-
-
-
-
-
-
@@ -44,8 +38,4 @@
-
-
-
-
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/10938654.mp4 b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/10938654.mp4
deleted file mode 100644
index 50870fff02..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/10938654.mp4 and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/13807595-preview.mp4 b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/13807595-preview.mp4
deleted file mode 100644
index 5d88d6cf99..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/13807595-preview.mp4 and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/17607364-preview.mp4 b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/17607364-preview.mp4
deleted file mode 100644
index 1596b9d2b7..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/17607364-preview.mp4 and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/22521100-preview.mp4 b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/22521100-preview.mp4
deleted file mode 100644
index 644e49234e..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/22521100-preview.mp4 and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/24752027-preview.mp4 b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/24752027-preview.mp4
deleted file mode 100644
index efca27bc10..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/24752027-preview.mp4 and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/6690611-preview.mp4 b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/6690611-preview.mp4
deleted file mode 100644
index 1d3173c4f6..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/6690611-preview.mp4 and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/Forma 1.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/Forma 1.png
deleted file mode 100644
index 52f9eea1b1..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/Forma 1.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/abp-logo-dark.svg b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/abp-logo-dark.svg
deleted file mode 100644
index 445fb48bb5..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/abp-logo-dark.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/abp-logo-light.svg b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/abp-logo-light.svg
deleted file mode 100644
index 1161bbb163..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/abp-logo-light.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/dynamic.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/dynamic.png
deleted file mode 100644
index fac91bdba5..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/dynamic.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/HELP-US-OUT.txt b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/HELP-US-OUT.txt
deleted file mode 100644
index 83d083dd77..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/HELP-US-OUT.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project,
-Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome,
-comprehensive icon sets or copy and paste your own.
-
-Please. Check it out.
-
--Dave Gandy
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/css/font-awesome.min.css b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/css/font-awesome.min.css
deleted file mode 100644
index 540440ce89..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/css/font-awesome.min.css
+++ /dev/null
@@ -1,4 +0,0 @@
-/*!
- * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
- * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/animated.less b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/animated.less
deleted file mode 100644
index 66ad52a5ba..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/animated.less
+++ /dev/null
@@ -1,34 +0,0 @@
-// Animated Icons
-// --------------------------
-
-.@{fa-css-prefix}-spin {
- -webkit-animation: fa-spin 2s infinite linear;
- animation: fa-spin 2s infinite linear;
-}
-
-.@{fa-css-prefix}-pulse {
- -webkit-animation: fa-spin 1s infinite steps(8);
- animation: fa-spin 1s infinite steps(8);
-}
-
-@-webkit-keyframes fa-spin {
- 0% {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- 100% {
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-
-@keyframes fa-spin {
- 0% {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- 100% {
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/bordered-pulled.less b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/bordered-pulled.less
deleted file mode 100644
index f1c8ad75f5..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/bordered-pulled.less
+++ /dev/null
@@ -1,25 +0,0 @@
-// Bordered & Pulled
-// -------------------------
-
-.@{fa-css-prefix}-border {
- padding: .2em .25em .15em;
- border: solid .08em @fa-border-color;
- border-radius: .1em;
-}
-
-.@{fa-css-prefix}-pull-left { float: left; }
-.@{fa-css-prefix}-pull-right { float: right; }
-
-.@{fa-css-prefix} {
- &.@{fa-css-prefix}-pull-left { margin-right: .3em; }
- &.@{fa-css-prefix}-pull-right { margin-left: .3em; }
-}
-
-/* Deprecated as of 4.4.0 */
-.pull-right { float: right; }
-.pull-left { float: left; }
-
-.@{fa-css-prefix} {
- &.pull-left { margin-right: .3em; }
- &.pull-right { margin-left: .3em; }
-}
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/core.less b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/core.less
deleted file mode 100644
index c577ac84a6..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/core.less
+++ /dev/null
@@ -1,12 +0,0 @@
-// Base Class Definition
-// -------------------------
-
-.@{fa-css-prefix} {
- display: inline-block;
- font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration
- font-size: inherit; // can't have font-size inherit on line above, so need to override
- text-rendering: auto; // optimizelegibility throws things off #1094
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-
-}
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/fixed-width.less b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/fixed-width.less
deleted file mode 100644
index 110289f2f4..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/fixed-width.less
+++ /dev/null
@@ -1,6 +0,0 @@
-// Fixed Width Icons
-// -------------------------
-.@{fa-css-prefix}-fw {
- width: (18em / 14);
- text-align: center;
-}
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/font-awesome.less b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/font-awesome.less
deleted file mode 100644
index c3677def31..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/font-awesome.less
+++ /dev/null
@@ -1,18 +0,0 @@
-/*!
- * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
- * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */
-
-@import "variables.less";
-@import "mixins.less";
-@import "path.less";
-@import "core.less";
-@import "larger.less";
-@import "fixed-width.less";
-@import "list.less";
-@import "bordered-pulled.less";
-@import "animated.less";
-@import "rotated-flipped.less";
-@import "stacked.less";
-@import "icons.less";
-@import "screen-reader.less";
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/icons.less b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/icons.less
deleted file mode 100644
index 159d600425..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/icons.less
+++ /dev/null
@@ -1,789 +0,0 @@
-/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
- readers do not read off random characters that represent icons */
-
-.@{fa-css-prefix}-glass:before { content: @fa-var-glass; }
-.@{fa-css-prefix}-music:before { content: @fa-var-music; }
-.@{fa-css-prefix}-search:before { content: @fa-var-search; }
-.@{fa-css-prefix}-envelope-o:before { content: @fa-var-envelope-o; }
-.@{fa-css-prefix}-heart:before { content: @fa-var-heart; }
-.@{fa-css-prefix}-star:before { content: @fa-var-star; }
-.@{fa-css-prefix}-star-o:before { content: @fa-var-star-o; }
-.@{fa-css-prefix}-user:before { content: @fa-var-user; }
-.@{fa-css-prefix}-film:before { content: @fa-var-film; }
-.@{fa-css-prefix}-th-large:before { content: @fa-var-th-large; }
-.@{fa-css-prefix}-th:before { content: @fa-var-th; }
-.@{fa-css-prefix}-th-list:before { content: @fa-var-th-list; }
-.@{fa-css-prefix}-check:before { content: @fa-var-check; }
-.@{fa-css-prefix}-remove:before,
-.@{fa-css-prefix}-close:before,
-.@{fa-css-prefix}-times:before { content: @fa-var-times; }
-.@{fa-css-prefix}-search-plus:before { content: @fa-var-search-plus; }
-.@{fa-css-prefix}-search-minus:before { content: @fa-var-search-minus; }
-.@{fa-css-prefix}-power-off:before { content: @fa-var-power-off; }
-.@{fa-css-prefix}-signal:before { content: @fa-var-signal; }
-.@{fa-css-prefix}-gear:before,
-.@{fa-css-prefix}-cog:before { content: @fa-var-cog; }
-.@{fa-css-prefix}-trash-o:before { content: @fa-var-trash-o; }
-.@{fa-css-prefix}-home:before { content: @fa-var-home; }
-.@{fa-css-prefix}-file-o:before { content: @fa-var-file-o; }
-.@{fa-css-prefix}-clock-o:before { content: @fa-var-clock-o; }
-.@{fa-css-prefix}-road:before { content: @fa-var-road; }
-.@{fa-css-prefix}-download:before { content: @fa-var-download; }
-.@{fa-css-prefix}-arrow-circle-o-down:before { content: @fa-var-arrow-circle-o-down; }
-.@{fa-css-prefix}-arrow-circle-o-up:before { content: @fa-var-arrow-circle-o-up; }
-.@{fa-css-prefix}-inbox:before { content: @fa-var-inbox; }
-.@{fa-css-prefix}-play-circle-o:before { content: @fa-var-play-circle-o; }
-.@{fa-css-prefix}-rotate-right:before,
-.@{fa-css-prefix}-repeat:before { content: @fa-var-repeat; }
-.@{fa-css-prefix}-refresh:before { content: @fa-var-refresh; }
-.@{fa-css-prefix}-list-alt:before { content: @fa-var-list-alt; }
-.@{fa-css-prefix}-lock:before { content: @fa-var-lock; }
-.@{fa-css-prefix}-flag:before { content: @fa-var-flag; }
-.@{fa-css-prefix}-headphones:before { content: @fa-var-headphones; }
-.@{fa-css-prefix}-volume-off:before { content: @fa-var-volume-off; }
-.@{fa-css-prefix}-volume-down:before { content: @fa-var-volume-down; }
-.@{fa-css-prefix}-volume-up:before { content: @fa-var-volume-up; }
-.@{fa-css-prefix}-qrcode:before { content: @fa-var-qrcode; }
-.@{fa-css-prefix}-barcode:before { content: @fa-var-barcode; }
-.@{fa-css-prefix}-tag:before { content: @fa-var-tag; }
-.@{fa-css-prefix}-tags:before { content: @fa-var-tags; }
-.@{fa-css-prefix}-book:before { content: @fa-var-book; }
-.@{fa-css-prefix}-bookmark:before { content: @fa-var-bookmark; }
-.@{fa-css-prefix}-print:before { content: @fa-var-print; }
-.@{fa-css-prefix}-camera:before { content: @fa-var-camera; }
-.@{fa-css-prefix}-font:before { content: @fa-var-font; }
-.@{fa-css-prefix}-bold:before { content: @fa-var-bold; }
-.@{fa-css-prefix}-italic:before { content: @fa-var-italic; }
-.@{fa-css-prefix}-text-height:before { content: @fa-var-text-height; }
-.@{fa-css-prefix}-text-width:before { content: @fa-var-text-width; }
-.@{fa-css-prefix}-align-left:before { content: @fa-var-align-left; }
-.@{fa-css-prefix}-align-center:before { content: @fa-var-align-center; }
-.@{fa-css-prefix}-align-right:before { content: @fa-var-align-right; }
-.@{fa-css-prefix}-align-justify:before { content: @fa-var-align-justify; }
-.@{fa-css-prefix}-list:before { content: @fa-var-list; }
-.@{fa-css-prefix}-dedent:before,
-.@{fa-css-prefix}-outdent:before { content: @fa-var-outdent; }
-.@{fa-css-prefix}-indent:before { content: @fa-var-indent; }
-.@{fa-css-prefix}-video-camera:before { content: @fa-var-video-camera; }
-.@{fa-css-prefix}-photo:before,
-.@{fa-css-prefix}-image:before,
-.@{fa-css-prefix}-picture-o:before { content: @fa-var-picture-o; }
-.@{fa-css-prefix}-pencil:before { content: @fa-var-pencil; }
-.@{fa-css-prefix}-map-marker:before { content: @fa-var-map-marker; }
-.@{fa-css-prefix}-adjust:before { content: @fa-var-adjust; }
-.@{fa-css-prefix}-tint:before { content: @fa-var-tint; }
-.@{fa-css-prefix}-edit:before,
-.@{fa-css-prefix}-pencil-square-o:before { content: @fa-var-pencil-square-o; }
-.@{fa-css-prefix}-share-square-o:before { content: @fa-var-share-square-o; }
-.@{fa-css-prefix}-check-square-o:before { content: @fa-var-check-square-o; }
-.@{fa-css-prefix}-arrows:before { content: @fa-var-arrows; }
-.@{fa-css-prefix}-step-backward:before { content: @fa-var-step-backward; }
-.@{fa-css-prefix}-fast-backward:before { content: @fa-var-fast-backward; }
-.@{fa-css-prefix}-backward:before { content: @fa-var-backward; }
-.@{fa-css-prefix}-play:before { content: @fa-var-play; }
-.@{fa-css-prefix}-pause:before { content: @fa-var-pause; }
-.@{fa-css-prefix}-stop:before { content: @fa-var-stop; }
-.@{fa-css-prefix}-forward:before { content: @fa-var-forward; }
-.@{fa-css-prefix}-fast-forward:before { content: @fa-var-fast-forward; }
-.@{fa-css-prefix}-step-forward:before { content: @fa-var-step-forward; }
-.@{fa-css-prefix}-eject:before { content: @fa-var-eject; }
-.@{fa-css-prefix}-chevron-left:before { content: @fa-var-chevron-left; }
-.@{fa-css-prefix}-chevron-right:before { content: @fa-var-chevron-right; }
-.@{fa-css-prefix}-plus-circle:before { content: @fa-var-plus-circle; }
-.@{fa-css-prefix}-minus-circle:before { content: @fa-var-minus-circle; }
-.@{fa-css-prefix}-times-circle:before { content: @fa-var-times-circle; }
-.@{fa-css-prefix}-check-circle:before { content: @fa-var-check-circle; }
-.@{fa-css-prefix}-question-circle:before { content: @fa-var-question-circle; }
-.@{fa-css-prefix}-info-circle:before { content: @fa-var-info-circle; }
-.@{fa-css-prefix}-crosshairs:before { content: @fa-var-crosshairs; }
-.@{fa-css-prefix}-times-circle-o:before { content: @fa-var-times-circle-o; }
-.@{fa-css-prefix}-check-circle-o:before { content: @fa-var-check-circle-o; }
-.@{fa-css-prefix}-ban:before { content: @fa-var-ban; }
-.@{fa-css-prefix}-arrow-left:before { content: @fa-var-arrow-left; }
-.@{fa-css-prefix}-arrow-right:before { content: @fa-var-arrow-right; }
-.@{fa-css-prefix}-arrow-up:before { content: @fa-var-arrow-up; }
-.@{fa-css-prefix}-arrow-down:before { content: @fa-var-arrow-down; }
-.@{fa-css-prefix}-mail-forward:before,
-.@{fa-css-prefix}-share:before { content: @fa-var-share; }
-.@{fa-css-prefix}-expand:before { content: @fa-var-expand; }
-.@{fa-css-prefix}-compress:before { content: @fa-var-compress; }
-.@{fa-css-prefix}-plus:before { content: @fa-var-plus; }
-.@{fa-css-prefix}-minus:before { content: @fa-var-minus; }
-.@{fa-css-prefix}-asterisk:before { content: @fa-var-asterisk; }
-.@{fa-css-prefix}-exclamation-circle:before { content: @fa-var-exclamation-circle; }
-.@{fa-css-prefix}-gift:before { content: @fa-var-gift; }
-.@{fa-css-prefix}-leaf:before { content: @fa-var-leaf; }
-.@{fa-css-prefix}-fire:before { content: @fa-var-fire; }
-.@{fa-css-prefix}-eye:before { content: @fa-var-eye; }
-.@{fa-css-prefix}-eye-slash:before { content: @fa-var-eye-slash; }
-.@{fa-css-prefix}-warning:before,
-.@{fa-css-prefix}-exclamation-triangle:before { content: @fa-var-exclamation-triangle; }
-.@{fa-css-prefix}-plane:before { content: @fa-var-plane; }
-.@{fa-css-prefix}-calendar:before { content: @fa-var-calendar; }
-.@{fa-css-prefix}-random:before { content: @fa-var-random; }
-.@{fa-css-prefix}-comment:before { content: @fa-var-comment; }
-.@{fa-css-prefix}-magnet:before { content: @fa-var-magnet; }
-.@{fa-css-prefix}-chevron-up:before { content: @fa-var-chevron-up; }
-.@{fa-css-prefix}-chevron-down:before { content: @fa-var-chevron-down; }
-.@{fa-css-prefix}-retweet:before { content: @fa-var-retweet; }
-.@{fa-css-prefix}-shopping-cart:before { content: @fa-var-shopping-cart; }
-.@{fa-css-prefix}-folder:before { content: @fa-var-folder; }
-.@{fa-css-prefix}-folder-open:before { content: @fa-var-folder-open; }
-.@{fa-css-prefix}-arrows-v:before { content: @fa-var-arrows-v; }
-.@{fa-css-prefix}-arrows-h:before { content: @fa-var-arrows-h; }
-.@{fa-css-prefix}-bar-chart-o:before,
-.@{fa-css-prefix}-bar-chart:before { content: @fa-var-bar-chart; }
-.@{fa-css-prefix}-twitter-square:before { content: @fa-var-twitter-square; }
-.@{fa-css-prefix}-facebook-square:before { content: @fa-var-facebook-square; }
-.@{fa-css-prefix}-camera-retro:before { content: @fa-var-camera-retro; }
-.@{fa-css-prefix}-key:before { content: @fa-var-key; }
-.@{fa-css-prefix}-gears:before,
-.@{fa-css-prefix}-cogs:before { content: @fa-var-cogs; }
-.@{fa-css-prefix}-comments:before { content: @fa-var-comments; }
-.@{fa-css-prefix}-thumbs-o-up:before { content: @fa-var-thumbs-o-up; }
-.@{fa-css-prefix}-thumbs-o-down:before { content: @fa-var-thumbs-o-down; }
-.@{fa-css-prefix}-star-half:before { content: @fa-var-star-half; }
-.@{fa-css-prefix}-heart-o:before { content: @fa-var-heart-o; }
-.@{fa-css-prefix}-sign-out:before { content: @fa-var-sign-out; }
-.@{fa-css-prefix}-linkedin-square:before { content: @fa-var-linkedin-square; }
-.@{fa-css-prefix}-thumb-tack:before { content: @fa-var-thumb-tack; }
-.@{fa-css-prefix}-external-link:before { content: @fa-var-external-link; }
-.@{fa-css-prefix}-sign-in:before { content: @fa-var-sign-in; }
-.@{fa-css-prefix}-trophy:before { content: @fa-var-trophy; }
-.@{fa-css-prefix}-github-square:before { content: @fa-var-github-square; }
-.@{fa-css-prefix}-upload:before { content: @fa-var-upload; }
-.@{fa-css-prefix}-lemon-o:before { content: @fa-var-lemon-o; }
-.@{fa-css-prefix}-phone:before { content: @fa-var-phone; }
-.@{fa-css-prefix}-square-o:before { content: @fa-var-square-o; }
-.@{fa-css-prefix}-bookmark-o:before { content: @fa-var-bookmark-o; }
-.@{fa-css-prefix}-phone-square:before { content: @fa-var-phone-square; }
-.@{fa-css-prefix}-twitter:before { content: @fa-var-twitter; }
-.@{fa-css-prefix}-facebook-f:before,
-.@{fa-css-prefix}-facebook:before { content: @fa-var-facebook; }
-.@{fa-css-prefix}-github:before { content: @fa-var-github; }
-.@{fa-css-prefix}-unlock:before { content: @fa-var-unlock; }
-.@{fa-css-prefix}-credit-card:before { content: @fa-var-credit-card; }
-.@{fa-css-prefix}-feed:before,
-.@{fa-css-prefix}-rss:before { content: @fa-var-rss; }
-.@{fa-css-prefix}-hdd-o:before { content: @fa-var-hdd-o; }
-.@{fa-css-prefix}-bullhorn:before { content: @fa-var-bullhorn; }
-.@{fa-css-prefix}-bell:before { content: @fa-var-bell; }
-.@{fa-css-prefix}-certificate:before { content: @fa-var-certificate; }
-.@{fa-css-prefix}-hand-o-right:before { content: @fa-var-hand-o-right; }
-.@{fa-css-prefix}-hand-o-left:before { content: @fa-var-hand-o-left; }
-.@{fa-css-prefix}-hand-o-up:before { content: @fa-var-hand-o-up; }
-.@{fa-css-prefix}-hand-o-down:before { content: @fa-var-hand-o-down; }
-.@{fa-css-prefix}-arrow-circle-left:before { content: @fa-var-arrow-circle-left; }
-.@{fa-css-prefix}-arrow-circle-right:before { content: @fa-var-arrow-circle-right; }
-.@{fa-css-prefix}-arrow-circle-up:before { content: @fa-var-arrow-circle-up; }
-.@{fa-css-prefix}-arrow-circle-down:before { content: @fa-var-arrow-circle-down; }
-.@{fa-css-prefix}-globe:before { content: @fa-var-globe; }
-.@{fa-css-prefix}-wrench:before { content: @fa-var-wrench; }
-.@{fa-css-prefix}-tasks:before { content: @fa-var-tasks; }
-.@{fa-css-prefix}-filter:before { content: @fa-var-filter; }
-.@{fa-css-prefix}-briefcase:before { content: @fa-var-briefcase; }
-.@{fa-css-prefix}-arrows-alt:before { content: @fa-var-arrows-alt; }
-.@{fa-css-prefix}-group:before,
-.@{fa-css-prefix}-users:before { content: @fa-var-users; }
-.@{fa-css-prefix}-chain:before,
-.@{fa-css-prefix}-link:before { content: @fa-var-link; }
-.@{fa-css-prefix}-cloud:before { content: @fa-var-cloud; }
-.@{fa-css-prefix}-flask:before { content: @fa-var-flask; }
-.@{fa-css-prefix}-cut:before,
-.@{fa-css-prefix}-scissors:before { content: @fa-var-scissors; }
-.@{fa-css-prefix}-copy:before,
-.@{fa-css-prefix}-files-o:before { content: @fa-var-files-o; }
-.@{fa-css-prefix}-paperclip:before { content: @fa-var-paperclip; }
-.@{fa-css-prefix}-save:before,
-.@{fa-css-prefix}-floppy-o:before { content: @fa-var-floppy-o; }
-.@{fa-css-prefix}-square:before { content: @fa-var-square; }
-.@{fa-css-prefix}-navicon:before,
-.@{fa-css-prefix}-reorder:before,
-.@{fa-css-prefix}-bars:before { content: @fa-var-bars; }
-.@{fa-css-prefix}-list-ul:before { content: @fa-var-list-ul; }
-.@{fa-css-prefix}-list-ol:before { content: @fa-var-list-ol; }
-.@{fa-css-prefix}-strikethrough:before { content: @fa-var-strikethrough; }
-.@{fa-css-prefix}-underline:before { content: @fa-var-underline; }
-.@{fa-css-prefix}-table:before { content: @fa-var-table; }
-.@{fa-css-prefix}-magic:before { content: @fa-var-magic; }
-.@{fa-css-prefix}-truck:before { content: @fa-var-truck; }
-.@{fa-css-prefix}-pinterest:before { content: @fa-var-pinterest; }
-.@{fa-css-prefix}-pinterest-square:before { content: @fa-var-pinterest-square; }
-.@{fa-css-prefix}-google-plus-square:before { content: @fa-var-google-plus-square; }
-.@{fa-css-prefix}-google-plus:before { content: @fa-var-google-plus; }
-.@{fa-css-prefix}-money:before { content: @fa-var-money; }
-.@{fa-css-prefix}-caret-down:before { content: @fa-var-caret-down; }
-.@{fa-css-prefix}-caret-up:before { content: @fa-var-caret-up; }
-.@{fa-css-prefix}-caret-left:before { content: @fa-var-caret-left; }
-.@{fa-css-prefix}-caret-right:before { content: @fa-var-caret-right; }
-.@{fa-css-prefix}-columns:before { content: @fa-var-columns; }
-.@{fa-css-prefix}-unsorted:before,
-.@{fa-css-prefix}-sort:before { content: @fa-var-sort; }
-.@{fa-css-prefix}-sort-down:before,
-.@{fa-css-prefix}-sort-desc:before { content: @fa-var-sort-desc; }
-.@{fa-css-prefix}-sort-up:before,
-.@{fa-css-prefix}-sort-asc:before { content: @fa-var-sort-asc; }
-.@{fa-css-prefix}-envelope:before { content: @fa-var-envelope; }
-.@{fa-css-prefix}-linkedin:before { content: @fa-var-linkedin; }
-.@{fa-css-prefix}-rotate-left:before,
-.@{fa-css-prefix}-undo:before { content: @fa-var-undo; }
-.@{fa-css-prefix}-legal:before,
-.@{fa-css-prefix}-gavel:before { content: @fa-var-gavel; }
-.@{fa-css-prefix}-dashboard:before,
-.@{fa-css-prefix}-tachometer:before { content: @fa-var-tachometer; }
-.@{fa-css-prefix}-comment-o:before { content: @fa-var-comment-o; }
-.@{fa-css-prefix}-comments-o:before { content: @fa-var-comments-o; }
-.@{fa-css-prefix}-flash:before,
-.@{fa-css-prefix}-bolt:before { content: @fa-var-bolt; }
-.@{fa-css-prefix}-sitemap:before { content: @fa-var-sitemap; }
-.@{fa-css-prefix}-umbrella:before { content: @fa-var-umbrella; }
-.@{fa-css-prefix}-paste:before,
-.@{fa-css-prefix}-clipboard:before { content: @fa-var-clipboard; }
-.@{fa-css-prefix}-lightbulb-o:before { content: @fa-var-lightbulb-o; }
-.@{fa-css-prefix}-exchange:before { content: @fa-var-exchange; }
-.@{fa-css-prefix}-cloud-download:before { content: @fa-var-cloud-download; }
-.@{fa-css-prefix}-cloud-upload:before { content: @fa-var-cloud-upload; }
-.@{fa-css-prefix}-user-md:before { content: @fa-var-user-md; }
-.@{fa-css-prefix}-stethoscope:before { content: @fa-var-stethoscope; }
-.@{fa-css-prefix}-suitcase:before { content: @fa-var-suitcase; }
-.@{fa-css-prefix}-bell-o:before { content: @fa-var-bell-o; }
-.@{fa-css-prefix}-coffee:before { content: @fa-var-coffee; }
-.@{fa-css-prefix}-cutlery:before { content: @fa-var-cutlery; }
-.@{fa-css-prefix}-file-text-o:before { content: @fa-var-file-text-o; }
-.@{fa-css-prefix}-building-o:before { content: @fa-var-building-o; }
-.@{fa-css-prefix}-hospital-o:before { content: @fa-var-hospital-o; }
-.@{fa-css-prefix}-ambulance:before { content: @fa-var-ambulance; }
-.@{fa-css-prefix}-medkit:before { content: @fa-var-medkit; }
-.@{fa-css-prefix}-fighter-jet:before { content: @fa-var-fighter-jet; }
-.@{fa-css-prefix}-beer:before { content: @fa-var-beer; }
-.@{fa-css-prefix}-h-square:before { content: @fa-var-h-square; }
-.@{fa-css-prefix}-plus-square:before { content: @fa-var-plus-square; }
-.@{fa-css-prefix}-angle-double-left:before { content: @fa-var-angle-double-left; }
-.@{fa-css-prefix}-angle-double-right:before { content: @fa-var-angle-double-right; }
-.@{fa-css-prefix}-angle-double-up:before { content: @fa-var-angle-double-up; }
-.@{fa-css-prefix}-angle-double-down:before { content: @fa-var-angle-double-down; }
-.@{fa-css-prefix}-angle-left:before { content: @fa-var-angle-left; }
-.@{fa-css-prefix}-angle-right:before { content: @fa-var-angle-right; }
-.@{fa-css-prefix}-angle-up:before { content: @fa-var-angle-up; }
-.@{fa-css-prefix}-angle-down:before { content: @fa-var-angle-down; }
-.@{fa-css-prefix}-desktop:before { content: @fa-var-desktop; }
-.@{fa-css-prefix}-laptop:before { content: @fa-var-laptop; }
-.@{fa-css-prefix}-tablet:before { content: @fa-var-tablet; }
-.@{fa-css-prefix}-mobile-phone:before,
-.@{fa-css-prefix}-mobile:before { content: @fa-var-mobile; }
-.@{fa-css-prefix}-circle-o:before { content: @fa-var-circle-o; }
-.@{fa-css-prefix}-quote-left:before { content: @fa-var-quote-left; }
-.@{fa-css-prefix}-quote-right:before { content: @fa-var-quote-right; }
-.@{fa-css-prefix}-spinner:before { content: @fa-var-spinner; }
-.@{fa-css-prefix}-circle:before { content: @fa-var-circle; }
-.@{fa-css-prefix}-mail-reply:before,
-.@{fa-css-prefix}-reply:before { content: @fa-var-reply; }
-.@{fa-css-prefix}-github-alt:before { content: @fa-var-github-alt; }
-.@{fa-css-prefix}-folder-o:before { content: @fa-var-folder-o; }
-.@{fa-css-prefix}-folder-open-o:before { content: @fa-var-folder-open-o; }
-.@{fa-css-prefix}-smile-o:before { content: @fa-var-smile-o; }
-.@{fa-css-prefix}-frown-o:before { content: @fa-var-frown-o; }
-.@{fa-css-prefix}-meh-o:before { content: @fa-var-meh-o; }
-.@{fa-css-prefix}-gamepad:before { content: @fa-var-gamepad; }
-.@{fa-css-prefix}-keyboard-o:before { content: @fa-var-keyboard-o; }
-.@{fa-css-prefix}-flag-o:before { content: @fa-var-flag-o; }
-.@{fa-css-prefix}-flag-checkered:before { content: @fa-var-flag-checkered; }
-.@{fa-css-prefix}-terminal:before { content: @fa-var-terminal; }
-.@{fa-css-prefix}-code:before { content: @fa-var-code; }
-.@{fa-css-prefix}-mail-reply-all:before,
-.@{fa-css-prefix}-reply-all:before { content: @fa-var-reply-all; }
-.@{fa-css-prefix}-star-half-empty:before,
-.@{fa-css-prefix}-star-half-full:before,
-.@{fa-css-prefix}-star-half-o:before { content: @fa-var-star-half-o; }
-.@{fa-css-prefix}-location-arrow:before { content: @fa-var-location-arrow; }
-.@{fa-css-prefix}-crop:before { content: @fa-var-crop; }
-.@{fa-css-prefix}-code-fork:before { content: @fa-var-code-fork; }
-.@{fa-css-prefix}-unlink:before,
-.@{fa-css-prefix}-chain-broken:before { content: @fa-var-chain-broken; }
-.@{fa-css-prefix}-question:before { content: @fa-var-question; }
-.@{fa-css-prefix}-info:before { content: @fa-var-info; }
-.@{fa-css-prefix}-exclamation:before { content: @fa-var-exclamation; }
-.@{fa-css-prefix}-superscript:before { content: @fa-var-superscript; }
-.@{fa-css-prefix}-subscript:before { content: @fa-var-subscript; }
-.@{fa-css-prefix}-eraser:before { content: @fa-var-eraser; }
-.@{fa-css-prefix}-puzzle-piece:before { content: @fa-var-puzzle-piece; }
-.@{fa-css-prefix}-microphone:before { content: @fa-var-microphone; }
-.@{fa-css-prefix}-microphone-slash:before { content: @fa-var-microphone-slash; }
-.@{fa-css-prefix}-shield:before { content: @fa-var-shield; }
-.@{fa-css-prefix}-calendar-o:before { content: @fa-var-calendar-o; }
-.@{fa-css-prefix}-fire-extinguisher:before { content: @fa-var-fire-extinguisher; }
-.@{fa-css-prefix}-rocket:before { content: @fa-var-rocket; }
-.@{fa-css-prefix}-maxcdn:before { content: @fa-var-maxcdn; }
-.@{fa-css-prefix}-chevron-circle-left:before { content: @fa-var-chevron-circle-left; }
-.@{fa-css-prefix}-chevron-circle-right:before { content: @fa-var-chevron-circle-right; }
-.@{fa-css-prefix}-chevron-circle-up:before { content: @fa-var-chevron-circle-up; }
-.@{fa-css-prefix}-chevron-circle-down:before { content: @fa-var-chevron-circle-down; }
-.@{fa-css-prefix}-html5:before { content: @fa-var-html5; }
-.@{fa-css-prefix}-css3:before { content: @fa-var-css3; }
-.@{fa-css-prefix}-anchor:before { content: @fa-var-anchor; }
-.@{fa-css-prefix}-unlock-alt:before { content: @fa-var-unlock-alt; }
-.@{fa-css-prefix}-bullseye:before { content: @fa-var-bullseye; }
-.@{fa-css-prefix}-ellipsis-h:before { content: @fa-var-ellipsis-h; }
-.@{fa-css-prefix}-ellipsis-v:before { content: @fa-var-ellipsis-v; }
-.@{fa-css-prefix}-rss-square:before { content: @fa-var-rss-square; }
-.@{fa-css-prefix}-play-circle:before { content: @fa-var-play-circle; }
-.@{fa-css-prefix}-ticket:before { content: @fa-var-ticket; }
-.@{fa-css-prefix}-minus-square:before { content: @fa-var-minus-square; }
-.@{fa-css-prefix}-minus-square-o:before { content: @fa-var-minus-square-o; }
-.@{fa-css-prefix}-level-up:before { content: @fa-var-level-up; }
-.@{fa-css-prefix}-level-down:before { content: @fa-var-level-down; }
-.@{fa-css-prefix}-check-square:before { content: @fa-var-check-square; }
-.@{fa-css-prefix}-pencil-square:before { content: @fa-var-pencil-square; }
-.@{fa-css-prefix}-external-link-square:before { content: @fa-var-external-link-square; }
-.@{fa-css-prefix}-share-square:before { content: @fa-var-share-square; }
-.@{fa-css-prefix}-compass:before { content: @fa-var-compass; }
-.@{fa-css-prefix}-toggle-down:before,
-.@{fa-css-prefix}-caret-square-o-down:before { content: @fa-var-caret-square-o-down; }
-.@{fa-css-prefix}-toggle-up:before,
-.@{fa-css-prefix}-caret-square-o-up:before { content: @fa-var-caret-square-o-up; }
-.@{fa-css-prefix}-toggle-right:before,
-.@{fa-css-prefix}-caret-square-o-right:before { content: @fa-var-caret-square-o-right; }
-.@{fa-css-prefix}-euro:before,
-.@{fa-css-prefix}-eur:before { content: @fa-var-eur; }
-.@{fa-css-prefix}-gbp:before { content: @fa-var-gbp; }
-.@{fa-css-prefix}-dollar:before,
-.@{fa-css-prefix}-usd:before { content: @fa-var-usd; }
-.@{fa-css-prefix}-rupee:before,
-.@{fa-css-prefix}-inr:before { content: @fa-var-inr; }
-.@{fa-css-prefix}-cny:before,
-.@{fa-css-prefix}-rmb:before,
-.@{fa-css-prefix}-yen:before,
-.@{fa-css-prefix}-jpy:before { content: @fa-var-jpy; }
-.@{fa-css-prefix}-ruble:before,
-.@{fa-css-prefix}-rouble:before,
-.@{fa-css-prefix}-rub:before { content: @fa-var-rub; }
-.@{fa-css-prefix}-won:before,
-.@{fa-css-prefix}-krw:before { content: @fa-var-krw; }
-.@{fa-css-prefix}-bitcoin:before,
-.@{fa-css-prefix}-btc:before { content: @fa-var-btc; }
-.@{fa-css-prefix}-file:before { content: @fa-var-file; }
-.@{fa-css-prefix}-file-text:before { content: @fa-var-file-text; }
-.@{fa-css-prefix}-sort-alpha-asc:before { content: @fa-var-sort-alpha-asc; }
-.@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-sort-alpha-desc; }
-.@{fa-css-prefix}-sort-amount-asc:before { content: @fa-var-sort-amount-asc; }
-.@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-sort-amount-desc; }
-.@{fa-css-prefix}-sort-numeric-asc:before { content: @fa-var-sort-numeric-asc; }
-.@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-sort-numeric-desc; }
-.@{fa-css-prefix}-thumbs-up:before { content: @fa-var-thumbs-up; }
-.@{fa-css-prefix}-thumbs-down:before { content: @fa-var-thumbs-down; }
-.@{fa-css-prefix}-youtube-square:before { content: @fa-var-youtube-square; }
-.@{fa-css-prefix}-youtube:before { content: @fa-var-youtube; }
-.@{fa-css-prefix}-xing:before { content: @fa-var-xing; }
-.@{fa-css-prefix}-xing-square:before { content: @fa-var-xing-square; }
-.@{fa-css-prefix}-youtube-play:before { content: @fa-var-youtube-play; }
-.@{fa-css-prefix}-dropbox:before { content: @fa-var-dropbox; }
-.@{fa-css-prefix}-stack-overflow:before { content: @fa-var-stack-overflow; }
-.@{fa-css-prefix}-instagram:before { content: @fa-var-instagram; }
-.@{fa-css-prefix}-flickr:before { content: @fa-var-flickr; }
-.@{fa-css-prefix}-adn:before { content: @fa-var-adn; }
-.@{fa-css-prefix}-bitbucket:before { content: @fa-var-bitbucket; }
-.@{fa-css-prefix}-bitbucket-square:before { content: @fa-var-bitbucket-square; }
-.@{fa-css-prefix}-tumblr:before { content: @fa-var-tumblr; }
-.@{fa-css-prefix}-tumblr-square:before { content: @fa-var-tumblr-square; }
-.@{fa-css-prefix}-long-arrow-down:before { content: @fa-var-long-arrow-down; }
-.@{fa-css-prefix}-long-arrow-up:before { content: @fa-var-long-arrow-up; }
-.@{fa-css-prefix}-long-arrow-left:before { content: @fa-var-long-arrow-left; }
-.@{fa-css-prefix}-long-arrow-right:before { content: @fa-var-long-arrow-right; }
-.@{fa-css-prefix}-apple:before { content: @fa-var-apple; }
-.@{fa-css-prefix}-windows:before { content: @fa-var-windows; }
-.@{fa-css-prefix}-android:before { content: @fa-var-android; }
-.@{fa-css-prefix}-linux:before { content: @fa-var-linux; }
-.@{fa-css-prefix}-dribbble:before { content: @fa-var-dribbble; }
-.@{fa-css-prefix}-skype:before { content: @fa-var-skype; }
-.@{fa-css-prefix}-foursquare:before { content: @fa-var-foursquare; }
-.@{fa-css-prefix}-trello:before { content: @fa-var-trello; }
-.@{fa-css-prefix}-female:before { content: @fa-var-female; }
-.@{fa-css-prefix}-male:before { content: @fa-var-male; }
-.@{fa-css-prefix}-gittip:before,
-.@{fa-css-prefix}-gratipay:before { content: @fa-var-gratipay; }
-.@{fa-css-prefix}-sun-o:before { content: @fa-var-sun-o; }
-.@{fa-css-prefix}-moon-o:before { content: @fa-var-moon-o; }
-.@{fa-css-prefix}-archive:before { content: @fa-var-archive; }
-.@{fa-css-prefix}-bug:before { content: @fa-var-bug; }
-.@{fa-css-prefix}-vk:before { content: @fa-var-vk; }
-.@{fa-css-prefix}-weibo:before { content: @fa-var-weibo; }
-.@{fa-css-prefix}-renren:before { content: @fa-var-renren; }
-.@{fa-css-prefix}-pagelines:before { content: @fa-var-pagelines; }
-.@{fa-css-prefix}-stack-exchange:before { content: @fa-var-stack-exchange; }
-.@{fa-css-prefix}-arrow-circle-o-right:before { content: @fa-var-arrow-circle-o-right; }
-.@{fa-css-prefix}-arrow-circle-o-left:before { content: @fa-var-arrow-circle-o-left; }
-.@{fa-css-prefix}-toggle-left:before,
-.@{fa-css-prefix}-caret-square-o-left:before { content: @fa-var-caret-square-o-left; }
-.@{fa-css-prefix}-dot-circle-o:before { content: @fa-var-dot-circle-o; }
-.@{fa-css-prefix}-wheelchair:before { content: @fa-var-wheelchair; }
-.@{fa-css-prefix}-vimeo-square:before { content: @fa-var-vimeo-square; }
-.@{fa-css-prefix}-turkish-lira:before,
-.@{fa-css-prefix}-try:before { content: @fa-var-try; }
-.@{fa-css-prefix}-plus-square-o:before { content: @fa-var-plus-square-o; }
-.@{fa-css-prefix}-space-shuttle:before { content: @fa-var-space-shuttle; }
-.@{fa-css-prefix}-slack:before { content: @fa-var-slack; }
-.@{fa-css-prefix}-envelope-square:before { content: @fa-var-envelope-square; }
-.@{fa-css-prefix}-wordpress:before { content: @fa-var-wordpress; }
-.@{fa-css-prefix}-openid:before { content: @fa-var-openid; }
-.@{fa-css-prefix}-institution:before,
-.@{fa-css-prefix}-bank:before,
-.@{fa-css-prefix}-university:before { content: @fa-var-university; }
-.@{fa-css-prefix}-mortar-board:before,
-.@{fa-css-prefix}-graduation-cap:before { content: @fa-var-graduation-cap; }
-.@{fa-css-prefix}-yahoo:before { content: @fa-var-yahoo; }
-.@{fa-css-prefix}-google:before { content: @fa-var-google; }
-.@{fa-css-prefix}-reddit:before { content: @fa-var-reddit; }
-.@{fa-css-prefix}-reddit-square:before { content: @fa-var-reddit-square; }
-.@{fa-css-prefix}-stumbleupon-circle:before { content: @fa-var-stumbleupon-circle; }
-.@{fa-css-prefix}-stumbleupon:before { content: @fa-var-stumbleupon; }
-.@{fa-css-prefix}-delicious:before { content: @fa-var-delicious; }
-.@{fa-css-prefix}-digg:before { content: @fa-var-digg; }
-.@{fa-css-prefix}-pied-piper-pp:before { content: @fa-var-pied-piper-pp; }
-.@{fa-css-prefix}-pied-piper-alt:before { content: @fa-var-pied-piper-alt; }
-.@{fa-css-prefix}-drupal:before { content: @fa-var-drupal; }
-.@{fa-css-prefix}-joomla:before { content: @fa-var-joomla; }
-.@{fa-css-prefix}-language:before { content: @fa-var-language; }
-.@{fa-css-prefix}-fax:before { content: @fa-var-fax; }
-.@{fa-css-prefix}-building:before { content: @fa-var-building; }
-.@{fa-css-prefix}-child:before { content: @fa-var-child; }
-.@{fa-css-prefix}-paw:before { content: @fa-var-paw; }
-.@{fa-css-prefix}-spoon:before { content: @fa-var-spoon; }
-.@{fa-css-prefix}-cube:before { content: @fa-var-cube; }
-.@{fa-css-prefix}-cubes:before { content: @fa-var-cubes; }
-.@{fa-css-prefix}-behance:before { content: @fa-var-behance; }
-.@{fa-css-prefix}-behance-square:before { content: @fa-var-behance-square; }
-.@{fa-css-prefix}-steam:before { content: @fa-var-steam; }
-.@{fa-css-prefix}-steam-square:before { content: @fa-var-steam-square; }
-.@{fa-css-prefix}-recycle:before { content: @fa-var-recycle; }
-.@{fa-css-prefix}-automobile:before,
-.@{fa-css-prefix}-car:before { content: @fa-var-car; }
-.@{fa-css-prefix}-cab:before,
-.@{fa-css-prefix}-taxi:before { content: @fa-var-taxi; }
-.@{fa-css-prefix}-tree:before { content: @fa-var-tree; }
-.@{fa-css-prefix}-spotify:before { content: @fa-var-spotify; }
-.@{fa-css-prefix}-deviantart:before { content: @fa-var-deviantart; }
-.@{fa-css-prefix}-soundcloud:before { content: @fa-var-soundcloud; }
-.@{fa-css-prefix}-database:before { content: @fa-var-database; }
-.@{fa-css-prefix}-file-pdf-o:before { content: @fa-var-file-pdf-o; }
-.@{fa-css-prefix}-file-word-o:before { content: @fa-var-file-word-o; }
-.@{fa-css-prefix}-file-excel-o:before { content: @fa-var-file-excel-o; }
-.@{fa-css-prefix}-file-powerpoint-o:before { content: @fa-var-file-powerpoint-o; }
-.@{fa-css-prefix}-file-photo-o:before,
-.@{fa-css-prefix}-file-picture-o:before,
-.@{fa-css-prefix}-file-image-o:before { content: @fa-var-file-image-o; }
-.@{fa-css-prefix}-file-zip-o:before,
-.@{fa-css-prefix}-file-archive-o:before { content: @fa-var-file-archive-o; }
-.@{fa-css-prefix}-file-sound-o:before,
-.@{fa-css-prefix}-file-audio-o:before { content: @fa-var-file-audio-o; }
-.@{fa-css-prefix}-file-movie-o:before,
-.@{fa-css-prefix}-file-video-o:before { content: @fa-var-file-video-o; }
-.@{fa-css-prefix}-file-code-o:before { content: @fa-var-file-code-o; }
-.@{fa-css-prefix}-vine:before { content: @fa-var-vine; }
-.@{fa-css-prefix}-codepen:before { content: @fa-var-codepen; }
-.@{fa-css-prefix}-jsfiddle:before { content: @fa-var-jsfiddle; }
-.@{fa-css-prefix}-life-bouy:before,
-.@{fa-css-prefix}-life-buoy:before,
-.@{fa-css-prefix}-life-saver:before,
-.@{fa-css-prefix}-support:before,
-.@{fa-css-prefix}-life-ring:before { content: @fa-var-life-ring; }
-.@{fa-css-prefix}-circle-o-notch:before { content: @fa-var-circle-o-notch; }
-.@{fa-css-prefix}-ra:before,
-.@{fa-css-prefix}-resistance:before,
-.@{fa-css-prefix}-rebel:before { content: @fa-var-rebel; }
-.@{fa-css-prefix}-ge:before,
-.@{fa-css-prefix}-empire:before { content: @fa-var-empire; }
-.@{fa-css-prefix}-git-square:before { content: @fa-var-git-square; }
-.@{fa-css-prefix}-git:before { content: @fa-var-git; }
-.@{fa-css-prefix}-y-combinator-square:before,
-.@{fa-css-prefix}-yc-square:before,
-.@{fa-css-prefix}-hacker-news:before { content: @fa-var-hacker-news; }
-.@{fa-css-prefix}-tencent-weibo:before { content: @fa-var-tencent-weibo; }
-.@{fa-css-prefix}-qq:before { content: @fa-var-qq; }
-.@{fa-css-prefix}-wechat:before,
-.@{fa-css-prefix}-weixin:before { content: @fa-var-weixin; }
-.@{fa-css-prefix}-send:before,
-.@{fa-css-prefix}-paper-plane:before { content: @fa-var-paper-plane; }
-.@{fa-css-prefix}-send-o:before,
-.@{fa-css-prefix}-paper-plane-o:before { content: @fa-var-paper-plane-o; }
-.@{fa-css-prefix}-history:before { content: @fa-var-history; }
-.@{fa-css-prefix}-circle-thin:before { content: @fa-var-circle-thin; }
-.@{fa-css-prefix}-header:before { content: @fa-var-header; }
-.@{fa-css-prefix}-paragraph:before { content: @fa-var-paragraph; }
-.@{fa-css-prefix}-sliders:before { content: @fa-var-sliders; }
-.@{fa-css-prefix}-share-alt:before { content: @fa-var-share-alt; }
-.@{fa-css-prefix}-share-alt-square:before { content: @fa-var-share-alt-square; }
-.@{fa-css-prefix}-bomb:before { content: @fa-var-bomb; }
-.@{fa-css-prefix}-soccer-ball-o:before,
-.@{fa-css-prefix}-futbol-o:before { content: @fa-var-futbol-o; }
-.@{fa-css-prefix}-tty:before { content: @fa-var-tty; }
-.@{fa-css-prefix}-binoculars:before { content: @fa-var-binoculars; }
-.@{fa-css-prefix}-plug:before { content: @fa-var-plug; }
-.@{fa-css-prefix}-slideshare:before { content: @fa-var-slideshare; }
-.@{fa-css-prefix}-twitch:before { content: @fa-var-twitch; }
-.@{fa-css-prefix}-yelp:before { content: @fa-var-yelp; }
-.@{fa-css-prefix}-newspaper-o:before { content: @fa-var-newspaper-o; }
-.@{fa-css-prefix}-wifi:before { content: @fa-var-wifi; }
-.@{fa-css-prefix}-calculator:before { content: @fa-var-calculator; }
-.@{fa-css-prefix}-paypal:before { content: @fa-var-paypal; }
-.@{fa-css-prefix}-google-wallet:before { content: @fa-var-google-wallet; }
-.@{fa-css-prefix}-cc-visa:before { content: @fa-var-cc-visa; }
-.@{fa-css-prefix}-cc-mastercard:before { content: @fa-var-cc-mastercard; }
-.@{fa-css-prefix}-cc-discover:before { content: @fa-var-cc-discover; }
-.@{fa-css-prefix}-cc-amex:before { content: @fa-var-cc-amex; }
-.@{fa-css-prefix}-cc-paypal:before { content: @fa-var-cc-paypal; }
-.@{fa-css-prefix}-cc-stripe:before { content: @fa-var-cc-stripe; }
-.@{fa-css-prefix}-bell-slash:before { content: @fa-var-bell-slash; }
-.@{fa-css-prefix}-bell-slash-o:before { content: @fa-var-bell-slash-o; }
-.@{fa-css-prefix}-trash:before { content: @fa-var-trash; }
-.@{fa-css-prefix}-copyright:before { content: @fa-var-copyright; }
-.@{fa-css-prefix}-at:before { content: @fa-var-at; }
-.@{fa-css-prefix}-eyedropper:before { content: @fa-var-eyedropper; }
-.@{fa-css-prefix}-paint-brush:before { content: @fa-var-paint-brush; }
-.@{fa-css-prefix}-birthday-cake:before { content: @fa-var-birthday-cake; }
-.@{fa-css-prefix}-area-chart:before { content: @fa-var-area-chart; }
-.@{fa-css-prefix}-pie-chart:before { content: @fa-var-pie-chart; }
-.@{fa-css-prefix}-line-chart:before { content: @fa-var-line-chart; }
-.@{fa-css-prefix}-lastfm:before { content: @fa-var-lastfm; }
-.@{fa-css-prefix}-lastfm-square:before { content: @fa-var-lastfm-square; }
-.@{fa-css-prefix}-toggle-off:before { content: @fa-var-toggle-off; }
-.@{fa-css-prefix}-toggle-on:before { content: @fa-var-toggle-on; }
-.@{fa-css-prefix}-bicycle:before { content: @fa-var-bicycle; }
-.@{fa-css-prefix}-bus:before { content: @fa-var-bus; }
-.@{fa-css-prefix}-ioxhost:before { content: @fa-var-ioxhost; }
-.@{fa-css-prefix}-angellist:before { content: @fa-var-angellist; }
-.@{fa-css-prefix}-cc:before { content: @fa-var-cc; }
-.@{fa-css-prefix}-shekel:before,
-.@{fa-css-prefix}-sheqel:before,
-.@{fa-css-prefix}-ils:before { content: @fa-var-ils; }
-.@{fa-css-prefix}-meanpath:before { content: @fa-var-meanpath; }
-.@{fa-css-prefix}-buysellads:before { content: @fa-var-buysellads; }
-.@{fa-css-prefix}-connectdevelop:before { content: @fa-var-connectdevelop; }
-.@{fa-css-prefix}-dashcube:before { content: @fa-var-dashcube; }
-.@{fa-css-prefix}-forumbee:before { content: @fa-var-forumbee; }
-.@{fa-css-prefix}-leanpub:before { content: @fa-var-leanpub; }
-.@{fa-css-prefix}-sellsy:before { content: @fa-var-sellsy; }
-.@{fa-css-prefix}-shirtsinbulk:before { content: @fa-var-shirtsinbulk; }
-.@{fa-css-prefix}-simplybuilt:before { content: @fa-var-simplybuilt; }
-.@{fa-css-prefix}-skyatlas:before { content: @fa-var-skyatlas; }
-.@{fa-css-prefix}-cart-plus:before { content: @fa-var-cart-plus; }
-.@{fa-css-prefix}-cart-arrow-down:before { content: @fa-var-cart-arrow-down; }
-.@{fa-css-prefix}-diamond:before { content: @fa-var-diamond; }
-.@{fa-css-prefix}-ship:before { content: @fa-var-ship; }
-.@{fa-css-prefix}-user-secret:before { content: @fa-var-user-secret; }
-.@{fa-css-prefix}-motorcycle:before { content: @fa-var-motorcycle; }
-.@{fa-css-prefix}-street-view:before { content: @fa-var-street-view; }
-.@{fa-css-prefix}-heartbeat:before { content: @fa-var-heartbeat; }
-.@{fa-css-prefix}-venus:before { content: @fa-var-venus; }
-.@{fa-css-prefix}-mars:before { content: @fa-var-mars; }
-.@{fa-css-prefix}-mercury:before { content: @fa-var-mercury; }
-.@{fa-css-prefix}-intersex:before,
-.@{fa-css-prefix}-transgender:before { content: @fa-var-transgender; }
-.@{fa-css-prefix}-transgender-alt:before { content: @fa-var-transgender-alt; }
-.@{fa-css-prefix}-venus-double:before { content: @fa-var-venus-double; }
-.@{fa-css-prefix}-mars-double:before { content: @fa-var-mars-double; }
-.@{fa-css-prefix}-venus-mars:before { content: @fa-var-venus-mars; }
-.@{fa-css-prefix}-mars-stroke:before { content: @fa-var-mars-stroke; }
-.@{fa-css-prefix}-mars-stroke-v:before { content: @fa-var-mars-stroke-v; }
-.@{fa-css-prefix}-mars-stroke-h:before { content: @fa-var-mars-stroke-h; }
-.@{fa-css-prefix}-neuter:before { content: @fa-var-neuter; }
-.@{fa-css-prefix}-genderless:before { content: @fa-var-genderless; }
-.@{fa-css-prefix}-facebook-official:before { content: @fa-var-facebook-official; }
-.@{fa-css-prefix}-pinterest-p:before { content: @fa-var-pinterest-p; }
-.@{fa-css-prefix}-whatsapp:before { content: @fa-var-whatsapp; }
-.@{fa-css-prefix}-server:before { content: @fa-var-server; }
-.@{fa-css-prefix}-user-plus:before { content: @fa-var-user-plus; }
-.@{fa-css-prefix}-user-times:before { content: @fa-var-user-times; }
-.@{fa-css-prefix}-hotel:before,
-.@{fa-css-prefix}-bed:before { content: @fa-var-bed; }
-.@{fa-css-prefix}-viacoin:before { content: @fa-var-viacoin; }
-.@{fa-css-prefix}-train:before { content: @fa-var-train; }
-.@{fa-css-prefix}-subway:before { content: @fa-var-subway; }
-.@{fa-css-prefix}-medium:before { content: @fa-var-medium; }
-.@{fa-css-prefix}-yc:before,
-.@{fa-css-prefix}-y-combinator:before { content: @fa-var-y-combinator; }
-.@{fa-css-prefix}-optin-monster:before { content: @fa-var-optin-monster; }
-.@{fa-css-prefix}-opencart:before { content: @fa-var-opencart; }
-.@{fa-css-prefix}-expeditedssl:before { content: @fa-var-expeditedssl; }
-.@{fa-css-prefix}-battery-4:before,
-.@{fa-css-prefix}-battery:before,
-.@{fa-css-prefix}-battery-full:before { content: @fa-var-battery-full; }
-.@{fa-css-prefix}-battery-3:before,
-.@{fa-css-prefix}-battery-three-quarters:before { content: @fa-var-battery-three-quarters; }
-.@{fa-css-prefix}-battery-2:before,
-.@{fa-css-prefix}-battery-half:before { content: @fa-var-battery-half; }
-.@{fa-css-prefix}-battery-1:before,
-.@{fa-css-prefix}-battery-quarter:before { content: @fa-var-battery-quarter; }
-.@{fa-css-prefix}-battery-0:before,
-.@{fa-css-prefix}-battery-empty:before { content: @fa-var-battery-empty; }
-.@{fa-css-prefix}-mouse-pointer:before { content: @fa-var-mouse-pointer; }
-.@{fa-css-prefix}-i-cursor:before { content: @fa-var-i-cursor; }
-.@{fa-css-prefix}-object-group:before { content: @fa-var-object-group; }
-.@{fa-css-prefix}-object-ungroup:before { content: @fa-var-object-ungroup; }
-.@{fa-css-prefix}-sticky-note:before { content: @fa-var-sticky-note; }
-.@{fa-css-prefix}-sticky-note-o:before { content: @fa-var-sticky-note-o; }
-.@{fa-css-prefix}-cc-jcb:before { content: @fa-var-cc-jcb; }
-.@{fa-css-prefix}-cc-diners-club:before { content: @fa-var-cc-diners-club; }
-.@{fa-css-prefix}-clone:before { content: @fa-var-clone; }
-.@{fa-css-prefix}-balance-scale:before { content: @fa-var-balance-scale; }
-.@{fa-css-prefix}-hourglass-o:before { content: @fa-var-hourglass-o; }
-.@{fa-css-prefix}-hourglass-1:before,
-.@{fa-css-prefix}-hourglass-start:before { content: @fa-var-hourglass-start; }
-.@{fa-css-prefix}-hourglass-2:before,
-.@{fa-css-prefix}-hourglass-half:before { content: @fa-var-hourglass-half; }
-.@{fa-css-prefix}-hourglass-3:before,
-.@{fa-css-prefix}-hourglass-end:before { content: @fa-var-hourglass-end; }
-.@{fa-css-prefix}-hourglass:before { content: @fa-var-hourglass; }
-.@{fa-css-prefix}-hand-grab-o:before,
-.@{fa-css-prefix}-hand-rock-o:before { content: @fa-var-hand-rock-o; }
-.@{fa-css-prefix}-hand-stop-o:before,
-.@{fa-css-prefix}-hand-paper-o:before { content: @fa-var-hand-paper-o; }
-.@{fa-css-prefix}-hand-scissors-o:before { content: @fa-var-hand-scissors-o; }
-.@{fa-css-prefix}-hand-lizard-o:before { content: @fa-var-hand-lizard-o; }
-.@{fa-css-prefix}-hand-spock-o:before { content: @fa-var-hand-spock-o; }
-.@{fa-css-prefix}-hand-pointer-o:before { content: @fa-var-hand-pointer-o; }
-.@{fa-css-prefix}-hand-peace-o:before { content: @fa-var-hand-peace-o; }
-.@{fa-css-prefix}-trademark:before { content: @fa-var-trademark; }
-.@{fa-css-prefix}-registered:before { content: @fa-var-registered; }
-.@{fa-css-prefix}-creative-commons:before { content: @fa-var-creative-commons; }
-.@{fa-css-prefix}-gg:before { content: @fa-var-gg; }
-.@{fa-css-prefix}-gg-circle:before { content: @fa-var-gg-circle; }
-.@{fa-css-prefix}-tripadvisor:before { content: @fa-var-tripadvisor; }
-.@{fa-css-prefix}-odnoklassniki:before { content: @fa-var-odnoklassniki; }
-.@{fa-css-prefix}-odnoklassniki-square:before { content: @fa-var-odnoklassniki-square; }
-.@{fa-css-prefix}-get-pocket:before { content: @fa-var-get-pocket; }
-.@{fa-css-prefix}-wikipedia-w:before { content: @fa-var-wikipedia-w; }
-.@{fa-css-prefix}-safari:before { content: @fa-var-safari; }
-.@{fa-css-prefix}-chrome:before { content: @fa-var-chrome; }
-.@{fa-css-prefix}-firefox:before { content: @fa-var-firefox; }
-.@{fa-css-prefix}-opera:before { content: @fa-var-opera; }
-.@{fa-css-prefix}-internet-explorer:before { content: @fa-var-internet-explorer; }
-.@{fa-css-prefix}-tv:before,
-.@{fa-css-prefix}-television:before { content: @fa-var-television; }
-.@{fa-css-prefix}-contao:before { content: @fa-var-contao; }
-.@{fa-css-prefix}-500px:before { content: @fa-var-500px; }
-.@{fa-css-prefix}-amazon:before { content: @fa-var-amazon; }
-.@{fa-css-prefix}-calendar-plus-o:before { content: @fa-var-calendar-plus-o; }
-.@{fa-css-prefix}-calendar-minus-o:before { content: @fa-var-calendar-minus-o; }
-.@{fa-css-prefix}-calendar-times-o:before { content: @fa-var-calendar-times-o; }
-.@{fa-css-prefix}-calendar-check-o:before { content: @fa-var-calendar-check-o; }
-.@{fa-css-prefix}-industry:before { content: @fa-var-industry; }
-.@{fa-css-prefix}-map-pin:before { content: @fa-var-map-pin; }
-.@{fa-css-prefix}-map-signs:before { content: @fa-var-map-signs; }
-.@{fa-css-prefix}-map-o:before { content: @fa-var-map-o; }
-.@{fa-css-prefix}-map:before { content: @fa-var-map; }
-.@{fa-css-prefix}-commenting:before { content: @fa-var-commenting; }
-.@{fa-css-prefix}-commenting-o:before { content: @fa-var-commenting-o; }
-.@{fa-css-prefix}-houzz:before { content: @fa-var-houzz; }
-.@{fa-css-prefix}-vimeo:before { content: @fa-var-vimeo; }
-.@{fa-css-prefix}-black-tie:before { content: @fa-var-black-tie; }
-.@{fa-css-prefix}-fonticons:before { content: @fa-var-fonticons; }
-.@{fa-css-prefix}-reddit-alien:before { content: @fa-var-reddit-alien; }
-.@{fa-css-prefix}-edge:before { content: @fa-var-edge; }
-.@{fa-css-prefix}-credit-card-alt:before { content: @fa-var-credit-card-alt; }
-.@{fa-css-prefix}-codiepie:before { content: @fa-var-codiepie; }
-.@{fa-css-prefix}-modx:before { content: @fa-var-modx; }
-.@{fa-css-prefix}-fort-awesome:before { content: @fa-var-fort-awesome; }
-.@{fa-css-prefix}-usb:before { content: @fa-var-usb; }
-.@{fa-css-prefix}-product-hunt:before { content: @fa-var-product-hunt; }
-.@{fa-css-prefix}-mixcloud:before { content: @fa-var-mixcloud; }
-.@{fa-css-prefix}-scribd:before { content: @fa-var-scribd; }
-.@{fa-css-prefix}-pause-circle:before { content: @fa-var-pause-circle; }
-.@{fa-css-prefix}-pause-circle-o:before { content: @fa-var-pause-circle-o; }
-.@{fa-css-prefix}-stop-circle:before { content: @fa-var-stop-circle; }
-.@{fa-css-prefix}-stop-circle-o:before { content: @fa-var-stop-circle-o; }
-.@{fa-css-prefix}-shopping-bag:before { content: @fa-var-shopping-bag; }
-.@{fa-css-prefix}-shopping-basket:before { content: @fa-var-shopping-basket; }
-.@{fa-css-prefix}-hashtag:before { content: @fa-var-hashtag; }
-.@{fa-css-prefix}-bluetooth:before { content: @fa-var-bluetooth; }
-.@{fa-css-prefix}-bluetooth-b:before { content: @fa-var-bluetooth-b; }
-.@{fa-css-prefix}-percent:before { content: @fa-var-percent; }
-.@{fa-css-prefix}-gitlab:before { content: @fa-var-gitlab; }
-.@{fa-css-prefix}-wpbeginner:before { content: @fa-var-wpbeginner; }
-.@{fa-css-prefix}-wpforms:before { content: @fa-var-wpforms; }
-.@{fa-css-prefix}-envira:before { content: @fa-var-envira; }
-.@{fa-css-prefix}-universal-access:before { content: @fa-var-universal-access; }
-.@{fa-css-prefix}-wheelchair-alt:before { content: @fa-var-wheelchair-alt; }
-.@{fa-css-prefix}-question-circle-o:before { content: @fa-var-question-circle-o; }
-.@{fa-css-prefix}-blind:before { content: @fa-var-blind; }
-.@{fa-css-prefix}-audio-description:before { content: @fa-var-audio-description; }
-.@{fa-css-prefix}-volume-control-phone:before { content: @fa-var-volume-control-phone; }
-.@{fa-css-prefix}-braille:before { content: @fa-var-braille; }
-.@{fa-css-prefix}-assistive-listening-systems:before { content: @fa-var-assistive-listening-systems; }
-.@{fa-css-prefix}-asl-interpreting:before,
-.@{fa-css-prefix}-american-sign-language-interpreting:before { content: @fa-var-american-sign-language-interpreting; }
-.@{fa-css-prefix}-deafness:before,
-.@{fa-css-prefix}-hard-of-hearing:before,
-.@{fa-css-prefix}-deaf:before { content: @fa-var-deaf; }
-.@{fa-css-prefix}-glide:before { content: @fa-var-glide; }
-.@{fa-css-prefix}-glide-g:before { content: @fa-var-glide-g; }
-.@{fa-css-prefix}-signing:before,
-.@{fa-css-prefix}-sign-language:before { content: @fa-var-sign-language; }
-.@{fa-css-prefix}-low-vision:before { content: @fa-var-low-vision; }
-.@{fa-css-prefix}-viadeo:before { content: @fa-var-viadeo; }
-.@{fa-css-prefix}-viadeo-square:before { content: @fa-var-viadeo-square; }
-.@{fa-css-prefix}-snapchat:before { content: @fa-var-snapchat; }
-.@{fa-css-prefix}-snapchat-ghost:before { content: @fa-var-snapchat-ghost; }
-.@{fa-css-prefix}-snapchat-square:before { content: @fa-var-snapchat-square; }
-.@{fa-css-prefix}-pied-piper:before { content: @fa-var-pied-piper; }
-.@{fa-css-prefix}-first-order:before { content: @fa-var-first-order; }
-.@{fa-css-prefix}-yoast:before { content: @fa-var-yoast; }
-.@{fa-css-prefix}-themeisle:before { content: @fa-var-themeisle; }
-.@{fa-css-prefix}-google-plus-circle:before,
-.@{fa-css-prefix}-google-plus-official:before { content: @fa-var-google-plus-official; }
-.@{fa-css-prefix}-fa:before,
-.@{fa-css-prefix}-font-awesome:before { content: @fa-var-font-awesome; }
-.@{fa-css-prefix}-handshake-o:before { content: @fa-var-handshake-o; }
-.@{fa-css-prefix}-envelope-open:before { content: @fa-var-envelope-open; }
-.@{fa-css-prefix}-envelope-open-o:before { content: @fa-var-envelope-open-o; }
-.@{fa-css-prefix}-linode:before { content: @fa-var-linode; }
-.@{fa-css-prefix}-address-book:before { content: @fa-var-address-book; }
-.@{fa-css-prefix}-address-book-o:before { content: @fa-var-address-book-o; }
-.@{fa-css-prefix}-vcard:before,
-.@{fa-css-prefix}-address-card:before { content: @fa-var-address-card; }
-.@{fa-css-prefix}-vcard-o:before,
-.@{fa-css-prefix}-address-card-o:before { content: @fa-var-address-card-o; }
-.@{fa-css-prefix}-user-circle:before { content: @fa-var-user-circle; }
-.@{fa-css-prefix}-user-circle-o:before { content: @fa-var-user-circle-o; }
-.@{fa-css-prefix}-user-o:before { content: @fa-var-user-o; }
-.@{fa-css-prefix}-id-badge:before { content: @fa-var-id-badge; }
-.@{fa-css-prefix}-drivers-license:before,
-.@{fa-css-prefix}-id-card:before { content: @fa-var-id-card; }
-.@{fa-css-prefix}-drivers-license-o:before,
-.@{fa-css-prefix}-id-card-o:before { content: @fa-var-id-card-o; }
-.@{fa-css-prefix}-quora:before { content: @fa-var-quora; }
-.@{fa-css-prefix}-free-code-camp:before { content: @fa-var-free-code-camp; }
-.@{fa-css-prefix}-telegram:before { content: @fa-var-telegram; }
-.@{fa-css-prefix}-thermometer-4:before,
-.@{fa-css-prefix}-thermometer:before,
-.@{fa-css-prefix}-thermometer-full:before { content: @fa-var-thermometer-full; }
-.@{fa-css-prefix}-thermometer-3:before,
-.@{fa-css-prefix}-thermometer-three-quarters:before { content: @fa-var-thermometer-three-quarters; }
-.@{fa-css-prefix}-thermometer-2:before,
-.@{fa-css-prefix}-thermometer-half:before { content: @fa-var-thermometer-half; }
-.@{fa-css-prefix}-thermometer-1:before,
-.@{fa-css-prefix}-thermometer-quarter:before { content: @fa-var-thermometer-quarter; }
-.@{fa-css-prefix}-thermometer-0:before,
-.@{fa-css-prefix}-thermometer-empty:before { content: @fa-var-thermometer-empty; }
-.@{fa-css-prefix}-shower:before { content: @fa-var-shower; }
-.@{fa-css-prefix}-bathtub:before,
-.@{fa-css-prefix}-s15:before,
-.@{fa-css-prefix}-bath:before { content: @fa-var-bath; }
-.@{fa-css-prefix}-podcast:before { content: @fa-var-podcast; }
-.@{fa-css-prefix}-window-maximize:before { content: @fa-var-window-maximize; }
-.@{fa-css-prefix}-window-minimize:before { content: @fa-var-window-minimize; }
-.@{fa-css-prefix}-window-restore:before { content: @fa-var-window-restore; }
-.@{fa-css-prefix}-times-rectangle:before,
-.@{fa-css-prefix}-window-close:before { content: @fa-var-window-close; }
-.@{fa-css-prefix}-times-rectangle-o:before,
-.@{fa-css-prefix}-window-close-o:before { content: @fa-var-window-close-o; }
-.@{fa-css-prefix}-bandcamp:before { content: @fa-var-bandcamp; }
-.@{fa-css-prefix}-grav:before { content: @fa-var-grav; }
-.@{fa-css-prefix}-etsy:before { content: @fa-var-etsy; }
-.@{fa-css-prefix}-imdb:before { content: @fa-var-imdb; }
-.@{fa-css-prefix}-ravelry:before { content: @fa-var-ravelry; }
-.@{fa-css-prefix}-eercast:before { content: @fa-var-eercast; }
-.@{fa-css-prefix}-microchip:before { content: @fa-var-microchip; }
-.@{fa-css-prefix}-snowflake-o:before { content: @fa-var-snowflake-o; }
-.@{fa-css-prefix}-superpowers:before { content: @fa-var-superpowers; }
-.@{fa-css-prefix}-wpexplorer:before { content: @fa-var-wpexplorer; }
-.@{fa-css-prefix}-meetup:before { content: @fa-var-meetup; }
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/larger.less b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/larger.less
deleted file mode 100644
index c9d646770e..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/larger.less
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon Sizes
-// -------------------------
-
-/* makes the font 33% larger relative to the icon container */
-.@{fa-css-prefix}-lg {
- font-size: (4em / 3);
- line-height: (3em / 4);
- vertical-align: -15%;
-}
-.@{fa-css-prefix}-2x { font-size: 2em; }
-.@{fa-css-prefix}-3x { font-size: 3em; }
-.@{fa-css-prefix}-4x { font-size: 4em; }
-.@{fa-css-prefix}-5x { font-size: 5em; }
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/list.less b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/list.less
deleted file mode 100644
index 0b440382f6..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/list.less
+++ /dev/null
@@ -1,19 +0,0 @@
-// List Icons
-// -------------------------
-
-.@{fa-css-prefix}-ul {
- padding-left: 0;
- margin-left: @fa-li-width;
- list-style-type: none;
- > li { position: relative; }
-}
-.@{fa-css-prefix}-li {
- position: absolute;
- left: -@fa-li-width;
- width: @fa-li-width;
- top: (2em / 14);
- text-align: center;
- &.@{fa-css-prefix}-lg {
- left: (-@fa-li-width + (4em / 14));
- }
-}
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/mixins.less b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/mixins.less
deleted file mode 100644
index beef231d0e..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/mixins.less
+++ /dev/null
@@ -1,60 +0,0 @@
-// Mixins
-// --------------------------
-
-.fa-icon() {
- display: inline-block;
- font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration
- font-size: inherit; // can't have font-size inherit on line above, so need to override
- text-rendering: auto; // optimizelegibility throws things off #1094
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-
-}
-
-.fa-icon-rotate(@degrees, @rotation) {
- -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})";
- -webkit-transform: rotate(@degrees);
- -ms-transform: rotate(@degrees);
- transform: rotate(@degrees);
-}
-
-.fa-icon-flip(@horiz, @vert, @rotation) {
- -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)";
- -webkit-transform: scale(@horiz, @vert);
- -ms-transform: scale(@horiz, @vert);
- transform: scale(@horiz, @vert);
-}
-
-
-// Only display content to screen readers. A la Bootstrap 4.
-//
-// See: http://a11yproject.com/posts/how-to-hide-content/
-
-.sr-only() {
- position: absolute;
- width: 1px;
- height: 1px;
- padding: 0;
- margin: -1px;
- overflow: hidden;
- clip: rect(0,0,0,0);
- border: 0;
-}
-
-// Use in conjunction with .sr-only to only display content when it's focused.
-//
-// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
-//
-// Credit: HTML5 Boilerplate
-
-.sr-only-focusable() {
- &:active,
- &:focus {
- position: static;
- width: auto;
- height: auto;
- margin: 0;
- overflow: visible;
- clip: auto;
- }
-}
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/path.less b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/path.less
deleted file mode 100644
index 835be41f81..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/path.less
+++ /dev/null
@@ -1,15 +0,0 @@
-/* FONT PATH
- * -------------------------- */
-
-@font-face {
- font-family: 'FontAwesome';
- src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}');
- src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'),
- url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'),
- url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'),
- url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'),
- url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg');
- // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
- font-weight: normal;
- font-style: normal;
-}
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/rotated-flipped.less b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/rotated-flipped.less
deleted file mode 100644
index f6ba81475b..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/rotated-flipped.less
+++ /dev/null
@@ -1,20 +0,0 @@
-// Rotated & Flipped Icons
-// -------------------------
-
-.@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); }
-.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }
-.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }
-
-.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }
-.@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); }
-
-// Hook for IE8-9
-// -------------------------
-
-:root .@{fa-css-prefix}-rotate-90,
-:root .@{fa-css-prefix}-rotate-180,
-:root .@{fa-css-prefix}-rotate-270,
-:root .@{fa-css-prefix}-flip-horizontal,
-:root .@{fa-css-prefix}-flip-vertical {
- filter: none;
-}
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/screen-reader.less b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/screen-reader.less
deleted file mode 100644
index 11c188196d..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/screen-reader.less
+++ /dev/null
@@ -1,5 +0,0 @@
-// Screen Readers
-// -------------------------
-
-.sr-only { .sr-only(); }
-.sr-only-focusable { .sr-only-focusable(); }
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/stacked.less b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/stacked.less
deleted file mode 100644
index fc53fb0e7a..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/stacked.less
+++ /dev/null
@@ -1,20 +0,0 @@
-// Stacked Icons
-// -------------------------
-
-.@{fa-css-prefix}-stack {
- position: relative;
- display: inline-block;
- width: 2em;
- height: 2em;
- line-height: 2em;
- vertical-align: middle;
-}
-.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
- position: absolute;
- left: 0;
- width: 100%;
- text-align: center;
-}
-.@{fa-css-prefix}-stack-1x { line-height: inherit; }
-.@{fa-css-prefix}-stack-2x { font-size: 2em; }
-.@{fa-css-prefix}-inverse { color: @fa-inverse; }
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/variables.less b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/variables.less
deleted file mode 100644
index 7ddbbc0115..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/less/variables.less
+++ /dev/null
@@ -1,800 +0,0 @@
-// Variables
-// --------------------------
-
-@fa-font-path: "../fonts";
-@fa-font-size-base: 14px;
-@fa-line-height-base: 1;
-//@fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts"; // for referencing Bootstrap CDN font files directly
-@fa-css-prefix: fa;
-@fa-version: "4.7.0";
-@fa-border-color: #eee;
-@fa-inverse: #fff;
-@fa-li-width: (30em / 14);
-
-@fa-var-500px: "\f26e";
-@fa-var-address-book: "\f2b9";
-@fa-var-address-book-o: "\f2ba";
-@fa-var-address-card: "\f2bb";
-@fa-var-address-card-o: "\f2bc";
-@fa-var-adjust: "\f042";
-@fa-var-adn: "\f170";
-@fa-var-align-center: "\f037";
-@fa-var-align-justify: "\f039";
-@fa-var-align-left: "\f036";
-@fa-var-align-right: "\f038";
-@fa-var-amazon: "\f270";
-@fa-var-ambulance: "\f0f9";
-@fa-var-american-sign-language-interpreting: "\f2a3";
-@fa-var-anchor: "\f13d";
-@fa-var-android: "\f17b";
-@fa-var-angellist: "\f209";
-@fa-var-angle-double-down: "\f103";
-@fa-var-angle-double-left: "\f100";
-@fa-var-angle-double-right: "\f101";
-@fa-var-angle-double-up: "\f102";
-@fa-var-angle-down: "\f107";
-@fa-var-angle-left: "\f104";
-@fa-var-angle-right: "\f105";
-@fa-var-angle-up: "\f106";
-@fa-var-apple: "\f179";
-@fa-var-archive: "\f187";
-@fa-var-area-chart: "\f1fe";
-@fa-var-arrow-circle-down: "\f0ab";
-@fa-var-arrow-circle-left: "\f0a8";
-@fa-var-arrow-circle-o-down: "\f01a";
-@fa-var-arrow-circle-o-left: "\f190";
-@fa-var-arrow-circle-o-right: "\f18e";
-@fa-var-arrow-circle-o-up: "\f01b";
-@fa-var-arrow-circle-right: "\f0a9";
-@fa-var-arrow-circle-up: "\f0aa";
-@fa-var-arrow-down: "\f063";
-@fa-var-arrow-left: "\f060";
-@fa-var-arrow-right: "\f061";
-@fa-var-arrow-up: "\f062";
-@fa-var-arrows: "\f047";
-@fa-var-arrows-alt: "\f0b2";
-@fa-var-arrows-h: "\f07e";
-@fa-var-arrows-v: "\f07d";
-@fa-var-asl-interpreting: "\f2a3";
-@fa-var-assistive-listening-systems: "\f2a2";
-@fa-var-asterisk: "\f069";
-@fa-var-at: "\f1fa";
-@fa-var-audio-description: "\f29e";
-@fa-var-automobile: "\f1b9";
-@fa-var-backward: "\f04a";
-@fa-var-balance-scale: "\f24e";
-@fa-var-ban: "\f05e";
-@fa-var-bandcamp: "\f2d5";
-@fa-var-bank: "\f19c";
-@fa-var-bar-chart: "\f080";
-@fa-var-bar-chart-o: "\f080";
-@fa-var-barcode: "\f02a";
-@fa-var-bars: "\f0c9";
-@fa-var-bath: "\f2cd";
-@fa-var-bathtub: "\f2cd";
-@fa-var-battery: "\f240";
-@fa-var-battery-0: "\f244";
-@fa-var-battery-1: "\f243";
-@fa-var-battery-2: "\f242";
-@fa-var-battery-3: "\f241";
-@fa-var-battery-4: "\f240";
-@fa-var-battery-empty: "\f244";
-@fa-var-battery-full: "\f240";
-@fa-var-battery-half: "\f242";
-@fa-var-battery-quarter: "\f243";
-@fa-var-battery-three-quarters: "\f241";
-@fa-var-bed: "\f236";
-@fa-var-beer: "\f0fc";
-@fa-var-behance: "\f1b4";
-@fa-var-behance-square: "\f1b5";
-@fa-var-bell: "\f0f3";
-@fa-var-bell-o: "\f0a2";
-@fa-var-bell-slash: "\f1f6";
-@fa-var-bell-slash-o: "\f1f7";
-@fa-var-bicycle: "\f206";
-@fa-var-binoculars: "\f1e5";
-@fa-var-birthday-cake: "\f1fd";
-@fa-var-bitbucket: "\f171";
-@fa-var-bitbucket-square: "\f172";
-@fa-var-bitcoin: "\f15a";
-@fa-var-black-tie: "\f27e";
-@fa-var-blind: "\f29d";
-@fa-var-bluetooth: "\f293";
-@fa-var-bluetooth-b: "\f294";
-@fa-var-bold: "\f032";
-@fa-var-bolt: "\f0e7";
-@fa-var-bomb: "\f1e2";
-@fa-var-book: "\f02d";
-@fa-var-bookmark: "\f02e";
-@fa-var-bookmark-o: "\f097";
-@fa-var-braille: "\f2a1";
-@fa-var-briefcase: "\f0b1";
-@fa-var-btc: "\f15a";
-@fa-var-bug: "\f188";
-@fa-var-building: "\f1ad";
-@fa-var-building-o: "\f0f7";
-@fa-var-bullhorn: "\f0a1";
-@fa-var-bullseye: "\f140";
-@fa-var-bus: "\f207";
-@fa-var-buysellads: "\f20d";
-@fa-var-cab: "\f1ba";
-@fa-var-calculator: "\f1ec";
-@fa-var-calendar: "\f073";
-@fa-var-calendar-check-o: "\f274";
-@fa-var-calendar-minus-o: "\f272";
-@fa-var-calendar-o: "\f133";
-@fa-var-calendar-plus-o: "\f271";
-@fa-var-calendar-times-o: "\f273";
-@fa-var-camera: "\f030";
-@fa-var-camera-retro: "\f083";
-@fa-var-car: "\f1b9";
-@fa-var-caret-down: "\f0d7";
-@fa-var-caret-left: "\f0d9";
-@fa-var-caret-right: "\f0da";
-@fa-var-caret-square-o-down: "\f150";
-@fa-var-caret-square-o-left: "\f191";
-@fa-var-caret-square-o-right: "\f152";
-@fa-var-caret-square-o-up: "\f151";
-@fa-var-caret-up: "\f0d8";
-@fa-var-cart-arrow-down: "\f218";
-@fa-var-cart-plus: "\f217";
-@fa-var-cc: "\f20a";
-@fa-var-cc-amex: "\f1f3";
-@fa-var-cc-diners-club: "\f24c";
-@fa-var-cc-discover: "\f1f2";
-@fa-var-cc-jcb: "\f24b";
-@fa-var-cc-mastercard: "\f1f1";
-@fa-var-cc-paypal: "\f1f4";
-@fa-var-cc-stripe: "\f1f5";
-@fa-var-cc-visa: "\f1f0";
-@fa-var-certificate: "\f0a3";
-@fa-var-chain: "\f0c1";
-@fa-var-chain-broken: "\f127";
-@fa-var-check: "\f00c";
-@fa-var-check-circle: "\f058";
-@fa-var-check-circle-o: "\f05d";
-@fa-var-check-square: "\f14a";
-@fa-var-check-square-o: "\f046";
-@fa-var-chevron-circle-down: "\f13a";
-@fa-var-chevron-circle-left: "\f137";
-@fa-var-chevron-circle-right: "\f138";
-@fa-var-chevron-circle-up: "\f139";
-@fa-var-chevron-down: "\f078";
-@fa-var-chevron-left: "\f053";
-@fa-var-chevron-right: "\f054";
-@fa-var-chevron-up: "\f077";
-@fa-var-child: "\f1ae";
-@fa-var-chrome: "\f268";
-@fa-var-circle: "\f111";
-@fa-var-circle-o: "\f10c";
-@fa-var-circle-o-notch: "\f1ce";
-@fa-var-circle-thin: "\f1db";
-@fa-var-clipboard: "\f0ea";
-@fa-var-clock-o: "\f017";
-@fa-var-clone: "\f24d";
-@fa-var-close: "\f00d";
-@fa-var-cloud: "\f0c2";
-@fa-var-cloud-download: "\f0ed";
-@fa-var-cloud-upload: "\f0ee";
-@fa-var-cny: "\f157";
-@fa-var-code: "\f121";
-@fa-var-code-fork: "\f126";
-@fa-var-codepen: "\f1cb";
-@fa-var-codiepie: "\f284";
-@fa-var-coffee: "\f0f4";
-@fa-var-cog: "\f013";
-@fa-var-cogs: "\f085";
-@fa-var-columns: "\f0db";
-@fa-var-comment: "\f075";
-@fa-var-comment-o: "\f0e5";
-@fa-var-commenting: "\f27a";
-@fa-var-commenting-o: "\f27b";
-@fa-var-comments: "\f086";
-@fa-var-comments-o: "\f0e6";
-@fa-var-compass: "\f14e";
-@fa-var-compress: "\f066";
-@fa-var-connectdevelop: "\f20e";
-@fa-var-contao: "\f26d";
-@fa-var-copy: "\f0c5";
-@fa-var-copyright: "\f1f9";
-@fa-var-creative-commons: "\f25e";
-@fa-var-credit-card: "\f09d";
-@fa-var-credit-card-alt: "\f283";
-@fa-var-crop: "\f125";
-@fa-var-crosshairs: "\f05b";
-@fa-var-css3: "\f13c";
-@fa-var-cube: "\f1b2";
-@fa-var-cubes: "\f1b3";
-@fa-var-cut: "\f0c4";
-@fa-var-cutlery: "\f0f5";
-@fa-var-dashboard: "\f0e4";
-@fa-var-dashcube: "\f210";
-@fa-var-database: "\f1c0";
-@fa-var-deaf: "\f2a4";
-@fa-var-deafness: "\f2a4";
-@fa-var-dedent: "\f03b";
-@fa-var-delicious: "\f1a5";
-@fa-var-desktop: "\f108";
-@fa-var-deviantart: "\f1bd";
-@fa-var-diamond: "\f219";
-@fa-var-digg: "\f1a6";
-@fa-var-dollar: "\f155";
-@fa-var-dot-circle-o: "\f192";
-@fa-var-download: "\f019";
-@fa-var-dribbble: "\f17d";
-@fa-var-drivers-license: "\f2c2";
-@fa-var-drivers-license-o: "\f2c3";
-@fa-var-dropbox: "\f16b";
-@fa-var-drupal: "\f1a9";
-@fa-var-edge: "\f282";
-@fa-var-edit: "\f044";
-@fa-var-eercast: "\f2da";
-@fa-var-eject: "\f052";
-@fa-var-ellipsis-h: "\f141";
-@fa-var-ellipsis-v: "\f142";
-@fa-var-empire: "\f1d1";
-@fa-var-envelope: "\f0e0";
-@fa-var-envelope-o: "\f003";
-@fa-var-envelope-open: "\f2b6";
-@fa-var-envelope-open-o: "\f2b7";
-@fa-var-envelope-square: "\f199";
-@fa-var-envira: "\f299";
-@fa-var-eraser: "\f12d";
-@fa-var-etsy: "\f2d7";
-@fa-var-eur: "\f153";
-@fa-var-euro: "\f153";
-@fa-var-exchange: "\f0ec";
-@fa-var-exclamation: "\f12a";
-@fa-var-exclamation-circle: "\f06a";
-@fa-var-exclamation-triangle: "\f071";
-@fa-var-expand: "\f065";
-@fa-var-expeditedssl: "\f23e";
-@fa-var-external-link: "\f08e";
-@fa-var-external-link-square: "\f14c";
-@fa-var-eye: "\f06e";
-@fa-var-eye-slash: "\f070";
-@fa-var-eyedropper: "\f1fb";
-@fa-var-fa: "\f2b4";
-@fa-var-facebook: "\f09a";
-@fa-var-facebook-f: "\f09a";
-@fa-var-facebook-official: "\f230";
-@fa-var-facebook-square: "\f082";
-@fa-var-fast-backward: "\f049";
-@fa-var-fast-forward: "\f050";
-@fa-var-fax: "\f1ac";
-@fa-var-feed: "\f09e";
-@fa-var-female: "\f182";
-@fa-var-fighter-jet: "\f0fb";
-@fa-var-file: "\f15b";
-@fa-var-file-archive-o: "\f1c6";
-@fa-var-file-audio-o: "\f1c7";
-@fa-var-file-code-o: "\f1c9";
-@fa-var-file-excel-o: "\f1c3";
-@fa-var-file-image-o: "\f1c5";
-@fa-var-file-movie-o: "\f1c8";
-@fa-var-file-o: "\f016";
-@fa-var-file-pdf-o: "\f1c1";
-@fa-var-file-photo-o: "\f1c5";
-@fa-var-file-picture-o: "\f1c5";
-@fa-var-file-powerpoint-o: "\f1c4";
-@fa-var-file-sound-o: "\f1c7";
-@fa-var-file-text: "\f15c";
-@fa-var-file-text-o: "\f0f6";
-@fa-var-file-video-o: "\f1c8";
-@fa-var-file-word-o: "\f1c2";
-@fa-var-file-zip-o: "\f1c6";
-@fa-var-files-o: "\f0c5";
-@fa-var-film: "\f008";
-@fa-var-filter: "\f0b0";
-@fa-var-fire: "\f06d";
-@fa-var-fire-extinguisher: "\f134";
-@fa-var-firefox: "\f269";
-@fa-var-first-order: "\f2b0";
-@fa-var-flag: "\f024";
-@fa-var-flag-checkered: "\f11e";
-@fa-var-flag-o: "\f11d";
-@fa-var-flash: "\f0e7";
-@fa-var-flask: "\f0c3";
-@fa-var-flickr: "\f16e";
-@fa-var-floppy-o: "\f0c7";
-@fa-var-folder: "\f07b";
-@fa-var-folder-o: "\f114";
-@fa-var-folder-open: "\f07c";
-@fa-var-folder-open-o: "\f115";
-@fa-var-font: "\f031";
-@fa-var-font-awesome: "\f2b4";
-@fa-var-fonticons: "\f280";
-@fa-var-fort-awesome: "\f286";
-@fa-var-forumbee: "\f211";
-@fa-var-forward: "\f04e";
-@fa-var-foursquare: "\f180";
-@fa-var-free-code-camp: "\f2c5";
-@fa-var-frown-o: "\f119";
-@fa-var-futbol-o: "\f1e3";
-@fa-var-gamepad: "\f11b";
-@fa-var-gavel: "\f0e3";
-@fa-var-gbp: "\f154";
-@fa-var-ge: "\f1d1";
-@fa-var-gear: "\f013";
-@fa-var-gears: "\f085";
-@fa-var-genderless: "\f22d";
-@fa-var-get-pocket: "\f265";
-@fa-var-gg: "\f260";
-@fa-var-gg-circle: "\f261";
-@fa-var-gift: "\f06b";
-@fa-var-git: "\f1d3";
-@fa-var-git-square: "\f1d2";
-@fa-var-github: "\f09b";
-@fa-var-github-alt: "\f113";
-@fa-var-github-square: "\f092";
-@fa-var-gitlab: "\f296";
-@fa-var-gittip: "\f184";
-@fa-var-glass: "\f000";
-@fa-var-glide: "\f2a5";
-@fa-var-glide-g: "\f2a6";
-@fa-var-globe: "\f0ac";
-@fa-var-google: "\f1a0";
-@fa-var-google-plus: "\f0d5";
-@fa-var-google-plus-circle: "\f2b3";
-@fa-var-google-plus-official: "\f2b3";
-@fa-var-google-plus-square: "\f0d4";
-@fa-var-google-wallet: "\f1ee";
-@fa-var-graduation-cap: "\f19d";
-@fa-var-gratipay: "\f184";
-@fa-var-grav: "\f2d6";
-@fa-var-group: "\f0c0";
-@fa-var-h-square: "\f0fd";
-@fa-var-hacker-news: "\f1d4";
-@fa-var-hand-grab-o: "\f255";
-@fa-var-hand-lizard-o: "\f258";
-@fa-var-hand-o-down: "\f0a7";
-@fa-var-hand-o-left: "\f0a5";
-@fa-var-hand-o-right: "\f0a4";
-@fa-var-hand-o-up: "\f0a6";
-@fa-var-hand-paper-o: "\f256";
-@fa-var-hand-peace-o: "\f25b";
-@fa-var-hand-pointer-o: "\f25a";
-@fa-var-hand-rock-o: "\f255";
-@fa-var-hand-scissors-o: "\f257";
-@fa-var-hand-spock-o: "\f259";
-@fa-var-hand-stop-o: "\f256";
-@fa-var-handshake-o: "\f2b5";
-@fa-var-hard-of-hearing: "\f2a4";
-@fa-var-hashtag: "\f292";
-@fa-var-hdd-o: "\f0a0";
-@fa-var-header: "\f1dc";
-@fa-var-headphones: "\f025";
-@fa-var-heart: "\f004";
-@fa-var-heart-o: "\f08a";
-@fa-var-heartbeat: "\f21e";
-@fa-var-history: "\f1da";
-@fa-var-home: "\f015";
-@fa-var-hospital-o: "\f0f8";
-@fa-var-hotel: "\f236";
-@fa-var-hourglass: "\f254";
-@fa-var-hourglass-1: "\f251";
-@fa-var-hourglass-2: "\f252";
-@fa-var-hourglass-3: "\f253";
-@fa-var-hourglass-end: "\f253";
-@fa-var-hourglass-half: "\f252";
-@fa-var-hourglass-o: "\f250";
-@fa-var-hourglass-start: "\f251";
-@fa-var-houzz: "\f27c";
-@fa-var-html5: "\f13b";
-@fa-var-i-cursor: "\f246";
-@fa-var-id-badge: "\f2c1";
-@fa-var-id-card: "\f2c2";
-@fa-var-id-card-o: "\f2c3";
-@fa-var-ils: "\f20b";
-@fa-var-image: "\f03e";
-@fa-var-imdb: "\f2d8";
-@fa-var-inbox: "\f01c";
-@fa-var-indent: "\f03c";
-@fa-var-industry: "\f275";
-@fa-var-info: "\f129";
-@fa-var-info-circle: "\f05a";
-@fa-var-inr: "\f156";
-@fa-var-instagram: "\f16d";
-@fa-var-institution: "\f19c";
-@fa-var-internet-explorer: "\f26b";
-@fa-var-intersex: "\f224";
-@fa-var-ioxhost: "\f208";
-@fa-var-italic: "\f033";
-@fa-var-joomla: "\f1aa";
-@fa-var-jpy: "\f157";
-@fa-var-jsfiddle: "\f1cc";
-@fa-var-key: "\f084";
-@fa-var-keyboard-o: "\f11c";
-@fa-var-krw: "\f159";
-@fa-var-language: "\f1ab";
-@fa-var-laptop: "\f109";
-@fa-var-lastfm: "\f202";
-@fa-var-lastfm-square: "\f203";
-@fa-var-leaf: "\f06c";
-@fa-var-leanpub: "\f212";
-@fa-var-legal: "\f0e3";
-@fa-var-lemon-o: "\f094";
-@fa-var-level-down: "\f149";
-@fa-var-level-up: "\f148";
-@fa-var-life-bouy: "\f1cd";
-@fa-var-life-buoy: "\f1cd";
-@fa-var-life-ring: "\f1cd";
-@fa-var-life-saver: "\f1cd";
-@fa-var-lightbulb-o: "\f0eb";
-@fa-var-line-chart: "\f201";
-@fa-var-link: "\f0c1";
-@fa-var-linkedin: "\f0e1";
-@fa-var-linkedin-square: "\f08c";
-@fa-var-linode: "\f2b8";
-@fa-var-linux: "\f17c";
-@fa-var-list: "\f03a";
-@fa-var-list-alt: "\f022";
-@fa-var-list-ol: "\f0cb";
-@fa-var-list-ul: "\f0ca";
-@fa-var-location-arrow: "\f124";
-@fa-var-lock: "\f023";
-@fa-var-long-arrow-down: "\f175";
-@fa-var-long-arrow-left: "\f177";
-@fa-var-long-arrow-right: "\f178";
-@fa-var-long-arrow-up: "\f176";
-@fa-var-low-vision: "\f2a8";
-@fa-var-magic: "\f0d0";
-@fa-var-magnet: "\f076";
-@fa-var-mail-forward: "\f064";
-@fa-var-mail-reply: "\f112";
-@fa-var-mail-reply-all: "\f122";
-@fa-var-male: "\f183";
-@fa-var-map: "\f279";
-@fa-var-map-marker: "\f041";
-@fa-var-map-o: "\f278";
-@fa-var-map-pin: "\f276";
-@fa-var-map-signs: "\f277";
-@fa-var-mars: "\f222";
-@fa-var-mars-double: "\f227";
-@fa-var-mars-stroke: "\f229";
-@fa-var-mars-stroke-h: "\f22b";
-@fa-var-mars-stroke-v: "\f22a";
-@fa-var-maxcdn: "\f136";
-@fa-var-meanpath: "\f20c";
-@fa-var-medium: "\f23a";
-@fa-var-medkit: "\f0fa";
-@fa-var-meetup: "\f2e0";
-@fa-var-meh-o: "\f11a";
-@fa-var-mercury: "\f223";
-@fa-var-microchip: "\f2db";
-@fa-var-microphone: "\f130";
-@fa-var-microphone-slash: "\f131";
-@fa-var-minus: "\f068";
-@fa-var-minus-circle: "\f056";
-@fa-var-minus-square: "\f146";
-@fa-var-minus-square-o: "\f147";
-@fa-var-mixcloud: "\f289";
-@fa-var-mobile: "\f10b";
-@fa-var-mobile-phone: "\f10b";
-@fa-var-modx: "\f285";
-@fa-var-money: "\f0d6";
-@fa-var-moon-o: "\f186";
-@fa-var-mortar-board: "\f19d";
-@fa-var-motorcycle: "\f21c";
-@fa-var-mouse-pointer: "\f245";
-@fa-var-music: "\f001";
-@fa-var-navicon: "\f0c9";
-@fa-var-neuter: "\f22c";
-@fa-var-newspaper-o: "\f1ea";
-@fa-var-object-group: "\f247";
-@fa-var-object-ungroup: "\f248";
-@fa-var-odnoklassniki: "\f263";
-@fa-var-odnoklassniki-square: "\f264";
-@fa-var-opencart: "\f23d";
-@fa-var-openid: "\f19b";
-@fa-var-opera: "\f26a";
-@fa-var-optin-monster: "\f23c";
-@fa-var-outdent: "\f03b";
-@fa-var-pagelines: "\f18c";
-@fa-var-paint-brush: "\f1fc";
-@fa-var-paper-plane: "\f1d8";
-@fa-var-paper-plane-o: "\f1d9";
-@fa-var-paperclip: "\f0c6";
-@fa-var-paragraph: "\f1dd";
-@fa-var-paste: "\f0ea";
-@fa-var-pause: "\f04c";
-@fa-var-pause-circle: "\f28b";
-@fa-var-pause-circle-o: "\f28c";
-@fa-var-paw: "\f1b0";
-@fa-var-paypal: "\f1ed";
-@fa-var-pencil: "\f040";
-@fa-var-pencil-square: "\f14b";
-@fa-var-pencil-square-o: "\f044";
-@fa-var-percent: "\f295";
-@fa-var-phone: "\f095";
-@fa-var-phone-square: "\f098";
-@fa-var-photo: "\f03e";
-@fa-var-picture-o: "\f03e";
-@fa-var-pie-chart: "\f200";
-@fa-var-pied-piper: "\f2ae";
-@fa-var-pied-piper-alt: "\f1a8";
-@fa-var-pied-piper-pp: "\f1a7";
-@fa-var-pinterest: "\f0d2";
-@fa-var-pinterest-p: "\f231";
-@fa-var-pinterest-square: "\f0d3";
-@fa-var-plane: "\f072";
-@fa-var-play: "\f04b";
-@fa-var-play-circle: "\f144";
-@fa-var-play-circle-o: "\f01d";
-@fa-var-plug: "\f1e6";
-@fa-var-plus: "\f067";
-@fa-var-plus-circle: "\f055";
-@fa-var-plus-square: "\f0fe";
-@fa-var-plus-square-o: "\f196";
-@fa-var-podcast: "\f2ce";
-@fa-var-power-off: "\f011";
-@fa-var-print: "\f02f";
-@fa-var-product-hunt: "\f288";
-@fa-var-puzzle-piece: "\f12e";
-@fa-var-qq: "\f1d6";
-@fa-var-qrcode: "\f029";
-@fa-var-question: "\f128";
-@fa-var-question-circle: "\f059";
-@fa-var-question-circle-o: "\f29c";
-@fa-var-quora: "\f2c4";
-@fa-var-quote-left: "\f10d";
-@fa-var-quote-right: "\f10e";
-@fa-var-ra: "\f1d0";
-@fa-var-random: "\f074";
-@fa-var-ravelry: "\f2d9";
-@fa-var-rebel: "\f1d0";
-@fa-var-recycle: "\f1b8";
-@fa-var-reddit: "\f1a1";
-@fa-var-reddit-alien: "\f281";
-@fa-var-reddit-square: "\f1a2";
-@fa-var-refresh: "\f021";
-@fa-var-registered: "\f25d";
-@fa-var-remove: "\f00d";
-@fa-var-renren: "\f18b";
-@fa-var-reorder: "\f0c9";
-@fa-var-repeat: "\f01e";
-@fa-var-reply: "\f112";
-@fa-var-reply-all: "\f122";
-@fa-var-resistance: "\f1d0";
-@fa-var-retweet: "\f079";
-@fa-var-rmb: "\f157";
-@fa-var-road: "\f018";
-@fa-var-rocket: "\f135";
-@fa-var-rotate-left: "\f0e2";
-@fa-var-rotate-right: "\f01e";
-@fa-var-rouble: "\f158";
-@fa-var-rss: "\f09e";
-@fa-var-rss-square: "\f143";
-@fa-var-rub: "\f158";
-@fa-var-ruble: "\f158";
-@fa-var-rupee: "\f156";
-@fa-var-s15: "\f2cd";
-@fa-var-safari: "\f267";
-@fa-var-save: "\f0c7";
-@fa-var-scissors: "\f0c4";
-@fa-var-scribd: "\f28a";
-@fa-var-search: "\f002";
-@fa-var-search-minus: "\f010";
-@fa-var-search-plus: "\f00e";
-@fa-var-sellsy: "\f213";
-@fa-var-send: "\f1d8";
-@fa-var-send-o: "\f1d9";
-@fa-var-server: "\f233";
-@fa-var-share: "\f064";
-@fa-var-share-alt: "\f1e0";
-@fa-var-share-alt-square: "\f1e1";
-@fa-var-share-square: "\f14d";
-@fa-var-share-square-o: "\f045";
-@fa-var-shekel: "\f20b";
-@fa-var-sheqel: "\f20b";
-@fa-var-shield: "\f132";
-@fa-var-ship: "\f21a";
-@fa-var-shirtsinbulk: "\f214";
-@fa-var-shopping-bag: "\f290";
-@fa-var-shopping-basket: "\f291";
-@fa-var-shopping-cart: "\f07a";
-@fa-var-shower: "\f2cc";
-@fa-var-sign-in: "\f090";
-@fa-var-sign-language: "\f2a7";
-@fa-var-sign-out: "\f08b";
-@fa-var-signal: "\f012";
-@fa-var-signing: "\f2a7";
-@fa-var-simplybuilt: "\f215";
-@fa-var-sitemap: "\f0e8";
-@fa-var-skyatlas: "\f216";
-@fa-var-skype: "\f17e";
-@fa-var-slack: "\f198";
-@fa-var-sliders: "\f1de";
-@fa-var-slideshare: "\f1e7";
-@fa-var-smile-o: "\f118";
-@fa-var-snapchat: "\f2ab";
-@fa-var-snapchat-ghost: "\f2ac";
-@fa-var-snapchat-square: "\f2ad";
-@fa-var-snowflake-o: "\f2dc";
-@fa-var-soccer-ball-o: "\f1e3";
-@fa-var-sort: "\f0dc";
-@fa-var-sort-alpha-asc: "\f15d";
-@fa-var-sort-alpha-desc: "\f15e";
-@fa-var-sort-amount-asc: "\f160";
-@fa-var-sort-amount-desc: "\f161";
-@fa-var-sort-asc: "\f0de";
-@fa-var-sort-desc: "\f0dd";
-@fa-var-sort-down: "\f0dd";
-@fa-var-sort-numeric-asc: "\f162";
-@fa-var-sort-numeric-desc: "\f163";
-@fa-var-sort-up: "\f0de";
-@fa-var-soundcloud: "\f1be";
-@fa-var-space-shuttle: "\f197";
-@fa-var-spinner: "\f110";
-@fa-var-spoon: "\f1b1";
-@fa-var-spotify: "\f1bc";
-@fa-var-square: "\f0c8";
-@fa-var-square-o: "\f096";
-@fa-var-stack-exchange: "\f18d";
-@fa-var-stack-overflow: "\f16c";
-@fa-var-star: "\f005";
-@fa-var-star-half: "\f089";
-@fa-var-star-half-empty: "\f123";
-@fa-var-star-half-full: "\f123";
-@fa-var-star-half-o: "\f123";
-@fa-var-star-o: "\f006";
-@fa-var-steam: "\f1b6";
-@fa-var-steam-square: "\f1b7";
-@fa-var-step-backward: "\f048";
-@fa-var-step-forward: "\f051";
-@fa-var-stethoscope: "\f0f1";
-@fa-var-sticky-note: "\f249";
-@fa-var-sticky-note-o: "\f24a";
-@fa-var-stop: "\f04d";
-@fa-var-stop-circle: "\f28d";
-@fa-var-stop-circle-o: "\f28e";
-@fa-var-street-view: "\f21d";
-@fa-var-strikethrough: "\f0cc";
-@fa-var-stumbleupon: "\f1a4";
-@fa-var-stumbleupon-circle: "\f1a3";
-@fa-var-subscript: "\f12c";
-@fa-var-subway: "\f239";
-@fa-var-suitcase: "\f0f2";
-@fa-var-sun-o: "\f185";
-@fa-var-superpowers: "\f2dd";
-@fa-var-superscript: "\f12b";
-@fa-var-support: "\f1cd";
-@fa-var-table: "\f0ce";
-@fa-var-tablet: "\f10a";
-@fa-var-tachometer: "\f0e4";
-@fa-var-tag: "\f02b";
-@fa-var-tags: "\f02c";
-@fa-var-tasks: "\f0ae";
-@fa-var-taxi: "\f1ba";
-@fa-var-telegram: "\f2c6";
-@fa-var-television: "\f26c";
-@fa-var-tencent-weibo: "\f1d5";
-@fa-var-terminal: "\f120";
-@fa-var-text-height: "\f034";
-@fa-var-text-width: "\f035";
-@fa-var-th: "\f00a";
-@fa-var-th-large: "\f009";
-@fa-var-th-list: "\f00b";
-@fa-var-themeisle: "\f2b2";
-@fa-var-thermometer: "\f2c7";
-@fa-var-thermometer-0: "\f2cb";
-@fa-var-thermometer-1: "\f2ca";
-@fa-var-thermometer-2: "\f2c9";
-@fa-var-thermometer-3: "\f2c8";
-@fa-var-thermometer-4: "\f2c7";
-@fa-var-thermometer-empty: "\f2cb";
-@fa-var-thermometer-full: "\f2c7";
-@fa-var-thermometer-half: "\f2c9";
-@fa-var-thermometer-quarter: "\f2ca";
-@fa-var-thermometer-three-quarters: "\f2c8";
-@fa-var-thumb-tack: "\f08d";
-@fa-var-thumbs-down: "\f165";
-@fa-var-thumbs-o-down: "\f088";
-@fa-var-thumbs-o-up: "\f087";
-@fa-var-thumbs-up: "\f164";
-@fa-var-ticket: "\f145";
-@fa-var-times: "\f00d";
-@fa-var-times-circle: "\f057";
-@fa-var-times-circle-o: "\f05c";
-@fa-var-times-rectangle: "\f2d3";
-@fa-var-times-rectangle-o: "\f2d4";
-@fa-var-tint: "\f043";
-@fa-var-toggle-down: "\f150";
-@fa-var-toggle-left: "\f191";
-@fa-var-toggle-off: "\f204";
-@fa-var-toggle-on: "\f205";
-@fa-var-toggle-right: "\f152";
-@fa-var-toggle-up: "\f151";
-@fa-var-trademark: "\f25c";
-@fa-var-train: "\f238";
-@fa-var-transgender: "\f224";
-@fa-var-transgender-alt: "\f225";
-@fa-var-trash: "\f1f8";
-@fa-var-trash-o: "\f014";
-@fa-var-tree: "\f1bb";
-@fa-var-trello: "\f181";
-@fa-var-tripadvisor: "\f262";
-@fa-var-trophy: "\f091";
-@fa-var-truck: "\f0d1";
-@fa-var-try: "\f195";
-@fa-var-tty: "\f1e4";
-@fa-var-tumblr: "\f173";
-@fa-var-tumblr-square: "\f174";
-@fa-var-turkish-lira: "\f195";
-@fa-var-tv: "\f26c";
-@fa-var-twitch: "\f1e8";
-@fa-var-twitter: "\f099";
-@fa-var-twitter-square: "\f081";
-@fa-var-umbrella: "\f0e9";
-@fa-var-underline: "\f0cd";
-@fa-var-undo: "\f0e2";
-@fa-var-universal-access: "\f29a";
-@fa-var-university: "\f19c";
-@fa-var-unlink: "\f127";
-@fa-var-unlock: "\f09c";
-@fa-var-unlock-alt: "\f13e";
-@fa-var-unsorted: "\f0dc";
-@fa-var-upload: "\f093";
-@fa-var-usb: "\f287";
-@fa-var-usd: "\f155";
-@fa-var-user: "\f007";
-@fa-var-user-circle: "\f2bd";
-@fa-var-user-circle-o: "\f2be";
-@fa-var-user-md: "\f0f0";
-@fa-var-user-o: "\f2c0";
-@fa-var-user-plus: "\f234";
-@fa-var-user-secret: "\f21b";
-@fa-var-user-times: "\f235";
-@fa-var-users: "\f0c0";
-@fa-var-vcard: "\f2bb";
-@fa-var-vcard-o: "\f2bc";
-@fa-var-venus: "\f221";
-@fa-var-venus-double: "\f226";
-@fa-var-venus-mars: "\f228";
-@fa-var-viacoin: "\f237";
-@fa-var-viadeo: "\f2a9";
-@fa-var-viadeo-square: "\f2aa";
-@fa-var-video-camera: "\f03d";
-@fa-var-vimeo: "\f27d";
-@fa-var-vimeo-square: "\f194";
-@fa-var-vine: "\f1ca";
-@fa-var-vk: "\f189";
-@fa-var-volume-control-phone: "\f2a0";
-@fa-var-volume-down: "\f027";
-@fa-var-volume-off: "\f026";
-@fa-var-volume-up: "\f028";
-@fa-var-warning: "\f071";
-@fa-var-wechat: "\f1d7";
-@fa-var-weibo: "\f18a";
-@fa-var-weixin: "\f1d7";
-@fa-var-whatsapp: "\f232";
-@fa-var-wheelchair: "\f193";
-@fa-var-wheelchair-alt: "\f29b";
-@fa-var-wifi: "\f1eb";
-@fa-var-wikipedia-w: "\f266";
-@fa-var-window-close: "\f2d3";
-@fa-var-window-close-o: "\f2d4";
-@fa-var-window-maximize: "\f2d0";
-@fa-var-window-minimize: "\f2d1";
-@fa-var-window-restore: "\f2d2";
-@fa-var-windows: "\f17a";
-@fa-var-won: "\f159";
-@fa-var-wordpress: "\f19a";
-@fa-var-wpbeginner: "\f297";
-@fa-var-wpexplorer: "\f2de";
-@fa-var-wpforms: "\f298";
-@fa-var-wrench: "\f0ad";
-@fa-var-xing: "\f168";
-@fa-var-xing-square: "\f169";
-@fa-var-y-combinator: "\f23b";
-@fa-var-y-combinator-square: "\f1d4";
-@fa-var-yahoo: "\f19e";
-@fa-var-yc: "\f23b";
-@fa-var-yc-square: "\f1d4";
-@fa-var-yelp: "\f1e9";
-@fa-var-yen: "\f157";
-@fa-var-yoast: "\f2b1";
-@fa-var-youtube: "\f167";
-@fa-var-youtube-play: "\f16a";
-@fa-var-youtube-square: "\f166";
-
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_animated.scss b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_animated.scss
deleted file mode 100644
index 8a020dbfff..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_animated.scss
+++ /dev/null
@@ -1,34 +0,0 @@
-// Spinning Icons
-// --------------------------
-
-.#{$fa-css-prefix}-spin {
- -webkit-animation: fa-spin 2s infinite linear;
- animation: fa-spin 2s infinite linear;
-}
-
-.#{$fa-css-prefix}-pulse {
- -webkit-animation: fa-spin 1s infinite steps(8);
- animation: fa-spin 1s infinite steps(8);
-}
-
-@-webkit-keyframes fa-spin {
- 0% {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- 100% {
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-
-@keyframes fa-spin {
- 0% {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- 100% {
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_bordered-pulled.scss b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_bordered-pulled.scss
deleted file mode 100644
index d4b85a02f2..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_bordered-pulled.scss
+++ /dev/null
@@ -1,25 +0,0 @@
-// Bordered & Pulled
-// -------------------------
-
-.#{$fa-css-prefix}-border {
- padding: .2em .25em .15em;
- border: solid .08em $fa-border-color;
- border-radius: .1em;
-}
-
-.#{$fa-css-prefix}-pull-left { float: left; }
-.#{$fa-css-prefix}-pull-right { float: right; }
-
-.#{$fa-css-prefix} {
- &.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
- &.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
-}
-
-/* Deprecated as of 4.4.0 */
-.pull-right { float: right; }
-.pull-left { float: left; }
-
-.#{$fa-css-prefix} {
- &.pull-left { margin-right: .3em; }
- &.pull-right { margin-left: .3em; }
-}
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_core.scss b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_core.scss
deleted file mode 100644
index 7425ef85fc..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_core.scss
+++ /dev/null
@@ -1,12 +0,0 @@
-// Base Class Definition
-// -------------------------
-
-.#{$fa-css-prefix} {
- display: inline-block;
- font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
- font-size: inherit; // can't have font-size inherit on line above, so need to override
- text-rendering: auto; // optimizelegibility throws things off #1094
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-
-}
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_fixed-width.scss b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_fixed-width.scss
deleted file mode 100644
index b221c98133..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_fixed-width.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-// Fixed Width Icons
-// -------------------------
-.#{$fa-css-prefix}-fw {
- width: (18em / 14);
- text-align: center;
-}
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_icons.scss b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_icons.scss
deleted file mode 100644
index e63e702c4d..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_icons.scss
+++ /dev/null
@@ -1,789 +0,0 @@
-/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
- readers do not read off random characters that represent icons */
-
-.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; }
-.#{$fa-css-prefix}-music:before { content: $fa-var-music; }
-.#{$fa-css-prefix}-search:before { content: $fa-var-search; }
-.#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; }
-.#{$fa-css-prefix}-heart:before { content: $fa-var-heart; }
-.#{$fa-css-prefix}-star:before { content: $fa-var-star; }
-.#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; }
-.#{$fa-css-prefix}-user:before { content: $fa-var-user; }
-.#{$fa-css-prefix}-film:before { content: $fa-var-film; }
-.#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; }
-.#{$fa-css-prefix}-th:before { content: $fa-var-th; }
-.#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; }
-.#{$fa-css-prefix}-check:before { content: $fa-var-check; }
-.#{$fa-css-prefix}-remove:before,
-.#{$fa-css-prefix}-close:before,
-.#{$fa-css-prefix}-times:before { content: $fa-var-times; }
-.#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; }
-.#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; }
-.#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; }
-.#{$fa-css-prefix}-signal:before { content: $fa-var-signal; }
-.#{$fa-css-prefix}-gear:before,
-.#{$fa-css-prefix}-cog:before { content: $fa-var-cog; }
-.#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; }
-.#{$fa-css-prefix}-home:before { content: $fa-var-home; }
-.#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; }
-.#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; }
-.#{$fa-css-prefix}-road:before { content: $fa-var-road; }
-.#{$fa-css-prefix}-download:before { content: $fa-var-download; }
-.#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; }
-.#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; }
-.#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; }
-.#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; }
-.#{$fa-css-prefix}-rotate-right:before,
-.#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; }
-.#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; }
-.#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; }
-.#{$fa-css-prefix}-lock:before { content: $fa-var-lock; }
-.#{$fa-css-prefix}-flag:before { content: $fa-var-flag; }
-.#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; }
-.#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; }
-.#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; }
-.#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; }
-.#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; }
-.#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; }
-.#{$fa-css-prefix}-tag:before { content: $fa-var-tag; }
-.#{$fa-css-prefix}-tags:before { content: $fa-var-tags; }
-.#{$fa-css-prefix}-book:before { content: $fa-var-book; }
-.#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; }
-.#{$fa-css-prefix}-print:before { content: $fa-var-print; }
-.#{$fa-css-prefix}-camera:before { content: $fa-var-camera; }
-.#{$fa-css-prefix}-font:before { content: $fa-var-font; }
-.#{$fa-css-prefix}-bold:before { content: $fa-var-bold; }
-.#{$fa-css-prefix}-italic:before { content: $fa-var-italic; }
-.#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; }
-.#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; }
-.#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; }
-.#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; }
-.#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; }
-.#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; }
-.#{$fa-css-prefix}-list:before { content: $fa-var-list; }
-.#{$fa-css-prefix}-dedent:before,
-.#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; }
-.#{$fa-css-prefix}-indent:before { content: $fa-var-indent; }
-.#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; }
-.#{$fa-css-prefix}-photo:before,
-.#{$fa-css-prefix}-image:before,
-.#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; }
-.#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; }
-.#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; }
-.#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; }
-.#{$fa-css-prefix}-tint:before { content: $fa-var-tint; }
-.#{$fa-css-prefix}-edit:before,
-.#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; }
-.#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; }
-.#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; }
-.#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; }
-.#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; }
-.#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; }
-.#{$fa-css-prefix}-backward:before { content: $fa-var-backward; }
-.#{$fa-css-prefix}-play:before { content: $fa-var-play; }
-.#{$fa-css-prefix}-pause:before { content: $fa-var-pause; }
-.#{$fa-css-prefix}-stop:before { content: $fa-var-stop; }
-.#{$fa-css-prefix}-forward:before { content: $fa-var-forward; }
-.#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; }
-.#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; }
-.#{$fa-css-prefix}-eject:before { content: $fa-var-eject; }
-.#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; }
-.#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; }
-.#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; }
-.#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; }
-.#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; }
-.#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; }
-.#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; }
-.#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; }
-.#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; }
-.#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; }
-.#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; }
-.#{$fa-css-prefix}-ban:before { content: $fa-var-ban; }
-.#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; }
-.#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; }
-.#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; }
-.#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; }
-.#{$fa-css-prefix}-mail-forward:before,
-.#{$fa-css-prefix}-share:before { content: $fa-var-share; }
-.#{$fa-css-prefix}-expand:before { content: $fa-var-expand; }
-.#{$fa-css-prefix}-compress:before { content: $fa-var-compress; }
-.#{$fa-css-prefix}-plus:before { content: $fa-var-plus; }
-.#{$fa-css-prefix}-minus:before { content: $fa-var-minus; }
-.#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; }
-.#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; }
-.#{$fa-css-prefix}-gift:before { content: $fa-var-gift; }
-.#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; }
-.#{$fa-css-prefix}-fire:before { content: $fa-var-fire; }
-.#{$fa-css-prefix}-eye:before { content: $fa-var-eye; }
-.#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; }
-.#{$fa-css-prefix}-warning:before,
-.#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; }
-.#{$fa-css-prefix}-plane:before { content: $fa-var-plane; }
-.#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; }
-.#{$fa-css-prefix}-random:before { content: $fa-var-random; }
-.#{$fa-css-prefix}-comment:before { content: $fa-var-comment; }
-.#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; }
-.#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; }
-.#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; }
-.#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; }
-.#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; }
-.#{$fa-css-prefix}-folder:before { content: $fa-var-folder; }
-.#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; }
-.#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; }
-.#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; }
-.#{$fa-css-prefix}-bar-chart-o:before,
-.#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; }
-.#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; }
-.#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; }
-.#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; }
-.#{$fa-css-prefix}-key:before { content: $fa-var-key; }
-.#{$fa-css-prefix}-gears:before,
-.#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; }
-.#{$fa-css-prefix}-comments:before { content: $fa-var-comments; }
-.#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; }
-.#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; }
-.#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; }
-.#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; }
-.#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; }
-.#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; }
-.#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; }
-.#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; }
-.#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; }
-.#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; }
-.#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; }
-.#{$fa-css-prefix}-upload:before { content: $fa-var-upload; }
-.#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; }
-.#{$fa-css-prefix}-phone:before { content: $fa-var-phone; }
-.#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; }
-.#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; }
-.#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; }
-.#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; }
-.#{$fa-css-prefix}-facebook-f:before,
-.#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; }
-.#{$fa-css-prefix}-github:before { content: $fa-var-github; }
-.#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; }
-.#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; }
-.#{$fa-css-prefix}-feed:before,
-.#{$fa-css-prefix}-rss:before { content: $fa-var-rss; }
-.#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; }
-.#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; }
-.#{$fa-css-prefix}-bell:before { content: $fa-var-bell; }
-.#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; }
-.#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; }
-.#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; }
-.#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; }
-.#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; }
-.#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; }
-.#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; }
-.#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; }
-.#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; }
-.#{$fa-css-prefix}-globe:before { content: $fa-var-globe; }
-.#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; }
-.#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; }
-.#{$fa-css-prefix}-filter:before { content: $fa-var-filter; }
-.#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; }
-.#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; }
-.#{$fa-css-prefix}-group:before,
-.#{$fa-css-prefix}-users:before { content: $fa-var-users; }
-.#{$fa-css-prefix}-chain:before,
-.#{$fa-css-prefix}-link:before { content: $fa-var-link; }
-.#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; }
-.#{$fa-css-prefix}-flask:before { content: $fa-var-flask; }
-.#{$fa-css-prefix}-cut:before,
-.#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; }
-.#{$fa-css-prefix}-copy:before,
-.#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; }
-.#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; }
-.#{$fa-css-prefix}-save:before,
-.#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; }
-.#{$fa-css-prefix}-square:before { content: $fa-var-square; }
-.#{$fa-css-prefix}-navicon:before,
-.#{$fa-css-prefix}-reorder:before,
-.#{$fa-css-prefix}-bars:before { content: $fa-var-bars; }
-.#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; }
-.#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; }
-.#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; }
-.#{$fa-css-prefix}-underline:before { content: $fa-var-underline; }
-.#{$fa-css-prefix}-table:before { content: $fa-var-table; }
-.#{$fa-css-prefix}-magic:before { content: $fa-var-magic; }
-.#{$fa-css-prefix}-truck:before { content: $fa-var-truck; }
-.#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; }
-.#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; }
-.#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; }
-.#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; }
-.#{$fa-css-prefix}-money:before { content: $fa-var-money; }
-.#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; }
-.#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; }
-.#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; }
-.#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; }
-.#{$fa-css-prefix}-columns:before { content: $fa-var-columns; }
-.#{$fa-css-prefix}-unsorted:before,
-.#{$fa-css-prefix}-sort:before { content: $fa-var-sort; }
-.#{$fa-css-prefix}-sort-down:before,
-.#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; }
-.#{$fa-css-prefix}-sort-up:before,
-.#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; }
-.#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; }
-.#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; }
-.#{$fa-css-prefix}-rotate-left:before,
-.#{$fa-css-prefix}-undo:before { content: $fa-var-undo; }
-.#{$fa-css-prefix}-legal:before,
-.#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; }
-.#{$fa-css-prefix}-dashboard:before,
-.#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; }
-.#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; }
-.#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; }
-.#{$fa-css-prefix}-flash:before,
-.#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; }
-.#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; }
-.#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; }
-.#{$fa-css-prefix}-paste:before,
-.#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; }
-.#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; }
-.#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; }
-.#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; }
-.#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; }
-.#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; }
-.#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; }
-.#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; }
-.#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; }
-.#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; }
-.#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; }
-.#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; }
-.#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; }
-.#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; }
-.#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; }
-.#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; }
-.#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; }
-.#{$fa-css-prefix}-beer:before { content: $fa-var-beer; }
-.#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; }
-.#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; }
-.#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; }
-.#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; }
-.#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; }
-.#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; }
-.#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; }
-.#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; }
-.#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; }
-.#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; }
-.#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; }
-.#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; }
-.#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; }
-.#{$fa-css-prefix}-mobile-phone:before,
-.#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; }
-.#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; }
-.#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; }
-.#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; }
-.#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; }
-.#{$fa-css-prefix}-circle:before { content: $fa-var-circle; }
-.#{$fa-css-prefix}-mail-reply:before,
-.#{$fa-css-prefix}-reply:before { content: $fa-var-reply; }
-.#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; }
-.#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; }
-.#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; }
-.#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; }
-.#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; }
-.#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; }
-.#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; }
-.#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; }
-.#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; }
-.#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; }
-.#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; }
-.#{$fa-css-prefix}-code:before { content: $fa-var-code; }
-.#{$fa-css-prefix}-mail-reply-all:before,
-.#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; }
-.#{$fa-css-prefix}-star-half-empty:before,
-.#{$fa-css-prefix}-star-half-full:before,
-.#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; }
-.#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; }
-.#{$fa-css-prefix}-crop:before { content: $fa-var-crop; }
-.#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; }
-.#{$fa-css-prefix}-unlink:before,
-.#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; }
-.#{$fa-css-prefix}-question:before { content: $fa-var-question; }
-.#{$fa-css-prefix}-info:before { content: $fa-var-info; }
-.#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; }
-.#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; }
-.#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; }
-.#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; }
-.#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; }
-.#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; }
-.#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; }
-.#{$fa-css-prefix}-shield:before { content: $fa-var-shield; }
-.#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; }
-.#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; }
-.#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; }
-.#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; }
-.#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; }
-.#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; }
-.#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; }
-.#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; }
-.#{$fa-css-prefix}-html5:before { content: $fa-var-html5; }
-.#{$fa-css-prefix}-css3:before { content: $fa-var-css3; }
-.#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; }
-.#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; }
-.#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; }
-.#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; }
-.#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; }
-.#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; }
-.#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; }
-.#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; }
-.#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; }
-.#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; }
-.#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; }
-.#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; }
-.#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; }
-.#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; }
-.#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; }
-.#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; }
-.#{$fa-css-prefix}-compass:before { content: $fa-var-compass; }
-.#{$fa-css-prefix}-toggle-down:before,
-.#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; }
-.#{$fa-css-prefix}-toggle-up:before,
-.#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; }
-.#{$fa-css-prefix}-toggle-right:before,
-.#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; }
-.#{$fa-css-prefix}-euro:before,
-.#{$fa-css-prefix}-eur:before { content: $fa-var-eur; }
-.#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; }
-.#{$fa-css-prefix}-dollar:before,
-.#{$fa-css-prefix}-usd:before { content: $fa-var-usd; }
-.#{$fa-css-prefix}-rupee:before,
-.#{$fa-css-prefix}-inr:before { content: $fa-var-inr; }
-.#{$fa-css-prefix}-cny:before,
-.#{$fa-css-prefix}-rmb:before,
-.#{$fa-css-prefix}-yen:before,
-.#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; }
-.#{$fa-css-prefix}-ruble:before,
-.#{$fa-css-prefix}-rouble:before,
-.#{$fa-css-prefix}-rub:before { content: $fa-var-rub; }
-.#{$fa-css-prefix}-won:before,
-.#{$fa-css-prefix}-krw:before { content: $fa-var-krw; }
-.#{$fa-css-prefix}-bitcoin:before,
-.#{$fa-css-prefix}-btc:before { content: $fa-var-btc; }
-.#{$fa-css-prefix}-file:before { content: $fa-var-file; }
-.#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; }
-.#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; }
-.#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; }
-.#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; }
-.#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; }
-.#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; }
-.#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; }
-.#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; }
-.#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; }
-.#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; }
-.#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; }
-.#{$fa-css-prefix}-xing:before { content: $fa-var-xing; }
-.#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; }
-.#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; }
-.#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; }
-.#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; }
-.#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; }
-.#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; }
-.#{$fa-css-prefix}-adn:before { content: $fa-var-adn; }
-.#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; }
-.#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; }
-.#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; }
-.#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; }
-.#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; }
-.#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; }
-.#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; }
-.#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; }
-.#{$fa-css-prefix}-apple:before { content: $fa-var-apple; }
-.#{$fa-css-prefix}-windows:before { content: $fa-var-windows; }
-.#{$fa-css-prefix}-android:before { content: $fa-var-android; }
-.#{$fa-css-prefix}-linux:before { content: $fa-var-linux; }
-.#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; }
-.#{$fa-css-prefix}-skype:before { content: $fa-var-skype; }
-.#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; }
-.#{$fa-css-prefix}-trello:before { content: $fa-var-trello; }
-.#{$fa-css-prefix}-female:before { content: $fa-var-female; }
-.#{$fa-css-prefix}-male:before { content: $fa-var-male; }
-.#{$fa-css-prefix}-gittip:before,
-.#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; }
-.#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; }
-.#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; }
-.#{$fa-css-prefix}-archive:before { content: $fa-var-archive; }
-.#{$fa-css-prefix}-bug:before { content: $fa-var-bug; }
-.#{$fa-css-prefix}-vk:before { content: $fa-var-vk; }
-.#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; }
-.#{$fa-css-prefix}-renren:before { content: $fa-var-renren; }
-.#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; }
-.#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; }
-.#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; }
-.#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; }
-.#{$fa-css-prefix}-toggle-left:before,
-.#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; }
-.#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; }
-.#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; }
-.#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; }
-.#{$fa-css-prefix}-turkish-lira:before,
-.#{$fa-css-prefix}-try:before { content: $fa-var-try; }
-.#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; }
-.#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; }
-.#{$fa-css-prefix}-slack:before { content: $fa-var-slack; }
-.#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; }
-.#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; }
-.#{$fa-css-prefix}-openid:before { content: $fa-var-openid; }
-.#{$fa-css-prefix}-institution:before,
-.#{$fa-css-prefix}-bank:before,
-.#{$fa-css-prefix}-university:before { content: $fa-var-university; }
-.#{$fa-css-prefix}-mortar-board:before,
-.#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; }
-.#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; }
-.#{$fa-css-prefix}-google:before { content: $fa-var-google; }
-.#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; }
-.#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; }
-.#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; }
-.#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; }
-.#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; }
-.#{$fa-css-prefix}-digg:before { content: $fa-var-digg; }
-.#{$fa-css-prefix}-pied-piper-pp:before { content: $fa-var-pied-piper-pp; }
-.#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; }
-.#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; }
-.#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; }
-.#{$fa-css-prefix}-language:before { content: $fa-var-language; }
-.#{$fa-css-prefix}-fax:before { content: $fa-var-fax; }
-.#{$fa-css-prefix}-building:before { content: $fa-var-building; }
-.#{$fa-css-prefix}-child:before { content: $fa-var-child; }
-.#{$fa-css-prefix}-paw:before { content: $fa-var-paw; }
-.#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; }
-.#{$fa-css-prefix}-cube:before { content: $fa-var-cube; }
-.#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; }
-.#{$fa-css-prefix}-behance:before { content: $fa-var-behance; }
-.#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; }
-.#{$fa-css-prefix}-steam:before { content: $fa-var-steam; }
-.#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; }
-.#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; }
-.#{$fa-css-prefix}-automobile:before,
-.#{$fa-css-prefix}-car:before { content: $fa-var-car; }
-.#{$fa-css-prefix}-cab:before,
-.#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; }
-.#{$fa-css-prefix}-tree:before { content: $fa-var-tree; }
-.#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; }
-.#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; }
-.#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; }
-.#{$fa-css-prefix}-database:before { content: $fa-var-database; }
-.#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; }
-.#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; }
-.#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; }
-.#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; }
-.#{$fa-css-prefix}-file-photo-o:before,
-.#{$fa-css-prefix}-file-picture-o:before,
-.#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; }
-.#{$fa-css-prefix}-file-zip-o:before,
-.#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; }
-.#{$fa-css-prefix}-file-sound-o:before,
-.#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; }
-.#{$fa-css-prefix}-file-movie-o:before,
-.#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; }
-.#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; }
-.#{$fa-css-prefix}-vine:before { content: $fa-var-vine; }
-.#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; }
-.#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; }
-.#{$fa-css-prefix}-life-bouy:before,
-.#{$fa-css-prefix}-life-buoy:before,
-.#{$fa-css-prefix}-life-saver:before,
-.#{$fa-css-prefix}-support:before,
-.#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; }
-.#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; }
-.#{$fa-css-prefix}-ra:before,
-.#{$fa-css-prefix}-resistance:before,
-.#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; }
-.#{$fa-css-prefix}-ge:before,
-.#{$fa-css-prefix}-empire:before { content: $fa-var-empire; }
-.#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; }
-.#{$fa-css-prefix}-git:before { content: $fa-var-git; }
-.#{$fa-css-prefix}-y-combinator-square:before,
-.#{$fa-css-prefix}-yc-square:before,
-.#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; }
-.#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; }
-.#{$fa-css-prefix}-qq:before { content: $fa-var-qq; }
-.#{$fa-css-prefix}-wechat:before,
-.#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; }
-.#{$fa-css-prefix}-send:before,
-.#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; }
-.#{$fa-css-prefix}-send-o:before,
-.#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; }
-.#{$fa-css-prefix}-history:before { content: $fa-var-history; }
-.#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; }
-.#{$fa-css-prefix}-header:before { content: $fa-var-header; }
-.#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; }
-.#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; }
-.#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; }
-.#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; }
-.#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; }
-.#{$fa-css-prefix}-soccer-ball-o:before,
-.#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; }
-.#{$fa-css-prefix}-tty:before { content: $fa-var-tty; }
-.#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; }
-.#{$fa-css-prefix}-plug:before { content: $fa-var-plug; }
-.#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; }
-.#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; }
-.#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; }
-.#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; }
-.#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; }
-.#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; }
-.#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; }
-.#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; }
-.#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; }
-.#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; }
-.#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; }
-.#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; }
-.#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; }
-.#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; }
-.#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; }
-.#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; }
-.#{$fa-css-prefix}-trash:before { content: $fa-var-trash; }
-.#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; }
-.#{$fa-css-prefix}-at:before { content: $fa-var-at; }
-.#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; }
-.#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; }
-.#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; }
-.#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; }
-.#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; }
-.#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; }
-.#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; }
-.#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; }
-.#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; }
-.#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; }
-.#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; }
-.#{$fa-css-prefix}-bus:before { content: $fa-var-bus; }
-.#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; }
-.#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; }
-.#{$fa-css-prefix}-cc:before { content: $fa-var-cc; }
-.#{$fa-css-prefix}-shekel:before,
-.#{$fa-css-prefix}-sheqel:before,
-.#{$fa-css-prefix}-ils:before { content: $fa-var-ils; }
-.#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; }
-.#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; }
-.#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; }
-.#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; }
-.#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; }
-.#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; }
-.#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; }
-.#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; }
-.#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; }
-.#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; }
-.#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; }
-.#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; }
-.#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; }
-.#{$fa-css-prefix}-ship:before { content: $fa-var-ship; }
-.#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; }
-.#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; }
-.#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; }
-.#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; }
-.#{$fa-css-prefix}-venus:before { content: $fa-var-venus; }
-.#{$fa-css-prefix}-mars:before { content: $fa-var-mars; }
-.#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; }
-.#{$fa-css-prefix}-intersex:before,
-.#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; }
-.#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; }
-.#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; }
-.#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; }
-.#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; }
-.#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; }
-.#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; }
-.#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; }
-.#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; }
-.#{$fa-css-prefix}-genderless:before { content: $fa-var-genderless; }
-.#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; }
-.#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; }
-.#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; }
-.#{$fa-css-prefix}-server:before { content: $fa-var-server; }
-.#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; }
-.#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; }
-.#{$fa-css-prefix}-hotel:before,
-.#{$fa-css-prefix}-bed:before { content: $fa-var-bed; }
-.#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; }
-.#{$fa-css-prefix}-train:before { content: $fa-var-train; }
-.#{$fa-css-prefix}-subway:before { content: $fa-var-subway; }
-.#{$fa-css-prefix}-medium:before { content: $fa-var-medium; }
-.#{$fa-css-prefix}-yc:before,
-.#{$fa-css-prefix}-y-combinator:before { content: $fa-var-y-combinator; }
-.#{$fa-css-prefix}-optin-monster:before { content: $fa-var-optin-monster; }
-.#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; }
-.#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; }
-.#{$fa-css-prefix}-battery-4:before,
-.#{$fa-css-prefix}-battery:before,
-.#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; }
-.#{$fa-css-prefix}-battery-3:before,
-.#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; }
-.#{$fa-css-prefix}-battery-2:before,
-.#{$fa-css-prefix}-battery-half:before { content: $fa-var-battery-half; }
-.#{$fa-css-prefix}-battery-1:before,
-.#{$fa-css-prefix}-battery-quarter:before { content: $fa-var-battery-quarter; }
-.#{$fa-css-prefix}-battery-0:before,
-.#{$fa-css-prefix}-battery-empty:before { content: $fa-var-battery-empty; }
-.#{$fa-css-prefix}-mouse-pointer:before { content: $fa-var-mouse-pointer; }
-.#{$fa-css-prefix}-i-cursor:before { content: $fa-var-i-cursor; }
-.#{$fa-css-prefix}-object-group:before { content: $fa-var-object-group; }
-.#{$fa-css-prefix}-object-ungroup:before { content: $fa-var-object-ungroup; }
-.#{$fa-css-prefix}-sticky-note:before { content: $fa-var-sticky-note; }
-.#{$fa-css-prefix}-sticky-note-o:before { content: $fa-var-sticky-note-o; }
-.#{$fa-css-prefix}-cc-jcb:before { content: $fa-var-cc-jcb; }
-.#{$fa-css-prefix}-cc-diners-club:before { content: $fa-var-cc-diners-club; }
-.#{$fa-css-prefix}-clone:before { content: $fa-var-clone; }
-.#{$fa-css-prefix}-balance-scale:before { content: $fa-var-balance-scale; }
-.#{$fa-css-prefix}-hourglass-o:before { content: $fa-var-hourglass-o; }
-.#{$fa-css-prefix}-hourglass-1:before,
-.#{$fa-css-prefix}-hourglass-start:before { content: $fa-var-hourglass-start; }
-.#{$fa-css-prefix}-hourglass-2:before,
-.#{$fa-css-prefix}-hourglass-half:before { content: $fa-var-hourglass-half; }
-.#{$fa-css-prefix}-hourglass-3:before,
-.#{$fa-css-prefix}-hourglass-end:before { content: $fa-var-hourglass-end; }
-.#{$fa-css-prefix}-hourglass:before { content: $fa-var-hourglass; }
-.#{$fa-css-prefix}-hand-grab-o:before,
-.#{$fa-css-prefix}-hand-rock-o:before { content: $fa-var-hand-rock-o; }
-.#{$fa-css-prefix}-hand-stop-o:before,
-.#{$fa-css-prefix}-hand-paper-o:before { content: $fa-var-hand-paper-o; }
-.#{$fa-css-prefix}-hand-scissors-o:before { content: $fa-var-hand-scissors-o; }
-.#{$fa-css-prefix}-hand-lizard-o:before { content: $fa-var-hand-lizard-o; }
-.#{$fa-css-prefix}-hand-spock-o:before { content: $fa-var-hand-spock-o; }
-.#{$fa-css-prefix}-hand-pointer-o:before { content: $fa-var-hand-pointer-o; }
-.#{$fa-css-prefix}-hand-peace-o:before { content: $fa-var-hand-peace-o; }
-.#{$fa-css-prefix}-trademark:before { content: $fa-var-trademark; }
-.#{$fa-css-prefix}-registered:before { content: $fa-var-registered; }
-.#{$fa-css-prefix}-creative-commons:before { content: $fa-var-creative-commons; }
-.#{$fa-css-prefix}-gg:before { content: $fa-var-gg; }
-.#{$fa-css-prefix}-gg-circle:before { content: $fa-var-gg-circle; }
-.#{$fa-css-prefix}-tripadvisor:before { content: $fa-var-tripadvisor; }
-.#{$fa-css-prefix}-odnoklassniki:before { content: $fa-var-odnoklassniki; }
-.#{$fa-css-prefix}-odnoklassniki-square:before { content: $fa-var-odnoklassniki-square; }
-.#{$fa-css-prefix}-get-pocket:before { content: $fa-var-get-pocket; }
-.#{$fa-css-prefix}-wikipedia-w:before { content: $fa-var-wikipedia-w; }
-.#{$fa-css-prefix}-safari:before { content: $fa-var-safari; }
-.#{$fa-css-prefix}-chrome:before { content: $fa-var-chrome; }
-.#{$fa-css-prefix}-firefox:before { content: $fa-var-firefox; }
-.#{$fa-css-prefix}-opera:before { content: $fa-var-opera; }
-.#{$fa-css-prefix}-internet-explorer:before { content: $fa-var-internet-explorer; }
-.#{$fa-css-prefix}-tv:before,
-.#{$fa-css-prefix}-television:before { content: $fa-var-television; }
-.#{$fa-css-prefix}-contao:before { content: $fa-var-contao; }
-.#{$fa-css-prefix}-500px:before { content: $fa-var-500px; }
-.#{$fa-css-prefix}-amazon:before { content: $fa-var-amazon; }
-.#{$fa-css-prefix}-calendar-plus-o:before { content: $fa-var-calendar-plus-o; }
-.#{$fa-css-prefix}-calendar-minus-o:before { content: $fa-var-calendar-minus-o; }
-.#{$fa-css-prefix}-calendar-times-o:before { content: $fa-var-calendar-times-o; }
-.#{$fa-css-prefix}-calendar-check-o:before { content: $fa-var-calendar-check-o; }
-.#{$fa-css-prefix}-industry:before { content: $fa-var-industry; }
-.#{$fa-css-prefix}-map-pin:before { content: $fa-var-map-pin; }
-.#{$fa-css-prefix}-map-signs:before { content: $fa-var-map-signs; }
-.#{$fa-css-prefix}-map-o:before { content: $fa-var-map-o; }
-.#{$fa-css-prefix}-map:before { content: $fa-var-map; }
-.#{$fa-css-prefix}-commenting:before { content: $fa-var-commenting; }
-.#{$fa-css-prefix}-commenting-o:before { content: $fa-var-commenting-o; }
-.#{$fa-css-prefix}-houzz:before { content: $fa-var-houzz; }
-.#{$fa-css-prefix}-vimeo:before { content: $fa-var-vimeo; }
-.#{$fa-css-prefix}-black-tie:before { content: $fa-var-black-tie; }
-.#{$fa-css-prefix}-fonticons:before { content: $fa-var-fonticons; }
-.#{$fa-css-prefix}-reddit-alien:before { content: $fa-var-reddit-alien; }
-.#{$fa-css-prefix}-edge:before { content: $fa-var-edge; }
-.#{$fa-css-prefix}-credit-card-alt:before { content: $fa-var-credit-card-alt; }
-.#{$fa-css-prefix}-codiepie:before { content: $fa-var-codiepie; }
-.#{$fa-css-prefix}-modx:before { content: $fa-var-modx; }
-.#{$fa-css-prefix}-fort-awesome:before { content: $fa-var-fort-awesome; }
-.#{$fa-css-prefix}-usb:before { content: $fa-var-usb; }
-.#{$fa-css-prefix}-product-hunt:before { content: $fa-var-product-hunt; }
-.#{$fa-css-prefix}-mixcloud:before { content: $fa-var-mixcloud; }
-.#{$fa-css-prefix}-scribd:before { content: $fa-var-scribd; }
-.#{$fa-css-prefix}-pause-circle:before { content: $fa-var-pause-circle; }
-.#{$fa-css-prefix}-pause-circle-o:before { content: $fa-var-pause-circle-o; }
-.#{$fa-css-prefix}-stop-circle:before { content: $fa-var-stop-circle; }
-.#{$fa-css-prefix}-stop-circle-o:before { content: $fa-var-stop-circle-o; }
-.#{$fa-css-prefix}-shopping-bag:before { content: $fa-var-shopping-bag; }
-.#{$fa-css-prefix}-shopping-basket:before { content: $fa-var-shopping-basket; }
-.#{$fa-css-prefix}-hashtag:before { content: $fa-var-hashtag; }
-.#{$fa-css-prefix}-bluetooth:before { content: $fa-var-bluetooth; }
-.#{$fa-css-prefix}-bluetooth-b:before { content: $fa-var-bluetooth-b; }
-.#{$fa-css-prefix}-percent:before { content: $fa-var-percent; }
-.#{$fa-css-prefix}-gitlab:before { content: $fa-var-gitlab; }
-.#{$fa-css-prefix}-wpbeginner:before { content: $fa-var-wpbeginner; }
-.#{$fa-css-prefix}-wpforms:before { content: $fa-var-wpforms; }
-.#{$fa-css-prefix}-envira:before { content: $fa-var-envira; }
-.#{$fa-css-prefix}-universal-access:before { content: $fa-var-universal-access; }
-.#{$fa-css-prefix}-wheelchair-alt:before { content: $fa-var-wheelchair-alt; }
-.#{$fa-css-prefix}-question-circle-o:before { content: $fa-var-question-circle-o; }
-.#{$fa-css-prefix}-blind:before { content: $fa-var-blind; }
-.#{$fa-css-prefix}-audio-description:before { content: $fa-var-audio-description; }
-.#{$fa-css-prefix}-volume-control-phone:before { content: $fa-var-volume-control-phone; }
-.#{$fa-css-prefix}-braille:before { content: $fa-var-braille; }
-.#{$fa-css-prefix}-assistive-listening-systems:before { content: $fa-var-assistive-listening-systems; }
-.#{$fa-css-prefix}-asl-interpreting:before,
-.#{$fa-css-prefix}-american-sign-language-interpreting:before { content: $fa-var-american-sign-language-interpreting; }
-.#{$fa-css-prefix}-deafness:before,
-.#{$fa-css-prefix}-hard-of-hearing:before,
-.#{$fa-css-prefix}-deaf:before { content: $fa-var-deaf; }
-.#{$fa-css-prefix}-glide:before { content: $fa-var-glide; }
-.#{$fa-css-prefix}-glide-g:before { content: $fa-var-glide-g; }
-.#{$fa-css-prefix}-signing:before,
-.#{$fa-css-prefix}-sign-language:before { content: $fa-var-sign-language; }
-.#{$fa-css-prefix}-low-vision:before { content: $fa-var-low-vision; }
-.#{$fa-css-prefix}-viadeo:before { content: $fa-var-viadeo; }
-.#{$fa-css-prefix}-viadeo-square:before { content: $fa-var-viadeo-square; }
-.#{$fa-css-prefix}-snapchat:before { content: $fa-var-snapchat; }
-.#{$fa-css-prefix}-snapchat-ghost:before { content: $fa-var-snapchat-ghost; }
-.#{$fa-css-prefix}-snapchat-square:before { content: $fa-var-snapchat-square; }
-.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; }
-.#{$fa-css-prefix}-first-order:before { content: $fa-var-first-order; }
-.#{$fa-css-prefix}-yoast:before { content: $fa-var-yoast; }
-.#{$fa-css-prefix}-themeisle:before { content: $fa-var-themeisle; }
-.#{$fa-css-prefix}-google-plus-circle:before,
-.#{$fa-css-prefix}-google-plus-official:before { content: $fa-var-google-plus-official; }
-.#{$fa-css-prefix}-fa:before,
-.#{$fa-css-prefix}-font-awesome:before { content: $fa-var-font-awesome; }
-.#{$fa-css-prefix}-handshake-o:before { content: $fa-var-handshake-o; }
-.#{$fa-css-prefix}-envelope-open:before { content: $fa-var-envelope-open; }
-.#{$fa-css-prefix}-envelope-open-o:before { content: $fa-var-envelope-open-o; }
-.#{$fa-css-prefix}-linode:before { content: $fa-var-linode; }
-.#{$fa-css-prefix}-address-book:before { content: $fa-var-address-book; }
-.#{$fa-css-prefix}-address-book-o:before { content: $fa-var-address-book-o; }
-.#{$fa-css-prefix}-vcard:before,
-.#{$fa-css-prefix}-address-card:before { content: $fa-var-address-card; }
-.#{$fa-css-prefix}-vcard-o:before,
-.#{$fa-css-prefix}-address-card-o:before { content: $fa-var-address-card-o; }
-.#{$fa-css-prefix}-user-circle:before { content: $fa-var-user-circle; }
-.#{$fa-css-prefix}-user-circle-o:before { content: $fa-var-user-circle-o; }
-.#{$fa-css-prefix}-user-o:before { content: $fa-var-user-o; }
-.#{$fa-css-prefix}-id-badge:before { content: $fa-var-id-badge; }
-.#{$fa-css-prefix}-drivers-license:before,
-.#{$fa-css-prefix}-id-card:before { content: $fa-var-id-card; }
-.#{$fa-css-prefix}-drivers-license-o:before,
-.#{$fa-css-prefix}-id-card-o:before { content: $fa-var-id-card-o; }
-.#{$fa-css-prefix}-quora:before { content: $fa-var-quora; }
-.#{$fa-css-prefix}-free-code-camp:before { content: $fa-var-free-code-camp; }
-.#{$fa-css-prefix}-telegram:before { content: $fa-var-telegram; }
-.#{$fa-css-prefix}-thermometer-4:before,
-.#{$fa-css-prefix}-thermometer:before,
-.#{$fa-css-prefix}-thermometer-full:before { content: $fa-var-thermometer-full; }
-.#{$fa-css-prefix}-thermometer-3:before,
-.#{$fa-css-prefix}-thermometer-three-quarters:before { content: $fa-var-thermometer-three-quarters; }
-.#{$fa-css-prefix}-thermometer-2:before,
-.#{$fa-css-prefix}-thermometer-half:before { content: $fa-var-thermometer-half; }
-.#{$fa-css-prefix}-thermometer-1:before,
-.#{$fa-css-prefix}-thermometer-quarter:before { content: $fa-var-thermometer-quarter; }
-.#{$fa-css-prefix}-thermometer-0:before,
-.#{$fa-css-prefix}-thermometer-empty:before { content: $fa-var-thermometer-empty; }
-.#{$fa-css-prefix}-shower:before { content: $fa-var-shower; }
-.#{$fa-css-prefix}-bathtub:before,
-.#{$fa-css-prefix}-s15:before,
-.#{$fa-css-prefix}-bath:before { content: $fa-var-bath; }
-.#{$fa-css-prefix}-podcast:before { content: $fa-var-podcast; }
-.#{$fa-css-prefix}-window-maximize:before { content: $fa-var-window-maximize; }
-.#{$fa-css-prefix}-window-minimize:before { content: $fa-var-window-minimize; }
-.#{$fa-css-prefix}-window-restore:before { content: $fa-var-window-restore; }
-.#{$fa-css-prefix}-times-rectangle:before,
-.#{$fa-css-prefix}-window-close:before { content: $fa-var-window-close; }
-.#{$fa-css-prefix}-times-rectangle-o:before,
-.#{$fa-css-prefix}-window-close-o:before { content: $fa-var-window-close-o; }
-.#{$fa-css-prefix}-bandcamp:before { content: $fa-var-bandcamp; }
-.#{$fa-css-prefix}-grav:before { content: $fa-var-grav; }
-.#{$fa-css-prefix}-etsy:before { content: $fa-var-etsy; }
-.#{$fa-css-prefix}-imdb:before { content: $fa-var-imdb; }
-.#{$fa-css-prefix}-ravelry:before { content: $fa-var-ravelry; }
-.#{$fa-css-prefix}-eercast:before { content: $fa-var-eercast; }
-.#{$fa-css-prefix}-microchip:before { content: $fa-var-microchip; }
-.#{$fa-css-prefix}-snowflake-o:before { content: $fa-var-snowflake-o; }
-.#{$fa-css-prefix}-superpowers:before { content: $fa-var-superpowers; }
-.#{$fa-css-prefix}-wpexplorer:before { content: $fa-var-wpexplorer; }
-.#{$fa-css-prefix}-meetup:before { content: $fa-var-meetup; }
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_larger.scss b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_larger.scss
deleted file mode 100644
index 41e9a8184a..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_larger.scss
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon Sizes
-// -------------------------
-
-/* makes the font 33% larger relative to the icon container */
-.#{$fa-css-prefix}-lg {
- font-size: (4em / 3);
- line-height: (3em / 4);
- vertical-align: -15%;
-}
-.#{$fa-css-prefix}-2x { font-size: 2em; }
-.#{$fa-css-prefix}-3x { font-size: 3em; }
-.#{$fa-css-prefix}-4x { font-size: 4em; }
-.#{$fa-css-prefix}-5x { font-size: 5em; }
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_list.scss b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_list.scss
deleted file mode 100644
index 7d1e4d54d6..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_list.scss
+++ /dev/null
@@ -1,19 +0,0 @@
-// List Icons
-// -------------------------
-
-.#{$fa-css-prefix}-ul {
- padding-left: 0;
- margin-left: $fa-li-width;
- list-style-type: none;
- > li { position: relative; }
-}
-.#{$fa-css-prefix}-li {
- position: absolute;
- left: -$fa-li-width;
- width: $fa-li-width;
- top: (2em / 14);
- text-align: center;
- &.#{$fa-css-prefix}-lg {
- left: -$fa-li-width + (4em / 14);
- }
-}
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_mixins.scss b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_mixins.scss
deleted file mode 100644
index c3bbd5745d..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_mixins.scss
+++ /dev/null
@@ -1,60 +0,0 @@
-// Mixins
-// --------------------------
-
-@mixin fa-icon() {
- display: inline-block;
- font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
- font-size: inherit; // can't have font-size inherit on line above, so need to override
- text-rendering: auto; // optimizelegibility throws things off #1094
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-
-}
-
-@mixin fa-icon-rotate($degrees, $rotation) {
- -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})";
- -webkit-transform: rotate($degrees);
- -ms-transform: rotate($degrees);
- transform: rotate($degrees);
-}
-
-@mixin fa-icon-flip($horiz, $vert, $rotation) {
- -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)";
- -webkit-transform: scale($horiz, $vert);
- -ms-transform: scale($horiz, $vert);
- transform: scale($horiz, $vert);
-}
-
-
-// Only display content to screen readers. A la Bootstrap 4.
-//
-// See: http://a11yproject.com/posts/how-to-hide-content/
-
-@mixin sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- padding: 0;
- margin: -1px;
- overflow: hidden;
- clip: rect(0,0,0,0);
- border: 0;
-}
-
-// Use in conjunction with .sr-only to only display content when it's focused.
-//
-// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
-//
-// Credit: HTML5 Boilerplate
-
-@mixin sr-only-focusable {
- &:active,
- &:focus {
- position: static;
- width: auto;
- height: auto;
- margin: 0;
- overflow: visible;
- clip: auto;
- }
-}
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_path.scss b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_path.scss
deleted file mode 100644
index bb457c23a8..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_path.scss
+++ /dev/null
@@ -1,15 +0,0 @@
-/* FONT PATH
- * -------------------------- */
-
-@font-face {
- font-family: 'FontAwesome';
- src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');
- src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),
- url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),
- url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),
- url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),
- url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');
-// src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
- font-weight: normal;
- font-style: normal;
-}
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_rotated-flipped.scss b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_rotated-flipped.scss
deleted file mode 100644
index a3558fd09c..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_rotated-flipped.scss
+++ /dev/null
@@ -1,20 +0,0 @@
-// Rotated & Flipped Icons
-// -------------------------
-
-.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); }
-.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
-.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
-
-.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
-.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); }
-
-// Hook for IE8-9
-// -------------------------
-
-:root .#{$fa-css-prefix}-rotate-90,
-:root .#{$fa-css-prefix}-rotate-180,
-:root .#{$fa-css-prefix}-rotate-270,
-:root .#{$fa-css-prefix}-flip-horizontal,
-:root .#{$fa-css-prefix}-flip-vertical {
- filter: none;
-}
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_screen-reader.scss b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_screen-reader.scss
deleted file mode 100644
index 637426f0da..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_screen-reader.scss
+++ /dev/null
@@ -1,5 +0,0 @@
-// Screen Readers
-// -------------------------
-
-.sr-only { @include sr-only(); }
-.sr-only-focusable { @include sr-only-focusable(); }
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_stacked.scss b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_stacked.scss
deleted file mode 100644
index aef7403660..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_stacked.scss
+++ /dev/null
@@ -1,20 +0,0 @@
-// Stacked Icons
-// -------------------------
-
-.#{$fa-css-prefix}-stack {
- position: relative;
- display: inline-block;
- width: 2em;
- height: 2em;
- line-height: 2em;
- vertical-align: middle;
-}
-.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {
- position: absolute;
- left: 0;
- width: 100%;
- text-align: center;
-}
-.#{$fa-css-prefix}-stack-1x { line-height: inherit; }
-.#{$fa-css-prefix}-stack-2x { font-size: 2em; }
-.#{$fa-css-prefix}-inverse { color: $fa-inverse; }
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_variables.scss b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_variables.scss
deleted file mode 100644
index 498fc4a087..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/_variables.scss
+++ /dev/null
@@ -1,800 +0,0 @@
-// Variables
-// --------------------------
-
-$fa-font-path: "../fonts" !default;
-$fa-font-size-base: 14px !default;
-$fa-line-height-base: 1 !default;
-//$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts" !default; // for referencing Bootstrap CDN font files directly
-$fa-css-prefix: fa !default;
-$fa-version: "4.7.0" !default;
-$fa-border-color: #eee !default;
-$fa-inverse: #fff !default;
-$fa-li-width: (30em / 14) !default;
-
-$fa-var-500px: "\f26e";
-$fa-var-address-book: "\f2b9";
-$fa-var-address-book-o: "\f2ba";
-$fa-var-address-card: "\f2bb";
-$fa-var-address-card-o: "\f2bc";
-$fa-var-adjust: "\f042";
-$fa-var-adn: "\f170";
-$fa-var-align-center: "\f037";
-$fa-var-align-justify: "\f039";
-$fa-var-align-left: "\f036";
-$fa-var-align-right: "\f038";
-$fa-var-amazon: "\f270";
-$fa-var-ambulance: "\f0f9";
-$fa-var-american-sign-language-interpreting: "\f2a3";
-$fa-var-anchor: "\f13d";
-$fa-var-android: "\f17b";
-$fa-var-angellist: "\f209";
-$fa-var-angle-double-down: "\f103";
-$fa-var-angle-double-left: "\f100";
-$fa-var-angle-double-right: "\f101";
-$fa-var-angle-double-up: "\f102";
-$fa-var-angle-down: "\f107";
-$fa-var-angle-left: "\f104";
-$fa-var-angle-right: "\f105";
-$fa-var-angle-up: "\f106";
-$fa-var-apple: "\f179";
-$fa-var-archive: "\f187";
-$fa-var-area-chart: "\f1fe";
-$fa-var-arrow-circle-down: "\f0ab";
-$fa-var-arrow-circle-left: "\f0a8";
-$fa-var-arrow-circle-o-down: "\f01a";
-$fa-var-arrow-circle-o-left: "\f190";
-$fa-var-arrow-circle-o-right: "\f18e";
-$fa-var-arrow-circle-o-up: "\f01b";
-$fa-var-arrow-circle-right: "\f0a9";
-$fa-var-arrow-circle-up: "\f0aa";
-$fa-var-arrow-down: "\f063";
-$fa-var-arrow-left: "\f060";
-$fa-var-arrow-right: "\f061";
-$fa-var-arrow-up: "\f062";
-$fa-var-arrows: "\f047";
-$fa-var-arrows-alt: "\f0b2";
-$fa-var-arrows-h: "\f07e";
-$fa-var-arrows-v: "\f07d";
-$fa-var-asl-interpreting: "\f2a3";
-$fa-var-assistive-listening-systems: "\f2a2";
-$fa-var-asterisk: "\f069";
-$fa-var-at: "\f1fa";
-$fa-var-audio-description: "\f29e";
-$fa-var-automobile: "\f1b9";
-$fa-var-backward: "\f04a";
-$fa-var-balance-scale: "\f24e";
-$fa-var-ban: "\f05e";
-$fa-var-bandcamp: "\f2d5";
-$fa-var-bank: "\f19c";
-$fa-var-bar-chart: "\f080";
-$fa-var-bar-chart-o: "\f080";
-$fa-var-barcode: "\f02a";
-$fa-var-bars: "\f0c9";
-$fa-var-bath: "\f2cd";
-$fa-var-bathtub: "\f2cd";
-$fa-var-battery: "\f240";
-$fa-var-battery-0: "\f244";
-$fa-var-battery-1: "\f243";
-$fa-var-battery-2: "\f242";
-$fa-var-battery-3: "\f241";
-$fa-var-battery-4: "\f240";
-$fa-var-battery-empty: "\f244";
-$fa-var-battery-full: "\f240";
-$fa-var-battery-half: "\f242";
-$fa-var-battery-quarter: "\f243";
-$fa-var-battery-three-quarters: "\f241";
-$fa-var-bed: "\f236";
-$fa-var-beer: "\f0fc";
-$fa-var-behance: "\f1b4";
-$fa-var-behance-square: "\f1b5";
-$fa-var-bell: "\f0f3";
-$fa-var-bell-o: "\f0a2";
-$fa-var-bell-slash: "\f1f6";
-$fa-var-bell-slash-o: "\f1f7";
-$fa-var-bicycle: "\f206";
-$fa-var-binoculars: "\f1e5";
-$fa-var-birthday-cake: "\f1fd";
-$fa-var-bitbucket: "\f171";
-$fa-var-bitbucket-square: "\f172";
-$fa-var-bitcoin: "\f15a";
-$fa-var-black-tie: "\f27e";
-$fa-var-blind: "\f29d";
-$fa-var-bluetooth: "\f293";
-$fa-var-bluetooth-b: "\f294";
-$fa-var-bold: "\f032";
-$fa-var-bolt: "\f0e7";
-$fa-var-bomb: "\f1e2";
-$fa-var-book: "\f02d";
-$fa-var-bookmark: "\f02e";
-$fa-var-bookmark-o: "\f097";
-$fa-var-braille: "\f2a1";
-$fa-var-briefcase: "\f0b1";
-$fa-var-btc: "\f15a";
-$fa-var-bug: "\f188";
-$fa-var-building: "\f1ad";
-$fa-var-building-o: "\f0f7";
-$fa-var-bullhorn: "\f0a1";
-$fa-var-bullseye: "\f140";
-$fa-var-bus: "\f207";
-$fa-var-buysellads: "\f20d";
-$fa-var-cab: "\f1ba";
-$fa-var-calculator: "\f1ec";
-$fa-var-calendar: "\f073";
-$fa-var-calendar-check-o: "\f274";
-$fa-var-calendar-minus-o: "\f272";
-$fa-var-calendar-o: "\f133";
-$fa-var-calendar-plus-o: "\f271";
-$fa-var-calendar-times-o: "\f273";
-$fa-var-camera: "\f030";
-$fa-var-camera-retro: "\f083";
-$fa-var-car: "\f1b9";
-$fa-var-caret-down: "\f0d7";
-$fa-var-caret-left: "\f0d9";
-$fa-var-caret-right: "\f0da";
-$fa-var-caret-square-o-down: "\f150";
-$fa-var-caret-square-o-left: "\f191";
-$fa-var-caret-square-o-right: "\f152";
-$fa-var-caret-square-o-up: "\f151";
-$fa-var-caret-up: "\f0d8";
-$fa-var-cart-arrow-down: "\f218";
-$fa-var-cart-plus: "\f217";
-$fa-var-cc: "\f20a";
-$fa-var-cc-amex: "\f1f3";
-$fa-var-cc-diners-club: "\f24c";
-$fa-var-cc-discover: "\f1f2";
-$fa-var-cc-jcb: "\f24b";
-$fa-var-cc-mastercard: "\f1f1";
-$fa-var-cc-paypal: "\f1f4";
-$fa-var-cc-stripe: "\f1f5";
-$fa-var-cc-visa: "\f1f0";
-$fa-var-certificate: "\f0a3";
-$fa-var-chain: "\f0c1";
-$fa-var-chain-broken: "\f127";
-$fa-var-check: "\f00c";
-$fa-var-check-circle: "\f058";
-$fa-var-check-circle-o: "\f05d";
-$fa-var-check-square: "\f14a";
-$fa-var-check-square-o: "\f046";
-$fa-var-chevron-circle-down: "\f13a";
-$fa-var-chevron-circle-left: "\f137";
-$fa-var-chevron-circle-right: "\f138";
-$fa-var-chevron-circle-up: "\f139";
-$fa-var-chevron-down: "\f078";
-$fa-var-chevron-left: "\f053";
-$fa-var-chevron-right: "\f054";
-$fa-var-chevron-up: "\f077";
-$fa-var-child: "\f1ae";
-$fa-var-chrome: "\f268";
-$fa-var-circle: "\f111";
-$fa-var-circle-o: "\f10c";
-$fa-var-circle-o-notch: "\f1ce";
-$fa-var-circle-thin: "\f1db";
-$fa-var-clipboard: "\f0ea";
-$fa-var-clock-o: "\f017";
-$fa-var-clone: "\f24d";
-$fa-var-close: "\f00d";
-$fa-var-cloud: "\f0c2";
-$fa-var-cloud-download: "\f0ed";
-$fa-var-cloud-upload: "\f0ee";
-$fa-var-cny: "\f157";
-$fa-var-code: "\f121";
-$fa-var-code-fork: "\f126";
-$fa-var-codepen: "\f1cb";
-$fa-var-codiepie: "\f284";
-$fa-var-coffee: "\f0f4";
-$fa-var-cog: "\f013";
-$fa-var-cogs: "\f085";
-$fa-var-columns: "\f0db";
-$fa-var-comment: "\f075";
-$fa-var-comment-o: "\f0e5";
-$fa-var-commenting: "\f27a";
-$fa-var-commenting-o: "\f27b";
-$fa-var-comments: "\f086";
-$fa-var-comments-o: "\f0e6";
-$fa-var-compass: "\f14e";
-$fa-var-compress: "\f066";
-$fa-var-connectdevelop: "\f20e";
-$fa-var-contao: "\f26d";
-$fa-var-copy: "\f0c5";
-$fa-var-copyright: "\f1f9";
-$fa-var-creative-commons: "\f25e";
-$fa-var-credit-card: "\f09d";
-$fa-var-credit-card-alt: "\f283";
-$fa-var-crop: "\f125";
-$fa-var-crosshairs: "\f05b";
-$fa-var-css3: "\f13c";
-$fa-var-cube: "\f1b2";
-$fa-var-cubes: "\f1b3";
-$fa-var-cut: "\f0c4";
-$fa-var-cutlery: "\f0f5";
-$fa-var-dashboard: "\f0e4";
-$fa-var-dashcube: "\f210";
-$fa-var-database: "\f1c0";
-$fa-var-deaf: "\f2a4";
-$fa-var-deafness: "\f2a4";
-$fa-var-dedent: "\f03b";
-$fa-var-delicious: "\f1a5";
-$fa-var-desktop: "\f108";
-$fa-var-deviantart: "\f1bd";
-$fa-var-diamond: "\f219";
-$fa-var-digg: "\f1a6";
-$fa-var-dollar: "\f155";
-$fa-var-dot-circle-o: "\f192";
-$fa-var-download: "\f019";
-$fa-var-dribbble: "\f17d";
-$fa-var-drivers-license: "\f2c2";
-$fa-var-drivers-license-o: "\f2c3";
-$fa-var-dropbox: "\f16b";
-$fa-var-drupal: "\f1a9";
-$fa-var-edge: "\f282";
-$fa-var-edit: "\f044";
-$fa-var-eercast: "\f2da";
-$fa-var-eject: "\f052";
-$fa-var-ellipsis-h: "\f141";
-$fa-var-ellipsis-v: "\f142";
-$fa-var-empire: "\f1d1";
-$fa-var-envelope: "\f0e0";
-$fa-var-envelope-o: "\f003";
-$fa-var-envelope-open: "\f2b6";
-$fa-var-envelope-open-o: "\f2b7";
-$fa-var-envelope-square: "\f199";
-$fa-var-envira: "\f299";
-$fa-var-eraser: "\f12d";
-$fa-var-etsy: "\f2d7";
-$fa-var-eur: "\f153";
-$fa-var-euro: "\f153";
-$fa-var-exchange: "\f0ec";
-$fa-var-exclamation: "\f12a";
-$fa-var-exclamation-circle: "\f06a";
-$fa-var-exclamation-triangle: "\f071";
-$fa-var-expand: "\f065";
-$fa-var-expeditedssl: "\f23e";
-$fa-var-external-link: "\f08e";
-$fa-var-external-link-square: "\f14c";
-$fa-var-eye: "\f06e";
-$fa-var-eye-slash: "\f070";
-$fa-var-eyedropper: "\f1fb";
-$fa-var-fa: "\f2b4";
-$fa-var-facebook: "\f09a";
-$fa-var-facebook-f: "\f09a";
-$fa-var-facebook-official: "\f230";
-$fa-var-facebook-square: "\f082";
-$fa-var-fast-backward: "\f049";
-$fa-var-fast-forward: "\f050";
-$fa-var-fax: "\f1ac";
-$fa-var-feed: "\f09e";
-$fa-var-female: "\f182";
-$fa-var-fighter-jet: "\f0fb";
-$fa-var-file: "\f15b";
-$fa-var-file-archive-o: "\f1c6";
-$fa-var-file-audio-o: "\f1c7";
-$fa-var-file-code-o: "\f1c9";
-$fa-var-file-excel-o: "\f1c3";
-$fa-var-file-image-o: "\f1c5";
-$fa-var-file-movie-o: "\f1c8";
-$fa-var-file-o: "\f016";
-$fa-var-file-pdf-o: "\f1c1";
-$fa-var-file-photo-o: "\f1c5";
-$fa-var-file-picture-o: "\f1c5";
-$fa-var-file-powerpoint-o: "\f1c4";
-$fa-var-file-sound-o: "\f1c7";
-$fa-var-file-text: "\f15c";
-$fa-var-file-text-o: "\f0f6";
-$fa-var-file-video-o: "\f1c8";
-$fa-var-file-word-o: "\f1c2";
-$fa-var-file-zip-o: "\f1c6";
-$fa-var-files-o: "\f0c5";
-$fa-var-film: "\f008";
-$fa-var-filter: "\f0b0";
-$fa-var-fire: "\f06d";
-$fa-var-fire-extinguisher: "\f134";
-$fa-var-firefox: "\f269";
-$fa-var-first-order: "\f2b0";
-$fa-var-flag: "\f024";
-$fa-var-flag-checkered: "\f11e";
-$fa-var-flag-o: "\f11d";
-$fa-var-flash: "\f0e7";
-$fa-var-flask: "\f0c3";
-$fa-var-flickr: "\f16e";
-$fa-var-floppy-o: "\f0c7";
-$fa-var-folder: "\f07b";
-$fa-var-folder-o: "\f114";
-$fa-var-folder-open: "\f07c";
-$fa-var-folder-open-o: "\f115";
-$fa-var-font: "\f031";
-$fa-var-font-awesome: "\f2b4";
-$fa-var-fonticons: "\f280";
-$fa-var-fort-awesome: "\f286";
-$fa-var-forumbee: "\f211";
-$fa-var-forward: "\f04e";
-$fa-var-foursquare: "\f180";
-$fa-var-free-code-camp: "\f2c5";
-$fa-var-frown-o: "\f119";
-$fa-var-futbol-o: "\f1e3";
-$fa-var-gamepad: "\f11b";
-$fa-var-gavel: "\f0e3";
-$fa-var-gbp: "\f154";
-$fa-var-ge: "\f1d1";
-$fa-var-gear: "\f013";
-$fa-var-gears: "\f085";
-$fa-var-genderless: "\f22d";
-$fa-var-get-pocket: "\f265";
-$fa-var-gg: "\f260";
-$fa-var-gg-circle: "\f261";
-$fa-var-gift: "\f06b";
-$fa-var-git: "\f1d3";
-$fa-var-git-square: "\f1d2";
-$fa-var-github: "\f09b";
-$fa-var-github-alt: "\f113";
-$fa-var-github-square: "\f092";
-$fa-var-gitlab: "\f296";
-$fa-var-gittip: "\f184";
-$fa-var-glass: "\f000";
-$fa-var-glide: "\f2a5";
-$fa-var-glide-g: "\f2a6";
-$fa-var-globe: "\f0ac";
-$fa-var-google: "\f1a0";
-$fa-var-google-plus: "\f0d5";
-$fa-var-google-plus-circle: "\f2b3";
-$fa-var-google-plus-official: "\f2b3";
-$fa-var-google-plus-square: "\f0d4";
-$fa-var-google-wallet: "\f1ee";
-$fa-var-graduation-cap: "\f19d";
-$fa-var-gratipay: "\f184";
-$fa-var-grav: "\f2d6";
-$fa-var-group: "\f0c0";
-$fa-var-h-square: "\f0fd";
-$fa-var-hacker-news: "\f1d4";
-$fa-var-hand-grab-o: "\f255";
-$fa-var-hand-lizard-o: "\f258";
-$fa-var-hand-o-down: "\f0a7";
-$fa-var-hand-o-left: "\f0a5";
-$fa-var-hand-o-right: "\f0a4";
-$fa-var-hand-o-up: "\f0a6";
-$fa-var-hand-paper-o: "\f256";
-$fa-var-hand-peace-o: "\f25b";
-$fa-var-hand-pointer-o: "\f25a";
-$fa-var-hand-rock-o: "\f255";
-$fa-var-hand-scissors-o: "\f257";
-$fa-var-hand-spock-o: "\f259";
-$fa-var-hand-stop-o: "\f256";
-$fa-var-handshake-o: "\f2b5";
-$fa-var-hard-of-hearing: "\f2a4";
-$fa-var-hashtag: "\f292";
-$fa-var-hdd-o: "\f0a0";
-$fa-var-header: "\f1dc";
-$fa-var-headphones: "\f025";
-$fa-var-heart: "\f004";
-$fa-var-heart-o: "\f08a";
-$fa-var-heartbeat: "\f21e";
-$fa-var-history: "\f1da";
-$fa-var-home: "\f015";
-$fa-var-hospital-o: "\f0f8";
-$fa-var-hotel: "\f236";
-$fa-var-hourglass: "\f254";
-$fa-var-hourglass-1: "\f251";
-$fa-var-hourglass-2: "\f252";
-$fa-var-hourglass-3: "\f253";
-$fa-var-hourglass-end: "\f253";
-$fa-var-hourglass-half: "\f252";
-$fa-var-hourglass-o: "\f250";
-$fa-var-hourglass-start: "\f251";
-$fa-var-houzz: "\f27c";
-$fa-var-html5: "\f13b";
-$fa-var-i-cursor: "\f246";
-$fa-var-id-badge: "\f2c1";
-$fa-var-id-card: "\f2c2";
-$fa-var-id-card-o: "\f2c3";
-$fa-var-ils: "\f20b";
-$fa-var-image: "\f03e";
-$fa-var-imdb: "\f2d8";
-$fa-var-inbox: "\f01c";
-$fa-var-indent: "\f03c";
-$fa-var-industry: "\f275";
-$fa-var-info: "\f129";
-$fa-var-info-circle: "\f05a";
-$fa-var-inr: "\f156";
-$fa-var-instagram: "\f16d";
-$fa-var-institution: "\f19c";
-$fa-var-internet-explorer: "\f26b";
-$fa-var-intersex: "\f224";
-$fa-var-ioxhost: "\f208";
-$fa-var-italic: "\f033";
-$fa-var-joomla: "\f1aa";
-$fa-var-jpy: "\f157";
-$fa-var-jsfiddle: "\f1cc";
-$fa-var-key: "\f084";
-$fa-var-keyboard-o: "\f11c";
-$fa-var-krw: "\f159";
-$fa-var-language: "\f1ab";
-$fa-var-laptop: "\f109";
-$fa-var-lastfm: "\f202";
-$fa-var-lastfm-square: "\f203";
-$fa-var-leaf: "\f06c";
-$fa-var-leanpub: "\f212";
-$fa-var-legal: "\f0e3";
-$fa-var-lemon-o: "\f094";
-$fa-var-level-down: "\f149";
-$fa-var-level-up: "\f148";
-$fa-var-life-bouy: "\f1cd";
-$fa-var-life-buoy: "\f1cd";
-$fa-var-life-ring: "\f1cd";
-$fa-var-life-saver: "\f1cd";
-$fa-var-lightbulb-o: "\f0eb";
-$fa-var-line-chart: "\f201";
-$fa-var-link: "\f0c1";
-$fa-var-linkedin: "\f0e1";
-$fa-var-linkedin-square: "\f08c";
-$fa-var-linode: "\f2b8";
-$fa-var-linux: "\f17c";
-$fa-var-list: "\f03a";
-$fa-var-list-alt: "\f022";
-$fa-var-list-ol: "\f0cb";
-$fa-var-list-ul: "\f0ca";
-$fa-var-location-arrow: "\f124";
-$fa-var-lock: "\f023";
-$fa-var-long-arrow-down: "\f175";
-$fa-var-long-arrow-left: "\f177";
-$fa-var-long-arrow-right: "\f178";
-$fa-var-long-arrow-up: "\f176";
-$fa-var-low-vision: "\f2a8";
-$fa-var-magic: "\f0d0";
-$fa-var-magnet: "\f076";
-$fa-var-mail-forward: "\f064";
-$fa-var-mail-reply: "\f112";
-$fa-var-mail-reply-all: "\f122";
-$fa-var-male: "\f183";
-$fa-var-map: "\f279";
-$fa-var-map-marker: "\f041";
-$fa-var-map-o: "\f278";
-$fa-var-map-pin: "\f276";
-$fa-var-map-signs: "\f277";
-$fa-var-mars: "\f222";
-$fa-var-mars-double: "\f227";
-$fa-var-mars-stroke: "\f229";
-$fa-var-mars-stroke-h: "\f22b";
-$fa-var-mars-stroke-v: "\f22a";
-$fa-var-maxcdn: "\f136";
-$fa-var-meanpath: "\f20c";
-$fa-var-medium: "\f23a";
-$fa-var-medkit: "\f0fa";
-$fa-var-meetup: "\f2e0";
-$fa-var-meh-o: "\f11a";
-$fa-var-mercury: "\f223";
-$fa-var-microchip: "\f2db";
-$fa-var-microphone: "\f130";
-$fa-var-microphone-slash: "\f131";
-$fa-var-minus: "\f068";
-$fa-var-minus-circle: "\f056";
-$fa-var-minus-square: "\f146";
-$fa-var-minus-square-o: "\f147";
-$fa-var-mixcloud: "\f289";
-$fa-var-mobile: "\f10b";
-$fa-var-mobile-phone: "\f10b";
-$fa-var-modx: "\f285";
-$fa-var-money: "\f0d6";
-$fa-var-moon-o: "\f186";
-$fa-var-mortar-board: "\f19d";
-$fa-var-motorcycle: "\f21c";
-$fa-var-mouse-pointer: "\f245";
-$fa-var-music: "\f001";
-$fa-var-navicon: "\f0c9";
-$fa-var-neuter: "\f22c";
-$fa-var-newspaper-o: "\f1ea";
-$fa-var-object-group: "\f247";
-$fa-var-object-ungroup: "\f248";
-$fa-var-odnoklassniki: "\f263";
-$fa-var-odnoklassniki-square: "\f264";
-$fa-var-opencart: "\f23d";
-$fa-var-openid: "\f19b";
-$fa-var-opera: "\f26a";
-$fa-var-optin-monster: "\f23c";
-$fa-var-outdent: "\f03b";
-$fa-var-pagelines: "\f18c";
-$fa-var-paint-brush: "\f1fc";
-$fa-var-paper-plane: "\f1d8";
-$fa-var-paper-plane-o: "\f1d9";
-$fa-var-paperclip: "\f0c6";
-$fa-var-paragraph: "\f1dd";
-$fa-var-paste: "\f0ea";
-$fa-var-pause: "\f04c";
-$fa-var-pause-circle: "\f28b";
-$fa-var-pause-circle-o: "\f28c";
-$fa-var-paw: "\f1b0";
-$fa-var-paypal: "\f1ed";
-$fa-var-pencil: "\f040";
-$fa-var-pencil-square: "\f14b";
-$fa-var-pencil-square-o: "\f044";
-$fa-var-percent: "\f295";
-$fa-var-phone: "\f095";
-$fa-var-phone-square: "\f098";
-$fa-var-photo: "\f03e";
-$fa-var-picture-o: "\f03e";
-$fa-var-pie-chart: "\f200";
-$fa-var-pied-piper: "\f2ae";
-$fa-var-pied-piper-alt: "\f1a8";
-$fa-var-pied-piper-pp: "\f1a7";
-$fa-var-pinterest: "\f0d2";
-$fa-var-pinterest-p: "\f231";
-$fa-var-pinterest-square: "\f0d3";
-$fa-var-plane: "\f072";
-$fa-var-play: "\f04b";
-$fa-var-play-circle: "\f144";
-$fa-var-play-circle-o: "\f01d";
-$fa-var-plug: "\f1e6";
-$fa-var-plus: "\f067";
-$fa-var-plus-circle: "\f055";
-$fa-var-plus-square: "\f0fe";
-$fa-var-plus-square-o: "\f196";
-$fa-var-podcast: "\f2ce";
-$fa-var-power-off: "\f011";
-$fa-var-print: "\f02f";
-$fa-var-product-hunt: "\f288";
-$fa-var-puzzle-piece: "\f12e";
-$fa-var-qq: "\f1d6";
-$fa-var-qrcode: "\f029";
-$fa-var-question: "\f128";
-$fa-var-question-circle: "\f059";
-$fa-var-question-circle-o: "\f29c";
-$fa-var-quora: "\f2c4";
-$fa-var-quote-left: "\f10d";
-$fa-var-quote-right: "\f10e";
-$fa-var-ra: "\f1d0";
-$fa-var-random: "\f074";
-$fa-var-ravelry: "\f2d9";
-$fa-var-rebel: "\f1d0";
-$fa-var-recycle: "\f1b8";
-$fa-var-reddit: "\f1a1";
-$fa-var-reddit-alien: "\f281";
-$fa-var-reddit-square: "\f1a2";
-$fa-var-refresh: "\f021";
-$fa-var-registered: "\f25d";
-$fa-var-remove: "\f00d";
-$fa-var-renren: "\f18b";
-$fa-var-reorder: "\f0c9";
-$fa-var-repeat: "\f01e";
-$fa-var-reply: "\f112";
-$fa-var-reply-all: "\f122";
-$fa-var-resistance: "\f1d0";
-$fa-var-retweet: "\f079";
-$fa-var-rmb: "\f157";
-$fa-var-road: "\f018";
-$fa-var-rocket: "\f135";
-$fa-var-rotate-left: "\f0e2";
-$fa-var-rotate-right: "\f01e";
-$fa-var-rouble: "\f158";
-$fa-var-rss: "\f09e";
-$fa-var-rss-square: "\f143";
-$fa-var-rub: "\f158";
-$fa-var-ruble: "\f158";
-$fa-var-rupee: "\f156";
-$fa-var-s15: "\f2cd";
-$fa-var-safari: "\f267";
-$fa-var-save: "\f0c7";
-$fa-var-scissors: "\f0c4";
-$fa-var-scribd: "\f28a";
-$fa-var-search: "\f002";
-$fa-var-search-minus: "\f010";
-$fa-var-search-plus: "\f00e";
-$fa-var-sellsy: "\f213";
-$fa-var-send: "\f1d8";
-$fa-var-send-o: "\f1d9";
-$fa-var-server: "\f233";
-$fa-var-share: "\f064";
-$fa-var-share-alt: "\f1e0";
-$fa-var-share-alt-square: "\f1e1";
-$fa-var-share-square: "\f14d";
-$fa-var-share-square-o: "\f045";
-$fa-var-shekel: "\f20b";
-$fa-var-sheqel: "\f20b";
-$fa-var-shield: "\f132";
-$fa-var-ship: "\f21a";
-$fa-var-shirtsinbulk: "\f214";
-$fa-var-shopping-bag: "\f290";
-$fa-var-shopping-basket: "\f291";
-$fa-var-shopping-cart: "\f07a";
-$fa-var-shower: "\f2cc";
-$fa-var-sign-in: "\f090";
-$fa-var-sign-language: "\f2a7";
-$fa-var-sign-out: "\f08b";
-$fa-var-signal: "\f012";
-$fa-var-signing: "\f2a7";
-$fa-var-simplybuilt: "\f215";
-$fa-var-sitemap: "\f0e8";
-$fa-var-skyatlas: "\f216";
-$fa-var-skype: "\f17e";
-$fa-var-slack: "\f198";
-$fa-var-sliders: "\f1de";
-$fa-var-slideshare: "\f1e7";
-$fa-var-smile-o: "\f118";
-$fa-var-snapchat: "\f2ab";
-$fa-var-snapchat-ghost: "\f2ac";
-$fa-var-snapchat-square: "\f2ad";
-$fa-var-snowflake-o: "\f2dc";
-$fa-var-soccer-ball-o: "\f1e3";
-$fa-var-sort: "\f0dc";
-$fa-var-sort-alpha-asc: "\f15d";
-$fa-var-sort-alpha-desc: "\f15e";
-$fa-var-sort-amount-asc: "\f160";
-$fa-var-sort-amount-desc: "\f161";
-$fa-var-sort-asc: "\f0de";
-$fa-var-sort-desc: "\f0dd";
-$fa-var-sort-down: "\f0dd";
-$fa-var-sort-numeric-asc: "\f162";
-$fa-var-sort-numeric-desc: "\f163";
-$fa-var-sort-up: "\f0de";
-$fa-var-soundcloud: "\f1be";
-$fa-var-space-shuttle: "\f197";
-$fa-var-spinner: "\f110";
-$fa-var-spoon: "\f1b1";
-$fa-var-spotify: "\f1bc";
-$fa-var-square: "\f0c8";
-$fa-var-square-o: "\f096";
-$fa-var-stack-exchange: "\f18d";
-$fa-var-stack-overflow: "\f16c";
-$fa-var-star: "\f005";
-$fa-var-star-half: "\f089";
-$fa-var-star-half-empty: "\f123";
-$fa-var-star-half-full: "\f123";
-$fa-var-star-half-o: "\f123";
-$fa-var-star-o: "\f006";
-$fa-var-steam: "\f1b6";
-$fa-var-steam-square: "\f1b7";
-$fa-var-step-backward: "\f048";
-$fa-var-step-forward: "\f051";
-$fa-var-stethoscope: "\f0f1";
-$fa-var-sticky-note: "\f249";
-$fa-var-sticky-note-o: "\f24a";
-$fa-var-stop: "\f04d";
-$fa-var-stop-circle: "\f28d";
-$fa-var-stop-circle-o: "\f28e";
-$fa-var-street-view: "\f21d";
-$fa-var-strikethrough: "\f0cc";
-$fa-var-stumbleupon: "\f1a4";
-$fa-var-stumbleupon-circle: "\f1a3";
-$fa-var-subscript: "\f12c";
-$fa-var-subway: "\f239";
-$fa-var-suitcase: "\f0f2";
-$fa-var-sun-o: "\f185";
-$fa-var-superpowers: "\f2dd";
-$fa-var-superscript: "\f12b";
-$fa-var-support: "\f1cd";
-$fa-var-table: "\f0ce";
-$fa-var-tablet: "\f10a";
-$fa-var-tachometer: "\f0e4";
-$fa-var-tag: "\f02b";
-$fa-var-tags: "\f02c";
-$fa-var-tasks: "\f0ae";
-$fa-var-taxi: "\f1ba";
-$fa-var-telegram: "\f2c6";
-$fa-var-television: "\f26c";
-$fa-var-tencent-weibo: "\f1d5";
-$fa-var-terminal: "\f120";
-$fa-var-text-height: "\f034";
-$fa-var-text-width: "\f035";
-$fa-var-th: "\f00a";
-$fa-var-th-large: "\f009";
-$fa-var-th-list: "\f00b";
-$fa-var-themeisle: "\f2b2";
-$fa-var-thermometer: "\f2c7";
-$fa-var-thermometer-0: "\f2cb";
-$fa-var-thermometer-1: "\f2ca";
-$fa-var-thermometer-2: "\f2c9";
-$fa-var-thermometer-3: "\f2c8";
-$fa-var-thermometer-4: "\f2c7";
-$fa-var-thermometer-empty: "\f2cb";
-$fa-var-thermometer-full: "\f2c7";
-$fa-var-thermometer-half: "\f2c9";
-$fa-var-thermometer-quarter: "\f2ca";
-$fa-var-thermometer-three-quarters: "\f2c8";
-$fa-var-thumb-tack: "\f08d";
-$fa-var-thumbs-down: "\f165";
-$fa-var-thumbs-o-down: "\f088";
-$fa-var-thumbs-o-up: "\f087";
-$fa-var-thumbs-up: "\f164";
-$fa-var-ticket: "\f145";
-$fa-var-times: "\f00d";
-$fa-var-times-circle: "\f057";
-$fa-var-times-circle-o: "\f05c";
-$fa-var-times-rectangle: "\f2d3";
-$fa-var-times-rectangle-o: "\f2d4";
-$fa-var-tint: "\f043";
-$fa-var-toggle-down: "\f150";
-$fa-var-toggle-left: "\f191";
-$fa-var-toggle-off: "\f204";
-$fa-var-toggle-on: "\f205";
-$fa-var-toggle-right: "\f152";
-$fa-var-toggle-up: "\f151";
-$fa-var-trademark: "\f25c";
-$fa-var-train: "\f238";
-$fa-var-transgender: "\f224";
-$fa-var-transgender-alt: "\f225";
-$fa-var-trash: "\f1f8";
-$fa-var-trash-o: "\f014";
-$fa-var-tree: "\f1bb";
-$fa-var-trello: "\f181";
-$fa-var-tripadvisor: "\f262";
-$fa-var-trophy: "\f091";
-$fa-var-truck: "\f0d1";
-$fa-var-try: "\f195";
-$fa-var-tty: "\f1e4";
-$fa-var-tumblr: "\f173";
-$fa-var-tumblr-square: "\f174";
-$fa-var-turkish-lira: "\f195";
-$fa-var-tv: "\f26c";
-$fa-var-twitch: "\f1e8";
-$fa-var-twitter: "\f099";
-$fa-var-twitter-square: "\f081";
-$fa-var-umbrella: "\f0e9";
-$fa-var-underline: "\f0cd";
-$fa-var-undo: "\f0e2";
-$fa-var-universal-access: "\f29a";
-$fa-var-university: "\f19c";
-$fa-var-unlink: "\f127";
-$fa-var-unlock: "\f09c";
-$fa-var-unlock-alt: "\f13e";
-$fa-var-unsorted: "\f0dc";
-$fa-var-upload: "\f093";
-$fa-var-usb: "\f287";
-$fa-var-usd: "\f155";
-$fa-var-user: "\f007";
-$fa-var-user-circle: "\f2bd";
-$fa-var-user-circle-o: "\f2be";
-$fa-var-user-md: "\f0f0";
-$fa-var-user-o: "\f2c0";
-$fa-var-user-plus: "\f234";
-$fa-var-user-secret: "\f21b";
-$fa-var-user-times: "\f235";
-$fa-var-users: "\f0c0";
-$fa-var-vcard: "\f2bb";
-$fa-var-vcard-o: "\f2bc";
-$fa-var-venus: "\f221";
-$fa-var-venus-double: "\f226";
-$fa-var-venus-mars: "\f228";
-$fa-var-viacoin: "\f237";
-$fa-var-viadeo: "\f2a9";
-$fa-var-viadeo-square: "\f2aa";
-$fa-var-video-camera: "\f03d";
-$fa-var-vimeo: "\f27d";
-$fa-var-vimeo-square: "\f194";
-$fa-var-vine: "\f1ca";
-$fa-var-vk: "\f189";
-$fa-var-volume-control-phone: "\f2a0";
-$fa-var-volume-down: "\f027";
-$fa-var-volume-off: "\f026";
-$fa-var-volume-up: "\f028";
-$fa-var-warning: "\f071";
-$fa-var-wechat: "\f1d7";
-$fa-var-weibo: "\f18a";
-$fa-var-weixin: "\f1d7";
-$fa-var-whatsapp: "\f232";
-$fa-var-wheelchair: "\f193";
-$fa-var-wheelchair-alt: "\f29b";
-$fa-var-wifi: "\f1eb";
-$fa-var-wikipedia-w: "\f266";
-$fa-var-window-close: "\f2d3";
-$fa-var-window-close-o: "\f2d4";
-$fa-var-window-maximize: "\f2d0";
-$fa-var-window-minimize: "\f2d1";
-$fa-var-window-restore: "\f2d2";
-$fa-var-windows: "\f17a";
-$fa-var-won: "\f159";
-$fa-var-wordpress: "\f19a";
-$fa-var-wpbeginner: "\f297";
-$fa-var-wpexplorer: "\f2de";
-$fa-var-wpforms: "\f298";
-$fa-var-wrench: "\f0ad";
-$fa-var-xing: "\f168";
-$fa-var-xing-square: "\f169";
-$fa-var-y-combinator: "\f23b";
-$fa-var-y-combinator-square: "\f1d4";
-$fa-var-yahoo: "\f19e";
-$fa-var-yc: "\f23b";
-$fa-var-yc-square: "\f1d4";
-$fa-var-yelp: "\f1e9";
-$fa-var-yen: "\f157";
-$fa-var-yoast: "\f2b1";
-$fa-var-youtube: "\f167";
-$fa-var-youtube-play: "\f16a";
-$fa-var-youtube-square: "\f166";
-
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/font-awesome.css.map b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/font-awesome.css.map
deleted file mode 100644
index 2d801fbde9..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/font-awesome.css.map
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "version": 3,
- "mappings": "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",
- "sources": [
- "font-awesome.scss",
- "_variables.scss",
- "_mixins.scss",
- "_path.scss",
- "_core.scss",
- "_larger.scss",
- "_fixed-width.scss",
- "_list.scss",
- "_bordered-pulled.scss",
- "_animated.scss",
- "_rotated-flipped.scss",
- "_stacked.scss",
- "_icons.scss",
- "_screen-reader.scss"
- ],
- "names": [],
- "file": "font-awesome.css"
-}
\ No newline at end of file
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/font-awesome.scss b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/font-awesome.scss
deleted file mode 100644
index f1c83aaa5d..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fa/scss/font-awesome.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-/*!
- * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
- * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */
-
-@import "variables";
-@import "mixins";
-@import "path";
-@import "core";
-@import "larger";
-@import "fixed-width";
-@import "list";
-@import "bordered-pulled";
-@import "animated";
-@import "rotated-flipped";
-@import "stacked";
-@import "icons";
-@import "screen-reader";
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/familiar.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/familiar.png
deleted file mode 100644
index 7c60b61784..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/familiar.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/android-chrome-144x144.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/android-chrome-144x144.png
deleted file mode 100644
index 918f55076d..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/android-chrome-144x144.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/apple-touch-icon.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/apple-touch-icon.png
deleted file mode 100644
index 513237d4ea..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/apple-touch-icon.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/browserconfig.xml b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/browserconfig.xml
deleted file mode 100644
index b3930d0f04..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/browserconfig.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
- #da532c
-
-
-
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/favicon-16x16.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/favicon-16x16.png
deleted file mode 100644
index dc7bc1334d..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/favicon-16x16.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/favicon-32x32.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/favicon-32x32.png
deleted file mode 100644
index a4e6694129..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/favicon-32x32.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/favicon.ico b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/favicon.ico
deleted file mode 100644
index f82aa24395..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/favicon.ico and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/mstile-150x150.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/mstile-150x150.png
deleted file mode 100644
index 8d8a39f01e..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/mstile-150x150.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/safari-pinned-tab.svg b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/safari-pinned-tab.svg
deleted file mode 100644
index 70615e24df..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/safari-pinned-tab.svg
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/site.webmanifest b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/site.webmanifest
deleted file mode 100644
index 8af025f70d..0000000000
--- a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/favicon.ico/site.webmanifest
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "name": "",
- "short_name": "",
- "icons": [
- {
- "src": "/android-chrome-144x144.png",
- "sizes": "144x144",
- "type": "image/png"
- }
- ],
- "theme_color": "#ffffff",
- "background_color": "#ffffff",
- "display": "standalone"
-}
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fork.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fork.png
deleted file mode 100644
index 96ed376501..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fork.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fork.psb b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fork.psb
deleted file mode 100644
index 896dbaf621..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/fork.psb and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/1-modular.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/1-modular.png
deleted file mode 100644
index d82cefd478..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/1-modular.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/2-micro.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/2-micro.png
deleted file mode 100644
index 14b76ee000..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/2-micro.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/3-ddd.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/3-ddd.png
deleted file mode 100644
index dda81009dc..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/3-ddd.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/4-autho.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/4-autho.png
deleted file mode 100644
index 15617b0310..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/4-autho.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/5-multi-tenancy.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/5-multi-tenancy.png
deleted file mode 100644
index 7dcabac7db..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/5-multi-tenancy.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/bg-job.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/bg-job.png
deleted file mode 100644
index 32e11ba096..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/bg-job.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/bundle.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/bundle.png
deleted file mode 100644
index f0be165535..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/bundle.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/cross.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/cross.png
deleted file mode 100644
index 5085a1b8b2..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/cross.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/custom.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/custom.png
deleted file mode 100644
index e0da743eb3..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/custom.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/request.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/request.png
deleted file mode 100644
index 9e925f6ae0..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/request.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/theming.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/theming.png
deleted file mode 100644
index 4e6c6ac6ce..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/theming.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/virtualfile.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/virtualfile.png
deleted file mode 100644
index 5a3cabc8d7..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/icons/virtualfile.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/multiple-db.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/multiple-db.png
deleted file mode 100644
index 4701355351..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/multiple-db.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/rain.mp4 b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/rain.mp4
deleted file mode 100644
index a0d6909ec2..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/rain.mp4 and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/1.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/1.png
deleted file mode 100644
index 45986babb7..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/1.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/10.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/10.png
deleted file mode 100644
index 959c1a0290..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/10.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/11.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/11.png
deleted file mode 100644
index f6b91e8213..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/11.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/12.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/12.png
deleted file mode 100644
index 8f9b1f09ee..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/12.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/13.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/13.png
deleted file mode 100644
index e9ed695222..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/13.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/14.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/14.png
deleted file mode 100644
index 6c8541ad80..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/14.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/15.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/15.png
deleted file mode 100644
index bf4100f1df..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/15.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/16.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/16.png
deleted file mode 100644
index b65bd25846..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/16.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/17.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/17.png
deleted file mode 100644
index c4d75ecfd6..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/17.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/18.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/18.png
deleted file mode 100644
index e6e73d148d..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/18.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/2.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/2.png
deleted file mode 100644
index 7262528186..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/2.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/3.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/3.png
deleted file mode 100644
index 7876cd24fa..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/3.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/4.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/4.png
deleted file mode 100644
index 850c8aefe3..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/4.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/5.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/5.png
deleted file mode 100644
index 9a917b5201..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/5.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/6.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/6.png
deleted file mode 100644
index b675fe7eed..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/6.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/7.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/7.png
deleted file mode 100644
index 1df2781cf1..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/7.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/8.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/8.png
deleted file mode 100644
index f862ea1788..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/8.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/9.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/9.png
deleted file mode 100644
index 7c9d0082f0..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/9.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/bg.jpg b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/bg.jpg
deleted file mode 100644
index be89ceb73d..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/bg.jpg and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/bg.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/bg.png
deleted file mode 100644
index e0cc9d5b54..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/tools/bg.png and /dev/null differ
diff --git a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/underline.png b/modules/docs/src/Volo.Docs.Web/wwwroot/assets/underline.png
deleted file mode 100644
index c0f3af26e1..0000000000
Binary files a/modules/docs/src/Volo.Docs.Web/wwwroot/assets/underline.png and /dev/null differ
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 390476a38f..467f3014f4 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,12 +1,12 @@
- netcoreapp2.2
+ netcoreapp3.0
-
+
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 87144ccfe9..f29ec82969 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,12 +1,12 @@
- netcoreapp2.2
+ netcoreapp3.0
-
+
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 ba1185b397..ecf90bd202 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,12 +1,12 @@
- netcoreapp2.2
+ netcoreapp3.0
-
+
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 71a466828b..f9ddadfe9a 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,15 +1,15 @@
- netcoreapp2.2
+ netcoreapp3.0
-
-
-
-
+
+
+
+
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 1366f0d593..5c174000a7 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,14 +1,13 @@
- netcoreapp2.2
-
- false
+ netcoreapp3.0
+
-
-
+
+
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 a92946140a..b8f81507f4 100644
--- a/modules/docs/test/Volo.Docs.TestBase/Volo.Docs.TestBase.csproj
+++ b/modules/docs/test/Volo.Docs.TestBase/Volo.Docs.TestBase.csproj
@@ -1,12 +1,12 @@
- netcoreapp2.2
+ netcoreapp3.0
-
+
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 a4405067cf..1772c74748 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
@@ -9,9 +9,6 @@
-
-
-
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 9a3ebac4f3..15145798e2 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
@@ -15,9 +15,6 @@
-
-
-
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 776a415939..297d7fcaa4 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,15 +3,12 @@
- netstandard2.0
+ netstandard2.1
-
-
-
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 a4e1ce7e62..d5cd6e4777 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
@@ -3,15 +3,12 @@
- netstandard2.0
+ netcoreapp3.0
-
-
-
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 5b01128a6d..4724d3dae9 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
@@ -3,15 +3,12 @@
- netstandard2.0
+ netcoreapp3.0
-
-
-
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 2c03150aa9..5f4d23bf4e 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
@@ -9,9 +9,6 @@
-
-
-
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/AbpFeatureManagementWebModule.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/AbpFeatureManagementWebModule.cs
index ca7f6f31ea..67a178dfbd 100644
--- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/AbpFeatureManagementWebModule.cs
+++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/AbpFeatureManagementWebModule.cs
@@ -1,12 +1,9 @@
-using Localization.Resources.AbpUi;
-using Microsoft.AspNetCore.Mvc.RazorPages;
+using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.Mvc.Localization;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
using Volo.Abp.AutoMapper;
using Volo.Abp.FeatureManagement.Localization;
-using Volo.Abp.Localization;
-using Volo.Abp.Localization.Resources.AbpValidation;
using Volo.Abp.Modularity;
using Volo.Abp.VirtualFileSystem;
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 ccc5f00200..66949c9194 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
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
true
Library
@@ -22,9 +22,6 @@
-
-
-
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 1c41a820e6..f8ba6bca58 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
@@ -3,7 +3,7 @@
- netcoreapp2.2
+ netcoreapp3.0
@@ -13,7 +13,7 @@
-
+
diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo.Abp.FeatureManagement.Domain.Tests.csproj b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo.Abp.FeatureManagement.Domain.Tests.csproj
index 242262f35e..b7ab166f0f 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
@@ -3,15 +3,12 @@
- netcoreapp2.2
+ netcoreapp3.0
-
-
-
-
+
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 5566f756d8..98c3df4df9 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
@@ -3,7 +3,7 @@
- netcoreapp2.2
+ netcoreapp3.0
@@ -13,10 +13,10 @@
-
-
-
-
+
+
+
+
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 8bed0f0aa9..4006abf8f7 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
@@ -3,7 +3,7 @@
- netcoreapp2.2
+ netcoreapp3.0
@@ -13,8 +13,8 @@
-
-
+
+
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 83288c97ec..08f71c7c2b 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
@@ -3,7 +3,7 @@
- netcoreapp2.2
+ netcoreapp3.0
@@ -14,7 +14,7 @@
-
+
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 6c3ba1b676..8eac9e9162 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
@@ -16,9 +16,7 @@
-
-
diff --git a/modules/identity/src/Volo.Abp.Identity.AspNetCore/Properties/launchSettings.json b/modules/identity/src/Volo.Abp.Identity.AspNetCore/Properties/launchSettings.json
new file mode 100644
index 0000000000..fc5b1a72f7
--- /dev/null
+++ b/modules/identity/src/Volo.Abp.Identity.AspNetCore/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:53901/",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "Volo.Abp.Identity.AspNetCore": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "http://localhost:53902/"
+ }
+ }
+}
\ 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 12b84640c0..948dd4b7b3 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,20 +1,21 @@
-
+
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.Identity.AspNetCore
Volo.Abp.Identity.AspNetCore
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
false
false
false
+ true
+ Library
-
diff --git a/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpSecurityStampValidator.cs b/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpSecurityStampValidator.cs
index 5259047096..cf6e1f8d50 100644
--- a/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpSecurityStampValidator.cs
+++ b/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpSecurityStampValidator.cs
@@ -2,21 +2,24 @@
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Identity;
+using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Volo.Abp.Uow;
-namespace Volo.Abp.Identity
+namespace Volo.Abp.Identity.AspNetCore
{
public class AbpSecurityStampValidator : SecurityStampValidator
{
public AbpSecurityStampValidator(
IOptions options,
SignInManager signInManager,
- ISystemClock systemClock)
+ ISystemClock systemClock,
+ ILoggerFactory loggerFactory)
: base(
options,
signInManager,
- systemClock)
+ systemClock,
+ loggerFactory)
{
}
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 e86a7221de..6b58f2e433 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
@@ -15,15 +15,11 @@
-
-
-
-
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 0919140b8c..b3ccc2e1b1 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj
+++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj
@@ -28,7 +28,7 @@
-
+
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityClaim.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityClaim.cs
index 6b40b59ddb..d64218a68f 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityClaim.cs
+++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityClaim.cs
@@ -20,11 +20,6 @@ namespace Volo.Abp.Identity
///
public virtual string ClaimValue { get; protected set; }
- public virtual bool Equals([NotNull] string claimType, [NotNull] string claimValue)
- {
- return ClaimType == claimType && ClaimValue == claimValue;
- }
-
protected IdentityClaim()
{
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 20fb67dd06..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
@@ -46,7 +46,7 @@ namespace Volo.Abp.Identity
//"admin" user
const string adminUserName = "admin";
var adminUser = await _userRepository.FindByNormalizedUserNameAsync(
- _lookupNormalizer.Normalize(adminUserName)
+ _lookupNormalizer.NormalizeName(adminUserName)
);
if (adminUser != null)
@@ -69,7 +69,7 @@ namespace Volo.Abp.Identity
//"admin" role
const string adminRoleName = "admin";
- var adminRole = await _roleRepository.FindByNormalizedNameAsync(_lookupNormalizer.Normalize(adminRoleName));
+ var adminRole = await _roleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName(adminRoleName));
if (adminRole == null)
{
adminRole = new IdentityRole(
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 684eec938f..bbbebb81cd 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
@@ -39,7 +39,7 @@ namespace Volo.Abp.Identity
{
return (
await _userRepository.FindByNormalizedUserNameAsync(
- _lookupNormalizer.Normalize(userName),
+ _lookupNormalizer.NormalizeName(userName),
includeDetails: false,
cancellationToken: cancellationToken
)
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 6b934006bc..945905d75f 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.0
+ netstandard2.1
Volo.Abp.Identity.EntityFrameworkCore
Volo.Abp.Identity.EntityFrameworkCore
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
@@ -15,7 +15,6 @@
-
diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContextModelBuilderExtensions.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContextModelBuilderExtensions.cs
index 946db12050..5df9e6de60 100644
--- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContextModelBuilderExtensions.cs
+++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContextModelBuilderExtensions.cs
@@ -48,6 +48,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
{
b.ToTable(options.TablePrefix + "UserClaims", options.Schema);
+ b.Property(x => x.Id).ValueGeneratedNever();
+
b.Property(uc => uc.ClaimType).HasMaxLength(IdentityUserClaimConsts.MaxClaimTypeLength).IsRequired();
b.Property(uc => uc.ClaimValue).HasMaxLength(IdentityUserClaimConsts.MaxClaimValueLength);
@@ -112,6 +114,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
{
b.ToTable(options.TablePrefix + "RoleClaims", options.Schema);
+ b.Property(x => x.Id).ValueGeneratedNever();
+
b.Property(uc => uc.ClaimType).HasMaxLength(IdentityRoleClaimConsts.MaxClaimTypeLength).IsRequired();
b.Property(uc => uc.ClaimValue).HasMaxLength(IdentityRoleClaimConsts.MaxClaimValueLength);
diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Properties/launchSettings.json b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Properties/launchSettings.json
new file mode 100644
index 0000000000..6ba85345ab
--- /dev/null
+++ b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:53978/",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "Volo.Abp.Identity.HttpApi.Client": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "http://localhost:53980/"
+ }
+ }
+}
\ 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 b7e8a18755..a32fc8b2d0 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,15 +1,17 @@
-
+
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.Identity.HttpApi.Client
Volo.Abp.Identity.HttpApi.Client
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
false
false
false
+ Library
+ true
diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi/Properties/launchSettings.json b/modules/identity/src/Volo.Abp.Identity.HttpApi/Properties/launchSettings.json
new file mode 100644
index 0000000000..2323768a18
--- /dev/null
+++ b/modules/identity/src/Volo.Abp.Identity.HttpApi/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:53977/",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "Volo.Abp.Identity.HttpApi": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "http://localhost:53979/"
+ }
+ }
+}
\ 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 01aba07d39..0ca4ef5564 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,21 +1,22 @@
-
+
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.Identity.HttpApi
Volo.Abp.Identity.HttpApi
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
false
false
false
+ Library
+ true
-
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 ae04586f3e..06e5717e03 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,4 +1,4 @@
-
+
@@ -15,7 +15,6 @@
-
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 8209c1c303..3561790e74 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
@@ -3,19 +3,21 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.Identity.Web
Volo.Abp.Identity.Web
- true
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
false
false
false
Library
+ true
-
+
+
+
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 e4f89cb750..6474dec386 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,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.Identity.Application.Tests
Volo.Abp.Identity.Application.Tests
true
@@ -17,7 +17,7 @@
-
+
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 7358238294..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,7 +24,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task FindByIdAsync()
{
- var user = await _identityUserRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _identityUserRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
(await _identityUserLookupAppService.FindByIdAsync(user.Id)).UserName.ShouldBe(user.UserName);
@@ -40,7 +40,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task FindByUserNameAsync()
{
- var user = await _identityUserRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _identityUserRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
(await _identityUserLookupAppService.FindByUserNameAsync(user.UserName)).UserName.ShouldBe(user.UserName);
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 2e53b10544..9f94e6283e 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,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.Identity.Domain.Tests
Volo.Abp.Identity.Domain.Tests
true
@@ -18,7 +18,7 @@
-
+
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 221adca6d5..f8b42584ec 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,7 +40,7 @@ namespace Volo.Abp.Identity
{
using (var uow = _unitOfWorkManager.Begin())
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
await _userManager.SetEmailAsync(user, "john.nash_UPDATED@abp.io");
_testCounter.GetValue("EntityUpdatedEto").ShouldBe(0);
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 9cdafa10bb..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
@@ -37,7 +37,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task SetRoleNameAsync()
{
- var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.Normalize("moderator"));
+ var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator"));
role.ShouldNotBeNull();
(await _identityRoleManager.SetRoleNameAsync(role, "teacher")).Succeeded.ShouldBeTrue();
@@ -48,12 +48,12 @@ namespace Volo.Abp.Identity
[Fact]
public async Task DeleteAsync()
{
- var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.Normalize("moderator"));
+ var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator"));
role.ShouldNotBeNull();
await _identityRoleManager.DeleteAsync(role);
- (await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.Normalize("moderator"))).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 d2f674411b..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
@@ -43,7 +43,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task UpdateAsync()
{
- var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.Normalize("moderator"));
+ var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator"));
role.ShouldNotBeNull();
role.IsDefault = true;
@@ -56,7 +56,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task DeleteAsync()
{
- var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.Normalize("moderator"));
+ var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator"));
role.ShouldNotBeNull();
await _identityRoleStore.DeleteAsync(role);
@@ -67,7 +67,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task GetRoleIdAsync()
{
- var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.Normalize("moderator"));
+ var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator"));
role.ShouldNotBeNull();
(await _identityRoleStore.GetRoleIdAsync(role)).ShouldBe(_testData.RoleModeratorId.ToString());
@@ -76,7 +76,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task GetRoleNameAsync()
{
- var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.Normalize("moderator"));
+ var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator"));
role.ShouldNotBeNull();
(await _identityRoleStore.GetRoleNameAsync(role)).ShouldBe(role.Name);
@@ -86,7 +86,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task SetRoleNameAsync()
{
- var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.Normalize("moderator"));
+ var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator"));
role.ShouldNotBeNull();
await _identityRoleStore.SetRoleNameAsync(role, "teacher");
@@ -106,7 +106,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task FindByNameAsync()
{
- var role = await _identityRoleStore.FindByNameAsync(_lookupNormalizer.Normalize("moderator"));
+ var role = await _identityRoleStore.FindByNameAsync(_lookupNormalizer.NormalizeName("moderator"));
role.ShouldNotBeNull();
role.Name.ShouldBe("moderator");
@@ -115,7 +115,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task GetNormalizedRoleNameAsync()
{
- var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.Normalize("moderator"));
+ var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator"));
role.ShouldNotBeNull();
(await _identityRoleStore.GetNormalizedRoleNameAsync(role)).ShouldBe(role.NormalizedName);
@@ -124,12 +124,12 @@ namespace Volo.Abp.Identity
[Fact]
public async Task SetNormalizedRoleNameAsync()
{
- var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.Normalize("moderator"));
+ var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator"));
role.ShouldNotBeNull();
- await _identityRoleStore.SetNormalizedRoleNameAsync(role, _lookupNormalizer.Normalize("teacher"));
+ await _identityRoleStore.SetNormalizedRoleNameAsync(role, _lookupNormalizer.NormalizeName("teacher"));
- role.NormalizedName.ShouldBe(_lookupNormalizer.Normalize("teacher"));
+ role.NormalizedName.ShouldBe(_lookupNormalizer.NormalizeName("teacher"));
}
[Fact]
@@ -137,7 +137,7 @@ namespace Volo.Abp.Identity
{
using (var uow = _unitOfWorkManager.Begin())
{
- var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.Normalize("moderator"));
+ var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator"));
role.ShouldNotBeNull();
var claims = await _identityRoleStore.GetClaimsAsync(role);
@@ -149,30 +149,41 @@ namespace Volo.Abp.Identity
}
}
-
[Fact]
public async Task AddClaimAsync()
{
- using (var uow = _unitOfWorkManager.Begin())
+ try
{
- var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.Normalize("moderator"));
- role.ShouldNotBeNull();
+ using (var uow = _unitOfWorkManager.Begin())
+ {
+ var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator"));
+ role.ShouldNotBeNull();
- await _identityRoleStore.AddClaimAsync(role, new Claim("my-claim", "my-value"));
+ role.Claims.Add(new IdentityRoleClaim(Guid.NewGuid(), role.Id, "my-claim", "my-value", role.TenantId));
+ //await _identityRoleStore.AddClaimAsync(role, new Claim("my-claim", "my-value"));
- role.Claims.ShouldContain(x => x.ClaimType == "my-claim" && x.ClaimValue == "my-value");
+ //role.Claims.ShouldContain(x => x.ClaimType == "my-claim" && x.ClaimValue == "my-value");
- await uow.CompleteAsync();
+ await uow.CompleteAsync();
+ }
+
+ }
+ catch (Exception e)
+ {
+ throw;
}
+
+ var role2 = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator"));
+ role2.ShouldNotBeNull();
+ role2.Claims.ShouldContain(x => x.ClaimType == "my-claim" && x.ClaimValue == "my-value");
}
-
[Fact]
public async Task RemoveClaimAsync()
{
using (var uow = _unitOfWorkManager.Begin())
{
- var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.Normalize("moderator"));
+ var role = await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("moderator"));
role.ShouldNotBeNull();
await _identityRoleStore.RemoveClaimAsync(role, new Claim("test-claim", "test-value"));
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 3755342375..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
@@ -43,7 +43,7 @@ namespace Volo.Abp.Identity
using (var uow = _unitOfWorkManager.Begin())
{
var user = await _identityUserRepository.FindByNormalizedUserNameAsync(
- _lookupNormalizer.Normalize("david"));
+ _lookupNormalizer.NormalizeName("david"));
user.ShouldNotBeNull();
var identityResult = await _identityUserManager.SetRolesAsync(user, new List()
@@ -64,11 +64,11 @@ namespace Volo.Abp.Identity
using (var uow = _unitOfWorkManager.Begin())
{
var roleSupporter =
- await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.Normalize("supporter"));
+ await _identityRoleRepository.FindByNormalizedNameAsync(_lookupNormalizer.NormalizeName("supporter"));
roleSupporter.ShouldNotBeNull();
var user = await _identityUserRepository.FindByNormalizedUserNameAsync(
- _lookupNormalizer.Normalize("john.nash"));
+ _lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
var identityResult = await _identityUserManager.SetRolesAsync(user, new List()
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 0e4c1e8bc6..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
@@ -1,11 +1,9 @@
using System;
using System.Collections.Generic;
using System.Security.Claims;
-using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Shouldly;
-using Volo.Abp.Guids;
using Volo.Abp.Uow;
using Xunit;
@@ -31,7 +29,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task GetUserIdAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
(await _identityUserStore.GetUserIdAsync(user)).ShouldBe(user.Id.ToString());
@@ -41,7 +39,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task GetUserNameAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
(await _identityUserStore.GetUserNameAsync(user)).ShouldBe(user.UserName);
@@ -50,7 +48,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task SetUserNameAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
await _identityUserStore.SetUserNameAsync(user, "bob.lee");
@@ -62,7 +60,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task GetNormalizedUserNameAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
(await _identityUserStore.GetNormalizedUserNameAsync(user)).ShouldBe(user.NormalizedUserName);
@@ -71,12 +69,12 @@ namespace Volo.Abp.Identity
[Fact]
public async Task SetNormalizedUserNameAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
- await _identityUserStore.SetNormalizedUserNameAsync(user, _lookupNormalizer.Normalize("bob.lee"));
+ await _identityUserStore.SetNormalizedUserNameAsync(user, _lookupNormalizer.NormalizeName("bob.lee"));
- user.NormalizedUserName.ShouldBe(_lookupNormalizer.Normalize("bob.lee"));
+ user.NormalizedUserName.ShouldBe(_lookupNormalizer.NormalizeName("bob.lee"));
}
[Fact]
@@ -87,7 +85,7 @@ namespace Volo.Abp.Identity
await _identityUserStore.CreateAsync(user);
- var bobLee = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("bob.lee"));
+ var bobLee = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("bob.lee"));
bobLee.ShouldNotBeNull();
bobLee.UserName.ShouldBe("bob.lee");
bobLee.Email.ShouldBe("bob.lee@abp.io");
@@ -96,20 +94,20 @@ namespace Volo.Abp.Identity
[Fact]
public async Task UpdateAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
user.Name = "lee";
(await _identityUserStore.UpdateAsync(user)).Succeeded.ShouldBeTrue();
- (await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"))).Name
+ (await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"))).Name
.ShouldBe("lee");
}
[Fact]
public async Task Update_Concurrency()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
(await _identityUserStore.UpdateAsync(user)).Succeeded.ShouldBeTrue();
@@ -128,12 +126,12 @@ namespace Volo.Abp.Identity
[Fact]
public async Task DeleteAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
(await _identityUserStore.DeleteAsync(user)).Succeeded.ShouldBeTrue();
- (await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"))).ShouldBeNull();
+ (await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"))).ShouldBeNull();
}
@@ -150,7 +148,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task FindByNameAsync()
{
- var user = await _identityUserStore.FindByNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _identityUserStore.FindByNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
user.UserName.ShouldBe("john.nash");
@@ -160,7 +158,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task SetPasswordHashAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
user.PasswordHash.ShouldBeNull();
@@ -172,7 +170,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task GetPasswordHashAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
await _identityUserStore.SetPasswordHashAsync(user, "P@ssw0rd");
@@ -183,7 +181,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task HasPasswordAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
(await _identityUserStore.HasPasswordAsync(user)).ShouldBeFalse();
@@ -191,17 +189,16 @@ namespace Volo.Abp.Identity
(await _identityUserStore.HasPasswordAsync(user)).ShouldBeTrue();
}
-
[Fact]
public async Task AddToRoleAsync()
{
using (var uow = _unitOfWorkManager.Begin())
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("david"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("david"));
user.ShouldNotBeNull();
user.Roles.ShouldBeEmpty();
- await _identityUserStore.AddToRoleAsync(user, _lookupNormalizer.Normalize("moderator"));
+ await _identityUserStore.AddToRoleAsync(user, _lookupNormalizer.NormalizeName("moderator"));
user.Roles.ShouldContain(x => x.RoleId == _testData.RoleModeratorId);
@@ -209,17 +206,16 @@ namespace Volo.Abp.Identity
}
}
-
[Fact]
public async Task RemoveFromRoleAsync()
{
using (var uow = _unitOfWorkManager.Begin())
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
user.Roles.ShouldContain(x => x.RoleId == _testData.RoleModeratorId);
- await _identityUserStore.RemoveFromRoleAsync(user, _lookupNormalizer.Normalize("moderator"));
+ await _identityUserStore.RemoveFromRoleAsync(user, _lookupNormalizer.NormalizeName("moderator"));
user.Roles.ShouldNotContain(x => x.RoleId == _testData.RoleModeratorId);
@@ -231,7 +227,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task GetRolesAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
var roleNames = await _identityUserStore.GetRolesAsync(user);
@@ -245,23 +241,22 @@ namespace Volo.Abp.Identity
{
using (var uow = _unitOfWorkManager.Begin())
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
- (await _identityUserStore.IsInRoleAsync(user, _lookupNormalizer.Normalize("moderator"))).ShouldBeTrue();
- (await _identityUserStore.IsInRoleAsync(user, _lookupNormalizer.Normalize("moderatorNotExist"))).ShouldBeFalse();
+ (await _identityUserStore.IsInRoleAsync(user, _lookupNormalizer.NormalizeName("moderator"))).ShouldBeTrue();
+ (await _identityUserStore.IsInRoleAsync(user, _lookupNormalizer.NormalizeName("moderatorNotExist"))).ShouldBeFalse();
await uow.CompleteAsync();
}
}
-
[Fact]
public async Task GetClaimsAsync()
{
using (var uow = _unitOfWorkManager.Begin())
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
var claims = await _identityUserStore.GetClaimsAsync(user);
@@ -277,8 +272,9 @@ namespace Volo.Abp.Identity
{
using (var uow = _unitOfWorkManager.Begin())
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ 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()
{
@@ -291,13 +287,12 @@ namespace Volo.Abp.Identity
}
}
-
[Fact]
public async Task ReplaceClaimAsync()
{
using (var uow = _unitOfWorkManager.Begin())
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
await _identityUserStore.ReplaceClaimAsync(user, new Claim("TestClaimType", "42"), new Claim("MyClaimType", "MyClaimValue"));
@@ -308,14 +303,13 @@ namespace Volo.Abp.Identity
await uow.CompleteAsync();
}
}
-
-
+
[Fact]
public async Task RemoveClaimsAsync()
{
using (var uow = _unitOfWorkManager.Begin())
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
await _identityUserStore.RemoveClaimsAsync(user, new List()
@@ -329,13 +323,12 @@ namespace Volo.Abp.Identity
}
}
-
[Fact]
public async Task AddLoginAsync()
{
using (var uow = _unitOfWorkManager.Begin())
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
user.Logins.ShouldNotContain(x => x.LoginProvider == "facebook" && x.ProviderKey == "john");
@@ -352,7 +345,7 @@ namespace Volo.Abp.Identity
{
using (var uow = _unitOfWorkManager.Begin())
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
user.Logins.ShouldContain(x => x.LoginProvider == "github" && x.ProviderKey == "john");
@@ -370,7 +363,7 @@ namespace Volo.Abp.Identity
{
using (var uow = _unitOfWorkManager.Begin())
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
var logins = await _identityUserStore.GetLoginsAsync(user);
@@ -396,7 +389,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task GetEmailConfirmedAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
(await _identityUserStore.GetEmailConfirmedAsync(user)).ShouldBe(user.EmailConfirmed);
@@ -406,7 +399,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task SetEmailConfirmedAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
var emailConfirmed = user.EmailConfirmed;
@@ -418,7 +411,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task SetEmailAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
await _identityUserStore.SetEmailAsync(user, "john.nash.kobe@abp.io");
@@ -430,7 +423,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task GetEmailAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
(await _identityUserStore.GetEmailAsync(user)).ShouldBe(user.Email);
@@ -439,7 +432,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task GetNormalizedEmailAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
(await _identityUserStore.GetNormalizedEmailAsync(user)).ShouldBe(user.NormalizedEmail);
@@ -448,18 +441,18 @@ namespace Volo.Abp.Identity
[Fact]
public async Task SetNormalizedEmailAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
- await _identityUserStore.SetNormalizedEmailAsync(user, _lookupNormalizer.Normalize("john.nash.kobe@abp.io"));
+ await _identityUserStore.SetNormalizedEmailAsync(user, _lookupNormalizer.NormalizeEmail("john.nash.kobe@abp.io"));
- user.NormalizedEmail.ShouldBe(_lookupNormalizer.Normalize("john.nash.kobe@abp.io"));
+ user.NormalizedEmail.ShouldBe(_lookupNormalizer.NormalizeEmail("john.nash.kobe@abp.io"));
}
[Fact]
public async Task FindByEmailAsync()
{
- var user = await _identityUserStore.FindByEmailAsync(_lookupNormalizer.Normalize("john.nash@abp.io"));
+ var user = await _identityUserStore.FindByEmailAsync(_lookupNormalizer.NormalizeEmail("john.nash@abp.io"));
user.ShouldNotBeNull();
user.Email.ShouldBe("john.nash@abp.io");
@@ -468,7 +461,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task GetLockoutEndDateAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
(await _identityUserStore.GetLockoutEndDateAsync(user)).ShouldBe(user.LockoutEnd);
@@ -477,7 +470,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task SetLockoutEndDateAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
await _identityUserStore.SetLockoutEndDateAsync(user, DateTimeOffset.Parse("01/01/2019"));
@@ -489,7 +482,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task IncrementAccessFailedCountAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
var count = user.AccessFailedCount;
@@ -501,7 +494,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task ResetAccessFailedCountAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
await _identityUserStore.ResetAccessFailedCountAsync(user);
@@ -512,7 +505,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task GetAccessFailedCountAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
(await _identityUserStore.GetAccessFailedCountAsync(user)).ShouldBe(user.AccessFailedCount);
@@ -521,7 +514,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task GetLockoutEnabledAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
(await _identityUserStore.GetLockoutEnabledAsync(user)).ShouldBe(user.LockoutEnabled);
@@ -530,7 +523,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task SetLockoutEnabledAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
var lockoutEnabled = user.LockoutEnabled;
@@ -543,7 +536,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task SetPhoneNumberAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
await _identityUserStore.SetPhoneNumberAsync(user, "13800138000");
@@ -555,7 +548,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task GetPhoneNumberAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
(await _identityUserStore.GetPhoneNumberAsync(user)).ShouldBe(user.PhoneNumber);
@@ -564,7 +557,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task GetPhoneNumberConfirmedAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
(await _identityUserStore.GetPhoneNumberConfirmedAsync(user)).ShouldBe(user.PhoneNumberConfirmed);
@@ -574,7 +567,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task SetPhoneNumberConfirmedAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
var phoneNumberConfirmed = user.PhoneNumberConfirmed;
@@ -587,7 +580,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task SetSecurityStampAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
var securityStamp = Guid.NewGuid().ToString();
@@ -599,7 +592,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task GetSecurityStampAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
(await _identityUserStore.GetSecurityStampAsync(user)).ShouldBe(user.SecurityStamp);
@@ -609,7 +602,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task SetTwoFactorEnabledAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
var twoFactorEnabled = user.TwoFactorEnabled;
@@ -622,7 +615,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task GetTwoFactorEnabledAsync()
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
(await _identityUserStore.GetTwoFactorEnabledAsync(user)).ShouldBe(user.TwoFactorEnabled);
@@ -640,7 +633,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task GetUsersInRoleAsync()
{
- var user = await _identityUserStore.GetUsersInRoleAsync(_lookupNormalizer.Normalize("moderator"));
+ var user = await _identityUserStore.GetUsersInRoleAsync(_lookupNormalizer.NormalizeName("moderator"));
user.ShouldNotBeNull();
user.ShouldContain(x => x.UserName == "john.nash");
}
@@ -650,7 +643,7 @@ namespace Volo.Abp.Identity
{
using (var uow = _unitOfWorkManager.Begin())
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
await _identityUserStore.SetTokenAsync(user, "test-provider", "test-name", "123123");
@@ -667,7 +660,7 @@ namespace Volo.Abp.Identity
{
using (var uow = _unitOfWorkManager.Begin())
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
await _identityUserStore.RemoveTokenAsync(user, "test-provider", "test-name");
@@ -683,7 +676,7 @@ namespace Volo.Abp.Identity
{
using (var uow = _unitOfWorkManager.Begin())
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
(await _identityUserStore.GetTokenAsync(user, "test-provider", "test-name")).ShouldBe("test-value");
@@ -697,7 +690,7 @@ namespace Volo.Abp.Identity
{
using (var uow = _unitOfWorkManager.Begin())
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
await _identityUserStore.SetAuthenticatorKeyAsync(user, "testKey");
@@ -713,7 +706,7 @@ namespace Volo.Abp.Identity
{
using (var uow = _unitOfWorkManager.Begin())
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
await _identityUserStore.SetAuthenticatorKeyAsync(user, "testKey");
@@ -729,7 +722,7 @@ namespace Volo.Abp.Identity
{
using (var uow = _unitOfWorkManager.Begin())
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
await _identityUserStore.SetTokenAsync(user, "[AspNetUserStore]", "RecoveryCodes", "testKey;testKey2");
@@ -744,7 +737,7 @@ namespace Volo.Abp.Identity
{
using (var uow = _unitOfWorkManager.Begin())
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
await _identityUserStore.ReplaceCodesAsync(user, new List()
@@ -764,7 +757,7 @@ namespace Volo.Abp.Identity
{
using (var uow = _unitOfWorkManager.Begin())
{
- var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("john.nash"));
+ var user = await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.NormalizeName("john.nash"));
user.ShouldNotBeNull();
await _identityUserStore.SetTokenAsync(user, "[AspNetUserStore]", "RecoveryCodes", "testKey;testKey2");
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 b5272ed0e7..0fc834ccc0 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
@@ -45,7 +45,7 @@ namespace Volo.Abp.Identity
private void AddUserPermissions()
{
- var david = _userRepository.FindByNormalizedUserName(_lookupNormalizer.Normalize("david"));
+ var david = _userRepository.FindByNormalizedUserName(_lookupNormalizer.NormalizeName("david"));
AddPermission(TestPermissionNames.MyPermission1, UserPermissionValueProvider.ProviderName, david.Id.ToString());
}
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 c10e693a69..7aed694519 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,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.Identity.EntityFrameworkCore.Tests
Volo.Abp.Identity.EntityFrameworkCore.Tests
true
@@ -20,10 +20,10 @@
-
-
-
-
+
+
+
+
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 ee3d4cfe5a..9648fd3500 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,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.Identity.MongoDB.Tests
Volo.Abp.Identity.MongoDB.Tests
true
@@ -19,8 +19,8 @@
-
-
+
+
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 6ab303021c..96eafd0ac1 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,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.Identity.TestBase
Volo.Abp.Identity.TestBase
true
@@ -19,7 +19,7 @@
-
+
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 ee5fc56fd9..6df6fd8cb3 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
@@ -43,7 +43,7 @@ namespace Volo.Abp.Identity
private void AddRoles()
{
- _adminRole = _roleRepository.FindByNormalizedName(_lookupNormalizer.Normalize("admin"));
+ _adminRole = _roleRepository.FindByNormalizedName(_lookupNormalizer.NormalizeName("admin"));
_moderator = new IdentityRole(_testData.RoleModeratorId, "moderator");
_moderator.AddClaim(_guidGenerator, new Claim("test-claim", "test-value"));
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 a30cb6dd05..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
@@ -27,9 +27,9 @@ namespace Volo.Abp.Identity
{
await _identityDataSeeder.SeedAsync("admin@abp.io", "1q2w3E*");
- (await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("admin"))).ShouldNotBeNull();
- (await _userRepository.FindByNormalizedUserNameAsync(_lookupNormalizer.Normalize("admin"))).Name.ShouldBe("admin");
- (await _roleRepository.FindByNormalizedNameAsync(_lookupNormalizer.Normalize("admin"))).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 c753c1958b..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,8 +23,8 @@ namespace Volo.Abp.Identity
[Fact]
public async Task FindByNormalizedNameAsync()
{
- (await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.Normalize("admin"))).ShouldNotBeNull();
- (await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.Normalize("undefined-role"))).ShouldBeNull();
+ (await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.NormalizeName("admin"))).ShouldNotBeNull();
+ (await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.NormalizeName("undefined-role"))).ShouldBeNull();
}
[Fact]
@@ -45,7 +45,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task Should_Eager_Load_Role_Collections()
{
- var role = await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.Normalize("moderator"));
+ 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 7ad01100e8..dca811da0b 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,22 +25,22 @@ namespace Volo.Abp.Identity
[Fact]
public async Task FindByNormalizedUserNameAsync()
{
- (await UserRepository.FindByNormalizedUserNameAsync(LookupNormalizer.Normalize("john.nash"))).ShouldNotBeNull();
- (await UserRepository.FindByNormalizedUserNameAsync(LookupNormalizer.Normalize("undefined-user"))).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.Normalize("john.nash@abp.io"))).ShouldNotBeNull();
- (await UserRepository.FindByNormalizedEmailAsync(LookupNormalizer.Normalize("david@abp.io"))).ShouldNotBeNull();
- (await UserRepository.FindByNormalizedEmailAsync(LookupNormalizer.Normalize("undefined-user@abp.io"))).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.Normalize("john.nash"));
+ var john = await UserRepository.FindByNormalizedUserNameAsync(LookupNormalizer.NormalizeName("john.nash"));
var roles = await UserRepository.GetRoleNamesAsync(john.Id);
roles.Count.ShouldBe(2);
roles.ShouldContain("moderator");
@@ -80,7 +80,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task GetListByNormalizedRoleNameAsync()
{
- var users = await UserRepository.GetListByNormalizedRoleNameAsync(LookupNormalizer.Normalize("supporter"));
+ 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");
@@ -114,7 +114,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task GetRolesAsync()
{
- var john = await UserRepository.FindByNormalizedUserNameAsync(LookupNormalizer.Normalize("john.nash"));
+ 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");
@@ -131,7 +131,7 @@ namespace Volo.Abp.Identity
[Fact]
public async Task Should_Eager_Load_User_Collections()
{
- var john = await UserRepository.FindByNormalizedUserNameAsync(LookupNormalizer.Normalize("john.nash"));
+ 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 2a8f7c81a3..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,7 +28,7 @@ namespace Volo.Abp.Identity
{
using (var uow = GetRequiredService().Begin())
{
- var role = await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.Normalize("moderator"), includeDetails: false);
+ var role = await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.NormalizeName("moderator"), includeDetails: false);
role.Claims.ShouldNotBeNull();
role.Claims.Any().ShouldBeTrue();
@@ -41,7 +41,7 @@ namespace Volo.Abp.Identity
{
using (var uow = GetRequiredService().Begin())
{
- var john = await UserRepository.FindByNormalizedUserNameAsync(LookupNormalizer.Normalize("john.nash"), includeDetails: false);
+ var john = await UserRepository.FindByNormalizedUserNameAsync(LookupNormalizer.NormalizeName("john.nash"), includeDetails: false);
john.Roles.ShouldNotBeNull();
john.Roles.Any().ShouldBeTrue();
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 f642574118..25b1c9c888 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
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.IdentityServer.Domain
Volo.Abp.IdentityServer.Domain
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
@@ -22,8 +22,8 @@
-
-
+
+
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 63cbad5a87..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
@@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Identity;
using Volo.Abp.Identity;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Uow;
+using IdentityUser = Volo.Abp.Identity.IdentityUser;
namespace Volo.Abp.IdentityServer.AspNetIdentity
{
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 00d5d1039a..eff9f4b0dc 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
@@ -9,9 +9,9 @@ using IdentityServer4.Services;
using IdentityServer4.Validation;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Logging;
-using Volo.Abp.Identity;
using Volo.Abp.Security.Claims;
using Volo.Abp.Uow;
+using IdentityUser = Volo.Abp.Identity.IdentityUser;
namespace Volo.Abp.IdentityServer.AspNetIdentity
{
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 ab8bb6ffbd..400b5c0e26 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
@@ -2,6 +2,7 @@
using System.Linq;
using System.Threading.Tasks;
using IdentityServer4.Stores;
+using Volo.Abp.Domain.Entities;
using Volo.Abp.Guids;
using Volo.Abp.ObjectMapping;
@@ -26,7 +27,7 @@ namespace Volo.Abp.IdentityServer.Grants
if (entity == null)
{
entity = _objectMapper.Map(grant);
- entity.Id = _guidGenerator.Create();
+ EntityHelper.TrySetId(entity, () => _guidGenerator.Create());
await _persistentGrantRepository.InsertAsync(entity);
}
else
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 ec2eb3e809..787c285cfb 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
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.IdentityServer.EntityFrameworkCore
Volo.Abp.IdentityServer.EntityFrameworkCore
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
@@ -15,7 +15,6 @@
-
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 8d0d6f1efd..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
@@ -39,9 +39,8 @@ namespace Volo.Abp.IdentityServer.Clients
public async Task> GetAllDistinctAllowedCorsOriginsAsync(CancellationToken cancellationToken = default)
{
- return await DbSet
- .AsNoTracking()
- .SelectMany(x => x.AllowedCorsOrigins.Select(y => y.Origin))
+ return await DbContext.ClientCorsOrigins
+ .Select(x => x.Origin)
.Distinct()
.ToListAsync(GetCancellationToken(cancellationToken));
}
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 4c3c98f6bf..d6d5c806de 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
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.IdentityServer.MongoDB
Volo.Abp.IdentityServer.MongoDB
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
@@ -15,7 +15,6 @@
-
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 b6c251bd3f..c136a6bce0 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,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.IdentityServer.Domain.Tests
Volo.Abp.IdentityServer.Domain.Tests
true
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 4621daa3f4..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
@@ -138,7 +138,10 @@ namespace Volo.Abp.IdentityServer.Clients
//Arrange
await _persistedGrantStore.StoreAsync(new PersistedGrant
{
- Key = "#1P3R"
+ Key = "#1P3R",
+ Type = "Type",
+ ClientId = "ClientId",
+ Data = ""
});
//Act
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 10325012d9..d61fc1bd39 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,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.IdentityServer.EntityFrameworkCore.Tests
Volo.Abp.IdentityServer.EntityFrameworkCore.Tests
true
@@ -13,14 +13,13 @@
-
-
+
diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestEntityFrameworkCoreModule.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestEntityFrameworkCoreModule.cs
index b5515026de..627ae45e38 100644
--- a/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestEntityFrameworkCoreModule.cs
+++ b/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestEntityFrameworkCoreModule.cs
@@ -1,11 +1,12 @@
-using System;
+using Microsoft.Data.Sqlite;
using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Identity.EntityFrameworkCore;
using Volo.Abp.IdentityServer.EntityFrameworkCore;
using Volo.Abp.Modularity;
-using Volo.Abp.Uow;
namespace Volo.Abp.IdentityServer
{
@@ -18,22 +19,15 @@ namespace Volo.Abp.IdentityServer
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
- context.Services.AddEntityFrameworkInMemoryDatabase();
-
- var databaseName = Guid.NewGuid().ToString();
+ var sqliteConnection = CreateDatabaseAndGetConnection();
Configure(options =>
{
options.Configure(abpDbContextConfigurationContext =>
{
- abpDbContextConfigurationContext.DbContextOptions.UseInMemoryDatabase(databaseName);
+ abpDbContextConfigurationContext.DbContextOptions.UseSqlite(sqliteConnection);
});
});
-
- Configure(options =>
- {
- options.TransactionBehavior = UnitOfWorkTransactionBehavior.Disabled; //EF in-memory database does not support transactions
- });
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
@@ -41,6 +35,22 @@ namespace Volo.Abp.IdentityServer
SeedTestData(context);
}
+ private static SqliteConnection CreateDatabaseAndGetConnection()
+ {
+ var connection = new SqliteConnection("Data Source=:memory:");
+ connection.Open();
+
+ new IdentityDbContext(
+ new DbContextOptionsBuilder().UseSqlite(connection).Options
+ ).GetService().CreateTables();
+
+ new IdentityServerDbContext(
+ new DbContextOptionsBuilder().UseSqlite(connection).Options
+ ).GetService().CreateTables();
+
+ return connection;
+ }
+
private static void SeedTestData(ApplicationInitializationContext context)
{
using (var scope = context.ServiceProvider.CreateScope())
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 0565ad07fc..8bfbcf1e10 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,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.IdentityServer.MongoDB.Tests
Volo.Abp.IdentityServer.MongoDB.Tests
true
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 60e1791280..ee0ea3eca9 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,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.IdentityServer.TestBase
Volo.Abp.IdentityServer.TestBase
true
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 016820af49..f86d060d5b 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
@@ -51,22 +51,29 @@ namespace Volo.Abp.IdentityServer
{
_persistentGrantRepository.Insert(new PersistedGrant(_guidGenerator.Create())
{
-
Key = "PersistedGrantKey1",
SubjectId = "PersistedGrantSubjectId1",
ClientId = "PersistedGrantClientId1",
- Type = "PersistedGrantType1"
+ Type = "PersistedGrantType1",
+ Data = ""
});
+
_persistentGrantRepository.Insert(new PersistedGrant(_guidGenerator.Create())
{
Key = "PersistedGrantKey2",
- SubjectId = "PersistedGrantSubjectId2"
+ SubjectId = "PersistedGrantSubjectId2",
+ ClientId = "c1",
+ Type = "c1type",
+ Data = ""
});
_persistentGrantRepository.Insert(new PersistedGrant(_guidGenerator.Create())
{
Key = "PersistedGrantKey3",
- SubjectId = "PersistedGrantSubjectId3"
+ SubjectId = "PersistedGrantSubjectId3",
+ ClientId = "c1",
+ Type = "c1type",
+ Data = ""
});
}
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 300065764f..fd4d602045 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
@@ -15,9 +15,6 @@
-
-
-
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 dd65cffbea..c13b3da80b 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,9 +1,9 @@
-
+
- netstandard2.0
+ netstandard2.1
Volo.Abp.PermissionManagement.EntityFrameworkCore
Volo.Abp.PermissionManagement.EntityFrameworkCore
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
@@ -15,7 +15,6 @@
-
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 4a719f72c3..0b0cfa49ca 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
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.PermissionManagement.HttpApi.Client
Volo.Abp.PermissionManagement.HttpApi.Client
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
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 d650ca2e06..88f98c7eef 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
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.PermissionManagement.HttpApi
Volo.Abp.PermissionManagement.HttpApi
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
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 ed623b39d1..53ad2adde2 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,4 +1,4 @@
-
+
@@ -15,7 +15,6 @@
-
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 820d477af3..b501ab1a71 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
@@ -3,12 +3,12 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.PermissionManagement.Web
Volo.Abp.PermissionManagement.Web
- true
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
Library
+ true
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 7e817abf24..cf445a30ef 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,13 +1,11 @@
- netcoreapp2.2
-
- false
+ netcoreapp3.0
-
+
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 c31040474a..82a992f016 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,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.PermissionManagement.EntityFrameworkCore.Tests
Volo.Abp.PermissionManagement.EntityFrameworkCore.Tests
true
@@ -17,8 +17,8 @@
-
-
+
+
\ 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 47932e4c38..d9552b8639 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,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.PermissionManagement.MongoDB.Tests
Volo.Abp.PermissionManagement.MongoDB.Tests
true
@@ -17,8 +17,8 @@
-
-
+
+
\ 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 e4fe696695..9a9dffc2eb 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,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.PermissionManagement.TestBase
Volo.Abp.PermissionManagement.TestBase
true
@@ -18,7 +18,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.Tests.csproj
index b4ecce9e40..66b323fa32 100644
--- 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.Tests.csproj
@@ -1,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.PermissionManagement.Tests
Volo.Abp.PermissionManagement.Tests
true
@@ -17,8 +17,8 @@
-
-
+
+
\ 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 a7ba339c3e..8de8ec1923 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
@@ -13,12 +13,9 @@
-
-
-
-
+
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 0261b31704..f5e1761cc5 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.0
+ netstandard2.1
Volo.Abp.SettingManagement.EntityFrameworkCore
Volo.Abp.SettingManagement.EntityFrameworkCore
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
@@ -15,7 +15,6 @@
-
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 0f86335627..8f068d1f12 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
@@ -15,7 +15,6 @@
-
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 3361037ae1..59d35e028e 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
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Library
true
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
@@ -19,10 +19,9 @@
-
-
-
-
+
+
+
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 53ff012ea6..318f1135e3 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,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.SettingManagement.EntityFrameworkCore.Tests
Volo.Abp.SettingManagement.EntityFrameworkCore.Tests
true
@@ -17,9 +17,9 @@
-
-
-
+
+
+
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 bec724072d..ecb74b4710 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,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.SettingManagement.MongoDB.Tests
Volo.Abp.SettingManagement.MongoDB.Tests
true
@@ -17,8 +17,8 @@
-
-
+
+
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 71919bfbbc..a5c7f139fe 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,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.SettingManagement.TestBase
Volo.Abp.SettingManagement.TestBase
true
@@ -18,7 +18,7 @@
-
+
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 b73f434279..908d633863 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,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.SettingManagement.Tests
Volo.Abp.SettingManagement.Tests
true
@@ -12,14 +12,12 @@
-
-
-
+
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 f99d3f8609..57f177df96 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
@@ -18,8 +18,4 @@
-
-
-
-
diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementApplicationContractsModule.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementApplicationContractsModule.cs
index 9ca2c82bdb..deef6f17cd 100644
--- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementApplicationContractsModule.cs
+++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementApplicationContractsModule.cs
@@ -1,28 +1,13 @@
using Volo.Abp.Application;
-using Volo.Abp.Localization;
using Volo.Abp.Modularity;
-using Volo.Abp.TenantManagement.Localization;
-using Volo.Abp.VirtualFileSystem;
namespace Volo.Abp.TenantManagement
{
- [DependsOn(typeof(AbpDddApplicationModule))]
- [DependsOn(typeof(AbpTenantManagementDomainSharedModule))]
+ [DependsOn(
+ typeof(AbpDddApplicationModule),
+ typeof(AbpTenantManagementDomainSharedModule))]
public class AbpTenantManagementApplicationContractsModule : AbpModule
{
- public override void ConfigureServices(ServiceConfigurationContext context)
- {
- Configure(options =>
- {
- options.FileSets.AddEmbedded();
- });
- Configure(options =>
- {
- options.Resources
- .Get()
- .AddVirtualJson("/Volo/Abp/TenantManagement/Localization/ApplicationContracts");
- });
- }
}
}
\ No newline at end of file
diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/cs.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/cs.json
deleted file mode 100644
index 415294c34a..0000000000
--- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/cs.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "culture": "cs",
- "texts": {
- "Permission:TenantManagement": "Správa tenantů",
- "Permission:Create": "Vytvořit",
- "Permission:Edit": "Upravit",
- "Permission:Delete": "Smazat",
- "Permission:ManageConnectionStrings": "Spravovat connection stringy",
- "Permission:ManageFeatures": "Spravovat funkce"
- }
-}
\ No newline at end of file
diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/en.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/en.json
deleted file mode 100644
index 5107cd269b..0000000000
--- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/en.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "culture": "en",
- "texts": {
- "Permission:TenantManagement": "Tenant management",
- "Permission:Create": "Create",
- "Permission:Edit": "Edit",
- "Permission:Delete": "Delete",
- "Permission:ManageConnectionStrings": "Manage connection strings",
- "Permission:ManageFeatures": "Manage features"
- }
-}
\ No newline at end of file
diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/pl.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/pl.json
deleted file mode 100644
index 500b784dfd..0000000000
--- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/pl.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "culture": "pl",
- "texts": {
- "Permission:TenantManagement": "Zarządzanie tenantami",
- "Permission:Create": "Utwórz",
- "Permission:Edit": "Edytuj",
- "Permission:Delete": "Usuń",
- "Permission:ManageConnectionStrings": "Zarządzaj connection string'ami",
- "Permission:ManageFeatures": "Zarządzaj fukcjami"
- }
-}
\ No newline at end of file
diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/pt-BR.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/pt-BR.json
deleted file mode 100644
index 6631be849a..0000000000
--- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/pt-BR.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "culture": "pt-BR",
- "texts": {
- "Permission:TenantManagement": "Inquilinos",
- "Permission:Create": "Criar",
- "Permission:Edit": "Editar",
- "Permission:Delete": "Excluir",
- "Permission:ManageConnectionStrings": "Gerenciar conexões (connection strings)",
- "Permission:ManageFeatures": "Gerenciar Funcionalidades"
- }
-}
\ No newline at end of file
diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/tr.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/tr.json
deleted file mode 100644
index d745a400c3..0000000000
--- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/tr.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "culture": "tr",
- "texts": {
- "Permission:TenantManagement": "Müşteri yönetimi",
- "Permission:Create": "Oluşturma",
- "Permission:Edit": "Düzenleme",
- "Permission:Delete": "Silme",
- "Permission:ManageConnectionStrings": "Bağlantı cümlelerini yönet",
- "Permission:ManageFeatures": "Özellikleri yönet"
- }
-}
\ No newline at end of file
diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/vi.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/vi.json
deleted file mode 100644
index 3518883435..0000000000
--- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/vi.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "culture": "vi",
- "texts": {
- "Permission:TenantManagement": "Quản lý khách thuê",
- "Permission:Create": "Tạo",
- "Permission:Edit": "Sửa",
- "Permission:Delete": "Xóa",
- "Permission:ManageConnectionStrings": "Quản lý chuỗi kết nối",
- "Permission:ManageFeatures": "Quản lý các tính năng"
- }
-}
diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/zh-Hans.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/zh-Hans.json
deleted file mode 100644
index ca1c428755..0000000000
--- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/zh-Hans.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "culture": "zh-Hans",
- "texts": {
- "Permission:TenantManagement": "租户管理",
- "Permission:Create": "创建",
- "Permission:Edit": "编辑",
- "Permission:Delete": "删除",
- "Permission:ManageConnectionStrings": "管理连接字符串",
- "Permission:ManageFeatures": "管理功能"
- }
- }
\ 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 81c0265dd8..dec1cabd46 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
@@ -13,14 +13,11 @@
-
-
-
-
+
-
+
diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/cs.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/cs.json
index df819c5798..16f967139f 100644
--- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/cs.json
+++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/cs.json
@@ -9,6 +9,12 @@
"TenantDeletionConfirmationMessage": "Tenant '{0}' bude smazán. Jste si jistí?",
"ConnectionStrings": "Connection stringy",
"DisplayName:DefaultConnectionString": "Výchozí connection string",
- "DisplayName:UseSharedDatabase": "Použít sdílenou databázi"
+ "DisplayName:UseSharedDatabase": "Použít sdílenou databázi",
+ "Permission:TenantManagement": "Správa tenantů",
+ "Permission:Create": "Vytvořit",
+ "Permission:Edit": "Upravit",
+ "Permission:Delete": "Smazat",
+ "Permission:ManageConnectionStrings": "Spravovat connection stringy",
+ "Permission:ManageFeatures": "Spravovat funkce"
}
}
\ No newline at end of file
diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en.json
index f38deeea89..fc51f00750 100644
--- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en.json
+++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en.json
@@ -9,6 +9,12 @@
"TenantDeletionConfirmationMessage": "Tenant '{0}' will be deleted. Do you confirm that?",
"ConnectionStrings": "Connection Strings",
"DisplayName:DefaultConnectionString": "Default Connection String",
- "DisplayName:UseSharedDatabase": "Use the Shared Database"
+ "DisplayName:UseSharedDatabase": "Use the Shared Database",
+ "Permission:TenantManagement": "Tenant management",
+ "Permission:Create": "Create",
+ "Permission:Edit": "Edit",
+ "Permission:Delete": "Delete",
+ "Permission:ManageConnectionStrings": "Manage connection strings",
+ "Permission:ManageFeatures": "Manage features"
}
}
\ No newline at end of file
diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/pl.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/pl.json
index 537d235293..18891c3633 100644
--- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/pl.json
+++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/pl.json
@@ -9,6 +9,12 @@
"TenantDeletionConfirmationMessage": "Tenant '{0}' zostanie usunięty. Czy na pewno?",
"ConnectionStrings": "Connection Strings",
"DisplayName:DefaultConnectionString": "Domyślny Connection String",
- "DisplayName:UseSharedDatabase": "Użyj współdzielonej bazy danych"
+ "DisplayName:UseSharedDatabase": "Użyj współdzielonej bazy danych",
+ "Permission:TenantManagement": "Zarządzanie tenantami",
+ "Permission:Create": "Utwórz",
+ "Permission:Edit": "Edytuj",
+ "Permission:Delete": "Usuń",
+ "Permission:ManageConnectionStrings": "Zarządzaj connection string'ami",
+ "Permission:ManageFeatures": "Zarządzaj fukcjami"
}
}
\ No newline at end of file
diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/pt-BR.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/pt-BR.json
index 95f87d2d7b..13d26b1b47 100644
--- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/pt-BR.json
+++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/pt-BR.json
@@ -9,6 +9,12 @@
"TenantDeletionConfirmationMessage": "Inquilino '{0}' será excluído. Tem certeza?",
"ConnectionStrings": "String de Conexão",
"DisplayName:DefaultConnectionString": "String de Conexão Padrão",
- "DisplayName:UseSharedDatabase": "Use o banco de dados compartilhado"
+ "DisplayName:UseSharedDatabase": "Use o banco de dados compartilhado",
+ "Permission:TenantManagement": "Inquilinos",
+ "Permission:Create": "Criar",
+ "Permission:Edit": "Editar",
+ "Permission:Delete": "Excluir",
+ "Permission:ManageConnectionStrings": "Gerenciar conexões (connection strings)",
+ "Permission:ManageFeatures": "Gerenciar Funcionalidades"
}
}
\ No newline at end of file
diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/tr.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/tr.json
index a3d40067f7..1b6bdca2c2 100644
--- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/tr.json
+++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/tr.json
@@ -9,6 +9,12 @@
"TenantDeletionConfirmationMessage": "'{0}' isimli müşteri silinecektir. Onaylıyor musunuz?",
"ConnectionStrings": "Bağlantı cümlesi",
"DisplayName:DefaultConnectionString": "Varsayılan bağlantı cümlesi",
- "DisplayName:UseSharedDatabase": "Paylaşılan veritabanını kullan"
+ "DisplayName:UseSharedDatabase": "Paylaşılan veritabanını kullan",
+ "Permission:TenantManagement": "Müşteri yönetimi",
+ "Permission:Create": "Oluşturma",
+ "Permission:Edit": "Düzenleme",
+ "Permission:Delete": "Silme",
+ "Permission:ManageConnectionStrings": "Bağlantı cümlelerini yönet",
+ "Permission:ManageFeatures": "Özellikleri yönet"
}
}
\ No newline at end of file
diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/vi.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/vi.json
index 1818cbdffd..cedefb842f 100644
--- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/vi.json
+++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/vi.json
@@ -9,6 +9,12 @@
"TenantDeletionConfirmationMessage": "Người thuê '{0}' sẽ bị xóa. Bạn có xác nhận không?",
"ConnectionStrings": "Chuỗi kết nối",
"DisplayName:DefaultConnectionString": "Chuỗi kết nối mặc định",
- "DisplayName:UseSharedDatabase": "Sử dụng cơ sở dữ liệu dùng chung"
+ "DisplayName:UseSharedDatabase": "Sử dụng cơ sở dữ liệu dùng chung",
+ "Permission:TenantManagement": "Quản lý khách thuê",
+ "Permission:Create": "Tạo",
+ "Permission:Edit": "Sửa",
+ "Permission:Delete": "Xóa",
+ "Permission:ManageConnectionStrings": "Quản lý chuỗi kết nối",
+ "Permission:ManageFeatures": "Quản lý các tính năng"
}
}
diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/zh-Hans.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/zh-Hans.json
index da5951a7f4..b60c68e2e0 100644
--- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/zh-Hans.json
+++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/zh-Hans.json
@@ -9,6 +9,12 @@
"TenantDeletionConfirmationMessage": "租户 '{0}' 将被删除. 你确定吗?",
"ConnectionStrings": "连接字符串",
"DisplayName:DefaultConnectionString": "默认连接字符串",
- "DisplayName:UseSharedDatabase": "使用共享数据库"
+ "DisplayName:UseSharedDatabase": "使用共享数据库",
+ "Permission:TenantManagement": "租户管理",
+ "Permission:Create": "创建",
+ "Permission:Edit": "编辑",
+ "Permission:Delete": "删除",
+ "Permission:ManageConnectionStrings": "管理连接字符串",
+ "Permission:ManageFeatures": "管理功能"
}
}
\ 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 d83470ecf8..259f5e7a73 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,9 +1,9 @@
-
+
- netstandard2.0
+ netstandard2.1
Volo.Abp.TenantManagement.EntityFrameworkCore
Volo.Abp.TenantManagement.EntityFrameworkCore
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
@@ -15,7 +15,6 @@
-
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 7e473b1335..ad2458e35d 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,9 +1,9 @@
-
+
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.TenantManagement.HttpApi.Client
Volo.Abp.TenantManagement.HttpApi.Client
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
@@ -15,7 +15,6 @@
-
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 28fb85137c..13d7ea68b8 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
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.TenantManagement.HttpApi
Volo.Abp.TenantManagement.HttpApi
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
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 d55f759611..aa7c7f9340 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,4 +1,4 @@
-
+
@@ -15,7 +15,6 @@
-
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 1bcf4f99a9..27f3944a26 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
@@ -3,7 +3,7 @@
- netstandard2.0
+ netcoreapp3.0
Volo.Abp.TenantManagement.Web
Volo.Abp.TenantManagement.Web
true
@@ -12,10 +12,9 @@
-
-
-
-
+
+
+
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 5363fb8365..93f9df3f28 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,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.TenantManagement.Application.Tests
Volo.Abp.TenantManagement.Application.Tests
true
@@ -17,7 +17,7 @@
-
+
diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo.Abp.TenantManagement.Domain.Tests.csproj b/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo.Abp.TenantManagement.Domain.Tests.csproj
index 0993f200ea..1df4e17e3c 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,12 +1,12 @@
- netcoreapp2.2
+ netcoreapp3.0
-
+
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 b1c51dbd86..4f4169d8f0 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,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.TenantManagement.EntityFrameworkCore.Tests
Volo.Abp.TenantManagement.EntityFrameworkCore.Tests
true
@@ -17,9 +17,9 @@
-
-
-
+
+
+
diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/Volo/Abp/TenantManagement/EntityFrameworkCore/AbpTenantManagementEntityFrameworkCoreTestModule.cs b/modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/Volo/Abp/TenantManagement/EntityFrameworkCore/AbpTenantManagementEntityFrameworkCoreTestModule.cs
index fac45a1b9a..dd5d9f8ae2 100644
--- a/modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/Volo/Abp/TenantManagement/EntityFrameworkCore/AbpTenantManagementEntityFrameworkCoreTestModule.cs
+++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.EntityFrameworkCore.Tests/Volo/Abp/TenantManagement/EntityFrameworkCore/AbpTenantManagementEntityFrameworkCoreTestModule.cs
@@ -1,6 +1,8 @@
using System;
+using Microsoft.Data.Sqlite;
using Microsoft.EntityFrameworkCore;
-using Microsoft.Extensions.DependencyInjection;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Storage;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Modularity;
using Volo.Abp.Uow;
@@ -15,15 +17,13 @@ namespace Volo.Abp.TenantManagement.EntityFrameworkCore
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
- context.Services.AddEntityFrameworkInMemoryDatabase();
-
- var databaseName = Guid.NewGuid().ToString();
+ var sqliteConnection = CreateDatabaseAndGetConnection();
Configure(options =>
{
options.Configure(abpDbContextConfigurationContext =>
{
- abpDbContextConfigurationContext.DbContextOptions.UseInMemoryDatabase(databaseName);
+ abpDbContextConfigurationContext.DbContextOptions.UseSqlite(sqliteConnection);
});
});
@@ -32,5 +32,17 @@ namespace Volo.Abp.TenantManagement.EntityFrameworkCore
options.TransactionBehavior = UnitOfWorkTransactionBehavior.Disabled; //EF in-memory database does not support transactions
});
}
+
+ private static SqliteConnection CreateDatabaseAndGetConnection()
+ {
+ var connection = new SqliteConnection("Data Source=:memory:");
+ connection.Open();
+
+ new TenantManagementDbContext(
+ new DbContextOptionsBuilder().UseSqlite(connection).Options
+ ).GetService().CreateTables();
+
+ return connection;
+ }
}
}
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 5e7268131c..d659b29068 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,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.TenantManagement.MongoDB.Tests
Volo.Abp.TenantManagement.MongoDB.Tests
true
@@ -17,8 +17,8 @@
-
-
+
+
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 61473146ae..84bfb56b48 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,7 +1,7 @@
- netcoreapp2.2
+ netcoreapp3.0
Volo.Abp.TenantManagement.TestBase
Volo.Abp.TenantManagement.TestBase
true
@@ -18,7 +18,7 @@
-
+
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 16617a7694..d70b92e1a4 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,9 +1,9 @@
-
+
- netstandard2.0
+ netstandard2.1
Volo.Abp.Users.EntityFrameworkCore
Volo.Abp.Users.EntityFrameworkCore
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
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 a814f2ae47..2ba192fe5f 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
@@ -19,7 +19,7 @@
-
+
diff --git a/npm/ng-packs/packages/account/src/lib/services/account.service.ts b/npm/ng-packs/packages/account/src/lib/services/account.service.ts
index dc7693b693..ce90f7c6e0 100644
--- a/npm/ng-packs/packages/account/src/lib/services/account.service.ts
+++ b/npm/ng-packs/packages/account/src/lib/services/account.service.ts
@@ -12,7 +12,7 @@ export class AccountService {
findTenant(tenantName: string): Observable {
const request: Rest.Request = {
method: 'GET',
- url: `/api/abp/multi-tenancy/find-tenant/${tenantName}`,
+ url: `/api/abp/multi-tenancy/tenants/by-name/${tenantName}`,
};
return this.rest.request(request);
diff --git a/samples/BookStore-Modular/application/.gitattributes b/samples/BookStore-Modular/application/.gitattributes
new file mode 100644
index 0000000000..c941e52669
--- /dev/null
+++ b/samples/BookStore-Modular/application/.gitattributes
@@ -0,0 +1 @@
+**/wwwroot/libs/** linguist-vendored
diff --git a/samples/BookStore-Modular/application/.gitignore b/samples/BookStore-Modular/application/.gitignore
new file mode 100644
index 0000000000..e9ccd519eb
--- /dev/null
+++ b/samples/BookStore-Modular/application/.gitignore
@@ -0,0 +1,259 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+
+# User-specific files
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+
+# Visual Studio 2015 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUNIT
+*.VisualState.xml
+TestResult.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# DNX
+project.lock.json
+artifacts/
+
+*_i.c
+*_p.c
+*_i.h
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# JustCode is a .NET coding add-in
+.JustCode
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# TODO: Comment the next line if you want to checkin your web deploy settings
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# The packages folder can be ignored because of Package Restore
+**/packages/*
+# except build/, which is used as an MSBuild target.
+!**/packages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/packages/repositories.config
+# NuGet v3's project.json files produces more ignoreable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.pfx
+*.publishsettings
+node_modules/
+orleans.codegen.cs
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+
+# SQL Server files
+*.mdf
+*.ldf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# JetBrains Rider
+.idea/
+*.sln.iml
+
+# BookStore
+src/Acme.BookStore.Web/Logs/*
+src/Acme.BookStore.Web.Host/Logs/*
+src/Acme.BookStore.IdentityServer/Logs/*
+src/Acme.BookStore.HttpApi.Host/Logs/*
+src/Acme.BookStore.HttpApi.HostWithIds/Logs/*
\ No newline at end of file
diff --git a/samples/BookStore-Modular/application/Acme.BookStore.sln b/samples/BookStore-Modular/application/Acme.BookStore.sln
new file mode 100644
index 0000000000..5750b0dbef
--- /dev/null
+++ b/samples/BookStore-Modular/application/Acme.BookStore.sln
@@ -0,0 +1,137 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29020.237
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acme.BookStore.Domain", "src\Acme.BookStore.Domain\Acme.BookStore.Domain.csproj", "{554AD327-6DBA-4F8F-96F8-81CE7A0C863F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acme.BookStore.Application", "src\Acme.BookStore.Application\Acme.BookStore.Application.csproj", "{1A94A50E-06DC-43C1-80B5-B662820EC3EB}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acme.BookStore.EntityFrameworkCore", "src\Acme.BookStore.EntityFrameworkCore\Acme.BookStore.EntityFrameworkCore.csproj", "{C956DD76-69C8-4A9C-83EA-D17DF83340FD}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acme.BookStore.Web", "src\Acme.BookStore.Web\Acme.BookStore.Web.csproj", "{068855E8-9240-4F1A-910B-CF825794513B}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{CA9AC87F-097E-4F15-8393-4BC07735A5B0}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{04DBDB01-70F4-4E06-B468-8F87850B22BE}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acme.BookStore.Application.Tests", "test\Acme.BookStore.Application.Tests\Acme.BookStore.Application.Tests.csproj", "{50B2631D-129C-47B3-A587-029CCD6099BC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acme.BookStore.Web.Tests", "test\Acme.BookStore.Web.Tests\Acme.BookStore.Web.Tests.csproj", "{5F1B28C6-8D0C-4155-92D0-252F7EA5F674}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acme.BookStore.EntityFrameworkCore.DbMigrations", "src\Acme.BookStore.EntityFrameworkCore.DbMigrations\Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj", "{0372FA84-C517-4EB3-9A9F-B9ACAC0CA5E0}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acme.BookStore.Domain.Shared", "src\Acme.BookStore.Domain.Shared\Acme.BookStore.Domain.Shared.csproj", "{42F719ED-8413-4895-B5B4-5AB56079BC66}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acme.BookStore.Application.Contracts", "src\Acme.BookStore.Application.Contracts\Acme.BookStore.Application.Contracts.csproj", "{520659C8-C734-4298-A3DA-B539DB9DFC0B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acme.BookStore.HttpApi", "src\Acme.BookStore.HttpApi\Acme.BookStore.HttpApi.csproj", "{4164BDF7-F527-4E85-9CE6-E3C2D7426A27}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acme.BookStore.HttpApi.Client", "src\Acme.BookStore.HttpApi.Client\Acme.BookStore.HttpApi.Client.csproj", "{3B5A0094-670D-4BB1-BFDD-61B88A8773DC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acme.BookStore.EntityFrameworkCore.Tests", "test\Acme.BookStore.EntityFrameworkCore.Tests\Acme.BookStore.EntityFrameworkCore.Tests.csproj", "{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acme.BookStore.TestBase", "test\Acme.BookStore.TestBase\Acme.BookStore.TestBase.csproj", "{91853F21-9CD9-4132-BC29-A7D5D84FFFE7}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acme.BookStore.Domain.Tests", "test\Acme.BookStore.Domain.Tests\Acme.BookStore.Domain.Tests.csproj", "{E512F4D9-9375-480F-A2F6-A46509F9D824}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acme.BookStore.HttpApi.Client.ConsoleTestApp", "test\Acme.BookStore.HttpApi.Client.ConsoleTestApp\Acme.BookStore.HttpApi.Client.ConsoleTestApp.csproj", "{EF480016-9127-4916-8735-D2466BDBC582}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acme.BookStore.DbMigrator", "src\Acme.BookStore.DbMigrator\Acme.BookStore.DbMigrator.csproj", "{AA94D832-1CCC-4715-95A9-A483F23A1A5D}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {068855E8-9240-4F1A-910B-CF825794513B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {068855E8-9240-4F1A-910B-CF825794513B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {068855E8-9240-4F1A-910B-CF825794513B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {068855E8-9240-4F1A-910B-CF825794513B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {50B2631D-129C-47B3-A587-029CCD6099BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {50B2631D-129C-47B3-A587-029CCD6099BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {50B2631D-129C-47B3-A587-029CCD6099BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {50B2631D-129C-47B3-A587-029CCD6099BC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5F1B28C6-8D0C-4155-92D0-252F7EA5F674}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5F1B28C6-8D0C-4155-92D0-252F7EA5F674}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5F1B28C6-8D0C-4155-92D0-252F7EA5F674}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5F1B28C6-8D0C-4155-92D0-252F7EA5F674}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0372FA84-C517-4EB3-9A9F-B9ACAC0CA5E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0372FA84-C517-4EB3-9A9F-B9ACAC0CA5E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0372FA84-C517-4EB3-9A9F-B9ACAC0CA5E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0372FA84-C517-4EB3-9A9F-B9ACAC0CA5E0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {42F719ED-8413-4895-B5B4-5AB56079BC66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {42F719ED-8413-4895-B5B4-5AB56079BC66}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {42F719ED-8413-4895-B5B4-5AB56079BC66}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {42F719ED-8413-4895-B5B4-5AB56079BC66}.Release|Any CPU.Build.0 = Release|Any CPU
+ {520659C8-C734-4298-A3DA-B539DB9DFC0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {520659C8-C734-4298-A3DA-B539DB9DFC0B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {520659C8-C734-4298-A3DA-B539DB9DFC0B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {520659C8-C734-4298-A3DA-B539DB9DFC0B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Release|Any CPU.Build.0 = Release|Any CPU
+ {91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E512F4D9-9375-480F-A2F6-A46509F9D824}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E512F4D9-9375-480F-A2F6-A46509F9D824}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E512F4D9-9375-480F-A2F6-A46509F9D824}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E512F4D9-9375-480F-A2F6-A46509F9D824}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EF480016-9127-4916-8735-D2466BDBC582}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EF480016-9127-4916-8735-D2466BDBC582}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EF480016-9127-4916-8735-D2466BDBC582}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EF480016-9127-4916-8735-D2466BDBC582}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {554AD327-6DBA-4F8F-96F8-81CE7A0C863F} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {1A94A50E-06DC-43C1-80B5-B662820EC3EB} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {C956DD76-69C8-4A9C-83EA-D17DF83340FD} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {068855E8-9240-4F1A-910B-CF825794513B} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {50B2631D-129C-47B3-A587-029CCD6099BC} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
+ {5F1B28C6-8D0C-4155-92D0-252F7EA5F674} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
+ {0372FA84-C517-4EB3-9A9F-B9ACAC0CA5E0} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {42F719ED-8413-4895-B5B4-5AB56079BC66} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {520659C8-C734-4298-A3DA-B539DB9DFC0B} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {4164BDF7-F527-4E85-9CE6-E3C2D7426A27} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {3B5A0094-670D-4BB1-BFDD-61B88A8773DC} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ {1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
+ {91853F21-9CD9-4132-BC29-A7D5D84FFFE7} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
+ {E512F4D9-9375-480F-A2F6-A46509F9D824} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
+ {EF480016-9127-4916-8735-D2466BDBC582} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
+ {AA94D832-1CCC-4715-95A9-A483F23A1A5D} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {28315BFD-90E7-4E14-A2EA-F3D23AF4126F}
+ EndGlobalSection
+EndGlobal
diff --git a/samples/BookStore-Modular/application/Acme.BookStore.sln.DotSettings b/samples/BookStore-Modular/application/Acme.BookStore.sln.DotSettings
new file mode 100644
index 0000000000..cb0b2c919f
--- /dev/null
+++ b/samples/BookStore-Modular/application/Acme.BookStore.sln.DotSettings
@@ -0,0 +1,23 @@
+
+ True
+ WARNING
+ WARNING
+ WARNING
+ WARNING
+ WARNING
+ WARNING
+ WARNING
+ WARNING
+ Required
+ Required
+ Required
+ Required
+ False
+ True
+ False
+ False
+ True
+ False
+ False
+ SQL
+
\ No newline at end of file
diff --git a/samples/BookStore-Modular/application/common.props b/samples/BookStore-Modular/application/common.props
new file mode 100644
index 0000000000..7585f303ba
--- /dev/null
+++ b/samples/BookStore-Modular/application/common.props
@@ -0,0 +1,7 @@
+
+
+ latest
+ 1.0.0
+ $(NoWarn);CS1591
+
+
\ 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
new file mode 100644
index 0000000000..117321b755
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/Acme.BookStore.Application.Contracts.csproj
@@ -0,0 +1,23 @@
+
+
+
+
+
+ netstandard2.0
+ Acme.BookStore
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/BookStoreApplicationContractsModule.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/BookStoreApplicationContractsModule.cs
new file mode 100644
index 0000000000..2caf294e96
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/BookStoreApplicationContractsModule.cs
@@ -0,0 +1,24 @@
+using Acme.BookStore.BookManagement;
+using Volo.Abp.Account;
+using Volo.Abp.FeatureManagement;
+using Volo.Abp.Identity;
+using Volo.Abp.Modularity;
+using Volo.Abp.PermissionManagement;
+using Volo.Abp.TenantManagement;
+
+namespace Acme.BookStore
+{
+ [DependsOn(
+ typeof(BookStoreDomainSharedModule),
+ typeof(AbpAccountApplicationContractsModule),
+ typeof(AbpFeatureManagementApplicationContractsModule),
+ typeof(AbpIdentityApplicationContractsModule),
+ typeof(AbpPermissionManagementApplicationContractsModule),
+ typeof(AbpTenantManagementApplicationContractsModule),
+ typeof(BookManagementApplicationContractsModule)
+ )]
+ public class BookStoreApplicationContractsModule : AbpModule
+ {
+
+ }
+}
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/Permissions/BookStorePermissionDefinitionProvider.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/Permissions/BookStorePermissionDefinitionProvider.cs
new file mode 100644
index 0000000000..e189ca3743
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/Permissions/BookStorePermissionDefinitionProvider.cs
@@ -0,0 +1,22 @@
+using Acme.BookStore.Localization;
+using Volo.Abp.Authorization.Permissions;
+using Volo.Abp.Localization;
+
+namespace Acme.BookStore.Permissions
+{
+ public class BookStorePermissionDefinitionProvider : PermissionDefinitionProvider
+ {
+ public override void Define(IPermissionDefinitionContext context)
+ {
+ var myGroup = context.AddGroup(BookStorePermissions.GroupName);
+
+ //Define your own permissions here. Example:
+ //myGroup.AddPermission(BookStorePermissions.MyPermission1, L("Permission:MyPermission1"));
+ }
+
+ private static LocalizableString L(string name)
+ {
+ return LocalizableString.Create(name);
+ }
+ }
+}
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/Permissions/BookStorePermissions.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/Permissions/BookStorePermissions.cs
new file mode 100644
index 0000000000..b05c4883bd
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Application.Contracts/Permissions/BookStorePermissions.cs
@@ -0,0 +1,10 @@
+namespace Acme.BookStore.Permissions
+{
+ public static class BookStorePermissions
+ {
+ public const string GroupName = "BookStore";
+
+ //Add your own permission names. Example:
+ //public const string MyPermission1 = GroupName + ".MyPermission1";
+ }
+}
\ 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
new file mode 100644
index 0000000000..c720ac169c
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Application/Acme.BookStore.Application.csproj
@@ -0,0 +1,24 @@
+
+
+
+
+
+ netcoreapp2.2
+ Acme.BookStore
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Application/BookStoreAppService.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.Application/BookStoreAppService.cs
new file mode 100644
index 0000000000..06da155c39
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Application/BookStoreAppService.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Acme.BookStore.Localization;
+using Volo.Abp.Application.Services;
+
+namespace Acme.BookStore
+{
+ /* Inherit your application services from this class.
+ */
+ public abstract class BookStoreAppService : ApplicationService
+ {
+ protected BookStoreAppService()
+ {
+ LocalizationResource = typeof(BookStoreResource);
+ }
+ }
+}
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Application/BookStoreApplicationAutoMapperProfile.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.Application/BookStoreApplicationAutoMapperProfile.cs
new file mode 100644
index 0000000000..0706d83633
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Application/BookStoreApplicationAutoMapperProfile.cs
@@ -0,0 +1,14 @@
+using AutoMapper;
+
+namespace Acme.BookStore
+{
+ public class BookStoreApplicationAutoMapperProfile : Profile
+ {
+ public BookStoreApplicationAutoMapperProfile()
+ {
+ /* You can configure your AutoMapper mapping configuration here.
+ * Alternatively, you can split your mapping configurations
+ * into multiple profile classes for a better organization. */
+ }
+ }
+}
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Application/BookStoreApplicationModule.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.Application/BookStoreApplicationModule.cs
new file mode 100644
index 0000000000..3337e5deb4
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Application/BookStoreApplicationModule.cs
@@ -0,0 +1,36 @@
+using Acme.BookStore.BookManagement;
+using Volo.Abp.Account;
+using Volo.Abp.AutoMapper;
+using Volo.Abp.FeatureManagement;
+using Volo.Abp.Identity;
+using Volo.Abp.Modularity;
+using Volo.Abp.PermissionManagement;
+using Volo.Abp.TenantManagement;
+
+namespace Acme.BookStore
+{
+ [DependsOn(
+ typeof(BookStoreDomainModule),
+ typeof(AbpAccountApplicationModule),
+ typeof(BookStoreApplicationContractsModule),
+ typeof(AbpIdentityApplicationModule),
+ typeof(AbpPermissionManagementApplicationModule),
+ typeof(AbpTenantManagementApplicationModule),
+ typeof(AbpFeatureManagementApplicationModule),
+ typeof(BookManagementApplicationModule)
+ )]
+ public class BookStoreApplicationModule : AbpModule
+ {
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options =>
+ {
+ /* Use `true` for the `validate` parameter if you want to
+ * validate the profile on application startup.
+ * See http://docs.automapper.org/en/stable/Configuration-validation.html for more info
+ * about the configuration validation. */
+ options.AddProfile();
+ });
+ }
+ }
+}
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
new file mode 100644
index 0000000000..b03c3f2227
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/Acme.BookStore.DbMigrator.csproj
@@ -0,0 +1,33 @@
+
+
+
+
+
+ Exe
+ netcoreapp2.2
+
+
+
+
+
+
+
+
+ PreserveNewest
+ Always
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/BookStoreDbMigratorModule.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/BookStoreDbMigratorModule.cs
new file mode 100644
index 0000000000..93309506ea
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/BookStoreDbMigratorModule.cs
@@ -0,0 +1,20 @@
+using Acme.BookStore.EntityFrameworkCore;
+using Volo.Abp.Autofac;
+using Volo.Abp.BackgroundJobs;
+using Volo.Abp.Modularity;
+
+namespace Acme.BookStore.DbMigrator
+{
+ [DependsOn(
+ typeof(AbpAutofacModule),
+ typeof(BookStoreEntityFrameworkCoreDbMigrationsModule),
+ typeof(BookStoreApplicationContractsModule)
+ )]
+ public class BookStoreDbMigratorModule : AbpModule
+ {
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options => options.IsJobExecutionEnabled = false);
+ }
+ }
+}
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/Program.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/Program.cs
new file mode 100644
index 0000000000..d3c4034c8a
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/Program.cs
@@ -0,0 +1,53 @@
+using System.IO;
+using Microsoft.Extensions.DependencyInjection;
+using Acme.BookStore.Data;
+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()
+ {
+ Log.Logger = new LoggerConfiguration()
+ .MinimumLevel.Information()
+ .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
+ .MinimumLevel.Override("Volo.Abp", LogEventLevel.Warning)
+#if DEBUG
+ .MinimumLevel.Override("Acme.BookStore", LogEventLevel.Debug)
+#else
+ .MinimumLevel.Override("Acme.BookStore", LogEventLevel.Information)
+#endif
+ .Enrich.FromLogContext()
+ .WriteTo.File(Path.Combine(Directory.GetCurrentDirectory(), "Logs/logs.txt"))
+ .WriteTo.Console()
+ .CreateLogger();
+ }
+ }
+}
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/appsettings.json b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/appsettings.json
new file mode 100644
index 0000000000..1a2d95c171
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.DbMigrator/appsettings.json
@@ -0,0 +1,18 @@
+{
+ "ConnectionStrings": {
+ "Default": "Server=localhost;Database=BookStore;Trusted_Connection=True;MultipleActiveResultSets=true"
+ },
+ "IdentityServer": {
+ "Clients": {
+ "BookStore_Web": {
+ "ClientId": "BookStore_Web",
+ "ClientSecret": "1q2w3e*",
+ "RootUrl": "https://localhost:44388"
+ },
+ "BookStore_App": {
+ "ClientId": "BookStore_App",
+ "ClientSecret": "1q2w3e*"
+ }
+ }
+ }
+}
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
new file mode 100644
index 0000000000..48263f2e6d
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Acme.BookStore.Domain.Shared.csproj
@@ -0,0 +1,27 @@
+
+
+
+
+
+ netstandard2.0
+ Acme.BookStore
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/BookStoreDomainErrorCodes.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/BookStoreDomainErrorCodes.cs
new file mode 100644
index 0000000000..30f124fbed
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/BookStoreDomainErrorCodes.cs
@@ -0,0 +1,7 @@
+namespace Acme.BookStore
+{
+ public static class BookStoreDomainErrorCodes
+ {
+ /* You can add your business exception error codes here, as constants */
+ }
+}
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
new file mode 100644
index 0000000000..85cda77f69
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/BookStoreDomainSharedModule.cs
@@ -0,0 +1,47 @@
+using Acme.BookStore.BookManagement;
+using Acme.BookStore.Localization;
+using Volo.Abp.AuditLogging;
+using Volo.Abp.BackgroundJobs;
+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.Modularity;
+using Volo.Abp.PermissionManagement;
+using Volo.Abp.SettingManagement;
+using Volo.Abp.TenantManagement;
+using Volo.Abp.VirtualFileSystem;
+
+namespace Acme.BookStore
+{
+ [DependsOn(
+ typeof(AbpAuditLoggingDomainSharedModule),
+ typeof(BackgroundJobsDomainSharedModule),
+ typeof(AbpFeatureManagementDomainSharedModule),
+ typeof(AbpIdentityDomainSharedModule),
+ typeof(AbpIdentityServerDomainSharedModule),
+ typeof(AbpPermissionManagementDomainSharedModule),
+ typeof(AbpSettingManagementDomainSharedModule),
+ typeof(AbpTenantManagementDomainSharedModule),
+ typeof(BookManagementDomainSharedModule)
+ )]
+ public class BookStoreDomainSharedModule : AbpModule
+ {
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options =>
+ {
+ options.FileSets.AddEmbedded("Acme.BookStore");
+ });
+
+ Configure(options =>
+ {
+ options.Resources
+ .Add("en")
+ .AddBaseTypes(typeof(AbpValidationResource))
+ .AddVirtualJson("/Localization/BookStore");
+ });
+ }
+ }
+}
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStore/cs.json b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStore/cs.json
new file mode 100644
index 0000000000..619521939c
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStore/cs.json
@@ -0,0 +1,8 @@
+{
+ "culture": "cs",
+ "texts": {
+ "Menu:Home": "Úvod",
+ "Welcome": "Vítejte",
+ "LongWelcomeMessage": "Vítejte v aplikaci. Toto je startovací projekt založený na ABP frameworku. Pro více informací, navštivte abp.io."
+ }
+}
\ No newline at end of file
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStore/en.json b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStore/en.json
new file mode 100644
index 0000000000..baa9fe753e
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStore/en.json
@@ -0,0 +1,8 @@
+{
+ "culture": "en",
+ "texts": {
+ "Menu:Home": "Home",
+ "Welcome": "Welcome",
+ "LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io."
+ }
+}
\ No newline at end of file
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStore/pl.json b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStore/pl.json
new file mode 100644
index 0000000000..815bbcc83f
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStore/pl.json
@@ -0,0 +1,8 @@
+{
+ "culture": "pl",
+ "texts": {
+ "Menu:Home": "Home",
+ "Welcome": "Witaj",
+ "LongWelcomeMessage": "Witaj w aplikacji. To jest inicjalny projekt bazujący na ABP framework. Po więcej informacji odwiedź stronę abp.io."
+ }
+}
\ No newline at end of file
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStore/pt-BR.json b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStore/pt-BR.json
new file mode 100644
index 0000000000..8c818a07af
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStore/pt-BR.json
@@ -0,0 +1,8 @@
+{
+ "culture": "pt-BR",
+ "texts": {
+ "Menu:Home": "Principal",
+ "Welcome": "Seja bem-vindo!",
+ "LongWelcomeMessage": "Bem-vindo a esta aplicação. Este é um projeto inicial baseado no ABP framework. Para mais informações, visite abp.io."
+ }
+}
\ No newline at end of file
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStore/tr.json b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStore/tr.json
new file mode 100644
index 0000000000..5bf83ee7a8
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStore/tr.json
@@ -0,0 +1,8 @@
+{
+ "culture": "tr",
+ "texts": {
+ "Menu:Home": "Ana sayfa",
+ "Welcome": "Hoşgeldiniz",
+ "LongWelcomeMessage": "Uygulamaya hoşgeldiniz. Bu, ABP framework'ü üzerine bina edilmiş bir başlangıç projesidir. Daha fazla bilgi için abp.io adresini ziyaret edebilirsiniz."
+ }
+}
\ No newline at end of file
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStore/vi.json b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStore/vi.json
new file mode 100644
index 0000000000..c115a35726
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStore/vi.json
@@ -0,0 +1,8 @@
+{
+ "culture": "vi",
+ "texts": {
+ "Menu:Home": "Trang chủ",
+ "Welcome": "Chào mừng bạn",
+ "LongWelcomeMessage": "Chào mừng bạn đến ứng dụng. Đây là một dự án khởi nghiệp dựa trên khung ABP. Để biết thêm thông tin, hãy truy cập abp.io."
+ }
+}
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStore/zh-Hans.json b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStore/zh-Hans.json
new file mode 100644
index 0000000000..459fc0fefd
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStore/zh-Hans.json
@@ -0,0 +1,8 @@
+{
+ "culture": "zh-Hans",
+ "texts": {
+ "Menu:Home": "首页",
+ "Welcome": "欢迎",
+ "LongWelcomeMessage": "欢迎来到该应用程序. 这是一个基于ABP框架的启动项目. 有关更多信息, 请访问 cn.abp.io."
+ }
+ }
\ No newline at end of file
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStoreResource.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStoreResource.cs
new file mode 100644
index 0000000000..cc4b935e58
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/Localization/BookStoreResource.cs
@@ -0,0 +1,10 @@
+using Volo.Abp.Localization;
+
+namespace Acme.BookStore.Localization
+{
+ [LocalizationResourceName("BookStore")]
+ public class BookStoreResource
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/MultiTenancy/MultiTenancyConsts.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/MultiTenancy/MultiTenancyConsts.cs
new file mode 100644
index 0000000000..9ece5cc53e
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain.Shared/MultiTenancy/MultiTenancyConsts.cs
@@ -0,0 +1,11 @@
+namespace Acme.BookStore.MultiTenancy
+{
+ public static class MultiTenancyConsts
+ {
+ /* Enable/disable multi-tenancy easily in a single point.
+ * If you will never need to multi-tenancy, you can remove
+ * related modules and code parts, including this file.
+ */
+ public const bool IsEnabled = true;
+ }
+}
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
new file mode 100644
index 0000000000..4a24f3dbe1
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Acme.BookStore.Domain.csproj
@@ -0,0 +1,28 @@
+
+
+
+
+
+ netcoreapp2.2
+ Acme.BookStore
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/BookStoreConsts.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/BookStoreConsts.cs
new file mode 100644
index 0000000000..96556e1b85
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/BookStoreConsts.cs
@@ -0,0 +1,9 @@
+namespace Acme.BookStore
+{
+ public static class BookStoreConsts
+ {
+ public const string DbTablePrefix = "App";
+
+ public const string DbSchema = null;
+ }
+}
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/BookStoreDomainModule.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/BookStoreDomainModule.cs
new file mode 100644
index 0000000000..5a3e1546f5
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/BookStoreDomainModule.cs
@@ -0,0 +1,40 @@
+using Acme.BookStore.MultiTenancy;
+using Volo.Abp.AuditLogging;
+using Volo.Abp.BackgroundJobs;
+using Volo.Abp.FeatureManagement;
+using Volo.Abp.Identity;
+using Volo.Abp.IdentityServer;
+using Volo.Abp.Modularity;
+using Volo.Abp.MultiTenancy;
+using Volo.Abp.PermissionManagement.Identity;
+using Volo.Abp.PermissionManagement.IdentityServer;
+using Volo.Abp.SettingManagement;
+using Volo.Abp.TenantManagement;
+using Acme.BookStore.BookManagement;
+
+namespace Acme.BookStore
+{
+ [DependsOn(
+ typeof(BookStoreDomainSharedModule),
+ typeof(AbpAuditLoggingDomainModule),
+ typeof(BackgroundJobsDomainModule),
+ typeof(AbpFeatureManagementDomainModule),
+ typeof(AbpIdentityDomainModule),
+ typeof(AbpPermissionManagementDomainIdentityModule),
+ typeof(AbpIdentityServerDomainModule),
+ typeof(AbpPermissionManagementDomainIdentityServerModule),
+ typeof(AbpSettingManagementDomainModule),
+ typeof(AbpTenantManagementDomainModule),
+ typeof(BookManagementDomainModule)
+ )]
+ public class BookStoreDomainModule : AbpModule
+ {
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options =>
+ {
+ options.IsEnabled = MultiTenancyConsts.IsEnabled;
+ });
+ }
+ }
+}
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Data/BookStoreDbMigrationService.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Data/BookStoreDbMigrationService.cs
new file mode 100644
index 0000000000..4db6b4af83
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Data/BookStoreDbMigrationService.cs
@@ -0,0 +1,39 @@
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Logging.Abstractions;
+using Volo.Abp.Data;
+using Volo.Abp.DependencyInjection;
+
+namespace Acme.BookStore.Data
+{
+ public class BookStoreDbMigrationService : ITransientDependency
+ {
+ public ILogger Logger { get; set; }
+
+ private readonly IDataSeeder _dataSeeder;
+ private readonly IBookStoreDbSchemaMigrator _dbSchemaMigrator;
+
+ public BookStoreDbMigrationService(
+ IDataSeeder dataSeeder,
+ IBookStoreDbSchemaMigrator dbSchemaMigrator)
+ {
+ _dataSeeder = dataSeeder;
+ _dbSchemaMigrator = dbSchemaMigrator;
+
+ Logger = NullLogger.Instance;
+ }
+
+ public async Task MigrateAsync()
+ {
+ Logger.LogInformation("Started database migrations...");
+
+ Logger.LogInformation("Migrating database schema...");
+ await _dbSchemaMigrator.MigrateAsync();
+
+ Logger.LogInformation("Executing database seed...");
+ await _dataSeeder.SeedAsync();
+
+ Logger.LogInformation("Successfully completed database migrations.");
+ }
+ }
+}
\ No newline at end of file
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Data/IBookStoreDbSchemaMigrator.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Data/IBookStoreDbSchemaMigrator.cs
new file mode 100644
index 0000000000..5c94a6918e
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Data/IBookStoreDbSchemaMigrator.cs
@@ -0,0 +1,9 @@
+using System.Threading.Tasks;
+
+namespace Acme.BookStore.Data
+{
+ public interface IBookStoreDbSchemaMigrator
+ {
+ Task MigrateAsync();
+ }
+}
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Data/NullBookStoreDbSchemaMigrator.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Data/NullBookStoreDbSchemaMigrator.cs
new file mode 100644
index 0000000000..f6ed8fc8de
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Data/NullBookStoreDbSchemaMigrator.cs
@@ -0,0 +1,16 @@
+using System.Threading.Tasks;
+using Volo.Abp.DependencyInjection;
+
+namespace Acme.BookStore.Data
+{
+ /* This is used if database provider does't define
+ * IBookStoreDbSchemaMigrator implementation.
+ */
+ public class NullBookStoreDbSchemaMigrator : IBookStoreDbSchemaMigrator, ITransientDependency
+ {
+ public Task MigrateAsync()
+ {
+ return Task.CompletedTask;
+ }
+ }
+}
\ No newline at end of file
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/IdentityServer/IdentityServerDataSeedContributor.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/IdentityServer/IdentityServerDataSeedContributor.cs
new file mode 100644
index 0000000000..3458a965ac
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/IdentityServer/IdentityServerDataSeedContributor.cs
@@ -0,0 +1,223 @@
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using IdentityServer4.Models;
+using Volo.Abp.Authorization.Permissions;
+using Volo.Abp.Configuration;
+using Volo.Abp.Data;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Guids;
+using Volo.Abp.IdentityServer.ApiResources;
+using Volo.Abp.IdentityServer.Clients;
+using Volo.Abp.IdentityServer.IdentityResources;
+using Volo.Abp.PermissionManagement;
+using Volo.Abp.Uow;
+using ApiResource = Volo.Abp.IdentityServer.ApiResources.ApiResource;
+using Client = Volo.Abp.IdentityServer.Clients.Client;
+
+namespace Acme.BookStore.IdentityServer
+{
+ public class IdentityServerDataSeedContributor : IDataSeedContributor, ITransientDependency
+ {
+ private readonly IApiResourceRepository _apiResourceRepository;
+ private readonly IClientRepository _clientRepository;
+ private readonly IIdentityResourceDataSeeder _identityResourceDataSeeder;
+ private readonly IGuidGenerator _guidGenerator;
+ private readonly IPermissionDataSeeder _permissionDataSeeder;
+ private readonly IConfigurationAccessor _configurationAccessor;
+
+ public IdentityServerDataSeedContributor(
+ IClientRepository clientRepository,
+ IApiResourceRepository apiResourceRepository,
+ IIdentityResourceDataSeeder identityResourceDataSeeder,
+ IGuidGenerator guidGenerator,
+ IPermissionDataSeeder permissionDataSeeder,
+ IConfigurationAccessor configurationAccessor)
+ {
+ _clientRepository = clientRepository;
+ _apiResourceRepository = apiResourceRepository;
+ _identityResourceDataSeeder = identityResourceDataSeeder;
+ _guidGenerator = guidGenerator;
+ _permissionDataSeeder = permissionDataSeeder;
+ _configurationAccessor = configurationAccessor;
+ }
+
+ [UnitOfWork]
+ public virtual async Task SeedAsync(DataSeedContext context)
+ {
+ await _identityResourceDataSeeder.CreateStandardResourcesAsync();
+ await CreateApiResourcesAsync();
+ await CreateClientsAsync();
+ }
+
+ private async Task CreateApiResourcesAsync()
+ {
+ var commonApiUserClaims = new[]
+ {
+ "email",
+ "email_verified",
+ "name",
+ "phone_number",
+ "phone_number_verified",
+ "role"
+ };
+
+ await CreateApiResourceAsync("BookStore", commonApiUserClaims);
+ }
+
+ private async Task CreateApiResourceAsync(string name, IEnumerable claims)
+ {
+ var apiResource = await _apiResourceRepository.FindByNameAsync(name);
+ if (apiResource == null)
+ {
+ apiResource = await _apiResourceRepository.InsertAsync(
+ new ApiResource(
+ _guidGenerator.Create(),
+ name,
+ name + " API"
+ ),
+ autoSave: true
+ );
+ }
+
+ foreach (var claim in claims)
+ {
+ if (apiResource.FindClaim(claim) == null)
+ {
+ apiResource.AddUserClaim(claim);
+ }
+ }
+
+ return await _apiResourceRepository.UpdateAsync(apiResource);
+ }
+
+ private async Task CreateClientsAsync()
+ {
+ var commonScopes = new[]
+ {
+ "email",
+ "openid",
+ "profile",
+ "role",
+ "phone",
+ "address",
+ "BookStore"
+ };
+
+ var configurationSection = _configurationAccessor.Configuration.GetSection("IdentityServer:Clients");
+
+ //Web Client
+ var webClientId = configurationSection["BookStore_Web:ClientId"];
+ if (!webClientId.IsNullOrWhiteSpace())
+ {
+ var webClientRootUrl = configurationSection["BookStore_Web:RootUrl"].EnsureEndsWith('/');
+
+ /* BookStore_Web client is only needed if you created a tiered
+ * solution. Otherwise, you can delete this client. */
+
+ await CreateClientAsync(
+ webClientId,
+ commonScopes,
+ new[] { "hybrid" },
+ (configurationSection["BookStore_Web:ClientSecret"] ?? "1q2w3e*").Sha256(),
+ redirectUri: $"{webClientRootUrl}signin-oidc",
+ postLogoutRedirectUri: $"{webClientRootUrl}signout-callback-oidc"
+ );
+ }
+
+ //Console Test Client
+ var consoleClientId = configurationSection["BookStore_App:ClientId"];
+ if (!consoleClientId.IsNullOrWhiteSpace())
+ {
+ await CreateClientAsync(
+ consoleClientId,
+ commonScopes,
+ new[] { "password", "client_credentials" },
+ (configurationSection["BookStore_App:ClientSecret"] ?? "1q2w3e*").Sha256()
+ );
+ }
+ }
+
+ private async Task CreateClientAsync(
+ string name,
+ IEnumerable scopes,
+ IEnumerable grantTypes,
+ string secret,
+ string redirectUri = null,
+ string postLogoutRedirectUri = null,
+ IEnumerable permissions = null)
+ {
+ var client = await _clientRepository.FindByCliendIdAsync(name);
+ if (client == null)
+ {
+ client = await _clientRepository.InsertAsync(
+ new Client(
+ _guidGenerator.Create(),
+ name
+ )
+ {
+ ClientName = name,
+ ProtocolType = "oidc",
+ Description = name,
+ AlwaysIncludeUserClaimsInIdToken = true,
+ AllowOfflineAccess = true,
+ AbsoluteRefreshTokenLifetime = 31536000, //365 days
+ AccessTokenLifetime = 31536000, //365 days
+ AuthorizationCodeLifetime = 300,
+ IdentityTokenLifetime = 300,
+ RequireConsent = false
+ },
+ autoSave: true
+ );
+ }
+
+ foreach (var scope in scopes)
+ {
+ if (client.FindScope(scope) == null)
+ {
+ client.AddScope(scope);
+ }
+ }
+
+ foreach (var grantType in grantTypes)
+ {
+ if (client.FindGrantType(grantType) == null)
+ {
+ client.AddGrantType(grantType);
+ }
+ }
+
+ if (client.FindSecret(secret) == null)
+ {
+ client.AddSecret(secret);
+ }
+
+ if (redirectUri != null)
+ {
+ if (client.FindRedirectUri(redirectUri) == null)
+ {
+ client.AddRedirectUri(redirectUri);
+ }
+ }
+
+ if (postLogoutRedirectUri != null)
+ {
+ if (client.FindPostLogoutRedirectUri(postLogoutRedirectUri) == null)
+ {
+ client.AddPostLogoutRedirectUri(postLogoutRedirectUri);
+ }
+ }
+
+ if (permissions != null)
+ {
+ await _permissionDataSeeder.SeedAsync(
+ ClientPermissionValueProvider.ProviderName,
+ name,
+ permissions
+ );
+ }
+
+ return await _clientRepository.UpdateAsync(client);
+ }
+ }
+}
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Settings/BookStoreSettingDefinitionProvider.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Settings/BookStoreSettingDefinitionProvider.cs
new file mode 100644
index 0000000000..6527dbc91f
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Settings/BookStoreSettingDefinitionProvider.cs
@@ -0,0 +1,13 @@
+using Volo.Abp.Settings;
+
+namespace Acme.BookStore.Settings
+{
+ public class BookStoreSettingDefinitionProvider : SettingDefinitionProvider
+ {
+ public override void Define(ISettingDefinitionContext context)
+ {
+ //Define your own settings here. Example:
+ //context.Add(new SettingDefinition(BookStoreSettings.MySetting1));
+ }
+ }
+}
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Settings/BookStoreSettings.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Settings/BookStoreSettings.cs
new file mode 100644
index 0000000000..7d5aa84d19
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Settings/BookStoreSettings.cs
@@ -0,0 +1,10 @@
+namespace Acme.BookStore.Settings
+{
+ public static class BookStoreSettings
+ {
+ private const string Prefix = "BookStore";
+
+ //Add your own setting names here. Example:
+ //public const string MySetting1 = Prefix + ".MySetting1";
+ }
+}
\ No newline at end of file
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Users/AppUser.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Users/AppUser.cs
new file mode 100644
index 0000000000..9068cfbcd5
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Users/AppUser.cs
@@ -0,0 +1,53 @@
+using System;
+using Volo.Abp.Domain.Entities.Auditing;
+using Volo.Abp.Users;
+
+namespace Acme.BookStore.Users
+{
+ /* This entity shares the same table/collection ("AbpUsers" by default) with the
+ * IdentityUser entity of the Identity module.
+ *
+ * - You can define your custom properties into this class.
+ * - You never create or delete this entity, because it is Identity module's job.
+ * - You can query users from database with this entity.
+ * - You can update values of your custom properties.
+ */
+ public class AppUser : FullAuditedAggregateRoot, IUser
+ {
+ #region Base properties
+
+ /* These properties are shared with the IdentityUser entity of the Identity module.
+ * Do not change these properties through this class. Instead, use Identity module
+ * services (like IdentityUserManager) to change them.
+ * So, this properties are designed as read only!
+ */
+
+ public virtual Guid? TenantId { get; private set; }
+
+ public virtual string UserName { get; private set; }
+
+ public virtual string Name { get; private set; }
+
+ public virtual string Surname { get; private set; }
+
+ public virtual string Email { get; private set; }
+
+ public virtual bool EmailConfirmed { get; private set; }
+
+ public virtual string PhoneNumber { get; private set; }
+
+ public virtual bool PhoneNumberConfirmed { get; private set; }
+
+ #endregion
+
+ /* Add your own properties here. Example:
+ *
+ * public virtual string MyProperty { get; set; }
+ */
+
+ private AppUser()
+ {
+
+ }
+ }
+}
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
new file mode 100644
index 0000000000..dde34ac3f7
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Acme.BookStore.EntityFrameworkCore.DbMigrations.csproj
@@ -0,0 +1,18 @@
+
+
+
+
+
+ netcoreapp2.2
+ Acme.BookStore
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreEntityFrameworkCoreDbMigrationsModule.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreEntityFrameworkCoreDbMigrationsModule.cs
new file mode 100644
index 0000000000..88e21f2ce8
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreEntityFrameworkCoreDbMigrationsModule.cs
@@ -0,0 +1,16 @@
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp.Modularity;
+
+namespace Acme.BookStore.EntityFrameworkCore
+{
+ [DependsOn(
+ typeof(BookStoreEntityFrameworkCoreModule)
+ )]
+ public class BookStoreEntityFrameworkCoreDbMigrationsModule : AbpModule
+ {
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ context.Services.AddAbpDbContext();
+ }
+ }
+}
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContext.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContext.cs
new file mode 100644
index 0000000000..6a74deef7e
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContext.cs
@@ -0,0 +1,57 @@
+using Acme.BookStore.BookManagement.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore;
+using Volo.Abp.AuditLogging.EntityFrameworkCore;
+using Volo.Abp.BackgroundJobs.EntityFrameworkCore;
+using Volo.Abp.EntityFrameworkCore;
+using Volo.Abp.FeatureManagement.EntityFrameworkCore;
+using Volo.Abp.Identity;
+using Volo.Abp.Identity.EntityFrameworkCore;
+using Volo.Abp.IdentityServer.EntityFrameworkCore;
+using Volo.Abp.PermissionManagement.EntityFrameworkCore;
+using Volo.Abp.SettingManagement.EntityFrameworkCore;
+using Volo.Abp.TenantManagement.EntityFrameworkCore;
+
+namespace Acme.BookStore.EntityFrameworkCore
+{
+ /* This DbContext is only used for database migrations.
+ * It is not used on runtime. See BookStoreDbContext for the runtime DbContext.
+ * It is a unified model that includes configuration for
+ * all used modules and your application.
+ */
+ public class BookStoreMigrationsDbContext : AbpDbContext
+ {
+ public BookStoreMigrationsDbContext(DbContextOptions options)
+ : base(options)
+ {
+
+ }
+
+ protected override void OnModelCreating(ModelBuilder builder)
+ {
+ base.OnModelCreating(builder);
+
+ /* Include modules to your migration db context */
+
+ builder.ConfigurePermissionManagement();
+ builder.ConfigureSettingManagement();
+ builder.ConfigureBackgroundJobs();
+ builder.ConfigureAuditLogging();
+ builder.ConfigureIdentity();
+ builder.ConfigureIdentityServer();
+ builder.ConfigureFeatureManagement();
+ builder.ConfigureTenantManagement();
+ builder.ConfigureBookManagement();
+
+ /* Configure customizations for entities from the modules included */
+
+ builder.Entity(b =>
+ {
+ b.ConfigureCustomUserProperties();
+ });
+
+ /* Configure your own tables/entities inside the ConfigureBookStore method */
+
+ builder.ConfigureBookStore();
+ }
+ }
+}
\ No newline at end of file
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs
new file mode 100644
index 0000000000..da72e6fb21
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs
@@ -0,0 +1,31 @@
+using System.IO;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Design;
+using Microsoft.Extensions.Configuration;
+
+namespace Acme.BookStore.EntityFrameworkCore
+{
+ /* This class is needed for EF Core console commands
+ * (like Add-Migration and Update-Database commands) */
+ public class BookStoreMigrationsDbContextFactory : IDesignTimeDbContextFactory
+ {
+ public BookStoreMigrationsDbContext CreateDbContext(string[] args)
+ {
+ var configuration = BuildConfiguration();
+
+ var builder = new DbContextOptionsBuilder()
+ .UseSqlServer(configuration.GetConnectionString("Default"));
+
+ return new BookStoreMigrationsDbContext(builder.Options);
+ }
+
+ private static IConfigurationRoot BuildConfiguration()
+ {
+ var builder = new ConfigurationBuilder()
+ .SetBasePath(Directory.GetCurrentDirectory())
+ .AddJsonFile("appsettings.json", optional: false);
+
+ return builder.Build();
+ }
+ }
+}
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/EntityFrameworkCoreBookStoreDbSchemaMigrator.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/EntityFrameworkCoreBookStoreDbSchemaMigrator.cs
new file mode 100644
index 0000000000..954c8f7a13
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/EntityFrameworkCoreBookStoreDbSchemaMigrator.cs
@@ -0,0 +1,24 @@
+using System.Threading.Tasks;
+using Microsoft.EntityFrameworkCore;
+using Acme.BookStore.Data;
+using Volo.Abp.DependencyInjection;
+
+namespace Acme.BookStore.EntityFrameworkCore
+{
+ [Dependency(ReplaceServices = true)]
+ public class EntityFrameworkCoreBookStoreDbSchemaMigrator
+ : IBookStoreDbSchemaMigrator, ITransientDependency
+ {
+ private readonly BookStoreMigrationsDbContext _dbContext;
+
+ public EntityFrameworkCoreBookStoreDbSchemaMigrator(BookStoreMigrationsDbContext dbContext)
+ {
+ _dbContext = dbContext;
+ }
+
+ public async Task MigrateAsync()
+ {
+ await _dbContext.Database.MigrateAsync();
+ }
+ }
+}
\ No newline at end of file
diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20190523122033_Initial.Designer.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20190523122033_Initial.Designer.cs
new file mode 100644
index 0000000000..6564f3ad93
--- /dev/null
+++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/Migrations/20190523122033_Initial.Designer.cs
@@ -0,0 +1,1374 @@
+//
+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.EntityFrameworkCore;
+
+namespace Acme.BookStore.Migrations
+{
+ [DbContext(typeof(BookStoreMigrationsDbContext))]
+ [Migration("20190523122033_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.BackgroundJobs.BackgroundJobRecord", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("ConcurrencyStamp");
+
+ b.Property("CreationTime")
+ .HasColumnName("CreationTime");
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IsAbandoned")
+ .ValueGeneratedOnAdd()
+ .HasDefaultValue(false);
+
+ b.Property("JobArgs")
+ .IsRequired()
+ .HasMaxLength(1048576);
+
+ b.Property("JobName")
+ .IsRequired()
+ .HasMaxLength(128);
+
+ b.Property("LastTryTime");
+
+ b.Property("NextTryTime");
+
+ b.Property("Priority")
+ .ValueGeneratedOnAdd()
+ .HasDefaultValue((byte)15);
+
+ b.Property("TryCount")
+ .ValueGeneratedOnAdd()
+ .HasDefaultValue((short)0);
+
+ b.HasKey("Id");
+
+ b.HasIndex("IsAbandoned", "NextTryTime");
+
+ b.ToTable("AbpBackgroundJobs");
+ });
+
+ modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", 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(128);
+
+ b.HasKey("Id");
+
+ b.HasIndex("Name", "ProviderName", "ProviderKey");
+
+ b.ToTable("AbpFeatureValues");
+ });
+
+ 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.IdentityServer.ApiResources.ApiResource", 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("Description")
+ .HasMaxLength(1000);
+
+ b.Property("DisplayName")
+ .HasMaxLength(200);
+
+ b.Property("Enabled");
+
+ 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(200);
+
+ b.HasKey("Id");
+
+ b.ToTable("IdentityServerApiResources");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b =>
+ {
+ b.Property("ApiResourceId");
+
+ b.Property("Type")
+ .HasMaxLength(196);
+
+ b.HasKey("ApiResourceId", "Type");
+
+ b.ToTable("IdentityServerApiClaims");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b =>
+ {
+ b.Property("ApiResourceId");
+
+ b.Property("Name")
+ .HasMaxLength(196);
+
+ b.Property("Description")
+ .HasMaxLength(256);
+
+ b.Property("DisplayName")
+ .HasMaxLength(128);
+
+ b.Property("Emphasize");
+
+ b.Property("Required");
+
+ b.Property("ShowInDiscoveryDocument");
+
+ b.HasKey("ApiResourceId", "Name");
+
+ b.ToTable("IdentityServerApiScopes");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b =>
+ {
+ b.Property("ApiResourceId");
+
+ b.Property("Name")
+ .HasMaxLength(196);
+
+ b.Property("Type")
+ .HasMaxLength(196);
+
+ b.HasKey("ApiResourceId", "Name", "Type");
+
+ b.ToTable("IdentityServerApiScopeClaims");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b =>
+ {
+ b.Property("ApiResourceId");
+
+ b.Property("Type")
+ .HasMaxLength(32);
+
+ b.Property("Value")
+ .HasMaxLength(196);
+
+ b.Property("Description")
+ .HasMaxLength(256);
+
+ b.Property("Expiration");
+
+ b.HasKey("ApiResourceId", "Type", "Value");
+
+ b.ToTable("IdentityServerApiSecrets");
+ });
+
+ modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.Client", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd();
+
+ b.Property("AbsoluteRefreshTokenLifetime");
+
+ b.Property("AccessTokenLifetime");
+
+ b.Property("AccessTokenType");
+
+ b.Property("AllowAccessTokensViaBrowser");
+
+ b.Property("AllowOfflineAccess");
+
+ b.Property("AllowPlainTextPkce");
+
+ b.Property("AllowRememberConsent");
+
+ b.Property("AlwaysIncludeUserClaimsInIdToken");
+
+ b.Property("AlwaysSendClientClaims");
+
+ b.Property("AuthorizationCodeLifetime");
+
+ b.Property("BackChannelLogoutSessionRequired");
+
+ b.Property("BackChannelLogoutUri")
+ .HasMaxLength(300);
+
+ b.Property("ClientClaimsPrefix")
+ .HasMaxLength(200);
+
+ b.Property("ClientId")
+ .IsRequired()
+ .HasMaxLength(200);
+
+ b.Property("ClientName")
+ .HasMaxLength(200);
+
+ b.Property("ClientUri")
+ .HasMaxLength(300);
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("ConsentLifetime");
+
+ b.Property("CreationTime")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnName("CreatorId");
+
+ b.Property("DeleterId")
+ .HasColumnName("DeleterId");
+
+ b.Property("DeletionTime")
+ .HasColumnName("DeletionTime");
+
+ b.Property("Description")
+ .HasMaxLength(1000);
+
+ b.Property("EnableLocalLogin");
+
+ b.Property("Enabled");
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("FrontChannelLogoutSessionRequired");
+
+ b.Property("FrontChannelLogoutUri")
+ .HasMaxLength(300);
+
+ b.Property("IdentityTokenLifetime");
+
+ b.Property("IncludeJwtId");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnName("IsDeleted")
+ .HasDefaultValue(false);
+
+ b.Property("LastModificationTime")
+ .HasColumnName("LastModificationTime");
+
+ b.Property("LastModifierId")
+ .HasColumnName("LastModifierId");
+
+ b.Property("LogoUri")
+ .HasMaxLength(300);
+
+ b.Property("PairWiseSubjectSalt")
+ .HasMaxLength(200);
+
+ b.Property("ProtocolType")
+ .IsRequired()
+ .HasMaxLength(200);
+
+ b.Property("RefreshTokenExpiration");
+
+ b.Property("RefreshTokenUsage");
+
+ b.Property("RequireClientSecret");
+
+ b.Property("RequireConsent");
+
+ b.Property("RequirePkce");
+
+ b.Property("SlidingRefreshTokenLifetime");
+
+ b.Property