.net core 2.0学习笔记(四):迁移.net framework 工程到.net core
2017-08-23 15:49
253 查看
在迁移.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
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
相关文章推荐
- .net core 2.0学习笔记(四):迁移.net framework 工程到.net core
- .net core 2.0学习笔记(四):迁移.net framework 工程到.net core
- .net core 2.0学习笔记(三):度量.net framework 迁移到.net core的工作量
- 迁移.net framework 工程到.net core
- 在Visual Studio中将现有.NET Framework项目迁移至.NET Core 1.1 Preview 1
- 在Visual Studio中将现有.NET Framework项目迁移至.NET Core 1.1 Preview 1
- 度量.net framework 迁移到.net core的工作量
- 关于Android工程从eclipse迁移至android studio的过程
- 给外行或者刚入门普及一下关于C#,.NET Framework(.NET框架),.Net,CLR,ASP,ASP.Net, VS,以及.NET Core的概念
- IOS开发证书问题和SVN工程迁移环境问题
- 在.NET Core类库中使用EF Core迁移数据库到SQL Server的方法
- XAudio2学习七之工程迁移错误
- VC6工程迁移到VC2008 SP1中,使用MFC 9.0静态链接后运行错误的解决办法
- Linux开源模块迁移概述暨交叉编译跨平台移植总结--从《嵌入式Linux驱动模板简洁和工程实践》
- .net core 2.0学习笔记(一):开发运行环境搭建
- .NET Core 2.0迁移小技巧之web.config 配置文件示例详解
- 一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移
- 一起学ASP.NET Core 2.0学习笔记(二)- ef core2.0 及mysql provider 、Fluent API相关配置及迁移
- 一篇很好的解释了.Net Core, .Net Framework, .Net standard library, Xamarin 之间关系的文章 (转载)
- Vs工程高版本向低版本迁移