新的 ASP.NET 5 (ASP.NET MVC 6) 项目类型可以面向常规 .NET 吗?

Can the new ASP.NET 5 (ASP.NET MVC 6) project type target regular .NET?

新的 ASP.NET 5 (vNext) 做了一些很棒的事情,比如集成 Bower、Grunt 和其他客户端 Web 开发工具 into the project

然而,我突然意识到(在制作和草拟了许多此类项目之后),似乎所有这些都仅限于可以针对新 'cloud' 或 'cross-platform' 的项目( KRE-CLR) 堆栈,而不是常规的 .NET 堆栈。尽管以这个新堆栈为目标会很好,但这个 严重地 限制了此时可以瞄准的目标(基本上你现在引用的任何 dll / 项目都不是 ASP.NET 5 class库,所以不能引用,所以不能依赖这个?)。

我错过了什么吗?新的 ASP.NET 5 (ASP.NET MVC 6) 项目类型可以针对常规 .NET 吗?

如果答案是否定的,即使现在不可能,团队是否计划至少将其中一些客户端功能(bower、grunt 等)添加到 'regular' ASP.NET (MVC 5) 未来的项目?

客户端功能未连接到 dll。它们可以从 Nuget 包添加到较旧的 ASP .NET 项目。

根据我对最新版本 Visual Studio CTP 5 的体验,这里有几点需要考虑:

  1. 在 CTP 5 中,它现在允许您添加对常规 class 库的引用。
  2. 在ASP.netvNext中,他们针对不同的框架来支持跨平台,这是新支持的 例如,如果您只选择框架中的 aspnet50 (project.json) 并且运行时是 CLR,那么它将使用完整的 .NET Framework,因此您可以使用几乎所有功能,如 ASP.NET MVC 5。 如果您想使用 aspnetcore50,那么可能很多功能将不可用,甚至许多功能正在开发中。
  3. 如果您已经构建了自己的 class 库并且想要添加对它的引用,那么在 VS 2015 预览版和 CTP5 中,您必须发布 NUGET 包,然后使用该包来引用该 DLL。
  4. 如果您想使用常规的 .NET 程序集(例如 System.DirectoryService),请确保您在 project.json.
  5. 中只有一个框架

更新

我假设您使用的是 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 中我的自定义 class 库,它被添加到框架依赖项中而不是依赖项中。我还使用 .NET Framework 4.5 构建我的库。 (不是 4.5.3)所以它也支持旧版本。

如果您使用的是 Visual Studio 2015 预览版,那么上述内容也可以使用。

我不确定这是否能解决您的问题,但您可以在新项目中以常规 CLR 为目标。

在您的 project.json 文件中注释掉 aspnet50 和 aspnetcore50 并改用 net45:

{    
    "version": "1.0.0-*",
    "dependencies": {
    },

    "frameworks": {
        "net45": { 
            "dependencies": { }
        }
        /* 
        "aspnet50" : { },
        "aspnetcore50": { } */
    }
}

在 a new post by Scott Guthrie 中,他似乎确认 ASP.NET 5 绝对应该与完整的 .NET 框架一起工作,事实上,甚至说:

"Your existing applications and libraries will work without modification on this [full .NET] runtime."

完整引用如下:

ASP.NET 5 works with two runtime environments to give you greater flexibility when hosting your app. The two runtime choices are: ([a] .NET Core ... [b] .NET Framework – The API for .NET Core is currently more limited than the full .NET Framework, so you may need to modify existing apps to target .NET Core. If you don't want to have to update your app you can instead run ASP.NET 5 applications on the full .NET Framework (version 4.5.2 and above). When doing this you have access to the complete set of .NET Framework APIs. Your existing applications and libraries will work without modification on this runtime.

虽然我很高兴听到这个消息,但这个问题和其他发帖者讨论的问题使得这个目标似乎与当前的现实不符。用最简单的话来说,我们不仅需要能够以完整的 .NET 为目标,还需要简单地引用当前的 .NET dll/assemblies。目前,似乎唯一可用的程序集是针对 .NET Core 构建的程序集。

这个难题的答案呢?我相信答案是:它来了。这根据 the new Visual Studio 2015 CTP 6 release notes:

System References are back

You can now easily add references to system assemblies using the Add References dialog, which will make the appropriate modifications to your project.json file... We are also hard at work to enable support for adding references to user assemblies for a future preview release.

(图片来自那篇文章)

那么,这是个好消息!这也证明,根据这些帖子,这些确实是迄今为止的缺点(目前对于用户组件来说仍然存在)。