Giter VIP home page Giter VIP logo

abp-vnext-pro's Introduction

Abp Vnext Pro

🔗 链接

📦 快速开始

  • 安装Cli
dotnet tool install Lion.AbpPro.Cli -g

三个项目模板

  • 生成源码版本
lion.abp new -t pro -c 公司名称 -p 项目名称 -v 版本(默认LastRelease) -o 默认当前控制台执行目录
  • nuget包形式的网关基础版本
    • abp自带的所有模块,pro的通知模块,数据字典模块 以及ocelot网关。
lion.abp new -t pro.all -c 公司名称 -p 项目名称 -v 版本(默认LastRelease) -o 默认当前控制台执行目录
  • nuget包形式的基础版本
    • abp自带的所有模块,pro的通知模块,数据字典模块 无ocelot网关
lion.abp new -t pro.simplify -c 公司名称 -p 项目名称 -v 版本(默认LastRelease) -o 默认当前控制台执行目录
  • 模块
lion.abp new -t pro.module -c 公司名称 -p 项目名称 -v 版本(默认LastRelease) -o 默认当前控制台执行目录

✨ 系统功能

  • 用户管理
  • 角色管理
  • 审计日志
  • 后台任务
  • 集成事件
  • SinglaR 消息通知(站内信)
  • 多语言
  • 数据字典
  • 容器化部署
  • 单元测试
  • ES 日志
  • Setting 管理
  • 多租户
  • 文件管理

🤝 如何贡献

非常欢迎你的加入!提一个 Issue 或者提交一个 Pull Request。

Pull Request:

  1. Fork 代码!
  2. 创建自己的分支: git checkout -b feat/xxxx
  3. 提交你的修改: git commit -am 'feat(function): add xxxxx'
  4. 推送您的分支: git push origin feat/xxxx
  5. 提交pull request

Git 贡献提交规范

  • 参考
    • feat 增加新功能
    • fix 修复问题/BUG
    • style 代码风格相关无影响运行结果的
    • perf 优化/性能提升
    • refactor 重构
    • revert 撤销修改
    • test 测试相关
    • docs 文档/注释
    • chore 依赖更新/脚手架配置修改等
    • workflow 工作流改进
    • ci 持续集成
    • types 类型定义文件更改
    • wip 开发中

✒️交流

  • QQ 1群:686933575(已满)
  • QQ 2群:862717726

💖赞助

  • Star就是对该项目的最大肯定!
  • 如果你觉得这个项目对你有帮助,你可以帮作者买一杯咖啡表示支持!

abp-vnext-pro's People

Contributors

adeewu avatar canyanol650 avatar haoyk avatar shuangbaojun avatar valiantzhao avatar wangjunzzz avatar xisuo67 avatar yixiangling avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

abp-vnext-pro's Issues

是否可以配置租户使用schema

使用postgresql数据库,多租户共享数据库,但不使用tenantid来区分,新建租户的时候自动新建schema,是否可以?

Uncaught (in promise) Error: Invalid navigation guard

启动vue项目后,会报Uncaught (in promise) Error: Invalid navigation guard错误,刷新就好了

尝试过vben-admin 2.7.1、2.8.0都没有这个问题,尝试用gui项目直接新建一个也能重现这个情况,排查好久没有找到原因为什么这个项目会出这个问题

重现步骤:

  • yarn install
  • yarn serve
  • 打开浏览器,提前打开开发者调试工具,输入打开:http://localhost:4200/
  • 开发者调试工具控制台报错提示Uncaught (in promise) Error: Invalid navigation guard

image

Sts Login Unauthorized Error

