Могу ли я создать веб-приложение ASP.NET Core с помощью Microsoft Dotnet CLI?

Я просмотрел несколько веб-сайтов и обнаружил, что .NET Core использует .NET CLI (интерфейс командной строки .NET). Я создал консольное приложение с использованием .NET CLI, и оно работает нормально

Но когда я создаю веб-приложение ASP.NET Core с помощью Yeoman и запускаю команду «dotnet restore», я получаю следующую ошибку:

Microsoft.CodeAnalysis.CSharp 1.1.0-rc1-20151109-01 несовместим с DNXCore, Version = v5.0.

Я тоже пробовал

dotnet restore -s https://api.nuget.org/v3/index.json

Но получаю ту же ошибку.

Если я запускаю «dnu restore», он работает нормально, поэтому у меня вопрос: могу ли я использовать .NET CLI для веб-приложения или он ограничен только консольным приложением?

Я прошел по ссылкам

https://github.com/dotnet/cli & http://dotnet.github.io/getting-started/

но не нашли подробностей, поддерживает ли оно веб-приложение ASP.NET Core или нет?


person Banketeshvar Narayan    schedule 20.02.2016    source источник
comment
Вы также создали свой проект с помощью dotnet-cli (с помощью команды dotnet new? Похоже, что ваши dependencries в project.json все еще относятся к rc1. Dotnet-cli работает только для ночных сборок rc2 (официальной сборки rc2 пока нет)   -  person Tseng    schedule 20.02.2016
comment
когда я использую dotnet new, он создает консольное приложение C #. Я не нашел никакой команды для создания веб-приложения ASP.NET Core с использованием интерфейса командной строки, поэтому для создания шаблонов я использую yeoman, а затем использую интерфейс командной строки для восстановления и сборки.   -  person Banketeshvar Narayan    schedule 20.02.2016
comment
Но вы можете сравнить project.json файлы и сравнить зависимости, которые различаются. dotnet-cli все еще находится на ранней стадии, а ASP.NET Core 1.0 находится в процессе полного перехода на него (отсюда и задержка с выпуском ASP.NET Core 1.0 RC2, который должен был выйти в январе). В официальном фиде nuget 3 есть только официальные релизы (RC1). Возможно, вам потребуются более новые версии зависимостей. На dotnet.myget.org/gallery/cli-deps есть канал myget, содержит более свежую версию Microsoft.CodeAnalysis.CSharp и новые пакеты Microsoft.AspNetCore.Mvc. *   -  person Tseng    schedule 20.02.2016


Ответы (3)


Я потратил добрый час на то, чтобы поиграть с ним, и у меня появилась "страница приветствия".

Как я и подозревал, вы пытались использовать dotnet-cli со своим проектом в стиле dnx и использовали неправильный канал nuget (официальный, а не ночные каналы myget).

Для этого демонстрационного проекта просто создайте новую папку и запустите dotnet new. Это создает три файла: NuGet.Config, project.json и Program.cs. Вы можете удалить более поздний и просто создать Startup.cs снизу.

Startup.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;

namespace AspNetCoreCliDemo
{
    public class Startup
    {
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app)
        {
            app.UseIISPlatformHandler();
            app.UseWelcomePage();
        }

        // This doesn't work right now, as it can't resolve WebApplication type
        //public static void Main(string[] args) => WebApplication.Run<Startup>(args);

        // Entry point for the application.
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                        .UseDefaultConfiguration(args)
                        .UseServer("Microsoft.AspNetCore.Server.Kestrel")
                        .UseIISPlatformHandlerUrl()
                        .UseStartup<Startup>()
                        .Build();

            host.Run();
        }
    }
}

project.json:

