ABP入门系列(12)——如何升级Abp并调试源码
1. 升级Abp
本系列教程是基于Abp V1.0版本,现在Abp版本已经升级至V1.4.2,其中新增了New Feature,并对Abp做了相应的Enhancements,以及Bug fixs。现在我们就把它升级至最新版本,那如何升级呢?
下面就请按我的步骤来将Abp由V1.0升级至V1.4.2。
1.1. 过滤Abp Nuget包
VS打开解决方案文件,右键解决方案(不是某个项目),选中【管理解决方案的Nuget程序包(N)...】,如下图1.1。
图1.1
从图中可以看到,VS智能提示有42个Nuget包可升级,其中有2个Nuget程序包可合并。看到这个,不要犯了强迫症,就全部更新合并。
要知道,Nuget程序包是相互依赖的,不一定最新的就能相互兼容。
所以这一次,我们保险起见,只升级Abp相关Nuget程序包。
选中【更新】,在搜索框中录入Abp进行筛选Abp相关Nuget程序包(一共16个)。
1.2. 更新Abp相关Nuget包
勾选【选择所有的包】,并点击【更新】。VS会去分析解决方案下每个工程的Nuge包的依赖项,如下图1.2。
图1.2
分析完毕后,弹出分析结果,即每个工程将要更新哪些Nuget包,如图1.3。
图1.3
从图中可以发现,不仅仅是更新了Nuget包,依赖的相关包也将自动更新。
毫无疑问,点击【确定】,紧接着会弹出一个【接受许可证】,如图1.4,点击【我接受】。
图1.4
观察输出窗口,发现VS已经开始下载要更新的Nuget包并安装,如图1.5。
图1.5
因为Abp V1.4.2已经支持TypeScript,VS解析到需要安装TypeScript,弹出图1.6所示对话框。
图1.6
点【是】进入下一步。稍等2分钟,即可成功安装,如图1.7。
图1.7
1.3. 编译项目
编译项目,报了一堆错误,如图1.8。
图1.8
第一个错误好解决,是我们扩展AbpSesion出的错误。定位一看,原来是Abp修改了默认IAbpSession
的实现类ClaimsAbpSession
。我们只需要删除报错的构造方法,按下面方式更改即可:
public AbpSessionExtension(IPrincipalAccessor principalAccessor, IMultiTenancyConfig multiTenancy,ITenantResolver tenantResolver, IAmbientScopeProvider<SessionOverride> sessionOverrideScopeProvider): base(principalAccessor, multiTenancy, tenantResolver, sessionOverrideScopeProvider){}
接下来的错误都是Typescript报的错,需要安装下TypeScript。
1.4. 安装TypeScript
依次点击【工具-->扩展和更新-->联机】,在右边搜索框中搜索typescript,并按【最新】排序,搜索结果如图1.9。选择最新版本下载后,关闭VS,安装即可。
图1.9
1.5. 运行Web项目
重新编译下,Ctrl+F5运行web项目,报错如图2.0。
图2.0
按照图示所言,修改web.config中的customErrors节点为Off,<customErrors mode="Off" />
。重新运行Web项目,报错如图2.1。
图2.1
一看是 EntityFramework.DynamicFilters相关错误,这个是一个第三方Nuget包,用来支持EF进行Linq动态过滤的。猜到一种可能是升级后的DynamicFilters删除了图中的扩展方法,导致出错。到abp官方github上的项目上根据关键字搜索Issue,如图2.2。
图2.2
果然大家跟我们报的一样的错,其中已经给出了解决方案,需要将DynamicFilterNuget包降级到1.4.11。
右键解决方案,选择【管理解决方案的Nuget程序包(N)...】,在搜索框中输入 【EntityFramework.DynamicFilters】过滤,并选中依赖的项目,在版本下拉框中选择1.4.11,点击安装,如图2.3。
图2.3
重新编译,再次启动web项目,还是报错,如图2.4。
图2.4
是不是快崩溃了,别怕,跟着我做,让你气死回生。
分别定位到依赖EntityFramework.DynamicFilters组件的项目,修改App.Config或Web.Config,找到以下节点:
<dependentAssembly><assemblyIdentity name="EntityFramework.DynamicFilters" publicKeyToken="146423a1b8d60775" culture="neutral" /><bindingRedirect oldVersion="0.0.0.0-2.3.0.0" newVersion="2.3.0.0" />
</dependentAssembly>
是不是吐血,降级后,VS没有更改依赖组件的版本。修改如下:
<dependentAssembly><assemblyIdentity name="EntityFramework.DynamicFilters" publicKeyToken="146423a1b8d60775" culture="neutral" /><bindingRedirect oldVersion="0.0.0.0-1.4.11" newVersion="1.4.11" />
</dependentAssembly>
修改完毕后,重新编译,启动web项目,这一次终于显示久违的登陆界面,预示着这次升级折腾结束了。
有了这次升级折腾经验,下次我想咱就不怕了。
2. 调试源码
按照作者的官方如何调试的文档介绍Debuging,所有官方ASP.NET Boilerplate nuget包都启用了GitLink。这意味着您可以轻松地在项目中调试Abp.* nuget包。
但是由于GitLink暂不支持 xproj/project.json格式,所以我们暂时用不了GitLink进行调试。
这里另外提供一种调试的方式:
2.1. 下载与本地模板项目版本一致的Abp源码
首先去看看Abp的Releases目录,找到对应版本的Source code.zip,下载即可。
2.2. 还原Nuget包
打开下载下来的源码解决方案,右键解决方案,选择还原Nuget包。还原成功后,重新编译项目。
然后把需要调试的dll文件拷贝到自己的模板项目中的web项目的Bin目录下。
2.3. 附加进程调试
Ctrl+F5运行web项目,然后在源码对应解决方案,选择【调试-->附加到进程】,从进程列表中,选择【iisexpress.exe】进程附加即可。打个断点,就可以调试了。
6人点赞
Abp架构入门系列
作者:圣杰
链接:https://www.jianshu.com/p/ae4fb0c7493d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
ABP入门系列(12)——如何升级Abp并调试源码相关推荐
- MyBatis入门系列(18) -MyBatis四大组件之ParameterHandler源码及流程解析
ParameterHandler 在之前的分析文档中,我们了解到在创建StatementHandler时,会生成参数处理器及结果集处理器.每个StatementHandler都会包含一个Paramet ...
- ABP入门系列(7)——分页实现
ABP入门系列目录--学习Abp框架之实操演练 完成了任务清单的增删改查,咱们来讲一讲必不可少的的分页功能. 首先很庆幸ABP已经帮我们封装了分页实现,实在是贴心啊. 来来来,这一节咱们就来捋一捋如何 ...
- ABP入门系列(14)——应用BootstrapTable表格插件
1. 引言 之前的文章ABP入门系列(7)--分页实现讲解了如何进行分页展示,但其分页展示仅适用于前台web分页,在后台管理系统中并不适用.后台管理系统中的数据展示一般都是使用一些表格插件来完成的.这 ...
- ABP入门系列(8)——Json格式化
ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 讲完了分页功能,这一节我们先不急着实现新的功能.来简要介绍下Abp中Json的用法.为什么要在这一 ...
- ABP入门系列(6)——定义导航菜单
ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 完成了增删改查以及页面展示,这一节我们来为任务清单添加[导航菜单]. 在以往的项目中,大家可能会手 ...
- ABP入门系列(5)——展现层实现增删改查
ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 这一章节将通过完善Controller.View.ViewModel,来实现展现层的增删改查.最终 ...
- ABP入门系列(4)——创建应用服务
ABP入门系列目录--学习Abp框架之实操演练 1. 解释下应用服务层 应用服务用于将领域(业务)逻辑暴露给展现层.展现层通过传入DTO(数据传输对象)参数来调用应用服务,而应用服务通过领域对象来执行 ...
- abp.ajax get,ABP入门系列之Json格式化
讲完了分页功能,这一节我们先不急着实现新的功能.来简要介绍下Abp中Json的用法.为什么要在这一节讲呢?当然是做铺垫啊,后面的系列文章会经常和Json这个东西打交道. 一.Json是干什么的 JSO ...
- ABP入门系列(7)——分页实现_0
ABP入门系列目录--学习Abp框架之实操演练 完成了任务清单的增删改查,咱们来讲一讲必不可少的的分页功能. 首先很庆幸ABP已经帮我们封装了分页实现,实在是贴心啊. 来来来,这一节咱们就来捋一捋如何 ...
最新文章
- IOS UITableView性能优化
- java多叉树全路径_算法实战——多叉树全路径遍历
- ssh 框架引入service_搭建SSH开发框架时autowired注入为空的问题
- 兄弟3150cdn加粉后清零_兄弟MFC1618MFC1816 tn1035加粉清零方法
- Android 系统(231)--OTA对要发布的编译版本进行签名
- 百度春晚红包分享链接遭微信屏蔽 已有超700人集齐好运卡
- 一个wepy开发微信小程序时图片在真机上不显示的问题
- python项目如何打包_python项目怎么打包运行?
- Linux驱动移植——ENC28J60以太网控制器
- SpringOne 2017重要公告
- 中国人工智能AI人才需求现状
- JAVA:实现RabinKarpAlgorithm拉宾卡普算法(附完整源码)
- unhandled system error, NCCL version 2.7.8
- 2.5.3 文法二义性的消除
- 理财通app的设计与实现(三)
- C++后端开发(校招实习生)学习路线
- (深度学习)构造属于你自己的Pytorch数据集
- Ajax基础:发送jsonp请求(jsonp、jsonCallback)
- 图片 美化 python_GitHub 项目推荐:用深度学习让你的照片变得美丽
- elasticsearch配置x-pack和SSL安全认证常见问题
热门文章
- python开发学习笔记之六(面向对象)
- window.open 和showModalDialog的返回值
- 社区发现SLPA算法
- 关于DateTime和String转换的容易犯得错误
- [Leetcode][第60题][JAVA][第k个排列][回溯][DFS][剪枝]
- [Leedcode][JAVA][第202题][快乐数]
- python微信推送消息_Python编程之微信推送模板消息功能示例
- linux编译ffmepg,在Ubuntu下编译FFmpeg
- php访问mysql函数吗,PHP访问MySQL数据库函数简介
- 1315B. Homecoming