Hi, Client create a token from login endpoint, after call stslogin endpoint but return response 401.
Created token has been validated on https://jwt.io/,
I have added Identity Server startup IdentityModelEventSource.ShowPII = true;
Show Error Like This
[20:40:37 ERR] JWT token validation error: IDX10503: Signature validation failed. Keys tried: 'Microsoft.IdentityModel.Tokens.JsonWebKey, Use: '', Kid: 'CC252F9C341D7B5A47ED7E7EC43E5436', Kty: 'RSA', InternalId: 'f2257647-6fed-4004-97c2-12020dc56584'. , KeyId: CC252F9C341D7B5A47ED7E7EC43E5436 '. Exceptions caught: 'System.NotSupportedException: IDX10634: Unable to create the SignatureProvider. Algorithm: 'HS512', SecurityKey: 'Microsoft.IdentityModel.Tokens.JsonWebKey, Use: '', Kid: 'CC252F9C341D7B5A47ED7E7EC43E5436', Kty: 'RSA', InternalId: 'f2257647-6fed-4004-97c2-12020dc56584'.' is not supported. The list of supported algorithms is available here: https://aka.ms/IdentityModel/supported-algorithms at Microsoft.IdentityModel.Tokens.CryptoProviderFactory.CreateSignatureProvider(SecurityKey key, String algorithm, Boolean willCreateSignatures) at Microsoft.IdentityModel.Tokens.CryptoProviderFactory.CreateForVerifying(SecurityKey key, String algorithm) at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature(Byte[] encodedBytes, Byte[] signature, SecurityKey key, String algorithm, TokenValidationParameters validationParameters) at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature(String token, TokenValidationParameters validationParameters) '. token: '{"alg":"HS512","typ":"JWT"}.{"aud":"TestApp","iss":"TestApp","sub":"3a01709c-f071-7f64-780a-13ce18cbe962","given_name":"admin","name":"admin","email":"[email protected]","tenantid":"","role":"admin","nbf":1642268399,"exp":1642354799,"iat":1642268399}'. Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException: IDX10503: Signature validation failed. Keys tried: 'Microsoft.IdentityModel.Tokens.JsonWebKey, Use: '', Kid: 'CC252F9C341D7B5A47ED7E7EC43E5436', Kty: 'RSA', InternalId: 'f2257647-6fed-4004-97c2-12020dc56584'. , KeyId: CC252F9C341D7B5A47ED7E7EC43E5436 '. Exceptions caught: 'System.NotSupportedException: IDX10634: Unable to create the SignatureProvider. Algorithm: 'HS512', SecurityKey: 'Microsoft.IdentityModel.Tokens.JsonWebKey, Use: '', Kid: 'CC252F9C341D7B5A47ED7E7EC43E5436', Kty: 'RSA', InternalId: 'f2257647-6fed-4004-97c2-12020dc56584'.' is not supported. The list of supported algorithms is available here: https://aka.ms/IdentityModel/supported-algorithms at Microsoft.IdentityModel.Tokens.CryptoProviderFactory.CreateSignatureProvider(SecurityKey key, String algorithm, Boolean willCreateSignatures) at Microsoft.IdentityModel.Tokens.CryptoProviderFactory.CreateForVerifying(SecurityKey key, String algorithm) at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature(Byte[] encodedBytes, Byte[] signature, SecurityKey key, String algorithm, TokenValidationParameters validationParameters) at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature(String token, TokenValidationParameters validationParameters) '. token: '{"alg":"HS512","typ":"JWT"}.{"aud":"TestApp","iss":"TestApp","sub":"3a01709c-f071-7f64-780a-13ce18cbe962","given_name":"admin","name":"admin","email":"[email protected]","tenantid":"","role":"admin","nbf":1642268399,"exp":1642354799,"iat":1642268399}'. at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature(String token, TokenValidationParameters validationParameters) at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateToken(String token, TokenValidationParameters validationParameters, SecurityToken& validatedToken) at IdentityServer4.Validation.TokenValidator.ValidateJwtAsync(String jwt, IEnumerable1 validationKeys, Boolean validateLifetime, String audience)
[20:40:37 INF] Request finished HTTP/1.1 GET https://localhost:44390/connect/userinfo - - - 401 0 - 94.3922ms`

yarn

...
[5/6] Building fresh packages...
[7/13] ⡀ mozjpeg
[6/13] ⡀ jpegtran-bin
[8/13] ⢀ optipng-bin
[9/13] ⢀ pngquant-bin
error D:\001.Test\abp-vnext-pro-main\vben271\node_modules\gifsicle: Command failed.
Exit code: 1
Command: node lib/install.js
Arguments:
Directory: D:\001.Test\abp-vnext-pro-main\vben271\node_modules\gifsicle
Output:
Response code 404 (Not Found)
gifsicle pre-build test failed
compiling from source
Error: Command failed: C:\WINDOWS\system32\cmd.exe /s /c "autoreconf -ivf"
'autoreconf' �����ڲ����ⲿ���Ҳ���ǿ����еij���
���������ļ���

大佬的项目做的很漂亮

看过几个其他abp的项目感觉这个前端结构更好,后端也没搞的过于复杂,可简单上手,给大佬点赞

windows路径超过256的问题处理

如果提示 未能找到路径 ...GeneratedMSBuildEditorConfig.editorconfig 则表示路径太长了,超过256个字符。
如果是win10可以通过修改注册表支持长路径。
见文:
https://knowledge.autodesk.com/zh-hans/support/autocad/learn-explore/caas/sfdcarticles/sfdcarticles/CHS/The-Windows-10-default-path-length-limitation-MAX-PATH-is-256-characters.html

另,可以直接修改组策略:
还可以通过“计算机配置”>“管理模板”>“系统”>“文件系统”>“启用NTFS长路径”中的“组策略”来控制注册表项

需要重启系统。

启动IdentityServer时报错

