none
Core與Framework對應 RRS feed

  • 問題

  • 請問一下,那裡有參考資料可以查詢要將Framework的參考轉移到Core的參考的對應資料:

    比方說,Framework中System.Drawing在Core中要用Windows.UI.Xaml.Media取代這種資料(每一個紅線都要去爬文...)

    我用ApiPort他只列出一些符合xx%,沒有更詳細的建議(那個參考要用哪個取代,這邊的語法要改成怎樣...)

    現在龜速轉移程式碼中,有一些一卡就是2-3天...

    尤其是自製控制項

    <EditorBrowsable(EditorBrowsableState.Always)>
    <Browsable(True)> 紅字
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> 紅字
    <Bindable(True)> 紅字

    每個紅字都卡好久

    2017年8月24日 上午 06:18

解答

  • UWP 的專案要等一下,.NET Core 2.0 在 UWP 上的支援還沒有全部完成,要等到今年第四季。

    ASP.NET 要轉 ASP.NET Core,首先要看是不是 Web Forms,如果是就不用想了,因為 ASP.NET Core 沒有實作 Web Forms,若是 MVC, Web API 才有機會,SignalR 也是要等一等,等到 3.0 (base on ASP.NET Core) 才有機會。

    一般的 Framework 使用就要用 apiport 來檢測是否有相容的 .NET Core 的 package。

    ADO.NET 原則上相容性會高一點,但 OLE DB 的相容性可能要測,SQL Server (SqlClient) 是最高的。

    Entity Framework 可能會面臨 API 更改,而且 Entity Framework Core 不支援 Model First, Database First 等模式 (只支援 Code First)。


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2017年8月24日 上午 08:57
    版主
  • ???

    2017年8月24日 下午 01:35
  • 這種一行一行的轉移,怪怪的。

    以官方說明,目前 .NET Standard 2.0 也才 70% 的相容性, 那如果某個 Method, Property 等沒推出對應的 API,怎麼辦?

    或換個說法,ApiPort 未達 100% 之前應,沒對應的 API 你要怎麼處理?

    你也可以到 https://github.com/dotnet/standard 提需求,看官方會不會出類似你需求的 API 文件


    理直氣和,切記。

    個人


    • 已編輯 KKBruceMVP 2017年8月24日 上午 07:33 增加內容
    • 已標示為解答 璉璉Moderator 2017年9月2日 上午 04:49
    2017年8月24日 上午 07:27
  • 目前 UWP 用的 .NET Core 是 1.x,如果不急的話可以等到 .NET Core 2.0 的 UWP 出來再移植。

    .NET Core 和 .NET Framework 在 API 實作的差異很大,要零修改移植是不可能的,微軟也不會開發一組工具來自動改你的程式 (如果改壞了是不是又要罵微軟...),所以基本上是要自己去移植。

    .NET Core Roadmap: https://github.com/dotnet/core/blob/master/roadmap.md


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2017年8月24日 下午 12:13
    版主

