2017年7月21日星期五

ASP.NET Core的Dependency Hell & Version Hell

由我早前所寫的問題集當中,可見.NET Core自身的版本跟其他Package的兼容性有極大關係,暫時Microsoft似乎未解決Dependency Hell問題,即使外國,已經有多位開發人員抱怨,認為.NET Core暫時不適合Production用,問題大多數跟我一樣出於開發過程上有太多難以解決的問題。

我們先了解一下.NET Core Runtime/SDK目前為止的版本。
在Github上的Release Notes可以看到有多個版本,而.NET Core Runtime and SDK download archive再分開LTS版和Current Release版,當中Runtime配搭著不同SDK版本下載。
官方解釋LTS和Current Release的分別是:

Long Term Support (LTS) releases are -
- Supported for three years after the general availability date of a LTS release
- Or one year after the general availability of a subsequent LTS release
Current releases are -
- Supported within the same three-year window as the parent LTS release
- Supported for three months after the general availability of a subsequent Current release
- And one year after the general availability of a subsequent LTS release

在Nuget上,亦不見得好。.NET Core Package頁上,舊版本的更新時間可能比新版本還要新,實在有點混亂。

正常情況下,Production用都不會找Preview的2.0版本,而是用1.x的Stable版吧?
假如我想安裝1.1.2 Stable版,配合Visual Studio 2015使用,我的疑惑隨之而來,因為在另一個Core官方網頁上卻這樣說明:

Note, this legacy download includes .NET Core 1.0.1. The current Runtime version is available under the Runtime tab.



為了能夠使用VS2015,我當然會妥協安裝圖中的"NET Core tools Preview 2",即使它的Core是1.0.1版本,我最多之後人手做版本更新,但早前經驗就是,Core Tool for VS2015根本配合不了。
即使.NET高手中的高手,身為Microsoft開發部門員工的Scott Hanselman,他自己都曾經試搞到一頭煙
由ASP.NET官方討論區上找到只屬冰山一角的討論貼 - What version Visual Studio and Runtime is best to Use for .Net Core

currently the .net core runtime is stable, production ready and supported. The tooling is still at alpha/beta.


我同意以上所說的,現在的NET Core tools,安裝過後,建立專案後還欠這樣那樣,問題頻繁。
為什麼會這樣呢?我想其中一個原因是Microsoft現在大概只想盡快把CLI做好,跟過往不同,現在還有Visual Studio CodeVisual Studio for Mac,都是依賴CLI在背後工作,固然會投放多一點資源。

第二個原因是,VS2017不再使用project.json格式,R.I.P project.json – Out with the new, in with the old,現在2017年7月下載的Core Tool for VS2015已經有一年時間沒更新過,反正VS2017都推出了一段日子,MS似乎不打算再更新Core Tool吧。
如我一樣使用VS2015的人,想做ASP.NET Core還是升級去VS2017吧。

另一個重要的因素是ASP.NET Core還在朝改暮變,將來2.0都有大轉變 - Microsoft's .NET-mare for developers: ASP.NET Core 2.0 won't work on Windows-only .NET

我非常推薦大家看一看這個Blog Post - Making sense of the different versions of .NET Core (runtime and SDK)
正正就是上述我想表達的。

我自己還未用上VS2017,不知道對.NET Core的開發體驗如何,但在眾多流行Web開發技術PHP-Laravel/JavaEE-Spring/Python-Django/Ruby on Rails的夾攻下,.NET Core這樣的確會令人卻步甚至投資去其他的技術。

沒有留言:

發佈留言