直接下载源码,没有修改。结果报错。
An unhandled exception occurred while processing the request. InvalidOperationException: Cannot find compilation library location for package 'System.Security.Cryptography.Pkcs' Microsoft.Extensions.DependencyModel.CompilationLibrary.ResolveReferencePaths(ICompilationAssemblyResolver resolver, List<string> assemblies)

如图:
image

通过在项目文件添加以下配置,可以正常了。
true

但继续运行,依然有以下错误:
[17:20:28 INF] Executed endpoint 'Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationScriptController.Get (Volo.Abp.AspNetCore.Mvc)' [17:20:28 WRN] ERR Error running script (call to f_3915ee22fda531a1d5661f2523d0443fd35ff0a4): @user_script:2: @user_script: 2: Wrong number of args calling Redis command From Lua script StackExchange.Redis.RedisServerException: ERR Error running script (call to f_3915ee22fda531a1d5661f2523d0443fd35ff0a4): @user_script:2: @user_script: 2: Wrong number of args calling Redis command From Lua script at Volo.Abp.Caching.StackExchangeRedis.AbpRedisCache.SetManyAsync(IEnumerable1 items, DistributedCacheEntryOptions options, CancellationToken token)
at Volo.Abp.Caching.DistributedCache2.<>c__DisplayClass54_0.<<SetManyAsync>g__SetRealCache|0>d.MoveNext() [17:20:28 WRN] ERR Error running script (call to f_3915ee22fda531a1d5661f2523d0443fd35ff0a4): @user_script:2: @user_script: 2: Wrong number of args calling Redis command From Lua script StackExchange.Redis.RedisServerException: ERR Error running script (call to f_3915ee22fda531a1d5661f2523d0443fd35ff0a4): @user_script:2: @user_script: 2: Wrong number of args calling Redis command From Lua script at Volo.Abp.Caching.StackExchangeRedis.AbpRedisCache.SetManyAsync(IEnumerable1 items, DistributedCacheEntryOptions options, CancellationToken token)
at Volo.Abp.Caching.DistributedCache2.<>c__DisplayClass54_0.<<SetManyAsync>g__SetRealCache|0>d.MoveNext() [17:20:28 WRN] ERR Error running script (call to f_3915ee22fda531a1d5661f2523d0443fd35ff0a4): @user_script:2: @user_script: 2: Wrong number of args calling Redis command From Lua script StackExchange.Redis.RedisServerException: ERR Error running script (call to f_3915ee22fda531a1d5661f2523d0443fd35ff0a4): @user_script:2: @user_script: 2: Wrong number of args calling Redis command From Lua script at Volo.Abp.Caching.StackExchangeRedis.AbpRedisCache.SetManyAsync(IEnumerable1 items, DistributedCacheEntryOptions options, CancellationToken token)
at Volo.Abp.Caching.DistributedCache2.<>c__DisplayClass54_0.<<SetManyAsync>g__SetRealCache|0>d.MoveNext() [17:20:28 INF] Request finished HTTP/1.1 GET http://localhost:44354/Abp/ApplicationConfigurationScript - - - 200 85516 application/javascript 1141.2139ms

关于nswag的一点看法

后台现在全采用post方式来进行请求,我猜是不是想避免query、path参数太多的问题呢?

我基于你的项目改了nswag的生成模板,将query、path、body的参数都放到request中,能够稳定的输出js方法签名+方法去重,不知道你是否会采纳这样的修改,我们先看看对比

es日志接口:

image

原调用方式

/**
 * ES日志
 * @param request
 * @returns
 */
export async function getElasticSearchLogAsync(
  request: PagingElasticSearchLogInput
): Promise<PagingElasticSearchLogOutputCustomePagedResultDto> {
  const _elasticSearchServiceProxy = new EsLogServiceProxy();
  return await _elasticSearchServiceProxy.page(request);
}

修改后的调用方式

/**
 * ES日志
 * @param request
 * @returns
 */
export async function getElasticSearchLogAsync(
  filter: string | undefined,
  startTime: moment.Moment | undefined,
  endTime: moment.Moment | undefined,
  pageIndex: number | undefined,
  pageSize: number | undefined
): Promise<PageResultModel_1OfOfElasticSearchLogOutputAndSharedAnd_0AndCulture_neutralAndPublicKeyToken_null> {
  const _elasticSearchServiceProxy = new ElasticSearchLogServiceProxy();
  return await _elasticSearchServiceProxy.GetApiStoreElasticSearchLog({
    filter,
    startTime,
    endTime,
    pageIndex,
    pageSize,
  });
}

修改后的方法

export class ElasticSearchLogServiceProxy extends ServiceProxyBase {
    private instance: AxiosInstance;
    private baseUrl: string;
    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;

