新的 ASP.NET 5 (ASP.NET MVC 6) 項目類型能否以正常 .NET 為目標?
新的 ASP.NET 5 (vNext) 做了一些很棒的事情,比如將 Bower、Grunt 和其他客戶端 Web 開發工具集成到項目中。
然而,我開始意識到(在製作了許多這樣的項目並進行了划痕之後)似乎所有這些都僅限於可以針對新的“雲”或“跨平台”(KRE-CLR)堆棧的項目,與正常的 .NET 堆棧相反。儘管以這個新堆棧為目標會很好,但這嚴重限制了此時可以定位的內容(基本上您現在引用的任何 dll / 項目都不是 ASP.NET 5 類庫,因此無法引用,所以你不能依賴這個?)。
我錯過了什麼嗎?新的 ASP.NET 5 (ASP.NET MVC 6) 項目類型能否以正常 .NET 為目標?
如果答案是否定的,即使現在不可能,團隊是否計劃至少將其中一些客戶端功能(bower、grunt 等)添加到“正常”ASP.NET (MVC 5) 項目中未來?
在Scott Guthrie 的一篇新文章中,他似乎確認 ASP.NET 5 絕對應該與完整的 .NET 框架一起使用,事實上,他甚至說:
“您現有的應用程序和庫將無需修改即可執行
$$ full .NET $$執行。”
這是完整的引用:
ASP.NET 5 與兩個執行時環境一起工作,從而在託管應用程序時為您提供更大的靈活性。兩個執行時選擇是:(
$$ a $$ .NET 核心…$$ b $$ .NET Framework – .NET Core 的 API 目前比完整的 .NET Framework 更受限制,因此您可能需要修改現有應用程序以面向 .NET Core。如果您不想更新您的應用程序,您可以改為在完整的 .NET Framework(版本 4.5.2 及更高版本)上執行 ASP.NET 5 應用程序。執行此操作時,您可以訪問完整的 .NET Framework API 集。您現有的應用程序和庫無需修改即可在此執行時上執行。
雖然我很高興聽到這個消息,但這個問題和其他發帖人討論的問題使得這個目標似乎與目前的現實不符。簡單來說,我們不僅需要能夠以完整的 .NET 為目標,還需要簡單地引用目前的 .NET dll/程序集。目前,似乎唯一有效的程序集是針對 .NET Core 建構的程序集。
那麼這個困境的答案呢?我相信答案是:它來了。這根據新的 Visual Studio 2015 CTP 6 發行說明:
系統引用又回來了
您現在可以使用“添加引用”對話框輕鬆添加對系統程序集的引用,這將對您的 project.json 文件進行適當的修改…我們也在努力支持為將來的預覽版本添加對使用者程序集的引用.
(那篇文章的圖片)
那麼,這是個好消息!這也證明了,根據這些文章,這些確實是迄今為止的缺點(並且目前仍然存在於使用者程序集)。
根據我對 Visual Studio CTP 5 最新版本的經驗,這裡有幾件事情需要考慮:
- 在 CTP 5 中,它現在允許您添加對正常類庫的引用。
- 在 ASP.net vNext 中,他們針對不同的框架來支持跨平台,這是新支持的。例如,如果您在 frameworks (project.json) 中僅選擇 aspnet50 並且執行時是 CLR,那麼它將使用完整的 .NET Framework,所以您可以使用 ASP.NET MVC 5 中的幾乎所有功能。如果您想使用 aspnetcore50,那麼可能會有很多功能不可用,甚至很多功能正在開發中。
- 如果您已經建構了自己的類庫並且想要添加對它的引用,那麼在 VS 2015 預覽版和 CTP5 中,您必鬚髮布 NUGET 包,然後使用該包來引用該 DLL。
- 如果您想使用正常的 .NET 程序集(例如 System.DirectoryService),請確保您在 project.json 中只有一個框架。
更新
我假設您使用的是 Visual Studio 2015 CTP 5。
這是我的 project.json 的副本
{ /* Click to learn more about project.json http://go.microsoft.com/fwlink/?LinkID=517074 */ "webroot": "wwwroot", "version": "1.0.0-*", "dependencies": { "EntityFramework.SqlServer": "7.0.0-beta2", "EntityFramework.Commands": "7.0.0-beta2", "Microsoft.AspNet.Mvc": "6.0.0-beta2", /* "Microsoft.AspNet.Mvc.WebApiCompatShim": "6.0.0-beta2", */ "Microsoft.AspNet.Diagnostics": "1.0.0-beta2", "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-beta2", "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-beta2", "Microsoft.AspNet.Security.Cookies": "1.0.0-beta2", "Microsoft.AspNet.Server.IIS": "1.0.0-beta2", "Microsoft.AspNet.Server.WebListener": "1.0.0-beta2", "Microsoft.AspNet.StaticFiles": "1.0.0-beta2", "Microsoft.Framework.ConfigurationModel.Json": "1.0.0-beta2", "Microsoft.Framework.CodeGenerators.Mvc": "1.0.0-beta2", "Microsoft.Framework.Logging": "1.0.0-beta2", "Microsoft.Framework.Logging.Console": "1.0.0-beta2", "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-beta1" }, "commands": { /* Change the port number when you are self hosting this application */ "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000", "gen": "Microsoft.Framework.CodeGeneration", "ef": "EntityFramework.Commands" }, **"frameworks": { "aspnet50": { "dependencies": { "MyCoolLibrary": "1.0.0-*" } } },** "exclude": [ "wwwroot", "node_modules", "bower_components" ], "packExclude": [ "node_modules", "bower_components", "**.kproj", "**.user", "**.vspscc" ], "scripts": { "postrestore": [ "npm install" ], "prepare": [ "grunt bower:install" ] } }我在 MyCoolLibrary 中的自定義類庫,它被添加到框架依賴項而不是依賴項中。我還使用 .NET Framework 4.5 建構了我的庫。(不是 4.5.3)所以它也支持舊版本。
如果您使用的是 Visual Studio 2015 預覽版,那麼上述內容也將起作用。
