迁移Net项目为Net Core\Standard项目

背景
我们公司内部有自己ORM开发框架,最新因为需要将系统迁移到国产服务器上,所以首先需要将最基础的ORM框架改造可以运行在国产服务器上。对于我们Net来说,优选Net Core。在迁移的过程中,将一些经验和坑记录下来,帮助自己记忆同时也给有同样需求的Net朋友一些帮助。

原始项目 Beyonbit.Framework 预览

640?wx_fmt=png&wxfrom=5&wx_lazy=1

看上图的当前项目,为我们的ORM框架。本次迁移主要将Beyondbit.Framework项目从Net Framework 3.5 迁移为 Net Core\Standard 2.0。

新建一个Net Standard 类库为Beyonbit.Framework

新建的步骤很简单,就不截图说明。

为什么创建一个项目,而不是将现在的项目升级

几点考虑:

  1. 当前类库是一个非常稳定的类库

  2. 这个类库是一个历史类库,有非常多的功能,并且我不知道所有的功能

  3. 在将这个类库升级成功前,这个类库需要继续提供给Net Framework 项目使用

  4. 类库升级成功后,很有可能比不稳定,在稳定的这段期间,依然需要稳定的类库给Net Framework 使用

  5. 为什么不重新复制一份代码,在这个复制的代码上改造?当然首先我会建立一个分支。同时,基于以上原因,我希望的是同一份代码可以编译出Net Framework和Net Core\Standard类库

可以看看微软的建议《组织项目以支持 .NET Framework 和 .NET Core》

Net Standard和Net Core的关系

简单来将 Net Standard就是以前微软的共享类库的升级版,dll可以运行在WPF、ASP.NET、WinFrom、Silverlight、UWP的类库。
而Net Core生成的类库,依然只能运行在NetCore运行时上。
这个了解共享类库的概念会很好理解,不了解的话,可以看看其他同学写的文章。
linezero同学的《.NET Core 2.0及.NET Standard 2.0》
或微软的文章《.Net Core, .Net Framework, .Net standard library, Xamarin 之间关系》

移植现有代码到Net Core上

项目创建好了,如何将现在的类文件迁移到新项目上呢。可能有以下方案:

  1. 把所有文件复制到新项目上

  2. 把所有文件用快捷方式的办法添加到新项目上

在迁移这方面可以看看凌晨三点半同学的文章《迁移.net framework 工程到.net core》和《度量.net framework 迁移到.net core的工作量》

不过我的做法和凌晨三点半同学的不一样。我是在参看log4net的开源代码时,看到的思路,借鉴了这个更简单的方法。

使用文本编辑器打开新建项目的.csproj文件

我的项目内容如下:

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>netstandard2.0</TargetFramework></PropertyGroup></Project>

在文件中添加一下代码:

   <ItemGroup><Compile Include="..\..\Beyondbit.Framework\**\*.cs" /></ItemGroup>

这句代码的意思是,将Beyondbit.Framework目录下的所有文件和目录都用快捷方式包含到项目中。
效果如下:

640?wx_fmt=png

可以看到新项目的文件和老项目的文件是一模一样的,并且图标可以看出是快捷方式添加的。


Build 当前项目

项目已经迁移OK了,我们可以Build一下项目,然后将所有错误消灭。
我的项目编译结果如下:

640?wx_fmt=png

总共有60个错误。最后调整发现不止60个错误,当这60个错误处理后,再编译,产生了新的错误,加起来有100个错误左右。

总结
迁移第一步工作结束,后续第二部的工作是来消灭错误,第三部是迁移单元测试和集成测试项目,以及最终的多个平台运行的测试。

原文地址 :http://www.cnblogs.com/xakoy/p/8880206.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2-sat模板- 输出可行解