    constructor(baseUrl?: string, instance?: AxiosInstance) {
        super();
        this.instance = instance ? instance : axios.create();
        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : "";
    }

    /**
     * 分页日志
     * @param GetApiStoreElasticSearchLogRequest 
     * @param cancelToken (optional)
     * @return Success PageResultModel_1OfOfElasticSearchLogOutputAndSharedAnd_0AndCulture_neutralAndPublicKeyToken_null
     */
    GetApiStoreElasticSearchLog(request: IGetApiStoreElasticSearchLogRequest, cancelToken?: CancelToken | undefined): Promise<PageResultModel_1OfOfElasticSearchLogOutputAndSharedAnd_0AndCulture_neutralAndPublicKeyToken_null> {
        let url_ = this.baseUrl + "/api/store/elastic-search-log?";
        if (request.filter === null)
            throw new Error("The parameter 'request.filter' cannot be null.");
        else if (request.filter !== undefined)
            url_ += "Filter=" + encodeURIComponent("" + request.filter) + "&";
        if (request.startTime === null)
            throw new Error("The parameter 'request.startTime' cannot be null.");
        else if (request.startTime !== undefined)
            url_ += "StartTime=" + encodeURIComponent(request.startTime ? "" + request.startTime.toISOString() : "") + "&";
        if (request.endTime === null)
            throw new Error("The parameter 'request.endTime' cannot be null.");
        else if (request.endTime !== undefined)
            url_ += "EndTime=" + encodeURIComponent(request.endTime ? "" + request.endTime.toISOString() : "") + "&";
        if (request.pageIndex === null)
            throw new Error("The parameter 'request.pageIndex' cannot be null.");
        else if (request.pageIndex !== undefined)
            url_ += "PageIndex=" + encodeURIComponent("" + request.pageIndex) + "&";
        if (request.pageSize === null)
            throw new Error("The parameter 'request.pageSize' cannot be null.");
        else if (request.pageSize !== undefined)
            url_ += "PageSize=" + encodeURIComponent("" + request.pageSize) + "&";
        url_ = url_.replace(/[?&]$/, "");

        let options_ = <AxiosRequestConfig>{
            method: "GET",
            url: url_,
            headers: {
                "Accept": "text/plain"
            },
            cancelToken
        };

        return this.transformOptions(options_).then(transformedOptions_ => {
            return this.instance.request(transformedOptions_);
        }).catch((_error: any) => {
            if (isAxiosError(_error) && _error.response) {
                return _error.response;
            } else {
                throw _error;
            }
        }).then((_response: AxiosResponse) => {
            return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processGetApiStoreElasticSearchLog(_response));
        });
    }

    protected processGetApiStoreElasticSearchLog(response: AxiosResponse): Promise<PageResultModel_1OfOfElasticSearchLogOutputAndSharedAnd_0AndCulture_neutralAndPublicKeyToken_null> {
        const status = response.status;
        let _headers: any = {};
        if (response.headers && typeof response.headers === "object") {
            for (let k in response.headers) {
                if (response.headers.hasOwnProperty(k)) {
                    _headers[k] = response.headers[k];
                }
            }
        }
        if (status === 200) {
            const _responseText = response.data;
            let result200: any = null;
            let resultData200  = _responseText;
            result200 = PageResultModel_1OfOfElasticSearchLogOutputAndSharedAnd_0AndCulture_neutralAndPublicKeyToken_null.fromJS(resultData200);
            return Promise.resolve<PageResultModel_1OfOfElasticSearchLogOutputAndSharedAnd_0AndCulture_neutralAndPublicKeyToken_null>(result200);
        } else if (status === 403) {
            const _responseText = response.data;
            let result403: any = null;
            let resultData403  = _responseText;
            result403 = RemoteServiceErrorResponse.fromJS(resultData403);
            return throwException("Forbidden", status, _responseText, _headers, result403);
        } else if (status === 401) {
            const _responseText = response.data;
            let result401: any = null;
            let resultData401  = _responseText;
            result401 = RemoteServiceErrorResponse.fromJS(resultData401);
            return throwException("Unauthorized", status, _responseText, _headers, result401);
        } else if (status === 400) {
            const _responseText = response.data;
            let result400: any = null;
            let resultData400  = _responseText;
            result400 = RemoteServiceErrorResponse.fromJS(resultData400);
            return throwException("Bad Request", status, _responseText, _headers, result400);
        } else if (status === 404) {
            const _responseText = response.data;
            let result404: any = null;
            let resultData404  = _responseText;
            result404 = RemoteServiceErrorResponse.fromJS(resultData404);
            return throwException("Not Found", status, _responseText, _headers, result404);
        } else if (status === 501) {
            const _responseText = response.data;
            let result501: any = null;
            let resultData501  = _responseText;
            result501 = RemoteServiceErrorResponse.fromJS(resultData501);
            return throwException("Server Error", status, _responseText, _headers, result501);
        } else if (status === 500) {
            const _responseText = response.data;
            let result500: any = null;
            let resultData500  = _responseText;
            result500 = RemoteServiceErrorResponse.fromJS(resultData500);
            return throwException("Server Error", status, _responseText, _headers, result500);
        } else if (status !== 200 && status !== 204) {
            const _responseText = response.data;
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
        }
        return Promise.resolve<PageResultModel_1OfOfElasticSearchLogOutputAndSharedAnd_0AndCulture_neutralAndPublicKeyToken_null>(<any>null);
    }
}

