Может ли новый тип проекта ASP.NET 5 (ASP.NET MVC 6) использовать обычный .NET?

Новый ASP.NET 5 (vNext) делает некоторые интересные вещи, такие как интеграция Bower, Grunt и других инструментов веб-разработки на стороне клиента в проект.

Тем не менее, на меня наступает (после того, как многие такие проекты были сделаны и поцарапаны), что, похоже, все это ограничивается проектами, которые могут ориентироваться на новую "облачную" или "кросс-платформенную" (KRE-CLR) стек ТОЛЬКО, в отличие от обычного стека .NET. Столь же красиво, что и для этого нового стека, этот строго ограничивает то, на что можно ориентироваться в данный момент (в принципе, любой DLL/проект, на который вы ссылаетесь сейчас, не является библиотекой классов ASP.NET 5, поэтому на него нельзя ссылаться, поэтому вы не можете полагаться на это?).

Я что-то упустил? Может ли новый тип проекта ASP.NET 5 (ASP.NET MVC 6) использовать обычный .NET?

Если ответ НЕТ, даже если это невозможно сейчас, планируйте ли команду, по крайней мере, добавить некоторые из этих возможностей на стороне клиента (bower, grunt и т.д.) в "обычный" ASP.NET(MVC 5 ) в будущем?

Ответ 1

В новый пост Скотта Гатри, он, похоже, подтверждает, что ASP.NET 5 абсолютно должен работать с полной .NET-платформой, на самом деле, даже говоря:

"Ваши существующие приложения и библиотеки будут работать без изменений в этой [полной .NET] среде исполнения.

Здесь полная ссылка:

ASP.NET 5 работает с двумя средами среды выполнения, что дает вам большую гибкость при размещении вашего приложения. Два варианта исполнения: ([a] .NET Core... [b] .NET Framework -. API для .NET Core в настоящее время более ограничен, чем полный .NET Framework, поэтому вам может потребоваться изменить существующие приложения для целевого .NET Core. Если вы не хотите обновлять свое приложение, вы можете вместо этого запускать приложения ASP.NET 5 на полной платформе .NET Framework (версия 4.5.2 и выше), при этом у вас есть доступ к полному набору API-интерфейсов .NET Framework. Существующие приложения и библиотеки будут работать без изменений в этой среде выполнения.

Хотя я очень рад это слышать, проблемы, обсуждаемые в этом вопросе и в других плакатах, заставляют казаться, что эта целевая цель еще не соответствует нынешней реальности. Проще говоря, нам нужно не только настроить таргетинг на весь .NET, но и просто ссылаться на текущую .NET-сборку .NET. В настоящее время, похоже, единственные сборки, которые работают, построены на .NET Core.

Тогда ответ на эту дилемму? Я считаю, что ответ таков: он приближается. Это соответствует новой заметке о выпуске Visual Studio 2015 CTP 6:

Ссылки на систему возвращаются

Вы можете теперь легко добавлять ссылки на системы сборок с помощью диалогового ДОБАВЛЯТЬ литературы, которая будет внести соответствующие изменения в файл project.json... Мы также трудно на работе, чтобы включить поддержку для добавления ссылок на сборки пользователей для будущего предварительного просмотра.

enter image description here

(рисунок из этой статьи)

Итак, это БОЛЬШИЕ новости! Это также оправдывает то, что, по данным этих сообщений, это действительно были недостатки до сих пор (и до сих пор существуют для пользовательских сборок на данный момент).

Ответ 2

Согласно моему опыту с последней версией Visual Studio CTP 5, рассмотрим несколько вещей:

  • В CTP 5 теперь вы можете добавить ссылку на обычную библиотеку классов.
  • В ASP.net vNext они нацелены на другую инфраструктуру для поддержки кросс-платформы, и это новая поддержка Например, если вы только выбираете aspnet50 в frameworks (project.json), а среда выполнения 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, то и выше будет работать.

Ответ 3

Возможности клиентской стороны не связаны с dll. Они могут быть добавлены к старым проектам ASP.NET из пакетов Nuget.

Ответ 4

Я не уверен, что это решает вашу проблему, но вы можете настроить таргетинг на обычные CLR в новых проектах.

В вашем файле project.json прокомментируйте как aspnet50, так и aspnetcore50 и вместо этого используйте net45:

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

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