{
  "version": "1.0.0-*",
  "compilationOptions": {
    "emitEntryPoint": true
  },

  "dependencies": {
    "NETStandard.Library": "1.0.0-rc2-*",
    "Microsoft.AspNetCore.Diagnostics": "1.0.0-rc2-*",
    "Microsoft.AspNetCore.IISPlatformHandler": "1.0.0-rc2-*",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-*"
  },

  "frameworks": {
    "dnxcore50": { }
  },

  "exclude": [
    "wwwroot",
    "node_modules"
  ],
  "publishExclude": [
    "**.user",
    "**.vspscc"
  ]
}

Примечание. На данный момент поддерживается только dnxcore псевдоним.

И последнее, но не менее важное: NuGet.Config, который работал в моем случае:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <!--To inherit the global NuGet package sources remove the <clear/> line below -->
    <clear />
    <add key="cli-deps" value="https://dotnet.myget.org/F/cli-deps/api/v3/index.json" />
    <add key="dotnet-core" value="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" />
    <add key="api.nuget.org" value="https://api.nuget.org/v3/index.json" />
  </packageSources>
</configuration>

Я не добился успеха с двумя каналами по умолчанию (api.nuget.org и dotnet-core), так как не смог разрешить несколько зависимостей. После добавления канала "cli-deps" все пакеты были разрешены и dotnet run работали. Он будет прослушивать порт "http://localhost:5000" и обслуживать страницу приветствия.

Вы можете получить сообщение об ошибке о наличии нескольких точек входа, потому что у вас есть метод Main как в Program.cs, так и в Startup.cs. Просто удалите Program.cs.

Это должно служить отправной точкой.

dotnet-cli на данный момент еще не поддерживает команды (ранее определенные в файле project.json).

person Tseng    schedule 20.02.2016
comment
Спасибо за ответ .. но он содержит много сложностей и обходных путей. Если у него так много сложностей, почему я должен выбирать CLI. Я использую команды scaffolding и dnu и dnx. Итак, что такое инструмент или команда формирования шаблонов для создания веб-приложения ASP.NET Core с интерфейсом командной строки. - person Banketeshvar Narayan; 21.02.2016
comment
@Banketeshvar Narayan Вы как бы прыгаете с ружья в ASP.NET, используя CLI. Это очень большое изменение в направлении, которое все еще находится в стадии масштабной разработки, и для него нет дорожной карты. Инструменты создания шаблонов для ASP.NET Core с использованием интерфейса командной строки еще не существуют ... RC2 доступен только через ночные сборки и не готов для бета-версии / общедоступного использования. - person cygnim; 21.02.2016
comment
Спасибо @Phasiq за информативный комментарий. Я намерен не обвинять какой-либо инструмент, а прояснить мои сомнения. Думаю, лучше дождаться официального релиза RC2. - person Banketeshvar Narayan; 21.02.2016
comment
@Phasiq: Это не меньше, чем прыгать на фургоне RC1. Вам придется внести множество изменений, когда появится RC2, независимо от того, начинаете ли вы с RC2 или RC1. В ночных сборках RC2 вам просто нужно ожидать, что восстановление пакета будет чаще завершаться ошибкой, когда вы добавляете новые зависимости или меняете что-то, особенно если вы используете подстановочные знаки в номерах версий. Хотя технически вы можете исправить номера версий и остаться на этой версии для разработки. Ни один из них не готов к производству, и если это большой проект, на его завершение могут уйти месяцы, к тому времени должен быть выпущен ASP.NET Core 1.0 ... Я надеюсь: P - person Tseng; 21.02.2016
comment
@Tseng, я отвечал на вопрос OP конкретно о строительных лесах, что такого рода помощь еще не доступна в версии CLI. Для пользователей, которым требуется немного больше помощи в начале, эта помощь в RC2 в настоящее время не существует. Вы не можете просто использовать dotnet new и получить рабочий проект MVC с CLI, и пока еще нет доступных пакетов для создания лесов Yeoman. Между тем, RC1 определенно уже имеет такую ​​возможность, поскольку вы можете просто «Файл»> «Новый проект» прямо из Visual Studio. - person cygnim; 22.02.2016