export interface IGetApiStoreElasticSearchLogRequest {

    /** 过滤条件 */
    filter: string | undefined;

    /** 开始时间 */
    startTime: moment.Moment | undefined;

    /** 结束时间 */
    endTime: moment.Moment | undefined;

    /** 当前页面.默认从1开始 */
    pageIndex: number | undefined;

    /** 每页多少条.每页显示多少记录 */
    pageSize: number | undefined;

}

export class GetApiStoreElasticSearchLogRequest implements IGetApiStoreElasticSearchLogRequest {
    constructor(filter: string | undefined, startTime: moment.Moment | undefined, endTime: moment.Moment | undefined, pageIndex: number | undefined, pageSize: number | undefined) {

        this.filter = filter;

        this.startTime = startTime;

        this.endTime = endTime;

        this.pageIndex = pageIndex;

        this.pageSize = pageSize;

    }

    /** 过滤条件 */
    filter: string | undefined;

    /** 开始时间 */
    startTime: moment.Moment | undefined;

    /** 结束时间 */
    endTime: moment.Moment | undefined;

    /** 当前页面.默认从1开始 */
    pageIndex: number | undefined;

    /** 每页多少条.每页显示多少记录 */
    pageSize: number | undefined;

}

Serilog 不输出日志文件

{
"Serilog": {
"Using": [
"Serilog.Sinks.Console",
"Serilog.Sinks.File"
],
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Information",
"Volo.Abp": "Information",
"Hangfire": "Information",
"DotNetCore.CAP": "Information",
"Serilog.AspNetCore": "Information",
"Microsoft.EntityFrameworkCore": "Information"
}
},
"WriteTo": [
{
"Name": "Console"
},
{
"Name": "RollingFile",
"Args": {
"pathFormat": "logs/logs-{Date}.txt"
}
}

]
},

使用 RollingFile 不输出日志文件
改为
{
"Name": "File",
"Args": {
"path": "logs/logs-.txt",
"rollingInterval": "Day"
}
}
就可以输出日志文件了

Vue前端启动失败问题

前端启动时候会提示很多下面这样的错误,我看ant的引用有的是用了按需加载吗?但没看到有相关的组件啊,求大神明示

Failed to resolve import "C:/Users/xxx/Downloads/abp-vnext-pro-49ec9009e8248b7931e0c4c9c2f29427932a4bc2/vben28/node_modules/[email protected]@/ant-design-vue/es/modal/style/index" from "src\router\guard\index.ts". Does the file exist?

跑不起来,windows 10系统

一开始报错路径长度超过260个字符,按教程 https://blog.csdn.net/weixin_41805017/article/details/109526885 去掉限制后,还是跑不起来,nuget包都还原了,没有感叹号。

