.net core 2.0学习笔记(四):迁移.net framework 工程到.net core

在迁移.net core的过程中,第一步就是要把.net framework 工程的目标框架改为.net core2.0,但是官网却没有提供转换工具,需要我们自己动手完成了。.net framework 工程迁移为.net core工程大体上有两种方案:

1.创建一个.net core的工程,然后把所有的文件挪过去。这是比较笨的一种办法,如果工程比较小,还好弄。如果有几百工程,那就哭了。

2.通过编辑.csproj文件,强制把工程迁移到.net core下。

今天给大家分享的就是,如何通过修改.csproj文件的方式,把.net framework 工程迁移到.net core下。

步骤一:通过VS2017打开.net framework 解决方案,卸载指定的项目后,打开.csproj文件。

步骤二:移除两个 import引用

步骤三:移除 Release、Debug编译的配置信息

步骤四:修改 Project节点属性:

<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

替换为:

<Project Sdk="Microsoft.NET.Sdk">

步骤五:移除TargetFrameworkVersion信息,增加信息:<TargetFramework>netcoreapp2.0</TargetFramework>

步骤六:重新加载项目

步骤七:在已经加载的 .net core项目上,继续编辑csproj文件。

步骤八:移除文件列表信息。

步骤九:移除AssemblyInfo.cs文件。

步骤十:移除.net framework工程中隐藏的文件。因为.net core 工程不支持排除文件,所以在完成上述迁移后,原来隐藏的文件会自动添加到工程中,对这些垃圾文件,请识别后,手工删除即可。

步骤十一:重新添加nuget包引用。.net framework 对nuget包的引用信息是存储到packages.config中的。此文件已经在.net core中移除。请根据packages.config信息,在项目中重新添加nuget引用。引用信息将会自动添加到csproj文件中。

步骤十二:编译工程。说一下,很多.net framework的API在.net core中已经没有了,正在迁移前,请看一下下面的.net core的资料。

======================================

1. 不支持序列化和xml操作

*(需要:Install-Package System.Xml.XmlDocument , Install-Package System.Runtime.Serialization.Formatters -Pre, Install-Package System.Xml.XmlSerializer)

* XmlDocument

* XmlIgnore

* Serializable

* XmlNode

* BinaryFormatter

* SoapFormatter

* InflaterInputStream

* DataContractSerializer (Install-Package System.Runtime.Serialization.Xml)

* DataContractJsonSerializer(Install-Package System.Runtime.Serialization.Json)

2. 部分反射需要改造, you need to reference the following:

* System.Reflection

* System.Reflection.Primitives

* System.Reflection.Extensions

* System.Reflection.TypeExtensions

* If you need IL generation then add System.Reflection.Emit andSystem.Reflection.Emit.ILGeneration

* 比如Type.GetProperties()要改为Type.GetTypeInfo().GetProperties()

* 不支持Assembly.GetExecutingAssembly() https://forums.asp.net/t/2001385.aspx

3. Tasks and Threading and async/await are available, but you will have to reference the following:

* System.Threading.Thread

* System.Threading.Tasks

4. Sockets are available but you need to reference the following:

* System.Net.Sockets.

* System.Net.Security if you want SslStream.

* Also, socket.Close() is now socket.Dispose()

5. Remoting,It‘s used for cross-AppDomain communication, which is no longer supported. Also, Remoting requires runtime support, which is expensive to maintain.

6. Async is supported (see above point) but the older IAsyncResult-based async is not supported. You will have to disable those sections using #if tags or upgrade to async/await.

7. Serialization by converting data to and from Binary is unsupported, but XML, and JSON serialization is. (see System.Runtime.Serialization.Xml and System.Runtime.Serialization.Json)

8. Crypto is available but many classes are renamed and refactored, for eg. new SHA1CryptoServiceProvider() is now SHA256.Create().

9. StackTrace is available but you need the extra System.Diagnostics.StackTrace, so if its not essential you may want to remove from your code rather than add an additional dependency

10. XAML is unsupported but if you are targeting UWP you will have to use the Windows RT XAML APIs.

11. 不支持部分对象:

* ArrayList

* Hashtable

* HybridDictionary

* BindingList

* Thread(Install-Package System.Threading.Thread)

* Process(Install-Package System.Diagnostics.Process)

* HttpContext

* AppDomain

* DataSet / DataTable / DBNull。DataTable and DataSet is not available in the System.Data namespace but other features like the provider model and SQL client are available.

12. 注册表无法访问

* RegistryKey

13. 不支持相关配置对象:

* ConfigurationManager

* WebConfigurationManager

* ConfigurationSection

14. 不支持绘图

* System.Drawing

* System.Drawing.Size

15. 无法使用相关Web对象

*System.Web.HttpUtility.HtmlDecode

16. 很多Stream没有了Close()方法,直接替换为Dispose()

17. DateTime.Now.ToShortDateString() 替换为 DateTime.Now.ToString("yyyy-MM-dd")

18. 不支持部分Attribute

* DescriptionAttribute

19. WebResponse/WebRequest对象有变化

* 不支持:httpWebResponse.ContentEncoding,无法识别是否响应加了GZip,也或许能自动识别

* 不支持:httpWebRequest.Referer / .UserAgent 无法设置请求浏览器和来源地址

20. Some key missing components: (source)

