Представляем вам последнюю статью из цикла по разработке на ASP.NET Core. В данной статье вы узнаете как можно написать свое первое приложение ASP.NET Core на Mac.



Цикл статей по ASP.NET Core


1. ASP.NET Core на Nano Server.
2. Создание внешнего интерфейса веб-службы для приложения.
3. Создание первого веб-API с использованием ASP.NET Core MVC и Visual Studio.
4. Развертывание веб-приложения в службе приложений Azure с помощью Visual Studio.
5. Ваше первое приложение на Mac c использованием Visual Studio Code.

Подготовка среды разработки и формирование шаблонов приложений с помощью Yeoman


Для начала вам необходимо загрузить и установить .NET Core и Visual Studio Code с расширением C#.

Проект ASP.NET Core, необходимо создать по этой инструкции.

Разработка приложений ASP.NET Core на Mac с помощью Visual Studio Code


Запустите Visual Studio Code.



Выберите пункт File > Open и перейдите к пустому приложению ASP.NET Core.


В Терминале или оболочке bash выполните команду dotnet restore, чтобы восстановить зависимости проекта. Другой способ — выполнить команду command shift p в Visual Studio Code и затем ввести dot, как показано ниже:



Можно выполнять команды прямо в Visual Studio Code, в том числе dotnet restore и использовать другие инструменты, указанные в файле project.json, а также выполнять задачи, указанные в файле .vscode/tasks.json.

Этот пустой шаблон проекта просто отображает «Hello World!». Откройте Startup.cs в Visual Studio Code, чтобы посмотреть, как он сконфигурирован:


Для тех, кто только приступает к использованию Visual Studio Code (или Code, для краткости), следует заметить, что данный продукт не только имеет удобный, простой и отзывчивый интерфейс, обеспечивающий быструю работу с файлами, но он также предоставляет инструменты для наиболее эффективного написания кода.

В левой панели навигации находятся четыре значка, представляющие четыре viewlet:

  • Explore
  • Search
  • Git
  • Debug
  • Extensions

Explore viewlet позволяет быстро перемещаться по системе каталогов, а также облегчает обзор файлов, с которыми вы работаете. При наличии несохраненных изменений в файлах специальный значок на экране будет уведомлять об этом; упрощается процесс создания новых файлов и папок (для этого не надо открывать новое окно). Также удобно пользоваться командой Save All (Сохранить все), доступной в меню, которое появляется при наведении курсора мыши.

Code интегрируется с Git, если он установлен на вашем компьютере. При помощи Git viewlet можно создавать новые репозитории, подтверждать изменение кода, отправлять изменения.


Debug viewlet поддерживает интерактивную отладку приложений.

Кроме того, в редакторе Code есть множество замечательных функций. Вы увидите, что неиспользованные операторы using будут подчеркнуты и могут быть удалены автоматически при помощи command ., если значок лампочки отображается на экране. Также можно видеть, сколько ссылок на классы и методы есть в проекте. Если вы переходить с Visual Studio, то вы можете использовать многие знакомые сочетания клавиш, например, command k c, чтобы закомментировать блок кода или command k u, чтобы раскомментировать его.

Локальный запуск при помощи Kestrel


В данном примере мы используем Kestrel в качестве веб-сервера. Его конфигурация хранится в файле project.json, в котором он указан как зависимость.

{
  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.0",
      "type": "platform"
    },
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",
    "Microsoft.AspNetCore.Mvc": "1.0.0",
    "Microsoft.AspNetCore.Razor.Tools": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    },
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0",
}
}

  • Выполните команду dotnet run, чтобы запустить приложение.
  • Введите в адресной строке localhost:5000.
  • Чтобы остановить веб-сервер, нажмите Ctrl+C.

Публикация в Azure


После создания приложения можно использовать интеграцию с Git, встроенную в Visual Studio Code, для отправки обновлений в Microsoft Azure.

Инициализация Git


Инициализируйте Git в папке, в которой вы работаете. Нажмите на Git viewlet, затем нажмите на кнопку Initialize Git repository.


Добавьте сообщение подтверждения и нажмите enter, или нажмите на «галочку», чтобы подтвердить файлы.


Git отслеживает изменения, поэтому если вы обновили файл, Git viewlet отобразит файлы, которые изменены с момента последнего подтверждения.

Инициализация веб-сайта Azure


Развернуть приложение в Azure Web Apps можно при помощи Git.

  • Создайте новое веб-приложение в Azure. Если у вас нет учетной записи в Azure, вы можете создать бесплатную пробную учетную запись.
  • Включите для веб-приложения в Azure поддержку непрерывного развертывания при помощи Git.

Запишите URL Git для веб-приложения на портале Azure:


В окне Терминала добавьте удаленный репозиторий azure с URL-адресом Git, который вы записали ранее.

git remote add azure https://ardalis-git@firstaspnetcoremac.scm.azurewebsites.net:443/firstaspnetcoremac.git

Чтобы развернуть приложение, отправьте его в репозиторий master.

git push azure master


Откройте в браузере только что развернутое приложение. Должна отобразиться надпись Hello World!
Поделиться с друзьями
-->