1>------ 已启动生成: 项目: CompanyName.ProjectName.DataDictionaryManagement.Domain.Shared, 配置: Debug Any CPU ------
2>------ 已启动生成: 项目: CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore, 配置: Debug Any CPU ------
1>CSC : error CS2001: 未能找到源文件“D:\001.Test\abp-vnext-pro-main\aspnet-core\modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.Domain.Shared\obj\Debug\net5.0\CompanyName.ProjectName.DataDictionaryManagement.Domain.Shared.GeneratedMSBuildEditorConfig.editorconfig”。
1>已完成生成项目“CompanyName.ProjectName.DataDictionaryManagement.Domain.Shared.csproj”的操作 - 失败。
3>------ 已启动生成: 项目: CompanyName.ProjectName.DataDictionaryManagement.Domain, 配置: Debug Any CPU ------
4>------ 已启动生成: 项目: CompanyName.ProjectName.DataDictionaryManagement.Application.Contracts, 配置: Debug Any CPU ------
3>CSC : error CS0006: 未能找到元数据文件“D:\001.Test\abp-vnext-pro-main\aspnet-core\modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.Domain.Shared\bin\Debug\net5.0\ref\CompanyName.ProjectName.DataDictionaryManagement.Domain.Shared.dll”
3>已完成生成项目“CompanyName.ProjectName.DataDictionaryManagement.Domain.csproj”的操作 - 失败。
5>------ 已启动生成: 项目: CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore, 配置: Debug Any CPU ------
6>------ 已启动生成: 项目: CompanyName.ProjectName.Domain, 配置: Debug Any CPU ------
2>CSC : error CS2001: 未能找到源文件“D:\001.Test\abp-vnext-pro-main\aspnet-core\modules\NotificationManagement\src\CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore\obj\Debug\net5.0\CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore.GeneratedMSBuildEditorConfig.editorconfig”。
2>已完成生成项目“CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore.csproj”的操作 - 失败。
6>CSC : error CS0006: 未能找到元数据文件“D:\001.Test\abp-vnext-pro-main\aspnet-core\modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.Domain\bin\Debug\net5.0\ref\CompanyName.ProjectName.DataDictionaryManagement.Domain.dll”
6>CSC : error CS0006: 未能找到元数据文件“D:\001.Test\abp-vnext-pro-main\aspnet-core\modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.Domain.Shared\bin\Debug\net5.0\ref\CompanyName.ProjectName.DataDictionaryManagement.Domain.Shared.dll”
6>已完成生成项目“CompanyName.ProjectName.Domain.csproj”的操作 - 失败。
4>CSC : error CS2001: 未能找到源文件“D:\001.Test\abp-vnext-pro-main\aspnet-core\modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.Application.Contracts\obj\Debug\net5.0\CompanyName.ProjectName.DataDictionaryManagement.Application.Contracts.GeneratedMSBuildEditorConfig.editorconfig”。
4>已完成生成项目“CompanyName.ProjectName.DataDictionaryManagement.Application.Contracts.csproj”的操作 - 失败。
7>------ 已启动生成: 项目: CompanyName.ProjectName.Application.Contracts, 配置: Debug Any CPU ------
7>CSC : error CS0006: 未能找到元数据文件“D:\001.Test\abp-vnext-pro-main\aspnet-core\modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.Application.Contracts\bin\Debug\net5.0\ref\CompanyName.ProjectName.DataDictionaryManagement.Application.Contracts.dll”
7>CSC : error CS0006: 未能找到元数据文件“D:\001.Test\abp-vnext-pro-main\aspnet-core\modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.Domain.Shared\bin\Debug\net5.0\ref\CompanyName.ProjectName.DataDictionaryManagement.Domain.Shared.dll”
7>已完成生成项目“CompanyName.ProjectName.Application.Contracts.csproj”的操作 - 失败。
5>CSC : error CS2001: 未能找到源文件“D:\001.Test\abp-vnext-pro-main\aspnet-core\modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore\obj\Debug\net5.0\CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore.GeneratedMSBuildEditorConfig.editorconfig”。
5>已完成生成项目“CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore.csproj”的操作 - 失败。
8>------ 已启动生成: 项目: CompanyName.ProjectName.EntityFrameworkCore, 配置: Debug Any CPU ------
8>CSC : error CS0006: 未能找到元数据文件“D:\001.Test\abp-vnext-pro-main\aspnet-core\modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.Domain\bin\Debug\net5.0\ref\CompanyName.ProjectName.DataDictionaryManagement.Domain.dll”
8>CSC : error CS0006: 未能找到元数据文件“D:\001.Test\abp-vnext-pro-main\aspnet-core\modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.Domain.Shared\bin\Debug\net5.0\ref\CompanyName.ProjectName.DataDictionaryManagement.Domain.Shared.dll”
8>CSC : error CS0006: 未能找到元数据文件“D:\001.Test\abp-vnext-pro-main\aspnet-core\modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore\bin\Debug\net5.0\ref\CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore.dll”
8>CSC : error CS0006: 未能找到元数据文件“D:\001.Test\abp-vnext-pro-main\aspnet-core\services\src\CompanyName.ProjectName.Domain\bin\Debug\net5.0\ref\CompanyName.ProjectName.Domain.dll”
8>CSC : error CS0006: 未能找到元数据文件“D:\001.Test\abp-vnext-pro-main\aspnet-core\modules\NotificationManagement\src\CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore\bin\Debug\net5.0\ref\CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore.dll”
8>已完成生成项目“CompanyName.ProjectName.EntityFrameworkCore.csproj”的操作 - 失败。
9>------ 已启动生成: 项目: CompanyName.ProjectName.DbMigrator, 配置: Debug Any CPU ------
9>CSC : error CS0006: 未能找到元数据文件“D:\001.Test\abp-vnext-pro-main\aspnet-core\services\src\CompanyName.ProjectName.Application.Contracts\bin\Debug\net5.0\ref\CompanyName.ProjectName.Application.Contracts.dll”
9>CSC : error CS0006: 未能找到元数据文件“D:\001.Test\abp-vnext-pro-main\aspnet-core\modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.Application.Contracts\bin\Debug\net5.0\ref\CompanyName.ProjectName.DataDictionaryManagement.Application.Contracts.dll”
9>CSC : error CS0006: 未能找到元数据文件“D:\001.Test\abp-vnext-pro-main\aspnet-core\modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.Domain\bin\Debug\net5.0\ref\CompanyName.ProjectName.DataDictionaryManagement.Domain.dll”
9>CSC : error CS0006: 未能找到元数据文件“D:\001.Test\abp-vnext-pro-main\aspnet-core\modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.Domain.Shared\bin\Debug\net5.0\ref\CompanyName.ProjectName.DataDictionaryManagement.Domain.Shared.dll”
9>CSC : error CS0006: 未能找到元数据文件“D:\001.Test\abp-vnext-pro-main\aspnet-core\modules\DataDictionaryManagement\src\CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore\bin\Debug\net5.0\ref\CompanyName.ProjectName.DataDictionaryManagement.EntityFrameworkCore.dll”
9>CSC : error CS0006: 未能找到元数据文件“D:\001.Test\abp-vnext-pro-main\aspnet-core\services\src\CompanyName.ProjectName.Domain\bin\Debug\net5.0\ref\CompanyName.ProjectName.Domain.dll”
9>CSC : error CS0006: 未能找到元数据文件“D:\001.Test\abp-vnext-pro-main\aspnet-core\services\src\CompanyName.ProjectName.EntityFrameworkCore\bin\Debug\net5.0\ref\CompanyName.ProjectName.EntityFrameworkCore.dll”
9>CSC : error CS0006: 未能找到元数据文件“D:\001.Test\abp-vnext-pro-main\aspnet-core\modules\NotificationManagement\src\CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore\bin\Debug\net5.0\ref\CompanyName.ProjectName.NotificationManagement.EntityFrameworkCore.dll”
9>已完成生成项目“CompanyName.ProjectName.DbMigrator.csproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 9 个,最新 4 个,跳过 0 个 ==========