所有回覆

  • 這種一行一行的轉移,怪怪的。

    以官方說明,目前 .NET Standard 2.0 也才 70% 的相容性, 那如果某個 Method, Property 等沒推出對應的 API,怎麼辦?

    或換個說法,ApiPort 未達 100% 之前應,沒對應的 API 你要怎麼處理?

    你也可以到 https://github.com/dotnet/standard 提需求,看官方會不會出類似你需求的 API 文件


    理直氣和,切記。

    個人


    • 已編輯 KKBruceMVP 2017年8月24日 上午 07:33 增加內容
    • 已標示為解答 璉璉Moderator 2017年9月2日 上午 04:49
    2017年8月24日 上午 07:27
  • 您可以考慮使用API Portability Analyzer tool這個工具, 會有一點幫助
    2017年8月24日 上午 08:51
  • UWP 的專案要等一下,.NET Core 2.0 在 UWP 上的支援還沒有全部完成,要等到今年第四季。

    ASP.NET 要轉 ASP.NET Core,首先要看是不是 Web Forms,如果是就不用想了,因為 ASP.NET Core 沒有實作 Web Forms,若是 MVC, Web API 才有機會,SignalR 也是要等一等,等到 3.0 (base on ASP.NET Core) 才有機會。

    一般的 Framework 使用就要用 apiport 來檢測是否有相容的 .NET Core 的 package。

    ADO.NET 原則上相容性會高一點,但 OLE DB 的相容性可能要測,SQL Server (SqlClient) 是最高的。

    Entity Framework 可能會面臨 API 更改,而且 Entity Framework Core 不支援 Model First, Database First 等模式 (只支援 Code First)。


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2017年8月24日 上午 08:57
    版主
  • 其實我本來想說,VS能不能像2012->2015->2017,只要匯入專案就可以由framework轉移到core並提示那邊需要修改,看來我還是天真了!

    所以我現在開始把專案移植到UWP還是太早嗎? 原本想要利用UWP比較漂亮與手持裝置相似的界面來重新打造專案,雖然底子不變,但是UI與UX的體驗就會讓使用者有差,看來我還是得繼續等下去囉。

    不過還是感謝各位先進的解答。

    2017年8月24日 上午 11:55
  • 目前 UWP 用的 .NET Core 是 1.x,如果不急的話可以等到 .NET Core 2.0 的 UWP 出來再移植。

    .NET Core 和 .NET Framework 在 API 實作的差異很大,要零修改移植是不可能的,微軟也不會開發一組工具來自動改你的程式 (如果改壞了是不是又要罵微軟...),所以基本上是要自己去移植。

    .NET Core Roadmap: https://github.com/dotnet/core/blob/master/roadmap.md


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2017年8月24日 下午 12:13
    版主
  • ???

    2017年8月24日 下午 01:35
  • 3. UWP对UI无响应的问题是非常敏感的,比如不能在UI线程里用Sleep这样阻塞线程的东西。因此就算API全能对应上也不等于你原有的代码就都能用。

    4. UWP里有权限要求,比如不能用路径去操作文件等等,因此很多代码肯定是要重写的。

    5. UWP提供的API很多都是异步的(async),许多同步的东西是不允许用的,除非你当前的程序是纯DirectX程序,否则不只是代码要重写,就连思路都要有很大的转变才行。

    请看这个链接:https://msdn.microsoft.com/zh-tw/library/system.drawing(v=vs.110).aspx

    这里很清楚的说了System.Drawing命名空间中的所有功能都是GDI+功能,GDI+是CPU绘图,这在移动设备上是根本用不了的。因此UWP完全不支持任何GDI+功能,也不允许使用GDI+。这个就算你等到Core 100.0出来也没用。

    2. UWP里所有涉及到UI的东西都在Windows.UI这个命名空间里,这些COM组件是所有语言通用的,WinForm、WPF里面与UI有关的那些东西在UWP里都是用不了的,即使出了Core 2.0也一样用不了,凡是与UI相关的必须用Windows.UI这个命名空间里提供的。

    我現在就是常常卡在UI的移植上,因為我使用大量的自製Control來撰寫專案的UI(Windows標準的Control,嗯嗯...),所以現在移植上遇到很大阻礙,尤其Controls牽涉到GDI+(要繪製Chart),更是完全無法動彈。

    其實我需要的是一些移植範例,比方說,當你卡在要繪圖,比方說畫格線

            ' 繪製直格線
            For I As Integer = Me.rctChart.Left To Me.rctChart.Right Step 10
                G.DrawLine(Me.penGrid, New Point(I, Me.rctChart.Top), New Point(I, Me.rctChart.Bottom))
            Next

            ' 繪製橫格線
            For I As Integer = Me.rctChart.Top To Me.rctChart.Bottom Step 10
                G.DrawLine(Me.penGrid, New Point(Me.rctChart.Left, I), New Point(Me.rctChart.Right, I))
            Next

            ' 繪製框線
            G.DrawRectangle(Me.penShadow, Me.rctChart)
            G.DrawRectangle(Me.penFrame, Me.rctChart)

    有沒有一些範例說,這在Core要怎麼改才可以,微軟製作的Video UWP介紹都是概念,那個早懂了,我需要移植的範例呀

    2017年8月26日 上午 01:31
  • >>這種一行一行的轉移,怪怪的。

    以官方說明,目前 .NET Standard 2.0 也才 70% 的相容性, 那如果某個 Method, Property 等沒推出對應的 API,怎麼辦?

    或換個說法,ApiPort 未達 100% 之前應,沒對應的 API 你要怎麼處理?

    A: 至少要有文件跟我說,這API目前UWP沒有,我也能針對這部分去思考怎麼撰寫自製的API,要移植就是希望有文件可以指出,這個API在UWP已經有了,可以用什麼來取代,節省轉移的時間,沒有的再來想辦法,而不是像現在遇到紅字完全毫無頭緒,要四處去爬文(還不見得有解答)。
    2017年8月26日 上午 01:37
  • 我的移植經驗是.....沒有最快的方法(相信我),你只能靠手工。(本身有過非常多移植痛苦和經驗的淺見)

    你只要思考,你有看過有用C#去轉C++或Java,可以很順利的轉換的例子嗎?(我想應該是沒有)也沒有人會是願意去做可以參考相對應的文件(連微軟本身都不會做這件事)

    要說最快,就是真的只能當遇到對應的參考,查詢用法的文件,透過Search的方式一次大量取代,然後在把程式會出現錯誤地方去修改(這當然是建立在你本身對自已寫的語法很了解,架構也很熟的情況下)(這時候註解就可以顯示你對註解有沒有偷懶,和註解的重要性,還有有沒有習慣建立系統架構文件可以參考),然後剩下的就是只能細部的修改。
















    2017年8月26日 上午 01:40
  • 這裡只是討論區,我們也只能回答你「沒有」。

    官方在 UWP 方面也還在努力中:UWP & .NET Standard 2.0: A preview is now available!

    你可以到文章下面反應你的需求,我看官方都有認真在回應讀者問題。


    理直氣和,切記。

    個人

    2017年8月28日 上午 01:30
  • 最新版的VS 2017已經把ApiPort變成內建功能,可以啟用"Analyze Project Portability"來分析專案的可攜行性(就是轉到core的相容性),我分析我寫的專案,相容性68%,發現都是一堆UI的問題(Controls, Draw...),但是也只是說那邊有問題,沒有對應的解決方式,當然我知道隨著時間的進行,慢慢地微軟會有解決方案,但是會變成,對於我目前的進行的專案若有需要新的UI、使用者控制項,不相容的程式碼(經過分析已經知道那一部分會有問題)...,會猶豫要不要繼續寫下去(雖然有工作壓力),但是想到萬一有一天,微軟不再支援netframe,全部改用core,那一堆龐大程式碼的移植工作想到就腿軟。目前試著將netframe的使用者控制項一個個轉移到UWP,但是困難重重呀....
    2017年9月10日 上午 03:58
  • 這一天我覺得還要很多很多年後,不然為什麼 Visual Basic 6.0 (runtime) 以及 COM 架構現在還是持續有支援...

    微軟如果真要廢一個平台,一定會好幾年前就有風聲,社群上一定會有些動作和消息,不可能今天講明天就廢了。


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2017年9月10日 上午 07:00
    版主
  • UI 是最難移轉的,因為每個平台對於螢幕繪圖的底層差異很大。

    尤其你們本來是 Windows Forms 控制項要變成 UWP 控制項,這恐怕沒機會。

    因為 WPF (一樣是 DirectX) 出現這麼多年了,還沒聽過這樣的風聲。 


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2017年9月10日 上午 08:51
    版主
  • 其實我也不要求無痛轉移,只是希望有一些現成的官方範例可以參考,比方說在撰寫netframe控制項時,常常用到

    <EditorBrowsable(EditorBrowsableState.Always)>
    <Browsable(True)>
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)>

    這三行用來即時更動編輯模式控制項一些屬性的改動,但是轉移過程中UWP只提示這3個不能用,然後勒? 就沒了,去發問或爬文,竟然都沒人講,我只希望像這樣常用的一些程式碼,微軟能夠提供對應的轉換範例,讓我移植快一點就好,沒要求可以自動化。

    UI或繪圖原理是不成問題的,只是希望有對應的程式碼或解說,就像當初由vb6轉成vb.net,有概念有GDI+的範例,很多程式碼就可以迅速地轉移過來。

    2017年9月11日 上午 03:36
  • https://docs.microsoft.com/zh-tw/windows/uwp/graphics/drawing-shapes

    UWP 繪圖在這


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2017年9月11日 上午 05:53
    版主
  • https://docs.microsoft.com/zh-tw/windows/uwp/graphics/drawing-shapes

    UWP 繪圖在這


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    我也不要逐行轉換,只是要有一個對應的範例,並做解說,像上面的文章我看了以後就明白,在framework裡面所有的繪圖都是交由GD去做,繪製直線,矩形...,都是GD下面的事,在UWP則是直線、矩形...各個要繪圖的東西都一個獨立的類別,你要先New你要繪製的類別出來,並在這個類別上定義出筆刷,繪製物件的大小...,再將他加到你要繪製的桌布上,這樣這個圖就會繪製出來。

    更通俗化的說,GD有點像點陣式繪圖,UWP比較像向量繪圖,這2個的比較,就是這樣而已。

    這比較2者差異,並列出程式碼(比方說,在GDI+你這樣做,在UWP則要這樣做)

    所以參考上面,我了解後,就可以馬上將原來GDI+繪圖轉換成UWP繪圖,並不是要逐行轉換呀,這樣比較,我覺得對於由framework轉移到core的programmer,能夠更快的上手。

    上面我提的程式碼:

           ' 繪製直格線
            For I As Integer = Me.rctChart.Left To Me.rctChart.Right Step 10
                G.DrawLine(Me.penGrid, New Point(I, Me.rctChart.Top), New Point(I, Me.rctChart.Bottom))
            Next

            ' 繪製橫格線
            For I As Integer = Me.rctChart.Top To Me.rctChart.Bottom Step 10
                G.DrawLine(Me.penGrid, New Point(Me.rctChart.Left, I), New Point(Me.rctChart.Right, I))
            Next

            ' 繪製框線
            G.DrawRectangle(Me.penShadow, Me.rctChart)
            G.DrawRectangle(Me.penFrame, Me.rctChart)

    不就是

           '  繪製直格線=產生直線class+定義直線起始點、長度....

            ' 繪製橫格線=產生直線class+定義直線起始點、長度...

            ' 繪製框線=產生矩形class+定義矩形內容....

            ' 將上面產生的class全部都加入桌布中

    不過,我要畫20條線就要產生20個class,有點...


    2017年9月12日 下午 04:48
  • 在物件導向的世界,什麼都是物件,這有什麼好奇怪的...

    如果不想手動產生那麼多物件,可以自己實作一個 factory 或 flyweight pattern 的實作去解決這個問題。

    當然你也可以回到 C... 就沒有物件了。

    PS: 就算真的有那種表,也不可能做到 "真正了解" (了解 why),只是讓你知道參數和用法的差異 (了解 what)。


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2017年9月13日 上午 12:01
    版主
  • 感謝您的說明,我也成功地轉換一段我目前繪圖的程式碼到UWP,接下來應該可以解決很多UWP上繪圖的問題,說實在的,沒人介紹,我去翻官方的Step by Step UWP的寫作範例,根本不知道有這個東西。

    我在這邊問一堆問題,只是缺實作的範例轉換,不是因為缺乏觀念,因為我也寫過Andriod App.

    另外,我相信很多Programmer目前也應該在嘗試轉移netframe到UWP,但是不是為了要寫手持裝置的App,只是希望把傳統的Windows 桌面App轉換成UWP App,能在Windows上面跑就好(其實是看上他的介面設計),我遇過幾個大多是在做這個準備,工作需求並不要求他們做手持裝置App(未來不知道),但是想轉換過去幾乎都是共識。

    反正現在也是慢慢做,但是在撰寫對應的UI時發現,有些傳統桌面的標準Control在UWP上面卻沒有,像NumbericUpDown控制像卻找不到,想再問一下,目前UWP上的控制項是不是還沒完全對應到傳統桌面的Control. 要去哪邊查?

    2017年9月15日 上午 08:55
  • WPF/UWP 這一類的 UI 其實很容易變化及組合,所以通常我們都是自己改 Control Template 來做自己想要的東西 (當然你也可以用 UserControl 來做)。

    比方這麼說好了,在 Windows Forms,Button 大概你能改的就是外觀,例如顏色,尺寸,顯示的字串內容等等。

    但在 WPF/UWP 這是很不一樣的東西,你可以在 Botton 裡面包裹其他的 UI 控制項,舉個離譜的例子,可以在 Button 裡包一個兩行兩列的 Grid, Grid 的每個格子裡又包上個 Button.

    或者,你也可以用一些第三方套件,如 winrtxamltoolkit 我記得這裡面就有 NumericUpDown


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。



    2017年9月15日 上午 09:09
    版主
  • 我是可以自己寫看看,但是怕寫一寫微軟在新版就包進去,像navigation控制像目前沒有,但是目前測試版就已經寫進去(我寫了一個這個的使用者控制項....%X@),以前也常常發生這個情況,然後微軟又修改一些東西,變得每次改動一些控制項就要再跟著改,最後就放棄維護,改用微軟官方類似功能的控制項了。

    我先去調用winrtxamltoolkit看看裡面有什麼控制項,謝謝!


    2017年9月15日 上午 10:50
  • 去NuGet要調用winrtxamltoolkit套件,出現數個選項:

    安裝第一個選項,沒有任何變化,安裝WinRTXamlToolKit.UWP,在專案參考中出現WinRTXamlToolKit.UWP,但是想要在工具箱裡面增加這些控制項方便做設計,但是卻找不到,請問我該怎麼做(在framework只要在NuGet新增套件,可以在工具箱->選擇項目中加入這些控制項)?

    2017年9月16日 上午 12:19
  • 檔案位置 c:\Users\%USERNAME%\.nuget\packages\winrtxamltoolkit\2.3.0\lib\uap10.0\WinRTXamlToolkit.dll


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2017年9月16日 上午 06:28
    版主