新的項目我們想用ASP.NET Core來開發,但是苦於我們歷史的遺產很多,比如《使用 JavaScriptService 在.NET Core 里實現DES加密演算法》,我們要估計等到.NET Core 1.2我們才會有大部分的API,通過NodeJs方式有點曲線救國的味道,很多人會不認同,如果要在 ...
新的項目我們想用ASP.NET Core來開發,但是苦於我們歷史的遺產很多,比如《使用 JavaScriptService 在.NET Core 里實現DES加密演算法》,我們要估計等到.NET Core 1.2我們才會有大部分的API,通過NodeJs方式有點曲線救國的味道,很多人會不認同,如果要在純的.NET Core下運行我們的ASP.NET Core項目,在特定的時間進度內很難辦到,不僅僅我們所依賴的一些API還沒有,還有我們大量的.NET Framwork的庫還來不及遷移到.NET Standard 相容。本文就是向你介紹如何在我們的.NET Framework 4.5以上的環境下跑我們的ASP.NET Core項目,讓我們跟上.NET Core的發展步伐。
Scott hanselman 寫了一篇文章《How to reference an existing .NET Framework Project in an ASP.NET Core 1.0 Web App》向我們介紹瞭如何.NET Framework 4.5以上的環境下跑我們的ASP.NET Core項目。這篇文章里有一張圖解釋了這麼做的原理:
.NET 4.5以上的版本和.NET Core的底層的編譯器和運行時都是一樣的,ASP.NET Core 1.0也可以跑在NET Framework 4.6上,我們通過Visual Studio 2015 Update 3創建一個Web項目的時候有一個模板:
我們上面看到了3個ASP.NET Web項目類型:
- ASP.NET Web 應用程式。這就是 4.6版本的 ASP.NET MVC 與 Web API。它在.NET 框架上運行。
- ASP.NET Core Web應用程式在.NET Core 1.0 上運行,它是跨平臺的。如果你選擇它創建項目,你將能夠在任何地方運行您的應用程式,但您不能引用"完整的".NET Framework 程式集
- ASP.NET Core Web應用程式在.NET 框架上運行。那就是新的 ASP.NET Core 1.0 ,統一了 MVC 和 Web API,不支持WebForms,但在Windows的.NET 框架上運行。這裡有同學就有疑問了,最新的Mono 4.6 也實現了.NET 4.5的API,這個項目模板的應用能否在Mono上跑呢,答案應該是不行,因為Mono的底層編譯器和運行時還沒有和.NET Core統一,不過Mono正在路上,已經開始統一底層的編譯器和運行時,具體大家可用去https://trello.com/b/vRPTMfdz/net-framework-integration-into-mono ,瞭解具體的工作進展,下個穩定版本Mono 4.8應該就可以支持了,具體可以參考 Dockerized .NET Core 1.0.1 and .NET Framework on Mono 4.7。
我們選擇ASP.NET Core Web應用程式在.NET 框架上運行模板創建項目,創建出來是這樣的:
接著我們再創建2個.NET Framework 4.5的庫,然後在asp.net core應用裡面引用:
我們來看asp.net core項目的project.json, 不久的將來在Visual Studio 2017 RC發佈的時候,project.json 的功能會和csproj以及msbuild 合併在一起, 你會註意到 ClassLIbrary1 沒有列出的最高級別依賴項節點下,但作為一種框架特定依賴像這樣:
此外請註意,在這種情況下它是一種type="project"的依賴關係,在這種情況下,我沒有建立 NuGet 包來進行引用。不過因為 .NET Core toolin 是在預覽中有一些缺陷,這些缺陷要等等工具完善來修複。