功能建议

这个项目非常好,和我用的前后端都完全一样,哈哈。
在项目应用中有点小建议,像identity和tenant模块,用户、角色、租户都要大量增加字段,用实体扩展的方式非常不友好。我在开发中是直接把这里模块的源码加进来,直接改源码非常快,也符合开发的逻辑。
授权和菜单最好改成主流系统的菜单配置模块,可以配置菜单的层级图标等信息。
还有本地化改成数据库形式,管理员可修改翻译

在release版本中移除IdentityServer4

IdentityServer4官方说明
As of Oct, 1st 2020, we started a new company. All new development will happen in our new organization. The new Duende IdentityServer is free for dev/testing/personal projects and companies or individuals with less than 1M USD gross annual revenue - for all others we have various commercial licenses that also include support and updates. Contact us for more information.
IdentityServer4 will be maintained with security updates until November 2022.

Abp 官方RoadMap
在6.0版本中,Providing an OpenIddict integration to replace current IdentityServer4 integration.

本项目采取措施:
1.将保留Identityserver4分支,并且持续迭代。
2.后续abp6.0集成OpenIddict也有会对应的OpenIddict分支集成。
3.Release版本不在做OAuth2协议的登录。

does not work ,HttpApi.Host refuse vue app connection for login

when vue app try to login
http://localhost:50000/api/app/login
HttpApi.Host does not respond.
Also:
appsettings.json in HttpApi.Host have the following entries
AuthServer": {
"Authority": "https://localhost:44363",
"RequireHttpsMetadata": "false"
},
"Jwt": {
"Audience": "http://localhost:5010", //¿Í»§¶Ë±êʶ
"SecurityKey": "dzehzRz9a8asdfasfdadfasdfasdfafsdadfasbasdf=",
"Issuer": "WangJun", //Ç©·¢Õß
"ExpirationTime": 2 //¹ýÆÚʱ¼ä hour
}

What are the projects running services ["https://localhost:44363" ,"http://localhost:5010"]

Also:
in vue app ,.env.development have entry
VUE_APP_AUTH_URL=http://sts.vnext.identity.development.yhglobal.cn

How to run the projects locally without any external service ?
image

编译错误

