這使我困惑。我瞭解DNX和.NET Core CLI只是運行.NET Core應用程序的工具。如果這只是工具爲什麼從一個到另一個的遷移需要更改代碼?
DNVM/DNU/DNX不只是工具。 DNX也是運行時間。它負責引導CLR並調用你的應用程序。這也意味着它有很多關於運行時和應用程序的信息,例如依賴關係,環境等。通過可以注入的各種服務將這些信息提供給應用程序,如IRuntimeEnvironment
,IApplicationEnvironment
和ILibraryManager
。
反過來,MVC有一個叫做IAssemblyProvider
的服務。這負責提供MVC應搜索控制器的組件,以及其他內容。此默認實現基於ILibraryManager
,它是DNX特定的服務。這意味着當您切換到基於dotnet的運行時時,它將不再運行,而運行時會被包關閉,而不是使用單獨的工具,如DNVM。
爲了解決這個問題,MVC團隊首先開始依靠DNX服務和更新的dotnet替代方案(Microsoft.Extensions.DependencyModel
)。你可以看到代碼here。它主要檢查DNX特定的ILibraryManager
是否可用,如果不可用,則回退到替代的dotnet-API。
這種方法的問題在於,當大多數人開始將它與dotnet工具和運行時一起使用時,它會在MVC中引入額外的(大多數情況下)冗餘依賴關係(Microsoft.Extensions.PlatformAbstractions.Dnx
)。記得; DNX等仍然是測試版的東西,並將由RTM消失。
相反,他們選擇了當前的解決方案;有一個單獨的包,Microsoft.AspNetCore.Mvc.Dnx
,其中包含基於DNX的用於MVC的IAssemblyProvider
。你可以看到AddMvcDnx
方法的作用是here。
這意味着少數跟隨預發佈版本的用戶將不得不對他們的代碼進行一些更改,以便仍然在DNX上運行(儘管我將盡快轉移到dotnet上),而新用戶會只需像往常一樣打電話AddMvc
。
我希望這有一些意義。它可以真正令人困惑:)
感謝您的答案。我瞭解重命名的事情,也明白啓動應用程序的需要。但是,在今天的公告中,我們甚至會看到「特定的DNX代碼」,如'services.AddMvcDnx()'方法和DNX包裝本身。爲什麼有DNX特定的代碼? – user1620696
「這是RC1到RC2」這顯然是錯誤的。這絕對是從DNX到dotnet的轉變,需要更改代碼。當然,從RC1到RC2需要做很多改變,但問題主要是關於DNX vs. dotnet和「AddMvcDnx」方法。 – khellang