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

时间:2015-01-22 20:21:00

标签: asp.net .net asp.net-mvc-5 asp.net-core-mvc asp.net-core

新的ASP.NET 5(vNext)做了一些很棒的东西,比如整合Bower,Grunt和其他客户端Web开发工具into the project

然而,在我(在许多此类项目被制作和划痕之后)看来,这似乎所有这些仅限于可以针对新云计算的项目。或者跨平台' (KRE-CLR)只能堆栈,而不是常规的.NET堆栈。与目标这个新堆栈一样好,这个严重限制了目前可以定位的内容(基本上你现在引用的任何dll /项目都不是ASP.NET 5类库,所以它不能被引用,所以你不能依赖它?)。

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

如果答案为否,即使现在不可能,团队计划至少将一些客户端功能(bower,grunt等)添加到常规&#39 ; ASP.NET(MVC 5)项目未来的项目?

4 个答案:

答案 0 :(得分:4)

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

  1. 在CTP 5中,它现在允许您添加对常规类库的引用。
  2. 在ASP.net vNext中,他们针对不同的框架来支持跨平台,这是新支持的 例如,如果您只在框架(project.json)中选择aspnet50而运行时是CLR,那么它将使用完整的.NET Framework,因此您几乎可以使用ASP.NET MVC 5中的所有功能。 如果您想使用aspnetcore50,那么可能无法使用许多功能,甚至许多功能都在开发中。
  3. 如果您已经构建了自己的类库并且想要添加对它的引用,那么在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中的自定义类库,它是在框架依赖项中添加的,而不是依赖项。我也使用.NET Framework 4.5构建我的库。 (不是4.5.3)所以它也支持旧版本。

    如果您使用的是Visual Studio 2015 Preview,那么上面的内容也可以正常工作。

答案 1 :(得分:2)

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

  

&#34;您现有的应用程序和库将在[完整的.NET]运行时无需修改。&#34;

这里有完整的引用:

  

ASP.NET 5可与两个运行时环境配合使用,为您在托管应用时提供更大的灵活性。两个运行时选项是:([a] .NET Core ... [b] .NET Framework - .NET Core的API目前比完整的.NET Framework更受限制,因此您可能需要修改现有的应用程序以定位.NET Core。如果您不想更新应用程序,则可以改为运行完整的.NET Framework(版本4.5.2及更高版本)上的ASP.NET 5应用程序。执行此操作时,您可以访问完整的.NET Framework API集。您现有的应用程序和库将在此运行时无需修改即可运行。 / p>

虽然我很高兴听到这个问题,但这个问题和其他海报中讨论的问题使得这个目标目标看起来还不符合当前的现实。简单来说,我们不仅需要能够定位完整的.NET,还需要简单地引用当前的.NET dll /程序集。目前,似乎唯一可用的组件是针对.NET Core构建的组件。

这种困境的答案呢?我相信答案是:它的到来。根据{{​​3}}:

  

系统参考已回来

     

您现在可以 使用“添加引用”对话框轻松添加对系统程序集的引用 ,这将对project.json文件进行适当的修改... 我们也在努力为将来的预览版启用支持添加对用户程序集的引用

enter image description here

(那篇文章的图片)

那么,这是个好消息!这也证明,根据这些帖子,这些确实一直存在缺陷(目前仍然存在于用户组件中)。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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

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

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