最新版本,直接编译时报错:
`

46>C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\Roslyn\Microsoft.Managed.Core.targets(190,5): error : 未能找到路径“D:\source\net\abp\abp-vnext-pro-ori\aspnet-core\modules\NotificationManagement\test\Lion.AbpPro.NotificationManagement.EntityFrameworkCore.Tests\obj\Debug\net6.0\Lion.AbpPro.NotificationManagement.EntityFrameworkCore.Tests.GeneratedMSBuildEditorConfig.editorconfig”的一部分。
46>已完成生成项目“Lion.AbpPro.NotificationManagement.EntityFrameworkCore.Tests.csproj”的操作 - 失败。
49>------ 已启动全部重新生成: 项目: Lion.AbpPro.DataDictionaryManagement.HttpApi.Host, 配置: Debug Any CPU ------
50>------ 已启动全部重新生成: 项目: Lion.AbpPro.FreeSqlRepository, 配置: Debug Any CPU ------
51>------ 已启动全部重新生成: 项目: Lion.AbpPro.TestBase, 配置: Debug Any CPU ------
52>------ 已启动全部重新生成: 项目: Lion.AbpPro.EntityFrameworkCore, 配置: Debug Any CPU ------
53>------ 已启动全部重新生成: 项目: Lion.AbpPro.NotificationManagement.Domain.Tests, 配置: Debug Any CPU ------
34>Lion.AbpPro.FileManagement.EntityFrameworkCore.Tests -> D:\source\net\abp\abp-vnext-pro-ori\aspnet-core\modules\FileManagement\test\Lion.AbpPro.FileManagement.EntityFrameworkCore.Tests\bin\Debug\net6.0\Lion.AbpPro.FileManagement.EntityFrameworkCore.Tests.dll
54>------ 已启动全部重新生成: 项目: Lion.AbpPro.FileManagement.Domain.Tests, 配置: Debug Any CPU ------
30>Lion.AbpPro.NotificationManagement.HttpApi -> D:\source\net\abp\abp-vnext-pro-ori\aspnet-core\modules\NotificationManagement\src\Lion.AbpPro.NotificationManagement.HttpApi\bin\Debug\net6.0\Lion.AbpPro.NotificationManagement.HttpApi.dll
55>------ 已启动全部重新生成: 项目: Lion.AbpPro.NotificationManagement.HttpApi.Host, 配置: Debug Any CPU ------
48>C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\Roslyn\Microsoft.Managed.Core.targets(190,5): error : 未能找到路径“D:\source\net\abp\abp-vnext-pro-ori\aspnet-core\modules\DataDictionaryManagement\test\Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore.Tests\obj\Debug\net6.0\Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore.Tests.GeneratedMSBuildEditorConfig.editorconfig”的一部分。
48>已完成生成项目“Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore.Tests.csproj”的操作 - 失败。

`

封装abp 自带模板到BasicManagement

  • 考虑到升级问题,把abp自带 账户模块,权限模块,identity模块,setting模块,feature模块,后台任务模块,租户模块封装到BasicManagement

vben271 vite启动报 Failed to load source map 错误

vben271前端项目启动报错。
Failed to load source map for /node_modules/.vite/@zxcvbn-ts_core.js

npm run serve
`> [email protected] serve

npm run dev

[email protected] dev
vite

warn - 'lightBlue' has been renamed to 'sky'.
warn - Please update your color palette to eliminate this warning.
Pre-bundling dependencies:
vue
ant-design-vue
pinia
vue-router
vue-i18n
(...and 34 more)
(this will be run only when your dependencies or config have changed)

vite v2.6.14 dev server running at:

Network: http://192.168.2.3:4200/
Local: http://localhost:4200/

ready in 19441ms.

12:02:41 [vite] new dependencies found: qrcode, updating...
12:02:42 [vite] Failed to load source map for /node_modules/.vite/@zxcvbn-ts_core.js?v=538e42a6.
12:02:56 [vite] ✨ dependencies updated, reloading page...`

启动后尝试更改package.json后此错误消失。
此错误只在工程首次启动时发生(vite缓存建立后不再出现),后续启动则不报错。
暂未找到问题根源,只有绕过此问题的办法。

身份认证中心里的配置在本系统中的作用

请教一下,因为已经改写了登录,我看所有的token获取都是从登录接口拿到的,那咱们在身份认证中心里配置的资源和认证方式有什么用呢?
如果我要做一个系统,系统有后台管理的用户,有webapi,此时一个用户A调用接口,拿到token,如果是同一个授权方式的话,他管理后台在线的账号就会被踢出,因为token已经变了,他需要刷新页面重新登录才能再次使用。如果api接口调用非常频繁,那后台基本上就会登录就退出吧。
我是说身份认证中心添加不同的认证类型,是否可以解决同一个用户可以同时后台登录和调用api呢,还是我理解错了,有其他的方式?

前端monorepo化

vben 2.8 包管理工具改用pnpm了。
pnpm实现monorepo有奇效,因为可以通过软硬链接来连接不同项目。
可以以此为契机,把不同模块的界面 monorepo化。


下一步可以考虑用 vite-plugin-federation 实现微前端

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.