日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

分析现有 WPF / Windows Forms 程序能否顺利迁移到 .NET Core 3.0

發布時間:2023/12/4 windows 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分析现有 WPF / Windows Forms 程序能否顺利迁移到 .NET Core 3.0 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今年五月的 Build 大會上,微軟說 .NET Core 3.0 將帶來 WPF / Windows Forms 這些桌面應用的支持。當然,是通過 Windows 兼容包(Windows Compatibility Pack)實現的。為了提前檢查你的程序是否能在未來跑在 .NET Core 3.0 上,微軟在 2018年8月8日 推出了 .NET Core 3.0 Desktop API Analyzer,幫助你提前檢查你的程序能有多容易遷移到 .NET Core 3.0

本文將介紹其使用方法,并介紹 API 的逐步遷移方法。


本文內容
  • .NET Core 3.0 Desktop API Analyzer

  • 分析一個 WPF 程序

  • 分析更復雜的程序

  • 著手解決兼容性問題

  • 一些錯誤

  • 未來的遷移

.NET Core 3.0 Desktop API Analyzer

你可以前往 GitHub 查看 .NET Core 3.0 Desktop API Analyzer 項目:

  • Microsoft/dotnet-apiport-ui

去 release 標簽下即可下載。當然,目前僅發布一個版本,你也可以點擊以下鏈接直接下載:

  • PortabilityAnalyzer.zip

下載完后解壓到任意目錄即可運行。

分析一個 WPF 程序


第一個想到的,是分析目前已在商店發布的基于 .NET Framework 4.7 的 WPF 程序?標識符命名工具 - Whitman。

▲ 分析 WPF 程序

其實這個目錄下只有一點點程序集,所以分析起來很快的。


▲ Whitman 的目錄結構

選好后,點擊?Analyze,在?Analyzing…?提示等待之后,即可在它指定的臨時目錄中找到分析結果文件:

Report saved in: C:\Users\walterlv\AppData\Local\Temp\PortabilityReport.xlsx

竟然是一個 Excel 表格!


▲ Excel 表格表示的結果

可以看到,我的 Whitman 對 .NET Core 3.0 的 API 是 100% 兼容的。將來遷移的時候可以不需要修改代碼。

分析更復雜的程序

我試著分析一個更龐大的 WPF 軟件目錄后,發現還是有一些 API 是不兼容的。


▲ 有一些 API 不兼容


▲ 有一些程序集兼容性很低

這份 Excel 表格中還包含了具體哪些 API 是不兼容的,并為部分使用提供了建議:


▲ 查看不兼容的 API

所以,我們只需要查找對對應 API(第一列)的使用,然后通過其他技術手段將其替換成別的方法來寫即可解決這樣的兼容性問題。

著手解決兼容性問題

比如我們拿出其中一行:

Target typeTarget memberHeader for assembly name entries.NET CoreRecommended changes
T:System.Runtime.Remoting.Messaging.MethodCallMessageWrapperT:System.Runtime.Remoting.Messaging.MethodCallMessageWrapperWalterlv.PlaceholderNot supportedRemove usage.

我們通過在 Walterlv.Placeholder(這只是個占位程序集,實際名稱已隱去)中全解決方案中搜索?MethodCallMessageWrapper?可以找到此 API 的所有使用。

public override IMessage Invoke(IMessage msg){var caller = new MethodCallMessageWrapper((IMethodCallMessage) msg);// 省略其他代碼。}

此方法在此處上下文的目的是實現 AOP 代理,即為了實現切面編程,允許在實體類的每個方法執行之前注入一些代碼。

既然此處基于 .NET Framework?MethodCallMessageWrapper?的 AOP 已不可用,那么我們需要尋找到 .NET Core 中 AOP 的替代品。例如 .NET Core 官方推薦的是:

  • dotnetcore/AspectCore-Framework: AspectCore is an AOP-based cross platform framework for .NET Standard.

于是,我們幾乎需要改造此類型,使其對 .NET Framework 中?MethodCallMessageWrapper?的使用替換成對?AspectCore-Framework?的依賴。

這是一項繁重的工作,不過還是要做的。遷移到 .NET Core 有很多好處,不是嗎?

一些錯誤

額外的,在其他一些程序的分析中,我遇到了一些錯誤。通過混淆的比較,我認為此錯誤可能源于程序集的混淆:

Unable to analyze. Details: Detecting assembly references ? ? ? ? ? ? ? ? ? ? ?[Failed]Cannot locate assembly information for System.Object. Microsoft assemblies found are: Cannot locate assembly information for System.Object. Microsoft assemblies found are: Cannot locate assembly information for System.Object. Microsoft assemblies found are: Cannot locate assembly information for System.Object. Microsoft assemblies found are: Cannot locate assembly information for System.Object. Microsoft assemblies found are: Cannot locate assembly information for System.Object. Microsoft assemblies found are: Cannot locate assembly information for System.Object. Microsoft assemblies found are: Cannot locate assembly information for System.Object. Microsoft assemblies found are:

如果你想了解更多混淆相關的資料,可以閱讀我的另一篇博客:.NET 中各種混淆(Obfuscation)的含義、原理、實際效果和不同級別的差異(使用 SmartAssembly)。

未來的遷移

.NET Core 并不會原生提供 WPF / Windows Forms 這些桌面應用的支持,而是通過 Windows 兼容包(Windows Compatibility Pack)實現。你可以閱讀微軟官方博客了解:

Announcing the Windows Compatibility Pack for .NET Core - .NET Blog

遷移到 .NET Core 并不會為這些程序帶來跨平臺特性,只是能夠充分利用到 .NET Core 帶來的諸多好處而已。比如更高的性能,更方便的部署,及時的更新。當然還有 MIT 開源,我們能夠和社區一起修復 Bug。

關于 .NET Framework 遷移到 .NET Core 的好處,以及 .NET Framework 未來的支持情況,可以閱讀微軟的另一篇博客了解:

Update on .NET Core 3.0 and .NET Framework 4.8 - .NET Blog

原文地址:https://walterlv.com/post/net-core-desktop-api-analyzer.html

.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

總結

以上是生活随笔為你收集整理的分析现有 WPF / Windows Forms 程序能否顺利迁移到 .NET Core 3.0的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。