將 ASP.NET Core 與較舊的 .Net Framework 程式碼混合使用
我有一些遺留的 .NET 程式碼,我想用 API 進行包裝。
該程式碼是 ASP.NET Webforms 和 .NET Framework 4.0 的混合體
我希望使用新的 ASP.NET Core Web API,並基於此框架創建了一個新的解決方案,並將遺留程式碼添加為現有項目。
一切正常,但是當我嘗試呼叫一些遺留程式碼時,我收到以下錯誤:
System.TypeInitializationException 發生 HResult=0x80131534
消息=“TreeManager”的類型初始化程序引發了異常。
來源=
內部異常 1:FileNotFoundException:無法載入文件或程序集“System.Web.Extensions,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”。該系統找不到指定的文件。
這是我呼叫的程式碼:
TreeManager.LoadEvent += LoadTree; public class TreeManager { ... public static event EventHandler<LoadEventArgs> LoadEvent; ... }我嘗試將舊程式碼更新為 .NET 4.5.2,但得到了同樣的錯誤。
我用一個使用 ASP.NET MVC 4 API 2 的 API 封裝了遺留程式碼,一切都執行良好。
是否可以這樣做,如果可以,我需要進行哪些更改?
首先,您可以選擇以 .NET Core 或帶有 ASP.NET Core 應用程序的完整框架為目標。僅僅因為它是“核心”並不意味著您必須使用 .NET Core。如果您使用的是舊版 API,您可能會被迫在完整的框架上執行。
如果您需要或只是想使用 .NET Core,以便可以在 Windows 環境之外部署應用程序,那麼您需要將任何不受支持的 API 遷移到替代 API,或者在沒有替代 API 的情況下可能重寫功能存在。
.NET Core 2.0 支持 .NET Standard 2.0,它具有非常大的 API 佔用空間。因此,Microsoft 開放了與舊版 .NET Framework 庫和包的兼容性。但是,不能保證您可以充分利用這些庫和包。僅僅因為您可以添加依賴項並不意味著您可以使用所有 API。這很可能是你在這裡遇到的。這組特定的 API 依賴於
System.Web.NET Core,它不是 .NET Core 的一部分。最近,微軟發布了一些工具,讓這樣的遷移場景更容易。首先是.NET API Analyzer,這是一個 NuGet 包,它將 Intellisense 標註添加到與各種目標不兼容的 API 呼叫中。這將幫助您跟踪需要更改的程式碼,並在您編寫新程式碼時提醒您,您需要以不同於您習慣的方式做事。
其次,有適用於 .NET Core 的 Windows 兼容包,這是另一個 NuGet 包,它支持來自完整框架的許多舊的僅限 Windows 的 API。這可以在遷移過程中為您提供一點喘息的空間,如果您需要更改某些內容,則可以減少數量。儘管如此,我們仍然鼓勵您最終也關閉此程式碼,最終讓您的應用程序完全擺脫依賴。
最後,如果這些都沒有幫助,您可能只需要找到一個替代方案。這可能需要安裝第三方 NuGet 並重寫一些程式碼來使用它,而不是你以前使用的。
沒有人聲稱遷移很容易。這總是一場艱苦的戰鬥。如果您現在沒有足夠的頻寬來做這件事,只需瞄準完整的框架並收工。否則,請盡可能深入並解決它。