Короткий ответ

Для ASP.NET Core rc1 мы используем dnx и dnu.

Для ASP.NET Core rc2 мы используем dotnet.

Более длинный ответ

Я просмотрел несколько веб-сайтов и обнаружил, что .NET Core использует .NET CLI (интерфейс командной строки .NET). Я создал консольное приложение с использованием .NET CLI, и оно работает нормально.

ASP.NET Core rc2 также является консольным приложением. То есть это консольное приложение, которое запускает уровень размещения ASP.NET.

Но когда я создаю веб-приложение ASP.NET Core с помощью Yeoman и запускаю команду «dotnet restore», я получаю следующую ошибку ...

Я считаю, что вы выполняете эти команды:

yo aspnet
? What type of application do you want to create? Web Application
? What's the name of your ASP.NET application? MyApp

Это создает проект rc1 ASP.NET Core. В этом можно убедиться, посмотрев на полученные зависимости файла project.json. Все говорят rc1-final. Результат: вы не можете построить их с помощью командной строки dotnet. Вам все равно придется использовать формулы dnu build и dnx <command>.

... могу ли я использовать .NET CLI и для веб-приложений, или это ограничено только консольным приложением?

В ASP.NET Core rc1 dnx.exe сделал вызов new WebHostBuilder(), поэтому нам нужно использовать dnx для запуска нашего веб-приложения. В ASP.NET Core rc2 консольное приложение, содержащее наше веб-приложение, выполняет собственный вызов new WebHostBuilder(), поэтому мы можем использовать dotnet интерфейс командной строки для запуска приложения. Так...

  • Нет, вы не можете использовать dotnet CLI для веб-приложений ASP.NET Core rc1, потому что dnx.exe загружает уровень хостинга ASP.NET.
  • Да, вы можете использовать его для веб-приложений ASP.NET Core rc2, потому что ваше консольное приложение загружает сам уровень хостинга ASP.NET.
person Shaun Luttin    schedule 21.02.2016
comment
@BanketeshvarNarayan Ваш вопрос заключался в том, могу ли я использовать .NET CLI для веб-приложений или это ограничено только консольным приложением? Что я бы сделал в этой ситуации, так это принять ответ на ваш исходный вопрос, а затем задать еще один вопрос о ваших новых требованиях. - person Shaun Luttin; 21.02.2016

Я не знаю, в чем именно заключается ваша ошибка, но это может быть полезно:

По сути, вам нужно добавить соответствующий импорт в свой project.json:

    "frameworks": {
        "dnxcore50": { 
            "imports": "portable-net451+win8"
        }
    }

(Как размещено здесь: https://github.com/aspnet/Home/issues/1265)

Это были мои ошибки:

Errors in /webserver/project.json
    Package Microsoft.CodeAnalysis.CSharp 1.1.0-rc1-20151109-01 is not compatible with dnxcore50 (DNXCore,Version=v5.0). Package Microsoft.CodeAnalysis.CSharp 1.1.0-rc1-20151109-01 supports:
      - net45 (.NETFramework,Version=v4.5)
      - portable-net45+win8 (.NETPortable,Version=v0.0,Profile=Profile7)
    Package Microsoft.CodeAnalysis.Common 1.1.0-rc1-20151109-01 is not compatible with dnxcore50 (DNXCore,Version=v5.0). Package Microsoft.CodeAnalysis.Common 1.1.0-rc1-20151109-01 supports:
      - net45 (.NETFramework,Version=v4.5)
      - portable-net45+win8 (.NETPortable,Version=v0.0,Profile=Profile7)
    One or more packages are incompatible with DNXCore,Version=v5.0.

Я создал веб-приложение .Net с помощью генератора кода Swagger из http://editor.swagger.io/#/ < / а>

После добавления импорта dotnet restore заработал без проблем.

person Andrei    schedule 11.07.2016