* System.AppDomain - App Domains

* System.Drawing.Image - Graphics, Bitmap Images

* System.DirectoryServices - LDAP, Active Directory

* System.Transactions - ambient transactions, distributed transactions

* System.Xml.Xsl - XSLT

* System.Xml.Schema - XSD

* System.Net.Mail - Sending Email

* System.Runtime.Remoting - Remoting, RPC

* System.Runtime.Serialization.Xml - Binary Serialization

* System.IO.Ports - Serial Port

* System.Workflow - Windows Workflow Foundation

时间: 2024-10-08 04:10:36

.net core 2.0学习笔记(四):迁移.net framework 工程到.net core的相关文章

一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移

不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.supervisor.mysql环境搭建搭建好了.net core linux的相关环境,今天就来说说ef core相关的配置及迁移: 简介: Entity Framework(以下简称EF) 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,EF Core是Entity

一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx、supervisor、mysql环境搭建

作为.neter,看到.net core 2.0的正式发布,心里是有点小激动的,迫不及待的体验了一把,发现速度确实是快了很多,其中也遇到一些小问题,所以整理了一些学习笔记: 阅读目录 环境说明 安装CentOS7 安装.NET Core SDK for CentOS7 搭建ftp服务器 安装mysql 部署ASP.NET Core应用程序 配置Nginx 配置守护服务(Supervisor) 环境说明 服务器系统:CentOS 7.3 64位 相关工具:putty.Xftp 服务器软件软件:.n

.net core 2.0学习笔记(一):开发运行环境搭建

期待已久的.net core 2.0终于发布了!大家等的花儿都谢了. 不过比预期提前了一个多月,这在微软历史上还真的不多见.按照历史经验看,2.0版本应该比较靠谱,我猜这也是社区非常火爆的原因吧.下面就简单分享一下.net core2.0开发运行环境的搭建过程..net core 理论知识在此就不赘述了,不了解的可以参考:https://docs.microsoft.com/zh-cn/dotnet/core/ .https://msdn.microsoft.com/zh-cn/magazine

.net core 2.0学习笔记(六):Remoting核心类库RealProxy迁移

在学习.net core的过程中,我们已经明确被告知,Remoting将不会被支持.官方的解释是,.net framework 类型包含了太多的Runtime的内容,是一个非常重量级的服务实现,已被确定为一项有问题的体系结构.说白了就是迁移的难度很大,.net core中直接不提供了.微软的建议是,如果是进程内或跨进程通讯,建议我们使用 Pipes或者内存映射文件(Memory Mapped Files).如果是机器间的调用,建议我们采用网络通讯的方案,比如HTTP.WCF等. 好吧,既然微软官

.net core 2.0学习记录(一):搭建一个.Net Core网站项目

.Net Core开发可以使用Visual Studio 2017或者Visual Studio Code,下面使用Visual Studio 2017搭建一个.net Core MVC网站项目. 一.新建项目 二.选择 Web应用程序(模型视图控制器) 三.项目结构和之前的比对还是有很大的不同,wwwroot用来存放前端的一些静态资源(css/js/image),以前是通过Nuget来下载前后端包,现在前端包使用Bower下载,后端的包的使用Nuget下载 四.运行 .net core项目调试

初探swift语言的学习笔记四(类对象,函数)

作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/29606137 转载请注明出处 假设认为文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢! swift扩展了非常多功能和属性,有些也比較奇P.仅仅有慢慢学习,通过经验慢慢总结了. 以下将初步学习一下类的写法. 码工,最大爱好就是看码,而不是文字,太枯燥. // // computer.swift // swiftDemo // // C

Linux学习笔记四:Linux的文件搜索命令

1.文件搜索命令  which 语法:which [命令名称] 范例:$which ls  列出ls命令所在目录 [[email protected] ~]$ which ls alias ls='ls --color=auto' /bin/ls 另外一个命令:whereis [名称名称],也可以列出命令所在目录. [[email protected] ~]$ whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/ma

小猪的数据结构学习笔记(四)

小猪的数据结构学习笔记(四) 线性表之静态链表 --转载请注明出处:coder-pig 本章引言: 在二,三中中我们分别学习了顺序表中的线性表与单链表,线性表有点类似于 我们前面所学的数组,而单链表使用的最多的是指针,这里问个简单的问题, 如果是在以前没有指针的话,前辈先人们怎么实现单链表呢?大家思考下! 没有指针,那么用什么来代替呢?前辈先人们非常机智,想出了使用下标+游标的方式 来实现单链表的效果!也就是今天要讲的--静态链表! 当然你也可以直接跳过本章,因为有了单链表就没有必要用静态链表了

NLTK学习笔记(四):自然语言处理的一些算法研究

自然语言处理中算法设计有两大部分:分而治之 和 转化 思想.一个是将大问题简化为小问题,另一个是将问题抽象化,向向已知转化.前者的例子:归并排序:后者的例子:判断相邻元素是否相同(与排序). 这次总结的自然语言中常用的一些基本算法,算是入个门了. 递归 使用递归速度上会受影响,但是便于理解算法深层嵌套对象.而一些函数式编程语言会将尾递归优化为迭代. 如果要计算n个词有多少种组合方式?按照阶乘定义:n! = n*(n-1)*...*1 def func(wordlist): length = le