.net core 2.0學習筆記(四):遷移.net framework 工程到.net core

來源:互聯網
上載者:User

標籤:desc   瀏覽器   thread   ati   other   dbnull   lis   raw   nts   

     在遷移.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

.net core 2.0學習筆記(四):遷移.net framework 工程到.net core

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.