自己写的代码 using namespace std; const int maxn 1e6; int head[maxn]; int DFN[maxn],LOW[maxn],stk[maxn],visit[maxn],belong[maxn]; vector<int> scc[maxn]; int tot,idx,cnt,sccnum; int n,color[maxn],degree[maxn],pos[maxn]; struct Es{ int v; int next; in…

读从电子到产品

1、用户的量不重要&#xff0c;质更重要&#xff0c;要让用户真正跟你的产品产生很强大的关系&#xff0c;要看解决问是不是够好、够快、够准&#xff0c;在解决问题的时候&#xff0c;要保证产品真正能满足用户的需求。 2、你认为的问题&#xff0c;别人未必觉得是问题&#…

迁移后的Net Standard版本的类库测试和多平台项目实测

按照第一步的方法&#xff0c;添加一个Net Core的MSTest项目&#xff0c;然后将原来的测试项目下的代码迁移到新测试 项目中&#xff0c;然后引用新的Beyondbit.Framework Core类库。然后运行单元测试项目和集成测试项目即可。测试当中单元测试下项目没有问题&#xff0c;一遍就…

【深搜】01串

01串 Description 用n个0和n个1排成一个2n位的二进制数,要求从最高位起到任意一位,0的个数不能少于1的个数。编程求出所有符合条件的2n位二进制数。 如n&#xff13;时&#xff0c;符合条件的共有5个&#xff1a; &#xff10;&#xff10;&#xff10;&#xff11;&#x…

poj3648 Wedding 2-sat

题目链接&#xff1a; 题目 建图&#xff1a; 1.新娘向新郎连边&#xff0c;表示选取的时候选取新娘对面的。 2. 有奸情的人比如是 xh yh那么连边(x,yn)以及(y,xn) 如果是xh yw 那么连边(x,y) 以及 (yn,x) 如果是xw yh 那么连边(xn,yn)以及(y,x) 如果是xw yw那么连边(x…

P3573-[POI2014]RAJ-Rally【拓扑排序,二分+树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/P3573 题目大意 nnn个点mmm条边的DAGDAGDAG&#xff0c;删掉一个点使得最长路最短。 解题思路 先跑一遍拓扑排序 dsids_idsi​表示以iii结尾的最长路&#xff0c;dtidt_idti​表示以iii开头的最长路&#xff0c;用拓扑序dp可…

读上瘾-让用户养成习惯

1、凡是成功的创新都有一个共性&#xff1a;能够解决问题&#xff0c;看似明确&#xff0c;实则复杂&#xff0c;因为人们总是对新产品应该解决何种问题各执一词。 3、产品不只是满足功能&#xff0c;还要反映人性。好的产品是一件作品&#xff0c;好的技术几近于艺术&#xf…

.Net Core小技巧 - 使用Swagger上传文件

前言随着前后端分离开发模式的普及&#xff0c;后端人员更多是编写服务端API接口。调用接口实现文件上传是一个常见的功能&#xff0c;同时也需要一个选择文件上传的界面&#xff0c;可以编写前端界面上传&#xff0c;可以使用Postman、curl来模拟上传请求。上述的方式多多少少…

【动态规划】数字金字塔

数字金字塔 Description 考虑在下面被显示的数字金字塔。 写一个程序来计算从最高点开始在底部任意处结束的路径经过数字的和的最大。 每一步可以走到左下方的点也可以到达右下方的点。 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 在上面的样例中,从7 到 3 到 8 到 7 到 5 的路径…

读极致产品

1、极致产品 用户的痛点&#xff0c;项目的需求是什么&#xff1f;准确吗&#xff1f;是不是真需求&#xff1f;如何抓住用户的真需求&#xff0c;如何深入用户需求做产品。要站在用户的角度思考问题&#xff0c;了解用户的刚需、痛点。商业的本质是让人性得到释放&#xff0c;…

P4555-[国家集训队]最长双回文串【Manacher】

正题 题目链接:https://www.luogu.com.cn/problem/P4555 题目大意 长度为nnn的串&#xff0c;双回文串的定义是两个连续的回文串&#xff0c;求最长的双回文串。 解题思路 我们用马拉车维护pip_ipi​的时候维护一个lil_ili​和rir_iri​。 li:l_i:li​:以iii开头的最长回文串…

容器化分布式日志组件ExceptionLess的Angular前端UI

写在前面随着微服务架构的流行&#xff0c;日志也需要由专门的分布式日志组件来完成这个工作&#xff0c;我们项目使用的是 ExceptionLess 这个组件&#xff0c;它是前后端分离的&#xff1b;这篇文章我们就来实践容器化 ExceptionLess 的前端&#xff0c;并为其包含一个 nginx…

读人人都是产品经理__1

1、产品经理 设计产品的一大准则就是无需阅读说明书就能上手&#xff0c;如何让用户用起来更加省心是产品改进的方向&#xff0c;产品就是用来解决某个问题的东西&#xff0c;产品可以是有形的实物&#xff0c;也可以是无形的服务。只有能解决问题&#xff0c;产品才能有价值。…

【动态规划】最小代价问题

最小代价问题 Description 设有一个nm(小于100)的方格&#xff08;如图所示&#xff09;&#xff0c;在方格中去掉某些点&#xff0c;方格中的数字代表距离&#xff08;为小于100的数&#xff0c;如果为0表示去掉的点&#xff09;&#xff0c;试找出一条从A(左上角)到B&#…

jzoj3859-孤独一生【dp,树状数组】

正题 题目链接:https://jzoj.net/senior/#main/show/3859 题目大意 nnn个台阶&#xff0c;第iii个高度为hih_ihi​&#xff0c;把它分为两个集合&#xff0c;使得两个集合中相邻的hih_ihi​差值和最小。 解题思路 设fif_ifi​表示刚好处理到iii且目前集合开头是iii的最小差值…

EF 6.x、EF Core实现dynamic动态查询和EF Core实现多个上下文实例池你了解多少?

前言很长一段时间没有写博客了&#xff0c;今天补上一篇吧&#xff0c;偶尔发现不太愿意写博客了&#xff0c;太耗费时间&#xff0c;不过还是在坚持当中&#xff0c;毕竟或许写出来的东西能帮到一些童鞋吧&#xff0c;接下来我们直奔主题。无论是在在EF 6.x还是EF Core中对于原…

1、play编程基础

1、Action、Controller、Result Action指的是动作&#xff0c;play中大多数请求可以使用action来处理&#xff0c;一个请求对应一个动作也就是一个java方法&#xff0c;然后处理请求返回一个响应&#xff0c;这个响应用Result来体现 Controller就是一个继承了 play.mvc.Contro…

【动态规划】城市交通

城市交通 Description 有n个城市&#xff0c;编号1~n&#xff0c;有些城市之间有路相连&#xff0c;有些则没有&#xff0c;有路则当然有一个距离。现在规定只能从编号小的城市到编号大的城市&#xff0c;问你从编号为1的城市到编号为n的城市之间的最短距离是多少&#xff1f…

AspNetCoreApi 跨域处理(CORS )

如果咱们有处理过MV5 跨域问题这个问题也不大。&#xff08;1&#xff09;为什么会出现跨域问题&#xff1a;浏览器安全限制了前端脚本跨站点的访问资源&#xff0c;所以在调用WebApi 接口时不能成功访问资源&#xff0c;原因“同源策略”的存在&#xff1a;同源指以下几点相同…

【动态规划】求最长不下降序列

求最长不下降序列求最长不下降序列求最长不下降序列 Description 设有n(n<1000)个不相同的整数(小于32767)组成的数列&#xff0c;记为&#xff1a; a1,a2,…,an,其中任意两个数不相同。 例如&#xff1a;3,18,7,14,10,12,23,41,16,24。 若有 且有 。则称为长度为e的不…