Комментарии (18)


  1. TSR2013
    23.11.2016 20:55

    А не подскажете, а когда будет исправлено https://github.com/dotnet/cli/issues/3185
    В кратце в Ubuntu 14.04(libcurl 7.35.0) происходит segfault на dotnet restore в libcrypto


    (gdb) bt
    #0  0x00007f177e2bdd4d in ?? () from /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0
    #1  0x00007f177e2b8c6b in X509_verify_cert () from /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0
    #2  0x00007f179fee7925 in ?? ()
    #3  0x00007f175f132c00 in ?? ()
    #4  0xbafbcb4b7ab40f52 in ?? ()
    #5  0x000000000003ac21 in ?? ()
    #6  0x00007f1818856f90 in vtable for InlinedCallFrame () from /home/john/dev/tools/dotnet/shared/Microsoft.NETCore.App/1.0.1/libcoreclr.so
    #7  0x00007f175f1335e8 in ?? ()
    #8  0x00007f17a000cec0 in ?? ()
    #9  0x00007f17a000cec0 in ?? ()
    #10 0x00007f175f132c00 in ?? ()
    #11 0x00007f179fee7925 in ?? ()
    #12 0x00007f175f132ca0 in ?? ()
    #13 0x00007f17a000cec0 in ?? ()
    #14 0x00007f17803b9e60 in ?? ()
    #15 0x00007f1774087ef0 in ?? ()
    #16 0x0000000000000000 in ?? ()


    1. Razaz
      23.11.2016 21:11

      Вроде закрыт уже?

      Problem was resolved by downgrading to libcurl3=7.38.0 (Jessie's version), per @tomciaaa's suggestion (after reading the last sentence carefully).


      1. TSR2013
        23.11.2016 21:19

        Ну у меня libcurl 7.35. Я обновил до preview3 и ничего не поменялось. Возможно просто пора перебираться на 16.04


        1. Razaz
          23.11.2016 22:25

          https://github.com/dotnet/cli/issues/4109 Вот тут еще про него. Может обновить libcurl до 7.38.0 попробовать?


          1. TSR2013
            23.11.2016 22:45

            Ubuntu 14.04 поддерживает максимально 7.35.0. Можно конечно альтернативные репозитории поискать либо из исходников собрать, но мне кажется проще наверное обновить до 16.04


  1. TSR2013
    23.11.2016 22:45
    -2

    del


  1. Diaskhan
    24.11.2016 06:29

    Вообще прозвучит странно, Но предположу ответить следующей формулировкой, net core отличается своей быстротой в отличие от старшего брата, на Techempower он действительно быстр
    Прирост производительности был 2,120 rps на Mono, а стал 1,822,366 rps Феноменальный прирост 85,900%.


    https://www.techempower.com/blog/2016/11/16/framework-benchmarks-round-13/


    То есть в виду того что ASP был сломан уже два раза, можно считать что netcore это микрофреймворк по аналогии
    как Laravel и Lumen.
    Из ORM только недавно починили интеграцию с EF. Когда будет поддерживать другие ОРМ один бог знает.
    Господа Net.core это микрофреймворк со вытекающими отсюда последствиями.


    1. dotnetdonik
      24.11.2016 09:57
      -1

      Тест tech empower по text plain Json, не лучший пример, они используют не свои сокеты, а p/invoke Libuv- посмотрите как он с базой работает, полагаю со своим .net I/o уступая в 5-6 раз конкурентам.


      1. dotnetdonik
        24.11.2016 10:13

        и опять же, не следует забывать что в Asp.net со статическим httpcontext и велосипедом под него в виде aspnetsynccontext были очень грубые ошибки дизайна которые просто удивительно как прожили 15 лет, то что их убрали и теперь используют что бы продать новый Фреймворк не очень честно со стороны мс


      1. Razaz
        24.11.2016 14:57

        Plain-Text показывает производительность чистого решения. С базой там от многих факторов зависит. Сейчас вроде как либы подтягивают. На Windows Там совсем другая картина. Жалко что в тесты не попало.


      1. Razaz
        24.11.2016 15:04

        Кстати будет интересно посмотреть на перформанс когда System.IO.Pipelines зарелизят.


    1. Razaz
      24.11.2016 15:02

      А какие последствия? И почему микро? Там есть все кроме прибитого гвоздями ОРМа и это очень классно.
      Да и Dapper не ОРМ уже?
      В моем понимании микро это Nancy.


  1. worldxaker
    24.11.2016 09:28
    +2

    очень хочется увидеть статью про dotnet core 1.1


    1. Schvepsss
      25.11.2016 11:39

      Спасибо за фидбэк. :)


  1. dotnetdonik
    24.11.2016 10:03

    Vs code становится приятней, но подсветка работает не всегда правильно, solution на несколько проектов Omni sharp не всегда подхватывает с первого раза с intelli sense по другим проектам, приходится переключатся между проектам, или реалоадить солюшин постоянно добавив проект и reference, не удобно.


    1. kxl
      24.11.2016 10:40

      Да, тоже обнаружил, что новый solution с проектами по .Net Core, созданный в VS2015, не подхватывается Omni Sharp вообще… Отправил Issue на Github, поставили статус Bug — там действительно странный Linq на получение файлов проектов — не все варианты отрабатывает. Назначили исправление к версии 1.6 (текущая 1.5.3), но, может, раньше починят…
      Да, JetBrains Rider вообще эксепшены выдает на этом solution — так разработчики сослались на то, что у них не поддерживается установленная у меня версия .Net Core SDK. Я вообще не понимаю как так закладываться на какую-то старую версию, может к тому времени как Rider родится SDK уже несколько мажорных версий перешагнет…


      1. kxl
        26.11.2016 18:47

        По моему Issue баг пофиксили и у меня теперь всё работает как надо!
        Кто хочет протестировать на своём проекте — вот ссылка на Issue
        Ссылка на бета-версию 1.6.
        Как ставить бету здесь.


  1. 0xFE
    28.11.2016 01:54

    проект ASP.NET Core, необходимо создать по этой инструкции.

    а «dotnet new -t web» не проще?