ABP入门系列目录——学习Abp框架之实操演练

源码路径:Github-LearningMpaAbp


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。

从图中可以看到,VS智能提示有42个Nuget包可升级,其中有2个Nuget程序包可合并。看到这个,不要犯了强迫症,就全部更新合并。

要知道,Nuget程序包是相互依赖的,不一定最新的就能相互兼容。

所以这一次,我们保险起见,只升级Abp相关Nuget程序包。

选中【更新】,在搜索框中录入Abp进行筛选Abp相关Nuget程序包(一共16个)。

1.2. 更新Abp相关Nuget包

勾选【选择所有的包】,并点击【更新】。VS会去分析解决方案下每个工程的Nuge包的依赖项,如下图1.2。



分析完毕后,弹出分析结果,即每个工程将要更新哪些Nuget包,如图1.3。

从图中可以发现,不仅仅是更新了Nuget包,依赖的相关包也将自动更新。

毫无疑问,点击【确定】,紧接着会弹出一个【接受许可证】,如图1.4,点击【我接受】。

观察输出窗口,发现VS已经开始下载要更新的Nuget包并安装,如图1.5。

因为Abp V1.4.2已经支持TypeScript,VS解析到需要安装TypeScript,弹出图1.6所示对话框。

点【是】进入下一步。稍等2分钟,即可成功安装,如图1.7。

1.3. 编译项目

编译项目,报了一堆错误,如图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.5. 运行Web项目

重新编译下,Ctrl+F5运行web项目,报错如图2.0。



按照图示所言,修改web.config中的customErrors节点为Off,<customErrors mode="Off" />。重新运行Web项目,报错如图2.1。

一看是 EntityFramework.DynamicFilters相关错误,这个是一个第三方Nuget包,用来支持EF进行Linq动态过滤的。猜到一种可能是升级后的DynamicFilters删除了图中的扩展方法,导致出错。到abp官方github上的项目上根据关键字搜索Issue,如图2.2。

果然大家跟我们报的一样的错,其中已经给出了解决方案,需要将DynamicFilterNuget包降级到1.4.11。

右键解决方案,选择【管理解决方案的Nuget程序包(N)...】,在搜索框中输入 【EntityFramework.DynamicFilters】过滤,并选中依赖的项目,在版本下拉框中选择1.4.11,点击安装,如图2.3。

重新编译,再次启动web项目,还是报错,如图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】进程附加即可。打个断点,就可以调试了。

ABP入门系列(12)——如何升级Abp并调试源码的更多相关文章

  1. ABP入门系列目录——学习Abp框架之实操演练

    ABP是"ASP.NET Boilerplate Project (ASP.NET样板项目)"的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WE ...

  2. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  3. ABP入门系列(2)——通过模板创建MAP版本项目

    一.从官网创建模板项目 进入官网下载模板项目 依次按下图选择: 输入验证码开始下载 下载提示: 二.启动项目 使用VS2015打开项目,还原Nuget包: 设置以Web结尾的项目,设置为启动项目: 打 ...

  4. ABP入门系列(4)——领域层定义仓储并实现

    一.先来介绍下仓储 仓储(Repository): 仓储用来操作数据库进行数据存取.仓储接口在领域层定义,而仓储的实现类应该写在基础设施层. 在ABP中,仓储类要实现IRepository接口,接口定 ...

  5. ABP入门系列(3)——领域层创建实体

    这一节我们主要和领域层打交道.首先我们要对ABP的体系结构以及从模板创建的解决方案进行一一对应.网上有代码生成器去简化我们这一步的任务,但是不建议初学者去使用. 一.首先来看看ABP体系结构 领域层就 ...

  6. ABP入门系列(6)——展现层实现增删改查

    这一章节将通过完善Controller.View.ViewModel,来实现展现层的增删改查.最终实现效果如下图: 一.定义Controller ABP对ASP.NET MVC Controllers ...

  7. ABP入门系列(5)——创建应用服务

    一.解释下应用服务层 应用服务用于将领域(业务)逻辑暴露给展现层.展现层通过传入DTO(数据传输对象)参数来调用应用服务,而应用服务通过领域对象来执行相应的业务逻辑并且将DTO返回给展现层.因此,展现 ...

  8. ABP入门系列(7)——分页实现

    ABP入门系列目录--学习Abp框架之实操演练 完成了任务清单的增删改查,咱们来讲一讲必不可少的的分页功能. 首先很庆幸ABP已经帮我们封装了分页实现,实在是贴心啊. 来来来,这一节咱们就来捋一捋如何 ...

  9. ABP入门系列(8)——Json格式化

    ABP入门系列目录--学习Abp框架之实操演练 讲完了分页功能,这一节我们先不急着实现新的功能.来简要介绍下Abp中Json的用法.为什么要在这一节讲呢?当然是做铺垫啊,后面的系列文章会经常和Json ...

随机推荐

  1. 关于帧动画steps属性的理解

    CSS3的Animation有八个属性 animation-name animation-duration animation-delay animation-iteration-count anim ...

  2. 用python模拟登录(解析cookie + 解析html + 表单提交 + 验证码识别 + excel读写 + 发送邮件)

    老婆大人每个月都要上一个网站上去查数据,然后做报表. 为了减轻老婆大人的工作压力,所以我决定做个小程序,减轻我老婆的工作量. 准备工作 1.tesseract-ocr 这个工具用来识别验证码,非常好用 ...

  3. 自定义view-滑动开关

    介绍 前段时间,我看到了一篇关于可滑动开关Switch组件的文章,效果图如下: 思路也挺简单的:这个控件主要由田径场式背景和滑块组成.他将田径场式背景分为3部分,最左边的半圆,中间的两条直线部分和最右 ...

  4. [转载] 说说JSON和JSONP,也许你会豁然开朗

    转载自http://kb.cnblogs.com/page/139725/ 前言 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了 ...

  5. [转载] RED-BLACK(红黑)树的实现TreeMap源码阅读

    转载自http://lxy2330.iteye.com/blog/1664786 由于平衡二叉树与红黑树都是二叉排序树,又红黑树是对平衡二叉树的一种改进实现,所以它的很多思想算法都来源于排序二叉或平衡 ...

  6. [转载] Netty教程

    转载自http://blog.csdn.net/kobejayandy/article/details/11493717 先啰嗦两句,如果你还不知道Netty是做什么的能做什么.那可以先简单的搜索了解 ...

  7. [DP]P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome

    题目翻译(借鉴自@ 神犇的蒟蒻) [问题描述] 追踪每头奶牛的去向是一件棘手的任务,为此农夫约翰安装了一套自动系统.他在每头牛身 上安装了一个电子身份标签,当奶牛通过扫描器的时候,系统可以读取奶牛的身 ...

  8. [最短路][模版]P1346 电车

    题目描述 在一个神奇的小镇上有着一个特别的电车网络,它由一些路口和轨道组成,每个路口都连接着若干个轨道,每个轨道都通向一个路口(不排除有的观光轨道转一圈后返回路口的可能).在每个路口,都有一个开关决定 ...

  9. [DFS遍历图]UVA10562 Undraw the Trees

    传送门: 1. UVA - 10562 2. Vjudge [看图写树]     将题目中给出的树改写为 括号表示法 即 (ROOT (SON1(...) (SON2(...)...(SONn(... ...

  10. Centos 安装boost库

    1.在http://www.boost.org/下载boost安装包boost_1_65_1.tar.gz 2.在Centos上解压tar -zxvf  boost_1_65_1.tar.gz后,cd ...